diff options
author | Shaun McCance <shaunm@gnome.org> | 2010-05-21 17:59:51 -0500 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2010-05-21 17:59:51 -0500 |
commit | 5c74d7b352d11c021dddb6c9f55d3a377ec82b14 (patch) | |
tree | a8ebd266f071b88be5d222ea0933a47703a4b6b6 | |
parent | bad5a499c6a7660c0cd60cfcb97e7be3c5d4b243 (diff) | |
parent | 55da84092d431ba44f17cba8a96aaac54ce02273 (diff) | |
download | yelp-5c74d7b352d11c021dddb6c9f55d3a377ec82b14.tar.gz |
Merge branch 'master' into db5
95 files changed, 15185 insertions, 15858 deletions
@@ -15,6 +15,7 @@ Makefile Makefile.in +/INSTALL /aclocal.m4 /autom4te.cache/ /compile @@ -25,7 +26,36 @@ Makefile.in /config.status /config.sub /configure +/data/gsettings_schema_validate_stamp +/data/info.xml +/data/man.xml +/data/toc.xml /depcomp +/docs/libyelp/html-build.stamp +/docs/libyelp/html.stamp +/docs/libyelp/html/ +/docs/libyelp/libyelp-decl-list.txt +/docs/libyelp/libyelp-decl.txt +/docs/libyelp/libyelp-overrides.txt +/docs/libyelp/libyelp-sections.txt +/docs/libyelp/libyelp-undeclared.txt +/docs/libyelp/libyelp-undocumented.txt +/docs/libyelp/libyelp-unused.txt +/docs/libyelp/libyelp.args +/docs/libyelp/libyelp.hierarchy +/docs/libyelp/libyelp.interfaces +/docs/libyelp/libyelp.prerequisites +/docs/libyelp/libyelp.signals +/docs/libyelp/libyelp.types +/docs/libyelp/scan-build.stamp +/docs/libyelp/sgml-build.stamp +/docs/libyelp/sgml.stamp +/docs/libyelp/tmpl-build.stamp +/docs/libyelp/tmpl.stamp +/docs/libyelp/tmpl/ +/docs/libyelp/version.xml +/docs/libyelp/xml/ +/gtk-doc.make /install-sh /intltool-extract.in /intltool-merge.in @@ -43,17 +73,27 @@ Makefile.in /po/*.gmo /po/.intltool-merge-cache /po/Makefile.in.in +/po/missing /po/POTFILES /po/stamp-it -/src/stamp-yelp-marshal.h +/po/yelp.pot /src/yelp /src/yelp-dbus.h -/src/yelp-marshal.c -/src/yelp-marshal.h /stamp-h1 /stylesheets/db-title.xsl /stylesheets/db2html.xsl +/stylesheets/info2html.xsl /stylesheets/mal2html.xsl /stylesheets/toc2html.xsl /stylesheets/yelp-common.xsl +/tests/test-bz2 +/tests/test-io-channel +/tests/test-location-entry +/tests/test-lzma +/tests/test-magic +/tests/test-settings +/tests/test-transform +/tests/test-uri /tests/test-view +/yelp.desktop +/yelp.desktop.in diff --git a/Makefile.am b/Makefile.am index 877fc979..45ca0bc7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} -SUBDIRS = libyelp src stylesheets po data tests +SUBDIRS = libyelp src stylesheets po data tests docs @INTLTOOL_DESKTOP_RULE@ @@ -27,5 +27,4 @@ DISTCLEANFILES = \ CLEANFILES = $(desktop_DATA) -DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --enable-gtk-doc - +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc @@ -1,3 +1,138 @@ +Changes in 2.31.2: +------------------ +* Location entry completions are sorted by icon and title. +* All pages have an icon, help-contents by default. +* Location entries now pulse when page is loading. +* Added bookmarks with page icons, stored per-document. +* Added previous and next menu items for linear documents. +* Refreshed error pages, look like Yelp note boxes. +* Window geometry is stored per-document. +* Added info documents, with slightly nicer formatting. +* Updated translations: + de (Mario Blättermann) + es (Jorge González) + gl (Fran Diéguez) + nb (Kjartan Maraas) + ug (Gheyret Kenji) + +Changes in 2.31.1: +------------------ +* Completely revamped document-focused interface +* New mode to show extra information for editors +* PackageKit install: links (experimental) +* Use GSettings for settings storage +* Temporarily missing features: + - man and info pages + - bookmarks + - full-text search + - printing + - list of installed help +* Updated translations: + bn_IN (Runa Bhattacharjee) + ca@valencia (Carles Ferrando) + crh (Reşat SABIQ) + id (Andika Triwidada) + kn (Shankar Prasad) + nl (Wouter Bolsterlee) + oc (Yannig Marchegay) + or (Manoj Kumar Giri) + sl (Matej Urbančič) + ug (Gheyret Kenji) + +Changes in 2.30.0: +------------------ +* Updated translations: + bn (Jamil Ahmed) + eu (Inaki Larranaga Murgoitio) + lt (Gintautas Miliauskas) + pl (Piotr Drąg) + ru (Leonid Kanter) + sv (Daniel Nylander) + vi (Clytie) + +Changes in 2.29.5: +------------------ +* Clean up GLib and GTK+ includes (Javier Jardón) +* Updated translations: + gl (Fran Diéguez) + +Changes in 2.29.4: +------------------ +* Updated translations: + th (Theppitak Karoonboonyanan) + +Changes in 2.29.3: +------------------ +* Fixed issues with xulrunner 1.9.2 + +Changes in 2.29.2: +------------------ +* Adapted to changes in gnome-doc-utils XSLT + +Changes in 2.29.1: +------------------ +* Fixed admonition graphics +* Upped gnome-doc-utils version for fancy new Mallard features +* Use accessor functions instead direct access (Javier Jardón) +* Updated translations: + ca (Jordi Serratosa) + he (Yaron Sharabani) + +Changes in 2.28.1: +------------------ +* Use g_timeout_add_seconds to reduce wakeups, bug #581260 (Javier Jardón) +* Removed debug output, bug #585829 (Vincent Untz) +* Updated translations: + en@shaw (Thomas Thurman) + lv (Peteris Krisjanis) + nn (Åsmund Skjæveland) + ru (Leonid Kanter) + +Changes in 2.28.0: +------------------ +* Updated translations: + as (Amitakhya Phukan) + ca@valencia (Carles Ferrando) + da (Ask H. Larsen) + el (Kostas Papadimas) + en_GB (Philip Withnall) + hi (Rajesh Ranjan) + hu (Gabor Kelemen) + ja (Takayuki KUSANO) + kn (Shankar Prasad) + nb (Kjartan Maraas) + or (Manoj Kumar Giri) + pt_BR (Fábio Nogueira) + ro (Lucian Adrian Grijincu) + sl (Matej Urbančič) + te (krishnababu k) + uk (Maxim V. Dziumanenko) + +Changes in 2.27.5: +------------------ +* Fixed broken history navigation for Mallard documents (Shaun McCance) +* Make sure link title roles are preserved in cache (Shaun McCance) +* Fixed jumping to anchors in Mallard documents (Shaun McCance) +* Updated translations: + bn (Jamil Ahmed) + bn_IN (Runa Bhattacharjee) + cs (Petr Kovar) + eu (Inaki Larranaga Murgoitio) + gu (Sweta Kothari) + ml (Ani) + mr (Sandeep Shedmake) + nb (Kjartan Maraas) + pa (A S Alam) + pl (Tomasz Dominikowski) + pt (Duarte Loreto) + pt_BR (Og B. Maciel) + sr (Miloš Popović) + sr@latin (Miloš Popović) + ta (ifelix) + te (krishnababu k) + tr (Baris Cicek) + zh_CN (Aron Xu) + Changes in 2.27.4: ------------------ * Make ghelp URIs work for Mallard documents (Shaun McCance) @@ -6,16 +6,13 @@ test -z "$srcdir" && srcdir=. PKG_NAME=Yelp -REQUIRED_AUTOMAKE_VERSION=1.9 -export REQUIRED_AUTOMAKE_VERSION - if ! test -f $srcdir/src/yelp.c; then echo "**Error**: Directory '$srcdir' does not look like the yelp source directory" exit 1 fi which gnome-autogen.sh || { - echo "You need to install gnome-common from Gnome CVS" + echo "You need to install gnome-common package" exit 1 } diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..a5ecb1f8 --- /dev/null +++ b/configure.ac @@ -0,0 +1,232 @@ +AC_PREREQ([2.63]) +AC_INIT([Yelp],[2.31.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=yelp],[yelp]) + +AC_CONFIG_SRCDIR([src/yelp.c]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +AM_INIT_AUTOMAKE([1.11 dist-bzip2 no-dist-gzip]) +AM_MAINTAINER_MODE([enable]) + +AM_SILENT_RULES([yes]) + +# Check for programs +AC_PROG_CC +AC_PROG_CC_C_O +AC_PROG_LN_S + +# Initialize libtool +LT_PREREQ([2.2.6]) +LT_INIT + +AC_PATH_PROGS(SED, gsed sed) + +AM_PATH_GLIB_2_0 +GLIB_GSETTINGS + +# Library dependecies +PKG_CHECK_MODULES(YELP, +[ + gio-2.0 >= 2.25.3 + gio-unix-2.0 + gtk+-unix-print-2.0 + gtk+-2.0 >= 2.16.0 + libxml-2.0 >= 2.6.5 + libxslt >= 1.1.4 + libexslt >= 0.8.1 + dbus-glib-1 + webkit-1.0 >= 1.1.15 + yelp-xsl +]) +AC_SUBST([YELP_CFLAGS]) +AC_SUBST([YELP_LIBS]) + + +GNOME_DEBUG_CHECK +GNOME_COMPILE_WARNINGS([maximum]) +GNOME_MAINTAINER_MODE_DEFINES + +MORE_WARN_FLAGS= + +if test "x$enable_debug" = "xyes"; then + AC_DEFINE([YELP_DEBUG],[1],[Enable Yelp debugging]) + AM_CFLAGS="$AM_CFLAGS -pedantic -ansi" +fi + +dnl NOTE : it appears that some systems do not like it when you use line +dnl continuation charactes to split CFLAGS into readable chunks +if test "x$GCC" = "xyes"; then + AM_CFLAGS="$AM_CFLAGS -Wall -Wno-uninitialized -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-sign-compare" +fi + +# i18n stuff +IT_PROG_INTLTOOL([0.41.0]) + +GETTEXT_PACKAGE=yelp +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", + [The gettext translation domain]) + +AM_GLIB_GNU_GETTEXT +AM_GLIB_DEFINE_LOCALEDIR([GNOMELOCALEDIR]) + +LIBLZMA_REQUIRED=4.9 +AC_ARG_ENABLE(lzma, + AS_HELP_STRING([--enable-lzma],[Enable lzma decoder support [[default=yes]]]), + [enable_lzma=$enableval], + [enable_lzma="auto"]) +if test x"$enable_lzma" = "xauto"; then + PKG_CHECK_MODULES(YELP_LZMA, + liblzma >= $LIBLZMA_REQUIRED, + enable_lzma=yes, + enable_lzma=no) +elif test x"$enable_lzma" = "xyes"; then + PKG_CHECK_MODULES(YELP_LZMA, liblzma >= $LIBLZMA_REQUIRED) +fi +if test x"$enable_lzma" = "xyes"; then + YELP_CFLAGS="$YELP_LZMA_CFLAGS $YELP_CFLAGS"; + YELP_LIBS="$YELP_LZMA_LIBS $YELP_LIBS"; + AC_DEFINE(ENABLE_LZMA, 1, [Enable lzma decoder support]) +fi +AM_CONDITIONAL([ENABLE_LZMA],[test x"$enable_lzma" != "xno"]) + +AC_ARG_ENABLE(bz2, + AS_HELP_STRING([--enable-bz2],[Enable bz2 decoder support [[default=yes]]]), + [enable_bz2=$enableval], + [enable_bz2="auto"]) +if test x"$enable_bz2" = "xauto"; then + AC_CHECK_LIB(bz2, + BZ2_bzread, + enable_bz2=yes, + enable_bz2=no) +elif test x"$enable_bz2" = "xyes"; then + AC_CHECK_LIB(bz2, BZ2_bzread) +fi +if test x"$enable_bz2" = "xyes"; then + YELP_LIBS="-lbz2 $YELP_LIBS"; + AC_DEFINE(ENABLE_BZ2, 1, [Enable bz2 decoder support]) +fi +AM_CONDITIONAL([ENABLE_BZ2],[test x"$enable_bz2" != "xno"]) + +AC_SUBST([YELP_CFLAGS]) +AC_SUBST([YELP_LIBS]) + +DATADIR=`( + case $prefix in + NONE) prefix=$ac_default_prefix ;; + *) ;; + esac + eval echo $(eval echo $datadir)/yelp +)` +AC_SUBST([DATADIR]) + + +XSL_PATH="`$PKG_CONFIG --variable=xsltdir yelp-xsl`" +XSL_DB_TITLE="$XSLT_PATH""/docbook/common/db-title.xsl" +AC_SUBST(XSL_DB_TITLE) + +XSL_DB2XHTML="`$PKG_CONFIG --variable=db2xhtml yelp-xsl`" +AC_SUBST(XSL_DB2XHTML) + +XSL_MAL2XHTML="`$PKG_CONFIG --variable=mal2xhtml yelp-xsl`" +AC_SUBST(XSL_MAL2XHTML) + +XSL_THEME_COLORS="`$PKG_CONFIG --variable=xsltdir yelp-xsl`/theme/theme-colors.xsl" +AC_SUBST(XSL_THEME_COLORS) +XSL_THEME_ICONS="`$PKG_CONFIG --variable=xsltdir yelp-xsl`/theme/theme-icons.xsl" +AC_SUBST(XSL_THEME_ICONS) +XSL_THEME_HTML="`$PKG_CONFIG --variable=xsltdir yelp-xsl`/theme/theme-html.xsl" +AC_SUBST(XSL_THEME_HTML) + +XSL_GETTEXT="`$PKG_CONFIG --variable=gettext yelp-xsl`" +AC_SUBST(XSL_GETTEXT) + +YELP_ICON_PATH="`$PKG_CONFIG --variable=icondir yelp-xsl`" +AC_SUBST(YELP_ICON_PATH) + +GLIB_GENMARSHAL="`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`" +AC_SUBST(GLIB_GENMARSHAL) + +# +# If Pango included the shared library dependencies from X11 in +# the pkg-config output, then we use that (to avoid duplicates). +# but if they were omitted to avoid binary compatibility problems +# then we need to repeat the checks. +# +if $PKG_CONFIG --exists pangoxft ; then + PANGO_PACKAGES="pangox pangoxft" +else + PANGO_PACKAGES="pangox" +fi + +x_libs="`$PKG_CONFIG --libs $PANGO_PACKAGES`" +case x_libs in + *-lX11*) pango_omitted_x_deps=no ;; + *) pango_omitted_x_deps=yes ;; +esac + +if test $pango_omitted_x_deps = yes ; then + AC_PATH_XTRA + + if test x$no_x = xyes ; then + AC_MSG_ERROR([X development libraries not found]) + else + X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS" + fi +fi + +AC_SUBST(X_LIBS) + + +# Set flags +AM_CPPFLAGS="$AM_CPPFLAGS $DEPRECATION_FLAGS" +AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS $MORE_WARN_FLAGS" + + +AC_SUBST([AM_CPPFLAGS]) +AC_SUBST([AM_CFLAGS]) +AC_SUBST([AM_LDFLAGS]) + +GTK_DOC_CHECK([1.13],[--flavour no-tmpl]) + +AC_CONFIG_FILES([ +Makefile +docs/Makefile +docs/libyelp/Makefile +docs/libyelp/version.xml +libyelp/Makefile +src/Makefile +stylesheets/Makefile +stylesheets/db2html.xsl +stylesheets/db-title.xsl +stylesheets/info2html.xsl +stylesheets/mal2html.xsl +stylesheets/toc2html.xsl +stylesheets/yelp-common.xsl +data/Makefile +data/icons/Makefile +data/icons/hicolor/Makefile +data/icons/hicolor/16x16/Makefile +data/icons/hicolor/16x16/status/Makefile +po/Makefile.in +tests/Makefile +yelp.desktop.in +]) + +AC_OUTPUT + +dnl ========================================================================== +echo " +yelp-$VERSION: + + prefix: ${prefix} + source code location: ${srcdir} + compiler: ${CC} + + Documentation: ${enable_gtk_doc} + Debug enabled: ${enable_debug} + Search backend: ${search_backend} + Enable BZ2: ${enable_bz2} + Enable LZMA: ${enable_lzma} + +" diff --git a/configure.in b/configure.in deleted file mode 100644 index 9393e438..00000000 --- a/configure.in +++ /dev/null @@ -1,298 +0,0 @@ -AC_INIT([Yelp],[2.27.4],[http://bugzilla.gnome.org/enter_bug.cgi?product=yelp],[yelp]) - -AC_CONFIG_SRCDIR([src/yelp-main.c]) -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_MACRO_DIR([m4]) - -AM_INIT_AUTOMAKE([1.9 dist-bzip2 no-dist-gzip]) -AM_MAINTAINER_MODE - - -AC_PROG_LN_S -AC_PROG_CC -AM_PROG_CC_STDC -AC_ISC_POSIX -AC_HEADER_STDC -AM_PROG_LIBTOOL -AM_PATH_GLIB_2_0 -AM_PROG_CC_C_O - -IT_PROG_INTLTOOL([0.35.0]) - -GTK_DOC_CHECK(1.9) - -GNOME_DEBUG_CHECK -GNOME_COMPILE_WARNINGS([maximum]) -GNOME_MAINTAINER_MODE_DEFINES - -MORE_WARN_FLAGS= -DEPRECATION_FLAGS= - -if test "x$enable_debug" = "xyes"; then - AC_DEFINE([YELP_DEBUG],[1],[Enable Yelp debugging]) - AM_CFLAGS="$AM_CFLAGS -pedantic -ansi" -fi - -dnl NOTE : it appears that some systems do not like it when you use line -dnl continuation charactes to split CFLAGS into readable chunks -if test "x$GCC" = "xyes"; then - AM_CFLAGS="$AM_CFLAGS -Wall -Wno-uninitialized -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-sign-compare" -fi - -GETTEXT_PACKAGE=yelp -AC_SUBST(GETTEXT_PACKAGE) -AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", - [The gettext translation domain]) - -AM_GLIB_GNU_GETTEXT - -AM_GLIB_DEFINE_LOCALEDIR([GNOMELOCALEDIR]) - -PKG_CHECK_MODULES(YELP, -[ - gio-2.0 - gio-unix-2.0 - gtk+-unix-print-2.0 - gtk+-2.0 >= 2.16.0 - libxml-2.0 >= 2.6.5 - libxslt >= 1.1.4 - libexslt >= 0.8.1 - libstartup-notification-1.0 >= 0.8 - dbus-glib-1 - rarian >= 0.7.0 - unique-1.0 - webkit-1.0 >= 1.1.15 - yelp-xsl -]) - -DATADIR=`( - case $prefix in - NONE) prefix=$ac_default_prefix ;; - *) ;; - esac - eval echo $(eval echo $datadir)/yelp -)` -AC_SUBST([DATADIR]) - -AC_SUBST([YELP_CFLAGS]) -AC_SUBST([YELP_LIBS]) - -AC_PATH_PROGS(SED, gsed sed) - -XSL_PATH="`$PKG_CONFIG --variable=xsltdir yelp-xsl`" -XSL_DB_TITLE="$XSLT_PATH""/docbook/common/db-title.xsl" -AC_SUBST(XSL_DB_TITLE) - -XSL_DB2XHTML="`$PKG_CONFIG --variable=db2xhtml yelp-xsl`" -AC_SUBST(XSL_DB2XHTML) - -XSL_MAL2XHTML="`$PKG_CONFIG --variable=mal2xhtml yelp-xsl`" -AC_SUBST(XSL_MAL2XHTML) - -XSL_GETTEXT="`$PKG_CONFIG --variable=gettext yelp-xsl`" -AC_SUBST(XSL_GETTEXT) - -YELP_ICON_PATH="`$PKG_CONFIG --variable=icondir yelp-xsl`" -AC_SUBST(YELP_ICON_PATH) - -GLIB_GENMARSHAL="`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`" -AC_SUBST(GLIB_GENMARSHAL) - -# -# If Pango included the shared library dependencies from X11 in -# the pkg-config output, then we use that (to avoid duplicates). -# but if they were omitted to avoid binary compatibility problems -# then we need to repeat the checks. -# -if $PKG_CONFIG --exists pangoxft ; then - PANGO_PACKAGES="pangox pangoxft" -else - PANGO_PACKAGES="pangox" -fi - -x_libs="`$PKG_CONFIG --libs $PANGO_PACKAGES`" -case x_libs in - *-lX11*) pango_omitted_x_deps=no ;; - *) pango_omitted_x_deps=yes ;; -esac - -if test $pango_omitted_x_deps = yes ; then - AC_PATH_XTRA - - if test x$no_x = xyes ; then - AC_MSG_ERROR([X development libraries not found]) - else - X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS" - fi -fi - -AC_SUBST(X_LIBS) - - -dnl ****** -dnl beagle -dnl ****** - -BEAGLE_MODULES= -if $PKG_CONFIG --exists libbeagle-1.0; then - BEAGLE_MODULES="libbeagle-1.0 >= 0.3.0" -else - BEAGLE_MODULES="libbeagle-0.0 >= 0.2.4" -fi - -AC_ARG_WITH([search], - [AC_HELP_STRING([--with-search=basic|beagle|auto], - [turn on search support [default=auto]])], , - with_search=auto) - -if test "x$with_search" = "xauto"; then - PKG_CHECK_MODULES(YELP_SEARCH, $BEAGLE_MODULES, have_beagle=yes, have_beagle=no) -fi - -AM_CONDITIONAL(ENABLE_BEAGLE, test x"$with_search" = xbeagle) - -if test "x$with_search" = "xbeagle"; then - PKG_CHECK_MODULES(YELP_SEARCH, $BEAGLE_MODULES) -fi - - -case "x$with_search" in - "xbasic") - search_backend="basic" - ;; - "xbeagle") - search_backend="beagle" - AC_DEFINE(ENABLE_BEAGLE, 1, [Define if you want the power of Beagle]) - ;; - "xauto") - search_backend="auto - basic" - if test x$have_beagle = xyes; then - AC_DEFINE(ENABLE_BEAGLE, 1) - search_backend="auto - beagle" - fi - ;; - *) - AC_MSG_ERROR([Unknown search type selected - Please use --with-search=auto|basic|beagle]) - ;; -esac - -AC_SUBST([YELP_SEARCH_CFLAGS]) -AC_SUBST([YELP_SEARCH_LIBS]) - - -dnl ==================================== -dnl = zlib for help converters -dnl ==================================== -AC_CHECK_LIB(z, gzopen, [Z_LIBS=-lz -AC_SUBST(Z_LIBS)], AC_MSG_ERROR([*** zlib is required])) - -dnl ==================================== -dnl = lzmadec for help converters -dnl ==================================== -LZMADEC_LIBS= -AC_CHECK_LIB(lzmadec, lzmadec_open, [LZMADEC_LIBS=-llzmadec - AC_DEFINE(HAVE_LIBLZMADEC, 1, [Compile with liblzmadec support])]) -AC_SUBST(LZMADEC_LIBS) - -dnl ==================================== -dnl = Bzip2, for the help converters -dnl ==================================== -BZ_LIBS= -AC_CHECK_LIB(bz2, bzread, [AC_DEFINE(HAVE_LIBBZ2, 1, [Compile with libbz2 suppot]) - BZ_LIBS="-lbz2"]) -dnl <= Check for bzip2 > 1.0.0 - AC_CHECK_LIB(bz2, BZ2_bzread, [AC_DEFINE(HAVE_LIBBZ2, 1, [Compile with libbz2 support]) - BZ_LIBS="-lbz2" - dnl <= define the wrapper-functions to get the Bzip2 stuff working .. => - AC_DEFINE(bzread,BZ2_bzread, [Needed to get Bzip2 working]) - AC_DEFINE(bzopen,BZ2_bzopen, [Needed to get Bzip2 working]) - AC_DEFINE(bzdopen,BZ2_bzdopen, [Needed to get Bzip2 working]) - AC_DEFINE(bzwrite,BZ2_bzwrite, [Needed to get Bzip2 working]) - AC_DEFINE(bzerror,BZ2_bzerror, [Needed to get Bzip2 working]) - AC_DEFINE(bzclose,BZ2_bzclose, [Needed to get Bzip2 working]) - AC_DEFINE(bzflush,BZ2_bzflush, [Needed to get Bzip2 working]) - AC_DEFINE(bzCompress,BZ2_bzCompress, [Needed to get Bzip2 working]) - AC_DEFINE(bzCompressInit,BZ2_bzCompressInit, [Needed to get Bzip2 working]) - AC_DEFINE(bzDecompress,BZ2_bzDecompress, [Needed to get Bzip2 working]) - AC_DEFINE(bzDecompressInit,BZ2_bzDecompressInit, [Needed to get Bzip2 working]) - ]) - dnl => -AC_SUBST(BZ_LIBS) - -# ***** -# SMClient -# ***** - -GDK_TARGET="$($PKG_CONFIG --variable target gdk-2.0)" - -SMCLIENT_PKGS= -AC_MSG_CHECKING([which smclient backend to use]) -AC_ARG_WITH([smclient], - [AS_HELP_STRING([--with-smclient],[which smclient backend to use (xsmp/win32/quartz)])], - [], - [case "$GDK_TARGET" in - x11) with_smclient=xsmp SMCLIENT_PKGS="sm" ;; - win32|quartz) with_smclient=$GDK_TARGET ;; - *) with_smclient=no ;; - esac]) -AC_MSG_RESULT([$with_smclient]) - -if test "$with_smclient" != "no"; then - PKG_CHECK_MODULES([SMCLIENT],[$SMCLIENT_PKGS]) - AC_DEFINE([WITH_SMCLIENT],[1],[Define if smclient is enabled]) -fi - -AM_CONDITIONAL([WITH_SMCLIENT],[test "$with_smclient" != "no"]) -AM_CONDITIONAL([WITH_SMCLIENT_XSMP],[test "$with_smclient" = "xsmp"]) -AM_CONDITIONAL([WITH_SMCLIENT_WIN32],[test "$with_smclient" = "win32"]) -AM_CONDITIONAL([WITH_SMCLIENT_QUARTZ],[test "$with_smclient" = "quartz"]) - -# Set flags -AM_CPPFLAGS="$AM_CPPFLAGS $DEPRECATION_FLAGS" -AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS $MORE_WARN_FLAGS" - - -AC_SUBST([AM_CPPFLAGS]) -AC_SUBST([AM_CFLAGS]) -AC_SUBST([AM_LDFLAGS]) - -AC_CONFIG_FILES([ -Makefile -docs/Makefile -docs/libyelp/Makefile -docs/libyelp/version.xml -libyelp/Makefile -src/Makefile -stylesheets/Makefile -stylesheets/db2html.xsl -stylesheets/db-title.xsl -stylesheets/mal2html.xsl -stylesheets/toc2html.xsl -stylesheets/yelp-common.xsl -data/Makefile -data/icons/Makefile -data/icons/hicolor/Makefile -data/icons/hicolor/16x16/Makefile -data/icons/hicolor/16x16/status/Makefile -data/ui/Makefile -po/Makefile.in -tests/Makefile -yelp.desktop.in -]) - -AC_OUTPUT - -dnl ========================================================================== -echo " -yelp-$VERSION: - - prefix: ${prefix} - source code location: ${srcdir} - compiler: ${CC} - - Documentation: ${enable_gtk_doc} - Debug enabled: ${enable_debug} - Search backend: ${search_backend} - Using SMClient: ${with_smclient} - -" diff --git a/data/Makefile.am b/data/Makefile.am index 0459f73a..adab8627 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,8 +1,18 @@ -SUBDIRS = icons ui +SUBDIRS = icons + +#This has to be defined, because GSETTINGS_CHECK_RULE adds to it +MOSTLYCLEANFILES = @INTLTOOL_XML_RULE@ @INTLTOOL_SCHEMAS_RULE@ +gsettingsschema_DATA = org.gnome.yelp.gschema.xml +@GSETTINGS_CHECK_RULE@ +if GSETTINGS_SCHEMAS_INSTALL +install-data-hook: + $(GLIB_COMPILE_SCHEMAS) $(DESTDIR)$(gsettingsschemadir) +endif + tocdir = $(datadir)/yelp toc_DATA = man.xml toc.xml scrollkeeper.xml info.xml @@ -20,7 +30,7 @@ EXTRA_DIST = \ toc.xml toc.xml.in \ info.xml info.xml.in \ scrollkeeper.xml default.css \ - yelp.js + $(gsettingsschema_DATA) \ + $(js_DATA) CLEANFILES = toc.xml man.xml info.xml - diff --git a/data/icons/hicolor/16x16/status/Makefile.am b/data/icons/hicolor/16x16/status/Makefile.am index 8c0f341d..1b40ddd7 100644 --- a/data/icons/hicolor/16x16/status/Makefile.am +++ b/data/icons/hicolor/16x16/status/Makefile.am @@ -1,6 +1,7 @@ icondir = $(datadir)/yelp/icons/hicolor/16x16/status icon_DATA = \ + bookmark.png \ yelp-page-task.png \ yelp-page-tip.png \ yelp-page-ui.png \ diff --git a/data/icons/hicolor/16x16/status/bookmark.png b/data/icons/hicolor/16x16/status/bookmark.png Binary files differnew file mode 100644 index 00000000..627f7ade --- /dev/null +++ b/data/icons/hicolor/16x16/status/bookmark.png diff --git a/data/org.gnome.yelp.gschema.xml b/data/org.gnome.yelp.gschema.xml new file mode 100644 index 00000000..250c12a3 --- /dev/null +++ b/data/org.gnome.yelp.gschema.xml @@ -0,0 +1,27 @@ +<schemalist> +<schema id="org.gnome.yelp" path="/org/gnome/yelp/"> + <key name="show-cursor" type="b"> + <default>false</default> + </key> + <key name="font-adjustment" type="i"> + <default>0</default> + <!-- + I'm supposed to be able to do this, but gschema-compile doesn't allow it. + https://bugzilla.gnome.org/show_bug.cgi?id=616432 + https://bugzilla.gnome.org/show_bug.cgi?id=616102 + <range> + <min>-3</min> + <max>10</max> + </range> + --> + </key> +</schema> +<schema id="org.gnome.yelp.documents"> + <key name="geometry" type="(ii)"> + <default>(520,580)</default> + </key> + <key name="bookmarks" type="a(sss)"> + <default>[]</default> + </key> +</schema> +</schemalist> diff --git a/data/ui/Makefile.am b/data/ui/Makefile.am deleted file mode 100644 index aebda110..00000000 --- a/data/ui/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -uidir = $(datadir)/yelp/ui - -ui_DATA = yelp-bookmarks.ui yelp-bookmarks-add.ui yelp-open-location.ui yelp-preferences.ui yelp-ui.xml yelp-search-ui.xml - -EXTRA_DIST = $(ui_DATA) diff --git a/data/ui/yelp-bookmarks-add.ui b/data/ui/yelp-bookmarks-add.ui deleted file mode 100644 index 862c87f1..00000000 --- a/data/ui/yelp-bookmarks-add.ui +++ /dev/null @@ -1,105 +0,0 @@ -<?xml version="1.0"?> -<interface> - <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="add_bookmark_dialog"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="title" translatable="yes">Add Bookmark</property> - <property name="resizable">False</property> - <property name="type_hint">dialog</property> - <property name="has_separator">False</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox9"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkAlignment" id="alignment14"> - <property name="visible">True</property> - <property name="yalign">0</property> - <child> - <object class="GtkHBox" id="hbox90"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label1230"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Title:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">bookmark_title_entry</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="bookmark_title_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="activates_default">True</property> - <property name="width_chars">30</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area9"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="cancelbutton1"> - <property name="label">gtk-cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="okbutton1"> - <property name="label">gtk-add</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-6">cancelbutton1</action-widget> - <action-widget response="-5">okbutton1</action-widget> - </action-widgets> - </object> -</interface> diff --git a/data/ui/yelp-bookmarks.ui b/data/ui/yelp-bookmarks.ui deleted file mode 100644 index 9710fb8b..00000000 --- a/data/ui/yelp-bookmarks.ui +++ /dev/null @@ -1,160 +0,0 @@ -<?xml version="1.0"?> -<interface> - <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="bookmarks_dialog"> - <property name="border_width">5</property> - <property name="title" translatable="yes">Bookmarks</property> - <property name="default_width">300</property> - <property name="default_height">300</property> - <property name="type_hint">dialog</property> - <property name="has_separator">False</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox8"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkTable" id="table1"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column_spacing">6</property> - <property name="row_spacing">6</property> - <child> - <object class="GtkLabel" id="label1231"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">_Bookmarks:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">bookmarks_view</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkVButtonBox" id="vbuttonbox1"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="layout_style">start</property> - <child> - <object class="GtkButton" id="open_button"> - <property name="label">gtk-open</property> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="rename_button"> - <property name="label" translatable="yes">Re_name</property> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="remove_button"> - <property name="label">gtk-remove</property> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="bookmarks_view"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area8"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="button1"> - <property name="label">gtk-close</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-7">button1</action-widget> - </action-widgets> - </object> -</interface> diff --git a/data/ui/yelp-open-location.ui b/data/ui/yelp-open-location.ui deleted file mode 100644 index 69e2157f..00000000 --- a/data/ui/yelp-open-location.ui +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0"?> -<interface> - <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="location_dialog"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="title" translatable="yes">Open Location</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">True</property> - <property name="type_hint">dialog</property> - <property name="has_separator">False</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox6"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkHBox" id="hbox89"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="location_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Location:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">location_entry</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="location_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="activates_default">True</property> - <property name="width_chars">30</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area6"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="cancel_button"> - <property name="label">gtk-cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="open_button"> - <property name="label">gtk-open</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-6">cancel_button</action-widget> - <action-widget response="-5">open_button</action-widget> - </action-widgets> - </object> -</interface> diff --git a/data/ui/yelp-preferences.ui b/data/ui/yelp-preferences.ui deleted file mode 100644 index e8111266..00000000 --- a/data/ui/yelp-preferences.ui +++ /dev/null @@ -1,222 +0,0 @@ -<?xml version="1.0"?> -<interface> - <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="prefs_dialog"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="title" translatable="yes">Preferences</property> - <property name="destroy_with_parent">True</property> - <property name="type_hint">dialog</property> - <property name="has_separator">False</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox7"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkVBox" id="vbox133"> - <property name="visible">True</property> - <property name="border_width">5</property> - <property name="spacing">18</property> - <child> - <object class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label1226"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Fonts</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment11"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkCheckButton" id="use_system_fonts"> - <property name="label" translatable="yes">_Use system fonts</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment12"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkTable" id="font_table"> - <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column_spacing">12</property> - <property name="row_spacing">6</property> - <child> - <object class="GtkLabel" id="label1227"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">_Variable width:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">variable_font</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label1228"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">_Fixed width:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">fixed_font</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkFontButton" id="variable_font"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkFontButton" id="fixed_font"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - </object> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox134"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label1229"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Accessibility</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment13"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <object class="GtkCheckButton" id="use_caret"> - <property name="label" translatable="yes">_Browse with caret</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area7"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="closebutton1"> - <property name="label">gtk-close</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-7">closebutton1</action-widget> - </action-widgets> - </object> -</interface> diff --git a/data/ui/yelp-search-ui.xml b/data/ui/yelp-search-ui.xml deleted file mode 100644 index c2c2cd5b..00000000 --- a/data/ui/yelp-search-ui.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ui> - <toolbar name="tools"> - <placeholder> - <separator/> - <toolitem action="Search"/> - </placeholder> - </toolbar> -</ui> diff --git a/data/ui/yelp-ui.xml b/data/ui/yelp-ui.xml deleted file mode 100644 index afaeb19a..00000000 --- a/data/ui/yelp-ui.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ui> - <menubar> - <menu action="PageMenu"> - <menuitem action="NewWindow"/> - <menuitem action="CloseWindow"/> - </menu> - <menu action="ViewMenu"> - <menuitem action="LargerText"/> - <menuitem action="SmallerText"/> - <separator/> - <menuitem action="ShowTextCursor"/> - </menu> - <menu action="GoMenu"> - <menuitem action="GoBack"/> - <menuitem action="GoForward"/> - </menu> - </menubar> - <accelerator action="OpenLocation"/> -<!-- - <menubar> - <menu action="FileMenu"> - <menuitem action="NewWindow"/> - <separator/> - <menuitem action="AboutDocument"/> - <separator/> - <menuitem action="PrintPage"/> - <menuitem action="PrintDocument"/> - <separator/> - </menu> - <menu action="EditMenu"> - <menuitem action="Copy"/> - <menuitem action="SelectAll"/> - <separator/> - <menuitem action="Find"/> - <menuitem action="FindNext"/> - <menuitem action="FindPrev"/> - <separator/> - <menuitem action="Preferences"/> - </menu> - <menu action="GoMenu"> - <menuitem action="GoBack"/> - <menuitem action="GoForward"/> - <menuitem action="GoHome"/> - <separator/> - <menuitem action="GoPrevious"/> - <menuitem action="GoNext"/> - <menuitem action="GoContents"/> - </menu> - <menu action="BookmarksMenu"> - <menuitem action="AddBookmark"/> - <menuitem action="EditBookmarks"/> - <separator/> - <placeholder name="BookmarksTOC"/> - <separator/> - <placeholder name="BookmarksDOC"/> - </menu> - <menu action="HelpMenu"> - <menuitem action="Contents"/> - <menuitem action="About"/> - </menu> - </menubar> - <toolbar name="tools"> - <toolitem action="GoForward" name="GoFor"/> - <separator/> - <toolitem action="GoHome"/> - <placeholder/> - </toolbar> - <popup name="main_popup"> - <menuitem action="OpenLink"/> - <menuitem action="OpenLinkNewWindow"/> - <separator/> - <menuitem action="CopyLocation"/> - </popup> - <popup name="mail_popup"> - <menuitem name="CpMail" action="CopyMail"/> - </popup> - <accelerator action="Reload"/> - <accelerator action="TextCursor"/> ---> -</ui> diff --git a/docs/libyelp/Makefile.am b/docs/libyelp/Makefile.am index 9a8d530c..945dbfcb 100644 --- a/docs/libyelp/Makefile.am +++ b/docs/libyelp/Makefile.am @@ -14,8 +14,8 @@ GTKDOC_CFLAGS = \ $(YELP_CFLAGS) \ -I$(top_srcdir)/libyelp -GTKDOC_LIBS = \ - $(YELP_LIBS) \ +GTKDOC_LIBS = \ + $(YELP_LIBS) \ $(top_builddir)/libyelp/libyelp.la HFILE_GLOB = $(top_srcdir)/libyelp/*.h @@ -26,11 +26,11 @@ MKDB_OPTIONS = --output-format=xml --sgml-mode --name-space=yelp --ignore-files= content_files = version.xml -extra_viles = version.xml.in +extra_files = version.xml.in include $(top_srcdir)/gtk-doc.make -EXTRA_DIST += version.xm.in +EXTRA_DIST += version.xml.in # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl diff --git a/libyelp/Makefile.am b/libyelp/Makefile.am index 85d2a40b..df7fc23f 100644 --- a/libyelp/Makefile.am +++ b/libyelp/Makefile.am @@ -5,8 +5,10 @@ libyelp_la_SOURCES = \ yelp-error.c \ yelp-docbook-document.c \ yelp-document.c \ - yelp-io-channel.c \ + yelp-info-document.c \ + yelp-info-parser.c \ yelp-location-entry.c \ + yelp-magic-decompressor.c \ yelp-mallard-document.c \ yelp-marshal.c \ yelp-settings.c \ @@ -16,6 +18,27 @@ libyelp_la_SOURCES = \ yelp-types.c \ yelp-view.c +EXTRA_DIST = \ + yelp-bz2-decompressor.h \ + yelp-debug.h \ + yelp-error.h \ + yelp-info-parser.h \ + yelp-lzma-decompressor.h \ + yelp-magic-decompressor.h \ + yelp-marshal.list + +if ENABLE_LZMA +libyelp_la_SOURCES += yelp-lzma-decompressor.c +else +EXTRA_DIST += yelp-lzma-decompressor.c +endif + +if ENABLE_BZ2 +libyelp_la_SOURCES += yelp-bz2-decompressor.c +else +EXTRA_DIST += yelp-bz2-decompressor.c +endif + libyelp_la_CFLAGS = \ $(YELP_CFLAGS) \ -DDATADIR=\""$(datadir)"\" \ @@ -27,6 +50,7 @@ libyelp_la_LIBADD = \ libyelp_headers = \ yelp-docbook-document.h \ yelp-document.h \ + yelp-info-document.h \ yelp-location-entry.h \ yelp-mallard-document.h \ yelp-settings.h \ @@ -48,19 +72,17 @@ BUILT_SOURCES = \ yelp-types.c \ yelp-types.h -EXTRA_DIST = yelp-marshal.list - yelp-marshal.h: stamp-yelp-marshal.h @true stamp-yelp-marshal.h: yelp-marshal.list - @GLIB_GENMARSHAL@ --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --header > xgen-ymh \ + $(AM_V_GEN) glib-genmarshal --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --header > xgen-ymh \ && (cmp -s xgen-ymh yelp-marshal.h || cp xgen-ymh yelp-marshal.h) \ && rm -f xgen-ymh xgen-ymh~ \ && echo timestamp > $(@F) yelp-marshal.c: yelp-marshal.list - @GLIB_GENMARSHAL@ --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --body > xgen-ymc \ + $(AM_V_GEN) glib-genmarshal --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --body > xgen-ymc \ && cp xgen-ymc yelp-marshal.c \ && rm -f xgen-ymc xgen-ymc~ @@ -69,7 +91,7 @@ yelp-marshal-main.c: yelp-marshal.c CLEANFILES = $(BUILT_SOURCES) yelp-types.h: $(libyelp_headers) - (cd $(srcdir) && glib-mkenums \ + $(AM_V_GEN) (cd $(srcdir) && glib-mkenums \ --fhead "#ifndef __LIBYELP_TYPES_H__\n" \ --fhead "#define __LIBYELP_TYPES_H__\n\n" \ --fhead "#include <glib-object.h>\n\n" \ @@ -82,7 +104,7 @@ yelp-types.h: $(libyelp_headers) $(libyelp_headers)) > $@ yelp-types.c: $(libyelp_headers) - (cd $(srcdir) && glib-mkenums \ + $(AM_V_GEN) (cd $(srcdir) && glib-mkenums \ --fhead "#include <glib-object.h>\n" \ --fhead "#include \"yelp-types.h\"\n\n" \ --fprod "\n/* enumerations from \"@filename@\" */" \ diff --git a/libyelp/yelp-bz2-decompressor.c b/libyelp/yelp-bz2-decompressor.c new file mode 100644 index 00000000..98802cee --- /dev/null +++ b/libyelp/yelp-bz2-decompressor.c @@ -0,0 +1,173 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#include "config.h" + +#include <errno.h> +#include <string.h> + +#include <glib/gi18n.h> + +#include "yelp-bz2-decompressor.h" + +static void yelp_bz2_decompressor_iface_init (GConverterIface *iface); + +struct _YelpBz2Decompressor +{ + GObject parent_instance; + + bz_stream bzstream; +}; + +G_DEFINE_TYPE_WITH_CODE (YelpBz2Decompressor, yelp_bz2_decompressor, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_CONVERTER, + yelp_bz2_decompressor_iface_init)) + +static void +yelp_bz2_decompressor_finalize (GObject *object) +{ + YelpBz2Decompressor *decompressor; + + decompressor = YELP_BZ2_DECOMPRESSOR (object); + + BZ2_bzDecompressEnd (&decompressor->bzstream); + + G_OBJECT_CLASS (yelp_bz2_decompressor_parent_class)->finalize (object); +} + +static void +yelp_bz2_decompressor_init (YelpBz2Decompressor *decompressor) +{ +} + +static void +yelp_bz2_decompressor_constructed (GObject *object) +{ + YelpBz2Decompressor *decompressor; + int res; + + decompressor = YELP_BZ2_DECOMPRESSOR (object); + + res = BZ2_bzDecompressInit (&decompressor->bzstream, 0, FALSE); + + if (res == BZ_MEM_ERROR ) + g_error ("YelpBz2Decompressor: Not enough memory for bzip2 use"); + + if (res != BZ_OK) + g_error ("YelpBz2Decompressor: Unexpected bzip2 error"); +} + +static void +yelp_bz2_decompressor_class_init (YelpBz2DecompressorClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = yelp_bz2_decompressor_finalize; + gobject_class->constructed = yelp_bz2_decompressor_constructed; +} + +YelpBz2Decompressor * +yelp_bz2_decompressor_new (void) +{ + YelpBz2Decompressor *decompressor; + + decompressor = g_object_new (YELP_TYPE_BZ2_DECOMPRESSOR, NULL); + + return decompressor; +} + +static void +yelp_bz2_decompressor_reset (GConverter *converter) +{ + YelpBz2Decompressor *decompressor = YELP_BZ2_DECOMPRESSOR (converter); + int res; + + /* libbzip2 doesn't have a reset function. Ending and reiniting + * might do the trick. But this is untested. If reset matters + * to you, test this. + */ + BZ2_bzDecompressEnd (&decompressor->bzstream); + res = BZ2_bzDecompressInit (&decompressor->bzstream, 0, FALSE); + + if (res == BZ_MEM_ERROR ) + g_error ("YelpBz2Decompressor: Not enough memory for bzip2 use"); + + if (res != BZ_OK) + g_error ("YelpBz2Decompressor: Unexpected bzip2 error"); +} + +static GConverterResult +yelp_bz2_decompressor_convert (GConverter *converter, + const void *inbuf, + gsize inbuf_size, + void *outbuf, + gsize outbuf_size, + GConverterFlags flags, + gsize *bytes_read, + gsize *bytes_written, + GError **error) +{ + YelpBz2Decompressor *decompressor; + gsize header_size; + int res; + + decompressor = YELP_BZ2_DECOMPRESSOR (converter); + + decompressor->bzstream.next_in = (void *)inbuf; + decompressor->bzstream.avail_in = inbuf_size; + + decompressor->bzstream.next_out = outbuf; + decompressor->bzstream.avail_out = outbuf_size; + + res = BZ2_bzDecompress (&decompressor->bzstream); + + if (res == BZ_DATA_ERROR || res == BZ_DATA_ERROR_MAGIC) { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, + _("Invalid compressed data")); + return G_CONVERTER_ERROR; + } + + if (res == BZ_MEM_ERROR) { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Not enough memory")); + return G_CONVERTER_ERROR; + } + + if (res == BZ_OK || res == BZ_STREAM_END) { + *bytes_read = inbuf_size - decompressor->bzstream.avail_in; + *bytes_written = outbuf_size - decompressor->bzstream.avail_out; + + if (res == BZ_STREAM_END) + return G_CONVERTER_FINISHED; + return G_CONVERTER_CONVERTED; + } + + g_assert_not_reached (); +} + +static void +yelp_bz2_decompressor_iface_init (GConverterIface *iface) +{ + iface->convert = yelp_bz2_decompressor_convert; + iface->reset = yelp_bz2_decompressor_reset; +} diff --git a/libyelp/yelp-bz2-decompressor.h b/libyelp/yelp-bz2-decompressor.h new file mode 100644 index 00000000..e067f26e --- /dev/null +++ b/libyelp/yelp-bz2-decompressor.h @@ -0,0 +1,53 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#ifndef __YELP_BZ2_DECOMPRESSOR_H__ +#define __YELP_BZ2_DECOMPRESSOR_H__ + +#include <gio/gio.h> +#include <bzlib.h> + +G_BEGIN_DECLS + +#define YELP_TYPE_BZ2_DECOMPRESSOR (yelp_bz2_decompressor_get_type ()) +#define YELP_BZ2_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_BZ2_DECOMPRESSOR, YelpBz2Decompressor)) +#define YELP_BZ2_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), YELP_TYPE_BZ2_DECOMPRESSOR, YelpBz2DecompressorClass)) +#define YELP_IS_BZ2_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_BZ2_DECOMPRESSOR)) +#define YELP_IS_BZ2_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_BZ2_DECOMPRESSOR)) +#define YELP_BZ2_DECOMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_BZ2_DECOMPRESSOR, YelpBz2DecompressorClass)) + +typedef struct _YelpBz2Decompressor YelpBz2Decompressor; +typedef struct _YelpBz2DecompressorClass YelpBz2DecompressorClass; + +struct _YelpBz2DecompressorClass +{ + GObjectClass parent_class; +}; + +GType yelp_bz2_decompressor_get_type (void); + +YelpBz2Decompressor *yelp_bz2_decompressor_new (void); + +G_END_DECLS + +#endif /* __YELP_BZ2_DECOMPRESSOR_H__ */ diff --git a/libyelp/yelp-docbook-document.c b/libyelp/yelp-docbook-document.c index 3849f534..7463033a 100644 --- a/libyelp/yelp-docbook-document.c +++ b/libyelp/yelp-docbook-document.c @@ -152,9 +152,15 @@ yelp_docbook_document_dispose (GObject *object) { YelpDocbookDocumentPrivate *priv = GET_PRIV (object); - g_object_unref (priv->uri); + if (priv->uri) { + g_object_unref (priv->uri); + priv->uri = NULL; + } - g_object_unref (priv->sections); + if (priv->sections) { + g_object_unref (priv->sections); + priv->sections = NULL; + } G_OBJECT_CLASS (yelp_docbook_document_parent_class)->dispose (object); } @@ -766,8 +772,8 @@ transform_finished (YelpTransform *transform, is finalized. Otherwise, we could crash when YelpTransform frees its libxslt resources. */ - g_object_weak_ref (transform, - transform_finalized, + g_object_weak_ref ((GObject *) transform, + (GWeakNotify) transform_finalized, docbook); docuri = yelp_uri_get_document_uri (priv->uri); @@ -807,10 +813,9 @@ transform_finalized (YelpDocbookDocument *docbook, { YelpDocbookDocumentPrivate *priv = GET_PRIV (docbook); - debug_print (DB_FUNCTION, "entering\n"); + debug_print (DB_FUNCTION, "entering\n"); if (priv->xmldoc) xmlFreeDoc (priv->xmldoc); priv->xmldoc = NULL; - } diff --git a/libyelp/yelp-document.c b/libyelp/yelp-document.c index d30e4027..45017775 100644 --- a/libyelp/yelp-document.c +++ b/libyelp/yelp-document.c @@ -30,6 +30,7 @@ #include "yelp-debug.h" #include "yelp-document.h" #include "yelp-error.h" +#include "yelp-info-document.h" #include "yelp-docbook-document.h" #include "yelp-mallard-document.h" #include "yelp-simple-document.h" @@ -119,7 +120,7 @@ static void request_cancel (GCancellable *cancellab static gboolean request_idle_contents (Request *request); static gboolean request_idle_info (Request *request); static gboolean request_idle_error (Request *request); -static void request_try_free (Request *request); +static gboolean request_try_free (Request *request); static void request_free (Request *request); static const gchar * str_ref (const gchar *str); @@ -135,6 +136,7 @@ yelp_document_get_for_uri (YelpUri *uri) { static GHashTable *documents = NULL; gchar *docuri; + gchar *page_id, *tmp; YelpDocument *document = NULL; if (documents == NULL) @@ -147,6 +149,24 @@ yelp_document_get_for_uri (YelpUri *uri) if (docuri == NULL) return NULL; + switch (yelp_uri_get_document_type (uri)) { + case YELP_URI_DOCUMENT_TYPE_TEXT: + case YELP_URI_DOCUMENT_TYPE_HTML: + case YELP_URI_DOCUMENT_TYPE_XHTML: + /* We use YelpSimpleDocument for these, which is a single-file + * responder. But the document URI may be set to the directory + * holding the file, to allow a directory of HTML files to act + * as a single document. So we cache these by a fuller URI. + */ + page_id = yelp_uri_get_page_id (uri); + tmp = g_strconcat (docuri, "/", page_id, NULL); + g_free (page_id); + g_free (docuri); + docuri = tmp; + break; + default: + break; + } document = g_hash_table_lookup (documents, docuri); if (document != NULL) { @@ -170,7 +190,7 @@ yelp_document_get_for_uri (YelpUri *uri) /* FIXME */ break; case YELP_URI_DOCUMENT_TYPE_INFO: - /* FIXME */ + document = yelp_info_document_new (uri); break; case YELP_URI_DOCUMENT_TYPE_TOC: /* FIXME */ @@ -338,7 +358,7 @@ yelp_document_set_page_id (YelpDocument *document, hash_replace (document->priv->page_ids, id, g_strdup (page_id)); - if (id != NULL && !g_str_equal (id, page_id)) { + if (id == NULL || !g_str_equal (id, page_id)) { GSList *reqs, *cur; reqs = hash_lookup (document->priv->reqs_by_page_id, id); for (cur = reqs; cur != NULL; cur = cur->next) { @@ -595,6 +615,9 @@ yelp_document_get_page_icon (YelpDocument *document, } g_mutex_unlock (document->priv->mutex); + if (ret == NULL) + ret = g_strdup ("help-contents"); + return ret; } @@ -813,7 +836,7 @@ yelp_document_signal (YelpDocument *document, break; case YELP_DOCUMENT_SIGNAL_ERROR: request->idle_funcs++; - request->error = yelp_error_copy (error); + request->error = yelp_error_copy ((GError *) error); g_idle_add ((GSourceFunc) request_idle_error, request); break; default: @@ -839,7 +862,7 @@ yelp_document_error_pending (YelpDocument *document, if (priv->reqs_pending) { for (cur = priv->reqs_pending; cur; cur = cur->next) { request = cur->data; - request->error = yelp_error_copy (error); + request->error = yelp_error_copy ((GError *) error); request->idle_funcs++; g_idle_add ((GSourceFunc) request_idle_error, request); } @@ -1078,7 +1101,7 @@ request_idle_error (Request *request) return FALSE; } -static void +static gboolean request_try_free (Request *request) { if (!g_cancellable_is_cancelled (request->cancellable)) @@ -1088,6 +1111,8 @@ request_try_free (Request *request) request_free (request); else g_idle_add ((GSourceFunc) request_try_free, request); + + return FALSE; } static void diff --git a/libyelp/yelp-info-document.c b/libyelp/yelp-info-document.c new file mode 100644 index 00000000..5fb609d8 --- /dev/null +++ b/libyelp/yelp-info-document.c @@ -0,0 +1,486 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2007 Don Scorgie <dscorgie@svn.gnome.org> + * Copyright (C) 2010 Shaun McCance <shaunm@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. + * + * Author: Don Scorgie <dscorgie@svn.gnome.org> + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <glib.h> +#include <glib/gi18n.h> +#include <gtk/gtk.h> +#include <libxml/tree.h> + +#include "yelp-error.h" +#include "yelp-info-document.h" +#include "yelp-info-parser.h" +#include "yelp-transform.h" +#include "yelp-debug.h" +#include "yelp-settings.h" + +#define STYLESHEET DATADIR"/yelp/xslt/info2html.xsl" + +typedef enum { + INFO_STATE_BLANK, /* Brand new, run transform as needed */ + INFO_STATE_PARSING, /* Parsing/transforming document, please wait */ + INFO_STATE_PARSED, /* All done, if we ain't got it, it ain't here */ + INFO_STATE_STOP /* Stop everything now, object to be disposed */ +} InfoState; + +typedef struct _YelpInfoDocumentPrivate YelpInfoDocumentPrivate; +struct _YelpInfoDocumentPrivate { + YelpUri *uri; + InfoState state; + + GMutex *mutex; + GThread *thread; + + xmlDocPtr xmldoc; + GtkTreeModel *sections; + + gboolean process_running; + gboolean transform_running; + + YelpTransform *transform; + guint chunk_ready; + guint finished; + guint error; + + gchar *root_id; + gchar *visit_prev_id; +}; + + +static void yelp_info_document_class_init (YelpInfoDocumentClass *klass); +static void yelp_info_document_init (YelpInfoDocument *info); +static void yelp_info_document_dispose (GObject *object); +static void yelp_info_document_finalize (GObject *object); + +/* YelpDocument */ +static gboolean info_request_page (YelpDocument *document, + const gchar *page_id, + GCancellable *cancellable, + YelpDocumentCallback callback, + gpointer user_data); + +/* YelpTransform */ +static void transform_chunk_ready (YelpTransform *transform, + gchar *chunk_id, + YelpInfoDocument *info); +static void transform_finished (YelpTransform *transform, + YelpInfoDocument *info); +static void transform_error (YelpTransform *transform, + YelpInfoDocument *info); +static void transform_finalized (YelpInfoDocument *info, + gpointer transform); + +static void info_document_process (YelpInfoDocument *info); +static gboolean info_sections_visit (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + YelpInfoDocument *info); +static void info_document_disconnect (YelpInfoDocument *info); + + +G_DEFINE_TYPE (YelpInfoDocument, yelp_info_document, YELP_TYPE_DOCUMENT); +#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_INFO_DOCUMENT, YelpInfoDocumentPrivate)) + +static void +yelp_info_document_class_init (YelpInfoDocumentClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + YelpDocumentClass *document_class = YELP_DOCUMENT_CLASS (klass); + + object_class->dispose = yelp_info_document_dispose; + object_class->finalize = yelp_info_document_finalize; + + document_class->request_page = info_request_page; + + g_type_class_add_private (klass, sizeof (YelpInfoDocumentPrivate)); +} + +static void +yelp_info_document_init (YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + + priv->state = INFO_STATE_BLANK; + priv->xmldoc = NULL; + priv->mutex = g_mutex_new (); +} + +static void +yelp_info_document_dispose (GObject *object) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (object); + + if (priv->uri) { + g_object_unref (priv->uri); + priv->uri = NULL; + } + + if (priv->sections) { + g_object_unref (priv->sections); + priv->sections = NULL; + } + + if (priv->transform) { + g_object_unref (priv->transform); + priv->transform = NULL; + } + + G_OBJECT_CLASS (yelp_info_document_parent_class)->dispose (object); +} + +static void +yelp_info_document_finalize (GObject *object) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (object); + + if (priv->xmldoc) + xmlFreeDoc (priv->xmldoc); + + g_free (priv->root_id); + g_free (priv->visit_prev_id); + + g_mutex_free (priv->mutex); + + G_OBJECT_CLASS (yelp_info_document_parent_class)->finalize (object); +} + +/******************************************************************************/ + +YelpDocument * +yelp_info_document_new (YelpUri *uri) +{ + YelpInfoDocument *info; + YelpInfoDocumentPrivate *priv; + + g_return_val_if_fail (uri != NULL, NULL); + + info = (YelpInfoDocument *) g_object_new (YELP_TYPE_INFO_DOCUMENT, NULL); + priv = GET_PRIV (info); + + priv->uri = g_object_ref (uri); + + return (YelpDocument *) info; +} + + +/******************************************************************************/ +/** YelpDocument **************************************************************/ + +static gboolean +info_request_page (YelpDocument *document, + const gchar *page_id, + GCancellable *cancellable, + YelpDocumentCallback callback, + gpointer user_data) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (document); + gchar *docuri; + GError *error; + gboolean handled; + + if (page_id == NULL) + page_id = priv->root_id; + + handled = + YELP_DOCUMENT_CLASS (yelp_info_document_parent_class)->request_page (document, + page_id, + cancellable, + callback, + user_data); + if (handled) { + return; + } + + g_mutex_lock (priv->mutex); + + switch (priv->state) { + case INFO_STATE_BLANK: + priv->state = INFO_STATE_PARSING; + priv->process_running = TRUE; + g_object_ref (document); + priv->thread = g_thread_create ((GThreadFunc) info_document_process, + document, FALSE, NULL); + break; + case INFO_STATE_PARSING: + break; + case INFO_STATE_PARSED: + case INFO_STATE_STOP: + docuri = yelp_uri_get_document_uri (priv->uri); + error = g_error_new (YELP_ERROR, YELP_ERROR_NOT_FOUND, + _("The page ‘%s’ was not found in the document ‘%s’."), + page_id, docuri); + g_free (docuri); + yelp_document_signal (document, page_id, + YELP_DOCUMENT_SIGNAL_ERROR, + error); + g_error_free (error); + break; + } + + g_mutex_unlock (priv->mutex); +} + + +/******************************************************************************/ +/** YelpTransform *************************************************************/ + +static void +transform_chunk_ready (YelpTransform *transform, + gchar *chunk_id, + YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + gchar *content; + + g_assert (transform == priv->transform); + + if (priv->state == INFO_STATE_STOP) { + info_document_disconnect (info); + return; + } + + content = yelp_transform_take_chunk (transform, chunk_id); + yelp_document_give_contents (YELP_DOCUMENT (info), + chunk_id, + content, + "application/xhtml+xml"); + + yelp_document_signal (YELP_DOCUMENT (info), + chunk_id, + YELP_DOCUMENT_SIGNAL_INFO, + NULL); + yelp_document_signal (YELP_DOCUMENT (info), + chunk_id, + YELP_DOCUMENT_SIGNAL_CONTENTS, + NULL); +} + +static void +transform_finished (YelpTransform *transform, + YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + gchar *docuri; + GError *error; + + g_assert (transform == priv->transform); + + if (priv->state == INFO_STATE_STOP) { + info_document_disconnect (info); + return; + } + + info_document_disconnect (info); + priv->state = INFO_STATE_PARSED; + + /* We want to free priv->xmldoc, but we can't free it before transform + is finalized. Otherwise, we could crash when YelpTransform frees + its libxslt resources. + */ + g_object_weak_ref ((GObject *) transform, + (GWeakNotify) transform_finalized, + info); + + docuri = yelp_uri_get_document_uri (priv->uri); + error = g_error_new (YELP_ERROR, YELP_ERROR_NOT_FOUND, + _("The requested page was not found in the document ‘%s’."), + docuri); + g_free (docuri); + yelp_document_error_pending ((YelpDocument *) info, error); + g_error_free (error); +} + +static void +transform_error (YelpTransform *transform, + YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + GError *error; + + g_assert (transform == priv->transform); + + if (priv->state == INFO_STATE_STOP) { + info_document_disconnect (info); + return; + } + + error = yelp_transform_get_error (transform); + yelp_document_error_pending ((YelpDocument *) info, error); + g_error_free (error); + + info_document_disconnect (info); +} + +static void +transform_finalized (YelpInfoDocument *info, + gpointer transform) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + + if (priv->xmldoc) + xmlFreeDoc (priv->xmldoc); + priv->xmldoc = NULL; +} + + + +/******************************************************************************/ +/** Threaded ******************************************************************/ + +static void +info_document_process (YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + GFile *file = NULL; + gchar *filepath = NULL; + GError *error; + gint params_i = 0; + gchar **params = NULL; + + file = yelp_uri_get_file (priv->uri); + if (file == NULL) { + error = g_error_new (YELP_ERROR, YELP_ERROR_NOT_FOUND, + _("The file does not exist.")); + yelp_document_error_pending ((YelpDocument *) info, error); + g_error_free (error); + goto done; + } + + filepath = g_file_get_path (file); + g_object_unref (file); + if (!g_file_test (filepath, G_FILE_TEST_IS_REGULAR)) { + error = g_error_new (YELP_ERROR, YELP_ERROR_NOT_FOUND, + _("The file ‘%s’ does not exist."), + filepath); + yelp_document_error_pending ((YelpDocument *) info, error); + g_error_free (error); + goto done; + } + + priv->sections = (GtkTreeModel *) yelp_info_parser_parse_file (filepath); + gtk_tree_model_foreach (priv->sections, + (GtkTreeModelForeachFunc) info_sections_visit, + info); + priv->xmldoc = yelp_info_parser_parse_tree ((GtkTreeStore *) priv->sections); + + if (priv->xmldoc == NULL) { + error = g_error_new (YELP_ERROR, YELP_ERROR_PROCESSING, + _("The file ‘%s’ could not be parsed because it is" + " not a well-formed info page."), + filepath); + yelp_document_error_pending ((YelpDocument *) info, error); + goto done; + } + + g_mutex_lock (priv->mutex); + if (priv->state == INFO_STATE_STOP) { + g_mutex_unlock (priv->mutex); + goto done; + } + + priv->transform = yelp_transform_new (STYLESHEET); + priv->chunk_ready = + g_signal_connect (priv->transform, "chunk-ready", + (GCallback) transform_chunk_ready, + info); + priv->finished = + g_signal_connect (priv->transform, "finished", + (GCallback) transform_finished, + info); + priv->error = + g_signal_connect (priv->transform, "error", + (GCallback) transform_error, + info); + + params = yelp_settings_get_all_params (yelp_settings_get_default (), 0, ¶ms_i); + + priv->transform_running = TRUE; + yelp_transform_start (priv->transform, + priv->xmldoc, + NULL, + (const gchar * const *) params); + g_strfreev (params); + g_mutex_unlock (priv->mutex); + + done: + g_free (filepath); + priv->process_running = FALSE; + g_object_unref (info); +} + +static gboolean +info_sections_visit (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + gchar *page_id, *title; + + gtk_tree_model_get (model, iter, + INFO_PARSER_COLUMN_PAGE_NO, &page_id, + INFO_PARSER_COLUMN_PAGE_NAME, &title, + -1); + yelp_document_set_page_id ((YelpDocument *) info, page_id, page_id); + yelp_document_set_page_title ((YelpDocument *) info, page_id, title); + + if (priv->root_id == NULL) { + priv->root_id = g_strdup (page_id); + yelp_document_set_page_id ((YelpDocument *) info, NULL, page_id); + } + yelp_document_set_root_id ((YelpDocument *) info, page_id, priv->root_id); + + if (priv->visit_prev_id != NULL) { + yelp_document_set_prev_id ((YelpDocument *) info, page_id, priv->visit_prev_id); + yelp_document_set_next_id ((YelpDocument *) info, priv->visit_prev_id, page_id); + g_free (priv->visit_prev_id); + } + priv->visit_prev_id = page_id; + g_free (title); + return FALSE; +} + +static void +info_document_disconnect (YelpInfoDocument *info) +{ + YelpInfoDocumentPrivate *priv = GET_PRIV (info); + if (priv->chunk_ready) { + g_signal_handler_disconnect (priv->transform, priv->chunk_ready); + priv->chunk_ready = 0; + } + if (priv->finished) { + g_signal_handler_disconnect (priv->transform, priv->finished); + priv->finished = 0; + } + if (priv->error) { + g_signal_handler_disconnect (priv->transform, priv->error); + priv->error = 0; + } + yelp_transform_cancel (priv->transform); + g_object_unref (priv->transform); + priv->transform = NULL; + priv->transform_running = FALSE; +} diff --git a/libyelp/yelp-info-document.h b/libyelp/yelp-info-document.h new file mode 100644 index 00000000..40139446 --- /dev/null +++ b/libyelp/yelp-info-document.h @@ -0,0 +1,52 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2007 Don Scorgie <dscorgie@svn.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. + * + * Author: Don Scorgie <dscorgie@svn.gnome.org> + */ + +#ifndef __YELP_INFO_DOCUMENT_H__ +#define __YELP_INFO_DOCUMENT_H__ + +#include <glib-object.h> + +#include "yelp-document.h" + +#define YELP_TYPE_INFO_DOCUMENT (yelp_info_document_get_type ()) +#define YELP_INFO_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_INFO_DOCUMENT, YelpInfoDocument)) +#define YELP_INFO_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_INFO_DOCUMENT, YelpInfoDocumentClass)) +#define YELP_IS_INFO_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_INFO_DOCUMENT)) +#define YELP_IS_INFO_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_INFO_DOCUMENT)) +#define YELP_INFO_DOCUMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_INFO_DOCUMENT, YelpInfoDocumentClass)) + +typedef struct _YelpInfoDocument YelpInfoDocument; +typedef struct _YelpInfoDocumentClass YelpInfoDocumentClass; +typedef struct _YelpInfoPriv YelpInfoPriv; + +struct _YelpInfoDocument { + YelpDocument parent; +}; + +struct _YelpInfoDocumentClass { + YelpDocumentClass parent_class; +}; + +GType yelp_info_document_get_type (void); +YelpDocument * yelp_info_document_new (YelpUri *uri); + +#endif /* __YELP_INFO_DOCUMENT_H__ */ diff --git a/src/yelp-info-parser.c b/libyelp/yelp-info-parser.c index 276d878c..cbca0e47 100644 --- a/src/yelp-info-parser.c +++ b/libyelp/yelp-info-parser.c @@ -1,5 +1,6 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * Copyright (C) 2005 Davyd Madeley <davyd@madeley.id.au> + * Copyright (C) 2005 Davyd Madeley <davyd@madeley.id.au> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -27,9 +28,8 @@ #include <gtk/gtk.h> #include <string.h> -#include "yelp-io-channel.h" #include "yelp-info-parser.h" -#include "yelp-utils.h" +#include "yelp-magic-decompressor.h" #include "yelp-debug.h" @@ -186,15 +186,6 @@ enum PAGE_OTHER }; -enum -{ - COLUMN_PAGE_NO, - COLUMN_PAGE_NAME, - COLUMN_PAGE_CONTENT, - - N_COLUMNS -}; - static int page_type (char *page) { @@ -213,32 +204,42 @@ page_type (char *page) static char *open_info_file (char *file) { - GIOChannel *channel = NULL; - int i; - gsize len; - char *str; - GError *error = NULL; - GIOStatus result = G_IO_STATUS_NORMAL; - - debug_print (DB_DEBUG, "!! Opening %s...\n", file); - - channel = yelp_io_channel_new_file (file, &error); - if (!channel) { - return NULL; - } - result = g_io_channel_read_to_end (channel, &str, &len, &error); - if (result != G_IO_STATUS_NORMAL) { - return NULL; - } - g_io_channel_shutdown (channel, FALSE, NULL); - g_io_channel_unref (channel); - - /* C/glib * cannot really handle \0 in strings, convert. */ - for (i = 0; i < (len - 1); i++) - if (str[i] == INFO_TAG_OPEN[0] && str[i+1] == INFO_TAG_OPEN[1]) - str[i] = INFO_C_TAG_OPEN[0]; - - return str; + GFile *gfile; + GConverter *converter; + GFileInputStream *file_stream; + GInputStream *stream; + gchar buf[1024]; + gssize bytes; + GString *string; + gchar *str; + int i; + + gfile = g_file_new_for_path (file); + file_stream = g_file_read (gfile, NULL, NULL); + converter = (GConverter *) yelp_magic_decompressor_new (); + stream = g_converter_input_stream_new ((GInputStream *) file_stream, converter); + string = g_string_new (NULL); + + while ((bytes = g_input_stream_read (stream, buf, 1024, NULL, NULL)) > 0) + g_string_append_len (string, buf, bytes); + + g_object_unref (stream); + /* + g_object_unref (converter); + g_object_unref (file_stream); + g_object_unref (file); + */ + + str = string->str; + + /* C/glib * cannot really handle \0 in strings, convert. */ + for (i = 0; i < (string->len - 1); i++) + if (str[i] == INFO_TAG_OPEN[0] && str[i+1] == INFO_TAG_OPEN[1]) + str[i] = INFO_C_TAG_OPEN[0]; + + g_string_free (string, FALSE); + + return str; } static gchar * @@ -566,7 +567,7 @@ process_page (GtkTreeStore *tree, GHashTable *nodes2offsets, } /* by this point our parent and older sibling should be processed */ - if (!up || !g_ascii_strcasecmp (up, "(dir)") || !strcmp (up, "Top")) + if (!up || !g_ascii_strcasecmp (up, "(dir)")) { debug_print (DB_DEBUG, "\t> no parent\n"); if (!prev || !g_ascii_strcasecmp (prev, "(dir)")) @@ -628,9 +629,9 @@ process_page (GtkTreeStore *tree, GHashTable *nodes2offsets, tmp = g_strdup (node); tmp = g_strdelimit (tmp, " ", '_'); gtk_tree_store_set (tree, iter, - COLUMN_PAGE_NO, tmp, - COLUMN_PAGE_NAME, node, - COLUMN_PAGE_CONTENT, parts[2], + INFO_PARSER_COLUMN_PAGE_NO, tmp, + INFO_PARSER_COLUMN_PAGE_NAME, node, + INFO_PARSER_COLUMN_PAGE_CONTENT, parts[2], -1); g_free (tmp); @@ -788,7 +789,7 @@ GtkTreeStore * rather then consolidating these into one dictionary, we'll just * chain our lookups */ processed_table = g_malloc0 (pages * sizeof (int)); - tree = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, + tree = gtk_tree_store_new (INFO_PARSER_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); nodes2iters = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) gtk_tree_iter_free); @@ -816,7 +817,7 @@ GtkTreeStore static void parse_tree_level (GtkTreeStore *tree, xmlNodePtr *node, GtkTreeIter iter) { - GtkTreeIter children; + GtkTreeIter children, parent; xmlNodePtr newnode; char *page_no = NULL; @@ -828,9 +829,9 @@ parse_tree_level (GtkTreeStore *tree, xmlNodePtr *node, GtkTreeIter iter) do { gtk_tree_model_get (GTK_TREE_MODEL (tree), &iter, - COLUMN_PAGE_NO, &page_no, - COLUMN_PAGE_NAME, &page_name, - COLUMN_PAGE_CONTENT, &page_content, + INFO_PARSER_COLUMN_PAGE_NO, &page_no, + INFO_PARSER_COLUMN_PAGE_NAME, &page_name, + INFO_PARSER_COLUMN_PAGE_CONTENT, &page_content, -1); debug_print (DB_DEBUG, "Got Section: %s\n", page_name); if (strstr (page_content, "*Note") || @@ -856,6 +857,15 @@ parse_tree_level (GtkTreeStore *tree, xmlNodePtr *node, GtkTreeIter iter) g_free (page_content); page_content = NULL; + if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (tree), &parent, &iter)) { + gchar *parent_id; + gtk_tree_model_get (GTK_TREE_MODEL (tree), &parent, + INFO_PARSER_COLUMN_PAGE_NO, &parent_id, + -1); + xmlNewProp (newnode, BAD_CAST "up", BAD_CAST parent_id); + g_free (parent_id); + } + xmlNewProp (newnode, BAD_CAST "id", BAD_CAST page_no); xmlNewProp (newnode, BAD_CAST "name", @@ -914,8 +924,8 @@ resolve_frag_id (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gchar **xref = data; gtk_tree_model_get (GTK_TREE_MODEL (model), iter, - COLUMN_PAGE_NO, &page_no, - COLUMN_PAGE_NAME, &page_name, + INFO_PARSER_COLUMN_PAGE_NO, &page_no, + INFO_PARSER_COLUMN_PAGE_NAME, &page_name, -1); if (g_str_equal (page_name, *xref)) { g_free (*xref); @@ -1029,9 +1039,9 @@ yelp_info_parse_menu (GtkTreeStore *tree, xmlNodePtr *node, ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST tmp); g_free (tmp); - tmp = g_strconcat ("?", xref, NULL); + tmp = g_strconcat ("xref:", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); - g_free (tmp); + g_free (tmp); } else { /* Indexy type menu - we gotta do a little work to fix the * spacing */ @@ -1047,19 +1057,19 @@ yelp_info_parse_menu (GtkTreeStore *tree, xmlNodePtr *node, ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST title); - tmp = g_strconcat ("?", xref, NULL); + tmp = g_strconcat ("xref:", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); - g_free (tmp); + g_free (tmp); xmlNewTextChild (mholder, NULL, BAD_CAST "spacing", BAD_CAST sp); tmp = g_strconcat (g_strstrip(ref), ".", NULL); ref1 = xmlNewTextChild (mholder, NULL, BAD_CAST "a", BAD_CAST tmp); g_free (tmp); - tmp = g_strconcat ("?", xref, NULL); + tmp = g_strconcat ("xref:", xref, NULL); xmlNewProp (ref1, BAD_CAST "href", BAD_CAST tmp); - g_free (tmp); + g_free (tmp); g_free (sp); } xmlNewTextChild (mholder, NULL, BAD_CAST "para", @@ -1214,7 +1224,7 @@ info_process_text_notes (xmlNodePtr *node, gchar *content, GtkTreeStore *tree) link = g_strstrip (link); length = strlen (link) - 1; link[length] = '\0'; - href = g_strconcat ("?", link, NULL); + href = g_strconcat ("xref:", link, NULL); link[length] = 'a'; g_free (link); @@ -1249,8 +1259,8 @@ info_process_text_notes (xmlNodePtr *node, gchar *content, GtkTreeStore *tree) frag = g_strndup (url, tmp1 - url); g_strstrip (frag); gtk_tree_model_foreach (GTK_TREE_MODEL (tree), resolve_frag_id, &frag); - href = g_strconcat ("?", frag, NULL); - g_free (frag); + href = g_strconcat ("xref:", frag, NULL); + g_free (frag); } for (ulink = urls; *ulink != NULL; ulink++) { if (ulink == urls) diff --git a/src/yelp-info-parser.h b/libyelp/yelp-info-parser.h index 23eb71a0..d338a59a 100644 --- a/src/yelp-info-parser.h +++ b/libyelp/yelp-info-parser.h @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2004, Davyd Madeley * @@ -27,7 +27,13 @@ #include <gtk/gtk.h> #include <libxml/tree.h> -#include "yelp-utils.h" +enum { + INFO_PARSER_COLUMN_PAGE_NO, + INFO_PARSER_COLUMN_PAGE_NAME, + INFO_PARSER_COLUMN_PAGE_CONTENT, + INFO_PARSER_N_COLUMNS +}; + GtkTreeStore *yelp_info_parser_parse_file (char *file); xmlDocPtr yelp_info_parser_parse_tree (GtkTreeStore *tree); diff --git a/libyelp/yelp-io-channel.c b/libyelp/yelp-io-channel.c deleted file mode 100644 index 47934d11..00000000 --- a/libyelp/yelp-io-channel.c +++ /dev/null @@ -1,224 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2003 Shaun McCance <shaunm@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. - * - * Author: Shaun McCance <shaunm@gnome.org> - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - - -#include <stdio.h> -#include <glib.h> -#include <glib/gi18n.h> - -#include "yelp-error.h" -#include "yelp-io-channel.h" - -#include <zlib.h> -#ifdef HAVE_LIBBZ2 -#include <bzlib.h> -#endif -#ifdef HAVE_LIBLZMADEC -#include <lzmadec.h> -#endif -#include <string.h> - -typedef struct _YelpIOChannel YelpIOChannel; -struct _YelpIOChannel { - GIOChannel channel; -#ifdef HAVE_LIBBZ2 - BZFILE *bzin; -#endif - gzFile gzin; -#ifdef HAVE_LIBLZMADEC - lzmadec_FILE *lzin; -#endif -}; - -static GIOStatus yelp_io_read (GIOChannel *channel, - gchar *buffer, - gsize count, - gsize *bytes_read, - GError **error); -static GIOStatus yelp_io_close (GIOChannel *channel, - GError **error); -static void yelp_io_free (GIOChannel *channel); -static GIOStatus yelp_io_set_flags (GIOChannel *channel, - GIOFlags flags, - GError **error); -static GIOFlags yelp_io_get_flags (GIOChannel *channel); - -static GIOFuncs yelp_channel_funcs = { - yelp_io_read, - NULL, - NULL, - yelp_io_close, - NULL, - yelp_io_free, - yelp_io_set_flags, - yelp_io_get_flags, -}; - -GIOChannel * -yelp_io_channel_new_file (gchar *file, - GError **error) -{ - YelpIOChannel *channel; - GIOChannel *iochannel; - - if (!file) - return NULL; - - if (!g_file_test (file, G_FILE_TEST_EXISTS) || - g_file_test (file, G_FILE_TEST_IS_DIR)) - return NULL; - - channel = g_new0(YelpIOChannel, 1); - iochannel = (GIOChannel *) channel; - -#ifdef HAVE_LIBBZ2 - if (g_str_has_suffix (file, ".bz2")) - channel->bzin = bzopen (file, "r"); - else -#endif -#ifdef HAVE_LIBLZMADEC - if (g_str_has_suffix (file, ".lzma")) - channel->lzin = lzmadec_open(file); - else -#endif - - channel->gzin = gzopen (file, "r"); - - if( -#ifdef HAVE_LIBBZ2 - !channel->bzin && -#endif -#ifdef HAVE_LIBLZMADEC - !channel->lzin && -#endif - !channel->gzin) { - - yelp_io_free (iochannel); - channel = (YelpIOChannel *) g_io_channel_new_file (file, "r", error); - - if (!channel) { - if (error) { - g_set_error (error, YELP_ERROR, YELP_ERROR_PROCESSING, - _("The file ‘%s’ could not be read and decoded. " - "The file may be compressed in an unsupported " - "format."), - file); - } - return NULL; - } - } - - iochannel->is_readable = TRUE; - iochannel->is_seekable = FALSE; - iochannel->is_writeable = FALSE; - - g_io_channel_init (iochannel); - g_io_channel_set_encoding (iochannel, NULL, NULL); - - iochannel->close_on_unref = TRUE; - iochannel->funcs = &yelp_channel_funcs; - - return iochannel; -} - -static GIOStatus -yelp_io_read (GIOChannel *channel, - gchar *buffer, - gsize count, - gsize *bytes_read, - GError **error) -{ - gssize bytes; - YelpIOChannel *yelp_channel = (YelpIOChannel *) channel; - -#ifdef HAVE_LIBBZ2 - if (yelp_channel->bzin) - bytes = bzread (yelp_channel->bzin, buffer, count); - else -#endif -#if HAVE_LIBLZMADEC - if (yelp_channel->lzin) - bytes = lzmadec_read (yelp_channel->lzin, buffer, count); - else -#endif - bytes = gzread (yelp_channel->gzin, buffer, count); - - *bytes_read = bytes; - - if (bytes < 0) - return G_IO_STATUS_ERROR; - else if (bytes == 0) - return G_IO_STATUS_EOF; - else - return G_IO_STATUS_NORMAL; -} - -static GIOStatus -yelp_io_close (GIOChannel *channel, - GError **error) -{ - YelpIOChannel *yelp_channel = (YelpIOChannel *) channel; - -#ifdef HAVE_LIBBZ2 - if (yelp_channel->bzin) - bzclose (yelp_channel->bzin); -#endif -#ifdef HAVE_LIBLZMADEC - if (yelp_channel->lzin) - lzmadec_close (yelp_channel->lzin); -#endif - if (yelp_channel->gzin) - gzclose (yelp_channel->gzin); - - /* FIXME: return error on error */ - return G_IO_STATUS_NORMAL; -} - -static void -yelp_io_free (GIOChannel *channel) -{ - YelpIOChannel *yelp_channel = (YelpIOChannel *) channel; - - g_free (yelp_channel); -} - -static GIOStatus -yelp_io_set_flags (GIOChannel *channel, - GIOFlags flags, - GError **error) -{ - if (flags == G_IO_FLAG_IS_READABLE) - return G_IO_STATUS_NORMAL; - else - return G_IO_STATUS_ERROR; -} - -static GIOFlags -yelp_io_get_flags (GIOChannel *channel) -{ - return G_IO_FLAG_IS_READABLE; -} - diff --git a/libyelp/yelp-io-channel.h b/libyelp/yelp-io-channel.h deleted file mode 100644 index ad2e0bfe..00000000 --- a/libyelp/yelp-io-channel.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2003 Shaun McCance <shaunm@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. - * - * Author: Shaun McCance <shaunm@gnome.org> - */ - -#ifndef __YELP_IO_CHANNEL_H__ -#define __YELP_IO_CHANNEL_H__ - -#include <glib.h> - -GIOChannel * yelp_io_channel_new_file (gchar *file, - GError **error); - -#endif /* __YELP_IO_CHANNEL_H__ */ diff --git a/libyelp/yelp-location-entry.c b/libyelp/yelp-location-entry.c index 8339d7b2..187f6bf9 100644 --- a/libyelp/yelp-location-entry.c +++ b/libyelp/yelp-location-entry.c @@ -61,6 +61,8 @@ * will cause the FIXME signal to be emitted. **/ +static void location_entry_dispose (GObject *object); +static void location_entry_finalize (GObject *object); static void location_entry_get_property (GObject *object, guint prop_id, GValue *value, @@ -112,8 +114,18 @@ static void cell_set_text_cell (GtkCellLayout *layout, GtkTreeModel *model, GtkTreeIter *iter, YelpLocationEntry *entry); +static void cell_set_bookmark_icon (GtkCellLayout *layout, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + YelpLocationEntry *entry); /* GtkEntryCompletion callbacks */ +static void cell_set_completion_bookmark_icon (GtkCellLayout *layout, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + YelpLocationEntry *entry); static void cell_set_completion_text_cell (GtkCellLayout *layout, GtkCellRenderer *cell, GtkTreeModel *model, @@ -132,28 +144,31 @@ static gboolean entry_match_selected (GtkEntryCompletion *complet typedef struct _YelpLocationEntryPrivate YelpLocationEntryPrivate; struct _YelpLocationEntryPrivate { - GtkWidget *text_entry; + GtkWidget *text_entry; gint desc_column; gint icon_column; gint flags_column; gboolean enable_search; - GtkTreeRowReference *row; - gboolean search_mode; + guint pulse; GtkCellRenderer *icon_cell; - /* owned by entry, do not free */ GtkEntryCompletion *completion; gint completion_desc_column; + gint completion_flags_column; + + /* free this, and only this */ + GtkTreeRowReference *row; }; enum { LOCATION_SELECTED, COMPLETION_SELECTED, SEARCH_ACTIVATED, + BOOKMARK_CLICKED, LAST_SIGNAL }; @@ -177,6 +192,8 @@ yelp_location_entry_class_init (YelpLocationEntryClass *klass) object_class = G_OBJECT_CLASS (klass); + object_class->dispose = location_entry_dispose; + object_class->finalize = location_entry_finalize; object_class->get_property = location_entry_get_property; object_class->set_property = location_entry_set_property; @@ -236,6 +253,22 @@ yelp_location_entry_class_init (YelpLocationEntryClass *klass) G_TYPE_STRING); /** + * YelpLocationEntry::bookmark-clicked + * @widget: The #YelpLocationEntry for which the signal was emitted. + * @user_data: User data set when the handler was connected. + * + * This signal will be emitted whenever a user clicks the bookmark icon + * embedded in the location entry. + **/ + location_entry_signals[BOOKMARK_CLICKED] = + g_signal_new ("bookmark-clicked", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + /** * YelpLocationEntry:desc-column * * The column in the #GtkTreeModel containing a description for each row. @@ -244,7 +277,7 @@ yelp_location_entry_class_init (YelpLocationEntryClass *klass) PROP_DESC_COLUMN, g_param_spec_int ("desc-column", N_("Description Column"), - N_("A column in the model to descriptions from"), + N_("A column in the model to get descriptions from"), -1, G_MAXINT, -1, @@ -305,6 +338,7 @@ yelp_location_entry_class_init (YelpLocationEntryClass *klass) static void yelp_location_entry_init (YelpLocationEntry *entry) { + GtkCellRenderer *bookmark_cell; YelpLocationEntryPrivate *priv = GET_PRIV (entry); GList *cells; @@ -342,6 +376,13 @@ yelp_location_entry_init (YelpLocationEntry *entry) gtk_cell_layout_reorder (GTK_CELL_LAYOUT (entry), priv->icon_cell, 0); + bookmark_cell = gtk_cell_renderer_pixbuf_new (); + gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (entry), bookmark_cell, FALSE); + gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (entry), + bookmark_cell, + (GtkCellLayoutDataFunc) cell_set_bookmark_icon, + entry, NULL); + g_signal_connect (entry, "changed", G_CALLBACK (combo_box_changed_cb), NULL); @@ -358,6 +399,30 @@ yelp_location_entry_init (YelpLocationEntry *entry) } static void +location_entry_dispose (GObject *object) +{ + YelpLocationEntryPrivate *priv = GET_PRIV (object); + + if (priv->row) { + gtk_tree_row_reference_free (priv->row); + priv->row = NULL; + } + + if (priv->pulse > 0) { + g_source_remove (priv->pulse); + priv->pulse = 0; + } + + G_OBJECT_CLASS (yelp_location_entry_parent_class)->dispose (object); +} + +static void +location_entry_finalize (GObject *object) +{ + G_OBJECT_CLASS (yelp_location_entry_parent_class)->finalize (object); +} + +static void location_entry_get_property (GObject *object, guint prop_id, GValue *value, @@ -450,15 +515,16 @@ location_entry_start_search (YelpLocationEntry *entry, static void location_entry_cancel_search (YelpLocationEntry *entry) { + gboolean ret; YelpLocationEntryPrivate *priv = GET_PRIV (entry); GdkEventFocus *event = g_new0 (GdkEventFocus, 1); priv->search_mode = FALSE; location_entry_set_entry (entry, FALSE); event->type = GDK_FOCUS_CHANGE; - event->window = GTK_WIDGET (entry)->window; + event->window = gtk_widget_get_window (GTK_WIDGET (entry)); event->send_event = FALSE; event->in = FALSE; - g_signal_emit_by_name (entry, "focus-out-event", 0, event); + g_signal_emit_by_name (entry, "focus-out-event", event, &ret); g_free (event); /* Hack: This makes the popup disappear when you hit Esc. */ g_object_ref (priv->completion); @@ -473,14 +539,16 @@ yelp_location_entry_set_completion_model (YelpLocationEntry *entry, GtkTreeModel *model, gint text_column, gint desc_column, - gint icon_column) + gint icon_column, + gint flags_column) { YelpLocationEntryPrivate *priv = GET_PRIV (entry); GList *cells; - GtkCellRenderer *icon_cell; + GtkCellRenderer *icon_cell, *bookmark_cell; priv->completion = gtk_entry_completion_new (); priv->completion_desc_column = desc_column; + priv->completion_flags_column = flags_column; gtk_entry_completion_set_minimum_key_length (priv->completion, 3); gtk_entry_completion_set_model (priv->completion, model); gtk_entry_completion_set_text_column (priv->completion, text_column); @@ -511,6 +579,13 @@ yelp_location_entry_set_completion_model (YelpLocationEntry *entry, icon_column, NULL); + bookmark_cell = gtk_cell_renderer_pixbuf_new (); + gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (priv->completion), bookmark_cell, FALSE); + gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (priv->completion), + bookmark_cell, + (GtkCellLayoutDataFunc) cell_set_completion_bookmark_icon, + entry, NULL); + gtk_entry_set_completion (GTK_ENTRY (priv->text_entry), priv->completion); } @@ -554,7 +629,9 @@ location_entry_set_entry (YelpLocationEntry *entry, gboolean emit) gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry), GTK_ENTRY_ICON_PRIMARY, "image-loading"); - g_timeout_add (80, location_entry_pulse, entry); + if (priv->pulse > 0) + g_source_remove (priv->pulse); + priv->pulse = g_timeout_add (80, location_entry_pulse, entry); } else { gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->text_entry), @@ -737,7 +814,7 @@ entry_icon_press_cb (GtkEntry *gtkentry, location_entry_cancel_search (entry); } else if (g_str_equal (name, "bookmark-new")) { - /* FIXME: emit bookmark signal */ + g_signal_emit (entry, location_entry_signals[BOOKMARK_CLICKED], 0); } } } @@ -795,6 +872,46 @@ cell_set_text_cell (GtkCellLayout *layout, } static void +cell_set_bookmark_icon (GtkCellLayout *layout, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + YelpLocationEntry *entry) +{ + gint flags; + YelpLocationEntryPrivate *priv = GET_PRIV (entry); + + gtk_tree_model_get (model, iter, + priv->flags_column, &flags, + -1); + if (!(flags & YELP_LOCATION_ENTRY_IS_SEPARATOR) && + !(flags & YELP_LOCATION_ENTRY_IS_SEARCH) && + (flags & YELP_LOCATION_ENTRY_IS_BOOKMARKED)) + g_object_set (cell, "icon-name", "bookmark", NULL); + else + g_object_set (cell, "icon-name", NULL, NULL); +} + +static void +cell_set_completion_bookmark_icon (GtkCellLayout *layout, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + YelpLocationEntry *entry) +{ + gint flags; + YelpLocationEntryPrivate *priv = GET_PRIV (entry); + + gtk_tree_model_get (model, iter, + priv->completion_flags_column, &flags, + -1); + if (flags & YELP_LOCATION_ENTRY_IS_BOOKMARKED) + g_object_set (cell, "icon-name", "bookmark", NULL); + else + g_object_set (cell, "icon-name", NULL, NULL); +} + +static void cell_set_completion_text_cell (GtkCellLayout *layout, GtkCellRenderer *cell, GtkTreeModel *model, diff --git a/libyelp/yelp-location-entry.h b/libyelp/yelp-location-entry.h index 08db5c99..37167add 100644 --- a/libyelp/yelp-location-entry.h +++ b/libyelp/yelp-location-entry.h @@ -73,10 +73,11 @@ struct _YelpLocationEntryClass * to be displayed by a #YelpLocationEntry. **/ typedef enum { - YELP_LOCATION_ENTRY_CAN_BOOKMARK = 1 << 0, - YELP_LOCATION_ENTRY_IS_LOADING = 1 << 1, - YELP_LOCATION_ENTRY_IS_SEPARATOR = 1 << 2, - YELP_LOCATION_ENTRY_IS_SEARCH = 1 << 3 + YELP_LOCATION_ENTRY_CAN_BOOKMARK = 1 << 0, + YELP_LOCATION_ENTRY_IS_BOOKMARKED = 1 << 1, + YELP_LOCATION_ENTRY_IS_LOADING = 1 << 2, + YELP_LOCATION_ENTRY_IS_SEPARATOR = 1 << 3, + YELP_LOCATION_ENTRY_IS_SEARCH = 1 << 4 } YelpLocationEntryFlags; GType yelp_location_entry_get_type (void); @@ -90,7 +91,8 @@ void yelp_location_entry_set_completion_model (YelpLocationEntry *ent GtkTreeModel *model, gint text_column, gint desc_column, - gint icon_column); + gint icon_column, + gint flags_column); void yelp_location_entry_start_search (YelpLocationEntry *entry); diff --git a/libyelp/yelp-lzma-decompressor.c b/libyelp/yelp-lzma-decompressor.c new file mode 100644 index 00000000..b304cde2 --- /dev/null +++ b/libyelp/yelp-lzma-decompressor.c @@ -0,0 +1,182 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#include "config.h" + +#include "yelp-lzma-decompressor.h" + +#include <errno.h> +#include <string.h> + +#include <lzma.h> + +#include <glib/gi18n.h> +#include <gio/gio.h> + + +static void yelp_lzma_decompressor_iface_init (GConverterIface *iface); + +struct _YelpLzmaDecompressor +{ + GObject parent_instance; + + lzma_stream lzmastream; +}; + +G_DEFINE_TYPE_WITH_CODE (YelpLzmaDecompressor, yelp_lzma_decompressor, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_CONVERTER, + yelp_lzma_decompressor_iface_init)) + +static void +yelp_lzma_decompressor_finalize (GObject *object) +{ + YelpLzmaDecompressor *decompressor; + + decompressor = YELP_LZMA_DECOMPRESSOR (object); + + lzma_end (&decompressor->lzmastream); + + G_OBJECT_CLASS (yelp_lzma_decompressor_parent_class)->finalize (object); +} + +static void +yelp_lzma_decompressor_init (YelpLzmaDecompressor *decompressor) +{ +} + +static void +yelp_lzma_decompressor_constructed (GObject *object) +{ + YelpLzmaDecompressor *decompressor; + lzma_stream tmp = LZMA_STREAM_INIT; + lzma_ret res; + + decompressor = YELP_LZMA_DECOMPRESSOR (object); + + decompressor->lzmastream = tmp; + res = lzma_auto_decoder (&decompressor->lzmastream, SIZE_MAX, 0); + + if (res == LZMA_MEM_ERROR) + g_error ("YelpLzmaDecompressor: Not enough memory for lzma use"); + + if (res == LZMA_OPTIONS_ERROR) + g_error ("YelpLzmaDecompressor: Unsupported flags"); + + if (res != LZMA_OK) + g_error ("YelpLzmaDecompressor: Unexpected lzma error"); +} + +static void +yelp_lzma_decompressor_class_init (YelpLzmaDecompressorClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = yelp_lzma_decompressor_finalize; + gobject_class->constructed = yelp_lzma_decompressor_constructed; +} + +YelpLzmaDecompressor * +yelp_lzma_decompressor_new (void) +{ + YelpLzmaDecompressor *decompressor; + + decompressor = g_object_new (YELP_TYPE_LZMA_DECOMPRESSOR, NULL); + + return decompressor; +} + +static void +yelp_lzma_decompressor_reset (GConverter *converter) +{ + YelpLzmaDecompressor *decompressor = YELP_LZMA_DECOMPRESSOR (converter); + lzma_ret res; + + /* lzma doesn't have a reset function. Ending and reiniting + * might do the trick. But this is untested. If reset matters + * to you, test this. + */ + lzma_end (&decompressor->lzmastream); + res = lzma_code (&decompressor->lzmastream, LZMA_RUN); + + if (res == LZMA_MEM_ERROR ) + g_error ("YelpLzmaDecompressor: Not enough memory for lzma use"); + + if (res != LZMA_OK) + g_error ("YelpLzmaDecompressor: Unexpected lzma error"); +} + +static GConverterResult +yelp_lzma_decompressor_convert (GConverter *converter, + const void *inbuf, + gsize inbuf_size, + void *outbuf, + gsize outbuf_size, + GConverterFlags flags, + gsize *bytes_read, + gsize *bytes_written, + GError **error) +{ + YelpLzmaDecompressor *decompressor; + gsize header_size; + lzma_ret res; + + decompressor = YELP_LZMA_DECOMPRESSOR (converter); + + decompressor->lzmastream.next_in = (void *)inbuf; + decompressor->lzmastream.avail_in = inbuf_size; + + decompressor->lzmastream.next_out = outbuf; + decompressor->lzmastream.avail_out = outbuf_size; + + res = lzma_code (&decompressor->lzmastream, LZMA_RUN); + + if (res == LZMA_DATA_ERROR) { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, + _("Invalid compressed data")); + return G_CONVERTER_ERROR; + } + + if (res == LZMA_MEM_ERROR) { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, + _("Not enough memory")); + return G_CONVERTER_ERROR; + } + + if (res == LZMA_OK || res == LZMA_STREAM_END) { + *bytes_read = inbuf_size - decompressor->lzmastream.avail_in; + *bytes_written = outbuf_size - decompressor->lzmastream.avail_out; + + if (res == LZMA_STREAM_END) + return G_CONVERTER_FINISHED; + return G_CONVERTER_CONVERTED; + } + + g_assert_not_reached (); +} + +static void +yelp_lzma_decompressor_iface_init (GConverterIface *iface) +{ + iface->convert = yelp_lzma_decompressor_convert; + iface->reset = yelp_lzma_decompressor_reset; +} diff --git a/libyelp/yelp-lzma-decompressor.h b/libyelp/yelp-lzma-decompressor.h new file mode 100644 index 00000000..7f1bce96 --- /dev/null +++ b/libyelp/yelp-lzma-decompressor.h @@ -0,0 +1,52 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#ifndef __YELP_LZMA_DECOMPRESSOR_H__ +#define __YELP_LZMA_DECOMPRESSOR_H__ + +#include <glib-object.h> + +G_BEGIN_DECLS + +#define YELP_TYPE_LZMA_DECOMPRESSOR (yelp_lzma_decompressor_get_type ()) +#define YELP_LZMA_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_LZMA_DECOMPRESSOR, YelpLzmaDecompressor)) +#define YELP_LZMA_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), YELP_TYPE_LZMA_DECOMPRESSOR, YelpLzmaDecompressorClass)) +#define YELP_IS_LZMA_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_LZMA_DECOMPRESSOR)) +#define YELP_IS_LZMA_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_LZMA_DECOMPRESSOR)) +#define YELP_LZMA_DECOMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_LZMA_DECOMPRESSOR, YelpLzmaDecompressorClass)) + +typedef struct _YelpLzmaDecompressor YelpLzmaDecompressor; +typedef struct _YelpLzmaDecompressorClass YelpLzmaDecompressorClass; + +struct _YelpLzmaDecompressorClass +{ + GObjectClass parent_class; +}; + +GType yelp_lzma_decompressor_get_type (void); + +YelpLzmaDecompressor *yelp_lzma_decompressor_new (void); + +G_END_DECLS + +#endif /* __YELP_LZMA_DECOMPRESSOR_H__ */ diff --git a/libyelp/yelp-magic-decompressor.c b/libyelp/yelp-magic-decompressor.c new file mode 100644 index 00000000..89fa2be9 --- /dev/null +++ b/libyelp/yelp-magic-decompressor.c @@ -0,0 +1,161 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#include "config.h" + +#include <glib/gi18n.h> + +#include "yelp-magic-decompressor.h" + +#ifdef ENABLE_BZ2 +#include "yelp-bz2-decompressor.h" +#endif + +#ifdef ENABLE_LZMA +#include "yelp-lzma-decompressor.h" +#endif + + +static void yelp_magic_decompressor_iface_init (GConverterIface *iface); + +struct _YelpMagicDecompressor +{ + GObject parent_instance; + + GConverter *magic_decoder_ring; + + gboolean first; +}; + +G_DEFINE_TYPE_WITH_CODE (YelpMagicDecompressor, yelp_magic_decompressor, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_CONVERTER, + yelp_magic_decompressor_iface_init)) + +static void +yelp_magic_decompressor_dispose (GObject *object) +{ + YelpMagicDecompressor *decompressor; + + if (decompressor->magic_decoder_ring) { + g_object_unref (decompressor->magic_decoder_ring); + decompressor->magic_decoder_ring = NULL; + } + + G_OBJECT_CLASS (yelp_magic_decompressor_parent_class)->dispose (object); +} + +static void +yelp_magic_decompressor_init (YelpMagicDecompressor *decompressor) +{ + decompressor->magic_decoder_ring = NULL; + decompressor->first = TRUE; +} + +static void +yelp_magic_decompressor_class_init (YelpMagicDecompressorClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->dispose = yelp_magic_decompressor_dispose; +} + +YelpMagicDecompressor * +yelp_magic_decompressor_new (void) +{ + YelpMagicDecompressor *decompressor; + + decompressor = g_object_new (YELP_TYPE_MAGIC_DECOMPRESSOR, NULL); + + return decompressor; +} + +static void +yelp_magic_decompressor_reset (GConverter *converter) +{ + YelpMagicDecompressor *decompressor = YELP_MAGIC_DECOMPRESSOR (converter); + + if (decompressor->magic_decoder_ring) + g_converter_reset (decompressor->magic_decoder_ring); +} + +static GConverterResult +yelp_magic_decompressor_convert (GConverter *converter, + const void *inbuf, + gsize inbuf_size, + void *outbuf, + gsize outbuf_size, + GConverterFlags flags, + gsize *bytes_read, + gsize *bytes_written, + GError **error) +{ + YelpMagicDecompressor *decompressor; + + decompressor = YELP_MAGIC_DECOMPRESSOR (converter); + + if (decompressor->first) { + decompressor->first = FALSE; + /* If input_size is less than two the first time, we end up + * not getting detection. Might be worth addressing. Not + * sure I care. + * + * The two-byte magic we're doing here is not sufficient in + * the general case. It is sufficient for the specific data + * Yelp deals with. + */ + if (inbuf_size <= 2) + ; +#ifdef ENABLE_BZ2 + else if (((gchar *) inbuf)[0] == 'B' && + ((gchar *) inbuf)[1] == 'Z') { + decompressor->magic_decoder_ring = (GConverter *) yelp_bz2_decompressor_new (); + } +#endif +#ifdef ENABLE_LZMA + else if (((gchar *) inbuf)[0] == ']' && + ((gchar *) inbuf)[1] == '\0') { + decompressor->magic_decoder_ring = (GConverter *) yelp_lzma_decompressor_new (); + } +#endif + else { + decompressor->magic_decoder_ring = + (GConverter *) g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); + } + } + + return g_converter_convert (decompressor->magic_decoder_ring, + inbuf, inbuf_size, + outbuf, outbuf_size, + flags, + bytes_read, bytes_written, + error); + + g_assert_not_reached (); +} + +static void +yelp_magic_decompressor_iface_init (GConverterIface *iface) +{ + iface->convert = yelp_magic_decompressor_convert; + iface->reset = yelp_magic_decompressor_reset; +} diff --git a/libyelp/yelp-magic-decompressor.h b/libyelp/yelp-magic-decompressor.h new file mode 100644 index 00000000..15c09bbd --- /dev/null +++ b/libyelp/yelp-magic-decompressor.h @@ -0,0 +1,52 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> + * + * 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., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: Shaun McCance <shaunm@gnome.org> + */ + +#ifndef __YELP_MAGIC_DECOMPRESSOR_H__ +#define __YELP_MAGIC_DECOMPRESSOR_H__ + +#include <gio/gio.h> + +G_BEGIN_DECLS + +#define YELP_TYPE_MAGIC_DECOMPRESSOR (yelp_magic_decompressor_get_type ()) +#define YELP_MAGIC_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_MAGIC_DECOMPRESSOR, YelpMagicDecompressor)) +#define YELP_MAGIC_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), YELP_TYPE_MAGIC_DECOMPRESSOR, YelpMagicDecompressorClass)) +#define YELP_IS_MAGIC_DECOMPRESSOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_MAGIC_DECOMPRESSOR)) +#define YELP_IS_MAGIC_DECOMPRESSOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_MAGIC_DECOMPRESSOR)) +#define YELP_MAGIC_DECOMPRESSOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_MAGIC_DECOMPRESSOR, YelpMagicDecompressorClass)) + +typedef struct _YelpMagicDecompressor YelpMagicDecompressor; +typedef struct _YelpMagicDecompressorClass YelpMagicDecompressorClass; + +struct _YelpMagicDecompressorClass +{ + GObjectClass parent_class; +}; + +GType yelp_magic_decompressor_get_type (void); + +YelpMagicDecompressor *yelp_magic_decompressor_new (void); + +G_END_DECLS + +#endif /* __YELP_MAGIC_DECOMPRESSOR_H__ */ diff --git a/libyelp/yelp-settings.c b/libyelp/yelp-settings.c index 1f838d63..0c8a386a 100644 --- a/libyelp/yelp-settings.c +++ b/libyelp/yelp-settings.c @@ -645,7 +645,7 @@ yelp_settings_set_icons (YelpSettings *settings, gchar *filename = va_arg (args, gchar *); if (settings->priv->icons[icon] != NULL) g_free (settings->priv->icons[icon]); - settings->priv->icons[icon] = g_strdup (filename); + settings->priv->icons[icon] = g_filename_to_uri (filename, NULL, NULL); icon = va_arg (args, YelpSettingsIcon); } @@ -922,7 +922,8 @@ icon_theme_changed (GtkIconTheme *theme, settings->priv->icon_size, GTK_ICON_LOOKUP_NO_SVG); if (info != NULL) { - settings->priv->icons[i] = g_strdup (gtk_icon_info_get_filename (info)); + settings->priv->icons[i] = g_filename_to_uri (gtk_icon_info_get_filename (info), + NULL, NULL); gtk_icon_info_free (info); } else { @@ -935,6 +936,39 @@ icon_theme_changed (GtkIconTheme *theme, g_signal_emit (settings, settings_signals[ICONS_CHANGED], 0); } +gint +yelp_settings_cmp_icons (const gchar *icon1, + const gchar *icon2) +{ + static const gchar *icons[] = { + "yelp-page-task", + "yelp-page-video", + "yelp-page-tip", + "yelp-page-ui", + "help-contents", + NULL + }; + gint i; + for (i = 0; icons[i] != NULL; i++) { + gboolean eq1 = icon1 ? g_str_equal (icon1, icons[i]) : FALSE; + gboolean eq2 = icon2 ? g_str_equal (icon2, icons[i]) : FALSE; + if (eq1 && eq2) + return 0; + else if (eq1) + return -1; + else if (eq2) + return 1; + } + if (icon1 == NULL && icon2 == NULL) + return 0; + else if (icon2 == NULL) + return -1; + else if (icon1 == NULL) + return 1; + else + return strcmp (icon1, icon2); +} + /******************************************************************************/ static void diff --git a/libyelp/yelp-settings.h b/libyelp/yelp-settings.h index 0c8fbd09..bf6af532 100644 --- a/libyelp/yelp-settings.h +++ b/libyelp/yelp-settings.h @@ -126,6 +126,9 @@ gboolean yelp_settings_get_editor_mode (YelpSettings *sett void yelp_settings_set_editor_mode (YelpSettings *settings, gboolean editor_mode); +gint yelp_settings_cmp_icons (const gchar *icon1, + const gchar *icon2); + G_END_DECLS #endif /* __YELP_SETTINGS_H__ */ diff --git a/libyelp/yelp-simple-document.c b/libyelp/yelp-simple-document.c index 658df0cd..de62a9ba 100644 --- a/libyelp/yelp-simple-document.c +++ b/libyelp/yelp-simple-document.c @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2003-2009 Shaun McCance <shaunm@gnome.org> * @@ -76,7 +76,7 @@ static void document_finish_read (YelpDocument const gchar *contents); static gchar * document_get_mime_type (YelpDocument *document, const gchar *mime_type); -static void document_signal_all (YelpSimpleDocument *document); +static gboolean document_signal_all (YelpSimpleDocument *document); static void file_info_cb (GFile *file, GAsyncResult *result, @@ -93,7 +93,7 @@ static void stream_close_cb (GInputStream static void request_cancel (GCancellable *cancellable, Request *request); -static void request_try_free (Request *request); +static gboolean request_try_free (Request *request); static void request_free (Request *request); static void @@ -253,18 +253,24 @@ document_get_mime_type (YelpDocument *document, return NULL; } -static void +static gboolean document_signal_all (YelpSimpleDocument *document) { GSList *cur; for (cur = document->priv->reqs; cur != NULL; cur = cur->next) { - Request *request = (Request *) cur->data; - if (request->callback) - request->callback (request->document, - YELP_DOCUMENT_SIGNAL_CONTENTS, - request->user_data, - NULL); + Request *request = (Request *) cur->data; + if (request->callback) { + request->callback (request->document, + YELP_DOCUMENT_SIGNAL_INFO, + request->user_data, + NULL); + request->callback (request->document, + YELP_DOCUMENT_SIGNAL_CONTENTS, + request->user_data, + NULL); + } } + return FALSE; } /******************************************************************************/ @@ -277,8 +283,21 @@ file_info_cb (GFile *file, GFileInfo *info = g_file_query_info_finish (file, result, NULL); const gchar *type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE); - document->priv->mime_type = g_strdup (type); + if (g_str_equal (type, "text/x-readme")) + document->priv->mime_type = g_strdup ("text/plain"); + else + document->priv->mime_type = g_strdup (type); g_object_unref (info); + + if (g_str_equal (document->priv->mime_type, "text/plain")) { + gchar *basename = g_file_get_basename (document->priv->file); + yelp_document_set_page_id (YELP_DOCUMENT (document), "//index", "//index"); + yelp_document_set_page_id (YELP_DOCUMENT (document), NULL, "//index"); + yelp_document_set_page_title (YELP_DOCUMENT (document), "//index", basename); + yelp_document_set_page_icon (YELP_DOCUMENT (document), "//index", "text-x-generic"); + g_free (basename); + } + g_file_read_async (document->priv->file, G_PRIORITY_DEFAULT, NULL, @@ -383,7 +402,7 @@ static void request_cancel (GCancellable *cancellable, Request *request) { GSList *cur; - YelpSimpleDocument *document = request->document; + YelpSimpleDocument *document = (YelpSimpleDocument *) request->document; g_assert (document != NULL && YELP_IS_SIMPLE_DOCUMENT (document)); @@ -396,7 +415,7 @@ request_cancel (GCancellable *cancellable, Request *request) request_try_free (request); } -static void +static gboolean request_try_free (Request *request) { if (!g_cancellable_is_cancelled (request->cancellable)) @@ -406,6 +425,7 @@ request_try_free (Request *request) request_free (request); else g_idle_add ((GSourceFunc) request_try_free, request); + return FALSE; } static void diff --git a/libyelp/yelp-uri.c b/libyelp/yelp-uri.c index 4ea70d56..8e0c414c 100644 --- a/libyelp/yelp-uri.c +++ b/libyelp/yelp-uri.c @@ -279,18 +279,16 @@ resolve_async (YelpUri *uri) break; case YELP_URI_DOCUMENT_TYPE_DOCBOOK: case YELP_URI_DOCUMENT_TYPE_MALLARD: + case YELP_URI_DOCUMENT_TYPE_INFO: resolve_xref_uri (uri); break; case YELP_URI_DOCUMENT_TYPE_MAN: /* FIXME: what do we do? */ break; - case YELP_URI_DOCUMENT_TYPE_INFO: - /* FIXME: what do we do? */ - break; case YELP_URI_DOCUMENT_TYPE_TEXT: case YELP_URI_DOCUMENT_TYPE_HTML: case YELP_URI_DOCUMENT_TYPE_XHTML: - /* FIXME: look up a relative file */ + resolve_file_path (uri); break; case YELP_URI_DOCUMENT_TYPE_TOC: /* FIXME: what do we do? */ @@ -465,11 +463,18 @@ resolve_file_uri (YelpUri *uri) static void resolve_file_path (YelpUri *uri) { - YelpUriPrivate *base_priv; + YelpUriPrivate *base_priv = NULL; YelpUriPrivate *priv = GET_PRIV (uri); gchar *path; const gchar *hash = strchr (priv->res_arg, '#'); + /* Treat xref: URIs like relative file paths */ + if (g_str_has_prefix (priv->res_arg, "xref:")) { + gchar *tmp = g_strdup (priv->res_arg + 5); + g_free (priv->res_arg); + priv->res_arg = tmp; + } + if (priv->res_base) base_priv = GET_PRIV (priv->res_base); @@ -484,7 +489,19 @@ resolve_file_path (YelpUri *uri) priv->gfile = g_file_new_for_path (path); } else if (base_priv && base_priv->gfile) { - priv->gfile = g_file_resolve_relative_path (base_priv->gfile, path); + GFileInfo *info; + info = g_file_query_info (base_priv->gfile, + G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NONE, + NULL, NULL); + if (g_file_info_get_file_type (info) == G_FILE_TYPE_REGULAR) { + GFile *parent = g_file_get_parent (base_priv->gfile); + priv->gfile = g_file_resolve_relative_path (parent, path); + g_object_unref (parent); + } + else { + priv->gfile = g_file_resolve_relative_path (base_priv->gfile, path); + } } else { gchar *cur; @@ -508,17 +525,17 @@ resolve_data_dirs (YelpUri *ret, const gchar * const *sdatadirs = g_get_system_data_dirs (); const gchar * const *langs = g_get_language_names (); /* The strings are still owned by GLib; we just own the array. */ - const gchar **datadirs; + gchar **datadirs; YelpUriPrivate *priv = GET_PRIV (ret); gchar *filename = NULL; gchar **searchpath = NULL; gint searchi, searchmax; gint datadir_i, subdir_i, lang_i; - datadirs = g_new0 (gchar *, g_strv_length (sdatadirs) + 2); - datadirs[0] = g_get_user_data_dir (); + datadirs = g_new0 (gchar *, g_strv_length ((gchar **) sdatadirs) + 2); + datadirs[0] = (gchar *) g_get_user_data_dir (); for (datadir_i = 0; sdatadirs[datadir_i]; datadir_i++) - datadirs[datadir_i + 1] = sdatadirs[datadir_i]; + datadirs[datadir_i + 1] = (gchar *) sdatadirs[datadir_i]; searchi = 0; searchmax = 10; @@ -765,7 +782,7 @@ resolve_man_uri (YelpUri *uri) if (section) realsection = section; else - realsection = mancats[k]; + realsection = (gchar *) mancats[k]; fullpath = g_strconcat (langdir, "/man", realsection, "/", name, ".", realsection, @@ -968,7 +985,8 @@ resolve_xref_uri (YelpUri *uri) priv->frag_id ? "#" : "", priv->frag_id ? priv->frag_id : "", NULL); - else if (g_str_has_prefix (priv->docuri, "file:")) + else if (g_str_has_prefix (priv->docuri, "file:") || + g_str_has_prefix (priv->docuri, "info:") ) priv->fulluri = g_strconcat (priv->docuri, (priv->page_id || priv->frag_id) ? "#" : "", priv->page_id ? priv->page_id : "", @@ -1092,15 +1110,25 @@ resolve_gfile (YelpUri *uri, const gchar *hash) priv->frag_id = g_strdup (splithash[1]); } } - else if (g_str_equal (mime_type, "text/html")) { - priv->tmptype = YELP_URI_DOCUMENT_TYPE_HTML; - if (priv->frag_id == NULL) - priv->frag_id = g_strdup (hash); - } - else if (g_str_equal (mime_type, "application/xhtml+xml")) { - priv->tmptype = YELP_URI_DOCUMENT_TYPE_XHTML; + else if (g_str_equal (mime_type, "text/html") || + g_str_equal (mime_type, "application/xhtml+xml")) { + GFile *parent = g_file_get_parent (priv->gfile); + priv->docuri = g_file_get_uri (parent); + g_object_unref (parent); + priv->tmptype = mime_type[0] == 't' ? YELP_URI_DOCUMENT_TYPE_HTML : YELP_URI_DOCUMENT_TYPE_XHTML; + if (priv->page_id == NULL) + priv->page_id = g_file_get_basename (priv->gfile); if (priv->frag_id == NULL) priv->frag_id = g_strdup (hash); + if (priv->fulluri == NULL) { + gchar *fulluri; + fulluri = g_file_get_uri (priv->gfile); + priv->fulluri = g_strconcat (fulluri, + priv->frag_id ? "#" : NULL, + priv->frag_id, + NULL); + g_free (fulluri); + } } else if (g_str_equal (mime_type, "application/x-gzip")) { if (g_str_has_suffix (basename, ".info.gz")) @@ -1136,6 +1164,9 @@ resolve_gfile (YelpUri *uri, const gchar *hash) if (priv->frag_id == NULL) priv->frag_id = g_strdup (hash); } + else if (g_str_equal (mime_type, "text/x-readme")) { + priv->tmptype = YELP_URI_DOCUMENT_TYPE_TEXT; + } else { priv->tmptype = YELP_URI_DOCUMENT_TYPE_EXTERNAL; } diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c index 3971c805..783f7057 100644 --- a/libyelp/yelp-view.c +++ b/libyelp/yelp-view.c @@ -34,6 +34,7 @@ #include "yelp-debug.h" #include "yelp-docbook-document.h" #include "yelp-error.h" +#include "yelp-settings.h" #include "yelp-types.h" #include "yelp-view.h" @@ -53,6 +54,23 @@ static void yelp_view_set_property (GObject *object, const GValue *value, GParamSpec *pspec); +static void view_scrolled (GtkAdjustment *adjustment, + YelpView *view); +static void view_scroll_adjustments (YelpView *view, + GtkAdjustment *hadj, + GtkAdjustment *vadj, + gpointer data); +static void popup_open_link (GtkMenuItem *item, + YelpView *view); +static void popup_open_link_new (GtkMenuItem *item, + YelpView *view); +static void popup_save_image (GtkMenuItem *item, + YelpView *view); +static void popup_send_image (GtkMenuItem *item, + YelpView *view); +static void view_populate_popup (YelpView *view, + GtkMenu *menu, + gpointer data); static gboolean view_navigation_requested (WebKitWebView *view, WebKitWebFrame *frame, WebKitNetworkRequest *request, @@ -66,6 +84,13 @@ static void view_resource_request (WebKitWebView *vi WebKitNetworkResponse *response, gpointer user_data); +static void view_print (GtkAction *action, + YelpView *view); +static void view_history_action (GtkAction *action, + YelpView *view); +static void view_navigation_action (GtkAction *action, + YelpView *view); + static void view_clear_load (YelpView *view); static void view_load_page (YelpView *view); static void view_show_error_page (YelpView *view, @@ -81,10 +106,41 @@ static void document_callback (YelpDocument *document, YelpView *view, GError *error); +static const GtkActionEntry entries[] = { + {"YelpViewPrint", GTK_STOCK_PRINT, + N_("_Print..."), + "<Control>P", + NULL, + G_CALLBACK (view_print) }, + {"YelpViewGoBack", GTK_STOCK_GO_BACK, + N_("_Back"), + "<Alt>Left", + NULL, + G_CALLBACK (view_history_action) }, + {"YelpViewGoForward", GTK_STOCK_GO_FORWARD, + N_("_Forward"), + "<Alt>Right", + NULL, + G_CALLBACK (view_history_action) }, + {"YelpViewGoPrevious", NULL, + N_("_Previous Page"), + "<Control>Page_Up", + NULL, + G_CALLBACK (view_navigation_action) }, + {"YelpViewGoNext", NULL, + N_("_Next Page"), + "<Control>Page_Down", + NULL, + G_CALLBACK (view_navigation_action) } +}; + +static gchar *nautilus_sendto = NULL; + enum { PROP_0, PROP_URI, PROP_STATE, + PROP_PAGE_ID, PROP_ROOT_TITLE, PROP_PAGE_TITLE, PROP_PAGE_DESC, @@ -104,6 +160,25 @@ G_DEFINE_TYPE (YelpView, yelp_view, WEBKIT_TYPE_WEB_VIEW); static WebKitWebSettings *websettings; +typedef struct _YelpBackEntry YelpBackEntry; +struct _YelpBackEntry { + YelpUri *uri; + gchar *title; + gchar *desc; + gdouble hadj; + gdouble vadj; +}; +static void +back_entry_free (YelpBackEntry *back) +{ + if (back == NULL) + return; + g_object_unref (back->uri); + g_free (back->title); + g_free (back->desc); + g_free (back); +} + typedef struct _YelpViewPrivate YelpViewPrivate; struct _YelpViewPrivate { YelpUri *uri; @@ -111,14 +186,30 @@ struct _YelpViewPrivate { gchar *bogus_uri; YelpDocument *document; GCancellable *cancellable; + GtkAdjustment *vadjustment; + GtkAdjustment *hadjustment; + gdouble vadjust; + gdouble hadjust; + gulong vadjuster; + gulong hadjuster; + + gchar *popup_link_uri; + gchar *popup_image_uri; YelpViewState state; + gchar *page_id; gchar *root_title; gchar *page_title; gchar *page_desc; gchar *page_icon; + GList *back_list; + GList *back_cur; + gboolean back_load; + + GtkActionGroup *action_group; + gint navigation_requested; }; @@ -143,6 +234,16 @@ yelp_view_init (YelpView *view) G_CALLBACK (view_navigation_requested), NULL); g_signal_connect (view, "resource-request-starting", G_CALLBACK (view_resource_request), NULL); + g_signal_connect (view, "set-scroll-adjustments", + G_CALLBACK (view_scroll_adjustments), NULL); + g_signal_connect (view, "populate-popup", + G_CALLBACK (view_populate_popup), NULL); + + priv->action_group = gtk_action_group_new ("YelpView"); + gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (priv->action_group, + entries, G_N_ELEMENTS (entries), + view); } static void @@ -155,17 +256,38 @@ yelp_view_dispose (GObject *object) priv->uri = NULL; } + if (priv->vadjuster > 0) { + g_source_remove (priv->vadjuster); + priv->vadjuster = 0; + } + + if (priv->hadjuster > 0) { + g_source_remove (priv->hadjuster); + priv->hadjuster = 0; + } + if (priv->cancellable) { g_cancellable_cancel (priv->cancellable); g_object_unref (priv->cancellable); priv->cancellable = NULL; } + if (priv->action_group) { + g_object_unref (priv->action_group); + priv->action_group = NULL; + } + if (priv->document) { g_object_unref (priv->document); priv->document = NULL; } + priv->back_cur = NULL; + while (priv->back_list) { + back_entry_free ((YelpBackEntry *) priv->back_list->data); + priv->back_list = g_list_delete_link (priv->back_list, priv->back_list); + } + G_OBJECT_CLASS (yelp_view_parent_class)->dispose (object); } @@ -174,6 +296,10 @@ yelp_view_finalize (GObject *object) { YelpViewPrivate *priv = GET_PRIV (object); + g_free (priv->popup_link_uri); + g_free (priv->popup_image_uri); + + g_free (priv->page_id); g_free (priv->root_title); g_free (priv->page_title); g_free (priv->page_desc); @@ -190,6 +316,8 @@ yelp_view_class_init (YelpViewClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); YelpSettings *settings = yelp_settings_get_default (); + nautilus_sendto = g_find_program_in_path ("nautilus-sendto"); + websettings = webkit_web_settings_new (); g_signal_connect (settings, "fonts-changed", @@ -212,8 +340,8 @@ yelp_view_class_init (YelpViewClass *klass) G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, G_TYPE_STRING); + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, YELP_TYPE_URI); signals[EXTERNAL_URI] = g_signal_new ("external-uri", @@ -253,10 +381,19 @@ yelp_view_class_init (YelpViewClass *klass) G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); g_object_class_install_property (object_class, + PROP_PAGE_ID, + g_param_spec_string ("page-id", + N_("Page ID"), + N_("The ID of the root page of the page being viewed"), + NULL, + G_PARAM_READABLE | + G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + + g_object_class_install_property (object_class, PROP_ROOT_TITLE, g_param_spec_string ("root-title", N_("Root Title"), - N_("The title of the root page of the page being viewew"), + N_("The title of the root page of the page being viewed"), NULL, G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); @@ -302,6 +439,9 @@ yelp_view_get_property (GObject *object, case PROP_URI: g_value_set_object (value, priv->uri); break; + case PROP_PAGE_ID: + g_value_set_string (value, priv->page_id); + break; case PROP_ROOT_TITLE: g_value_set_string (value, priv->root_title); break; @@ -312,7 +452,10 @@ yelp_view_get_property (GObject *object, g_value_set_string (value, priv->page_desc); break; case PROP_PAGE_ICON: - g_value_set_string (value, priv->page_icon); + if (priv->page_icon) + g_value_set_string (value, priv->page_icon); + else + g_value_set_string (value, "help-contents"); break; case PROP_STATE: g_value_set_enum (value, priv->state); @@ -370,22 +513,48 @@ yelp_view_load_uri (YelpView *view, YelpUri *uri) { YelpViewPrivate *priv = GET_PRIV (view); + GParamSpec *spec; view_clear_load (view); g_object_set (view, "state", YELP_VIEW_STATE_LOADING, NULL); + g_free (priv->page_id); g_free (priv->root_title); g_free (priv->page_title); g_free (priv->page_desc); g_free (priv->page_icon); + priv->page_id = NULL; priv->root_title = NULL; priv->page_title = NULL; priv->page_desc = NULL; priv->page_icon = NULL; - g_signal_emit_by_name (view, "notify::root-title", 0); - g_signal_emit_by_name (view, "notify::page-title", 0); - g_signal_emit_by_name (view, "notify::page-desc", 0); - g_signal_emit_by_name (view, "notify::page-icon", 0); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-id"); + g_signal_emit_by_name (view, "notify::page-id", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "root-title"); + g_signal_emit_by_name (view, "notify::root-title", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-title"); + g_signal_emit_by_name (view, "notify::page-title", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-desc"); + g_signal_emit_by_name (view, "notify::page-desc", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-icon"); + g_signal_emit_by_name (view, "notify::page-icon", spec); + + gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, + "YelpViewGoPrevious"), + FALSE); + gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, + "YelpViewGoNext"), + FALSE); priv->uri = g_object_ref (uri); if (!yelp_uri_is_resolved (uri)) { @@ -424,11 +593,314 @@ YelpDocument * yelp_view_get_document (YelpView *view) { YelpViewPrivate *priv = GET_PRIV (view); - return g_object_ref (priv->document); + return priv->document; +} + +GtkActionGroup * +yelp_view_get_action_group (YelpView *view) +{ + YelpViewPrivate *priv = GET_PRIV (view); + return priv->action_group; } /******************************************************************************/ +static void +view_scrolled (GtkAdjustment *adjustment, + YelpView *view) +{ + YelpViewPrivate *priv = GET_PRIV (view); + if (priv->back_cur == NULL || priv->back_cur->data == NULL) + return; + if (adjustment == priv->vadjustment) + ((YelpBackEntry *) priv->back_cur->data)->vadj = gtk_adjustment_get_value (adjustment); + else if (adjustment = priv->hadjustment) + ((YelpBackEntry *) priv->back_cur->data)->hadj = gtk_adjustment_get_value (adjustment); +} + +static void +view_scroll_adjustments (YelpView *view, + GtkAdjustment *hadj, + GtkAdjustment *vadj, + gpointer data) +{ + YelpViewPrivate *priv = GET_PRIV (view); + priv->vadjustment = vadj; + if (priv->vadjuster > 0) + g_source_remove (priv->vadjuster); + priv->vadjuster = 0; + if (vadj) { + priv->vadjuster = g_signal_connect (vadj, "value-changed", + G_CALLBACK (view_scrolled), view); + } + priv->hadjustment = hadj; + if (priv->hadjuster > 0) + g_source_remove (priv->hadjuster); + priv->hadjuster = 0; + if (hadj) { + priv->hadjuster = g_signal_connect (hadj, "value-changed", + G_CALLBACK (view_scrolled), view); + } +} + +static void +popup_open_link (GtkMenuItem *item, + YelpView *view) +{ + YelpViewPrivate *priv = GET_PRIV (view); + YelpUri *uri; + + if (g_str_has_prefix (priv->popup_link_uri, BOGUS_URI)) + uri = yelp_uri_new_relative (priv->uri, priv->popup_link_uri + BOGUS_URI_LEN); + else + uri = yelp_uri_new_relative (priv->uri, priv->popup_link_uri); + + yelp_view_load_uri (view, uri); + + g_free (priv->popup_link_uri); + priv->popup_link_uri = NULL; +} + +static void +popup_open_link_new (GtkMenuItem *item, + YelpView *view) +{ + YelpViewPrivate *priv = GET_PRIV (view); + YelpUri *uri; + + if (g_str_has_prefix (priv->popup_link_uri, BOGUS_URI)) + uri = yelp_uri_new_relative (priv->uri, priv->popup_link_uri + BOGUS_URI_LEN); + else + uri = yelp_uri_new_relative (priv->uri, priv->popup_link_uri); + + g_free (priv->popup_link_uri); + priv->popup_link_uri = NULL; + + g_signal_emit (view, signals[NEW_VIEW_REQUESTED], 0, uri); + g_object_unref (uri); +} + +typedef struct _YelpSaveData YelpSaveData; +struct _YelpSaveData { + GFile *orig; + GFile *dest; + YelpView *view; + GtkWindow *window; +}; + +static void +file_copied (GFile *file, + GAsyncResult *res, + YelpSaveData *data) +{ + GError *error = NULL; + if (!g_file_copy_finish (file, res, &error)) { + GtkWidget *dialog = gtk_message_dialog_new (GTK_WIDGET_VISIBLE (data->window) ? data->window : NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "%s", error->message); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + } + g_object_unref (data->orig); + g_object_unref (data->dest); + g_object_unref (data->view); + g_object_unref (data->window); +} + +static void +popup_save_image (GtkMenuItem *item, + YelpView *view) +{ + YelpSaveData *data; + GtkWidget *dialog, *window; + gchar *basename; + gint res; + YelpViewPrivate *priv = GET_PRIV (view); + + for (window = gtk_widget_get_parent (GTK_WIDGET (view)); + window && !GTK_IS_WINDOW (window); + window = gtk_widget_get_parent (window)); + + data = g_new0 (YelpSaveData, 1); + data->orig = g_file_new_for_uri (priv->popup_image_uri); + data->view = g_object_ref (view); + data->window = g_object_ref (window); + g_free (priv->popup_image_uri); + priv->popup_image_uri = NULL; + + dialog = gtk_file_chooser_dialog_new (_("Save Image"), + GTK_WINDOW (window), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + NULL); + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); + basename = g_file_get_basename (data->orig); + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename); + g_free (basename); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), + g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)); + + res = gtk_dialog_run (GTK_DIALOG (dialog)); + + if (res == GTK_RESPONSE_OK) { + data->dest = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); + g_file_copy_async (data->orig, data->dest, + G_FILE_COPY_OVERWRITE, + G_PRIORITY_DEFAULT, + NULL, NULL, NULL, + (GAsyncReadyCallback) file_copied, + data); + } + else { + g_object_unref (data->orig); + g_object_unref (data->view); + g_object_unref (data->window); + g_free (data); + } + + gtk_widget_destroy (dialog); +} + +static void +popup_send_image (GtkMenuItem *item, + YelpView *view) +{ + gchar *command; + YelpViewPrivate *priv = GET_PRIV (view); + + command = g_strdup_printf ("%s %s", nautilus_sendto, priv->popup_image_uri); + + gdk_spawn_command_line_on_screen (gtk_widget_get_screen (GTK_WIDGET (view)), + command, NULL); + + g_free (command); + g_free (priv->popup_image_uri); + priv->popup_image_uri = NULL; +} + +static void +view_populate_popup (YelpView *view, + GtkMenu *menu, + gpointer data) +{ + WebKitHitTestResult *result; + WebKitHitTestResultContext context; + GdkEvent *event; + YelpViewPrivate *priv = GET_PRIV (view); + GList *children; + GtkWidget *item; + + children = gtk_container_get_children (GTK_CONTAINER (menu)); + while (children) { + gtk_container_remove (GTK_CONTAINER (menu), + GTK_WIDGET (children->data)); + children = children->next; + } + g_list_free (children); + + event = gtk_get_current_event (); + + result = webkit_web_view_get_hit_test_result (WEBKIT_WEB_VIEW (view), (GdkEventButton *) event); + g_object_get (result, "context", &context, NULL); + + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { + gchar *uri; + g_object_get (result, "link-uri", &uri, NULL); + g_free (priv->popup_link_uri); + priv->popup_link_uri = uri; + + if (g_str_has_prefix (priv->popup_link_uri, "mailto:")) { + /* Not using a mnemonic because underscores are common in email + * addresses, and we'd have to escape them. There doesn't seem + * to be a quick GTK+ function for this. In practice, there will + * probably only be one menu item for mailto link popups anyway, + * so the mnemonic's not that big of a deal. + */ + gchar *label = g_strdup_printf (_("Send email to %s"), + priv->popup_link_uri + 7); + item = gtk_menu_item_new_with_label (label); + g_signal_connect (item, "activate", + G_CALLBACK (popup_open_link), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + else { + item = gtk_menu_item_new_with_mnemonic (_("_Open Link")); + g_signal_connect (item, "activate", + G_CALLBACK (popup_open_link), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_mnemonic (_("Open Link in New _Window")); + g_signal_connect (item, "activate", + G_CALLBACK (popup_open_link_new), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + } + else { + item = gtk_action_create_menu_item (gtk_action_group_get_action (priv->action_group, + "YelpViewGoBack")); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + item = gtk_action_create_menu_item (gtk_action_group_get_action (priv->action_group, + "YelpViewGoForward")); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + + if ((context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) || + (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_MEDIA)) { + /* This doesn't currently work for video with automatic controls, + * because WebKit puts the hit test on the div with the controls. + */ + gboolean image = context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE; + gchar *uri; + g_object_get (result, image ? "image-uri" : "media-uri", &uri, NULL); + g_free (priv->popup_image_uri); + if (g_str_has_prefix (uri, BOGUS_URI)) { + priv->popup_image_uri = yelp_uri_locate_file_uri (priv->uri, uri + BOGUS_URI_LEN); + g_free (uri); + } + else { + priv->popup_image_uri = uri; + } + + item = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + if (image) + item = gtk_menu_item_new_with_mnemonic (_("_Save Image As...")); + else + item = gtk_menu_item_new_with_mnemonic (_("_Save Video As...")); + g_signal_connect (item, "activate", + G_CALLBACK (popup_save_image), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + if (nautilus_sendto) { + if (image) + item = gtk_menu_item_new_with_mnemonic (_("S_end Image To...")); + else + item = gtk_menu_item_new_with_mnemonic (_("S_end Video To...")); + g_signal_connect (item, "activate", + G_CALLBACK (popup_send_image), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + } + + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION) { + item = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_mnemonic (_("_Copy Text")); + g_signal_connect_swapped (item, "activate", + G_CALLBACK (webkit_web_view_copy_clipboard), view); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + } + + g_object_unref (result); + gdk_event_free (event); + gtk_widget_show_all (GTK_WIDGET (menu)); +} + static gboolean view_navigation_requested (WebKitWebView *view, WebKitWebFrame *frame, @@ -437,13 +909,14 @@ view_navigation_requested (WebKitWebView *view, WebKitWebPolicyDecision *decision, gpointer user_data) { + const gchar *requri = webkit_network_request_get_uri (request); YelpViewPrivate *priv = GET_PRIV (view); YelpUri *uri; - debug_print (DB_FUNCTION, "entering\n"); - - uri = yelp_uri_new_relative (priv->uri, - webkit_network_request_get_uri (request)); + if (g_str_has_prefix (requri, BOGUS_URI)) + uri = yelp_uri_new_relative (priv->uri, requri + BOGUS_URI_LEN); + else + uri = yelp_uri_new_relative (priv->uri, requri); webkit_web_policy_decision_ignore (decision); @@ -486,6 +959,71 @@ view_resource_request (WebKitWebView *view, } static void +view_print (GtkAction *action, YelpView *view) +{ + webkit_web_frame_print (webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view))); +} + +static void +view_history_action (GtkAction *action, + YelpView *view) +{ + GList *newcur; + YelpViewPrivate *priv = GET_PRIV (view); + + if (priv->back_cur == NULL) + return; + + if (g_str_equal (gtk_action_get_name (action), "YelpViewGoBack")) + newcur = priv->back_cur->next; + else + newcur = priv->back_cur->prev; + + if (newcur == NULL) + return; + + priv->back_cur = newcur; + + if (priv->back_cur->data == NULL) + return; + + priv->back_load = TRUE; + yelp_view_load_uri (view, ((YelpBackEntry *) priv->back_cur->data)->uri); + priv->vadjust = ((YelpBackEntry *) priv->back_cur->data)->vadj; + priv->hadjust = ((YelpBackEntry *) priv->back_cur->data)->hadj; +} + +static void +view_navigation_action (GtkAction *action, + YelpView *view) +{ + YelpViewPrivate *priv = GET_PRIV (view); + gchar *page_id, *new_id, *xref; + YelpUri *new_uri; + + page_id = yelp_uri_get_page_id (priv->uri); + + if (g_str_equal (gtk_action_get_name (action), "YelpViewGoPrevious")) + new_id = yelp_document_get_prev_id (priv->document, page_id); + else + new_id = yelp_document_get_next_id (priv->document, page_id); + + /* Just in case we screwed up somewhere */ + if (new_id == NULL) { + gtk_action_set_sensitive (action, FALSE); + return; + } + + xref = g_strconcat ("xref:", new_id, NULL); + new_uri = yelp_uri_new_relative (priv->uri, xref); + yelp_view_load_uri (view, new_uri); + + g_free (xref); + g_free (new_id); + g_object_unref (new_uri); +} + +static void view_clear_load (YelpView *view) { YelpViewPrivate *priv = GET_PRIV (view); @@ -542,7 +1080,6 @@ view_load_page (YelpView *view) priv->cancellable, (YelpDocumentCallback) document_callback, view); - g_free (page_id); } @@ -554,46 +1091,77 @@ view_show_error_page (YelpView *view, static const gchar *errorpage = "<html><head>" "<style type='text/css'>" - "body { margin: 1em; }" - ".outer {" - " border: solid 2px #cc0000;" - " -webkit-border-radius: 6px;" - "}" - ".inner {" - " padding: 1em;" - " border: solid 2px white;" - " -webkit-border-radius: 6px;" - " background: #fce94f;" - "}" + "body {" + " margin: 1em;" + " color: %s;" + " background-color: %s;" + " }\n" + "div.note {" + " padding: 6px;" + " border-color: %s;" + " border-top: solid 1px;" + " border-bottom: solid 1px;" + " background-color: %s;" + " }\n" + "div.note div.inner {" + " margin: 0; padding: 0;" + " background-image: url(%s);" + " background-position: %s top;" + " background-repeat: no-repeat;" + " min-height: %ipx;" + " }\n" + "div.note div.contents {" + " margin-%s: %ipx;" + " }\n" + "div.note div.title {" + " margin-%s: %ipx;" + " margin-bottom: 0.2em;" + " font-weight: bold;" + " color: %s;" + " }\n" "</style>" "</head><body>" - "<div class='outer'><div class='inner'>" + "<div class='note'><div class='inner'>" "<div class='title'>%s</div>" "<div class='contents'>%s</div>" "</div></div>" "</body></html>"; + YelpSettings *settings = yelp_settings_get_default (); gchar *page, *title = NULL; + gchar *textcolor, *bgcolor, *noteborder, *notebg, *titlecolor, *noteicon; + gint iconsize; + const gchar *left = (gtk_widget_get_direction((GtkWidget *) view) == GTK_TEXT_DIR_RTL) ? "right" : "left"; if (error->domain == YELP_ERROR) switch (error->code) { case YELP_ERROR_NOT_FOUND: - title = _("Document or Page Not Found"); + title = _("Not Found"); break; case YELP_ERROR_CANT_READ: - title = _("Cannot Read the Document or Page"); + title = _("Cannot Read"); break; default: break; } if (title == NULL) title = _("Unknown Error"); - page = g_strdup_printf (errorpage, title, error->message); + textcolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_TEXT); + bgcolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_BASE); + noteborder = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_RED_BORDER); + notebg = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_YELLOW_BASE); + titlecolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_TEXT_LIGHT); + noteicon = yelp_settings_get_icon (settings, YELP_SETTINGS_ICON_WARNING); + iconsize = yelp_settings_get_icon_size (settings) + 6; + page = g_strdup_printf (errorpage, + textcolor, bgcolor, noteborder, notebg, noteicon, + left, iconsize, left, iconsize, left, iconsize, + titlecolor, title, error->message); g_object_set (view, "state", YELP_VIEW_STATE_ERROR, NULL); g_signal_handler_block (view, priv->navigation_requested); webkit_web_view_load_string (WEBKIT_WEB_VIEW (view), page, "text/html", "UTF-8", - "about:error"); + "file:///error/"); g_signal_handler_unblock (view, priv->navigation_requested); g_error_free (error); g_free (page); @@ -650,14 +1218,18 @@ uri_resolved (YelpUri *uri, { YelpViewPrivate *priv = GET_PRIV (view); YelpDocument *document; + YelpBackEntry *back; + GtkAction *action; + GSList *proxies, *cur; GError *error; gchar *struri; + GParamSpec *spec; debug_print (DB_FUNCTION, "entering\n"); switch (yelp_uri_get_document_type (uri)) { case YELP_URI_DOCUMENT_TYPE_EXTERNAL: - g_signal_emit (view, signals[EXTERNAL_URI], 0, uri, 0); + g_signal_emit (view, signals[EXTERNAL_URI], 0, uri); return; case YELP_URI_DOCUMENT_TYPE_NOT_FOUND: struri = yelp_uri_get_canonical_uri (uri); @@ -684,7 +1256,83 @@ uri_resolved (YelpUri *uri, g_object_unref (priv->document); priv->document = document; - g_signal_emit_by_name (view, "notify::yelp-uri", 0); + if (!priv->back_load) { + back = g_new0 (YelpBackEntry, 1); + back->uri = g_object_ref (uri); + while (priv->back_list != priv->back_cur) { + back_entry_free ((YelpBackEntry *) priv->back_list->data); + priv->back_list = g_list_delete_link (priv->back_list, priv->back_list); + } + priv->back_list = g_list_prepend (priv->back_list, back); + priv->back_cur = priv->back_list; + } + priv->back_load = FALSE; + + action = gtk_action_group_get_action (priv->action_group, "YelpViewGoBack"); + gtk_action_set_sensitive (action, FALSE); + proxies = gtk_action_get_proxies (action); + if (priv->back_cur->next && priv->back_cur->next->data) { + gchar *tooltip = ""; + back = priv->back_cur->next->data; + + gtk_action_set_sensitive (action, TRUE); + if (back->title && back->desc) { + gchar *color; + color = yelp_settings_get_color (yelp_settings_get_default (), + YELP_SETTINGS_COLOR_TEXT_LIGHT); + tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>", + back->title, color, back->desc); + g_free (color); + } + else if (back->title) + tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>", + back->title); + /* Can't seem to use markup on GtkAction tooltip */ + for (cur = proxies; cur != NULL; cur = cur->next) + gtk_widget_set_tooltip_markup (GTK_WIDGET (cur->data), tooltip); + } + else { + for (cur = proxies; cur != NULL; cur = cur->next) + gtk_widget_set_tooltip_text (GTK_WIDGET (cur->data), ""); + } + + action = gtk_action_group_get_action (priv->action_group, "YelpViewGoForward"); + gtk_action_set_sensitive (action, FALSE); + proxies = gtk_action_get_proxies (action); + if (priv->back_cur->prev && priv->back_cur->prev->data) { + gchar *tooltip = ""; + back = priv->back_cur->prev->data; + + gtk_action_set_sensitive (action, TRUE); + if (back->title && back->desc) { + gchar *color; + color = yelp_settings_get_color (yelp_settings_get_default (), + YELP_SETTINGS_COLOR_TEXT_LIGHT); + tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>", + back->title, color, back->desc); + g_free (color); + } + else if (back->title) + tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>", + back->title); + /* Can't seem to use markup on GtkAction tooltip */ + for (cur = proxies; cur != NULL; cur = cur->next) + gtk_widget_set_tooltip_markup (GTK_WIDGET (cur->data), tooltip); + } + else { + for (cur = proxies; cur != NULL; cur = cur->next) + gtk_widget_set_tooltip_text (GTK_WIDGET (cur->data), ""); + } + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "yelp-uri"); + g_signal_emit_by_name (view, "notify::yelp-uri", spec); + + g_free (priv->page_id); + priv->page_id = yelp_uri_get_page_id (priv->uri); + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-id"); + g_signal_emit_by_name (view, "notify::page-id", spec); view_load_page (view); } @@ -700,27 +1348,73 @@ document_callback (YelpDocument *document, debug_print (DB_FUNCTION, "entering\n"); if (signal == YELP_DOCUMENT_SIGNAL_INFO) { - gchar *page_id; - page_id = yelp_uri_get_page_id (priv->uri); + gchar *prev_id, *next_id, *real_id; + GtkAction *action; + YelpBackEntry *back = NULL; + GParamSpec *spec; + + real_id = yelp_document_get_page_id (document, priv->page_id); + if (priv->page_id && real_id && g_str_equal (real_id, priv->page_id)) { + g_free (real_id); + } + else { + GParamSpec *spec; + g_free (priv->page_id); + priv->page_id = real_id; + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-id"); + g_signal_emit_by_name (view, "notify::page-id", spec); + } g_free (priv->root_title); g_free (priv->page_title); g_free (priv->page_desc); g_free (priv->page_icon); - priv->root_title = yelp_document_get_root_title (document, page_id); - priv->page_title = yelp_document_get_page_title (document, page_id); - priv->page_desc = yelp_document_get_page_desc (document, page_id); - priv->page_icon = yelp_document_get_page_icon (document, page_id); + priv->root_title = yelp_document_get_root_title (document, priv->page_id); + priv->page_title = yelp_document_get_page_title (document, priv->page_id); + priv->page_desc = yelp_document_get_page_desc (document, priv->page_id); + priv->page_icon = yelp_document_get_page_icon (document, priv->page_id); + + if (priv->back_cur) + back = priv->back_cur->data; + if (back) { + g_free (back->title); + back->title = g_strdup (priv->page_title); + g_free (back->desc); + back->desc = g_strdup (priv->page_desc); + } + + prev_id = yelp_document_get_prev_id (document, priv->page_id); + action = gtk_action_group_get_action (priv->action_group, "YelpViewGoPrevious"); + gtk_action_set_sensitive (action, prev_id != NULL); + g_free (prev_id); - g_signal_emit_by_name (view, "notify::root-title", 0); - g_signal_emit_by_name (view, "notify::page-title", 0); - g_signal_emit_by_name (view, "notify::page-desc", 0); - g_signal_emit_by_name (view, "notify::page-icon", 0); + next_id = yelp_document_get_next_id (document, priv->page_id); + action = gtk_action_group_get_action (priv->action_group, "YelpViewGoNext"); + gtk_action_set_sensitive (action, next_id != NULL); + g_free (next_id); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "root-title"); + g_signal_emit_by_name (view, "notify::root-title", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-title"); + g_signal_emit_by_name (view, "notify::page-title", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-desc"); + g_signal_emit_by_name (view, "notify::page-desc", spec); + + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-icon"); + g_signal_emit_by_name (view, "notify::page-icon", spec); } else if (signal == YELP_DOCUMENT_SIGNAL_CONTENTS) { + YelpUriDocumentType doctype; const gchar *contents; - gchar *mime_type, *page_id, *frag_id; + gchar *mime_type, *page_id, *frag_id, *full_uri; page_id = yelp_uri_get_page_id (priv->uri); debug_print (DB_ARG, " document.uri.page_id=\"%s\"\n", page_id); mime_type = yelp_document_get_mime_type (document, page_id); @@ -750,10 +1444,21 @@ document_callback (YelpDocument *document, based on actual file locations, but in fact it doesn't matter. So we just make a bogus URI that's easy to process later. */ - if (frag_id != NULL) - priv->bogus_uri = g_strdup_printf ("%s%p#%s", BOGUS_URI, priv->uri, frag_id); - else - priv->bogus_uri = g_strdup_printf ("%s%p", BOGUS_URI, priv->uri); + doctype = yelp_uri_get_document_type (priv->uri); + full_uri = yelp_uri_get_canonical_uri (priv->uri); + if (g_str_has_prefix (full_uri, "file:/") && + (doctype == YELP_URI_DOCUMENT_TYPE_TEXT || + doctype == YELP_URI_DOCUMENT_TYPE_HTML || + doctype == YELP_URI_DOCUMENT_TYPE_XHTML )) { + priv->bogus_uri = full_uri; + } + else { + g_free (full_uri); + if (frag_id != NULL) + priv->bogus_uri = g_strdup_printf ("%s%p#%s", BOGUS_URI, priv->uri, frag_id); + else + priv->bogus_uri = g_strdup_printf ("%s%p", BOGUS_URI, priv->uri); + } g_signal_handler_block (view, priv->navigation_requested); webkit_web_view_load_string (WEBKIT_WEB_VIEW (view), contents, @@ -762,6 +1467,44 @@ document_callback (YelpDocument *document, priv->bogus_uri); g_signal_handler_unblock (view, priv->navigation_requested); g_object_set (view, "state", YELP_VIEW_STATE_LOADED, NULL); + + /* If we need to set the GtkAdjustment or trigger the page title + * from what WebKit thinks it is (see comment below), we need to + * let the main loop run through. + */ + if (priv->vadjust > 0 || priv->hadjust > 0 || priv->page_title == NULL) + while (g_main_context_pending (NULL)) + g_main_context_iteration (NULL, FALSE); + + /* Setting adjustments only work after the page is loaded. These + * are set by view_history_action, and they're reset to 0 after + * each load here. + */ + if (priv->vadjust > 0) { + if (priv->vadjustment) + gtk_adjustment_set_value (priv->vadjustment, priv->vadjust); + priv->vadjust = 0; + } + if (priv->hadjust > 0) { + if (priv->hadjustment) + gtk_adjustment_set_value (priv->hadjustment, priv->hadjust); + priv->hadjust = 0; + } + + /* If the document didn't give us a page title, get it from WebKit. + * We let the main loop run through so that WebKit gets the title + * set so that we can send notify::page-title before loaded. It + * simplifies things if YelpView consumers can assume the title + * is set before loaded is triggered. + */ + if (priv->page_title == NULL) { + GParamSpec *spec; + priv->page_title = g_strdup (webkit_web_view_get_title (WEBKIT_WEB_VIEW (view))); + spec = g_object_class_find_property ((GObjectClass *) YELP_VIEW_GET_CLASS (view), + "page-title"); + g_signal_emit_by_name (view, "notify::page-title", spec); + } + g_free (frag_id); g_free (page_id); g_free (mime_type); diff --git a/libyelp/yelp-view.h b/libyelp/yelp-view.h index ea2238fc..d6930524 100644 --- a/libyelp/yelp-view.h +++ b/libyelp/yelp-view.h @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Copyright (C) 2009 Shaun McCance <shaunm@gnome.org> * @@ -36,6 +36,7 @@ G_BEGIN_DECLS #define YELP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), YELP_TYPE_VIEW, YelpViewClass)) #define YELP_IS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), YELP_TYPE_VIEW)) #define YELP_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), YELP_TYPE_VIEW)) +#define YELP_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_VIEW, YelpViewClass)) typedef struct _YelpView YelpView; typedef struct _YelpViewClass YelpViewClass; @@ -57,19 +58,19 @@ typedef enum { YELP_VIEW_STATE_ERROR } YelpViewState; -GType yelp_view_get_type (void); -GType yelp_view_state_get_type (void); +GType yelp_view_get_type (void); +GType yelp_view_state_get_type (void); -GtkWidget * yelp_view_new (void); - -void yelp_view_load (YelpView *view, - const gchar *uri); -void yelp_view_load_uri (YelpView *view, - YelpUri *uri); -void yelp_view_load_document (YelpView *view, - YelpUri *uri, - YelpDocument *document); -YelpDocument * yelp_view_get_document (YelpView *view); +GtkWidget * yelp_view_new (void); +void yelp_view_load (YelpView *view, + const gchar *uri); +void yelp_view_load_uri (YelpView *view, + YelpUri *uri); +void yelp_view_load_document (YelpView *view, + YelpUri *uri, + YelpDocument *document); +YelpDocument * yelp_view_get_document (YelpView *view); +GtkActionGroup * yelp_view_get_action_group (YelpView *view); G_END_DECLS @@ -14,6 +14,7 @@ bn_IN br bs ca +crh cs cy da diff --git a/po/POTFILES.in b/po/POTFILES.in index f1addbab..32b1b9d4 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -4,38 +4,22 @@ data/info.xml.in data/man.xml.in data/toc.xml.in -[type: gettext/glade]data/ui/yelp-bookmarks.ui -[type: gettext/glade]data/ui/yelp-bookmarks-add.ui -[type: gettext/glade]data/ui/yelp-open-location.ui -[type: gettext/glade]data/ui/yelp-preferences.ui +libyelp/yelp-bz2-decompressor.c libyelp/yelp-debug.c libyelp/yelp-docbook-document.c libyelp/yelp-document.c libyelp/yelp-error.c -libyelp/yelp-io-channel.c +libyelp/yelp-info-document.c libyelp/yelp-location-entry.c +libyelp/yelp-lzma-decompressor.c +libyelp/yelp-magic-decompressor.c libyelp/yelp-mallard-document.c -libyelp/yelp-marshal.c libyelp/yelp-settings.c libyelp/yelp-simple-document.c libyelp/yelp-transform.c -libyelp/yelp-types.c libyelp/yelp-uri.c libyelp/yelp-view.c -src/eggdesktopfile.c -src/eggsmclient.c src/yelp-application.c -src/yelp-base.c -src/yelp-bookmarks.c -src/yelp-db-print.c -src/yelp-error.c -src/yelp-info.c -src/yelp-main.c -src/yelp-man.c -src/yelp-page.c -src/yelp-print.c -src/yelp-search-parser.c -src/yelp-search.c -src/yelp-toc.c src/yelp-window.c +src/yelp.c yelp.desktop.in.in diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 8cda3a43..b4e8b5c2 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -1 +1,7 @@ +src/yelp-man.c +src/yelp-print.c +src/yelp-search-parser.c +src/yelp-search.c +src/yelp-toc.c +src/yelp-db-print.c yelp.desktop.in diff --git a/po/bn_IN.po b/po/bn_IN.po index 9c84f1a1..1922d717 100644 --- a/po/bn_IN.po +++ b/po/bn_IN.po @@ -1,18 +1,18 @@ # translation of bn_IN.po to Bengali INDIA # The Bengali India translation for yelp. -# Copyright (C) 2003, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the yelp package. # # Khandakar Mujahidul Islam <suzan229@yahoo.com>, 2003-2005. # Runa Bhattacharjee <runabh@gmail.com>, 2007. # Runa Bhattacharjee <runab@fedoraproject.org>, 2008. -# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009. +# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: bn_IN\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=yelp&component=general\n" "POT-Creation-Date: 2009-08-07 00:18+0000\n" -"PO-Revision-Date: 2009-08-25 16:09+0530\n" +"PO-Revision-Date: 2010-04-17 15:22+0530\n" "Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n" "Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n" "MIME-Version: 1.0\n" @@ -1161,7 +1161,7 @@ msgstr " GNOME Help Browser" # msgstr "জিনোমের মধ্যে দেয়া সহায়ক তথ্য গ্ড়গ্রহণ করুন" #: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 msgid "Help" -msgstr "সহায়তা" +msgstr "সাহায্য" #: ../src/yelp-mallard.c:311 #| msgid "File not found" @@ -1365,7 +1365,7 @@ msgstr "বুকমার্ক (_B)" # msgstr "/যাও/_সূচি" #: ../src/yelp-window.c:308 msgid "_Help" -msgstr "সহায়তা (_H)" +msgstr "সাহায্য (_H)" #: ../src/yelp-window.c:311 msgid "_New Window" @@ -1415,7 +1415,7 @@ msgstr "শব্দ অথবা পংক্তির পূর্ববর্ # msgstr "স্বয়ংক্রিয়ভাবে _চারদিক থেকে জড়িয়ে ফেলে" #: ../src/yelp-window.c:363 msgid "Find Ne_xt" -msgstr "পরবর্তী উপস্থিত অনুসন্ধান করুন (_x)" +msgstr "পরবর্তী উপস্থিতি অনুসন্ধান করুন (_x)" #: ../src/yelp-window.c:365 msgid "Find next occurrence of the word or phrase" @@ -1423,7 +1423,7 @@ msgstr "শব্দ অথবা পংক্তির পরবর্তী #: ../src/yelp-window.c:368 msgid "_Preferences" -msgstr "পছন্দ(_P)" +msgstr "পছন্দসই বৈশিষ্ট্য (_P)" #: ../src/yelp-window.c:373 msgid "_Reload" @@ -1468,7 +1468,7 @@ msgstr "পরবর্তী বিভাগ (_N)" # msgstr "_অনুসন্ধান হচ্ছেঃ " #: ../src/yelp-window.c:410 ../src/yelp-window.c:442 msgid "_Contents" -msgstr "সূচি (_C)" +msgstr "সূচিপত্র (_C)" #: ../src/yelp-window.c:416 msgid "_Add Bookmark" diff --git a/po/ca@valencia.po b/po/ca@valencia.po new file mode 100644 index 00000000..02d5dbad --- /dev/null +++ b/po/ca@valencia.po @@ -0,0 +1,2126 @@ +# Yelp Catalan translation. +# Copyright © 2002, 2003-2008 Free Software Foundation, Inc. +# This file is distributed under the same license as the yelp package. +# Jordi Mallach <jordi@sindominio.net>, 2002, 2003, 2004, 2005, 2006. +# Gil Forcada <gilforcada@guifi.net>, 2007, 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: yelp\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=yelp&component=general\n" +"POT-Creation-Date: 2010-04-17 09:54+0000\n" +"PO-Revision-Date: 2009-11-22 17:13+0100\n" +"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n" +"Language-Team: Catalan <tradgnome@softcatala.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../data/info.xml.in.h:1 +msgid "GNU Info Pages" +msgstr "Pàgines info de GNU" + +#: ../data/info.xml.in.h:2 +msgid "Traditional command line help (info)" +msgstr "Ajuda de línia d'ordes tradicional (info)" + +#: ../data/man.xml.in.h:1 +msgid "Applications" +msgstr "Aplicacions" + +#: ../data/man.xml.in.h:2 +msgid "BLT Functions" +msgstr "Funcions del BLT" + +#: ../data/man.xml.in.h:3 +msgid "Configuration Files" +msgstr "Fitxers de configuració" + +#: ../data/man.xml.in.h:4 +msgid "Curses Functions" +msgstr "Funcions del Curses" + +#: ../data/man.xml.in.h:5 ../data/toc.xml.in.h:35 +msgid "Development" +msgstr "Desenvolupament" + +#: ../data/man.xml.in.h:6 +msgid "FORTRAN Functions" +msgstr "Funcions del FORTRAN" + +#: ../data/man.xml.in.h:7 ../data/toc.xml.in.h:56 +msgid "Games" +msgstr "Jocs" + +#: ../data/man.xml.in.h:8 +msgid "Hardware Devices" +msgstr "Dispositius de maquinari" + +#: ../data/man.xml.in.h:9 +msgid "Kernel Routines" +msgstr "Rutines del nucli" + +#: ../data/man.xml.in.h:10 +msgid "Manual Pages" +msgstr "Pàgines de manual" + +#: ../data/man.xml.in.h:11 +msgid "Network Audio Sound Functions" +msgstr "Funcions de so d'àudio de xarxa" + +#: ../data/man.xml.in.h:12 +msgid "OpenSSL Applications" +msgstr "Aplicacions per a l'OpenSSL" + +#: ../data/man.xml.in.h:13 +msgid "OpenSSL Configuration" +msgstr "Configuració de l'OpenSSL" + +#: ../data/man.xml.in.h:14 +msgid "OpenSSL Functions" +msgstr "Funcions de l'OpenSSL" + +#: ../data/man.xml.in.h:15 +msgid "OpenSSL Overviews" +msgstr "Resums de l'OpenSSL" + +#: ../data/man.xml.in.h:16 +msgid "Overviews" +msgstr "Resums" + +#: ../data/man.xml.in.h:17 +msgid "POSIX Functions" +msgstr "Funcions POSIX" + +#: ../data/man.xml.in.h:18 +msgid "POSIX Headers" +msgstr "Capçaleres POSIX" + +#: ../data/man.xml.in.h:19 +msgid "Perl Functions" +msgstr "Funcions del Perl" + +#: ../data/man.xml.in.h:20 +msgid "Qt Functions" +msgstr "Funcions del Qt" + +#: ../data/man.xml.in.h:21 +msgid "Readline Functions" +msgstr "Funcions del readline" + +#: ../data/man.xml.in.h:22 +msgid "Section 0p" +msgstr "Secció 0p" + +#: ../data/man.xml.in.h:23 +msgid "Section 1m" +msgstr "Secció 1m" + +#: ../data/man.xml.in.h:24 +msgid "Section 1ssl" +msgstr "Secció 1ssl" + +#: ../data/man.xml.in.h:25 +msgid "Section 1x" +msgstr "Secció 1x" + +#: ../data/man.xml.in.h:26 +msgid "Section 2" +msgstr "Secció 2" + +#: ../data/man.xml.in.h:27 +msgid "Section 3blt" +msgstr "Secció 3blt" + +#: ../data/man.xml.in.h:28 +msgid "Section 3f" +msgstr "Secció 3f" + +#: ../data/man.xml.in.h:29 +msgid "Section 3nas" +msgstr "Secció 3nas" + +#: ../data/man.xml.in.h:30 +msgid "Section 3p" +msgstr "Secció 3p" + +#: ../data/man.xml.in.h:31 +msgid "Section 3qt" +msgstr "Secció 3qt" + +#: ../data/man.xml.in.h:32 +msgid "Section 3readline" +msgstr "Secció 3readline" + +#: ../data/man.xml.in.h:33 +msgid "Section 3ssl" +msgstr "Secció 3ssl" + +#: ../data/man.xml.in.h:34 +msgid "Section 3tiff" +msgstr "Secció 3tiff" + +#: ../data/man.xml.in.h:35 +msgid "Section 4" +msgstr "Secció 4" + +#: ../data/man.xml.in.h:36 +msgid "Section 4x" +msgstr "Secció 4x" + +#: ../data/man.xml.in.h:37 +msgid "Section 5" +msgstr "Secció 5" + +#: ../data/man.xml.in.h:38 +msgid "Section 5ssl" +msgstr "Secció 5ssl" + +#: ../data/man.xml.in.h:39 +msgid "Section 5x" +msgstr "Secció 5x" + +#: ../data/man.xml.in.h:40 +msgid "Section 6" +msgstr "Secció 6" + +#: ../data/man.xml.in.h:41 +msgid "Section 6x" +msgstr "Secció 6x" + +#: ../data/man.xml.in.h:42 +msgid "Section 7ssl" +msgstr "Secció 7ssl" + +#: ../data/man.xml.in.h:43 +msgid "Section 7x" +msgstr "Secció 7x" + +#: ../data/man.xml.in.h:44 +msgid "Section 9" +msgstr "Secció 9" + +#: ../data/man.xml.in.h:45 +msgid "Sections 1, 1p, 1g and 1t" +msgstr "Seccions 1, 1p, 1g i 1t" + +#: ../data/man.xml.in.h:46 +msgid "Sections 3, 3o, and 3t" +msgstr "Seccions 3, 3o, i 3t" + +#: ../data/man.xml.in.h:47 +msgid "Sections 3form and 3menu" +msgstr "Seccions 3form i 3menu" + +#: ../data/man.xml.in.h:48 +msgid "Sections 3ncurses and 3curses" +msgstr "Seccions 3ncurses i 3curses" + +#: ../data/man.xml.in.h:49 +msgid "Sections 3pm and 3perl" +msgstr "Seccions 3pm i 3perl" + +#: ../data/man.xml.in.h:50 +msgid "Sections 3x and 3X11" +msgstr "Seccions 3x i 3X11" + +#: ../data/man.xml.in.h:51 +msgid "Sections 7 and 7gcc" +msgstr "Seccions 7 i 7gcc" + +#: ../data/man.xml.in.h:52 +msgid "Sections 8 and 8l" +msgstr "Seccions 8 i 8l" + +#: ../data/man.xml.in.h:53 +msgid "System Administration" +msgstr "Administració del sistema" + +#: ../data/man.xml.in.h:54 +msgid "System Calls" +msgstr "Crides al sistema" + +#: ../data/man.xml.in.h:55 +msgid "System V Form/Menu Functions" +msgstr "Functions del formulari/menú del sistema V" + +#: ../data/man.xml.in.h:56 +msgid "TIFF Functions" +msgstr "Funcions TIFF" + +#: ../data/man.xml.in.h:57 +msgid "Termcap Applications" +msgstr "Aplicacions per a Termcap" + +#: ../data/man.xml.in.h:58 +msgid "Traditional command line help (man)" +msgstr "Ajuda de línia d'ordes tradicional (man)" + +#: ../data/man.xml.in.h:59 +msgid "X11 Applications" +msgstr "Aplicacions per a X11" + +#: ../data/man.xml.in.h:60 +msgid "X11 Configuration" +msgstr "Configuració d'X11" + +#: ../data/man.xml.in.h:61 +msgid "X11 Devices" +msgstr "Dispositius d'X11" + +#: ../data/man.xml.in.h:62 +msgid "X11 Functions" +msgstr "Funcions d'X11" + +#: ../data/man.xml.in.h:63 +msgid "X11 Games" +msgstr "Jocs per a X11" + +#: ../data/man.xml.in.h:64 +msgid "X11 Overviews" +msgstr "Resums d'X11" + +#: ../data/toc.xml.in.h:1 +msgid "2D Graphics" +msgstr "Gràfics 2D" + +#: ../data/toc.xml.in.h:2 +msgid "3D Graphics" +msgstr "Gràfics 3D" + +#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +msgid "Accessibility" +msgstr "Accessibilitat" + +#: ../data/toc.xml.in.h:4 +msgid "Action Games" +msgstr "Jocs d'acció" + +#: ../data/toc.xml.in.h:5 +msgid "Adventure Games" +msgstr "Jocs d'aventures" + +#: ../data/toc.xml.in.h:6 +msgid "Amusement" +msgstr "Entreteniment" + +#: ../data/toc.xml.in.h:7 +msgid "Applications for viewing and manipulating graphics" +msgstr "Aplicacions per visualitzar i modificar gràfics" + +#: ../data/toc.xml.in.h:8 +msgid "Applications related to audio and video" +msgstr "Aplicacions relacionades amb l'àudio i el vídeo" + +#: ../data/toc.xml.in.h:9 +msgid "Applications that teach or aid in learning" +msgstr "Aplicacions que ensenyen o ajuden en l'aprenentatge" + +#: ../data/toc.xml.in.h:10 +msgid "Arcade Games" +msgstr "Jocs recreatius" + +#: ../data/toc.xml.in.h:11 +msgid "Archiving Tools" +msgstr "Eines d'arxivació" + +#: ../data/toc.xml.in.h:12 +msgid "Art" +msgstr "Art" + +#: ../data/toc.xml.in.h:13 +msgid "Artificial Intelligence" +msgstr "Intel·ligència artificial" + +#: ../data/toc.xml.in.h:14 +msgid "Astronomy" +msgstr "Astronomia" + +#: ../data/toc.xml.in.h:15 +msgid "Biology" +msgstr "Biologia" + +#: ../data/toc.xml.in.h:16 +msgid "Blocks Games" +msgstr "Jocs de blocs" + +#: ../data/toc.xml.in.h:17 +msgid "Board Games" +msgstr "Jocs de tauler" + +#: ../data/toc.xml.in.h:18 +msgid "Building" +msgstr "Muntatge" + +#: ../data/toc.xml.in.h:19 +msgid "Calculator" +msgstr "Calculadora" + +#: ../data/toc.xml.in.h:20 +msgid "Calendar" +msgstr "Calendari" + +#: ../data/toc.xml.in.h:21 +msgid "Card Games" +msgstr "Jocs de cartes" + +#: ../data/toc.xml.in.h:22 +msgid "Charting Tools" +msgstr "Eines de creació de diagrames" + +#: ../data/toc.xml.in.h:23 +msgid "Chat" +msgstr "Xat" + +#: ../data/toc.xml.in.h:24 +msgid "Chemistry" +msgstr "Química" + +#: ../data/toc.xml.in.h:25 +msgid "Clocks" +msgstr "Rellotges" + +#: ../data/toc.xml.in.h:26 +msgid "Compression Tools" +msgstr "Eines de compressió" + +#: ../data/toc.xml.in.h:27 +msgid "Computer Science" +msgstr "Informàtica" + +#: ../data/toc.xml.in.h:28 +msgid "Construction" +msgstr "Construcció" + +#: ../data/toc.xml.in.h:29 +msgid "Contact Management" +msgstr "Gestió de contactes" + +#: ../data/toc.xml.in.h:30 +msgid "Data Visualization" +msgstr "Visualització de dades" + +#: ../data/toc.xml.in.h:31 +msgid "Databases" +msgstr "Bases de dades" + +#: ../data/toc.xml.in.h:32 +msgid "Debuggers" +msgstr "Depuradors" + +#: ../data/toc.xml.in.h:33 +msgid "Desktop" +msgstr "Escriptori" + +#: ../data/toc.xml.in.h:34 +msgid "Desktop Settings" +msgstr "Paràmetres d'escriptori" + +#: ../data/toc.xml.in.h:36 +msgid "Dialup" +msgstr "Marcatge directe" + +#: ../data/toc.xml.in.h:37 +msgid "Dictionaries" +msgstr "Diccionaris" + +#. Translators: this is a menu title for burning audio and video to dics +#: ../data/toc.xml.in.h:39 +msgid "Disc Burning" +msgstr "Enregistrament de discs" + +#: ../data/toc.xml.in.h:40 +msgid "Economy" +msgstr "Economia" + +#: ../data/toc.xml.in.h:41 +msgid "Education" +msgstr "Educació" + +#: ../data/toc.xml.in.h:42 +msgid "Electricity" +msgstr "Electricitat" + +#: ../data/toc.xml.in.h:43 +msgid "Electronics" +msgstr "Electrònica" + +#: ../data/toc.xml.in.h:44 +msgid "Email Tools" +msgstr "Eines de correu electrònic" + +#: ../data/toc.xml.in.h:45 +msgid "Emulator" +msgstr "Emulador" + +#: ../data/toc.xml.in.h:46 +msgid "Engineering" +msgstr "Enginyeria" + +#: ../data/toc.xml.in.h:47 +msgid "File Manager" +msgstr "Gestió de fitxers" + +#: ../data/toc.xml.in.h:48 +msgid "File Tools" +msgstr "Eines de fitxers" + +#: ../data/toc.xml.in.h:49 +msgid "File Transfer" +msgstr "Transferència de fitxers" + +#: ../data/toc.xml.in.h:50 +msgid "Filesystem" +msgstr "Sistema de fitxers" + +#: ../data/toc.xml.in.h:51 +msgid "Financial Tools" +msgstr "Eines financeres" + +#: ../data/toc.xml.in.h:52 +msgid "Flow Charting Tools" +msgstr "Eines de diagrames de flux" + +#: ../data/toc.xml.in.h:53 +msgid "GNOME Applications" +msgstr "Aplicacions per a GNOME" + +#: ../data/toc.xml.in.h:54 +msgid "GTK" +msgstr "GTK" + +#: ../data/toc.xml.in.h:55 +msgid "GUI Designers" +msgstr "Dissenyadors d'interfícies gràfiques" + +#: ../data/toc.xml.in.h:57 +msgid "Generic applications for the GNOME environment" +msgstr "Aplicacions genèriques per a l'entorn GNOME" + +#: ../data/toc.xml.in.h:58 +msgid "Generic applications for the KDE environment" +msgstr "Aplicacions genèriques per a l'entorn KDE" + +#: ../data/toc.xml.in.h:59 +msgid "Geography" +msgstr "Geografia" + +#: ../data/toc.xml.in.h:60 +msgid "Geology" +msgstr "Geologia" + +#: ../data/toc.xml.in.h:61 +msgid "Geoscience" +msgstr "Ciències de la Terra" + +#: ../data/toc.xml.in.h:62 +msgid "Graphics" +msgstr "Gràfics" + +#: ../data/toc.xml.in.h:63 +msgid "Guides and manuals for applications that connect to the outside world" +msgstr "Guies i manuals per a aplicacions que es connecten a la resta del món" + +#: ../data/toc.xml.in.h:64 +msgid "Guides for getting involved in development" +msgstr "Guies per involucrar-se en desenvolupament" + +#: ../data/toc.xml.in.h:65 +msgid "Ham Radio" +msgstr "Radioaficionat" + +#: ../data/toc.xml.in.h:66 +msgid "Hardware Settings" +msgstr "Paràmetres de maquinari" + +#: ../data/toc.xml.in.h:67 +msgid "Have some fun" +msgstr "Divertir-se" + +#: ../data/toc.xml.in.h:68 +msgid "History" +msgstr "Història" + +#: ../data/toc.xml.in.h:69 +msgid "IDEs" +msgstr "Entorns integrats de desenvolupament" + +#: ../data/toc.xml.in.h:70 +msgid "IRC Clients" +msgstr "Clients de l'IRC" + +#: ../data/toc.xml.in.h:71 +msgid "Image Processing" +msgstr "Processament d'imatges" + +#: ../data/toc.xml.in.h:72 +msgid "Instant Messaging" +msgstr "Missatgeria instantània" + +#: ../data/toc.xml.in.h:73 +msgid "Internet" +msgstr "Internet" + +#: ../data/toc.xml.in.h:74 +msgid "Java" +msgstr "Java" + +#: ../data/toc.xml.in.h:75 +msgid "KDE Applications" +msgstr "Aplicacions per a KDE" + +#: ../data/toc.xml.in.h:76 +msgid "Kids Games" +msgstr "Jocs per a canalla" + +#: ../data/toc.xml.in.h:77 +msgid "" +"Learn more about making your system more accessible for a range of " +"disabilities" +msgstr "" +"Apreneu com fer que el sistema siga més accessible a moltes discapacitats" + +#: ../data/toc.xml.in.h:78 +msgid "Licenses" +msgstr "Llicències" + +#: ../data/toc.xml.in.h:79 +msgid "Literature" +msgstr "Literatura" + +#: ../data/toc.xml.in.h:80 +msgid "Logic Games" +msgstr "Jocs lògics" + +#: ../data/toc.xml.in.h:81 +msgid "Math" +msgstr "Matemàtiques" + +#: ../data/toc.xml.in.h:82 +msgid "Medical Software" +msgstr "Programari mèdic" + +#: ../data/toc.xml.in.h:83 +msgid "Midi" +msgstr "MIDI" + +#: ../data/toc.xml.in.h:84 +msgid "Miscellaneous Documentation" +msgstr "Documentació diversa" + +#: ../data/toc.xml.in.h:85 +msgid "Mixers" +msgstr "Mescladors" + +#: ../data/toc.xml.in.h:86 +msgid "Monitor" +msgstr "Pantalla" + +# es refereix a un joc d'eines de la mateixa manera que hi ha GTK+ i Qt +#: ../data/toc.xml.in.h:87 +msgid "Motif" +msgstr "Motif" + +#: ../data/toc.xml.in.h:88 +msgid "Music" +msgstr "Música" + +#: ../data/toc.xml.in.h:89 +msgid "News" +msgstr "Notícies" + +#: ../data/toc.xml.in.h:90 +msgid "Numerical Analysis" +msgstr "Anàlisis numèrica" + +#: ../data/toc.xml.in.h:91 +msgid "OCR" +msgstr "Reconeixement de text (OCR)" + +#: ../data/toc.xml.in.h:92 +msgid "Office Applications" +msgstr "Aplicacions ofimàtiques" + +#: ../data/toc.xml.in.h:93 +msgid "Office applications" +msgstr "Aplicacions ofimàtiques" + +#: ../data/toc.xml.in.h:94 +msgid "Other Documentation" +msgstr "Altra documentació" + +#: ../data/toc.xml.in.h:95 +msgid "P2P" +msgstr "P2P" + +#: ../data/toc.xml.in.h:96 +msgid "PDA Communication" +msgstr "Comunicació amb PDA" + +#: ../data/toc.xml.in.h:97 +msgid "Package Manager" +msgstr "Gestió de paquets" + +#: ../data/toc.xml.in.h:98 +msgid "Parallel Computing" +msgstr "Computació paral·lela" + +#: ../data/toc.xml.in.h:99 +msgid "Photography" +msgstr "Fotografia" + +#: ../data/toc.xml.in.h:100 +msgid "Physics" +msgstr "Física" + +#. Translators: this is a menu title for audio and video players +#: ../data/toc.xml.in.h:102 +msgid "Players" +msgstr "Reproductors" + +#: ../data/toc.xml.in.h:103 +msgid "Presentation Tools" +msgstr "Eines de presentació" + +#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:339 ../src/yelp-print.c:366 +msgid "Printing" +msgstr "Impressió" + +#: ../data/toc.xml.in.h:105 +msgid "Profiling Tools" +msgstr "Eines de perfils" + +#: ../data/toc.xml.in.h:106 +msgid "Project Management Tools" +msgstr "Eines de gestió de projectes" + +#: ../data/toc.xml.in.h:107 +msgid "Publishing" +msgstr "Publicació" + +#: ../data/toc.xml.in.h:108 +msgid "Qt" +msgstr "Qt" + +#: ../data/toc.xml.in.h:109 +msgid "Raster Graphics" +msgstr "Gràfics de píxels" + +#. Translators: this is a menu title for audio and video recorders +#: ../data/toc.xml.in.h:111 +msgid "Recorders" +msgstr "Codificadors" + +#: ../data/toc.xml.in.h:112 +msgid "Remote Access" +msgstr "Accés remot" + +#: ../data/toc.xml.in.h:113 +msgid "Revision Control" +msgstr "Control de revisions" + +#: ../data/toc.xml.in.h:114 +msgid "Robotics" +msgstr "Robòtica" + +#: ../data/toc.xml.in.h:115 +msgid "Role Playing Games" +msgstr "Jocs de rol" + +#: ../data/toc.xml.in.h:116 +msgid "Scanning" +msgstr "Escaneig" + +#: ../data/toc.xml.in.h:117 +msgid "Science" +msgstr "Ciència" + +#: ../data/toc.xml.in.h:118 +msgid "Security" +msgstr "Seguretat" + +#: ../data/toc.xml.in.h:119 +msgid "Sequencers" +msgstr "Seqüenciadors" + +#: ../data/toc.xml.in.h:120 +msgid "Settings" +msgstr "Paràmetres" + +#: ../data/toc.xml.in.h:121 +msgid "Settings users can manipulate to make their environment more pleasant" +msgstr "" +"Paràmetres que poden canviar els usuaris per fer el seu entorn més còmode" + +#: ../data/toc.xml.in.h:122 +msgid "Simulation Games" +msgstr "Jocs de simulació" + +#: ../data/toc.xml.in.h:123 +msgid "Sound" +msgstr "So" + +#: ../data/toc.xml.in.h:124 +msgid "Sound & Video" +msgstr "So i vídeo" + +#: ../data/toc.xml.in.h:125 +msgid "Sound & Video Editing" +msgstr "Edició de so i vídeo" + +#: ../data/toc.xml.in.h:126 +msgid "Sports" +msgstr "Esports" + +#: ../data/toc.xml.in.h:127 +msgid "Sports Games" +msgstr "Jocs d'esports" + +#: ../data/toc.xml.in.h:128 +msgid "Spreadsheet Tools" +msgstr "Eines de full de càlcul" + +#: ../data/toc.xml.in.h:129 +msgid "Strategy Games" +msgstr "Jocs d'estratègia" + +#: ../data/toc.xml.in.h:130 +msgid "System" +msgstr "Sistema" + +#: ../data/toc.xml.in.h:131 +msgid "TV" +msgstr "Televisió" + +#: ../data/toc.xml.in.h:132 +msgid "Telephony" +msgstr "Telefonia" + +#: ../data/toc.xml.in.h:133 +msgid "Telephony Tools" +msgstr "Eines de telefonia" + +#: ../data/toc.xml.in.h:134 +msgid "Terminal Emulator" +msgstr "Emulador de terminal" + +#: ../data/toc.xml.in.h:135 +msgid "Text Editors" +msgstr "Editors de text" + +#: ../data/toc.xml.in.h:136 +msgid "Text Tools" +msgstr "Eines de text" + +#: ../data/toc.xml.in.h:137 +msgid "Tools to help you manage your computer" +msgstr "Eines per ajudar-vos a gestionar l'ordinador" + +#: ../data/toc.xml.in.h:138 +msgid "Translation Tools" +msgstr "Eines de traducció" + +#: ../data/toc.xml.in.h:139 +msgid "Tuners" +msgstr "Sintonitzadors" + +#: ../data/toc.xml.in.h:140 +msgid "Utilities" +msgstr "Utilitats" + +#: ../data/toc.xml.in.h:141 +msgid "Utilities to help you get work done" +msgstr "Utilitats per ajudar-vos a fer la faena" + +#: ../data/toc.xml.in.h:142 +msgid "Vector Graphics" +msgstr "Gràfics vectorials" + +#: ../data/toc.xml.in.h:143 +msgid "Video" +msgstr "Vídeo" + +#: ../data/toc.xml.in.h:144 +msgid "Video Conference" +msgstr "Conferència de vídeo" + +#. Translators: This is a menu title for graphics viewing applications +#: ../data/toc.xml.in.h:146 +msgid "Viewer" +msgstr "Visualitzadors" + +#: ../data/toc.xml.in.h:147 +msgid "Web Browser" +msgstr "Navegador web" + +#: ../data/toc.xml.in.h:148 +msgid "Web Development" +msgstr "Desenvolupament web" + +#: ../data/toc.xml.in.h:149 +msgid "Welcome to the GNOME Help Browser" +msgstr "Vos donem la benvinguda al navegador de l'ajuda del GNOME" + +#: ../data/toc.xml.in.h:150 +msgid "Word Processors" +msgstr "Processadors de text" + +#: ../data/ui/yelp-bookmarks.ui.h:1 +msgid "Bookmarks" +msgstr "Adreces d'interés" + +#: ../data/ui/yelp-bookmarks.ui.h:2 +msgid "Re_name" +msgstr "Canvia el _nom" + +#: ../data/ui/yelp-bookmarks.ui.h:3 +msgid "_Bookmarks:" +msgstr "A_dreces d'interés:" + +#: ../data/ui/yelp-bookmarks-add.ui.h:1 +msgid "Add Bookmark" +msgstr "Afig una adreça d'interés" + +#: ../data/ui/yelp-bookmarks-add.ui.h:2 +msgid "_Title:" +msgstr "_Títol:" + +#: ../data/ui/yelp-open-location.ui.h:1 +msgid "Open Location" +msgstr "Obri una ubicació" + +#: ../data/ui/yelp-open-location.ui.h:2 +msgid "_Location:" +msgstr "_Ubicació:" + +#: ../data/ui/yelp-preferences.ui.h:2 +msgid "Fonts" +msgstr "Tipus de lletres" + +#: ../data/ui/yelp-preferences.ui.h:3 +msgid "Preferences" +msgstr "Preferències" + +#: ../data/ui/yelp-preferences.ui.h:4 +msgid "_Browse with caret" +msgstr "_Navega amb un cursor" + +#: ../data/ui/yelp-preferences.ui.h:5 +msgid "_Fixed width:" +msgstr "Amplada _fixa:" + +#: ../data/ui/yelp-preferences.ui.h:6 +msgid "_Use system fonts" +msgstr "_Utilitza els tipus de lletra del sistema" + +#: ../data/ui/yelp-preferences.ui.h:7 +msgid "_Variable width:" +msgstr "Amplada _variable:" + +#: ../data/yelp.schemas.in.h:1 +msgid "Font for fixed text" +msgstr "Tipus de lletra per al text fix" + +#: ../data/yelp.schemas.in.h:2 +msgid "Font for text" +msgstr "Tipus de lletra per al text" + +#: ../data/yelp.schemas.in.h:3 +msgid "Font for text with fixed width." +msgstr "Tipus de lletra per al text amb amplada fixa." + +#: ../data/yelp.schemas.in.h:4 +msgid "Font for text with variable width." +msgstr "Tipus de lletra per al text amb amplada variable." + +#: ../data/yelp.schemas.in.h:5 +msgid "Use a keyboard-controllable caret when viewing pages." +msgstr "" +"Utilitza un cursor controlable amb el teclat quan es visualitzen les pàgines." + +#: ../data/yelp.schemas.in.h:6 +msgid "Use caret" +msgstr "Utilitza un cursor" + +#: ../data/yelp.schemas.in.h:7 +msgid "Use system fonts" +msgstr "Utilitza els tipus de lletra del sistema" + +#: ../data/yelp.schemas.in.h:8 +msgid "Use the default fonts set for the system." +msgstr "Utilitza els tipus de lletra per defecte del sistema." + +#: ../src/eggdesktopfile.c:165 +#, c-format +msgid "File is not a valid .desktop file" +msgstr "El fitxer no és un fitxer .desktop vàlid" + +#: ../src/eggdesktopfile.c:188 +#, c-format +msgid "Unrecognized desktop file Version '%s'" +msgstr "No s'ha reconegut la versió «%s» del fitxer d'escriptori" + +#: ../src/eggdesktopfile.c:957 +#, c-format +msgid "Starting %s" +msgstr "S'està iniciant %s" + +#: ../src/eggdesktopfile.c:1098 +#, c-format +msgid "Application does not accept documents on command line" +msgstr "L'aplicació no accepta documents des de la línia d'ordes" + +#: ../src/eggdesktopfile.c:1166 +#, c-format +msgid "Unrecognized launch option: %d" +msgstr "No s'ha reconegut l'opció de llançament: %d" + +#: ../src/eggdesktopfile.c:1365 +#, c-format +msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +msgstr "" +"No es poden passar URI de documents a una entrada d'escriptori de tipus " +"«Type=Link»" + +#: ../src/eggdesktopfile.c:1384 +#, c-format +msgid "Not a launchable item" +msgstr "No és un element executable" + +#: ../src/eggsmclient.c:225 +msgid "Disable connection to session manager" +msgstr "Inhabilita la connexió al gestor de sessió" + +#: ../src/eggsmclient.c:228 +msgid "Specify file containing saved configuration" +msgstr "Especifica el fitxer que conté la configuració alçada" + +#: ../src/eggsmclient.c:228 +msgid "FILE" +msgstr "FITXER" + +#: ../src/eggsmclient.c:231 +msgid "Specify session management ID" +msgstr "Especifica l'identificador del gestor de sessió" + +#: ../src/eggsmclient.c:231 +msgid "ID" +msgstr "IDENTIFICADOR" + +#: ../src/eggsmclient.c:252 +msgid "Session management options:" +msgstr "Opcions del gestor de sessió:" + +#: ../src/eggsmclient.c:253 +msgid "Show session management options" +msgstr "Mostra les opcions del gestor de sessió" + +#: ../src/yelp-bookmarks.c:147 +msgid "Open Bookmark in New Window" +msgstr "Obri l'adreça d'interés a una finestra nova" + +#: ../src/yelp-bookmarks.c:151 +msgid "Rename Bookmark" +msgstr "Canvia el nom de l'adreça d'interés" + +#: ../src/yelp-bookmarks.c:155 +msgid "Remove Bookmark" +msgstr "Suprimeix l'adreça d'interés" + +#: ../src/yelp-bookmarks.c:319 +#, c-format +msgid "A bookmark titled %s already exists for this page." +msgstr "Ja existeix una adreça d'interés amb el títol %s per a esta pàgina." + +#: ../src/yelp-bookmarks.c:395 +#, c-format +msgid "A bookmark titled <b>%s</b> already exists for this page." +msgstr "" +"Ja existeix una adreça d'interés amb el títol <b>%s</b> per a esta adreça." + +#: ../src/yelp-bookmarks.c:408 +msgid "Help Topics" +msgstr "Temes d'ajuda" + +#: ../src/yelp-bookmarks.c:423 +msgid "Document Sections" +msgstr "Seccions del document" + +#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 +#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 +#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:284 ../src/yelp-mallard.c:384 +#: ../src/yelp-man.c:292 ../src/yelp-man.c:385 ../src/yelp-toc.c:266 +#: ../src/yelp-toc.c:365 +msgid "Page not found" +msgstr "No s'ha trobat la pàgina" + +#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 +#: ../src/yelp-mallard.c:285 ../src/yelp-mallard.c:385 ../src/yelp-man.c:293 +#, c-format +msgid "The page %s was not found in the document %s." +msgstr "No s'ha trobat la pàgina %s en el document %s." + +#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 +#: ../src/yelp-man.c:386 +#, c-format +msgid "The requested page was not found in the document %s." +msgstr "No s'ha trobat la pàgina sol·licitada en el document %s." + +#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 +#: ../src/yelp-man.c:429 +msgid "File not found" +msgstr "No s'ha trobat el fitxer" + +#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 +#: ../src/yelp-man.c:430 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "No existeix el fitxer «%s»." + +#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 +#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 +#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 +msgid "Could not parse file" +msgstr "No s'ha pogut analitzar el fitxer" + +#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"No s'ha pogut analitzar el fitxer «%s» perquè no és un document XML vàlid." + +#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"No s'ha pogut analitzar el fitxer «%s» perquè algun dels seus fitxers " +"inclosos no és un document XML vàlid." + +#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 +msgid "Unknown" +msgstr "Desconegut" + +#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 +msgid "Unknown Error" +msgstr "Error desconegut" + +#: ../src/yelp-error.c:136 ../src/yelp-window.c:1716 +msgid "Could Not Read File" +msgstr "No s'ha pogut llegir el fitxer" + +#: ../src/yelp-error.c:146 +msgid "No information is available about this error." +msgstr "No hi ha informació disponible sobre este error." + +#: ../src/yelp-info.c:396 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"No s'ha pogut analitzar el fitxer «%s» perquè no és una pàgina d'informació " +"vàlida." + +#: ../src/yelp-io-channel.c:132 +#, c-format +msgid "" +"The file ‘%s’ could not be read and decoded. The file may be compressed in " +"an unsupported format." +msgstr "" +"No s'ha pogut llegir i decodificar el fitxer «%s». El sistema pot estar " +"comprimit en un format no implementat." + +#: ../src/yelp-main.c:88 +msgid "Use a private session" +msgstr "Utilitza una sessió privada" + +#: ../src/yelp-main.c:97 +msgid "Define which cache directory to use" +msgstr "Defineix el directori de memòria cau a utilitzar" + +#. Commandline parsing is done here +#: ../src/yelp-main.c:355 +msgid " GNOME Help Browser" +msgstr " Navegador de l'ajuda del GNOME" + +#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Ajuda" + +#: ../src/yelp-mallard.c:315 +msgid "Directory not found" +msgstr "No s'ha trobat el directori" + +#: ../src/yelp-mallard.c:316 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "No existeix el directori «%s»." + +#: ../src/yelp-man.c:459 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed man page." +msgstr "" +"No s'ha pogut analitzar el fitxer «%s» perquè no és una pàgina de manual " +"vàlida." + +#: ../src/yelp-print.c:99 +msgid "Print" +msgstr "Imprimir" + +#: ../src/yelp-print.c:169 +msgid "Preparing to print" +msgstr "S'està preparant per imprimir" + +#: ../src/yelp-print.c:263 +msgid "Printing is not supported on this printer" +msgstr "No es pot imprimir en esta impressora" + +#: ../src/yelp-print.c:266 +#, c-format +msgid "Printer %s does not support postscript printing." +msgstr "La impressora %s no permet la impressió amb postscript." + +#: ../src/yelp-print.c:368 +msgid "Waiting to print" +msgstr "S'està esperant per imprimir" + +#: ../src/yelp-print.c:580 +msgid "An error occurred while printing" +msgstr "S'ha produït un error mentre s'imprimia" + +#: ../src/yelp-print.c:584 +#, c-format +msgid "It was not possible to print your document: %s" +msgstr "No s'ha pogut imprimir el vostre document: %s" + +#: ../src/yelp-search-parser.c:67 +msgid "the GNOME Support Forums" +msgstr "els fòrums de suport del GNOME" + +#: ../src/yelp-search-parser.c:285 +#, c-format +msgid "No results for \"%s\"" +msgstr "No s'han obtingut resultats per a «%s»" + +#: ../src/yelp-search-parser.c:286 +msgid "" +"Try using different words to describe the problem you're having or the topic " +"you want help with." +msgstr "" +"Proveu de fer servir paraules diferents per descriure el problema que " +"tingueu o el tema per al qual vulgueu ajuda." + +#: ../src/yelp-search-parser.c:289 +#, c-format +msgid "Search results for \"%s\"" +msgstr "Resultats de la cerca «%s»" + +#. TRANSLATORS: Please don't do anything funny with the +#. * format arguement. It isn't really going through a printf +#. * The %s is used to indicate where the name of the site (linked) +#. * should be. This is done in the XSLT +#. +#: ../src/yelp-search-parser.c:303 +#, c-format +msgid "Repeat the search online at %s" +msgstr "Repeteix la cerca en línia a %s" + +#. Translators: Do not translate this list exactly. These are +#. * colon-separated words that aren't useful for choosing search +#. * results; they will be different for each language. Include +#. * pronouns, articles, very common verbs and prepositions, +#. * words from question structures like "tell me about" and +#. * "how do I", and words for functional states like "not", +#. * "work", and "broken". +#. +#: ../src/yelp-search-parser.c:874 +msgid "" +"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" +"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" +"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" +"where:who:will:with:won't:wont:why:work:working:works" +msgstr "" +"a:això:allò:amb:este:esta:cap:com:de:del:dels:el:els:en:es:fer:fes:ha:han:" +"has:i:la:les:na:no:o:on:per:quan:què:qui:sa:si:sí:tindre:un:una:unes:uns:va" + +#. Translators: This is a list of common prefixes for words. +#. * Do not translate this directly. Instead, use a colon +#. * seperated list of word-starts. In English, an example +#. * is re-. If there is none, please use the term NULL +#. * If there is only one, please put a colon after. +#. * E.g. if the common prefix is re then the string would be +#. * "re:" +#. +#: ../src/yelp-search-parser.c:890 +msgid "re" +msgstr "a:anti:bi:ex:in:pre:pro:re:sub" + +# FIXME +#. Translators: This is a list of (guess what?) common suffixes +#. * to words. Things that may be put at ends of words to slightly +#. * alter their meaning (like -ing and -s in English). This is a +#. * colon seperated list (I like colons). If there are none, +#. * please use the string NULL. If there is only 1, please +#. * add a colon at the end of the list +#. +#: ../src/yelp-search-parser.c:899 +msgid "ers:er:ing:es:s:'s" +msgstr "NULL" + +#: ../src/yelp-search-parser.c:1095 +msgid "No Comment" +msgstr "Sense comentaris" + +#. Much bigger problems +#: ../src/yelp-search.c:238 +msgid "Search could not be processed" +msgstr "No s'ha pogut processar la cerca" + +#: ../src/yelp-search.c:239 +msgid "The requested search could not be processed." +msgstr "No s'ha pogut processar la cerca sol·licitada." + +#: ../src/yelp-search.c:366 +msgid "Cannot process the search" +msgstr "No s'ha pogut processar la cerca" + +#: ../src/yelp-search.c:367 +msgid "The search processor returned invalid results" +msgstr "El processador de la cerca ha retornat resultats erronis" + +#: ../src/yelp-toc.c:267 +#, c-format +msgid "The page %s was not found in the TOC." +msgstr "No s'ha trobat la pàgina %s en la taula de continguts." + +#: ../src/yelp-toc.c:366 +msgid "The requested page was not found in the TOC." +msgstr "No s'ha pogut trobar la pàgina sol·licitada en la taula de continguts." + +#: ../src/yelp-toc.c:438 +msgid "" +"The TOC file could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"No s'ha pogut analitzar el fitxer de la taula de continguts perquè no és un " +"document XML vàlid." + +#: ../src/yelp-transform.c:86 +msgid "Invalid Stylesheet" +msgstr "Full d'estil invàlid" + +#: ../src/yelp-transform.c:87 +#, c-format +msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." +msgstr "" +"O bé no existeix el full d'estil XSLT «%s» o no és un fitxer d'estil vàlid." + +#: ../src/yelp-transform.c:122 +msgid "Broken Transformation" +msgstr "Transformació malmesa" + +#: ../src/yelp-transform.c:123 +msgid "An unknown error occurred while attempting to transform the document." +msgstr "S'ha produït un error desconegut mentre es transformava el document." + +#: ../src/yelp-transform.c:389 +msgid "No href attribute found on yelp:document\n" +msgstr "No s'ha trobat cap atribut href a yelp:document\n" + +#: ../src/yelp-transform.c:404 +msgid "Out of memory" +msgstr "S'ha exhaurit la memòria" + +#: ../src/yelp-window.c:304 +msgid "_File" +msgstr "_Fitxer" + +#: ../src/yelp-window.c:305 +msgid "_Edit" +msgstr "_Edita" + +#: ../src/yelp-window.c:306 +msgid "_Go" +msgstr "_Vés" + +#: ../src/yelp-window.c:307 +msgid "_Bookmarks" +msgstr "A_dreces d'interés" + +#: ../src/yelp-window.c:308 +msgid "_Help" +msgstr "A_juda" + +#: ../src/yelp-window.c:311 +msgid "_New Window" +msgstr "Finestra _nova" + +#: ../src/yelp-window.c:316 +msgid "Print This Document ..." +msgstr "Imprimeix este document ..." + +#: ../src/yelp-window.c:321 +msgid "Print This Page ..." +msgstr "Imprimeix esta pàgina ..." + +#: ../src/yelp-window.c:326 +msgid "About This Document" +msgstr "Quant a este document" + +#: ../src/yelp-window.c:331 +msgid "Open _Location" +msgstr "Obri una _ubicació" + +#: ../src/yelp-window.c:336 +msgid "_Close Window" +msgstr "_Tanca la finestra" + +#: ../src/yelp-window.c:342 +msgid "_Copy" +msgstr "_Copia" + +#: ../src/yelp-window.c:348 +msgid "_Select All" +msgstr "_Selecciona-ho tot" + +#: ../src/yelp-window.c:353 +msgid "_Find..." +msgstr "_Cerca..." + +#: ../src/yelp-window.c:358 +msgid "Find Pre_vious" +msgstr "Cerca l'an_terior" + +#: ../src/yelp-window.c:360 +msgid "Find previous occurrence of the word or phrase" +msgstr "Cerca l'anterior coincidència d'esta paraula o frase" + +# "la" paraula/frase (josep) +#: ../src/yelp-window.c:363 +msgid "Find Ne_xt" +msgstr "Cerca la següe_nt" + +#: ../src/yelp-window.c:365 +msgid "Find next occurrence of the word or phrase" +msgstr "Cerca la següent coincidència d'esta paraula o frase" + +#: ../src/yelp-window.c:368 +msgid "_Preferences" +msgstr "_Preferències" + +#: ../src/yelp-window.c:373 +msgid "_Reload" +msgstr "To_rna a carregar" + +#: ../src/yelp-window.c:385 +msgid "_Back" +msgstr "_Endarrere" + +#: ../src/yelp-window.c:387 +msgid "Show previous page in history" +msgstr "Mostra la pàgina anterior de l'historial" + +#: ../src/yelp-window.c:390 +msgid "_Forward" +msgstr "E_ndavant" + +#: ../src/yelp-window.c:392 +msgid "Show next page in history" +msgstr "Mostra la pàgina següent de l'historial" + +#: ../src/yelp-window.c:395 +msgid "_Help Topics" +msgstr "Temes d'a_juda" + +#: ../src/yelp-window.c:397 +msgid "Go to the listing of help topics" +msgstr "Vés al llistat dels temes d'ajuda" + +#: ../src/yelp-window.c:400 +msgid "_Previous Section" +msgstr "Secció an_terior" + +#: ../src/yelp-window.c:405 +msgid "_Next Section" +msgstr "Secció següe_nt" + +#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 +msgid "_Contents" +msgstr "_Continguts" + +#: ../src/yelp-window.c:416 +msgid "_Add Bookmark" +msgstr "_Afig una adreça d'interés" + +#: ../src/yelp-window.c:421 +msgid "_Edit Bookmarks..." +msgstr "_Edita les adreces d'interés..." + +#: ../src/yelp-window.c:427 +msgid "_Open Link" +msgstr "_Obri l'enllaç" + +#: ../src/yelp-window.c:432 +msgid "Open Link in _New Window" +msgstr "Obri l'enllaç a una finestra _nova" + +#: ../src/yelp-window.c:437 +msgid "_Copy Link Address" +msgstr "_Copia l'adreça de l'enllaç" + +#: ../src/yelp-window.c:444 +msgid "Help On this application" +msgstr "Ajuda per a esta aplicació" + +#: ../src/yelp-window.c:447 +msgid "_About" +msgstr "_Quant a" + +#: ../src/yelp-window.c:452 +msgid "Copy _Email Address" +msgstr "_Copia l'adreça de correu" + +#: ../src/yelp-window.c:524 +msgid "Help Browser" +msgstr "Navegador d'ajuda" + +#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1779 +msgid "Loading..." +msgstr "S'està carregant..." + +#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 +msgid "Unknown Page" +msgstr "Pàgina desconeguda" + +#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1105 +#: ../src/yelp-window.c:1114 +#, c-format +msgid "The requested URI \"%s\" is invalid" +msgstr "L'URI «%s» sol·licitat no és vàlid" + +#: ../src/yelp-window.c:1044 ../src/yelp-window.c:1107 +#: ../src/yelp-window.c:1115 +msgid "Unable to load page" +msgstr "No s'ha pogut carregar la pàgina" + +#: ../src/yelp-window.c:1336 +msgid "_Search:" +msgstr "_Cerca:" + +#: ../src/yelp-window.c:1337 +msgid "Search for other documentation" +msgstr "Cerca altra documentació" + +#: ../src/yelp-window.c:1357 +msgid "Cannot create window" +msgstr "No s'ha pogut crear una finestra nova" + +#: ../src/yelp-window.c:1363 +msgid "Cannot create search component" +msgstr "No s'ha pogut crear el component de cerca" + +#: ../src/yelp-window.c:1535 +msgid "Fin_d:" +msgstr "_Cerca:" + +#: ../src/yelp-window.c:1557 +msgid "Find _Previous" +msgstr "Cerca l'an_terior" + +#: ../src/yelp-window.c:1569 +msgid "Find _Next" +msgstr "Cerca el següe_nt" + +#: ../src/yelp-window.c:1582 +msgid "Phrase not found" +msgstr "No s'ha trobat la frase" + +#: ../src/yelp-window.c:1713 +#, c-format +msgid "" +"The file ‘%s’ could not be read. This file might be missing, or you might " +"not have permissions to read it." +msgstr "" +"No s'ha pogut llegir el fitxer «%s». Pot ser que manque este fitxer, o potser " +"no teniu permís per legir-lo." + +#. Note to translators: put here your name (and address) so it +#. * will show up in the "about" box +#: ../src/yelp-window.c:2604 +msgid "translator-credits" +msgstr "" +"Jordi Mallach <jordi@sindominio.net>\n" +"Gil Forcada <gilforcada@guifi.net>" + +#: ../src/yelp-window.c:2607 +msgid "Yelp" +msgstr "Yelp" + +#: ../src/yelp-window.c:2609 +msgid "A documentation browser and viewer for the Gnome Desktop." +msgstr "Un navegador i visualitzador de documentació per a l'escriptori GNOME." + +# ...sobre el GNOME? (josep) +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "Obtingueu ajuda per al GNOME" + +#~ msgid "<b>Accessibility</b>" +#~ msgstr "<b>Accessibilitat</b>" + +#~ msgid "<b>Fonts</b>" +#~ msgstr "<b>Tipus de lletra</b>" + +#~ msgid "C_ase sensitive" +#~ msgstr "Diferenci_a entre majúscules i minúscules" + +#~ msgid "Find" +#~ msgstr "Cerca" + +#~ msgid "_Find:" +#~ msgstr "_Cerca:" + +#~ msgid "_Next" +#~ msgstr "_Següent" + +#~ msgid "_Previous" +#~ msgstr "_Anterior" + +#~ msgid "_Wrap around" +#~ msgstr "_Torna al principi" + +#~ msgid "Error executing \"gnome-open\"" +#~ msgstr "S'ha produït un error en executar «gnome-open»" + +#~ msgid "Accessories" +#~ msgstr "Accessoris" + +#~ msgid "Applications for fun" +#~ msgstr "Aplicacions per a divertir-se" + +#~ msgid "Applications for word processing and other office tasks" +#~ msgstr "Aplicacions per al processament de text i altres tasques d'oficina" + +#~ msgid "Applications related to multimedia" +#~ msgstr "Aplicacions relacionades amb el multimèdia" + +#~ msgid "Applications related to software development" +#~ msgstr "Aplicacions relacionades amb al desenvolupament de programari" + +#~ msgid "Applications specific to the panel" +#~ msgstr "Aplicacions específiques del quadre" + +#~ msgid "Applications that support assistive technologies" +#~ msgstr "Aplicacions que implementen tecnologies assistives" + +#~ msgid "KDE" +#~ msgstr "KDE" + +#~ msgid "Learning applications" +#~ msgstr "Aplicacions d'aprenentatge" + +#~ msgid "Office" +#~ msgstr "Ofimàtica" + +#~ msgid "Panel Applets" +#~ msgstr "Miniaplicacions del quadre" + +#~ msgid "Programming" +#~ msgstr "Programació" + +#~ msgid "Scientific Applications." +#~ msgstr "Aplicacions científiques." + +#~ msgid "Utility applications" +#~ msgstr "Aplicacions d'utilitats" + +#~ msgid "Variety of other applications" +#~ msgstr "Altres aplicacions diverses" + +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is not well-formed XML." +#~ msgstr "" +#~ "No s'ha pogut analitzar el fitxer «%s». El fitxer no existeix, o no és un " +#~ "XML vàlid." + +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is not a well-formed info page." +#~ msgstr "" +#~ "No s'ha pogut analitzar el fitxer «%s». El fitxer no existeix, o no és una " +#~ "pàgina d'informació vàlida." + +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is formatted incorrectly." +#~ msgstr "" +#~ "No s'ha pogut analitzar el fitxer «%s». El fitxer no existeix, o no és XML " +#~ "vàlid." + +#~ msgid "Document Information" +#~ msgstr "Informació del document" + +#~ msgid "The YelpDocInfo struct of the document" +#~ msgstr "L'estructura YelpDocInfo del document" + +#~ msgid "Bigger problems still" +#~ msgstr "Encara hi ha problemes majors" + +#~ msgid "" +#~ "Your search could not be processed. The file ‘%s’ is either missing or is " +#~ "not a valid XSLT stylesheet." +#~ msgstr "" +#~ "No s'ha pogut processar la cerca. Manca el fitxer «%s», o no és un full " +#~ "d'estil XSLT vàlid." + +#~ msgid "Help Contents" +#~ msgstr "Continguts de l'ajuda" + +#~ msgid "Could not load the OMF file '%s'." +#~ msgstr "No s'ha pogut carregar el fitxer OMF «%s»." + +#~ msgid "YelpTocPager: Pause count is negative." +#~ msgstr "YelpTocPager: el compte de pausa és negatiu." + +#~ msgid "" +#~ "The table of contents could not be processed. The file ‘%s’ is either " +#~ "missing or is not a valid XSLT stylesheet." +#~ msgstr "" +#~ "No s'ha pogut processar la taula de continguts. Falta el fitxer «%s», o no " +#~ "és XML vàlid." + +#~ msgid "Read man page for %s" +#~ msgstr "Llegiu la pàgina de manual per a %s" + +#~ msgid "Read info page for %s" +#~ msgstr "Llegiu la pàgina d'informació de %s" + +#~ msgid "" +#~ "The table of contents could not be loaded. The file ‘%s’ is either " +#~ "missing or is not well-formed XML." +#~ msgstr "" +#~ "No s'ha pogut carregar la taula de continguts. Falta el fitxer «%s», o no " +#~ "és un XML vàlid." + +#~ msgid "Command Line Help" +#~ msgstr "Ajuda de la línia d'ordres" + +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is improperly formatted." +#~ msgstr "" +#~ "No s'ha pogut analitzar el fitxer «%s». El fitxer no existeix, o no està " +#~ "formatat correctament." + +#~ msgid "" +#~ "The document ‘%s’ could not be processed. The file ‘%s’ is either " +#~ "missing, or it is not a valid XSLT stylesheet." +#~ msgstr "" +#~ "No s'ha pogut processar el document «%s». Falta el fitxer «%s» o no és un " +#~ "full d'estil XSLT vàlid." + +#~ msgid "An unknown error occured" +#~ msgstr "S'ha produït un error desconegut" + +#~ msgid "Could not load document" +#~ msgstr "No s'ha pogut carregar el document" + +#~ msgid "Could not read the table of contents" +#~ msgstr "No s'ha pogut carregar la taula de continguts" + +#~ msgid "Unsupported Format" +#~ msgstr "El format no és suportat" + +#~ msgid "<b>Printing</b>" +#~ msgstr "<b>Imprimint</b>" + +#~ msgid "yelp-watermark-blockquote-201C" +#~ msgstr "yelp-watermark-blockquote-00AB" + +#~ msgid "The Uniform Resource Identifier for the file is invalid." +#~ msgstr "" +#~ "L'identificador uniforme del recurs per a aquest fitxer no és vàlid." + +#~ msgid "" +#~ "The Uniform Resource Identifier ‘%s’ is invalid or does not point to an " +#~ "actual file." +#~ msgstr "" +#~ "L'identificador uniforme del recurs «%s» no és vàlid o no apunta a un " +#~ "fitxer existent." + +#~ msgid "Man pages are not supported in this version." +#~ msgstr "Les pàgines de manual no estan implementades en aquesta versió." + +#~ msgid "GNU info pages are not supported in this version" +#~ msgstr "Les pàgines d'info GNU no estan implementades en aquesta versió" + +#~ msgid "Search is not supported in this version." +#~ msgstr "Aquesta versió no implementa cerques." + +#~ msgid "" +#~ "SGML documents are no longer supported. Please ask the author of the " +#~ "document to convert to XML." +#~ msgstr "" +#~ "Els documents SGML ja no estan implementats. Demaneu a l'autor del " +#~ "document que ho converteixi a XML." + +#~ msgid "" +#~ "A transformation context could not be created for the file ‘%s’. The " +#~ "format may not be supported." +#~ msgstr "" +#~ "No s'ha pogut crear un context de transformació per al fitxer «%s». Pot " +#~ "ser que el format no estigui implementat." + +#~ msgid "" +#~ "The section ‘%s’ does not exist in this document. If you were directed to " +#~ "this section from a Help button in an application, please report this to " +#~ "the maintainers of that application." +#~ msgstr "" +#~ "La secció «%s» no existeix en aquest document. Si se us ha dirigit a " +#~ "aquesta secció a través d'un botó d'ajuda d'una aplicació, informeu " +#~ "d'aquest error als mantenidors de l'aplicació." + +#~ msgid "Generating PDF is not currently supported" +#~ msgstr "De moment no es poden generar PDF" + +#~ msgid "" +#~ "You were trying to print to a printer using the \"%s\" driver. This " +#~ "program requires a PostScript printer driver." +#~ msgstr "" +#~ "Heu intentat imprimir a una impressora amb el controlador «%s». Aquest " +#~ "programa requereix un controlador PostScript per a la impressora." + +#~ msgid "_From:" +#~ msgstr "_De:" + +#~ msgid "Sets the start of the range of pages to be printed" +#~ msgstr "Establei l'inici del rang de pàgines a imprimir" + +#~ msgid "_To:" +#~ msgstr "_A:" + +#~ msgid "Sets the end of the range of pages to be printed" +#~ msgstr "Estableix el final del rang de pàgines a imprimir" + +#~ msgid "" +#~ "Could not display help for Yelp.\n" +#~ "%s" +#~ msgstr "" +#~ "No s'ha pogut mostrar l'ajuda del Yelp.\n" +#~ "%s" + +#~ msgid "Library Functions" +#~ msgstr "Funcions de biblioteques" + +#~ msgid "Administration" +#~ msgstr "Administració" + +#~ msgid "Other" +#~ msgstr "Altres" + +#~ msgid "Multimedia" +#~ msgstr "Multimèdia" + +#~ msgid "Yelp Factory" +#~ msgstr "Fàbrica del Yelp" + +#~ msgid "Could not activate Yelp: '%s'" +#~ msgstr "No s'ha pogut activar el Yelp: «%s»" + +#~ msgid "" +#~ "Your search could not be processed. There is no connection to the beagle " +#~ "daemon." +#~ msgstr "" +#~ "No s'ha pogut processar la cerca. No hi ha connexció al dimoni beagle." + +#~ msgid "<b>_Bookmarks:</b>" +#~ msgstr "<b>_Adreces d'interès:</b>" + +#~ msgid "<b>_Title:</b>" +#~ msgstr "<b>_Títol:</b>" + +#~ msgid "Go to home view" +#~ msgstr "Vés a la pàgina inicial" + +#~ msgid "Development Environments" +#~ msgstr "Entorns de desenvolupament" + +#~ msgid "Games and Entertainment" +#~ msgstr "Jocs i entreteniment" + +#~ msgid "General" +#~ msgstr "General" + +#~ msgid "Kernels" +#~ msgstr "Nuclis" + +#~ msgid "Office and Productivity Applications" +#~ msgstr "Oficina i aplicacions de productivitat" + +#~ msgid "*" +#~ msgstr "*" + +#~ msgid "Titlepage" +#~ msgstr "Pàgina de títol" + +#~ msgid "The selected document could not be opened" +#~ msgstr "No s'ha pogut obrir el document seleccionat" + +#~ msgid "The table of contents could not be read." +#~ msgstr "No s'ha pogut llegir la taula de continguts." + +#~ msgid "DocBook SGML documents are no longer supported." +#~ msgstr "Els documents DocBook SGML ja no són suportats." + +#~ msgid "X11" +#~ msgstr "X11" + +#~ msgid "OpenSSL" +#~ msgstr "OpenSSL" + +#~ msgid "Termcap" +#~ msgstr "Termcap" + +#~ msgid "Perl" +#~ msgstr "Perl" + +#~ msgid "TIFF" +#~ msgstr "TIFF" + +#~ msgid "PThreads" +#~ msgstr "PThreads" + +#~ msgid "Categories" +#~ msgstr "Categories" + +#~ msgid "Documents" +#~ msgstr "Documents" + +#~ msgid "‘" +#~ msgstr "‘" + +#~ msgid "’" +#~ msgstr "’" + +#~ msgid "“" +#~ msgstr "“" + +#~ msgid "”" +#~ msgstr "”" + +#~ msgid "About This Article" +#~ msgstr "Quant a aquest article" + +#~ msgid "About This Bibliography" +#~ msgstr "Quant a aquesta bibliografia" + +#~ msgid "About This Book" +#~ msgstr "Quant a aquest llibre" + +#~ msgid "About This Chapter" +#~ msgstr "Quant a aquest capítol" + +#~ msgid "About This Entry" +#~ msgstr "Quant a aquesta entrada" + +#~ msgid "About This Glossary" +#~ msgstr "Quant a aquest glossari" + +#~ msgid "About This Index" +#~ msgstr "Quant a aquest índex" + +#~ msgid "About This Part" +#~ msgstr "Quant a aquesta part" + +#~ msgid "About This Reference" +#~ msgstr "Quant a aquesta referència" + +#~ msgid "About This Section" +#~ msgstr "Quant a aquesta secció" + +#~ msgid "Affiliation" +#~ msgstr "Afiliació" + +#~ msgid "Appendix" +#~ msgstr "Apèndix" + +#~ msgid "Audience" +#~ msgstr "Audiència" + +#~ msgid "Author" +#~ msgstr "Autor" + +#~ msgid "Authors" +#~ msgstr "Autors" + +#~ msgid "Collaborators" +#~ msgstr "Col·laboradors" + +#~ msgid "Colophon" +#~ msgstr "Colofó" + +#~ msgid "Copyright" +#~ msgstr "Copyright" + +#~ msgid "Copyrights" +#~ msgstr "Copyrights" + +#~ msgid "Example" +#~ msgstr "Exemple" + +#~ msgid "Figure" +#~ msgstr "Imatge" + +#~ msgid "Glossary" +#~ msgstr "Glossari" + +#~ msgid "Important" +#~ msgstr "Important" + +#~ msgid "Index" +#~ msgstr "Índex" + +#~ msgid "Legal Notice" +#~ msgstr "Nota legal" + +#~ msgid "Level" +#~ msgstr "Nivell" + +#~ msgid "Message Audience" +#~ msgstr "Audiència del missatge" + +#~ msgid "Message Level" +#~ msgstr "Nivell del missatge" + +#~ msgid "Message Origin" +#~ msgstr "Origen del missatge" + +#~ msgid "Note" +#~ msgstr "Nota" + +#~ msgid "Origin" +#~ msgstr "Origen" + +#~ msgid "Other Contributor" +#~ msgstr "Altre contribuïdor" + +#~ msgid "Other Contributors" +#~ msgstr "Altres contribuïdors" + +#~ msgid "Part" +#~ msgstr "Part" + +#~ msgid "Preface" +#~ msgstr "Prefaci" + +#~ msgid "Publishers" +#~ msgstr "Editors" + +#~ msgid "Reference Entry" +#~ msgstr "Entrada de referència" + +#~ msgid "Reference Section" +#~ msgstr "Secció de referència" + +#~ msgid "Release Information" +#~ msgstr "Informació del llançament" + +#~ msgid "See" +#~ msgstr "Vegeu" + +#~ msgid "Set Index" +#~ msgstr "Estableix l'índex" + +#~ msgid "Table" +#~ msgstr "Taula" + +#~ msgid "Table of Contents" +#~ msgstr "Taula de continguts" + +#~ msgid "Tip" +#~ msgstr "Suggeriment" + +#~ msgid "Document URI" +#~ msgstr "URI del document" + +#~ msgid "The URI of the document to be processed" +#~ msgstr "L'URI del document a processar" + +#~ msgid "/Edit/Find Ne_xt" +#~ msgstr "/Edita/Cerca el se_güent" + +#~ msgid "/Edit/Find Pre_vious" +#~ msgstr "/Edita/Cerca l'an_terior" + +#~ msgid "/Go/_Back" +#~ msgstr "/Vés/_Endarrere" + +#~ msgid "/Go/_Forward" +#~ msgstr "/Vés/E_ndavant" + +#~ msgid "/Go/_Home" +#~ msgstr "/Vés/_Pàgina inicial" + +#~ msgid "/Go/" +#~ msgstr "/Vés/" + +#~ msgid "/Go/_Contents" +#~ msgstr "/Vés/_Continguts" + +#~ msgid "A Help Browser for GNOME" +#~ msgstr "Navegador d'ajuda per al GNOME" + +#~ msgid "<b>Find text in the document:</b>" +#~ msgstr "<b>Cerca text en el document:</b>" + +#~ msgid "Automatically _wrap around" +#~ msgstr "A_justa automàticament" + +#~ msgid "Match _entire word" +#~ msgstr "Coincideix amb paraules s_enceres" + +#~ msgid "_Match upper/lower case" +#~ msgstr "Distingueix entre _majúscules i minúscules" + +#~ msgid "GNOME - Desktop" +#~ msgstr "GNOME - Escriptori" + +#~ msgid "Additional documents" +#~ msgstr "Documents addicionals" + +#~ msgid "GNOME is" +#~ msgstr "GNOME és" + +#~ msgid "(C)" +#~ msgstr "©" + +#~ msgid "Previous" +#~ msgstr "Anterior" + +#~ msgid "Next" +#~ msgstr "Següent" + +#~ msgid "Search in the index" +#~ msgstr "Cerca en l'índex" + +#~ msgid "" +#~ "Error while parsing the stylesheet, make sure you have your docbook " +#~ "environment setup correctly." +#~ msgstr "" +#~ "Error al analitzar la sintaxi de la fulla d'estil, assegureu-vos de que " +#~ "teniu docbook correctament configurat." + +#~ msgid "Error while applying the stylesheet." +#~ msgstr "Error al aplicar la fulla d'estil." + +#~ msgid "info" +#~ msgstr "info" + +#~ msgid "man" +#~ msgstr "man" diff --git a/po/crh.po b/po/crh.po new file mode 100644 index 00000000..5e40a607 --- /dev/null +++ b/po/crh.po @@ -0,0 +1,1850 @@ +# QIRIMTATARCA yelp. +# Copyright (C) 2002-2010 Free Software Foundation, Inc. +# +# Reşat SABIQ <tilde.birlik@gmail.com>, 2010. +msgid "" +msgstr "" +"Project-Id-Version: yelp.TRUNK\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-30 09:40+0300\n" +"PO-Revision-Date: 2010-04-16 00:28-0500\n" +"Last-Translator: Reşat SABIQ <tilde.birlik@gmail.com>\n" +"Language-Team: QIRIMTATARCA (Qırım Türkçesi) <tilde-birlik-tercime@lists." +"sourceforge.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../data/info.xml.in.h:1 +# tr +msgid "GNU Info Pages" +msgstr "GNU Bilgi Sayfaları" + +#: ../data/info.xml.in.h:2 +# tr +msgid "Traditional command line help (info)" +msgstr "Geleneksek komut satırı yardımı (info)" + +#: ../data/man.xml.in.h:1 +# tr +msgid "Applications" +msgstr "Uygulamalar" + +#: ../data/man.xml.in.h:2 +# tr +msgid "BLT Functions" +msgstr "BLT İşlevleri" + +#: ../data/man.xml.in.h:3 +# tr +msgid "Configuration Files" +msgstr "Yapılandırma Dosyaları" + +#: ../data/man.xml.in.h:4 +# tr +msgid "Curses Functions" +msgstr "Curses İşlevleri" + +#: ../data/man.xml.in.h:5 ../data/toc.xml.in.h:35 +# tr +msgid "Development" +msgstr "Geliştirme" + +#: ../data/man.xml.in.h:6 +# tr +msgid "FORTRAN Functions" +msgstr "FORTRAN İşlevleri" + +#: ../data/man.xml.in.h:7 ../data/toc.xml.in.h:56 +# tr +msgid "Games" +msgstr "Oyunlar" + +#: ../data/man.xml.in.h:8 +# tr +msgid "Hardware Devices" +msgstr "Donanım Aygıtları" + +#: ../data/man.xml.in.h:9 +# tr +msgid "Kernel Routines" +msgstr "Çekirdek Yordamları" + +#: ../data/man.xml.in.h:10 +# tr +msgid "Manual Pages" +msgstr "Kılavuz Sayfaları" + +#: ../data/man.xml.in.h:11 +# tr +msgid "Network Audio Sound Functions" +msgstr "Ağ Sesi İşitsel İşlevleri" + +#: ../data/man.xml.in.h:12 +# tr +msgid "OpenSSL Applications" +msgstr "OpenSSL Uygulamaları" + +#: ../data/man.xml.in.h:13 +# tr +msgid "OpenSSL Configuration" +msgstr "OpenSSL Yapılandırması" + +#: ../data/man.xml.in.h:14 +# tr +msgid "OpenSSL Functions" +msgstr "OpenSSL İşlevleri" + +#: ../data/man.xml.in.h:15 +# tr +msgid "OpenSSL Overviews" +msgstr "OpenSSL İzlenimleri" + +#: ../data/man.xml.in.h:16 +# tr +msgid "Overviews" +msgstr "İzlenimler" + +#: ../data/man.xml.in.h:17 +# tr +msgid "POSIX Functions" +msgstr "POSIX İşlevleri" + +#: ../data/man.xml.in.h:18 +# tr +msgid "POSIX Headers" +msgstr "POSIX Başlıkları" + +#: ../data/man.xml.in.h:19 +# tr +msgid "Perl Functions" +msgstr "Perl İşlevleri" + +#: ../data/man.xml.in.h:20 +# tr +msgid "Qt Functions" +msgstr "Qt İşlevleri" + +#: ../data/man.xml.in.h:21 +# tr +msgid "Readline Functions" +msgstr "Readline İşlevleri" + +#: ../data/man.xml.in.h:22 +# tr +msgid "Section 0p" +msgstr "Bölüm 0p" + +#: ../data/man.xml.in.h:23 +# tr +msgid "Section 1m" +msgstr "Bölüm 1m" + +#: ../data/man.xml.in.h:24 +# tr +msgid "Section 1ssl" +msgstr "Bölüm 1ssl" + +#: ../data/man.xml.in.h:25 +# tr +msgid "Section 1x" +msgstr "Bölüm 1x" + +#: ../data/man.xml.in.h:26 +# tr +msgid "Section 2" +msgstr "Bölüm 2" + +#: ../data/man.xml.in.h:27 +# tr +msgid "Section 3blt" +msgstr "Bölüm 3bit" + +#: ../data/man.xml.in.h:28 +# tr +msgid "Section 3f" +msgstr "Bölüm 3f" + +#: ../data/man.xml.in.h:29 +# tr +msgid "Section 3nas" +msgstr "Bölüm 3nas" + +#: ../data/man.xml.in.h:30 +# tr +msgid "Section 3p" +msgstr "Bölüm 3p" + +#: ../data/man.xml.in.h:31 +# tr +msgid "Section 3qt" +msgstr "Bölüm 3qt" + +#: ../data/man.xml.in.h:32 +# tr +msgid "Section 3readline" +msgstr "Bölüm 3readline" + +#: ../data/man.xml.in.h:33 +# tr +msgid "Section 3ssl" +msgstr "Bölüm 3ssl" + +#: ../data/man.xml.in.h:34 +# tr +msgid "Section 3tiff" +msgstr "Bölüm 3tiff" + +#: ../data/man.xml.in.h:35 +# tr +msgid "Section 4" +msgstr "Bölüm 4" + +#: ../data/man.xml.in.h:36 +# tr +msgid "Section 4x" +msgstr "Bölüm 4x" + +#: ../data/man.xml.in.h:37 +# tr +msgid "Section 5" +msgstr "Bölüm 5" + +#: ../data/man.xml.in.h:38 +# tr +msgid "Section 5ssl" +msgstr "Bölüm 5ssl" + +#: ../data/man.xml.in.h:39 +# tr +msgid "Section 5x" +msgstr "Bölüm 5x" + +#: ../data/man.xml.in.h:40 +# tr +msgid "Section 6" +msgstr "Bölüm 6" + +#: ../data/man.xml.in.h:41 +# tr +msgid "Section 6x" +msgstr "Bölüm 6x" + +#: ../data/man.xml.in.h:42 +# tr +msgid "Section 7ssl" +msgstr "Bölüm 7ssl" + +#: ../data/man.xml.in.h:43 +# tr +msgid "Section 7x" +msgstr "Bölüm 7x" + +#: ../data/man.xml.in.h:44 +# tr +msgid "Section 9" +msgstr "Bölüm 9" + +#: ../data/man.xml.in.h:45 +# tr +msgid "Sections 1, 1p, 1g and 1t" +msgstr "Bölüm 1, 1p, 1g ve 1t" + +#: ../data/man.xml.in.h:46 +# tr +msgid "Sections 3, 3o, and 3t" +msgstr "Bölüm 3, 3o ve 3t" + +#: ../data/man.xml.in.h:47 +# tr +msgid "Sections 3form and 3menu" +msgstr "Bölüm 3form ve 3menu" + +#: ../data/man.xml.in.h:48 +# tr +msgid "Sections 3ncurses and 3curses" +msgstr "Bölüm 3bcurses ve 3curses" + +#: ../data/man.xml.in.h:49 +# tr +msgid "Sections 3pm and 3perl" +msgstr "Bölüm 3pm ve 3perl" + +#: ../data/man.xml.in.h:50 +# tr +msgid "Sections 3x and 3X11" +msgstr "Bölüm 3x ve 3x11" + +#: ../data/man.xml.in.h:51 +# tr +msgid "Sections 7 and 7gcc" +msgstr "Bölüm 7 ve 7gcc" + +#: ../data/man.xml.in.h:52 +# tr +msgid "Sections 8 and 8l" +msgstr "Bölüm 8 ve 8l" + +#: ../data/man.xml.in.h:53 +# tr +msgid "System Administration" +msgstr "Sistem Yönetimi" + +#: ../data/man.xml.in.h:54 +# tr +msgid "System Calls" +msgstr "Sistem Çağrıları" + +#: ../data/man.xml.in.h:55 +# tr +msgid "System V Form/Menu Functions" +msgstr "Sistem V From/Menü İşlevleri" + +#: ../data/man.xml.in.h:56 +# tr +msgid "TIFF Functions" +msgstr "TIFF İşlevleri" + +#: ../data/man.xml.in.h:57 +# tr +msgid "Termcap Applications" +msgstr "Termcap Uygulamaları" + +#: ../data/man.xml.in.h:58 +# tr +msgid "Traditional command line help (man)" +msgstr "Geleneksel komut satırı yardımı (man)" + +#: ../data/man.xml.in.h:59 +# tr +msgid "X11 Applications" +msgstr "X11 Uygulamaları" + +#: ../data/man.xml.in.h:60 +# tr +msgid "X11 Configuration" +msgstr "X11 Yapılandırması" + +#: ../data/man.xml.in.h:61 +# tr +msgid "X11 Devices" +msgstr "X11 Aygıtları" + +#: ../data/man.xml.in.h:62 +# tr +msgid "X11 Functions" +msgstr "X11 İşlevleri" + +#: ../data/man.xml.in.h:63 +# tr +msgid "X11 Games" +msgstr "X11 Oyunları" + +#: ../data/man.xml.in.h:64 +# tr +msgid "X11 Overviews" +msgstr "X11 İzlenimleri" + +#: ../data/toc.xml.in.h:1 +# tr +msgid "2D Graphics" +msgstr "2B Grafikler" + +#: ../data/toc.xml.in.h:2 +# tr +msgid "3D Graphics" +msgstr "3B Grafikler" + +#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +# tr +msgid "Accessibility" +msgstr "Erişilebilirlik" + +#: ../data/toc.xml.in.h:4 +# tr +msgid "Action Games" +msgstr "Aksiyon Oyunları" + +#: ../data/toc.xml.in.h:5 +# tr +msgid "Adventure Games" +msgstr "Macera Oyunları" + +#: ../data/toc.xml.in.h:6 +# tr +msgid "Amusement" +msgstr "Eğlence" + +#: ../data/toc.xml.in.h:7 +# tr +msgid "Applications for viewing and manipulating graphics" +msgstr "Grafik görüntülemesi ve yönetimi için uygulamalar" + +#: ../data/toc.xml.in.h:8 +# tr +msgid "Applications related to audio and video" +msgstr "Ses ve video ile ilgili uygulamalar" + +#: ../data/toc.xml.in.h:9 +# tr +msgid "Applications that teach or aid in learning" +msgstr "Öğreten ya da öğrenmeye yardım eden uygulamalar" + +#: ../data/toc.xml.in.h:10 +# tr +msgid "Arcade Games" +msgstr "Atari Oyunları" + +#: ../data/toc.xml.in.h:11 +# tr +msgid "Archiving Tools" +msgstr "Arşivleme Araçları" + +#: ../data/toc.xml.in.h:12 +# tr +msgid "Art" +msgstr "Sanat" + +#: ../data/toc.xml.in.h:13 +# tr +msgid "Artificial Intelligence" +msgstr "Yapay Zeka" + +#: ../data/toc.xml.in.h:14 +# tr +msgid "Astronomy" +msgstr "Astronomi" + +#: ../data/toc.xml.in.h:15 +# tr +msgid "Biology" +msgstr "Biyoloji" + +#: ../data/toc.xml.in.h:16 +# tr +msgid "Blocks Games" +msgstr "Blok Oyunları" + +#: ../data/toc.xml.in.h:17 +# tr +msgid "Board Games" +msgstr "Tahta Oyunları" + +#: ../data/toc.xml.in.h:18 +# tr +msgid "Building" +msgstr "İnşa" + +#: ../data/toc.xml.in.h:19 +msgid "Calculator" +msgstr "Esaplayıcı" + +#: ../data/toc.xml.in.h:20 +# tr +msgid "Calendar" +msgstr "Takvim" + +#: ../data/toc.xml.in.h:21 +# tr +msgid "Card Games" +msgstr "Kağıt Oyunları" + +#: ../data/toc.xml.in.h:22 +# tr +msgid "Charting Tools" +msgstr "Grafik Araçları" + +#: ../data/toc.xml.in.h:23 +# tr +msgid "Chat" +msgstr "Sohbet" + +#: ../data/toc.xml.in.h:24 +# tr +msgid "Chemistry" +msgstr "Kimya" + +#: ../data/toc.xml.in.h:25 +# tr +msgid "Clocks" +msgstr "Saatler" + +#: ../data/toc.xml.in.h:26 +# tr +msgid "Compression Tools" +msgstr "Sıkıştırma Araçları" + +#: ../data/toc.xml.in.h:27 +# tr +msgid "Computer Science" +msgstr "Bilgisayar Bilimi" + +#: ../data/toc.xml.in.h:28 +# tr +msgid "Construction" +msgstr "İnşaat" + +#: ../data/toc.xml.in.h:29 +# tr +msgid "Contact Management" +msgstr "Bağlantı Yönetimi" + +#: ../data/toc.xml.in.h:30 +# tr +msgid "Data Visualization" +msgstr "Veri Görselleştirme" + +#: ../data/toc.xml.in.h:31 +# tr +msgid "Databases" +msgstr "Veritabanları" + +#: ../data/toc.xml.in.h:32 +# tr +msgid "Debuggers" +msgstr "Hata Ayıklayıcılar" + +#: ../data/toc.xml.in.h:33 +# tr +msgid "Desktop" +msgstr "Masaüstü" + +#: ../data/toc.xml.in.h:34 +# tr +msgid "Desktop Settings" +msgstr "Masaüstü Ayarları" + +#: ../data/toc.xml.in.h:36 +# tr +msgid "Dialup" +msgstr "Çevirmeli" + +#: ../data/toc.xml.in.h:37 +# tr +msgid "Dictionaries" +msgstr "Sözlükler" + +#. Translators: this is a menu title for burning audio and video to dics +#: ../data/toc.xml.in.h:39 +# tr +msgid "Disc Burning" +msgstr "Disk Yazma" + +#: ../data/toc.xml.in.h:40 +# tr +msgid "Economy" +msgstr "Ekonomi" + +#: ../data/toc.xml.in.h:41 +# tr +msgid "Education" +msgstr "Eğitim" + +#: ../data/toc.xml.in.h:42 +# tr +msgid "Electricity" +msgstr "Elektrik" + +#: ../data/toc.xml.in.h:43 +# tr +msgid "Electronics" +msgstr "Elektronik" + +#: ../data/toc.xml.in.h:44 +# tr +msgid "Email Tools" +msgstr "E-posta Araçları" + +#: ../data/toc.xml.in.h:45 +# tr +msgid "Emulator" +msgstr "Emülatör" + +#: ../data/toc.xml.in.h:46 +# tr +msgid "Engineering" +msgstr "Mühendislik" + +#: ../data/toc.xml.in.h:47 +msgid "File Manager" +msgstr "Dosye İdarecisi" + +#: ../data/toc.xml.in.h:48 +msgid "File Tools" +msgstr "Dosye Aletleri" + +#: ../data/toc.xml.in.h:49 +# tr +msgid "File Transfer" +msgstr "Dosya Transferi" + +#: ../data/toc.xml.in.h:50 +# tr +msgid "Filesystem" +msgstr "Dosya Sistemi" + +#: ../data/toc.xml.in.h:51 +# tr +msgid "Financial Tools" +msgstr "Finansal Araçlar" + +#: ../data/toc.xml.in.h:52 +# tr +msgid "Flow Charting Tools" +msgstr "Akışı Şeması Araçları" + +#: ../data/toc.xml.in.h:53 +# tr +msgid "GNOME Applications" +msgstr "GNOME Uygulamaları" + +#: ../data/toc.xml.in.h:54 +# tr +msgid "GTK" +msgstr "GTK" + +#: ../data/toc.xml.in.h:55 +# tr +msgid "GUI Designers" +msgstr "Arayüz Tasarımcıları" + +#: ../data/toc.xml.in.h:57 +# tr +msgid "Generic applications for the GNOME environment" +msgstr "GNOME ortamı için genel uygulamalar" + +#: ../data/toc.xml.in.h:58 +# tr +msgid "Generic applications for the KDE environment" +msgstr "KDE Masaüstü Ortamı'na özgü uygulamalar" + +#: ../data/toc.xml.in.h:59 +# tr +msgid "Geography" +msgstr "Coğrafya" + +#: ../data/toc.xml.in.h:60 +# tr +msgid "Geology" +msgstr "Jeoloji" + +#: ../data/toc.xml.in.h:61 +# tr +msgid "Geoscience" +msgstr "Yerbilimi" + +#: ../data/toc.xml.in.h:62 +# tr +msgid "Graphics" +msgstr "Grafik" + +#: ../data/toc.xml.in.h:63 +# tr +msgid "Guides and manuals for applications that connect to the outside world" +msgstr "Dış dünyaya bağlanma uygulamaları için kılavuzlar ve el kitapları" + +#: ../data/toc.xml.in.h:64 +# tr +msgid "Guides for getting involved in development" +msgstr "Geliştirici olmak için kılavuzlar" + +#: ../data/toc.xml.in.h:65 +# tr +msgid "Ham Radio" +msgstr "Ham Radyo" + +#: ../data/toc.xml.in.h:66 +# tr +msgid "Hardware Settings" +msgstr "Donanım Ayarları" + +#: ../data/toc.xml.in.h:67 +# tr +msgid "Have some fun" +msgstr "Biraz eğlen" + +#: ../data/toc.xml.in.h:68 +# tr +msgid "History" +msgstr "Tarih" + +#: ../data/toc.xml.in.h:69 +# tr +msgid "IDEs" +msgstr "IDE'ler" + +#: ../data/toc.xml.in.h:70 +# tr +msgid "IRC Clients" +msgstr "IRC İstemcileri" + +#: ../data/toc.xml.in.h:71 +# tr +msgid "Image Processing" +msgstr "Görüntü İşlem" + +#: ../data/toc.xml.in.h:72 +# tr +msgid "Instant Messaging" +msgstr "Anında Mesajlaşma" + +#: ../data/toc.xml.in.h:73 +# tr +msgid "Internet" +msgstr "İnternet" + +#: ../data/toc.xml.in.h:74 +# tr +msgid "Java" +msgstr "Java" + +#: ../data/toc.xml.in.h:75 +# tr +msgid "KDE Applications" +msgstr "KDE Uygulamaları" + +#: ../data/toc.xml.in.h:76 +# tr +msgid "Kids Games" +msgstr "Çocuk Oyunları" + +#: ../data/toc.xml.in.h:77 +# tr +msgid "" +"Learn more about making your system more accessible for a range of " +"disabilities" +msgstr "" +"Sisteminizi bir takım engeller için daha erişebilir yapabilme hakkında daha " +"fazla bilgi öğrenin" + +#: ../data/toc.xml.in.h:78 +# tr +msgid "Licenses" +msgstr "Lisanslar" + +#: ../data/toc.xml.in.h:79 +# tr +msgid "Literature" +msgstr "Edebiyat" + +#: ../data/toc.xml.in.h:80 +# tr +msgid "Logic Games" +msgstr "Mantık Oyunları" + +#: ../data/toc.xml.in.h:81 +# tr +msgid "Math" +msgstr "Matematik" + +#: ../data/toc.xml.in.h:82 +# tr +msgid "Medical Software" +msgstr "Medikal Yazılım" + +#: ../data/toc.xml.in.h:83 +# tr +msgid "Midi" +msgstr "Midi" + +#: ../data/toc.xml.in.h:84 +# tr +msgid "Miscellaneous Documentation" +msgstr "Çeşitli Belgeler" + +#: ../data/toc.xml.in.h:85 +# tr +msgid "Mixers" +msgstr "Karıştırıcılar" + +#: ../data/toc.xml.in.h:86 +# tr +msgid "Monitor" +msgstr "Ekran" + +#: ../data/toc.xml.in.h:87 +# tr +msgid "Motif" +msgstr "Motif" + +#: ../data/toc.xml.in.h:88 +# tr +msgid "Music" +msgstr "Müzik" + +#: ../data/toc.xml.in.h:89 +# tr +msgid "News" +msgstr "Haberler" + +#: ../data/toc.xml.in.h:90 +# tr +msgid "Numerical Analysis" +msgstr "Sayısal Analiz" + +#: ../data/toc.xml.in.h:91 +# tr +msgid "OCR" +msgstr "OCR" + +#: ../data/toc.xml.in.h:92 +# tr +msgid "Office Applications" +msgstr "Ofis Uygulamaları" + +#: ../data/toc.xml.in.h:93 +# tr +msgid "Office applications" +msgstr "Ofis uygulamaları" + +#: ../data/toc.xml.in.h:94 +# tr +msgid "Other Documentation" +msgstr "Diğer Belgelendirmeler" + +#: ../data/toc.xml.in.h:95 +# tr +msgid "P2P" +msgstr "P2P" + +#: ../data/toc.xml.in.h:96 +# tr +msgid "PDA Communication" +msgstr "PDA İletişimi" + +#: ../data/toc.xml.in.h:97 +# tr +msgid "Package Manager" +msgstr "Paket Yöneticisi" + +#: ../data/toc.xml.in.h:98 +# tr +msgid "Parallel Computing" +msgstr "Paralel Bilişim" + +#: ../data/toc.xml.in.h:99 +# tr +msgid "Photography" +msgstr "Fotoğrafçılık" + +#: ../data/toc.xml.in.h:100 +# tr +msgid "Physics" +msgstr "Fizik" + +#. Translators: this is a menu title for audio and video players +#: ../data/toc.xml.in.h:102 +# tr +msgid "Players" +msgstr "Oyuncular" + +#: ../data/toc.xml.in.h:103 +# tr +msgid "Presentation Tools" +msgstr "Sunum Araçları" + +#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 +# tr +msgid "Printing" +msgstr "Yazdırma" + +#: ../data/toc.xml.in.h:105 +# tr +msgid "Profiling Tools" +msgstr "Profil Çıkarma Araçları" + +#: ../data/toc.xml.in.h:106 +# tr +msgid "Project Management Tools" +msgstr "Proje Yönetim Araçları" + +#: ../data/toc.xml.in.h:107 +# tr +msgid "Publishing" +msgstr "Yayımcılık" + +#: ../data/toc.xml.in.h:108 +# tr +msgid "Qt" +msgstr "Qt" + +#: ../data/toc.xml.in.h:109 +# tr +msgid "Raster Graphics" +msgstr "Taramalı Grafikler" + +#. Translators: this is a menu title for audio and video recorders +#: ../data/toc.xml.in.h:111 +# tr +msgid "Recorders" +msgstr "Kaydediciler" + +#: ../data/toc.xml.in.h:112 +# tr +msgid "Remote Access" +msgstr "Uzaktan Erişim" + +#: ../data/toc.xml.in.h:113 +# tr +msgid "Revision Control" +msgstr "Sürüm Kontrolü" + +#: ../data/toc.xml.in.h:114 +# tr +msgid "Robotics" +msgstr "Robot Bilimi" + +#: ../data/toc.xml.in.h:115 +# tr +msgid "Role Playing Games" +msgstr "Rol Oynama Oyunları" + +#: ../data/toc.xml.in.h:116 +# tr +msgid "Scanning" +msgstr "Tarama" + +#: ../data/toc.xml.in.h:117 +# tr +msgid "Science" +msgstr "Bilim" + +#: ../data/toc.xml.in.h:118 +# tr +msgid "Security" +msgstr "Güvenlik" + +#: ../data/toc.xml.in.h:119 +# tr +msgid "Sequencers" +msgstr "Diziciler" + +#: ../data/toc.xml.in.h:120 +# tr +msgid "Settings" +msgstr "Ayarlar" + +#: ../data/toc.xml.in.h:121 +# tr +msgid "Settings users can manipulate to make their environment more pleasant" +msgstr "" +"Ortamlarını daha çekici yapabillmek için kullanıcıların değiştirebilecekleri " +"ayarlar" + +#: ../data/toc.xml.in.h:122 +# tr +msgid "Simulation Games" +msgstr "Simülasyon Oyunları" + +#: ../data/toc.xml.in.h:123 +# tr +msgid "Sound" +msgstr "Ses" + +#: ../data/toc.xml.in.h:124 +# tr +msgid "Sound & Video" +msgstr "Ses ve Video" + +#: ../data/toc.xml.in.h:125 +# tr +msgid "Sound & Video Editing" +msgstr "Ses & Video Düzenleme" + +#: ../data/toc.xml.in.h:126 +# tr +msgid "Sports" +msgstr "Spor" + +#: ../data/toc.xml.in.h:127 +# tr +msgid "Sports Games" +msgstr "Spor Oyunları" + +#: ../data/toc.xml.in.h:128 +# tr +msgid "Spreadsheet Tools" +msgstr "Çizelge Araçları" + +#: ../data/toc.xml.in.h:129 +# tr +msgid "Strategy Games" +msgstr "Strateji Oyunları" + +#: ../data/toc.xml.in.h:130 +# tr +msgid "System" +msgstr "Sistem" + +#: ../data/toc.xml.in.h:131 +# tr +msgid "TV" +msgstr "TV" + +#: ../data/toc.xml.in.h:132 +# tr +msgid "Telephony" +msgstr "Telefon" + +#: ../data/toc.xml.in.h:133 +# tr +msgid "Telephony Tools" +msgstr "Telefon Araçları" + +#: ../data/toc.xml.in.h:134 +# tr +msgid "Terminal Emulator" +msgstr "Uçbirim Emülatörü" + +#: ../data/toc.xml.in.h:135 +# tr +msgid "Text Editors" +msgstr "Metin Düzenleyici" + +#: ../data/toc.xml.in.h:136 +# tr +msgid "Text Tools" +msgstr "Metin Araçları" + +#: ../data/toc.xml.in.h:137 +# tr +msgid "Tools to help you manage your computer" +msgstr "Bilgisayarınızı yönetmeye yardımcı araçlar" + +#: ../data/toc.xml.in.h:138 +# tr +msgid "Translation Tools" +msgstr "Çeviri Araçları" + +#: ../data/toc.xml.in.h:139 +# tr +msgid "Tuners" +msgstr "Ayarlayıcılar" + +#: ../data/toc.xml.in.h:140 +# tr +msgid "Utilities" +msgstr "Araçlar" + +#: ../data/toc.xml.in.h:141 +# tr +msgid "Utilities to help you get work done" +msgstr "İşinizi tamamlamak için yardımcı araçlar" + +#: ../data/toc.xml.in.h:142 +# tr +msgid "Vector Graphics" +msgstr "Vektörel Grafikler" + +#: ../data/toc.xml.in.h:143 +# tr +msgid "Video" +msgstr "Video" + +#: ../data/toc.xml.in.h:144 +# tr +msgid "Video Conference" +msgstr "Video Konferans" + +#. Translators: This is a menu title for graphics viewing applications +#: ../data/toc.xml.in.h:146 +# tr +msgid "Viewer" +msgstr "İzleyici" + +#: ../data/toc.xml.in.h:147 +# tr +msgid "Web Browser" +msgstr "Web Tarayıcı" + +#: ../data/toc.xml.in.h:148 +# tr +msgid "Web Development" +msgstr "Web Geliştirme" + +#: ../data/toc.xml.in.h:149 +# tr +msgid "Welcome to the GNOME Help Browser" +msgstr "GNOME Yardım Tarayıcısı'na Hoşgeldiniz" + +#: ../data/toc.xml.in.h:150 +# tr +msgid "Word Processors" +msgstr "Kelime İşlemci" + +#: ../data/ui/yelp-bookmarks.ui.h:1 +# tr +msgid "Bookmarks" +msgstr "Yer İmleri" + +#: ../data/ui/yelp-bookmarks.ui.h:2 +# tr +msgid "Re_name" +msgstr "Ye_niden Adlandır" + +#: ../data/ui/yelp-bookmarks.ui.h:3 +# tr +msgid "_Bookmarks:" +msgstr "_Yer İmleri:" + +#: ../data/ui/yelp-bookmarks-add.ui.h:1 +# tr +msgid "Add Bookmark" +msgstr "Yer İmi Ekle" + +#: ../data/ui/yelp-bookmarks-add.ui.h:2 +# tr +msgid "_Title:" +msgstr "_Başlık:" + +#: ../data/ui/yelp-open-location.ui.h:1 +# tr +msgid "Open Location" +msgstr "Konumu Aç" + +#: ../data/ui/yelp-open-location.ui.h:2 +# tr +msgid "_Location:" +msgstr "_Konum:" + +#: ../data/ui/yelp-preferences.ui.h:2 +# tr +msgid "Fonts" +msgstr "Yazıtipleri" + +#: ../data/ui/yelp-preferences.ui.h:3 +# tr +msgid "Preferences" +msgstr "Tercihler" + +#: ../data/ui/yelp-preferences.ui.h:4 +# tr +msgid "_Browse with caret" +msgstr "İ_mleç ile tara" + +#: ../data/ui/yelp-preferences.ui.h:5 +# tr +msgid "_Fixed width:" +msgstr "_Sabit genişlik:" + +#: ../data/ui/yelp-preferences.ui.h:6 +# tr +msgid "_Use system fonts" +msgstr "_Sistem yazıtiplerini kullan" + +#: ../data/ui/yelp-preferences.ui.h:7 +# tr +msgid "_Variable width:" +msgstr "_Değişken genişlik:" + +#: ../data/yelp.schemas.in.h:1 +# tr +msgid "Font for fixed text" +msgstr "Sabit metin için yazıtipi" + +#: ../data/yelp.schemas.in.h:2 +# tr +msgid "Font for text" +msgstr "Metin için yazıtipi" + +#: ../data/yelp.schemas.in.h:3 +# tr +msgid "Font for text with fixed width." +msgstr "Sabit genişlikli metin için yazıtipi." + +#: ../data/yelp.schemas.in.h:4 +# tr +msgid "Font for text with variable width." +msgstr "Değişken genişlikli metin için yazıtipi." + +#: ../data/yelp.schemas.in.h:5 +# tr +msgid "Use a keyboard-controllable caret when viewing pages." +msgstr "Sayfaları izlerken klavye kontrollü imleci kullan." + +#: ../data/yelp.schemas.in.h:6 +# tr +msgid "Use caret" +msgstr "İmleç kullan" + +#: ../data/yelp.schemas.in.h:7 +# tr +msgid "Use system fonts" +msgstr "Sistem yazıtiplerini kullan" + +#: ../data/yelp.schemas.in.h:8 +# tr +msgid "Use the default fonts set for the system." +msgstr "Sistem için öntanımlı yazıtiplerini kullan." + +#: ../src/eggdesktopfile.c:165 +msgid "File is not a valid .desktop file" +msgstr "Dosye keçerli bir .desktop dosyesi degildir" + +#: ../src/eggdesktopfile.c:188 +# tr +msgid "Unrecognized desktop file Version '%s'" +msgstr "Tanınmayan masaüstü dosyası Sürüm '%s'" + +#: ../src/eggdesktopfile.c:958 +# tr +msgid "Starting %s" +msgstr "%s başlatılıyor" + +#: ../src/eggdesktopfile.c:1100 +# tr +msgid "Application does not accept documents on command line" +msgstr "Uygulama komut satırında belgeleri kabul etmez" + +#: ../src/eggdesktopfile.c:1168 +# tr +msgid "Unrecognized launch option: %d" +msgstr "Tanınmayan başlatma seçeneği: %d" + +#: ../src/eggdesktopfile.c:1373 +# tr +msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +msgstr "Bir 'Type=Link' masaüstü girişine belge URI'leri geçilemez" + +#: ../src/eggdesktopfile.c:1392 +# tr +msgid "Not a launchable item" +msgstr "Başlatılabilir bir öğe değil" + +#: ../src/eggsmclient.c:225 +# tr +msgid "Disable connection to session manager" +msgstr "Oturum yöneticisi bağlantısını devre dışı bırak" + +#: ../src/eggsmclient.c:228 +# tr +msgid "Specify file containing saved configuration" +msgstr "Kaydedilen yapılandırmayı içeren dosyayı belirtin" + +#: ../src/eggsmclient.c:228 +# tr +msgid "FILE" +msgstr "DOSYA" + +#: ../src/eggsmclient.c:231 +# tr +msgid "Specify session management ID" +msgstr "Oturum yönetimi kimliğini belirtin" + +#: ../src/eggsmclient.c:231 +# tr +msgid "ID" +msgstr "ID" + +#: ../src/eggsmclient.c:252 +# tr +msgid "Session management options:" +msgstr "Oturum yönetimi seçenekleri:" + +#: ../src/eggsmclient.c:253 +# tr +msgid "Show session management options" +msgstr "Oturum yönetimi seçeneklerini göster" + +#: ../src/yelp-bookmarks.c:148 +# tr +msgid "Open Bookmark in New Window" +msgstr "Yer İmini Yeni Pencerede Aç" + +#: ../src/yelp-bookmarks.c:152 +# tr +msgid "Rename Bookmark" +msgstr "Yer İmini Yeniden Adlandır" + +#: ../src/yelp-bookmarks.c:156 +# tr +msgid "Remove Bookmark" +msgstr "Yer İmini Kaldır" + +#: ../src/yelp-bookmarks.c:314 +# tr +msgid "A bookmark titled %s already exists for this page." +msgstr "Bu sayfa için %s isimli bir yer imi zaten var." + +#: ../src/yelp-bookmarks.c:390 +# tr +msgid "A bookmark titled <b>%s</b> already exists for this page." +msgstr "Bu sayfa için <b>%s</b> isimli bir yer imi zaten var." + +#: ../src/yelp-bookmarks.c:403 +# tr +msgid "Help Topics" +msgstr "Yardım Konuları" + +#: ../src/yelp-bookmarks.c:418 +# tr +msgid "Document Sections" +msgstr "Belge Bölümleri" + +#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 +#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 +#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:280 ../src/yelp-mallard.c:380 +#: ../src/yelp-man.c:292 ../src/yelp-man.c:385 ../src/yelp-toc.c:266 +#: ../src/yelp-toc.c:365 +# tr +msgid "Page not found" +msgstr "Sayfa bulunamadı" + +#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 +#: ../src/yelp-mallard.c:281 ../src/yelp-mallard.c:381 ../src/yelp-man.c:293 +# tr +msgid "The page %s was not found in the document %s." +msgstr "%s sayfası %s belgesinde bulunamadı." + +#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 +#: ../src/yelp-man.c:386 +# tr +msgid "The requested page was not found in the document %s." +msgstr "İstenen sayfa %s belgesi içinde bulunamadı." + +#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 +#: ../src/yelp-man.c:429 +# tr +msgid "File not found" +msgstr "Dosya bulunamadı" + +#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 +#: ../src/yelp-man.c:430 +# tr +msgid "The file ‘%s’ does not exist." +msgstr "'%s' dosyası mevcut değil." + +#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 +#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 +#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 +# tr +msgid "Could not parse file" +msgstr "Dosya ayrıştırılamıyor" + +#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +# tr +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"'%s' dosyası ayrıştırılamıyor çünkü düzgün biçimlendirilmiş bir XML belgesi " +"değil." + +#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +# tr +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"'%s' dosyası ayrıştırılamıyor çünkü içerdiği bir veya daha çok dosya düzgün " +"biçimlendirilmiş XML belgesi değil." + +#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 +# tr +msgid "Unknown" +msgstr "Bilinmeyen" + +#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 +# tr +msgid "Unknown Error" +msgstr "Bilinmeyen Hata" + +#: ../src/yelp-error.c:136 ../src/yelp-window.c:1710 +# tr +msgid "Could Not Read File" +msgstr "Dosya Okunamadı" + +#: ../src/yelp-error.c:146 +# tr +msgid "No information is available about this error." +msgstr "Bu hata hakkında hiçbir bilgi elde edilemiyor." + +#: ../src/yelp-info.c:396 +# tr +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"'%s' dosyası ayrıştırılamıyor çünkü düzgün biçimlendirilmiş bir bilgi " +"sayfası değil." + +#: ../src/yelp-io-channel.c:132 +# tr +msgid "" +"The file ‘%s’ could not be read and decoded. The file may be compressed in " +"an unsupported format." +msgstr "" +"'%s' dosyası okunamıyor ve çözülemiyor. Dosya desteklenmeyen bir biçimde " +"sıkıştırılmış olabilir." + +#: ../src/yelp-main.c:88 +# tr +msgid "Use a private session" +msgstr "Özel bir oturum kullan" + +#: ../src/yelp-main.c:97 +msgid "Define which cache directory to use" +msgstr "Angi öghafiza cilbentiniñ qullanılacağını belgileñiz" + +#. Commandline parsing is done here +#: ../src/yelp-main.c:355 +# tr +msgid " GNOME Help Browser" +msgstr " GNOME Yardım Tarayıcısı" + +#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 +# tr +msgid "Help" +msgstr "Yardım" + +#: ../src/yelp-mallard.c:311 +# tr +msgid "Directory not found" +msgstr "Dizin bulunamadı" + +#: ../src/yelp-mallard.c:312 +# tr +msgid "The directory ‘%s’ does not exist." +msgstr "Dizin '%s' mevcut değil." + +#: ../src/yelp-man.c:459 +# tr +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed man page." +msgstr "" +"'%s' dosyası ayrıştırılamıyor çünkü düzgün biçimlendirilmiş bir kılavuz " +"sayfası değil." + +#: ../src/yelp-print.c:97 +# tr +msgid "Print" +msgstr "Yazdır" + +#: ../src/yelp-print.c:167 +msgid "Preparing to print" +msgstr "Basqığa azırlana" + +#: ../src/yelp-print.c:261 +# tr +msgid "Printing is not supported on this printer" +msgstr "Bu yazıcıda yazdırma desteklenmiyor" + +#: ../src/yelp-print.c:264 +# tr +msgid "Printer %s does not support postscript printing." +msgstr "%s yazıcısı postscript yazdırmayı desteklemiyor." + +#: ../src/yelp-print.c:366 +# tr +msgid "Waiting to print" +msgstr "Yazdırma bekleniyor" + +#: ../src/yelp-print.c:578 +# tr +msgid "An error occurred while printing" +msgstr "Yazdırılırken bir hata oluştu" + +#: ../src/yelp-print.c:582 +# tr +msgid "It was not possible to print your document: %s" +msgstr "Belgeyi yazdırmak mümkün değil: %s" + +#: ../src/yelp-search-parser.c:67 +# tr +msgid "the GNOME Support Forums" +msgstr "GNOME Destek Forumları" + +#: ../src/yelp-search-parser.c:285 +# tr +msgid "No results for \"%s\"" +msgstr "\"%s\" için sonuç yok" + +#: ../src/yelp-search-parser.c:286 +# tr +msgid "" +"Try using different words to describe the problem you're having or the topic " +"you want help with." +msgstr "" +"Yaşadığınız sorunu tanımlayan farklı kelimeleri, ya da yardım edinmek " +"istediğiniz konuyu deneyin." + +#: ../src/yelp-search-parser.c:289 +# tr +msgid "Search results for \"%s\"" +msgstr " \"%s\" için arama sonuçları" + +#. TRANSLATORS: Please don't do anything funny with the +#. * format arguement. It isn't really going through a printf +#. * The %s is used to indicate where the name of the site (linked) +#. * should be. This is done in the XSLT +#. +#: ../src/yelp-search-parser.c:303 +# tr +msgid "Repeat the search online at %s" +msgstr "%s üzerinde tekrar çevrimiçi ara" + +#. Translators: Do not translate this list exactly. These are +#. * colon-separated words that aren't useful for choosing search +#. * results; they will be different for each language. Include +#. * pronouns, articles, very common verbs and prepositions, +#. * words from question structures like "tell me about" and +#. * "how do I", and words for functional states like "not", +#. * "work", and "broken". +#. +#: ../src/yelp-search-parser.c:874 +# tr +msgid "" +"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" +"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" +"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" +"where:who:will:with:won't:wont:why:work:working:works" +msgstr "nasıl:ne:mı:ve:için:ya da:değil:ben:içinde:tarafından" + +#. Translators: This is a list of common prefixes for words. +#. * Do not translate this directly. Instead, use a colon +#. * seperated list of word-starts. In English, an example +#. * is re-. If there is none, please use the term NULL +#. * If there is only one, please put a colon after. +#. * E.g. if the common prefix is re then the string would be +#. * "re:" +#. +#: ../src/yelp-search-parser.c:890 +# tr +msgid "re" +msgstr "NULL" + +#. Translators: This is a list of (guess what?) common suffixes +#. * to words. Things that may be put at ends of words to slightly +#. * alter their meaning (like -ing and -s in English). This is a +#. * colon seperated list (I like colons). If there are none, +#. * please use the string NULL. If there is only 1, please +#. * add a colon at the end of the list +#. +#: ../src/yelp-search-parser.c:899 +# tr +msgid "ers:er:ing:es:s:'s" +msgstr "ler:lar" + +#: ../src/yelp-search-parser.c:1095 +# tr +msgid "No Comment" +msgstr "Yorumsuz" + +#. Much bigger problems +#: ../src/yelp-search.c:238 +# tr +msgid "Search could not be processed" +msgstr "Arama işlenemedi" + +#: ../src/yelp-search.c:239 +# tr +msgid "The requested search could not be processed." +msgstr "İstenen arama işlenemiyor." + +#: ../src/yelp-search.c:366 +# tr +msgid "Cannot process the search" +msgstr "Arama işlenemiyor" + +#: ../src/yelp-search.c:367 +# tr +msgid "The search processor returned invalid results" +msgstr "Arama işlemcisi geçersiz sonuçlar döndürdü" + +#: ../src/yelp-toc.c:267 +# tr +msgid "The page %s was not found in the TOC." +msgstr "%s sayfası içindekilerde bulunamadı." + +#: ../src/yelp-toc.c:366 +# tr +msgid "The requested page was not found in the TOC." +msgstr "İstenen sayfa içindekilerde bulunamadı." + +#: ../src/yelp-toc.c:438 +# tr +msgid "" +"The TOC file could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"İçindekiler dosyası ayrıştırılamıyor çünkü düzgün biçimlendirilmiş XML " +"belgesi değil." + +#: ../src/yelp-transform.c:86 +# tr +msgid "Invalid Stylesheet" +msgstr "Geçersiz Biçem Sayfası" + +#: ../src/yelp-transform.c:87 +# tr +msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." +msgstr "XSLT biçem sayfası '%s' ya bulunmuyor ya da geçerli değil." + +#: ../src/yelp-transform.c:122 +# tr +msgid "Broken Transformation" +msgstr "Bozuk Dönüşüm" + +#: ../src/yelp-transform.c:123 +# tr +msgid "An unknown error occurred while attempting to transform the document." +msgstr "Belge dönüştürülmeye çalışılırken bilinmeyen bir hata oluştu." + +#: ../src/yelp-transform.c:389 +# tr +msgid "No href attribute found on yelp:document\n" +msgstr "yelp:document üzerinde hiçbir href özniteliği bulunamadı\n" + +#: ../src/yelp-transform.c:404 +# tr +msgid "Out of memory" +msgstr "Bellek yetersiz" + +#: ../src/yelp-window.c:304 +msgid "_File" +msgstr "_Dosye" + +#: ../src/yelp-window.c:305 +msgid "_Edit" +msgstr "_Tarir" + +#: ../src/yelp-window.c:306 +msgid "_Go" +msgstr "_Bar" + +#: ../src/yelp-window.c:307 +msgid "_Bookmarks" +msgstr "_Saife-imleri" + +#: ../src/yelp-window.c:308 +msgid "_Help" +msgstr "_Yardım" + +#: ../src/yelp-window.c:311 +msgid "_New Window" +msgstr "_Yañı Pencere" + +#: ../src/yelp-window.c:316 +msgid "Print This Document ..." +msgstr "Bu Vesiqanı Bastır ..." + +#: ../src/yelp-window.c:321 +msgid "Print This Page ..." +msgstr "Bu Saifeni Bastır ..." + +#: ../src/yelp-window.c:326 +msgid "About This Document" +msgstr "Bu Vesiqa Aqqında" + +#: ../src/yelp-window.c:331 +# tr +msgid "Open _Location" +msgstr "_Konumu Aç" + +#: ../src/yelp-window.c:336 +msgid "_Close Window" +msgstr "_Pencereni Qapat" + +#: ../src/yelp-window.c:342 +msgid "_Copy" +msgstr "_Kopiyala" + +#: ../src/yelp-window.c:348 +msgid "_Select All" +msgstr "Episini _Sayla" + +#: ../src/yelp-window.c:353 +msgid "_Find..." +msgstr "_Tap..." + +#: ../src/yelp-window.c:358 +# tr +msgid "Find Pre_vious" +msgstr "Ö_ncekini Bul" + +#: ../src/yelp-window.c:360 +# tr +msgid "Find previous occurrence of the word or phrase" +msgstr "Kelime veya ifadenin önceki yerini bul" + +#: ../src/yelp-window.c:363 +# tr +msgid "Find Ne_xt" +msgstr "Sonrakini B_ul" + +#: ../src/yelp-window.c:365 +# tr +msgid "Find next occurrence of the word or phrase" +msgstr "Kelime veya ifadenin sonraki yerini bul" + +#: ../src/yelp-window.c:368 +msgid "_Preferences" +msgstr "_Tercihler" + +#: ../src/yelp-window.c:373 +# tr +msgid "_Reload" +msgstr "_Tekrar Yükle" + +#: ../src/yelp-window.c:385 +msgid "_Back" +msgstr "_Keri" + +#: ../src/yelp-window.c:387 +msgid "Show previous page in history" +msgstr "Keçmişteki evelki saifeni köster" + +#: ../src/yelp-window.c:390 +msgid "_Forward" +msgstr "İ_leri" + +#: ../src/yelp-window.c:392 +msgid "Show next page in history" +msgstr "Keçmişteki soñraki saifeni köster" + +#: ../src/yelp-window.c:395 +msgid "_Help Topics" +msgstr "_Yardım Mevzuları" + +#: ../src/yelp-window.c:397 +# tr +msgid "Go to the listing of help topics" +msgstr "Yardım konuları listesine git" + +#: ../src/yelp-window.c:400 +msgid "_Previous Section" +msgstr "_Evelki Kesim" + +#: ../src/yelp-window.c:405 +msgid "_Next Section" +msgstr "_Soñraki Kesim" + +#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 +msgid "_Contents" +msgstr "İçi_ndekiler" + +#: ../src/yelp-window.c:416 +msgid "_Add Bookmark" +msgstr "Saife-imi _Ekle" + +#: ../src/yelp-window.c:421 +msgid "_Edit Bookmarks..." +msgstr "Saife-imlerini _Tarir Et..." + +#: ../src/yelp-window.c:427 +# tr +msgid "_Open Link" +msgstr "Bağlantı _Aç" + +#: ../src/yelp-window.c:432 +# tr +msgid "Open Link in _New Window" +msgstr "Yeni Pencerede Bağlantı _Aç" + +#: ../src/yelp-window.c:437 +# tr +msgid "_Copy Link Address" +msgstr "Bağlantı Adresini _Kopyala" + +#: ../src/yelp-window.c:444 +# tr +msgid "Help On this application" +msgstr "Bu uygulama hakkında yardım" + +#: ../src/yelp-window.c:447 +msgid "_About" +msgstr "_Aqqında" + +#: ../src/yelp-window.c:452 +# tr +msgid "Copy _Email Address" +msgstr "_E-Posta Adresini Kopyala" + +#: ../src/yelp-window.c:524 +# tr +msgid "Help Browser" +msgstr "Yardım Tarayıcısı" + +#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1772 +msgid "Loading..." +msgstr "Yüklene..." + +#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 +# tr +msgid "Unknown Page" +msgstr "Bilinmeyen Sayfa" + +#: ../src/yelp-window.c:1042 ../src/yelp-window.c:1104 +#: ../src/yelp-window.c:1113 +# tr +msgid "The requested URI \"%s\" is invalid" +msgstr "İstenen URI \"%s\" geçersiz" + +#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1106 +#: ../src/yelp-window.c:1114 +# tr +msgid "Unable to load page" +msgstr "Sayfa yüklenemedi" + +#: ../src/yelp-window.c:1330 +msgid "_Search:" +msgstr "_Qıdır:" + +#: ../src/yelp-window.c:1331 +# tr +msgid "Search for other documentation" +msgstr "Diğer belgeleri ara" + +#: ../src/yelp-window.c:1351 +# tr +msgid "Cannot create window" +msgstr "Pencere oluşturulamıyor" + +#: ../src/yelp-window.c:1357 +# tr +msgid "Cannot create search component" +msgstr "Arama bileşeni oluşturulamıyor" + +#: ../src/yelp-window.c:1529 +msgid "Fin_d:" +msgstr "_Tap:" + +#: ../src/yelp-window.c:1551 +msgid "Find _Previous" +msgstr "_Evelkini Tap" + +#: ../src/yelp-window.c:1563 +msgid "Find _Next" +msgstr "_Soñrakini Tap" + +#: ../src/yelp-window.c:1576 +msgid "Phrase not found" +msgstr "İbare tapılmadı" + +#: ../src/yelp-window.c:1707 +# tr +msgid "" +"The file ‘%s’ could not be read. This file might be missing, or you might " +"not have permissions to read it." +msgstr "" +"'%s' dosyası okunamadı. Dosya bulunmuyor ya da dosyayı okumak için izniniz " +"yok." + +#. Note to translators: put here your name (and address) so it +#. * will show up in the "about" box +#: ../src/yelp-window.c:2589 +msgid "translator-credits" +msgstr "Reşat SABIQ <tilde.birlik@gmail.com>" + +#: ../src/yelp-window.c:2592 +msgid "Yelp" +msgstr "Yelp" + +# tüklü +#: ../src/yelp-window.c:2594 +msgid "A documentation browser and viewer for the Gnome Desktop." +msgstr "Gnome Masaüstü içün bir vesiqalandırma kezicisi ve seyrettiricisi." + +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "GNOME ile yardım elde etiñiz" @@ -6,16 +6,17 @@ # Hendrik Richter <hendrikr@gnome.org>, 2006, 2008. # Andre Klapper <ak-47@gmx.net>, 2007. # Jochen Skulj <jochen@jochenskulj.de>, 2008. -# Mario Blättermann <mariobl@gnome.org>, 2009. +# Mario Blättermann <mariobl@gnome.org>, 2009, 2010. # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: Yelp\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-14 02:28+0200\n" -"PO-Revision-Date: 2009-08-10 10:50+0200\n" -"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=yelp&component=general\n" +"POT-Creation-Date: 2010-05-02 09:38+0000\n" +"PO-Revision-Date: 2010-05-02 15:11+0100\n" +"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n" "Language-Team: German <gnome-de@gnome.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,7 +52,7 @@ msgstr "Entwicklung" #: ../data/man.xml.in.h:6 msgid "FORTRAN Functions" -msgstr "FORTRAN Funktionen" +msgstr "FORTRAN-Funktionen" #: ../data/man.xml.in.h:7 ../data/toc.xml.in.h:56 msgid "Games" @@ -293,7 +294,7 @@ msgstr "2D-Grafik" msgid "3D Graphics" msgstr "3D-Grafik" -#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +#: ../data/toc.xml.in.h:3 msgid "Accessibility" msgstr "Barrierefreiheit" @@ -770,7 +771,7 @@ msgstr "Klang" #: ../data/toc.xml.in.h:124 msgid "Sound & Video" -msgstr "Klang & Video" +msgstr "Klang und Video" #: ../data/toc.xml.in.h:125 msgid "Sound & Video Editing" @@ -822,7 +823,7 @@ msgstr "Textwerkzeuge" #: ../data/toc.xml.in.h:137 msgid "Tools to help you manage your computer" -msgstr "Werkzeuge zur Verwaltung Ihres Computers" +msgstr "Werkzeuge zur Verwaltung Ihres Rechners" #: ../data/toc.xml.in.h:138 msgid "Translation Tools" @@ -873,91 +874,307 @@ msgstr "Willkommen zum GNOME-Hilfe-Browser" msgid "Word Processors" msgstr "Textverarbeitung" -#: ../data/ui/yelp-bookmarks.ui.h:1 -msgid "Bookmarks" -msgstr "Lesezeichen" +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:147 +msgid "Invalid compressed data" +msgstr "Ungültige gepackte Daten" -#: ../data/ui/yelp-bookmarks.ui.h:2 -msgid "Re_name" -msgstr "Umbe_nennen" +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:153 +#| msgid "Out of memory" +msgid "Not enough memory" +msgstr "Nicht genug Speicher" -#: ../data/ui/yelp-bookmarks.ui.h:3 -msgid "_Bookmarks:" -msgstr "_Lesezeichen:" +#: ../libyelp/yelp-docbook-document.c:264 ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 +#, c-format +#| msgid "The page %s was not found in the document %s." +msgid "The page ‘%s’ was not found in the document ‘%s’." +msgstr "Die Seite »%s« konnte im Dokument »%s« nicht gefunden werden." -#: ../data/ui/yelp-bookmarks-add.ui.h:1 -msgid "Add Bookmark" -msgstr "Lesezeichen hinzufügen" +#: ../libyelp/yelp-docbook-document.c:298 ../libyelp/yelp-info-document.c:366 +#, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The file does not exist." +msgstr "Die Datei existiert nicht." -#: ../data/ui/yelp-bookmarks-add.ui.h:2 -msgid "_Title:" -msgstr "_Titel:" +#: ../libyelp/yelp-docbook-document.c:308 ../libyelp/yelp-info-document.c:376 +#: ../src/yelp-db-print.c:393 ../src/yelp-man.c:430 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "Die Datei »%s« existiert nicht." -#: ../data/ui/yelp-open-location.ui.h:1 -msgid "Open Location" -msgstr "Ort öffnen" +#: ../libyelp/yelp-docbook-document.c:323 ../src/yelp-db-print.c:407 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"Die Datei »%s« konnte nicht analysiert werden, da der Inhalt kein gültiges XML-" +"Dokument ist." + +#: ../libyelp/yelp-docbook-document.c:336 ../src/yelp-db-print.c:419 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"Die Datei »%s« konnte nicht analysiert werden, da eine oder mehrere der " +"enthaltenen Dateien kein gültiges XML-Dokument ist." + +#: ../libyelp/yelp-docbook-document.c:720 ../src/yelp-db-print.c:766 +msgid "Unknown" +msgstr "Unbekannt" -#: ../data/ui/yelp-open-location.ui.h:2 -msgid "_Location:" -msgstr "_Ort:" +#: ../libyelp/yelp-docbook-document.c:781 ../libyelp/yelp-info-document.c:309 +#, c-format +#| msgid "The requested page was not found in the document %s." +msgid "The requested page was not found in the document ‘%s’." +msgstr "Die angeforderte Seite konnte nicht im Dokument »%s« gefunden werden." -#: ../data/ui/yelp-preferences.ui.h:2 -msgid "Fonts" -msgstr "Schriften" +#: ../libyelp/yelp-error.c:33 +#, c-format +#| msgid "An unknown error occured" +msgid "An unknown error occurred." +msgstr "Es ist ein unbekannter Fehler aufgetreten." -#: ../data/ui/yelp-preferences.ui.h:3 -msgid "Preferences" -msgstr "Einstellungen" +#: ../libyelp/yelp-info-document.c:391 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"Die Datei »%s« konnte nicht analysiert werden, da sie keine gültige Info-Seite " +"ist." + +#: ../libyelp/yelp-io-channel.c:125 +#, c-format +msgid "" +"The file ‘%s’ could not be read and decoded. The file may be compressed in an " +"unsupported format." +msgstr "" +"Die Datei »%s« konnte nicht gelesen und dekodiert werden. Eventuell ist die " +"Datei in einem nicht unterstützen Format komprimiert." + +#: ../libyelp/yelp-location-entry.c:246 +msgid "Description Column" +msgstr "Beschreibungsspalte" + +#: ../libyelp/yelp-location-entry.c:247 +msgid "A column in the model to descriptions from" +msgstr "Eine Spalte im Modell zum Bezug von Beschreibungen" + +#: ../libyelp/yelp-location-entry.c:262 +msgid "Icon Column" +msgstr "Symbolspalte" + +#: ../libyelp/yelp-location-entry.c:263 +msgid "A column in the model to get icon names from" +msgstr "Eine Spalte im Modell zum Bezug von Symbolnamen" + +#: ../libyelp/yelp-location-entry.c:278 +msgid "Flags Column" +msgstr "Markierungsspalte" + +#: ../libyelp/yelp-location-entry.c:279 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "Eine Spalte im Modell mit YelpLocationEntryFlags-Markierungen" -#: ../data/ui/yelp-preferences.ui.h:4 -msgid "_Browse with caret" -msgstr "Mit Text_cursor navigieren" +#: ../libyelp/yelp-location-entry.c:295 +msgid "Enable Search" +msgstr "Suche aktivieren" -#: ../data/ui/yelp-preferences.ui.h:5 -msgid "_Fixed width:" -msgstr "_Feste Breite:" +#: ../libyelp/yelp-location-entry.c:296 +msgid "Whether the location entry can be used as a search field" +msgstr "Legt fest, ob die Adresszeile als Suchfeld verwendet werden kann" -#: ../data/ui/yelp-preferences.ui.h:6 -msgid "_Use system fonts" -msgstr "_Systemschriften verwenden" +#: ../libyelp/yelp-mallard-document.c:294 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "Der Ordner »%s« existiert nicht." + +#: ../libyelp/yelp-settings.c:146 +#| msgid "Settings" +msgid "GtkSettings" +msgstr "GtkSettings" + +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "Ein GtkSettings-Objekt, aus welchem Einstellungen bezogen werden sollen" + +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "GtkIconTheme" + +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "Ein GtkIconTheme, aus welchem die Symbole bezogen werden sollen" -#: ../data/ui/yelp-preferences.ui.h:7 -msgid "_Variable width:" -msgstr "_Variable Breite:" +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "Schriftanpassung" -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Dicktengleiche Schrift" +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "Eine Größenanpassung zum Hinzufügen zu Schriftgrößen" -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Standardschrift" +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" +msgstr "Textcursor anzeigen" -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Schrift für Buchstaben mit fester Breite (Dicktengleichheit)" +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" +msgstr "Textcursor oder Caret für barrierefreie Navigation anzeigen" -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Schrift für Buchstaben mit variabler Breite" +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "Editormodus" -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "Nützliche Funktionsmerkmale für Editoren aktivieren" + +#: ../libyelp/yelp-transform.c:171 +#| msgid "Invalid Stylesheet" +msgid "XSLT Stylesheet" +msgstr "XSLT-Stilvorlage" + +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "Der Ort der XSLT-Stilvorlage" + +#: ../libyelp/yelp-transform.c:379 ../libyelp/yelp-transform.c:394 +#, c-format +#| msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." msgstr "" -"Einen über die Tastatur kontrollierbaren Rahmen verwenden, wenn Seiten " -"betrachtet werden." +"Entweder existiert die XSLT-Stilvorlage »%s« nicht, oder es ist keine gültige " +"XSLT-Stilvorlage." -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Rahmen verwenden" +#: ../libyelp/yelp-transform.c:528 +msgid "No href attribute found on yelp:document\n" +msgstr "Kein href-Attribut im yelp:-Dokument gefunden\n" + +#: ../libyelp/yelp-transform.c:543 +msgid "Out of memory" +msgstr "Speichermangel" + +#: ../libyelp/yelp-view.c:92 +msgid "_Back" +msgstr "_Zurück" + +#: ../libyelp/yelp-view.c:97 +msgid "_Forward" +msgstr "_Vor" + +#: ../libyelp/yelp-view.c:102 +#| msgid "_Previous" +msgid "_Previous Page" +msgstr "_Vorherige Seite" + +#: ../libyelp/yelp-view.c:107 +#| msgid "_Next" +msgid "_Next Page" +msgstr "_Nächste Seite" + +#: ../libyelp/yelp-view.c:310 +#| msgid "Yelp" +msgid "Yelp URI" +msgstr "Yelp-URI" + +#: ../libyelp/yelp-view.c:311 +msgid "A YelpUri with the current location" +msgstr "Eine YelpUri mit dem aktuellen Ort" + +#: ../libyelp/yelp-view.c:319 +#| msgid "Loading..." +msgid "Loading State" +msgstr "Ladestatus" + +#: ../libyelp/yelp-view.c:320 +msgid "The loading state of the view" +msgstr "Der Ladestatus der Ansicht" + +#: ../libyelp/yelp-view.c:329 +msgid "Page ID" +msgstr "Seitenkennung" + +#: ../libyelp/yelp-view.c:330 +#| msgid "Sets the end of the range of pages to be printed" +msgid "The ID of the root page of the page being viewew" +msgstr "Die Kennung der Basisseite der betrachteten Seite" + +#: ../libyelp/yelp-view.c:338 +msgid "Root Title" +msgstr "Basistitel" + +#: ../libyelp/yelp-view.c:339 +#| msgid "Sets the start of the range of pages to be printed" +msgid "The title of the root page of the page being viewew" +msgstr "Der Titel der Basisseite der betrachteten Seite" + +#: ../libyelp/yelp-view.c:347 +msgid "Page Title" +msgstr "Seitentitel" + +#: ../libyelp/yelp-view.c:348 +msgid "The title of the page being viewed" +msgstr "Der Titel der betrachteten Seite" + +#: ../libyelp/yelp-view.c:356 +msgid "Page Description" +msgstr "Seitenbeschreibung" + +#: ../libyelp/yelp-view.c:357 +msgid "The description of the page being viewed" +msgstr "Die Beschreibung der betrachteten Seite" + +#: ../libyelp/yelp-view.c:365 +#| msgid "Page not found" +msgid "Page Icon" +msgstr "Seitensymbol" + +#: ../libyelp/yelp-view.c:366 +msgid "The icon of the page being viewed" +msgstr "Das Symbol der betrachteten Seite" + +#: ../libyelp/yelp-view.c:683 +#, c-format +#| msgid "Could not load document" +msgid "Could not load a document for ‘%s’" +msgstr "Ein Dokument für »%s« konnte nicht geladen werden" + +#: ../libyelp/yelp-view.c:689 +#, c-format +#| msgid "Could not load document" +msgid "Could not load a document" +msgstr "Ein Dokument konnte nicht geladen werden" -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Systemschriften verwenden" +#: ../libyelp/yelp-view.c:756 +#| msgid "Page not found" +msgid "Not Found" +msgstr "Nicht gefunden" -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Die vom System vorgegebenen Schriften verwenden." +#: ../libyelp/yelp-view.c:759 +#| msgid "Cannot create window" +msgid "Cannot Read" +msgstr "Nicht lesbar" + +#: ../libyelp/yelp-view.c:765 ../src/yelp-error.c:132 ../src/yelp-error.c:139 +msgid "Unknown Error" +msgstr "Unbekannter Fehler" + +#: ../libyelp/yelp-view.c:855 +#, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The URI ‘%s’ does point to a valid page." +msgstr "Die Adresse »%s« enthält keine gültige Seite." + +#: ../libyelp/yelp-view.c:863 +#, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The URI ‘%s’ could not be parsed." +msgstr "Die Adresse »%s« konnte nicht verarbeitet werden." #: ../src/eggdesktopfile.c:165 #, c-format @@ -1025,100 +1242,67 @@ msgstr "Optionen der Sitzungsverwaltung:" msgid "Show session management options" msgstr "Optionen der Sitzungsverwaltung anzeigen" -#: ../src/yelp-bookmarks.c:148 -msgid "Open Bookmark in New Window" -msgstr "Lesezeichen in neuem Fenster öffnen" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "In den Editor-Modus wechseln" -#: ../src/yelp-bookmarks.c:152 -msgid "Rename Bookmark" -msgstr "Lesezeichen umbenennen" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "Gr_ößerer Text" -#: ../src/yelp-bookmarks.c:156 -msgid "Remove Bookmark" -msgstr "Lesezeichen entfernen" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "Die Schriftgröße des Texts erhöhen" -#: ../src/yelp-bookmarks.c:314 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Ein Lesezeichen mit dem Namen %s existiert bereits für diese Seite." +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "_Kleinerer Text" -#: ../src/yelp-bookmarks.c:390 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "" -"Ein Lesezeichen mit dem Namen <b>%s</b> existiert bereits für diese Seite." +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "Die Schriftgröße des Texts verringern" -#: ../src/yelp-bookmarks.c:403 -msgid "Help Topics" -msgstr "Hilfe-Themen" +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "Text_cursor anzeigen" -#: ../src/yelp-bookmarks.c:418 -msgid "Document Sections" -msgstr "Dokumentabschnitte" +#: ../src/yelp-application.c:297 ../src/yelp-main.c:386 +#: ../src/yelp-window.c:1000 ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Hilfe" -#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:280 ../src/yelp-man.c:292 +#: ../src/yelp-application.c:547 +msgid "" +"You do not have PackageKit installed. Package installation links require " +"PackageKit." +msgstr "" +"PackageKit ist nicht installiert. Dies ist zur Paketinstallation erforderlich." + +#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 ../src/yelp-man.c:292 #: ../src/yelp-man.c:385 ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 msgid "Page not found" msgstr "Seite konnte nicht gefunden werden" -#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-mallard.c:281 ../src/yelp-man.c:293 +#: ../src/yelp-db-print.c:259 ../src/yelp-man.c:293 #, c-format msgid "The page %s was not found in the document %s." msgstr "Die Seite %s konnte nicht im Dokument %s gefunden werden." -#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 -#: ../src/yelp-man.c:386 +#: ../src/yelp-db-print.c:351 ../src/yelp-man.c:386 #, c-format msgid "The requested page was not found in the document %s." msgstr "Die angeforderte Seite konnte nicht im Dokument %s gefunden werden." -#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 -#: ../src/yelp-man.c:429 +#: ../src/yelp-db-print.c:392 ../src/yelp-man.c:429 msgid "File not found" msgstr "Datei nicht gefunden" -#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 -#: ../src/yelp-man.c:430 -#, c-format -msgid "The file ‘%s’ does not exist." -msgstr "Die Datei »%s« existiert nicht." - -#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 -#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 +#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 ../src/yelp-man.c:458 +#: ../src/yelp-toc.c:437 msgid "Could not parse file" msgstr "Datei konnte nicht analysiert werden" -#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed XML " -"document." -msgstr "" -"Die Datei »%s« konnte nicht analysiert werden, da der Inhalt kein gültiges " -"XML-Dokument ist." - -#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because one or more of its included files " -"is not a well-formed XML document." -msgstr "" -"Die Datei »%s« konnte nicht analysiert werden, da eine oder mehrere der " -"enthaltenen Dateien kein gültiges XML-Dokument ist." - -#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 -msgid "Unknown" -msgstr "Unbekannt" - -#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 -msgid "Unknown Error" -msgstr "Unbekannter Fehler" - -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1710 +#: ../src/yelp-error.c:136 msgid "Could Not Read File" msgstr "Datei konnte nicht gelesen werden" @@ -1126,49 +1310,19 @@ msgstr "Datei konnte nicht gelesen werden" msgid "No information is available about this error." msgstr "Über diesen Fehler stehen keine weiteren Informationen zur Verfügung." -#: ../src/yelp-info.c:396 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "" -"Die Datei »%s« konnte nicht analysiert werden, da sie keine gültige Info-" -"Seite ist." - -#: ../src/yelp-io-channel.c:132 -#, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." -msgstr "" -"Die Datei »%s« konnte nicht gelesen und dekodiert werden. Eventuell ist die " -"Datei in einem nicht unterstützen Format komprimiert." - -#: ../src/yelp-main.c:88 +#: ../src/yelp-main.c:89 msgid "Use a private session" msgstr "Private Sitzung verwenden" -#: ../src/yelp-main.c:97 +#: ../src/yelp-main.c:98 msgid "Define which cache directory to use" msgstr "Den Ordner für den Zwischenspeicher festlegen" #. Commandline parsing is done here -#: ../src/yelp-main.c:355 +#: ../src/yelp-main.c:357 msgid " GNOME Help Browser" msgstr " GNOME-Hilfe-Browser" -#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Hilfe" - -#: ../src/yelp-mallard.c:311 -msgid "Directory not found" -msgstr "Ordner nicht gefunden" - -#: ../src/yelp-mallard.c:312 -#, c-format -msgid "The directory ‘%s’ does not exist." -msgstr "Der Ordner »%s« existiert nicht." - #: ../src/yelp-man.c:459 #, c-format msgid "" @@ -1205,7 +1359,7 @@ msgstr "Beim Drucken ist ein Fehler aufgetreten" #: ../src/yelp-print.c:582 #, c-format msgid "It was not possible to print your document: %s" -msgstr "Es war nicht möglich das Dokument zu drucken: %s" +msgstr "Es war nicht möglich, das Dokument zu drucken: %s" #: ../src/yelp-search-parser.c:67 msgid "the GNOME Support Forums" @@ -1221,7 +1375,7 @@ msgid "" "Try using different words to describe the problem you're having or the topic " "you want help with." msgstr "" -"Versuchen Sie, Ihr Problem oder das Thema zu dem Sie Hilfe möchten mit " +"Versuchen Sie, Ihr Problem oder das Thema, zu dem Sie Hilfe möchten, mit " "anderen Worten zu beschreiben." #: ../src/yelp-search-parser.c:289 @@ -1269,8 +1423,7 @@ msgstr "" #: ../src/yelp-search-parser.c:890 msgid "re" msgstr "" -"ab:an:auf:be:bei:ein:ent:er:ge:hin:nach:nieder:über:um:un:unter:ver:vor:zer:" -"zu" +"ab:an:auf:be:bei:ein:ent:er:ge:hin:nach:nieder:über:um:un:unter:ver:vor:zer:zu" #. Translators: This is a list of (guess what?) common suffixes #. * to words. Things that may be put at ends of words to slightly @@ -1316,277 +1469,305 @@ msgstr "" #: ../src/yelp-toc.c:438 msgid "" -"The TOC file could not be parsed because it is not a well-formed XML " -"document." +"The TOC file could not be parsed because it is not a well-formed XML document." msgstr "" "Die Inhaltsverzeichnis-Datei »%s« konnte nicht analysiert werden, da sie kein " "gültiges XML-Dokument ist." -#: ../src/yelp-transform.c:86 -msgid "Invalid Stylesheet" -msgstr "Ungültige Stilvorlage" +#: ../src/yelp-window.c:203 +msgid "_Page" +msgstr "_Seite" -#: ../src/yelp-transform.c:87 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "" -"Entweder existiert die XSLT-Stilvorlage »%s« nicht, oder es ist keine gültige " -"XSLT-Stilvorlage." +#: ../src/yelp-window.c:204 +#| msgid "Viewer" +msgid "_View" +msgstr "_Ansicht" -#: ../src/yelp-transform.c:122 -msgid "Broken Transformation" -msgstr "Defekte Umwandlung" +#: ../src/yelp-window.c:205 +msgid "_Go" +msgstr "_Gehe zu" -#: ../src/yelp-transform.c:123 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "" -"Ein unbekannter Fehler trat auf beim Versuch, das Dokument umzuwandeln." +#: ../src/yelp-window.c:206 +msgid "_Bookmarks" +msgstr "_Lesezeichen" -#: ../src/yelp-transform.c:389 -msgid "No href attribute found on yelp:document\n" -msgstr "Kein href-Attribut im yelp:-Dokument gefunden\n" +#: ../src/yelp-window.c:209 +msgid "_New Window" +msgstr "_Neues Fenster" -#: ../src/yelp-transform.c:404 -msgid "Out of memory" -msgstr "Speichermangel" +#: ../src/yelp-window.c:214 +#| msgid "Clocks" +msgid "_Close" +msgstr "S_chließen" -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "_Datei" +#: ../src/yelp-window.c:219 +msgid "_Add Bookmark" +msgstr "Lesezeichen _hinzufügen" -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "_Bearbeiten" +#: ../src/yelp-window.c:224 +msgid "Open Location" +msgstr "Ort öffnen" -#: ../src/yelp-window.c:306 -msgid "_Go" -msgstr "_Gehe zu" +#: ../src/yelp-window.c:249 +#| msgid "Applications" +msgid "Application" +msgstr "Anwendung" -#: ../src/yelp-window.c:307 -msgid "_Bookmarks" -msgstr "_Lesezeichen" +#: ../src/yelp-window.c:250 +msgid "A YelpApplication instance that controls this window" +msgstr "Eine YelpApplication-Instanz, welche dieses Fenster steuert" -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "_Hilfe" +#: ../src/yelp-window.c:416 +#| msgid "_Search:" +msgid "Search..." +msgstr "Suchen …" -#: ../src/yelp-window.c:311 -msgid "_New Window" -msgstr "_Neues Fenster" +#: ../src/yelp-window.c:945 +#| msgid "Loading..." +msgid "Loading" +msgstr "Ladevorgang" -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "Aktuelles Dokument drucken …" +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "Hilfe zu GNOME erhalten" -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "Diese Seite drucken …" +#~ msgid "Bookmarks" +#~ msgstr "Lesezeichen" -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "Informationen über dieses Dokument" +#~ msgid "Re_name" +#~ msgstr "Umbe_nennen" -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "_Ort öffnen" +#~ msgid "_Bookmarks:" +#~ msgstr "_Lesezeichen:" -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "Fenster s_chließen" +#~ msgid "Add Bookmark" +#~ msgstr "Lesezeichen hinzufügen" -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "K_opieren" +#~ msgid "_Title:" +#~ msgstr "_Titel:" -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "_Alles auswählen" +#~ msgid "_Location:" +#~ msgstr "_Ort:" -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "_Suchen …" +#~ msgid "Fonts" +#~ msgstr "Schriften" -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "_Rückwärts suchen" +#~ msgid "Preferences" +#~ msgstr "Einstellungen" -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "Das vorherige Vorkommen des Wortes oder Satzes suchen" +#~ msgid "_Browse with caret" +#~ msgstr "Mit Text_cursor navigieren" -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "_Weitersuchen" +#~ msgid "_Fixed width:" +#~ msgstr "_Feste Breite:" -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "Das nächste Vorkommen des Wortes oder Satzes suchen" +#~ msgid "_Use system fonts" +#~ msgstr "_Systemschriften verwenden" -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "_Einstellungen" +#~ msgid "_Variable width:" +#~ msgstr "_Variable Breite:" -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "_Neu laden" +#~ msgid "Font for fixed text" +#~ msgstr "Dicktengleiche Schrift" -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "_Zurück" +#~ msgid "Font for text" +#~ msgstr "Standardschrift" -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "Die vorherige Seite in der Chronik anzeigen" +#~ msgid "Font for text with fixed width." +#~ msgstr "Schrift für Buchstaben mit fester Breite (Dicktengleichheit)" -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "_Vor" +#~ msgid "Font for text with variable width." +#~ msgstr "Schrift für Buchstaben mit variabler Breite" -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "Die nächste Seite in der Chronik anzeigen" +#~ msgid "Use a keyboard-controllable caret when viewing pages." +#~ msgstr "" +#~ "Einen über die Tastatur kontrollierbaren Rahmen verwenden, wenn Seiten " +#~ "betrachtet werden." -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "_Hilfe-Themen" +#~ msgid "Use caret" +#~ msgstr "Rahmen verwenden" -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "Zur Auflistung der Hilfe-Themen gehen" +#~ msgid "Use system fonts" +#~ msgstr "Systemschriften verwenden" -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "V_orheriger Abschnitt" +#~ msgid "Use the default fonts set for the system." +#~ msgstr "Die vom System vorgegebenen Schriften verwenden." -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "_Nächster Abschnitt" +#~ msgid "Open Bookmark in New Window" +#~ msgstr "Lesezeichen in neuem Fenster öffnen" -#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "_Inhalte" +#~ msgid "Rename Bookmark" +#~ msgstr "Lesezeichen umbenennen" -#: ../src/yelp-window.c:416 -msgid "_Add Bookmark" -msgstr "Lesezeichen _hinzufügen" +#~ msgid "Remove Bookmark" +#~ msgstr "Lesezeichen entfernen" -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "Lesezeichen _bearbeiten" +#~ msgid "A bookmark titled %s already exists for this page." +#~ msgstr "Ein Lesezeichen mit dem Namen %s existiert bereits für diese Seite." -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "_Verweis öffnen" +#~ msgid "A bookmark titled <b>%s</b> already exists for this page." +#~ msgstr "" +#~ "Ein Lesezeichen mit dem Namen <b>%s</b> existiert bereits für diese Seite." -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "Verweis in _neuem Fenster öffnen" +#~ msgid "Help Topics" +#~ msgstr "Hilfe-Themen" -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "Verweisadresse _kopieren" +#~ msgid "Document Sections" +#~ msgstr "Dokumentabschnitte" -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "Hilfe zu dieser Anwendung anzeigen" +#~ msgid "Directory not found" +#~ msgstr "Ordner nicht gefunden" -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "_Info" +#~ msgid "Broken Transformation" +#~ msgstr "Defekte Umwandlung" -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "_E-Mail-Adresse kopieren" +#~ msgid "An unknown error occurred while attempting to transform the document." +#~ msgstr "" +#~ "Ein unbekannter Fehler trat auf beim Versuch, das Dokument umzuwandeln." -#: ../src/yelp-window.c:524 -msgid "Help Browser" -msgstr "Hilfe-Browser" +#~ msgid "_File" +#~ msgstr "_Datei" -#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1772 -msgid "Loading..." -msgstr "Ladevorgang …" +#~ msgid "_Edit" +#~ msgstr "_Bearbeiten" -#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 -msgid "Unknown Page" -msgstr "Unbekannte Seite" +#~ msgid "_Help" +#~ msgstr "_Hilfe" -#: ../src/yelp-window.c:1042 ../src/yelp-window.c:1104 -#: ../src/yelp-window.c:1113 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "Die angeforderte URI-Adresse »%s« ist ungültig" +#~ msgid "Print This Document ..." +#~ msgstr "Aktuelles Dokument drucken …" -#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1106 -#: ../src/yelp-window.c:1114 -msgid "Unable to load page" -msgstr "Laden der Seite nicht möglich" +#~ msgid "Print This Page ..." +#~ msgstr "Diese Seite drucken …" -#: ../src/yelp-window.c:1330 -msgid "_Search:" -msgstr "_Suchen:" +#~ msgid "About This Document" +#~ msgstr "Informationen über dieses Dokument" -#: ../src/yelp-window.c:1331 -msgid "Search for other documentation" -msgstr "Nach sonstiger Dokumentation suchen" +#~ msgid "Open _Location" +#~ msgstr "_Ort öffnen" -#: ../src/yelp-window.c:1351 -msgid "Cannot create window" -msgstr "Fenster konnte nicht erzeugt werden" +#~ msgid "_Close Window" +#~ msgstr "Fenster s_chließen" -#: ../src/yelp-window.c:1357 -msgid "Cannot create search component" -msgstr "Suchkomponente konnte nicht erzeugt werden" +#~ msgid "_Copy" +#~ msgstr "K_opieren" -#: ../src/yelp-window.c:1529 -msgid "Fin_d:" -msgstr "_Suchen:" +#~ msgid "_Select All" +#~ msgstr "_Alles auswählen" -#: ../src/yelp-window.c:1551 -msgid "Find _Previous" -msgstr "_Rückwärts suchen" +#~ msgid "_Find..." +#~ msgstr "_Suchen …" -#: ../src/yelp-window.c:1563 -msgid "Find _Next" -msgstr "_Weitersuchen" +#~ msgid "Find Pre_vious" +#~ msgstr "_Rückwärts suchen" -#: ../src/yelp-window.c:1576 -msgid "Phrase not found" -msgstr "Ausdruck nicht gefunden" +#~ msgid "Find previous occurrence of the word or phrase" +#~ msgstr "Das vorherige Vorkommen des Wortes oder Satzes suchen" -#: ../src/yelp-window.c:1707 -#, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "" -"Die Datei »%s« konnte nicht gelesen werden. Eventuell gibt es sie nicht oder " -"Sie haben nicht die notwendigen Zugriffsrechte um diese zu lesen." +#~ msgid "Find Ne_xt" +#~ msgstr "_Weitersuchen" -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2577 -msgid "translator-credits" -msgstr "" -"Christian Meyer <chrisime@gnome.org>\n" -"Christian Neumair <chris@gnome-de.org>\n" -"Matthias Warkus <mawarkus@gnome.org>\n" -"Hendrik Brandt <heb@gnome-de.org>\n" -"Andre Klapper <ak-47@gmx.net>\n" -"Mario Blättermann <mariobl@gnome.org>\n" -"Christian Kirbach <Christian.Kirbach@googlemail.com>" - -#: ../src/yelp-window.c:2580 -msgid "Yelp" -msgstr "Yelp" - -#: ../src/yelp-window.c:2582 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "" -"Ein zentraler Sammelpunkt für Hilfedokumente der GNOME Arbeitsumgebung." +#~ msgid "Find next occurrence of the word or phrase" +#~ msgstr "Das nächste Vorkommen des Wortes oder Satzes suchen" -#: ../yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "Hilfe zu GNOME erhalten" +#~ msgid "_Preferences" +#~ msgstr "_Einstellungen" + +#~ msgid "_Reload" +#~ msgstr "_Neu laden" + +#~ msgid "Show previous page in history" +#~ msgstr "Die vorherige Seite in der Chronik anzeigen" + +#~ msgid "Show next page in history" +#~ msgstr "Die nächste Seite in der Chronik anzeigen" + +#~ msgid "_Help Topics" +#~ msgstr "_Hilfe-Themen" + +#~ msgid "Go to the listing of help topics" +#~ msgstr "Zur Auflistung der Hilfe-Themen gehen" + +#~ msgid "_Previous Section" +#~ msgstr "V_orheriger Abschnitt" + +#~ msgid "_Next Section" +#~ msgstr "_Nächster Abschnitt" + +#~ msgid "_Contents" +#~ msgstr "_Inhalte" + +#~ msgid "_Edit Bookmarks..." +#~ msgstr "Lesezeichen _bearbeiten" + +#~ msgid "_Open Link" +#~ msgstr "_Verweis öffnen" + +#~ msgid "Open Link in _New Window" +#~ msgstr "Verweis in _neuem Fenster öffnen" + +#~ msgid "_Copy Link Address" +#~ msgstr "Verweisadresse _kopieren" + +#~ msgid "Help On this application" +#~ msgstr "Hilfe zu dieser Anwendung anzeigen" + +#~ msgid "_About" +#~ msgstr "_Info" + +#~ msgid "Copy _Email Address" +#~ msgstr "_E-Mail-Adresse kopieren" + +#~ msgid "Help Browser" +#~ msgstr "Hilfe-Browser" + +#~ msgid "Unknown Page" +#~ msgstr "Unbekannte Seite" + +#~ msgid "The requested URI \"%s\" is invalid" +#~ msgstr "Die angeforderte URI-Adresse »%s« ist ungültig" + +#~ msgid "Unable to load page" +#~ msgstr "Laden der Seite nicht möglich" + +#~ msgid "Search for other documentation" +#~ msgstr "Nach sonstiger Dokumentation suchen" + +#~ msgid "Cannot create search component" +#~ msgstr "Suchkomponente konnte nicht erzeugt werden" + +#~ msgid "Fin_d:" +#~ msgstr "_Suchen:" + +#~ msgid "Find _Previous" +#~ msgstr "_Rückwärts suchen" + +#~ msgid "Find _Next" +#~ msgstr "_Weitersuchen" + +#~ msgid "Phrase not found" +#~ msgstr "Ausdruck nicht gefunden" + +#~ msgid "" +#~ "The file ‘%s’ could not be read. This file might be missing, or you might " +#~ "not have permissions to read it." +#~ msgstr "" +#~ "Die Datei »%s« konnte nicht gelesen werden. Eventuell gibt es sie nicht " +#~ "oder Sie haben nicht die notwendigen Zugriffsrechte um diese zu lesen." + +#~ msgid "translator-credits" +#~ msgstr "" +#~ "Christian Meyer <chrisime@gnome.org>\n" +#~ "Christian Neumair <chris@gnome-de.org>\n" +#~ "Matthias Warkus <mawarkus@gnome.org>\n" +#~ "Hendrik Brandt <heb@gnome-de.org>\n" +#~ "Andre Klapper <ak-47@gmx.net>\n" +#~ "Mario Blättermann <mariobl@gnome.org>\n" +#~ "Christian Kirbach <Christian.Kirbach@googlemail.com>" + +#~ msgid "A documentation browser and viewer for the Gnome Desktop." +#~ msgstr "" +#~ "Ein zentraler Sammelpunkt für Hilfedokumente der GNOME Arbeitsumgebung." #~ msgid "<b>Accessibility</b>" #~ msgstr "<b>Barrierefreiheit</b>" @@ -1603,12 +1784,6 @@ msgstr "Hilfe zu GNOME erhalten" #~ msgid "_Find:" #~ msgstr "_Suchen:" -#~ msgid "_Next" -#~ msgstr "_Weitersuchen" - -#~ msgid "_Previous" -#~ msgstr "_Rückwärts suchen" - #~ msgid "_Wrap around" #~ msgstr "_Zeilenumbruch" @@ -1660,12 +1835,6 @@ msgstr "Hilfe zu GNOME erhalten" #~ msgid "Variety of other applications" #~ msgstr "Eine Sammlung sonstiger Programme" -#~ msgid "An unknown error occured" -#~ msgstr "Es ist ein unbekannter Fehler aufgetreten" - -#~ msgid "Could not load document" -#~ msgstr "Dokument konnte nicht geladen werden" - #~ msgid "Could not read the table of contents" #~ msgstr "Das Inhaltsverzeichnis konnte nicht gelesen werden" @@ -1676,8 +1845,8 @@ msgstr "Hilfe zu GNOME erhalten" #~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " #~ "is formatted incorrectly." #~ msgstr "" -#~ "Die Datei »%s« konnte nicht analysiert werden. Entweder existiert die " -#~ "Datei nicht oder der Inhalt hat das falsche Format." +#~ "Die Datei »%s« konnte nicht analysiert werden. Entweder existiert die Datei " +#~ "nicht oder der Inhalt hat das falsche Format." #~ msgid "The YelpDocInfo struct of the document" #~ msgstr "Die YelpDocInfo-Struktur dieses Dokuments" @@ -1705,8 +1874,8 @@ msgstr "Hilfe zu GNOME erhalten" #~ "The table of contents could not be processed. The file ‘%s’ is either " #~ "missing or is not a valid XSLT stylesheet." #~ msgstr "" -#~ "Das Inhaltsverzeichnis konnte nicht geladen werden. Entweder existiert " -#~ "die Datei »%s« nicht oder der Inhalt ist kein gültiges XSLT-Stylesheet." +#~ "Das Inhaltsverzeichnis konnte nicht geladen werden. Entweder existiert die " +#~ "Datei »%s« nicht oder der Inhalt ist kein gültiges XSLT-Stylesheet." #~ msgid "Read man page for %s" #~ msgstr "Handbuch für %s lesen" @@ -1715,11 +1884,11 @@ msgstr "Hilfe zu GNOME erhalten" #~ msgstr "Info-Seite für %s lesen" #~ msgid "" -#~ "The table of contents could not be loaded. The file ‘%s’ is either " -#~ "missing or is not well-formed XML." +#~ "The table of contents could not be loaded. The file ‘%s’ is either missing " +#~ "or is not well-formed XML." #~ msgstr "" -#~ "Das Inhaltsverzeichnis konnte nicht geladen werden. Entweder existiert " -#~ "die Datei »%s« nicht oder der Inhalt ist kein gültiges XML." +#~ "Das Inhaltsverzeichnis konnte nicht geladen werden. Entweder existiert die " +#~ "Datei »%s« nicht oder der Inhalt ist kein gültiges XML." #~ msgid "Command Line Help" #~ msgstr "Befehlszeilen-Hilfe" @@ -1733,8 +1902,8 @@ msgstr "Hilfe zu GNOME erhalten" #~ "The Uniform Resource Identifier ‘%s’ is invalid or does not point to an " #~ "actual file." #~ msgstr "" -#~ "Der Uniform-Ressource-Identifier (URI-Adresse) »%s« ist ungültig oder " -#~ "zeigt nicht auf eine existierende Datei." +#~ "Der Uniform-Ressource-Identifier (URI-Adresse) »%s« ist ungültig oder zeigt " +#~ "nicht auf eine existierende Datei." #~ msgid "Man pages are not supported in this version." #~ msgstr "Man-Pages werden in dieser Version nicht unterstützt." @@ -1772,8 +1941,8 @@ msgstr "Hilfe zu GNOME erhalten" #~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " #~ "is improperly formatted." #~ msgstr "" -#~ "Die Datei »%s« konnte nicht analysiert werden. Entweder existiert die " -#~ "Datei nicht oder sie ist falsch formatiert." +#~ "Die Datei »%s« konnte nicht analysiert werden. Entweder existiert die Datei " +#~ "nicht oder sie ist falsch formatiert." #~ msgid "<b>Printing</b>" #~ msgstr "<b>Drucken</b>" @@ -1796,15 +1965,9 @@ msgstr "Hilfe zu GNOME erhalten" #~ msgid "_From:" #~ msgstr "_Von:" -#~ msgid "Sets the start of the range of pages to be printed" -#~ msgstr "Legt die erste Seite des zu druckenden Druckbereichs fest" - #~ msgid "_To:" #~ msgstr "_Bis:" -#~ msgid "Sets the end of the range of pages to be printed" -#~ msgstr "Legt die letzte Seite des zu druckenden Druckbereichs fest" - #~ msgid "" #~ "Could not display help for Yelp.\n" #~ "%s" @@ -4,21 +4,22 @@ # # Juan Manuel García Molina <juanma_gm@wanadoo.es>, 2001, 2002, 2003. # Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2003, 2004, 2005, 2006. -# Jorge González <jorgegonz@svn.gnome.org>, 2007, 200, 2009. +# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2009, 2010. +# msgid "" msgstr "" "Project-Id-Version: yelp.HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=yelp&component=general\n" -"POT-Creation-Date: 2009-08-07 00:18+0000\n" -"PO-Revision-Date: 2009-08-07 19:11+0200\n" +"POT-Creation-Date: 2010-05-09 11:11+0000\n" +"PO-Revision-Date: 2010-05-10 19:25+0200\n" "Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n" "Language-Team: Español <gnome-es-list@gnome.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/info.xml.in.h:1 msgid "GNU Info Pages" @@ -292,7 +293,7 @@ msgstr "Gráficos 2D" msgid "3D Graphics" msgstr "Gráficos 3D" -#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +#: ../data/toc.xml.in.h:3 msgid "Accessibility" msgstr "Accesibilidad" @@ -687,7 +688,7 @@ msgstr "Reproductores" msgid "Presentation Tools" msgstr "Herramientas de presentaciones" -#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 +#: ../data/toc.xml.in.h:104 msgid "Printing" msgstr "Imprimir" @@ -870,702 +871,784 @@ msgstr "Bienvenido al visor de ayuda de GNOME" msgid "Word Processors" msgstr "Procesador de textos" -#: ../data/ui/yelp-bookmarks.ui.h:1 -msgid "Bookmarks" -msgstr "Marcadores" +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:155 +msgid "Invalid compressed data" +msgstr "Datos comprimidos no válidos" -#: ../data/ui/yelp-bookmarks.ui.h:2 -msgid "Re_name" -msgstr "Re_nombrar" +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:161 +msgid "Not enough memory" +msgstr "No hay suficiente memoria" -#: ../data/ui/yelp-bookmarks.ui.h:3 -msgid "_Bookmarks:" -msgstr "_Marcadores:" +#: ../libyelp/yelp-docbook-document.c:264 ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 +#, c-format +msgid "The page ‘%s’ was not found in the document ‘%s’." +msgstr "La página «%s» no se encontró en el documento «%s»." -#: ../data/ui/yelp-bookmarks-add.ui.h:1 -msgid "Add Bookmark" -msgstr "Añadir marcador" +#: ../libyelp/yelp-docbook-document.c:298 ../libyelp/yelp-info-document.c:366 +#, c-format +msgid "The file does not exist." +msgstr "El archivo no existe." -#: ../data/ui/yelp-bookmarks-add.ui.h:2 -msgid "_Title:" -msgstr "_Título:" +#: ../libyelp/yelp-docbook-document.c:308 ../libyelp/yelp-info-document.c:376 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "El archivo «%s» no existe." -#: ../data/ui/yelp-open-location.ui.h:1 -msgid "Open Location" -msgstr "Abrir dirección" +#: ../libyelp/yelp-docbook-document.c:323 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"El archivo «%s» no se pudo analizar porque no es un documento XML bien " +"formado." + +#: ../libyelp/yelp-docbook-document.c:336 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"El archivo «%s» no se pudo analizar porque uno o más de sus archivos " +"incluidos no son documentos XML bien formados." + +#: ../libyelp/yelp-docbook-document.c:720 +msgid "Unknown" +msgstr "Desconocido" + +#: ../libyelp/yelp-docbook-document.c:781 ../libyelp/yelp-info-document.c:309 +#, c-format +msgid "The requested page was not found in the document ‘%s’." +msgstr "No se encontró la página solicitada en el documento «%s»." -#: ../data/ui/yelp-open-location.ui.h:2 -msgid "_Location:" -msgstr "_Dirección:" +#: ../libyelp/yelp-error.c:33 +#, c-format +msgid "An unknown error occurred." +msgstr "Ocurrió un error desconocido." -#: ../data/ui/yelp-preferences.ui.h:2 -msgid "Fonts" -msgstr "Tipografías" +#: ../libyelp/yelp-info-document.c:391 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"El archivo «%s» no se pudo analizar porque no es una página de información " +"bien formada." -#: ../data/ui/yelp-preferences.ui.h:3 -msgid "Preferences" -msgstr "Preferencias" +#: ../libyelp/yelp-location-entry.c:279 +msgid "Description Column" +msgstr "Columna de descripción" -#: ../data/ui/yelp-preferences.ui.h:4 -msgid "_Browse with caret" -msgstr "_Examinar con cursor" +#: ../libyelp/yelp-location-entry.c:280 +msgid "A column in the model to get descriptions from" +msgstr "Una columna en el modelo de la que obtener las descripciones" -#: ../data/ui/yelp-preferences.ui.h:5 -msgid "_Fixed width:" -msgstr "Anchura _fija:" +#: ../libyelp/yelp-location-entry.c:295 +msgid "Icon Column" +msgstr "Columna de icono" -#: ../data/ui/yelp-preferences.ui.h:6 -msgid "_Use system fonts" -msgstr "_Usar tipografía del sistema" +#: ../libyelp/yelp-location-entry.c:296 +msgid "A column in the model to get icon names from" +msgstr "Una columna en el modelo de la que obtener los nombres de icono" -#: ../data/ui/yelp-preferences.ui.h:7 -msgid "_Variable width:" -msgstr "Anchura _variable:" +#: ../libyelp/yelp-location-entry.c:311 +msgid "Flags Column" +msgstr "Columna de opciones" -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Tipografía para el texto de ancho fijo" +#: ../libyelp/yelp-location-entry.c:312 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "Una columna en el modelo con las opciones YelpLocationEntryFlags" -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Tipografía para el texto" +#: ../libyelp/yelp-location-entry.c:328 +msgid "Enable Search" +msgstr "Activar búsqueda" -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Tipografía para el texto con ancho fijo." +#: ../libyelp/yelp-location-entry.c:329 +msgid "Whether the location entry can be used as a search field" +msgstr "" +"Indica si la entrada de ubicación se puede usar como un campo de búsqueda" -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Tipografía para el texto de ancho variable." +#: ../libyelp/yelp-mallard-document.c:294 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "El directorio «%s» no existe." -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "Usar un cursor controlable por el teclado al ver las páginas." +#: ../libyelp/yelp-settings.c:146 +msgid "GtkSettings" +msgstr "GtkSettings" -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Usar cursor" +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "Un objeto GtkSettings del que obtener la configuración" -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Usar tipografía del sistema" +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "GtkIconTheme" -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Usar el conjunto de tipos predeterminado del sistema." +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "Un objeto GtkIconTheme del que obtener los iconos" -#: ../src/eggdesktopfile.c:165 -#, c-format -msgid "File is not a valid .desktop file" -msgstr "El archivo no es un archivo .desktop válido" +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "Ajuste de tipografía" -#: ../src/eggdesktopfile.c:188 -#, c-format -msgid "Unrecognized desktop file Version '%s'" -msgstr "No se reconoce la versión «%s» del archivo desktop" +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "Ajuste de tamaño que añadir a los tamaños de tipografía" -#: ../src/eggdesktopfile.c:958 -#, c-format -#| msgid "Settings" -msgid "Starting %s" -msgstr "Iniciando %s" +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" +msgstr "Mostrar el cursor de texto" -#: ../src/eggdesktopfile.c:1100 -#, c-format -msgid "Application does not accept documents on command line" -msgstr "La aplicación no acepta documentos en la línea de comandos" +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" +msgstr "Mostrar el cursor de texto para navegación accesible" -#: ../src/eggdesktopfile.c:1168 -#, c-format -msgid "Unrecognized launch option: %d" -msgstr "Opción de lanzamiento no reconocida: %d" +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "Modo editor" -#: ../src/eggdesktopfile.c:1373 -#, c-format -msgid "Can't pass document URIs to a 'Type=Link' desktop entry" -msgstr "" -"No se pueden pasar los URI de documentos a entradas de escritorio «Type=Link»" +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "Activar características útiles para editores" -#: ../src/eggdesktopfile.c:1392 +#: ../libyelp/yelp-transform.c:171 +msgid "XSLT Stylesheet" +msgstr "Hoja de estilo XSLT" + +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "La ubicación de la hoja de estilo XSLT" + +#: ../libyelp/yelp-transform.c:379 ../libyelp/yelp-transform.c:394 #, c-format -msgid "Not a launchable item" -msgstr "No es un elemento lanzable" +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." +msgstr "La hoja de estilo XSLT «%s» falta o no es válida." + +#: ../libyelp/yelp-transform.c:528 +msgid "No href attribute found on yelp:document\n" +msgstr "No se encontró atributo href en yelp:document\n" + +#: ../libyelp/yelp-transform.c:543 +msgid "Out of memory" +msgstr "Se agotó la memoria" + +#: ../libyelp/yelp-view.c:94 +#| msgid "Print" +msgid "_Print..." +msgstr "_Imprimir…" -#: ../src/eggsmclient.c:225 -msgid "Disable connection to session manager" -msgstr "Desactivar la conexión con el gestor de sesiones" +#: ../libyelp/yelp-view.c:99 +msgid "_Back" +msgstr "A_trás" -#: ../src/eggsmclient.c:228 -msgid "Specify file containing saved configuration" -msgstr "Especificar el archivo que contiene la configuración guardada" +#: ../libyelp/yelp-view.c:104 +msgid "_Forward" +msgstr "A_delante" -#: ../src/eggsmclient.c:228 -msgid "FILE" -msgstr "ARCHIVO" +#: ../libyelp/yelp-view.c:109 +msgid "_Previous Page" +msgstr "Página _anterior" -#: ../src/eggsmclient.c:231 -msgid "Specify session management ID" -msgstr "Especificar el ID de gestión de sesión" +#: ../libyelp/yelp-view.c:114 +msgid "_Next Page" +msgstr "_Siguiente página" -#: ../src/eggsmclient.c:231 -#| msgid "IDEs" -msgid "ID" -msgstr "ID" +#: ../libyelp/yelp-view.c:317 +msgid "Yelp URI" +msgstr "URI de Yelp" -#: ../src/eggsmclient.c:252 -msgid "Session management options:" -msgstr "Opciones de gestión de la sesión:" +#: ../libyelp/yelp-view.c:318 +msgid "A YelpUri with the current location" +msgstr "Un YelpUri con la ubicación actual" -#: ../src/eggsmclient.c:253 -msgid "Show session management options" -msgstr "Mostrar las opciones de gestión de la sesión" +#: ../libyelp/yelp-view.c:326 +msgid "Loading State" +msgstr "Estado de la carga" -#: ../src/yelp-bookmarks.c:148 -msgid "Open Bookmark in New Window" -msgstr "Abrir marcador en una ventana nueva" +#: ../libyelp/yelp-view.c:327 +msgid "The loading state of the view" +msgstr "El estado de carga de la vista" -#: ../src/yelp-bookmarks.c:152 -msgid "Rename Bookmark" -msgstr "Renombrar marcador" +#: ../libyelp/yelp-view.c:336 +msgid "Page ID" +msgstr "ID de página" -#: ../src/yelp-bookmarks.c:156 -msgid "Remove Bookmark" -msgstr "Eliminar marcador" +#: ../libyelp/yelp-view.c:337 +#| msgid "The ID of the root page of the page being viewew" +msgid "The ID of the root page of the page being viewed" +msgstr "El ID de la página raíz de la página que se está viendo" -#: ../src/yelp-bookmarks.c:314 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Ya existe un marcador titulado %s para esta página." +#: ../libyelp/yelp-view.c:345 +msgid "Root Title" +msgstr "Título raíz" -#: ../src/yelp-bookmarks.c:390 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "Ya existe un marcador titulado <b>%s</b> para esta página." - -#: ../src/yelp-bookmarks.c:403 -msgid "Help Topics" -msgstr "Temas de la ayuda" - -#: ../src/yelp-bookmarks.c:418 -msgid "Document Sections" -msgstr "Secciones del documento" - -#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:280 ../src/yelp-man.c:292 -#: ../src/yelp-man.c:385 ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 -msgid "Page not found" -msgstr "Página no encontrada" - -#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-mallard.c:281 ../src/yelp-man.c:293 -#, c-format -msgid "The page %s was not found in the document %s." -msgstr "La página %s no se encontró en el documento %s." +#: ../libyelp/yelp-view.c:346 +#| msgid "The title of the root page of the page being viewew" +msgid "The title of the root page of the page being viewed" +msgstr "El título de la página raíz de la página que se está viendo" -#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 -#: ../src/yelp-man.c:386 -#, c-format -msgid "The requested page was not found in the document %s." -msgstr "No se encontró la página requerida en el documento %s." +#: ../libyelp/yelp-view.c:354 +msgid "Page Title" +msgstr "Título de página" -#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 -#: ../src/yelp-man.c:429 -msgid "File not found" -msgstr "No se ha encontrado el archivo" +#: ../libyelp/yelp-view.c:355 +msgid "The title of the page being viewed" +msgstr "El título de la página que se está viendo" -#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 -#: ../src/yelp-man.c:430 -#, c-format -msgid "The file ‘%s’ does not exist." -msgstr "El archivo «%s» no existe." +#: ../libyelp/yelp-view.c:363 +msgid "Page Description" +msgstr "Descripción de página" -#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 -#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 -msgid "Could not parse file" -msgstr "No se pudo analizar el archivo" +#: ../libyelp/yelp-view.c:364 +msgid "The description of the page being viewed" +msgstr "La descripción de la página que se está viendo" -#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +#: ../libyelp/yelp-view.c:372 +msgid "Page Icon" +msgstr "Icono de página" + +#: ../libyelp/yelp-view.c:373 +msgid "The icon of the page being viewed" +msgstr "El icono de la página que se está viendo" + +#: ../libyelp/yelp-view.c:712 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed XML " -"document." -msgstr "" -"El archivo «%s» no se pudo analizar porque no es un documento XML bien " -"formado." +msgid "Could not load a document for ‘%s’" +msgstr "No se pudo cargar un documento para «%s»" -#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +#: ../libyelp/yelp-view.c:718 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because one or more of its included files " -"is not a well-formed XML document." -msgstr "" -"El archivo «%s» no se pudo analizar porque uno o más de sus archivos " -"incluidos no son documentos XML bien formados." +msgid "Could not load a document" +msgstr "No se pudo cargar un documento" -#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 -msgid "Unknown" -msgstr "Desconocido" +#: ../libyelp/yelp-view.c:785 +msgid "Not Found" +msgstr "No encontrada" + +#: ../libyelp/yelp-view.c:788 +msgid "Cannot Read" +msgstr "No se puede leer" -#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 +#: ../libyelp/yelp-view.c:794 msgid "Unknown Error" msgstr "Error desconocido" -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1710 -msgid "Could Not Read File" -msgstr "No se pudo leer el archivo" - -#: ../src/yelp-error.c:146 -msgid "No information is available about this error." -msgstr "No hay información disponible acerca de este error." - -#: ../src/yelp-info.c:396 +#: ../libyelp/yelp-view.c:885 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "" -"El archivo «%s» no se pudo analizar porque no es una página de información " -"bien formada." +msgid "The URI ‘%s’ does point to a valid page." +msgstr "El URI «%s» no apunta a una página válida." -#: ../src/yelp-io-channel.c:132 +#: ../libyelp/yelp-view.c:893 #, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." -msgstr "" -"El archivo «%s» no se pudo leer y decodificar. El archivo podría estar " -"comprimido en un formato no soportado." +msgid "The URI ‘%s’ could not be parsed." +msgstr "No se pudo analizar el URI «%s»." -#: ../src/yelp-main.c:88 -msgid "Use a private session" -msgstr "Usar una sesión privada" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "Activar el modo editor" -#: ../src/yelp-main.c:97 -msgid "Define which cache directory to use" -msgstr "Define qué directorio de caché utilizar" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "Texto más gra_nde" -#. Commandline parsing is done here -#: ../src/yelp-main.c:355 -msgid " GNOME Help Browser" -msgstr "Visor de ayuda de GNOME" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "Aumentar el tamaño del texto" -#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Ayuda" +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "Texto más peque_ño" -#: ../src/yelp-mallard.c:311 -msgid "Directory not found" -msgstr "No se encontró el directorio" +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "Reducir el tamaño del texto" -#: ../src/yelp-mallard.c:312 -#, c-format -msgid "The directory ‘%s’ does not exist." -msgstr "El directorio «%s» no existe." +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "Mostrar el _cursor de texto" -#: ../src/yelp-man.c:459 -#, c-format +#: ../src/yelp-application.c:297 ../src/yelp-window.c:1475 +#: ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Ayuda" + +#: ../src/yelp-application.c:547 msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed man page." +"You do not have PackageKit installed. Package installation links require " +"PackageKit." msgstr "" -"El archivo «%s» no se pudo analizar porque no es una página man bien formada." +"No tiene PackageKit instalado. Los enlaces de instalación de paquetes " +"requieren PackageKit." -#: ../src/yelp-print.c:97 -msgid "Print" -msgstr "Imprimir" +#: ../src/yelp-window.c:254 +msgid "_Page" +msgstr "_Página" -#: ../src/yelp-print.c:167 -msgid "Preparing to print" -msgstr "Preparándose para imprimir" +#: ../src/yelp-window.c:255 +msgid "_View" +msgstr "_Ver" -#: ../src/yelp-print.c:261 -msgid "Printing is not supported on this printer" -msgstr "La impresión no se soporta en esta impresora" +#: ../src/yelp-window.c:256 +msgid "_Go" +msgstr "_Ir a" -#: ../src/yelp-print.c:264 -#, c-format -msgid "Printer %s does not support postscript printing." -msgstr "La impresora %s soporta la impresión PostScript." +#: ../src/yelp-window.c:257 +msgid "_Bookmarks" +msgstr "_Marcadores" -#: ../src/yelp-print.c:366 -msgid "Waiting to print" -msgstr "Esperando para imprimir" +#: ../src/yelp-window.c:260 +msgid "_New Window" +msgstr "Ventana _nueva" -#: ../src/yelp-print.c:578 -msgid "An error occurred while printing" -msgstr "Ocurrió un error al imprimir" +#: ../src/yelp-window.c:265 +msgid "_Close" +msgstr "_Cerrar" -#: ../src/yelp-print.c:582 -#, c-format -msgid "It was not possible to print your document: %s" -msgstr "No es posible imprimir su documento: %s" +#: ../src/yelp-window.c:270 +msgid "_Add Bookmark" +msgstr "_Añadir marcador" -#: ../src/yelp-search-parser.c:67 -msgid "the GNOME Support Forums" -msgstr "Los fórums de asistencia de GNOME" +#: ../src/yelp-window.c:275 +msgid "Find in Page..." +msgstr "Buscar en la página…" -#: ../src/yelp-search-parser.c:285 -#, c-format -msgid "No results for \"%s\"" -msgstr "Sin resultados para «%s»" +#: ../src/yelp-window.c:280 ../src/yelp-window.c:497 +msgid "Search..." +msgstr "Buscar…" -#: ../src/yelp-search-parser.c:286 -msgid "" -"Try using different words to describe the problem you're having or the topic " -"you want help with." -msgstr "" -"Intente usar palabras diferentes para describir el problema que está " -"teniendo o el asunto del que quiere ayuda." +#: ../src/yelp-window.c:285 +msgid "Open Location" +msgstr "Abrir dirección" -#: ../src/yelp-search-parser.c:289 -#, c-format -msgid "Search results for \"%s\"" -msgstr "Buscar resultados para «%s»" - -#. TRANSLATORS: Please don't do anything funny with the -#. * format arguement. It isn't really going through a printf -#. * The %s is used to indicate where the name of the site (linked) -#. * should be. This is done in the XSLT -#. -#: ../src/yelp-search-parser.c:303 -#, c-format -msgid "Repeat the search online at %s" -msgstr "Repetir la búsqueda en línea en %s" - -#. Translators: Do not translate this list exactly. These are -#. * colon-separated words that aren't useful for choosing search -#. * results; they will be different for each language. Include -#. * pronouns, articles, very common verbs and prepositions, -#. * words from question structures like "tell me about" and -#. * "how do I", and words for functional states like "not", -#. * "work", and "broken". -#. -#: ../src/yelp-search-parser.c:874 -msgid "" -"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" -"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" -"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" -"where:who:will:with:won't:wont:why:work:working:works" -msgstr "" -"acerca de:con:contra:de:desde:elemento:es:hace:mi:por:que:según:sin:sobre:son" - -#. Translators: This is a list of common prefixes for words. -#. * Do not translate this directly. Instead, use a colon -#. * seperated list of word-starts. In English, an example -#. * is re-. If there is none, please use the term NULL -#. * If there is only one, please put a colon after. -#. * E.g. if the common prefix is re then the string would be -#. * "re:" -#. -#: ../src/yelp-search-parser.c:890 -msgid "re" -msgstr "auto:re:" - -#. Translators: This is a list of (guess what?) common suffixes -#. * to words. Things that may be put at ends of words to slightly -#. * alter their meaning (like -ing and -s in English). This is a -#. * colon seperated list (I like colons). If there are none, -#. * please use the string NULL. If there is only 1, please -#. * add a colon at the end of the list -#. -#: ../src/yelp-search-parser.c:899 -msgid "ers:er:ing:es:s:'s" -msgstr "ando:mente:" - -#: ../src/yelp-search-parser.c:1095 -msgid "No Comment" -msgstr "Sin comentario" - -#. Much bigger problems -#: ../src/yelp-search.c:238 -msgid "Search could not be processed" -msgstr "No se pudo procesar la búsqueda" - -#: ../src/yelp-search.c:239 -msgid "The requested search could not be processed." -msgstr "No se pudo procesar la búsqueda requerida." - -#: ../src/yelp-search.c:366 -msgid "Cannot process the search" -msgstr "No se puede procesar la búsqueda" - -#: ../src/yelp-search.c:367 -msgid "The search processor returned invalid results" -msgstr "El procesador de búsqueda devolvió resultados no válidos" - -#: ../src/yelp-toc.c:267 +#: ../src/yelp-window.c:312 +msgid "Application" +msgstr "Aplicación" + +#: ../src/yelp-window.c:313 +msgid "A YelpApplication instance that controls this window" +msgstr "Una instancia de YelpApplication que controla esta ventana" + +#: ../src/yelp-window.c:1096 #, c-format -msgid "The page %s was not found in the TOC." -msgstr "No se encontró la página %s en el TOC." +msgid "%i match" +msgid_plural "%i matches" +msgstr[0] "%i coincidencia" +msgstr[1] "%i coincidencias" -#: ../src/yelp-toc.c:366 -msgid "The requested page was not found in the TOC." -msgstr "No se encontró la página requerida en el TOC." +#: ../src/yelp-window.c:1121 +msgid "No matches" +msgstr "Sin coincidencias" -#: ../src/yelp-toc.c:438 -msgid "" -"The TOC file could not be parsed because it is not a well-formed XML " -"document." -msgstr "" -"El archivo TOC no se pudo analizar porque no es un documento XML bien " -"formado." +#: ../src/yelp-window.c:1418 +msgid "Loading" +msgstr "Cargando" -#: ../src/yelp-transform.c:86 -msgid "Invalid Stylesheet" -msgstr "Hoja de estilo no válida" +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "Obtenga ayuda acerca de GNOME" -#: ../src/yelp-transform.c:87 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "La hoja de estilo XSLT «%s» falta o no es válida." +#~ msgid "" +#~ "The file ‘%s’ could not be read and decoded. The file may be compressed " +#~ "in an unsupported format." +#~ msgstr "" +#~ "El archivo «%s» no se pudo leer y decodificar. El archivo podría estar " +#~ "comprimido en un formato no soportado." -#: ../src/yelp-transform.c:122 -msgid "Broken Transformation" -msgstr "Transformación rota" +#~| msgid "Search..." +#~ msgid "Search" +#~ msgstr "Buscar" -#: ../src/yelp-transform.c:123 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "Ocurrió un error desconocido al intentar transformar el documento." +#~ msgid "File is not a valid .desktop file" +#~ msgstr "El archivo no es un archivo .desktop válido" -#: ../src/yelp-transform.c:389 -msgid "No href attribute found on yelp:document\n" -msgstr "No se encontró atributo href en yelp:document\n" +#~ msgid "Unrecognized desktop file Version '%s'" +#~ msgstr "No se reconoce la versión «%s» del archivo desktop" -#: ../src/yelp-transform.c:404 -msgid "Out of memory" -msgstr "Se agotó la memoria" +#~ msgid "Starting %s" +#~ msgstr "Iniciando %s" -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "_Archivo" +#~ msgid "Application does not accept documents on command line" +#~ msgstr "La aplicación no acepta documentos en la línea de comandos" -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "_Editar" +#~ msgid "Unrecognized launch option: %d" +#~ msgstr "Opción de lanzamiento no reconocida: %d" -#: ../src/yelp-window.c:306 -msgid "_Go" -msgstr "_Ir a" +#~ msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +#~ msgstr "" +#~ "No se pueden pasar los URI de documentos a entradas de escritorio " +#~ "«Type=Link»" -#: ../src/yelp-window.c:307 -msgid "_Bookmarks" -msgstr "_Marcadores" +#~ msgid "Not a launchable item" +#~ msgstr "No es un elemento lanzable" -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "Ay_uda" +#~ msgid "Disable connection to session manager" +#~ msgstr "Desactivar la conexión con el gestor de sesiones" -#: ../src/yelp-window.c:311 -msgid "_New Window" -msgstr "Ventana _nueva" +#~ msgid "Specify file containing saved configuration" +#~ msgstr "Especificar el archivo que contiene la configuración guardada" -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "Imprimir este documento..." +#~ msgid "FILE" +#~ msgstr "ARCHIVO" -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "Imprimir esta página..." +#~ msgid "Specify session management ID" +#~ msgstr "Especificar el ID de gestión de sesión" -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "Acerca de este documento" +#~ msgid "ID" +#~ msgstr "ID" -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "Abrir _dirección" +#~ msgid "Session management options:" +#~ msgstr "Opciones de gestión de la sesión:" -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "_Cerrar ventana" +#~ msgid "Show session management options" +#~ msgstr "Mostrar las opciones de gestión de la sesión" -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "_Copiar" +#~ msgid "Page not found" +#~ msgstr "Página no encontrada" -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "Seleccionar _todo" +#~ msgid "The page %s was not found in the document %s." +#~ msgstr "La página %s no se encontró en el documento %s." -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "_Buscar..." +#~ msgid "The requested page was not found in the document %s." +#~ msgstr "No se encontró la página requerida en el documento %s." -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "Buscar _anterior" +#~ msgid "File not found" +#~ msgstr "No se ha encontrado el archivo" -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "Buscar la anterior aparición de la palabra o frase" +#~ msgid "Could not parse file" +#~ msgstr "No se pudo analizar el archivo" -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "Buscar _siguiente" +#~ msgid "Could Not Read File" +#~ msgstr "No se pudo leer el archivo" -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "Buscar la siguiente aparición de la palabra o frase" +#~ msgid "No information is available about this error." +#~ msgstr "No hay información disponible acerca de este error." -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "Prefere_ncias" +#~ msgid "Use a private session" +#~ msgstr "Usar una sesión privada" -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "Re_cargar" +#~ msgid "Define which cache directory to use" +#~ msgstr "Define qué directorio de caché utilizar" -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "A_trás" +#~ msgid " GNOME Help Browser" +#~ msgstr "Visor de ayuda de GNOME" -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "Muestra la página anterior del historial" +#~ msgid "" +#~ "The file ‘%s’ could not be parsed because it is not a well-formed man " +#~ "page." +#~ msgstr "" +#~ "El archivo «%s» no se pudo analizar porque no es una página man bien " +#~ "formada." -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "A_delante" +#~ msgid "Preparing to print" +#~ msgstr "Preparándose para imprimir" -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "Muestra la siguiente página del historial" +#~ msgid "Printing is not supported on this printer" +#~ msgstr "La impresión no se soporta en esta impresora" -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "Temas de ay_uda" +#~ msgid "Printer %s does not support postscript printing." +#~ msgstr "La impresora %s soporta la impresión PostScript." -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "Ir a la lista de temas de ayuda" +#~ msgid "Waiting to print" +#~ msgstr "Esperando para imprimir" -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "Sección _anterior" +#~ msgid "An error occurred while printing" +#~ msgstr "Ocurrió un error al imprimir" -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "Sección _siguiente" +#~ msgid "It was not possible to print your document: %s" +#~ msgstr "No es posible imprimir su documento: %s" -#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "Índ_ice" +#~ msgid "the GNOME Support Forums" +#~ msgstr "Los fórums de asistencia de GNOME" -#: ../src/yelp-window.c:416 -msgid "_Add Bookmark" -msgstr "_Añadir marcador" +#~ msgid "No results for \"%s\"" +#~ msgstr "Sin resultados para «%s»" -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "_Editar marcadores..." +#~ msgid "" +#~ "Try using different words to describe the problem you're having or the " +#~ "topic you want help with." +#~ msgstr "" +#~ "Intente usar palabras diferentes para describir el problema que está " +#~ "teniendo o el asunto del que quiere ayuda." -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "_Abrir enlace" +#~ msgid "Search results for \"%s\"" +#~ msgstr "Buscar resultados para «%s»" -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "Abrir enlace en una _ventana nueva" +#~ msgid "Repeat the search online at %s" +#~ msgstr "Repetir la búsqueda en línea en %s" -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "_Copiar dirección del enlace" +#~ msgid "" +#~ "a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:" +#~ "doesn't:doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:" +#~ "when:has:have:help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:" +#~ "this:to:what:where:who:will:with:won't:wont:why:work:working:works" +#~ msgstr "" +#~ "acerca de:con:contra:de:desde:elemento:es:hace:mi:por:que:según:sin:sobre:" +#~ "son" -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "Ayuda acerca de esta aplicación" +#~ msgid "re" +#~ msgstr "auto:re:" -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "Acerca _de" +#~ msgid "ers:er:ing:es:s:'s" +#~ msgstr "ando:mente:" -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "Copiar dirección de _correo-e" +#~ msgid "No Comment" +#~ msgstr "Sin comentario" -#: ../src/yelp-window.c:524 -msgid "Help Browser" -msgstr "Visor de ayuda" +#~ msgid "Search could not be processed" +#~ msgstr "No se pudo procesar la búsqueda" -#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1772 -msgid "Loading..." -msgstr "Cargando..." +#~ msgid "The requested search could not be processed." +#~ msgstr "No se pudo procesar la búsqueda requerida." -#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 -msgid "Unknown Page" -msgstr "Página desconocida" +#~ msgid "Cannot process the search" +#~ msgstr "No se puede procesar la búsqueda" -#: ../src/yelp-window.c:1042 ../src/yelp-window.c:1104 -#: ../src/yelp-window.c:1113 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "El URI requerido «%s» no es válido" +#~ msgid "The search processor returned invalid results" +#~ msgstr "El procesador de búsqueda devolvió resultados no válidos" -#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1106 -#: ../src/yelp-window.c:1114 -msgid "Unable to load page" -msgstr "No se pudo cargar la página" +#~ msgid "The page %s was not found in the TOC." +#~ msgstr "No se encontró la página %s en el TOC." -#: ../src/yelp-window.c:1330 -msgid "_Search:" -msgstr "_Buscar:" +#~ msgid "The requested page was not found in the TOC." +#~ msgstr "No se encontró la página requerida en el TOC." -#: ../src/yelp-window.c:1331 -msgid "Search for other documentation" -msgstr "Buscar otra documentación" +#~ msgid "" +#~ "The TOC file could not be parsed because it is not a well-formed XML " +#~ "document." +#~ msgstr "" +#~ "El archivo TOC no se pudo analizar porque no es un documento XML bien " +#~ "formado." -#: ../src/yelp-window.c:1351 -msgid "Cannot create window" -msgstr "No se puede crear la ventana" +#~ msgid "Bookmarks" +#~ msgstr "Marcadores" -#: ../src/yelp-window.c:1357 -msgid "Cannot create search component" -msgstr "No se puede crear el componente de búsqueda" +#~ msgid "Re_name" +#~ msgstr "Re_nombrar" -#: ../src/yelp-window.c:1529 -msgid "Fin_d:" -msgstr "_Buscar:" +#~ msgid "_Bookmarks:" +#~ msgstr "_Marcadores:" -#: ../src/yelp-window.c:1551 -msgid "Find _Previous" -msgstr "Buscar _anterior" +#~ msgid "Add Bookmark" +#~ msgstr "Añadir marcador" -#: ../src/yelp-window.c:1563 -msgid "Find _Next" -msgstr "Buscar _siguiente" +#~ msgid "_Title:" +#~ msgstr "_Título:" -#: ../src/yelp-window.c:1576 -msgid "Phrase not found" -msgstr "No se encontró la frase" +#~ msgid "_Location:" +#~ msgstr "_Dirección:" -#: ../src/yelp-window.c:1707 -#, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "" -"El archivo «%s» no se pudo leer. Este archivo quizá falte, o quizá no tenga " -"permiso para leerlo." +#~ msgid "Fonts" +#~ msgstr "Tipografías" -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2577 -msgid "translator-credits" -msgstr "" -"Jorge González <jorgegonz@svn.gnome.org>, 2007-2009\n" -"Francisco J.F. Serrador <serrador@cvs.gnome.com>, 2003-2006" +#~ msgid "Preferences" +#~ msgstr "Preferencias" -#: ../src/yelp-window.c:2580 -msgid "Yelp" -msgstr "Yelp" +#~ msgid "_Browse with caret" +#~ msgstr "_Examinar con cursor" -#: ../src/yelp-window.c:2582 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "Un visor y explorador de documentación para el escritorio GNOME." +#~ msgid "_Fixed width:" +#~ msgstr "Anchura _fija:" -#: ../yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "Obtenga ayuda acerca de GNOME" +#~ msgid "_Use system fonts" +#~ msgstr "_Usar tipografía del sistema" + +#~ msgid "_Variable width:" +#~ msgstr "Anchura _variable:" + +#~ msgid "Font for fixed text" +#~ msgstr "Tipografía para el texto de ancho fijo" + +#~ msgid "Font for text" +#~ msgstr "Tipografía para el texto" + +#~ msgid "Font for text with fixed width." +#~ msgstr "Tipografía para el texto con ancho fijo." + +#~ msgid "Font for text with variable width." +#~ msgstr "Tipografía para el texto de ancho variable." + +#~ msgid "Use a keyboard-controllable caret when viewing pages." +#~ msgstr "Usar un cursor controlable por el teclado al ver las páginas." + +#~ msgid "Use caret" +#~ msgstr "Usar cursor" + +#~ msgid "Use system fonts" +#~ msgstr "Usar tipografía del sistema" + +#~ msgid "Use the default fonts set for the system." +#~ msgstr "Usar el conjunto de tipos predeterminado del sistema." + +#~ msgid "Open Bookmark in New Window" +#~ msgstr "Abrir marcador en una ventana nueva" + +#~ msgid "Rename Bookmark" +#~ msgstr "Renombrar marcador" + +#~ msgid "Remove Bookmark" +#~ msgstr "Eliminar marcador" + +#~ msgid "A bookmark titled %s already exists for this page." +#~ msgstr "Ya existe un marcador titulado %s para esta página." + +#~ msgid "A bookmark titled <b>%s</b> already exists for this page." +#~ msgstr "Ya existe un marcador titulado <b>%s</b> para esta página." + +#~ msgid "Help Topics" +#~ msgstr "Temas de la ayuda" + +#~ msgid "Document Sections" +#~ msgstr "Secciones del documento" + +#~ msgid "Directory not found" +#~ msgstr "No se encontró el directorio" + +#~ msgid "Broken Transformation" +#~ msgstr "Transformación rota" + +#~ msgid "" +#~ "An unknown error occurred while attempting to transform the document." +#~ msgstr "Ocurrió un error desconocido al intentar transformar el documento." + +#~ msgid "_File" +#~ msgstr "_Archivo" + +#~ msgid "_Edit" +#~ msgstr "_Editar" + +#~ msgid "_Help" +#~ msgstr "Ay_uda" + +#~ msgid "Print This Document ..." +#~ msgstr "Imprimir este documento..." + +#~ msgid "About This Document" +#~ msgstr "Acerca de este documento" + +#~ msgid "Open _Location" +#~ msgstr "Abrir _dirección" + +#~ msgid "_Close Window" +#~ msgstr "_Cerrar ventana" + +#~ msgid "_Copy" +#~ msgstr "_Copiar" + +#~ msgid "_Select All" +#~ msgstr "Seleccionar _todo" + +#~ msgid "_Find..." +#~ msgstr "_Buscar..." + +#~ msgid "Find Pre_vious" +#~ msgstr "Buscar _anterior" + +#~ msgid "Find previous occurrence of the word or phrase" +#~ msgstr "Buscar la anterior aparición de la palabra o frase" + +#~ msgid "Find Ne_xt" +#~ msgstr "Buscar _siguiente" + +#~ msgid "Find next occurrence of the word or phrase" +#~ msgstr "Buscar la siguiente aparición de la palabra o frase" + +#~ msgid "_Preferences" +#~ msgstr "Prefere_ncias" + +#~ msgid "_Reload" +#~ msgstr "Re_cargar" + +#~ msgid "Show previous page in history" +#~ msgstr "Muestra la página anterior del historial" + +#~ msgid "Show next page in history" +#~ msgstr "Muestra la siguiente página del historial" + +#~ msgid "_Help Topics" +#~ msgstr "Temas de ay_uda" + +#~ msgid "Go to the listing of help topics" +#~ msgstr "Ir a la lista de temas de ayuda" + +#~ msgid "_Previous Section" +#~ msgstr "Sección _anterior" + +#~ msgid "_Next Section" +#~ msgstr "Sección _siguiente" + +#~ msgid "_Contents" +#~ msgstr "Índ_ice" + +#~ msgid "_Edit Bookmarks..." +#~ msgstr "_Editar marcadores..." + +#~ msgid "_Open Link" +#~ msgstr "_Abrir enlace" + +#~ msgid "Open Link in _New Window" +#~ msgstr "Abrir enlace en una _ventana nueva" + +#~ msgid "_Copy Link Address" +#~ msgstr "_Copiar dirección del enlace" + +#~ msgid "Help On this application" +#~ msgstr "Ayuda acerca de esta aplicación" + +#~ msgid "_About" +#~ msgstr "Acerca _de" + +#~ msgid "Copy _Email Address" +#~ msgstr "Copiar dirección de _correo-e" + +#~ msgid "Help Browser" +#~ msgstr "Visor de ayuda" + +#~ msgid "Unknown Page" +#~ msgstr "Página desconocida" + +#~ msgid "The requested URI \"%s\" is invalid" +#~ msgstr "El URI requerido «%s» no es válido" + +#~ msgid "Unable to load page" +#~ msgstr "No se pudo cargar la página" + +#~ msgid "Search for other documentation" +#~ msgstr "Buscar otra documentación" + +#~ msgid "Cannot create search component" +#~ msgstr "No se puede crear el componente de búsqueda" + +#~ msgid "Fin_d:" +#~ msgstr "_Buscar:" + +#~ msgid "Find _Previous" +#~ msgstr "Buscar _anterior" + +#~ msgid "Find _Next" +#~ msgstr "Buscar _siguiente" + +#~ msgid "Phrase not found" +#~ msgstr "No se encontró la frase" + +#~ msgid "" +#~ "The file ‘%s’ could not be read. This file might be missing, or you " +#~ "might not have permissions to read it." +#~ msgstr "" +#~ "El archivo «%s» no se pudo leer. Este archivo quizá falte, o quizá no " +#~ "tenga permiso para leerlo." + +#~ msgid "translator-credits" +#~ msgstr "" +#~ "Jorge González <jorgegonz@svn.gnome.org>, 2007-2009\n" +#~ "Francisco J.F. Serrador <serrador@cvs.gnome.com>, 2003-2006" + +#~ msgid "A documentation browser and viewer for the Gnome Desktop." +#~ msgstr "Un visor y explorador de documentación para el escritorio GNOME." #~ msgid "<b>Accessibility</b>" #~ msgstr "<b>Accesibilidad</b>" @@ -1582,12 +1665,6 @@ msgstr "Obtenga ayuda acerca de GNOME" #~ msgid "_Find:" #~ msgstr "_Buscar:" -#~ msgid "_Next" -#~ msgstr "_Siguiente" - -#~ msgid "_Previous" -#~ msgstr "_Anterior" - #~ msgid "_Wrap around" #~ msgstr "_Volver al principio" @@ -14,19 +14,21 @@ # Suso Baleato <suso.baleato@xunta.es>, 2009. # Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009. # Antón Méixome <meixome@mancomun.org>, 2009. +# Fran Diéguez <frandieguez@ubuntu.com>, 2010. +# msgid "" msgstr "" "Project-Id-Version: yelp.master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-19 13:41+0200\n" -"PO-Revision-Date: 2009-08-18 09:05+0200\n" -"Last-Translator: Antón Méixome <meixome@mancomun.org>\n" -"Language-Team: Galician <gnome@mancomun.org>\n" +"POT-Creation-Date: 2010-05-20 18:49+0200\n" +"PO-Revision-Date: 2010-05-20 18:49+0200\n" +"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n" +"Language-Team: Galician <gnome@g11.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" -"Plural-Forms: Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\\\n" "X-Generator: KBabel 1.11.4\n" #: ../data/info.xml.in.h:1 @@ -301,7 +303,7 @@ msgstr "Gráficos en 2D" msgid "3D Graphics" msgstr "Gráficos en 3D" -#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +#: ../data/toc.xml.in.h:3 msgid "Accessibility" msgstr "Accesibilidade" @@ -695,7 +697,7 @@ msgstr "Reprodutores" msgid "Presentation Tools" msgstr "Ferramentas de presentación" -#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 +#: ../data/toc.xml.in.h:104 msgid "Printing" msgstr "Imprimir" @@ -879,701 +881,789 @@ msgstr "Benvido ao navegador de axuda do Gnome" msgid "Word Processors" msgstr "Procesadores de texto" -#: ../data/ui/yelp-bookmarks.ui.h:1 -msgid "Bookmarks" -msgstr "Marcadores" +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:155 +msgid "Invalid compressed data" +msgstr "Datos comprimidos non válidos" -#: ../data/ui/yelp-bookmarks.ui.h:2 -msgid "Re_name" -msgstr "Re_nomear" +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:161 +msgid "Not enough memory" +msgstr "Non hai suficiente memoria" -#: ../data/ui/yelp-bookmarks.ui.h:3 -msgid "_Bookmarks:" -msgstr "_Marcadores:" +#: ../libyelp/yelp-docbook-document.c:264 ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 +#, c-format +msgid "The page ‘%s’ was not found in the document ‘%s’." +msgstr "Non se encontrou a páxina «%s» no documento «%s»." -#: ../data/ui/yelp-bookmarks-add.ui.h:1 -msgid "Add Bookmark" -msgstr "Engadir un marcador" +#: ../libyelp/yelp-docbook-document.c:298 ../libyelp/yelp-info-document.c:366 +#, c-format +msgid "The file does not exist." +msgstr "O ficheiro non existe." -#: ../data/ui/yelp-bookmarks-add.ui.h:2 -msgid "_Title:" -msgstr "_Título:" +#: ../libyelp/yelp-docbook-document.c:308 ../libyelp/yelp-info-document.c:376 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "O ficheiro ‘%s’ non existe." -#: ../data/ui/yelp-open-location.ui.h:1 -msgid "Open Location" -msgstr "Abrir localización" +#: ../libyelp/yelp-docbook-document.c:323 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"Non foi posíbel analizar o ficheiro ‘%s’ porque non é un documento HTML ben " +"formado." -#: ../data/ui/yelp-open-location.ui.h:2 -msgid "_Location:" -msgstr "_Localización:" +#: ../libyelp/yelp-docbook-document.c:336 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"Non foi posíbel o ficheiro ‘%s’ porque non é un documento XML ben formado." -#: ../data/ui/yelp-preferences.ui.h:2 -msgid "Fonts" -msgstr "Tipos de letra" +#: ../libyelp/yelp-docbook-document.c:720 +msgid "Unknown" +msgstr "Descoñecido" -#: ../data/ui/yelp-preferences.ui.h:3 -msgid "Preferences" -msgstr "Preferencias" +#: ../libyelp/yelp-docbook-document.c:781 ../libyelp/yelp-info-document.c:309 +#, c-format +msgid "The requested page was not found in the document ‘%s’." +msgstr "Non se encontrou a páxina solicitada no documento «%s»." -#: ../data/ui/yelp-preferences.ui.h:4 -msgid "_Browse with caret" -msgstr "_Navegar con cursor" +#: ../libyelp/yelp-error.c:33 +#, c-format +msgid "An unknown error occurred." +msgstr "Produciuse un erro descoñecido." -#: ../data/ui/yelp-preferences.ui.h:5 -msgid "_Fixed width:" -msgstr "Largura _fixa:" +#: ../libyelp/yelp-info-document.c:391 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"Non foi posíbel analizar o ficheiro ‘%s’ porque non é unha páxina de " +"información ben elaborada." -#: ../data/ui/yelp-preferences.ui.h:6 -msgid "_Use system fonts" -msgstr "_Usar os tipos de letra do sistema" +#: ../libyelp/yelp-location-entry.c:279 +msgid "Description Column" +msgstr "Columna de descrición" -#: ../data/ui/yelp-preferences.ui.h:7 -msgid "_Variable width:" -msgstr "Largura _variábel:" +#: ../libyelp/yelp-location-entry.c:280 +msgid "A column in the model to get descriptions from" +msgstr "Unha columna no modelo desde onde obter as descricións" -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Tipo de letra para o texto fixo" +#: ../libyelp/yelp-location-entry.c:295 +msgid "Icon Column" +msgstr "Columna de icona" -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Tipo de letra para o texto" +#: ../libyelp/yelp-location-entry.c:296 +msgid "A column in the model to get icon names from" +msgstr "Unha columna no modelo desde onde obter os nomes de icona" -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Tipo de letra para o texto de largura fixa." +#: ../libyelp/yelp-location-entry.c:311 +msgid "Flags Column" +msgstr "Columna de opcións" -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Tipo de letra para o texto de largura variábel." +#: ../libyelp/yelp-location-entry.c:312 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "Unha columna no modelo con opcións YelpLocationEntryFlags" -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "Usar un cursor controlábel polo teclado ao ver as páxinas." +#: ../libyelp/yelp-location-entry.c:328 +msgid "Enable Search" +msgstr "Activar a busca" -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Usar cursor" +#: ../libyelp/yelp-location-entry.c:329 +msgid "Whether the location entry can be used as a search field" +msgstr "" +"Indica se a entrada de localización pode ser usada como un campo de busca" -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Usar tipos de letra do sistema" +#: ../libyelp/yelp-mallard-document.c:294 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "O cartafol «%s» non existe." -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Usar o conxunto de tipos de letra predeterminado do sistema." +#: ../libyelp/yelp-settings.c:146 +msgid "GtkSettings" +msgstr "GtkSettings" -#: ../src/eggdesktopfile.c:165 -#, c-format -msgid "File is not a valid .desktop file" -msgstr "O ficheiro non é un ficheiro .desktop válido" +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "Un obxecto GtkSettings desde onde obter as configuracións" -#: ../src/eggdesktopfile.c:188 -#, c-format -msgid "Unrecognized desktop file Version '%s'" -msgstr "Non se recoñece a versión '%s' do ficheiro de escritorio" +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "GtkIconTheme" -#: ../src/eggdesktopfile.c:958 -#, c-format -msgid "Starting %s" -msgstr "Iniciando %s" +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "Un obxecto GtkIconTheme desde onde obter iconas" -#: ../src/eggdesktopfile.c:1100 -#, c-format -msgid "Application does not accept documents on command line" -msgstr "O aplicativo non acepta documentos na liña de ordes" +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "Axuste do tipo de letra" -#: ../src/eggdesktopfile.c:1168 -#, c-format -msgid "Unrecognized launch option: %d" -msgstr "Opción de lanzamento descoñecida: %d" +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "Unha opción de tamaño onde engadir tamaños de tipo de letra" -#: ../src/eggdesktopfile.c:1373 -#, c-format -msgid "Can't pass document URIs to a 'Type=Link' desktop entry" -msgstr "" -"Non se lle pode pasar os URI do documento a unha entrada de escritorio " -"'Type=Link'" +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" +msgstr "Mostrar o cursor de texto" -#: ../src/eggdesktopfile.c:1392 +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" +msgstr "Mostrar o cursor de texto ou o cursor para unha navegación accesíbel" + +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "Modo editor" + +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "Activar as características útiles para editores" + +#: ../libyelp/yelp-transform.c:171 +msgid "XSLT Stylesheet" +msgstr "Folla de estilo XSLT" + +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "A localización da folla de estilos XSLT" + +#: ../libyelp/yelp-transform.c:379 ../libyelp/yelp-transform.c:394 #, c-format -msgid "Not a launchable item" -msgstr "Non é un ítem lanzábel" +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." +msgstr "Falta a folla de estilo XSLT «%s» ou ben non é válida." -#: ../src/eggsmclient.c:225 -msgid "Disable connection to session manager" -msgstr "Desactivar a conexión ao xestor de sesións" +#: ../libyelp/yelp-transform.c:528 +msgid "No href attribute found on yelp:document\n" +msgstr "Non se localizou o atributo href en yelp:document\n" -#: ../src/eggsmclient.c:228 -msgid "Specify file containing saved configuration" -msgstr "Especificar o ficheiro que contén a configuración gardada" +#: ../libyelp/yelp-transform.c:543 +msgid "Out of memory" +msgstr "Sen memoria" -#: ../src/eggsmclient.c:228 -msgid "FILE" -msgstr "FICHEIRO" +#: ../libyelp/yelp-view.c:111 +msgid "_Print..." +msgstr "_Imprimir..." -#: ../src/eggsmclient.c:231 -msgid "Specify session management ID" -msgstr "Especificar o ID do xestor de sesións" +#: ../libyelp/yelp-view.c:116 +msgid "_Back" +msgstr "_Atrás" -#: ../src/eggsmclient.c:231 -msgid "ID" -msgstr "ID" +#: ../libyelp/yelp-view.c:121 +msgid "_Forward" +msgstr "_Adiante" -#: ../src/eggsmclient.c:252 -msgid "Session management options:" -msgstr "Opcións de xestión de sesión:" +#: ../libyelp/yelp-view.c:126 +msgid "_Previous Page" +msgstr "Páxina _anterior" -#: ../src/eggsmclient.c:253 -msgid "Show session management options" -msgstr "Mostrar as opcións da xestión de sesión" +#: ../libyelp/yelp-view.c:131 +msgid "_Next Page" +msgstr "Páxina _seguinte" -#: ../src/yelp-bookmarks.c:148 -msgid "Open Bookmark in New Window" -msgstr "Abrir marcador nunha xanela nova" +#: ../libyelp/yelp-view.c:367 +msgid "Yelp URI" +msgstr "URI do Yelp" -#: ../src/yelp-bookmarks.c:152 -msgid "Rename Bookmark" -msgstr "Renomear marcador" +#: ../libyelp/yelp-view.c:368 +msgid "A YelpUri with the current location" +msgstr "Unha YelpURI coa localización actual" -#: ../src/yelp-bookmarks.c:156 -msgid "Remove Bookmark" -msgstr "Eliminar marcador" +#: ../libyelp/yelp-view.c:376 +msgid "Loading State" +msgstr "Estado da carga" -#: ../src/yelp-bookmarks.c:314 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Xa existe un marcador titulado %s para esta páxina." +#: ../libyelp/yelp-view.c:377 +msgid "The loading state of the view" +msgstr "O estado da carga da visualización" -#: ../src/yelp-bookmarks.c:390 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "Xa existe un marcador titulado <b>%s</b> para esta páxina." - -#: ../src/yelp-bookmarks.c:403 -msgid "Help Topics" -msgstr "Temas de axuda" - -#: ../src/yelp-bookmarks.c:418 -msgid "Document Sections" -msgstr "Seccións do documento" - -#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:280 ../src/yelp-man.c:292 -#: ../src/yelp-man.c:385 ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 -msgid "Page not found" -msgstr "Non se encontrou a páxina" - -#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-mallard.c:281 ../src/yelp-man.c:293 -#, c-format -msgid "The page %s was not found in the document %s." -msgstr "Non se encontrou a páxina %s no documento %s." +#: ../libyelp/yelp-view.c:386 +msgid "Page ID" +msgstr "ID da páxina" -#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 -#: ../src/yelp-man.c:386 -#, c-format -msgid "The requested page was not found in the document %s." -msgstr "A páxina solicitada non se encontrou no documento %s." +#: ../libyelp/yelp-view.c:387 +msgid "The ID of the root page of the page being viewed" +msgstr "O ID da páxina raíz da páxina que está vendo" -#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 -#: ../src/yelp-man.c:429 -msgid "File not found" -msgstr "Non se encontrou o ficheiro" +#: ../libyelp/yelp-view.c:395 +msgid "Root Title" +msgstr "Título raíz" -#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 -#: ../src/yelp-man.c:430 -#, c-format -msgid "The file ‘%s’ does not exist." -msgstr "O ficheiro ‘%s’ non existe." +#: ../libyelp/yelp-view.c:396 +msgid "The title of the root page of the page being viewed" +msgstr "O título da páxina raíz da páxina que se está vendo" -#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 -#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 -msgid "Could not parse file" -msgstr "Non foi posíbel analizar o ficheiro" +#: ../libyelp/yelp-view.c:404 +msgid "Page Title" +msgstr "Título de páxina" -#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +#: ../libyelp/yelp-view.c:405 +msgid "The title of the page being viewed" +msgstr "O título da páxina que está vendo" + +#: ../libyelp/yelp-view.c:413 +msgid "Page Description" +msgstr "Descrición da páxina" + +#: ../libyelp/yelp-view.c:414 +msgid "The description of the page being viewed" +msgstr "A descrición da páxina que está vendo" + +#: ../libyelp/yelp-view.c:422 +msgid "Page Icon" +msgstr "Icona da páxina" + +#: ../libyelp/yelp-view.c:423 +msgid "The icon of the page being viewed" +msgstr "A icona da páxina que está vendo" + +#: ../libyelp/yelp-view.c:733 +msgid "Save Image" +msgstr "Gardar a imaxe" + +#: ../libyelp/yelp-view.c:815 +msgid "_Open Link" +msgstr "_Abrir a ligazón" + +#: ../libyelp/yelp-view.c:820 +msgid "Open Link in New _Window" +msgstr "Abrir ligazón nunha xanela _nova" + +#: ../libyelp/yelp-view.c:849 +msgid "_Save Image As..." +msgstr "_Gardar imaxe como..." + +#: ../libyelp/yelp-view.c:855 +msgid "S_end Image To..." +msgstr "G_ardar imaxe en..." + +#: ../libyelp/yelp-view.c:866 +msgid "_Copy Text" +msgstr "_Copiar texto" + +#: ../libyelp/yelp-view.c:1037 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed XML " -"document." -msgstr "" -"Non foi posíbel analizar o ficheiro ‘%s’ porque non é un documento HTML ben " -"formado." +msgid "Could not load a document for ‘%s’" +msgstr "Non foi posíbel cargar un documento para «%s»" -#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +#: ../libyelp/yelp-view.c:1043 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because one or more of its included files " -"is not a well-formed XML document." -msgstr "" -"Non foi posíbel o ficheiro ‘%s’ porque non é un documento XML ben formado." +msgid "Could not load a document" +msgstr "Non foi posíbel cargar un documento" -#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 -msgid "Unknown" -msgstr "Descoñecido" +#: ../libyelp/yelp-view.c:1110 +msgid "Not Found" +msgstr "Non se encontrou" + +#: ../libyelp/yelp-view.c:1113 +msgid "Cannot Read" +msgstr "Non é posíbel ler" -#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 +#: ../libyelp/yelp-view.c:1119 msgid "Unknown Error" msgstr "Erro descoñecido" -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1710 -msgid "Could Not Read File" -msgstr "Non foi posíbel ler o ficheiro" - -#: ../src/yelp-error.c:146 -msgid "No information is available about this error." -msgstr "Non hai información dispoñíbel sobre este erro." - -#: ../src/yelp-info.c:396 +#: ../libyelp/yelp-view.c:1210 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "" -"Non foi posíbel analizar o ficheiro ‘%s’ porque non é unha páxina de " -"información ben elaborada." +msgid "The URI ‘%s’ does point to a valid page." +msgstr "O URI «%s» non apunta a unha páxina válida." -#: ../src/yelp-io-channel.c:132 +#: ../libyelp/yelp-view.c:1218 #, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." -msgstr "" -"Non foi posíbel ler nin descodificar o ficheiro '%s'. O ficheiro pode estar " -"comprimido nun formato non soportado." +msgid "The URI ‘%s’ could not be parsed." +msgstr "Non foi posíbel analizar o URI «%s»." -#: ../src/yelp-main.c:88 -msgid "Use a private session" -msgstr "Usar unha sesión privada" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "Activar o modo editor" -#: ../src/yelp-main.c:97 -msgid "Define which cache directory to use" -msgstr "Definir o directorio da caché que se vai usar" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "Texto máis _grande" -#. Commandline parsing is done here -#: ../src/yelp-main.c:355 -msgid " GNOME Help Browser" -msgstr " Navegador de axuda do Gnome" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "Aumentar o tamaño do texto" -#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Axuda" +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "Texto máis peque_no" -#: ../src/yelp-mallard.c:311 -msgid "Directory not found" -msgstr "Non se encontrou o cartafol" +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "Reducir o tamaño do texto" -#: ../src/yelp-mallard.c:312 -#, c-format -msgid "The directory ‘%s’ does not exist." -msgstr "O cartafol ‘%s’ non existe." +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "Mostrar o _cursor de texto" -#: ../src/yelp-man.c:459 -#, c-format +#: ../src/yelp-application.c:297 ../src/yelp-window.c:1523 +#: ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Axuda" + +#: ../src/yelp-application.c:563 msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed man page." +"You do not have PackageKit installed. Package installation links require " +"PackageKit." msgstr "" -"Non foi posíbel analizar o ficheiro ‘%s’ porque non é unha páxina de manual " -"ben formada." +"Non ten PackageKit instalado. As ligazóns de instalación do paquete requiren " +"PackageKit." -#: ../src/yelp-print.c:97 -msgid "Print" -msgstr "Imprimir" +#: ../src/yelp-window.c:255 +msgid "_Page" +msgstr "_Páxina" + +#: ../src/yelp-window.c:256 +msgid "_View" +msgstr "_Ver" + +#: ../src/yelp-window.c:257 +msgid "_Go" +msgstr "_Ir" -#: ../src/yelp-print.c:167 -msgid "Preparing to print" -msgstr "Preparándose para imprimir" +#: ../src/yelp-window.c:258 +msgid "_Bookmarks" +msgstr "_Marcadores" -#: ../src/yelp-print.c:261 -msgid "Printing is not supported on this printer" -msgstr "A impresión non se permite nesta impresora" +#: ../src/yelp-window.c:261 +msgid "_New Window" +msgstr "Xanela _nova" -#: ../src/yelp-print.c:264 -#, c-format -msgid "Printer %s does not support postscript printing." -msgstr "A impresora %s non permite a impresión postscript." +#: ../src/yelp-window.c:266 +msgid "_Close" +msgstr "_Pechar" -#: ../src/yelp-print.c:366 -msgid "Waiting to print" -msgstr "Esperando para imprimir" +#: ../src/yelp-window.c:271 +msgid "_Add Bookmark" +msgstr "_Engadir marcador" -#: ../src/yelp-print.c:578 -msgid "An error occurred while printing" -msgstr "Ocorreu un erro ao imprimir" +#: ../src/yelp-window.c:276 +msgid "Find in Page..." +msgstr "Buscar na páxina…" -#: ../src/yelp-print.c:582 -#, c-format -msgid "It was not possible to print your document: %s" -msgstr "Non foi posíbel imprimir o documento: %s" +#: ../src/yelp-window.c:281 ../src/yelp-window.c:498 +msgid "Search..." +msgstr "Buscar..." -#: ../src/yelp-search-parser.c:67 -msgid "the GNOME Support Forums" -msgstr "os foros de asistencia do Gnome" +#: ../src/yelp-window.c:286 +msgid "Open Location" +msgstr "Abrir localización" -#: ../src/yelp-search-parser.c:285 -#, c-format -msgid "No results for \"%s\"" -msgstr "Non hai resultados para \"%s\"" +#: ../src/yelp-window.c:313 +msgid "Application" +msgstr "Aplicativos" -#: ../src/yelp-search-parser.c:286 -msgid "" -"Try using different words to describe the problem you're having or the topic " -"you want help with." -msgstr "" -"Tente usar palabras diferentes para describir o problema que ten ou o tema " -"sobre o que quere axuda." +#: ../src/yelp-window.c:314 +msgid "A YelpApplication instance that controls this window" +msgstr "Unha instancia de YelpApplications que controla esta xanela" -#: ../src/yelp-search-parser.c:289 +#: ../src/yelp-window.c:1141 #, c-format -msgid "Search results for \"%s\"" -msgstr "Buscar resultados para \"%s\"" - -#. TRANSLATORS: Please don't do anything funny with the -#. * format arguement. It isn't really going through a printf -#. * The %s is used to indicate where the name of the site (linked) -#. * should be. This is done in the XSLT -#. -#: ../src/yelp-search-parser.c:303 -#, c-format -msgid "Repeat the search online at %s" -msgstr "Repetir a busca en liña en %s" - -#. Translators: Do not translate this list exactly. These are -#. * colon-separated words that aren't useful for choosing search -#. * results; they will be different for each language. Include -#. * pronouns, articles, very common verbs and prepositions, -#. * words from question structures like "tell me about" and -#. * "how do I", and words for functional states like "not", -#. * "work", and "broken". -#. -#: ../src/yelp-search-parser.c:874 -msgid "" -"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" -"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" -"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" -"where:who:will:with:won't:wont:why:work:working:works" -msgstr "" -"a:o:as:os:ao:á:como:con:contra:da:do:das:dos:de:desde:é:en:entre:fai:hai:" -"houbo:no:na:nos:nas:non:para:por:que:segundo:se:sen:sobre:son:agás:ante: " -"após:malia:mediante:menos:onda:para:perante:por:salvo:segundo:sen:senón: " -"menos:onda:para:perante:sacado:sacando:quitando:salvante:sen:senón:so: sobre:" -"tras:xunta:que:conforme:ca:coma:apenas:asemade:cando:mal:mentres: onde:logo:" -"cando:entón:se:así:nin:mais:e" - -#. Translators: This is a list of common prefixes for words. -#. * Do not translate this directly. Instead, use a colon -#. * seperated list of word-starts. In English, an example -#. * is re-. If there is none, please use the term NULL -#. * If there is only one, please put a colon after. -#. * E.g. if the common prefix is re then the string would be -#. * "re:" -#. -#: ../src/yelp-search-parser.c:890 -msgid "re" -msgstr "auto:re:des" - -#. Translators: This is a list of (guess what?) common suffixes -#. * to words. Things that may be put at ends of words to slightly -#. * alter their meaning (like -ing and -s in English). This is a -#. * colon seperated list (I like colons). If there are none, -#. * please use the string NULL. If there is only 1, please -#. * add a colon at the end of the list -#. -#: ../src/yelp-search-parser.c:899 -msgid "ers:er:ing:es:s:'s" -msgstr "ando:mente:ble:ción:dade" - -#: ../src/yelp-search-parser.c:1095 -msgid "No Comment" -msgstr "Non hai comentarios" - -#. Much bigger problems -#: ../src/yelp-search.c:238 -msgid "Search could not be processed" -msgstr "Non foi posíbel procesar a busca" - -#: ../src/yelp-search.c:239 -msgid "The requested search could not be processed." -msgstr "Non foi posíbel procesar a busca solicitada." - -#: ../src/yelp-search.c:366 -msgid "Cannot process the search" -msgstr "Non é posíbel procesar a busca" - -#: ../src/yelp-search.c:367 -msgid "The search processor returned invalid results" -msgstr "O procesador da busca devolveu resultados non válidos" - -#: ../src/yelp-toc.c:267 -#, c-format -msgid "The page %s was not found in the TOC." -msgstr "Non se encontrou a páxina %s no TOC." +msgid "%i match" +msgid_plural "%i matches" +msgstr[0] "%i coincidencia" +msgstr[1] "%i coincidencias" -#: ../src/yelp-toc.c:366 -msgid "The requested page was not found in the TOC." -msgstr "Non se encontrou a páxina solicitada no TOC." +#: ../src/yelp-window.c:1166 +msgid "No matches" +msgstr "Sen coincidencias" -#: ../src/yelp-toc.c:438 -msgid "" -"The TOC file could not be parsed because it is not a well-formed XML " -"document." -msgstr "Non se puido analizar o TOC porque non é un documento XML ben formado." +#: ../src/yelp-window.c:1483 +msgid "Loading" +msgstr "Cargando" -#: ../src/yelp-transform.c:86 -msgid "Invalid Stylesheet" -msgstr "A folla de cálculo non válida" +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "Obter axuda co Gnome" -#: ../src/yelp-transform.c:87 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "Falta a folla de cálculo XSLT ‘%s’ ou ben non é válida." +#~ msgid "" +#~ "The file ‘%s’ could not be read and decoded. The file may be compressed " +#~ "in an unsupported format." +#~ msgstr "" +#~ "Non foi posíbel ler nin descodificar o ficheiro '%s'. O ficheiro pode " +#~ "estar comprimido nun formato non soportado." -#: ../src/yelp-transform.c:122 -msgid "Broken Transformation" -msgstr "Transformación rota" +#~ msgid "Search" +#~ msgstr "Buscar" -#: ../src/yelp-transform.c:123 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "Encontrouse un erro descoñecido ao tentar transformar o documento." +#~ msgid "File is not a valid .desktop file" +#~ msgstr "O ficheiro non é un ficheiro .desktop válido" -#: ../src/yelp-transform.c:389 -msgid "No href attribute found on yelp:document\n" -msgstr "Non se localizou o atributo href en yelp:document\n" +#~ msgid "Unrecognized desktop file Version '%s'" +#~ msgstr "Non se recoñece a versión '%s' do ficheiro de escritorio" -#: ../src/yelp-transform.c:404 -msgid "Out of memory" -msgstr "Sen memoria" +#~ msgid "Starting %s" +#~ msgstr "Iniciando %s" -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "_Ficheiro" +#~ msgid "Application does not accept documents on command line" +#~ msgstr "O aplicativo non acepta documentos na liña de ordes" -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "_Editar" +#~ msgid "Unrecognized launch option: %d" +#~ msgstr "Opción de lanzamento descoñecida: %d" -#: ../src/yelp-window.c:306 -msgid "_Go" -msgstr "_Ir" +#~ msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +#~ msgstr "" +#~ "Non se lle pode pasar os URI do documento a unha entrada de escritorio " +#~ "'Type=Link'" -#: ../src/yelp-window.c:307 -msgid "_Bookmarks" -msgstr "_Marcadores" +#~ msgid "Not a launchable item" +#~ msgstr "Non é un ítem lanzábel" -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "_Axuda" +#~ msgid "Disable connection to session manager" +#~ msgstr "Desactivar a conexión ao xestor de sesións" -#: ../src/yelp-window.c:311 -msgid "_New Window" -msgstr "Xanela _nova" +#~ msgid "Specify file containing saved configuration" +#~ msgstr "Especificar o ficheiro que contén a configuración gardada" -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "Imprimir este documento…" +#~ msgid "FILE" +#~ msgstr "FICHEIRO" -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "Imprimir esta páxina…" +#~ msgid "Specify session management ID" +#~ msgstr "Especificar o ID do xestor de sesións" -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "Sobre este documento" +#~ msgid "ID" +#~ msgstr "ID" -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "Abrir _localización" +#~ msgid "Session management options:" +#~ msgstr "Opcións de xestión de sesión:" -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "_Pechar a xanela" +#~ msgid "Show session management options" +#~ msgstr "Mostrar as opcións da xestión de sesión" -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "_Copiar" +#~ msgid "Page not found" +#~ msgstr "Non se encontrou a páxina" -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "_Seleccionar todo" +#~ msgid "The page %s was not found in the document %s." +#~ msgstr "Non se encontrou a páxina %s no documento %s." -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "_Buscar..." +#~ msgid "The requested page was not found in the document %s." +#~ msgstr "A páxina solicitada non se encontrou no documento %s." -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "Buscar an_terior" +#~ msgid "File not found" +#~ msgstr "Non se encontrou o ficheiro" -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "Buscar a anterior ocorrencia da palabra ou frase" +#~ msgid "Could not parse file" +#~ msgstr "Non foi posíbel analizar o ficheiro" -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "_Buscar seguinte" +#~ msgid "Could Not Read File" +#~ msgstr "Non foi posíbel ler o ficheiro" -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "Busca a seguinte ocorrencia da palabra ou frase" +#~ msgid "No information is available about this error." +#~ msgstr "Non hai información dispoñíbel sobre este erro." -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "_Preferencias" +#~ msgid "Use a private session" +#~ msgstr "Usar unha sesión privada" -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "_Recargar" +#~ msgid "Define which cache directory to use" +#~ msgstr "Definir o directorio da caché que se vai usar" -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "_Atrás" +#~ msgid " GNOME Help Browser" +#~ msgstr " Navegador de axuda do Gnome" -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "Mostrar a páxina anterior no historial" +#~ msgid "" +#~ "The file ‘%s’ could not be parsed because it is not a well-formed man " +#~ "page." +#~ msgstr "" +#~ "Non foi posíbel analizar o ficheiro ‘%s’ porque non é unha páxina de " +#~ "manual ben formada." -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "_Adiante" +#~ msgid "Preparing to print" +#~ msgstr "Preparándose para imprimir" -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "Mostrar a páxina seguinte no historial" +#~ msgid "Printing is not supported on this printer" +#~ msgstr "A impresión non se permite nesta impresora" -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "_Temas de axuda" +#~ msgid "Printer %s does not support postscript printing." +#~ msgstr "A impresora %s non permite a impresión postscript." -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "Ir á lista de temas de axuda" +#~ msgid "Waiting to print" +#~ msgstr "Esperando para imprimir" -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "Sección _anterior" +#~ msgid "An error occurred while printing" +#~ msgstr "Ocorreu un erro ao imprimir" -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "Sección _seguinte" +#~ msgid "It was not possible to print your document: %s" +#~ msgstr "Non foi posíbel imprimir o documento: %s" -#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "_Contidos" +#~ msgid "the GNOME Support Forums" +#~ msgstr "os foros de asistencia do Gnome" -#: ../src/yelp-window.c:416 -msgid "_Add Bookmark" -msgstr "_Engadir marcador" +#~ msgid "No results for \"%s\"" +#~ msgstr "Non hai resultados para \"%s\"" -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "_Editar marcadores..." +#~ msgid "" +#~ "Try using different words to describe the problem you're having or the " +#~ "topic you want help with." +#~ msgstr "" +#~ "Tente usar palabras diferentes para describir o problema que ten ou o " +#~ "tema sobre o que quere axuda." -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "_Abrir a ligazón" +#~ msgid "Search results for \"%s\"" +#~ msgstr "Buscar resultados para \"%s\"" -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "Abrir unha ligazón nunha xanela _nova" +#~ msgid "Repeat the search online at %s" +#~ msgstr "Repetir a busca en liña en %s" -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "_Copiar o enderezo da ligazón" +#~ msgid "" +#~ "a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:" +#~ "doesn't:doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:" +#~ "when:has:have:help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:" +#~ "this:to:what:where:who:will:with:won't:wont:why:work:working:works" +#~ msgstr "" +#~ "a:o:as:os:ao:á:como:con:contra:da:do:das:dos:de:desde:é:en:entre:fai:hai:" +#~ "houbo:no:na:nos:nas:non:para:por:que:segundo:se:sen:sobre:son:agás:ante: " +#~ "após:malia:mediante:menos:onda:para:perante:por:salvo:segundo:sen:senón: " +#~ "menos:onda:para:perante:sacado:sacando:quitando:salvante:sen:senón:so: " +#~ "sobre:tras:xunta:que:conforme:ca:coma:apenas:asemade:cando:mal:mentres: " +#~ "onde:logo:cando:entón:se:así:nin:mais:e" -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "Axuda sobre este aplicativo" +#~ msgid "re" +#~ msgstr "auto:re:des" -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "_Sobre" +#~ msgid "ers:er:ing:es:s:'s" +#~ msgstr "ando:mente:ble:ción:dade" -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "Copiar o enderezo de _correo" +#~ msgid "No Comment" +#~ msgstr "Non hai comentarios" -#: ../src/yelp-window.c:524 -msgid "Help Browser" -msgstr "Navegador da axuda" +#~ msgid "Search could not be processed" +#~ msgstr "Non foi posíbel procesar a busca" -#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1772 -msgid "Loading..." -msgstr "Cargando..." +#~ msgid "The requested search could not be processed." +#~ msgstr "Non foi posíbel procesar a busca solicitada." -#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 -msgid "Unknown Page" -msgstr "Páxina descoñecida" +#~ msgid "Cannot process the search" +#~ msgstr "Non é posíbel procesar a busca" -#: ../src/yelp-window.c:1042 ../src/yelp-window.c:1104 -#: ../src/yelp-window.c:1113 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "O URI \"%s\" solicitado non é válido" +#~ msgid "The search processor returned invalid results" +#~ msgstr "O procesador da busca devolveu resultados non válidos" -#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1106 -#: ../src/yelp-window.c:1114 -msgid "Unable to load page" -msgstr "Non é posíbel cargar a páxina" +#~ msgid "The page %s was not found in the TOC." +#~ msgstr "Non se encontrou a páxina %s no TOC." -#: ../src/yelp-window.c:1330 -msgid "_Search:" -msgstr "_Buscar:" +#~ msgid "The requested page was not found in the TOC." +#~ msgstr "Non se encontrou a páxina solicitada no TOC." -#: ../src/yelp-window.c:1331 -msgid "Search for other documentation" -msgstr "Buscar outra documentación" +#~ msgid "" +#~ "The TOC file could not be parsed because it is not a well-formed XML " +#~ "document." +#~ msgstr "" +#~ "Non se puido analizar o TOC porque non é un documento XML ben formado." -#: ../src/yelp-window.c:1351 -msgid "Cannot create window" -msgstr "Non é posíbel crear a xanela" +#~ msgid "Bookmarks" +#~ msgstr "Marcadores" -#: ../src/yelp-window.c:1357 -msgid "Cannot create search component" -msgstr "Non é posíbel crear o compoñente de busca" +#~ msgid "Re_name" +#~ msgstr "Re_nomear" -#: ../src/yelp-window.c:1529 -msgid "Fin_d:" -msgstr "Lo_calizar:" +#~ msgid "_Bookmarks:" +#~ msgstr "_Marcadores:" -#: ../src/yelp-window.c:1551 -msgid "Find _Previous" -msgstr "Buscar _anterior" +#~ msgid "Add Bookmark" +#~ msgstr "Engadir un marcador" -#: ../src/yelp-window.c:1563 -msgid "Find _Next" -msgstr "Buscar _seguinte" +#~ msgid "_Title:" +#~ msgstr "_Título:" -#: ../src/yelp-window.c:1576 -msgid "Phrase not found" -msgstr "Non se encontrou a frase" +#~ msgid "_Location:" +#~ msgstr "_Localización:" -#: ../src/yelp-window.c:1707 -#, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "" -"Non foi posíbel ler o ficheiro '%s'. Pode que falte este ficheiro ou que non " -"teña permiso para lelo." +#~ msgid "Fonts" +#~ msgstr "Tipos de letra" -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2577 -msgid "translator-credits" -msgstr "" -"Suso Baleato <suso.baleato@xunta.es>, 2009;\n" -"Antón Méixome <meixome@mancomun.org>, 2009." +#~ msgid "Preferences" +#~ msgstr "Preferencias" -#: ../src/yelp-window.c:2580 -msgid "Yelp" -msgstr "Yelp" +#~ msgid "_Browse with caret" +#~ msgstr "_Navegar con cursor" -#: ../src/yelp-window.c:2582 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "Un navegador e visualizador de documentación para o escritorio Gnome." +#~ msgid "_Fixed width:" +#~ msgstr "Largura _fixa:" -#: ../yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "Obter axuda co Gnome" +#~ msgid "_Use system fonts" +#~ msgstr "_Usar os tipos de letra do sistema" + +#~ msgid "_Variable width:" +#~ msgstr "Largura _variábel:" + +#~ msgid "Font for fixed text" +#~ msgstr "Tipo de letra para o texto fixo" + +#~ msgid "Font for text" +#~ msgstr "Tipo de letra para o texto" + +#~ msgid "Font for text with fixed width." +#~ msgstr "Tipo de letra para o texto de largura fixa." + +#~ msgid "Font for text with variable width." +#~ msgstr "Tipo de letra para o texto de largura variábel." + +#~ msgid "Use a keyboard-controllable caret when viewing pages." +#~ msgstr "Usar un cursor controlábel polo teclado ao ver as páxinas." + +#~ msgid "Use caret" +#~ msgstr "Usar cursor" + +#~ msgid "Use system fonts" +#~ msgstr "Usar tipos de letra do sistema" + +#~ msgid "Use the default fonts set for the system." +#~ msgstr "Usar o conxunto de tipos de letra predeterminado do sistema." + +#~ msgid "Open Bookmark in New Window" +#~ msgstr "Abrir marcador nunha xanela nova" + +#~ msgid "Rename Bookmark" +#~ msgstr "Renomear marcador" + +#~ msgid "Remove Bookmark" +#~ msgstr "Eliminar marcador" + +#~ msgid "A bookmark titled %s already exists for this page." +#~ msgstr "Xa existe un marcador titulado %s para esta páxina." + +#~ msgid "A bookmark titled <b>%s</b> already exists for this page." +#~ msgstr "Xa existe un marcador titulado <b>%s</b> para esta páxina." + +#~ msgid "Help Topics" +#~ msgstr "Temas de axuda" + +#~ msgid "Document Sections" +#~ msgstr "Seccións do documento" + +#~ msgid "Directory not found" +#~ msgstr "Non se encontrou o cartafol" + +#~ msgid "Broken Transformation" +#~ msgstr "Transformación rota" + +#~ msgid "" +#~ "An unknown error occurred while attempting to transform the document." +#~ msgstr "Encontrouse un erro descoñecido ao tentar transformar o documento." + +#~ msgid "_File" +#~ msgstr "_Ficheiro" + +#~ msgid "_Edit" +#~ msgstr "_Editar" + +#~ msgid "_Help" +#~ msgstr "_Axuda" + +#~ msgid "Print This Document ..." +#~ msgstr "Imprimir este documento…" + +#~ msgid "About This Document" +#~ msgstr "Sobre este documento" + +#~ msgid "Open _Location" +#~ msgstr "Abrir _localización" + +#~ msgid "_Close Window" +#~ msgstr "_Pechar a xanela" + +#~ msgid "_Select All" +#~ msgstr "_Seleccionar todo" + +#~ msgid "_Find..." +#~ msgstr "_Buscar..." + +#~ msgid "Find Pre_vious" +#~ msgstr "Buscar an_terior" + +#~ msgid "Find previous occurrence of the word or phrase" +#~ msgstr "Buscar a anterior ocorrencia da palabra ou frase" + +#~ msgid "Find Ne_xt" +#~ msgstr "_Buscar seguinte" + +#~ msgid "Find next occurrence of the word or phrase" +#~ msgstr "Busca a seguinte ocorrencia da palabra ou frase" + +#~ msgid "_Preferences" +#~ msgstr "_Preferencias" + +#~ msgid "_Reload" +#~ msgstr "_Recargar" + +#~ msgid "Show previous page in history" +#~ msgstr "Mostrar a páxina anterior no historial" + +#~ msgid "Show next page in history" +#~ msgstr "Mostrar a páxina seguinte no historial" + +#~ msgid "_Help Topics" +#~ msgstr "_Temas de axuda" + +#~ msgid "Go to the listing of help topics" +#~ msgstr "Ir á lista de temas de axuda" + +#~ msgid "_Contents" +#~ msgstr "_Contidos" + +#~ msgid "_Edit Bookmarks..." +#~ msgstr "_Editar marcadores..." + +#~ msgid "_Copy Link Address" +#~ msgstr "_Copiar o enderezo da ligazón" + +#~ msgid "Help On this application" +#~ msgstr "Axuda sobre este aplicativo" + +#~ msgid "_About" +#~ msgstr "_Sobre" + +#~ msgid "Copy _Email Address" +#~ msgstr "Copiar o enderezo de _correo" + +#~ msgid "Help Browser" +#~ msgstr "Navegador da axuda" + +#~ msgid "Unknown Page" +#~ msgstr "Páxina descoñecida" + +#~ msgid "The requested URI \"%s\" is invalid" +#~ msgstr "O URI \"%s\" solicitado non é válido" + +#~ msgid "Unable to load page" +#~ msgstr "Non é posíbel cargar a páxina" + +#~ msgid "Search for other documentation" +#~ msgstr "Buscar outra documentación" + +#~ msgid "Cannot create search component" +#~ msgstr "Non é posíbel crear o compoñente de busca" + +#~ msgid "Fin_d:" +#~ msgstr "Lo_calizar:" + +#~ msgid "Find _Previous" +#~ msgstr "Buscar _anterior" + +#~ msgid "Find _Next" +#~ msgstr "Buscar _seguinte" + +#~ msgid "Phrase not found" +#~ msgstr "Non se encontrou a frase" + +#~ msgid "" +#~ "The file ‘%s’ could not be read. This file might be missing, or you " +#~ "might not have permissions to read it." +#~ msgstr "" +#~ "Non foi posíbel ler o ficheiro '%s'. Pode que falte este ficheiro ou que " +#~ "non teña permiso para lelo." + +#~ msgid "translator-credits" +#~ msgstr "" +#~ "Suso Baleato <suso.baleato@xunta.es>, 2009;\n" +#~ "Antón Méixome <meixome@mancomun.org>, 2009." + +#~ msgid "A documentation browser and viewer for the Gnome Desktop." +#~ msgstr "" +#~ "Un navegador e visualizador de documentación para o escritorio Gnome." @@ -1,23 +1,26 @@ -# Indonesia translation of yelp. +# Indonesian translation of yelp. # Copyright (C) 2004 THE yelp's COPYRIGHT HOLDER # This file is distributed under the same license as the yelp package. # Mohammad DAMT <mdamt@bisnisweb.com>, 2004. # Ahmad Riza H Nst <ari@160c.afraid.org>, 2005. -# -# +# +# msgid "" msgstr "" -"Project-Id-Version: yelp HEAD\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-08-04 10:56+0700\n" -"PO-Revision-Date: 2006-08-04 10:56+0700\n" -"Last-Translator: Ahmad Riza H Nst <ari@160c.afraid.org>\n" -"Language-Team: Indonesia <kontak@id.gnome.org>\n" +"Project-Id-Version: yelp master\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=yelp&component=general\n" +"POT-Creation-Date: 2010-05-07 04:21+0000\n" +"PO-Revision-Date: 2010-05-07 21:20+0700\n" +"Last-Translator: Andika Triwidada <andika@gmail.com>\n" +"Language-Team: GNOME Indonesian Translation Team <gnome@i15n.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Indonesian\n" +"X-Poedit-Country: Indonesia\n" +"Plural-Forms: nplurals=1; plural=0;\n" -#: ../data/info.xml.in.h:1 ../src/yelp-toc-pager.c:1838 +#: ../data/info.xml.in.h:1 msgid "GNU Info Pages" msgstr "Halaman Info GNU" @@ -42,6 +45,7 @@ msgid "Curses Functions" msgstr "Fungsi Curses" #: ../data/man.xml.in.h:5 +#: ../data/toc.xml.in.h:35 msgid "Development" msgstr "Pembangunan" @@ -49,7 +53,8 @@ msgstr "Pembangunan" msgid "FORTRAN Functions" msgstr "Fungsi FORTRAN" -#: ../data/man.xml.in.h:7 ../data/toc.xml.in.h:15 +#: ../data/man.xml.in.h:7 +#: ../data/toc.xml.in.h:56 msgid "Games" msgstr "Permainan" @@ -61,7 +66,7 @@ msgstr "Perangkat Keras" msgid "Kernel Routines" msgstr "Rutin Kernel" -#: ../data/man.xml.in.h:10 ../src/yelp-toc-pager.c:1832 +#: ../data/man.xml.in.h:10 msgid "Manual Pages" msgstr "Berkas Manual" @@ -282,1198 +287,946 @@ msgid "X11 Overviews" msgstr "Ringkasan X11" #: ../data/toc.xml.in.h:1 -msgid "Accessibility" -msgstr "Kemudahan Akses" +msgid "2D Graphics" +msgstr "Grafis 2D" #: ../data/toc.xml.in.h:2 -msgid "Accessories" -msgstr "Aksesoris" +msgid "3D Graphics" +msgstr "Grafis 3D" #: ../data/toc.xml.in.h:3 -msgid "Applications for fun" -msgstr "Aplikasi untuk gembira" +msgid "Accessibility" +msgstr "Kemudahan Akses" #: ../data/toc.xml.in.h:4 -msgid "Applications for manipulating or viewing graphics" -msgstr "Aplikasi untuk memanipulasi atau menampilkan grafis" +msgid "Action Games" +msgstr "Permainan Aksi" #: ../data/toc.xml.in.h:5 -msgid "Applications for word processing and other office tasks" -msgstr "Aplikasi untuk proses kata dan tugas kantor lainnya" +msgid "Adventure Games" +msgstr "Permainan Petualangan" #: ../data/toc.xml.in.h:6 -msgid "Applications related to X Windows" -msgstr "Aplikasi yang berhubungan dengan X Windows" +msgid "Amusement" +msgstr "Hiburan" #: ../data/toc.xml.in.h:7 -msgid "Applications related to multimedia" -msgstr "Aplikasi yang berhubungan dengan multimedia" +msgid "Applications for viewing and manipulating graphics" +msgstr "Aplikasi untuk menilik atau memanipulasi grafis" #: ../data/toc.xml.in.h:8 -msgid "Applications related to software development" -msgstr "Aplikasi yang berhubungan dengan pengembangan perangkat lunak" +msgid "Applications related to audio and video" +msgstr "Aplikasi terkait audio dan video" #: ../data/toc.xml.in.h:9 -msgid "Applications related to the internet" -msgstr "Aplikasi yang berhubungan dengan internet" +msgid "Applications that teach or aid in learning" +msgstr "Aplikasi yang mengajarkan atau membantu proses belajar" #: ../data/toc.xml.in.h:10 -msgid "Applications specific to the panel" -msgstr "Aplikasi yang khusus terhadap panel" +msgid "Arcade Games" +msgstr "Permainan Arcade" #: ../data/toc.xml.in.h:11 -msgid "Applications that support assistive technologies" -msgstr "Aplikasi yang mendukung teknologi assistive" +msgid "Archiving Tools" +msgstr "Perangkat Pengarsipan" #: ../data/toc.xml.in.h:12 -msgid "Desktop" -msgstr "Desktop" +msgid "Art" +msgstr "Seni" #: ../data/toc.xml.in.h:13 -msgid "Documents specific to the KDE Desktop Environment" -msgstr "Dokumen khusus mengenai Lingkungan Desktop KDE" +msgid "Artificial Intelligence" +msgstr "Kecerdasan Buatan" #: ../data/toc.xml.in.h:14 -msgid "Education" -msgstr "Pendidikan" +msgid "Astronomy" +msgstr "Astronomi" + +#: ../data/toc.xml.in.h:15 +msgid "Biology" +msgstr "Biologi" #: ../data/toc.xml.in.h:16 -msgid "Graphics" -msgstr "Grafis" +msgid "Blocks Games" +msgstr "Permainan Blok" #: ../data/toc.xml.in.h:17 -msgid "Internet" -msgstr "Internet" +msgid "Board Games" +msgstr "Permainan Papan" #: ../data/toc.xml.in.h:18 -msgid "KDE" -msgstr "KDE" +msgid "Building" +msgstr "Membangun" #: ../data/toc.xml.in.h:19 -msgid "Learning applications" -msgstr "Aplikasi Pembelajaran" +msgid "Calculator" +msgstr "Kalkulator" #: ../data/toc.xml.in.h:20 -msgid "Miscellaneous documents" -msgstr "Dokumen lain-lain" +msgid "Calendar" +msgstr "Kalender" #: ../data/toc.xml.in.h:21 -msgid "Office" -msgstr "Kantor" +msgid "Card Games" +msgstr "Permainan Kartu" #: ../data/toc.xml.in.h:22 -msgid "Other Applications" -msgstr "Aplikasi Lainnya" +msgid "Charting Tools" +msgstr "Perkakas Diagram" #: ../data/toc.xml.in.h:23 -msgid "Other Documentation" -msgstr "Dokumen Lainnya" +msgid "Chat" +msgstr "Mengobrol" #: ../data/toc.xml.in.h:24 -msgid "Panel Applets" -msgstr "Aplet Panel" +msgid "Chemistry" +msgstr "Kimia" #: ../data/toc.xml.in.h:25 -msgid "Programming" -msgstr "Pemrograman" +msgid "Clocks" +msgstr "Jam" #: ../data/toc.xml.in.h:26 -msgid "Scientific" -msgstr "Ilmuwan" +msgid "Compression Tools" +msgstr "Perkakas Kompresi" #: ../data/toc.xml.in.h:27 -msgid "Scientific Applications." -msgstr "Aplikasi Ilmiah" +msgid "Computer Science" +msgstr "Komputer Sains" #: ../data/toc.xml.in.h:28 -msgid "Sound & Video" -msgstr "Suara $amp; Video" +msgid "Construction" +msgstr "Pembangunan" #: ../data/toc.xml.in.h:29 -msgid "System Tools" -msgstr "Alat Sistem" +msgid "Contact Management" +msgstr "Manajemen Kontak" #: ../data/toc.xml.in.h:30 -msgid "Utilities to manage your computer" -msgstr "Peralatan untuk mengelola komputer anda" +msgid "Data Visualization" +msgstr "Visualisasi Data" #: ../data/toc.xml.in.h:31 -msgid "Utility applications" -msgstr "Aplikasi Utilitas" +msgid "Databases" +msgstr "Basis Data" #: ../data/toc.xml.in.h:32 -msgid "Variety of other applications" -msgstr "Bermacam aplikasi lainnya" +msgid "Debuggers" +msgstr "Pengawa Kutu" #: ../data/toc.xml.in.h:33 -msgid "Welcome to the GNOME Help Browser" -msgstr "Selamat datang ke Perambah Bantuan GNOME" +msgid "Desktop" +msgstr "Desktop" #: ../data/toc.xml.in.h:34 -msgid "X Applications" -msgstr "Aplikasi X" - -#: ../data/ui/yelp.glade.h:1 -msgid "<b>Accessibility</b>" -msgstr "<b>Kemudahan Akses</b>" - -#: ../data/ui/yelp.glade.h:2 -msgid "<b>Fonts</b>" -msgstr "<b>Fonta</b>" +msgid "Desktop Settings" +msgstr "Tatanan Desktop" -#: ../data/ui/yelp.glade.h:3 -msgid "Add Bookmark" -msgstr "Tambah Pembatas" +#: ../data/toc.xml.in.h:36 +msgid "Dialup" +msgstr "Dialup" -#: ../data/ui/yelp.glade.h:4 -msgid "Bookmarks" -msgstr "Pembatas" +#: ../data/toc.xml.in.h:37 +msgid "Dictionaries" +msgstr "Kamus" -#: ../data/ui/yelp.glade.h:5 -msgid "C_ase sensitive" -msgstr "Bed_akan huruf besar/kecil" +#. Translators: this is a menu title for burning audio and video to dics +#: ../data/toc.xml.in.h:39 +msgid "Disc Burning" +msgstr "Membakar Cakram" -#: ../data/ui/yelp.glade.h:6 -msgid "Find" -msgstr "Cari" +#: ../data/toc.xml.in.h:40 +msgid "Economy" +msgstr "Ekonomi" -#: ../data/ui/yelp.glade.h:7 -msgid "Open Location" -msgstr "Buka Lokasi" - -#: ../data/ui/yelp.glade.h:8 -msgid "Preferences" -msgstr "Pengaturan" +#: ../data/toc.xml.in.h:41 +msgid "Education" +msgstr "Pendidikan" -#: ../data/ui/yelp.glade.h:9 -msgid "Re_name" -msgstr "Ubah _nama" +#: ../data/toc.xml.in.h:42 +msgid "Electricity" +msgstr "Kelistrikan" -#: ../data/ui/yelp.glade.h:10 -msgid "_Bookmarks:" -msgstr "Pem_batas:" +#: ../data/toc.xml.in.h:43 +msgid "Electronics" +msgstr "Elektronik" -#: ../data/ui/yelp.glade.h:11 -msgid "_Browse with caret" -msgstr "_Rambah dengan caret" +#: ../data/toc.xml.in.h:44 +msgid "Email Tools" +msgstr "Perkakas Surel" -#: ../data/ui/yelp.glade.h:12 -msgid "_Find:" -msgstr "_Temukan: " +#: ../data/toc.xml.in.h:45 +msgid "Emulator" +msgstr "Emulator" -#: ../data/ui/yelp.glade.h:13 -msgid "_Fixed width:" -msgstr "_Lebar yang pas:" +#: ../data/toc.xml.in.h:46 +msgid "Engineering" +msgstr "Rekayasa" -#: ../data/ui/yelp.glade.h:14 -msgid "_Location:" -msgstr "_Lokasi:" +#: ../data/toc.xml.in.h:47 +msgid "File Manager" +msgstr "Manajer Berkas" -#: ../data/ui/yelp.glade.h:15 -msgid "_Next" -msgstr "_Maju" +#: ../data/toc.xml.in.h:48 +msgid "File Tools" +msgstr "Perkakas Berkas" -#: ../data/ui/yelp.glade.h:16 -msgid "_Previous" -msgstr "M_undur" +#: ../data/toc.xml.in.h:49 +msgid "File Transfer" +msgstr "Transfer Berkas" -#: ../data/ui/yelp.glade.h:17 -msgid "_Title:" -msgstr "_Judul:" +#: ../data/toc.xml.in.h:50 +msgid "Filesystem" +msgstr "Sistem berkas" -#: ../data/ui/yelp.glade.h:18 -msgid "_Use system fonts" -msgstr "G_unakan jenis huruf sistem" +#: ../data/toc.xml.in.h:51 +msgid "Financial Tools" +msgstr "Perkakas Keuangan" -#: ../data/ui/yelp.glade.h:19 -msgid "_Variable width:" -msgstr "Lebar _variabel:" +#: ../data/toc.xml.in.h:52 +msgid "Flow Charting Tools" +msgstr "Perkakas Diagram Alir (Flow Chart)" -#: ../data/ui/yelp.glade.h:20 -msgid "_Wrap around" -msgstr "_Potong sekitar" +#: ../data/toc.xml.in.h:53 +msgid "GNOME Applications" +msgstr "Aplikasi GNOME" -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Fonta untuk teks pas" +#: ../data/toc.xml.in.h:54 +msgid "GTK" +msgstr "GTK" -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Jenis huruf untuk teks" +#: ../data/toc.xml.in.h:55 +msgid "GUI Designers" +msgstr "Perancang GUI" -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Jenis huruf untuk teks dengan lebar pas." +#: ../data/toc.xml.in.h:57 +msgid "Generic applications for the GNOME environment" +msgstr "Aplikasi generik bagi lingkungan GNOME" -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Jenis huruf untuk teks dengan lebar berubah." +#: ../data/toc.xml.in.h:58 +msgid "Generic applications for the KDE environment" +msgstr "Aplikasi generik bagi lingkungan KDE" -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "" -"Gunakan sebuah caret yang dapat dikendalikan oleh papan ketik ketika " -"menampilkan halaman." +#: ../data/toc.xml.in.h:59 +msgid "Geography" +msgstr "Geografi" -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Gunakan caret" +#: ../data/toc.xml.in.h:60 +msgid "Geology" +msgstr "Geologi" -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Gunakan jenis huruf sistem" +#: ../data/toc.xml.in.h:61 +msgid "Geoscience" +msgstr "Ilmu Kebumian" -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Gunakan ketetapan jenis huruf standar untuk sistem." +#: ../data/toc.xml.in.h:62 +msgid "Graphics" +msgstr "Grafis" -#: ../src/yelp-bookmarks.c:150 -msgid "Open Bookmark in New Window" -msgstr "Buka Pembatas Buku pada Jendela Baru" +#: ../data/toc.xml.in.h:63 +msgid "Guides and manuals for applications that connect to the outside world" +msgstr "Panduan dan pegangan bagi aplikasi yang menyambung ke dunia luar" -#: ../src/yelp-bookmarks.c:154 -msgid "Rename Bookmark" -msgstr "Ubah Nama Pembatas" +#: ../data/toc.xml.in.h:64 +msgid "Guides for getting involved in development" +msgstr "Panduan untuk terlibat dalam pengembangan" -#: ../src/yelp-bookmarks.c:158 -msgid "Remove Bookmark" -msgstr "Buang Pembatas" +#: ../data/toc.xml.in.h:65 +msgid "Ham Radio" +msgstr "Radio Amatir" -#: ../src/yelp-bookmarks.c:315 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Sebuah pembatas %s sudah ada untuk halaman ini." +#: ../data/toc.xml.in.h:66 +msgid "Hardware Settings" +msgstr "Tatanan Perangkat Keras" -#: ../src/yelp-bookmarks.c:392 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "Judul sebuah pembatas buku <b>%s</b> sudah ada untuk halaman ini." +#: ../data/toc.xml.in.h:67 +msgid "Have some fun" +msgstr "Ayo bermain" -#: ../src/yelp-bookmarks.c:405 -msgid "Help Topics" -msgstr "Topik Tersedia" +#: ../data/toc.xml.in.h:68 +msgid "History" +msgstr "Sejarah" -#: ../src/yelp-bookmarks.c:420 -msgid "Document Sections" -msgstr "Bagian Dokumen" +#: ../data/toc.xml.in.h:69 +msgid "IDEs" +msgstr "IDE" -#: ../src/yelp-db-pager.c:239 ../src/yelp-db-print-pager.c:190 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"not well-formed XML." -msgstr "" -"Berkas ‘%s’ tidak dapat diuraikan. Apakah berkas tidak ada atau tidak " -"berbentuk XML yang baik." +#: ../data/toc.xml.in.h:70 +msgid "IRC Clients" +msgstr "Klien IRC" -#: ../src/yelp-error.c:42 ../src/yelp-error.c:58 -msgid "An unknown error occured" -msgstr "Kesalahan yang tidak diketahui terjadi" +#: ../data/toc.xml.in.h:71 +msgid "Image Processing" +msgstr "Pengolahan Citra" -#: ../src/yelp-error.c:46 -msgid "Could not load document" -msgstr "Tidak dapat membaca dokumen" +#: ../data/toc.xml.in.h:72 +msgid "Instant Messaging" +msgstr "Pesan Instan" -#: ../src/yelp-error.c:48 -msgid "Could not load section" -msgstr "Tidak dapat membaca bagian" +#: ../data/toc.xml.in.h:73 +msgid "Internet" +msgstr "Internet" -#: ../src/yelp-error.c:50 -msgid "Could not read the table of contents" -msgstr "Tidak dapat membaca daftar isi" +#: ../data/toc.xml.in.h:74 +msgid "Java" +msgstr "Java" -#: ../src/yelp-error.c:52 -msgid "Unsupported Format" -msgstr "Bentuk yang tidak didukung" +#: ../data/toc.xml.in.h:75 +msgid "KDE Applications" +msgstr "Aplikasi KDE" -#: ../src/yelp-error.c:54 -msgid "Could not read document" -msgstr "Tidak dapat membaca dokumen" +#: ../data/toc.xml.in.h:76 +msgid "Kids Games" +msgstr "Permainan Anak" -#: ../src/yelp-error.c:56 -msgid "Could not process document" -msgstr "Tidak dapat memproses dokumen" +#: ../data/toc.xml.in.h:77 +msgid "Learn more about making your system more accessible for a range of disabilities" +msgstr "Belajar lebih jauh tentang membuat sistem Anda lebih mudah dipakai penyandang cacat" -#: ../src/yelp-error.c:66 -msgid "No information is available about the error." -msgstr "Tidak ada informasi tersedia tentang kesalahan." +#: ../data/toc.xml.in.h:78 +msgid "Licenses" +msgstr "Lisensi" -#: ../src/yelp-info-pager.c:188 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"not a well-formed info page." -msgstr "" -"Berkas ‘%s’ tidak dapat diuraikan. Apakah berkas tidak ada atau tidak " -"berbentuk halaman info yang baik." +#: ../data/toc.xml.in.h:79 +msgid "Literature" +msgstr "Literatur" -#: ../src/yelp-io-channel.c:101 -#, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." -msgstr "" -"Berkas ‘%s’ tidak dapat dibaca dan diuraikan. Berkas ini mungkin dipadatkan " -"dalam bentuk yang tidak didukung." +#: ../data/toc.xml.in.h:80 +msgid "Logic Games" +msgstr "Permainan Logika" -#: ../src/yelp-main.c:91 -msgid "Use a private session" -msgstr "Pergunakan sesi pribadi" +#: ../data/toc.xml.in.h:81 +msgid "Math" +msgstr "Matematika" -#: ../src/yelp-main.c:100 -msgid "Define which cache directory to use" -msgstr "Tentukan direktori cache yang digunakan" +#: ../data/toc.xml.in.h:82 +msgid "Medical Software" +msgstr "Perangkat Lunak Kedokteran" -#. Commandline parsing is done here -#: ../src/yelp-main.c:354 -msgid " GNOME Help Browser" -msgstr " Perambah Bantuan GNOME" +#: ../data/toc.xml.in.h:83 +msgid "Midi" +msgstr "Midi" -#: ../src/yelp-main.c:370 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Bantuan" +#: ../data/toc.xml.in.h:84 +msgid "Miscellaneous Documentation" +msgstr "Dokumentasi Lain-lain" -#: ../src/yelp-man-pager.c:263 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"formatted incorrectly." -msgstr "" -"Berkas ‘%s’ tidak dapat diuraikan. Apakah berkas tidak ada atau tidak " -"dibentuk dengan benar." +#: ../data/toc.xml.in.h:85 +msgid "Mixers" +msgstr "Pencampur" -#: ../src/yelp-pager.c:116 -msgid "Document Information" -msgstr "Informasi Dokumen" +#: ../data/toc.xml.in.h:86 +msgid "Monitor" +msgstr "Monitor" -#: ../src/yelp-pager.c:117 -msgid "The YelpDocInfo struct of the document" -msgstr "Susunan YelpDocInfo dari dokumen" +#: ../data/toc.xml.in.h:87 +msgid "Motif" +msgstr "Motif" -#: ../src/yelp-print.c:167 -msgid "Preparing to print" -msgstr "Persiapan mencetak" +#: ../data/toc.xml.in.h:88 +msgid "Music" +msgstr "Musik" -#: ../src/yelp-print.c:261 -msgid "Printing is not supported on this printer" -msgstr "Pencetakan tidak didukung pada pencetak ini." +#: ../data/toc.xml.in.h:89 +msgid "News" +msgstr "Berita" -#: ../src/yelp-print.c:264 -#, c-format -msgid "Printer %s does not support postscript printing." -msgstr "Pencetak %s tidak mendukung pencetakan postscript." +#: ../data/toc.xml.in.h:90 +msgid "Numerical Analysis" +msgstr "Analisis Numerik" -#: ../src/yelp-print.c:337 -msgid "Printing" -msgstr "Pencetakan" +#: ../data/toc.xml.in.h:91 +msgid "OCR" +msgstr "OCR" -#: ../src/yelp-print.c:364 -msgid "<b>Printing</b>" -msgstr "<b>Pencetakan</b>" +#: ../data/toc.xml.in.h:92 +msgid "Office Applications" +msgstr "Aplikasi Perkantoran" -#: ../src/yelp-print.c:366 -msgid "Waiting to print" -msgstr "Menunggu mencetak" +#: ../data/toc.xml.in.h:93 +msgid "Office applications" +msgstr "Aplikasi perkantoran" -#: ../src/yelp-print.c:578 -msgid "An error occurred while printing" -msgstr "Kesalahan terjadi ketika mencetak" +#: ../data/toc.xml.in.h:94 +msgid "Other Documentation" +msgstr "Dokumen Lainnya" -#: ../src/yelp-print.c:582 -#, c-format -msgid "It was not possible to print your document: %s" -msgstr "Tidak memungkinkan untuk mencetak dokumen anda: %s" - -#. TRANSLATORS: If you know of a forum in your own language, please -#. * change this URL to the type required for a search of the site. -#. * The %s argument is the search terms -#. -#: ../src/yelp-search-pager.c:73 -#, c-format -msgid "" -"http://gnomesupport.org/forums/search.php?search_keywords=%s&search_cat=1" -msgstr "" -"http://gnomesupport.org/forums/search.php?search_keywords=%s&search_cat=1" +#: ../data/toc.xml.in.h:95 +msgid "P2P" +msgstr "P2P" -#: ../src/yelp-search-pager.c:75 -msgid "the GNOME Support Forums" -msgstr "Forum dukungan GNOME" +#: ../data/toc.xml.in.h:96 +msgid "PDA Communication" +msgstr "Komunikasi PDA" -#: ../src/yelp-search-pager.c:710 -#, c-format -msgid "" -"Your search could not be processed. The file ‘%s’ is either missing or is " -"not a valid XSLT stylesheet." -msgstr "" -"Pencarian anda tidak dapat diproses. Berkas '%s' hilang atau bukan merupkan " -"lembar kerja XSLT yang benar." +#: ../data/toc.xml.in.h:97 +msgid "Package Manager" +msgstr "Manajer Paket" -#: ../src/yelp-search-pager.c:762 -#, c-format -msgid "No results for \"%s\"" -msgstr "Tidak ada hasil untuk \"%s\"" +#: ../data/toc.xml.in.h:98 +msgid "Parallel Computing" +msgstr "Parallel Computing" -#: ../src/yelp-search-pager.c:763 -msgid "" -"Try using different words to describe the problem you're having or the topic " -"you want help with." -msgstr "" -"Coba pergunakan kata yang berbeda untuk menjelaskan masalah yang anda miliki " -"atau topik yang anda perlu bantuannya." +#: ../data/toc.xml.in.h:99 +msgid "Photography" +msgstr "Fotografi" -#: ../src/yelp-search-pager.c:766 -#, c-format -msgid "Search results for \"%s\"" -msgstr "Hasil pencarian untuk \"%s\"" - -#. TRANSLATORS: Please don't do anything funny with the -#. * format arguement. It isn't really going through a printf -#. * The %s is used to indicate where the name of the site (linked) -#. * should be. This is done in the XSLT -#. -#: ../src/yelp-search-pager.c:783 -#, c-format -msgid "Repeat the search online at %s" -msgstr "Ulangi pencarian online pada %s" +#: ../data/toc.xml.in.h:100 +msgid "Physics" +msgstr "Fisika" -#: ../src/yelp-search-pager.c:855 ../src/yelp-toc-pager.c:2133 -#: ../src/yelp-xslt-pager.c:364 -msgid "No href attribute found on yelp:document" -msgstr "Tidak menemukan atribut href pada dokumen yelp" +#. Translators: this is a menu title for audio and video players +#: ../data/toc.xml.in.h:102 +msgid "Players" +msgstr "Pemutar" -#: ../src/yelp-search-pager.c:869 ../src/yelp-toc-pager.c:2146 -#: ../src/yelp-xslt-pager.c:380 ../src/yelp-xslt-pager.c:531 -msgid "Out of memory" -msgstr "Memori habis" +#: ../data/toc.xml.in.h:103 +msgid "Presentation Tools" +msgstr "Perkakas Presentasi" -#: ../src/yelp-search-pager.c:910 ../src/yelp-toc-pager.c:2195 -msgid "Help Contents" -msgstr "Daftar Isi" - -#. Translators: Do not translate this list exactly. These are -#. * colon-separated words that aren't useful for choosing search -#. * results; they will be different for each language. Include -#. * pronouns, articles, very common verbs and prepositions, -#. * words from question structures like "tell me about" and -#. * "how do I", and words for functional states like "not", -#. * "work", and "broken". -#. -#: ../src/yelp-search-pager.c:1236 -msgid "" -"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" -"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" -"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" -"where:who:will:with:won't:wont:why:work:working:works" -msgstr "" +#: ../data/toc.xml.in.h:104 +msgid "Printing" +msgstr "Pencetakan" -#. Translators: This is a list of common prefixes for words. -#. * Do not translate this directly. Instead, use a colon -#. * seperated list of word-starts. In English, an example -#. * is re-. If there is none, please use the term NULL -#. * If there is only one, please put a colon after. -#. * E.g. if the common prefix is re then the string would be -#. * "re:" -#. -#: ../src/yelp-search-pager.c:1252 -msgid "re" -msgstr "" +#: ../data/toc.xml.in.h:105 +msgid "Profiling Tools" +msgstr "Perkakas Profiling" -#. Translators: This is a list of (guess what?) common suffixes -#. * to words. Things that may be put at ends of words to slightly -#. * alter their meaning (like -ing and -s in English). This is a -#. * colon seperated list (I like colons). If there are none, -#. * please use the strig NULL. If there is only 1, please -#. * add a colon at the end of the list -#. -#: ../src/yelp-search-pager.c:1261 -msgid "ers:er:ing:es:s:'s" -msgstr "" +#: ../data/toc.xml.in.h:106 +msgid "Project Management Tools" +msgstr "Perkakas Manajemen Projek" -#: ../src/yelp-search-pager.c:1455 ../src/yelp-toc-pager.c:620 -#, c-format -msgid "Could not load the OMF file '%s'." -msgstr "Tidak dapat membaca berkas OMF '%s'." - -#. TRANSLATORS: -#. This is an image of the opening quote character used to watermark -#. blockquote elements. Different languages use different opening -#. quote characters, so the icon name is translatable. The name of -#. the icon should be "yelp-watermark-blockquote-XXXX", where XXXX -#. is the Unicode code point of the opening quote character. For -#. example, some languages use the double angle quotation mark, so -#. those would use "yelp-watermark-blockquote-00AB". However, the -#. image is not automagically created. Do not translate this to a -#. value if there isn't a corresponding icon in yelp/data/icons. -#. If you need an image created, contact the maintainers. -#. -#. Phew, now some notes on which character to use. Languages that -#. use guillemets (angle quotations) should use either 00AB or 00BB, -#. depending on whether the opening quotation is the left guillemet -#. or the right guillemet. Languages that use inverted comma style -#. quotations should use 201C, 201D, or 201E. Note that single -#. quotation marks don't make very nice watermarks. So if you use -#. single quotes as your primary (outer) quotation marks, you should -#. just use the corresponding double quote watermark. -#. -#: ../src/yelp-settings.c:151 -msgid "yelp-watermark-blockquote-201C" -msgstr "yelp-watermark-blockquote-201C" - -#: ../src/yelp-toc-pager.c:265 -msgid "YelpTocPager: Pause count is negative." -msgstr "YelpTocPager: Perhitungan istirahat bernilai negatif." - -#: ../src/yelp-toc-pager.c:371 ../src/yelp-toc-pager.c:1946 -#, c-format -msgid "" -"The table of contents could not be processed. The file ‘%s’ is either " -"missing or is not a valid XSLT stylesheet." -msgstr "" -"Daftar Isi tidak dapat diproses. Berkas ‘%s’ apakah hilang atau bukan gaya " -"XSLT yang benar." +#: ../data/toc.xml.in.h:107 +msgid "Publishing" +msgstr "Penerbitan" -#: ../src/yelp-toc-pager.c:1099 -#, c-format -msgid "Read man page for %s" -msgstr "Baca halaman manual untuk %s" +#: ../data/toc.xml.in.h:108 +msgid "Qt" +msgstr "Qt" -#: ../src/yelp-toc-pager.c:1692 -#, c-format -msgid "Read info page for %s" -msgstr "Baca halaman info untuk %s" +#: ../data/toc.xml.in.h:109 +msgid "Raster Graphics" +msgstr "Grafis Raster" -#: ../src/yelp-toc-pager.c:1805 -#, c-format -msgid "" -"The table of contents could not be loaded. The file ‘%s’ is either missing " -"or is not well-formed XML." -msgstr "" -"Daftar isi tidak dapat dibaca. Berkas ‘%s’ apakah hilang atau tidak berada " -"pada bentuk XML yang benar." +#. Translators: this is a menu title for audio and video recorders +#: ../data/toc.xml.in.h:111 +msgid "Recorders" +msgstr "Perekam" -#: ../src/yelp-toc-pager.c:1827 -msgid "Command Line Help" -msgstr "Bantuan Perintah Baris" +#: ../data/toc.xml.in.h:112 +msgid "Remote Access" +msgstr "Akses Jarak Jauh" -#: ../src/yelp-window.c:318 -msgid "_File" -msgstr "_Berkas" +#: ../data/toc.xml.in.h:113 +msgid "Revision Control" +msgstr "Kendali Revisi" -#: ../src/yelp-window.c:319 -msgid "_Edit" -msgstr "_Ubah" +#: ../data/toc.xml.in.h:114 +msgid "Robotics" +msgstr "Robotika" -#: ../src/yelp-window.c:320 -msgid "_Go" -msgstr "B_uka" +#: ../data/toc.xml.in.h:115 +msgid "Role Playing Games" +msgstr "Permainan Role Playing" -#: ../src/yelp-window.c:321 -msgid "_Bookmarks" -msgstr "Pem_batas" +#: ../data/toc.xml.in.h:116 +msgid "Scanning" +msgstr "Pemindaian" -#: ../src/yelp-window.c:322 -msgid "_Help" -msgstr "Ba_ntuan" +#: ../data/toc.xml.in.h:117 +msgid "Science" +msgstr "Sains" -#: ../src/yelp-window.c:325 -msgid "_New Window" -msgstr "_Jendela Baru" +#: ../data/toc.xml.in.h:118 +msgid "Security" +msgstr "Keamanan" -#: ../src/yelp-window.c:330 -msgid "Print This Document" -msgstr "Cetak Dokumen Ini" +#: ../data/toc.xml.in.h:119 +msgid "Sequencers" +msgstr "Sequencer" -#: ../src/yelp-window.c:335 -msgid "Print This Page" -msgstr "Cetak Halaman Ini" +#: ../data/toc.xml.in.h:120 +msgid "Settings" +msgstr "Tatanan" -#: ../src/yelp-window.c:340 -msgid "About This Document" -msgstr "Tentang Dokumen Ini" +#: ../data/toc.xml.in.h:121 +msgid "Settings users can manipulate to make their environment more pleasant" +msgstr "Tatanan yang dapat dimanipulasi pengguna untuk membuat lingkungan mereka lebih nyaman" -#: ../src/yelp-window.c:345 -msgid "Open _Location" -msgstr "Buka _Lokasi" +#: ../data/toc.xml.in.h:122 +msgid "Simulation Games" +msgstr "Permainan Simulasi" -#: ../src/yelp-window.c:350 -msgid "_Close Window" -msgstr "_Tutup Jendela" +#: ../data/toc.xml.in.h:123 +msgid "Sound" +msgstr "Suara" -#: ../src/yelp-window.c:356 -msgid "_Copy" -msgstr "_Salin" +#: ../data/toc.xml.in.h:124 +msgid "Sound & Video" +msgstr "Suara $amp; Video" -#: ../src/yelp-window.c:362 -msgid "_Select All" -msgstr "_Pilih Semua" +#: ../data/toc.xml.in.h:125 +msgid "Sound & Video Editing" +msgstr "Penyuntingan Suara & Video" -#: ../src/yelp-window.c:367 -msgid "_Find..." -msgstr "_Cari..." +#: ../data/toc.xml.in.h:126 +msgid "Sports" +msgstr "Olah Raga" -#: ../src/yelp-window.c:372 -msgid "Find Pre_vious" -msgstr "Temukan Seb_elumnya" +#: ../data/toc.xml.in.h:127 +msgid "Sports Games" +msgstr "Permainan Olah Raga" -#: ../src/yelp-window.c:374 -msgid "Find previous occurrence of the word or phrase" -msgstr "Temukan kata atau frasa sebelumnya" +#: ../data/toc.xml.in.h:128 +msgid "Spreadsheet Tools" +msgstr "Perkakas Spreadsheet" -#: ../src/yelp-window.c:377 -msgid "Find Ne_xt" -msgstr "Temukan Sel_anjutnya" +#: ../data/toc.xml.in.h:129 +msgid "Strategy Games" +msgstr "Permainan Strategi" -#: ../src/yelp-window.c:379 -msgid "Find next occurrence of the word or phrase" -msgstr "Temukan kata atau frasa selanjutnya" +#: ../data/toc.xml.in.h:130 +msgid "System" +msgstr "Sistem" -#: ../src/yelp-window.c:382 -msgid "_Preferences" -msgstr "_Pengaturan" +#: ../data/toc.xml.in.h:131 +msgid "TV" +msgstr "TV" -#: ../src/yelp-window.c:387 -msgid "_Reload" -msgstr "_Baca ulang" +#: ../data/toc.xml.in.h:132 +msgid "Telephony" +msgstr "Telefoni" -#: ../src/yelp-window.c:399 -msgid "_Back" -msgstr "Kem_bali" +#: ../data/toc.xml.in.h:133 +msgid "Telephony Tools" +msgstr "Perkakas Telefoni" -#: ../src/yelp-window.c:401 -msgid "Show previous page in history" -msgstr "Tampilkan layar sebelumnya dalam catatan" +#: ../data/toc.xml.in.h:134 +msgid "Terminal Emulator" +msgstr "Emulator Terminal" -#: ../src/yelp-window.c:404 -msgid "_Forward" -msgstr "_Maju" +#: ../data/toc.xml.in.h:135 +msgid "Text Editors" +msgstr "Penyunting Teks" -#: ../src/yelp-window.c:406 -msgid "Show next page in history" -msgstr "Tampilkan layar berikutnya dalam catatan" +#: ../data/toc.xml.in.h:136 +msgid "Text Tools" +msgstr "Perkakas Teks" -#: ../src/yelp-window.c:409 -msgid "_Help Topics" -msgstr "Topik _Bantuan" +#: ../data/toc.xml.in.h:137 +msgid "Tools to help you manage your computer" +msgstr "Peralatan untuk membantu mengelola komputer Anda" -#: ../src/yelp-window.c:411 -msgid "Go to the listing of help topics" -msgstr "Buka daftar topik bantuan" +#: ../data/toc.xml.in.h:138 +msgid "Translation Tools" +msgstr "Perkakas Penerjemahan" -#: ../src/yelp-window.c:414 -msgid "_Previous Section" -msgstr "Bagian Se_belumnya" +#: ../data/toc.xml.in.h:139 +msgid "Tuners" +msgstr "Radio" -#: ../src/yelp-window.c:419 -msgid "_Next Section" -msgstr "Bagian Selanjut_nya" +#: ../data/toc.xml.in.h:140 +msgid "Utilities" +msgstr "Peralatan" -#: ../src/yelp-window.c:424 ../src/yelp-window.c:456 -msgid "_Contents" -msgstr "Daftar _Isi" +#: ../data/toc.xml.in.h:141 +msgid "Utilities to help you get work done" +msgstr "Utilitas untuk membantu Anda menyelesaikan pekerjaan" -#: ../src/yelp-window.c:430 -msgid "_Add Bookmark" -msgstr "T_ambah Pembatas" +#: ../data/toc.xml.in.h:142 +msgid "Vector Graphics" +msgstr "Grafis Vektor" -#: ../src/yelp-window.c:435 -msgid "_Edit Bookmarks..." -msgstr "_Ubah Pembatas..." +#: ../data/toc.xml.in.h:143 +msgid "Video" +msgstr "Video" -#: ../src/yelp-window.c:441 -msgid "_Open Link" -msgstr "_Buka Taut" +#: ../data/toc.xml.in.h:144 +msgid "Video Conference" +msgstr "Konferensi Video" -#: ../src/yelp-window.c:446 -msgid "Open Link in _New Window" -msgstr "Buka Taut pada Jendela _Baru" +#. Translators: This is a menu title for graphics viewing applications +#: ../data/toc.xml.in.h:146 +msgid "Viewer" +msgstr "Penilik" -#: ../src/yelp-window.c:451 -msgid "_Copy Link Address" -msgstr "_Salin Alamat Taut" +#: ../data/toc.xml.in.h:147 +msgid "Web Browser" +msgstr "Peramban Web" -#: ../src/yelp-window.c:458 -msgid "Help On this application" -msgstr "Bantuan Pada Aplikasi ini" +#: ../data/toc.xml.in.h:148 +msgid "Web Development" +msgstr "Pengembangan Web" -#: ../src/yelp-window.c:461 -msgid "_About" -msgstr "Keter_angan Program" +#: ../data/toc.xml.in.h:149 +msgid "Welcome to the GNOME Help Browser" +msgstr "Selamat datang ke Perambah Bantuan GNOME" -#: ../src/yelp-window.c:466 -msgid "Copy _Email Address" -msgstr "_Salin Alamat Surat" +#: ../data/toc.xml.in.h:150 +msgid "Word Processors" +msgstr "Pengolah Kata" -#: ../src/yelp-window.c:515 -msgid "Help Browser" -msgstr "Perambah Bantuan" +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:155 +msgid "Invalid compressed data" +msgstr "Data terkompresi tak valid" -#: ../src/yelp-window.c:926 ../src/yelp-window.c:1082 -msgid "The Uniform Resource Identifier for the file is invalid." -msgstr "Penanda Seragam Sumber untuk berkas ini tidak benar." +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:161 +msgid "Not enough memory" +msgstr "Memori tak cukup" -#: ../src/yelp-window.c:938 ../src/yelp-window.c:1077 +#: ../libyelp/yelp-docbook-document.c:264 +#: ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 #, c-format -msgid "" -"The Uniform Resource Identifier ‘%s’ is invalid or does not point to an " -"actual file." -msgstr "" -"Penanda Seragam Sumber ‘%s’ adalah salah atau tidak menunjuk ke berkas yang " -"ada." - -#: ../src/yelp-window.c:1026 ../src/yelp-window.c:1506 -msgid "Man pages are not supported in this version." -msgstr "Halaman man tidak didukung pada versi ini." - -#: ../src/yelp-window.c:1036 ../src/yelp-window.c:1497 -msgid "GNU info pages are not supported in this version" -msgstr "Halaman info GNU tidak didukung pada versi ini" - -#: ../src/yelp-window.c:1052 ../src/yelp-window.c:1519 -msgid "Search is not supported in this version." -msgstr "Pencarian tidak didukung pada versi ini." - -#: ../src/yelp-window.c:1057 -msgid "" -"SGML documents are no longer supported. Please ask the author of the " -"document to convert to XML." -msgstr "" -"Dokumen SGML tidak lagi didukung. Silahkan tanya penulis dokumen untuk " -"merubah ke XML." - -#: ../src/yelp-window.c:1223 -msgid "_Search:" -msgstr "_Cari:" - -#: ../src/yelp-window.c:1224 -msgid "Search for other documentation" -msgstr "Cari Dokumen Lainnya" - -#: ../src/yelp-window.c:1386 -msgid "Fin_d:" -msgstr "Temu_kan:" - -#: ../src/yelp-window.c:1406 -msgid "Find _Next" -msgstr "Cari _Lagi" - -#: ../src/yelp-window.c:1418 -msgid "Find _Previous" -msgstr "Cari ke _Belakang" +msgid "The page ‘%s’ was not found in the document ‘%s’." +msgstr "Halaman '%s' tak ditemukan di dokumen '%s'." -#: ../src/yelp-window.c:1532 +#: ../libyelp/yelp-docbook-document.c:298 +#: ../libyelp/yelp-info-document.c:366 #, c-format -msgid "" -"A transformation context could not be created for the file ‘%s’. The format " -"may not be supported." -msgstr "" -"Perubahan isi tidak dapat dibuat untuk berkas ‘%s’. Bentuknya mungkin tidak " -"didukung." +msgid "The file does not exist." +msgstr "Berkas tak ada." -#: ../src/yelp-window.c:1562 ../src/yelp-window.c:1981 -#: ../src/yelp-window.c:2064 +#: ../libyelp/yelp-docbook-document.c:308 +#: ../libyelp/yelp-info-document.c:376 #, c-format -msgid "" -"The section ‘%s’ does not exist in this document. If you were directed to " -"this section from a Help button in an application, please report this to the " -"maintainers of that application." -msgstr "" -"Bagian ‘%s’ tidak ada pada dokumen ini. Jika anda diarahkan ke bagian ini " -"dari tombol bantuan pada sebuah aplikasi, silahkan laporkan hal ini ke " -"pemelihara dari aplikasi tersebut." +msgid "The file ‘%s’ does not exist." +msgstr "Berkas '%s' tak ada." -#: ../src/yelp-window.c:1677 ../src/yelp-window.c:2468 +#: ../libyelp/yelp-docbook-document.c:323 #, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "" -"Tidak dapat membaca berkas ‘%s’. Berkas ini mungkin hilang atau anda tidak " -"memiliki hak untuk membacanya." +msgid "The file ‘%s’ could not be parsed because it is not a well-formed XML document." +msgstr "Berkas ‘%s’ tak dapat diuraikan karena bukan dokumen XML yang baik bentuknya." -#: ../src/yelp-window.c:1728 -msgid "Loading..." -msgstr "Sedang membuka..." - -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2911 -msgid "translator-credits" -msgstr "" -"Ahmad Riza H Nst <rizahnst@gnome.org>\n" -"Mohammad DAMT <mdamt@bisnisweb.com>\n" -"http://id.gnome.org/" - -#: ../src/yelp-window.c:2914 -msgid "Yelp" -msgstr "Yelp" +#: ../libyelp/yelp-docbook-document.c:336 +#, c-format +msgid "The file ‘%s’ could not be parsed because one or more of its included files is not a well-formed XML document." +msgstr "Berkas ‘%s’ tak dapat diuraikan karena satu atau lebih berkas terkait bukan dokumen XLM yang baik bentuknya." -#: ../src/yelp-window.c:2916 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "Perambah dokumentasi untuk Desktop Gnome." +#: ../libyelp/yelp-docbook-document.c:720 +msgid "Unknown" +msgstr "Tak dikenal" -#: ../src/yelp-xslt-pager.c:189 +#: ../libyelp/yelp-docbook-document.c:781 +#: ../libyelp/yelp-info-document.c:309 #, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"improperly formatted." -msgstr "" -"Berkas ‘%s’ tidak dapat diuraikan. Entah berkas ini tidak ada, atau tidak " -"dibentuk dengan benar." +msgid "The requested page was not found in the document ‘%s’." +msgstr "Halaman yang diminta tak ditemukan di dokumen '%s'." -#: ../src/yelp-xslt-pager.c:210 ../src/yelp-xslt-pager.c:223 +#: ../libyelp/yelp-error.c:33 #, c-format -msgid "" -"The document ‘%s’ could not be processed. The file ‘%s’ is either missing, " -"or it is not a valid XSLT stylesheet." -msgstr "" -"Dokumen ‘%s’ tidak dapat diproses. Berkas ‘%s’ apakah hilang atau bukan " -"merupakan gaya XSLT yang benar." - -#: ../yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "Buka bantuan GNOME" - -#~ msgid "Library Functions" -#~ msgstr "Fungsi Pustaka" - -#~ msgid "Administration" -#~ msgstr "Administrasi" - -#~ msgid "Multimedia" -#~ msgstr "Multimedia" - -#~ msgid "Other" -#~ msgstr "Lainnya" - -#~ msgid "Yelp Factory" -#~ msgstr "Yelp Factory" - -#~ msgid "Could not activate Yelp: '%s'" -#~ msgstr "Tidak dapat mengaktifkan Yelp: '%s'" - -#~ msgid "Could not open new window." -#~ msgstr "TIdak dapat membuka jendela baru." - -#~ msgid "Pages" -#~ msgstr "Halaman" - -#~ msgid "Generating PDF is not currently supported" -#~ msgstr "Menghasilkan PDF belum lagi tersedia" - -#~ msgid "" -#~ "You were trying to print to a printer using the \"%s\" driver. This " -#~ "program requires a PostScript printer driver." -#~ msgstr "" -#~ "Anda mencoba mencetak menggunakan driver \"%s\". Program ini memerlukan " -#~ "driver cetak PostScript." - -#~ msgid "_From:" -#~ msgstr "_Dari:" - -#~ msgid "Sets the start of the range of pages to be printed" -#~ msgstr "Tentukan awal dari halaman yang mau dicetak" +msgid "An unknown error occurred." +msgstr "Terjadi kesalahan yang tak dikenal." -#~ msgid "_To:" -#~ msgstr "_Ke:" - -#~ msgid "Sets the end of the range of pages to be printed" -#~ msgstr "Tentukan akhir dari halaman yang mau dicetak" - -#~ msgid "" -#~ "Could not display help for Yelp.\n" -#~ "%s" -#~ msgstr "" -#~ "Tidak dapat menampilkan bantuan untuk Yelp.\n" -#~ "%s" - -#~ msgid "<b>_Bookmarks:</b>" -#~ msgstr "<b>Pem_batas Buku:</b>" - -#~ msgid "<b>_Title:</b>" -#~ msgstr "<b>_Judul:</b>" - -#~ msgid "Unknown Section" -#~ msgstr "Bagian Tidak Diketahui" - -#~ msgid "Find:" -#~ msgstr "Cari:" - -#, fuzzy -#~ msgid "_Home" -#~ msgstr "Awal" - -#~ msgid "Go to home view" -#~ msgstr "Tampilkan halaman awal" - -#, fuzzy -#~ msgid "Development Environments" -#~ msgstr "Pembangunan" - -#, fuzzy -#~ msgid "Development Tools" -#~ msgstr "Pembangunan" - -#, fuzzy -#~ msgid "Editors" -#~ msgstr "/_Edit" - -#~ msgid "Games and Entertainment" -#~ msgstr "Gim dan Hiburan" - -#~ msgid "General" -#~ msgstr "Static Gray" - -#, fuzzy -#~ msgid "Kernels" -#~ msgstr "Rutin Kernel" - -#~ msgid "Office and Productivity Applications" -#~ msgstr "Aplikasi Perkantoran dan Produktivitas" - -#~ msgid "Securities" -#~ msgstr "Keamanan" - -#, fuzzy -#~ msgid "System" -#~ msgstr "System Call" - -#~ msgid "Utilities" -#~ msgstr "Peralatan" +#: ../libyelp/yelp-info-document.c:391 +#, c-format +msgid "The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "Berkas ‘%s’ tak dapat diuraikan karena bukan halaman info yang baik bentuknya." -#~ msgid "*" -#~ msgstr "*" +#: ../libyelp/yelp-location-entry.c:251 +msgid "Description Column" +msgstr "Kolom Keterangan" -#~ msgid "Titlepage" -#~ msgstr "Judul" +#: ../libyelp/yelp-location-entry.c:252 +msgid "A column in the model to get descriptions from" +msgstr "Suatu kolom pada model tempat memperoleh keterangan" -#, fuzzy -#~ msgid "The selected document could not be opened" -#~ msgstr "File dokumen '%s' tidak ada" +#: ../libyelp/yelp-location-entry.c:267 +msgid "Icon Column" +msgstr "Kolom Ikon" -#, fuzzy -#~ msgid "The selected page could not be found in this document." -#~ msgstr "File dokumen '%s' tidak ada" +#: ../libyelp/yelp-location-entry.c:268 +msgid "A column in the model to get icon names from" +msgstr "Suatu kolom pada model tempat memperoleh nama ikon" -#, fuzzy -#~ msgid "The table of contents could not be read." -#~ msgstr "File dokumen '%s' tidak ada" +#: ../libyelp/yelp-location-entry.c:283 +msgid "Flags Column" +msgstr "Kolom Flag" -#, fuzzy -#~ msgid "The selected file could not be read." -#~ msgstr "File dokumen '%s' tidak ada" +#: ../libyelp/yelp-location-entry.c:284 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "Suatu kolom pada model dengan flag YelpLocationEntryFlags" -#, fuzzy -#~ msgid "The file could not be processed." -#~ msgstr "File dokumen '%s' tidak ada" +#: ../libyelp/yelp-location-entry.c:300 +msgid "Enable Search" +msgstr "Aktifkan Pencarian" -#~ msgid "X11" -#~ msgstr "X11" +#: ../libyelp/yelp-location-entry.c:301 +msgid "Whether the location entry can be used as a search field" +msgstr "Apakah entri lokasi dapat dipakai sebagai ruas pencarian" -#~ msgid "OpenSSL" -#~ msgstr "OpenSSL" +#: ../libyelp/yelp-mallard-document.c:294 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "Direktori '%s' tak ada." -#~ msgid "Termcap" -#~ msgstr "Termcap" +#: ../libyelp/yelp-settings.c:146 +msgid "GtkSettings" +msgstr "GtkSettings" -#~ msgid "Perl" -#~ msgstr "Perl" +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "Objek GtkSettings tempat mendapat tatanan" -#~ msgid "Qt" -#~ msgstr "Qt" +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "GtkIconTheme" -#~ msgid "TIFF" -#~ msgstr "TIFF" +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "Objek GtkIconTheme tempat mendapat tatanan" -#~ msgid "PThreads" -#~ msgstr "PThreads" +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "Penyesuaian Fonta" -#~ msgid "Categories" -#~ msgstr "Kategori" +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "Penyesuaian ukuran untuk ditambahkan ke ukuran fonta" -#~ msgid "Documents" -#~ msgstr "Dokumen" +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" +msgstr "Tampilkan Kursor Teks" -#, fuzzy -#~ msgid "_Next Page" -#~ msgstr "/Go/_Indeks" +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" +msgstr "Tampilkan kursor teks atau caret untuk navigasi yang lebih membantu" -#~ msgid "‘" -#~ msgstr "‘" +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "Mode Penyunting" -#~ msgid "’" -#~ msgstr "’" +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "Aktifkan fitur yang berguna bagi para penyunting" -#~ msgid "“" -#~ msgstr "“" +#: ../libyelp/yelp-transform.c:171 +msgid "XSLT Stylesheet" +msgstr "Stylesheet XSLT" -#~ msgid "”" -#~ msgstr "”" +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "Lokasi dari stylesheet XSLT" -#~ msgid "About This Article" -#~ msgstr "Informasi Artikel" +#: ../libyelp/yelp-transform.c:379 +#: ../libyelp/yelp-transform.c:394 +#, c-format +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." +msgstr "Stylesheet XSLT '%s' mungkin hilang atau tak valid." -#~ msgid "About This Bibliography" -#~ msgstr "Informasi Bibliografi" +#: ../libyelp/yelp-transform.c:528 +msgid "No href attribute found on yelp:document\n" +msgstr "Tak ditemukan atribut href pada yelp:document\n" -#~ msgid "About This Book" -#~ msgstr "Informasi Buku Ini" +#: ../libyelp/yelp-transform.c:543 +msgid "Out of memory" +msgstr "Memori habis" -#~ msgid "About This Chapter" -#~ msgstr "Informasi Bab Ini" +#: ../libyelp/yelp-view.c:92 +msgid "_Back" +msgstr "Kem_bali" -#~ msgid "About This Entry" -#~ msgstr "Informasi Tulisan Ini" +#: ../libyelp/yelp-view.c:97 +msgid "_Forward" +msgstr "_Maju" -#~ msgid "About This Glossary" -#~ msgstr "Informasi Glosari Ini" +#: ../libyelp/yelp-view.c:102 +msgid "_Previous Page" +msgstr "Halaman Se_belumnya" -#~ msgid "About This Index" -#~ msgstr "Informasi Index Ini" +#: ../libyelp/yelp-view.c:107 +msgid "_Next Page" +msgstr "Halaman Selanjut_nya" -#~ msgid "About This Part" -#~ msgstr "Informasi Bagian Ini" +#: ../libyelp/yelp-view.c:310 +msgid "Yelp URI" +msgstr "URI Yelp" -#~ msgid "About This Reference" -#~ msgstr "Informasi Referensi" +#: ../libyelp/yelp-view.c:311 +msgid "A YelpUri with the current location" +msgstr "YelpURI untuk lokasi kini" -#~ msgid "About This Section" -#~ msgstr "Informasi Seksi Ini" +#: ../libyelp/yelp-view.c:319 +msgid "Loading State" +msgstr "Memuat Keadaan" -#, fuzzy -#~ msgid "Affiliation" -#~ msgstr "Aplikasi" +#: ../libyelp/yelp-view.c:320 +msgid "The loading state of the view" +msgstr "Sedang memuat keadaan tilikan" -#~ msgid "Appendix" -#~ msgstr "Lampiran" +#: ../libyelp/yelp-view.c:329 +msgid "Page ID" +msgstr "ID Halaman" -#~ msgid "Article" -#~ msgstr "Artikel" +#: ../libyelp/yelp-view.c:330 +msgid "The ID of the root page of the page being viewew" +msgstr "ID dari halaman akar dari halaman yang sedang ditilik" -#~ msgid "Audience" -#~ msgstr "Pembaca" +#: ../libyelp/yelp-view.c:338 +msgid "Root Title" +msgstr "Judul Akar" -#~ msgid "Author" -#~ msgstr "Penulis" +#: ../libyelp/yelp-view.c:339 +msgid "The title of the root page of the page being viewew" +msgstr "Judul dari halaman akar dari halaman yang sedang ditilik" -#~ msgid "Authors" -#~ msgstr "Penulis" +#: ../libyelp/yelp-view.c:347 +msgid "Page Title" +msgstr "Judul Halaman" -#~ msgid "Bibliography" -#~ msgstr "Bibliografi" +#: ../libyelp/yelp-view.c:348 +msgid "The title of the page being viewed" +msgstr "Judul dari halaman yang sedang ditilik" -#~ msgid "Caution" -#~ msgstr "Perhatian" +#: ../libyelp/yelp-view.c:356 +msgid "Page Description" +msgstr "Keterangan Halaman" -#~ msgid "Chapter" -#~ msgstr "Bab" +#: ../libyelp/yelp-view.c:357 +msgid "The description of the page being viewed" +msgstr "Keterangan dari halaman yang sedang ditilik" -#~ msgid "Collaborator" -#~ msgstr "Kolaborator" +#: ../libyelp/yelp-view.c:365 +msgid "Page Icon" +msgstr "Ikon Halaman" -#~ msgid "Collaborators" -#~ msgstr "Kolaborator" +#: ../libyelp/yelp-view.c:366 +msgid "The icon of the page being viewed" +msgstr "Ikon dari halaman yang sedang ditilik" -#~ msgid "Colophon" -#~ msgstr "Kolofon" +#: ../libyelp/yelp-view.c:683 +#, c-format +msgid "Could not load a document for ‘%s’" +msgstr "Tak bisa memuat suatu dokumen bagi '%s'" -#~ msgid "Copyright" -#~ msgstr "Hak Cipta" +#: ../libyelp/yelp-view.c:689 +#, c-format +msgid "Could not load a document" +msgstr "Tak bisa memuat suatu dokumen" -#~ msgid "Copyrights" -#~ msgstr "Hak Cipta" +#: ../libyelp/yelp-view.c:756 +msgid "Not Found" +msgstr "Tak Ditemukan" -#~ msgid "Date" -#~ msgstr "Tanggal" +#: ../libyelp/yelp-view.c:759 +msgid "Cannot Read" +msgstr "Tak Bisa Membaca" -#, fuzzy -#~ msgid "Editor" -#~ msgstr "/_Edit" +#: ../libyelp/yelp-view.c:765 +msgid "Unknown Error" +msgstr "Galat Tak Dikenal" -#~ msgid "Email" -#~ msgstr "Email" +#: ../libyelp/yelp-view.c:855 +#, c-format +msgid "The URI ‘%s’ does point to a valid page." +msgstr "URI '%s' tak menunjuk ke suatu halaman yang valid." -#~ msgid "Example" -#~ msgstr "Teladan" +#: ../libyelp/yelp-view.c:863 +#, c-format +msgid "The URI ‘%s’ could not be parsed." +msgstr "URI '%s' tak dapat diuraikan." -#~ msgid "Figure" -#~ msgstr "Gambar" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "Nyalakan mode penyunting" -#~ msgid "Glossary" -#~ msgstr "Glosari" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "Teks Besa_r" -#~ msgid "Important" -#~ msgstr "Penting" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "Perbesar ukuran teks" -#~ msgid "Index" -#~ msgstr "Indeks" +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "Tek_s Kecil" -#, fuzzy -#~ msgid "Set Index" -#~ msgstr "Indeks" +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "Perkecil ukuran teks" -#, fuzzy -#~ msgid "Table of Contents" -#~ msgstr "Isi Bantuan" +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "Tampilkan _Kursor Teks" -#, fuzzy -#~ msgid "/Edit/Find Ne_xt" -#~ msgstr "/Edit/C_ari lagi" +#: ../src/yelp-application.c:297 +#: ../src/yelp-window.c:1351 +#: ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Bantuan" -#, fuzzy -#~ msgid "/Edit/Find Pre_vious" -#~ msgstr "/Edit/C_ari lagi" +#: ../src/yelp-application.c:547 +msgid "You do not have PackageKit installed. Package installation links require PackageKit." +msgstr "Anda belum memasang PackageKit. Tautan pemasangan paket memerlukan PackageKit." -#~ msgid "/Go/_Back" -#~ msgstr "/Navigasi/_Kembali" +#: ../src/yelp-window.c:239 +msgid "_Page" +msgstr "_Halaman" -#~ msgid "/Go/_Forward" -#~ msgstr "/Navigasi/_Maju" +#: ../src/yelp-window.c:240 +msgid "_View" +msgstr "_Tilik" -#~ msgid "/Go/_Home" -#~ msgstr "/Go/_Awal" +#: ../src/yelp-window.c:241 +msgid "_Go" +msgstr "B_uka" -#, fuzzy -#~ msgid "/Go/" -#~ msgstr "/Navi_gasi" +#: ../src/yelp-window.c:242 +msgid "_Bookmarks" +msgstr "Pem_batas" -#, fuzzy -#~ msgid "/Go/_Contents" -#~ msgstr "Isi Bantuan" +#: ../src/yelp-window.c:245 +msgid "_New Window" +msgstr "_Jendela Baru" -#, fuzzy -#~ msgid "A Help Browser for GNOME" -#~ msgstr "Browser Bantuan untuk GNOME 2.0" +#: ../src/yelp-window.c:250 +msgid "_Close" +msgstr "_Tutup" -#~ msgid "The document '%s' does not exist" -#~ msgstr "File dokumen '%s' tidak ada" +#: ../src/yelp-window.c:255 +msgid "_Add Bookmark" +msgstr "T_ambah Pembatas" -#~ msgid "<b>Find text in the document:</b>" -#~ msgstr "<b>Cari teks dalam dokumen:</b>" +#: ../src/yelp-window.c:260 +msgid "Find in Page..." +msgstr "Cari di Halaman..." -#~ msgid "Automatically _wrap around" -#~ msgstr "_Potong kalimat secara otomatis" +#: ../src/yelp-window.c:265 +#: ../src/yelp-window.c:480 +msgid "Search..." +msgstr "Cari..." -#~ msgid "Match _entire word" -#~ msgstr "Cocokkan s_eluruh kata" +#: ../src/yelp-window.c:270 +msgid "Open Location" +msgstr "Buka Lokasi" -#~ msgid "_Match upper/lower case" -#~ msgstr "C_ocokkan sesuai huruf besar/kecil" +#: ../src/yelp-window.c:297 +msgid "Application" +msgstr "Aplikasi" -#~ msgid "GNOME - Desktop" -#~ msgstr "GNOME - Desktop" +#: ../src/yelp-window.c:298 +msgid "A YelpApplication instance that controls this window" +msgstr "Instansi YelpApplication yang mengendalikan jendela ini" -#~ msgid "GNOME is" -#~ msgstr "GNOME adalah" +#: ../src/yelp-window.c:993 +#, c-format +msgid "%i match" +msgid_plural "%i matches" +msgstr[0] "%i cocok" -#~ msgid "Free Software" -#~ msgstr "Perangkat Lunak Bebas" +#: ../src/yelp-window.c:1018 +msgid "No matches" +msgstr "Tak ada yang cocok" -#~ msgid "(C)" -#~ msgstr "(C)" +#: ../src/yelp-window.c:1295 +msgid "Loading" +msgstr "Sedang memuat" -#, fuzzy -#~ msgid "Loading.. " -#~ msgstr "Sedang meload..." +#: ../yelp.desktop.in.in.h:1 +msgid "Get help with GNOME" +msgstr "Buka bantuan GNOME" -#~ msgid "Search in the index" -#~ msgstr "Cari dalam indeks" @@ -1,14 +1,15 @@ -# translation of yelp.HEAD.kn.po to Kannada +# translation of yelp.master.kn.po to Kannada # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Shankar Prasad <svenkate@redhat.com>, 2008, 2009. msgid "" msgstr "" -"Project-Id-Version: yelp.HEAD.kn\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-07 15:56+0100\n" -"PO-Revision-Date: 2009-03-30 13:20+0530\n" +"Project-Id-Version: yelp.master.kn\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=yelp&component=general\n" +"POT-Creation-Date: 2010-03-30 16:12+0000\n" +"PO-Revision-Date: 2009-09-16 23:28+0530\n" "Last-Translator: Shankar Prasad <svenkate@redhat.com>\n" "Language-Team: Kannada <en@li.org>\n" "MIME-Version: 1.0\n" @@ -289,7 +290,7 @@ msgstr "2D ಗ್ರಾಫಿಕ್ಸುಗಳು" msgid "3D Graphics" msgstr "3D ಗ್ರಾಫಿಕ್ಸುಗಳು" -#: ../data/toc.xml.in.h:3 +#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 msgid "Accessibility" msgstr "ನಿಲುಕಣೆ" @@ -415,7 +416,7 @@ msgstr "ಗಣಕತೆರೆ" #: ../data/toc.xml.in.h:34 msgid "Desktop Settings" -msgstr "ಗಣಕತೆರೆ ಸಂಯೋಜನೆಗಳು" +msgstr "ಗಣಕತೆರೆ ಸಿದ್ಧತೆಗಳು" #: ../data/toc.xml.in.h:36 msgid "Dialup" @@ -520,7 +521,8 @@ msgstr "ಗ್ರಾಫಿಕ್ಸ್" #: ../data/toc.xml.in.h:63 msgid "Guides and manuals for applications that connect to the outside world" -msgstr "ಬಾಹ್ಯ ಜಗತ್ತಿನೊಂದಿಗೆ ಸಂಪರ್ಕಹೊಂದಲು ಬಳಸಲಾಗುವ ಅನ್ವಯಗಳ ಮಾರ್ಗದರ್ಶಿಗಳು ಹಾಗು ಕೈಪಿಡಿಗಳು" +msgstr "" +"ಬಾಹ್ಯ ಜಗತ್ತಿನೊಂದಿಗೆ ಸಂಪರ್ಕಹೊಂದಲು ಬಳಸಲಾಗುವ ಅನ್ವಯಗಳ ಮಾರ್ಗದರ್ಶಿಗಳು ಹಾಗು ಕೈಪಿಡಿಗಳು" #: ../data/toc.xml.in.h:64 msgid "Guides for getting involved in development" @@ -532,7 +534,7 @@ msgstr "ಹ್ಯಾಮ್ ರೇಡಿಯೋ" #: ../data/toc.xml.in.h:66 msgid "Hardware Settings" -msgstr "ಯಂತ್ರಾಂಶ ಸಂಯೋಜನೆಗಳು" +msgstr "ಯಂತ್ರಾಂಶ ಸಿದ್ಧತೆಗಳು" #: ../data/toc.xml.in.h:67 msgid "Have some fun" @@ -681,7 +683,7 @@ msgstr "ಚಾಲಕಗಳು" msgid "Presentation Tools" msgstr "ಪ್ರಸ್ತುತಪಡಿಕೆಯ ಉಪಕರಣಗಳು" -#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 +#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:339 ../src/yelp-print.c:366 msgid "Printing" msgstr "ಮುದ್ರಣ" @@ -744,11 +746,12 @@ msgstr "ಸೀಕ್ವೆನ್ಸರ್" #: ../data/toc.xml.in.h:120 msgid "Settings" -msgstr "ಸಂಯೋಜನೆಗಳು" +msgstr "ಸಿದ್ಧತೆಗಳು" #: ../data/toc.xml.in.h:121 msgid "Settings users can manipulate to make their environment more pleasant" -msgstr "ಬಳಕೆದಾರರು ತಮ್ಮ ಗಣಕ ಪರಿಸರವನ್ನು ಇನ್ನಷ್ಟು ಹಿತಕರವಾಗಿರುವಂತೆ ಬದಲಾಯಿಸಿಕೊಳ್ಳಲು ಸಿದ್ಧತೆಗಳು" +msgstr "" +"ಬಳಕೆದಾರರು ತಮ್ಮ ಗಣಕ ಪರಿಸರವನ್ನು ಇನ್ನಷ್ಟು ಹಿತಕರವಾಗಿರುವಂತೆ ಬದಲಾಯಿಸಿಕೊಳ್ಳಲು ಸಿದ್ಧತೆಗಳು" #: ../data/toc.xml.in.h:122 msgid "Simulation Games" @@ -863,86 +866,58 @@ msgstr "GNOME ನೆರವು ವೀಕ್ಷಕಕ್ಕೆ ಸ್ವಾಗತ" msgid "Word Processors" msgstr "ಶಬ್ಧ ಸಂಸ್ಕಾರಕಗಳು(ವರ್ಡ್ ಪ್ರೊಸೆಸರ್ಸ್)" -#: ../data/ui/yelp.glade.h:1 -msgid "<b>Accessibility</b>" -msgstr "<b>ನಿಲುಕಣೆ</b>" - -#: ../data/ui/yelp.glade.h:2 -msgid "<b>Fonts</b>" -msgstr "<b>ಅಕ್ಷರ ಶೈಲಿಗಳು</b>" - -#: ../data/ui/yelp.glade.h:3 -msgid "Add Bookmark" -msgstr "ಬುಕ್ಮಾರ್ಕುಗಳನ್ನು ಸೇರಿಸು" - -#: ../data/ui/yelp.glade.h:4 +#: ../data/ui/yelp-bookmarks.ui.h:1 msgid "Bookmarks" msgstr "ಬುಕ್ಮಾರ್ಕುಗಳು" -#: ../data/ui/yelp.glade.h:5 -msgid "C_ase sensitive" -msgstr "ಕೇಸ್ ಸಂವೇದಿ(_a)" - -#: ../data/ui/yelp.glade.h:6 -msgid "Find" -msgstr "ಹುಡುಕು" - -#: ../data/ui/yelp.glade.h:7 -msgid "Open Location" -msgstr "ಸ್ಥಳವನ್ನು ತೆಗೆ" - -#: ../data/ui/yelp.glade.h:8 -msgid "Preferences" -msgstr "ಆದ್ಯತೆಗಳು" - -#: ../data/ui/yelp.glade.h:9 +#: ../data/ui/yelp-bookmarks.ui.h:2 msgid "Re_name" msgstr "ಹೆಸರನ್ನು ಬದಲಾಯಿಸು(_n)" -#: ../data/ui/yelp.glade.h:10 +#: ../data/ui/yelp-bookmarks.ui.h:3 msgid "_Bookmarks:" msgstr "ಬುಕ್ಮಾರ್ಕುಗಳು(_B):" -#: ../data/ui/yelp.glade.h:11 -msgid "_Browse with caret" -msgstr "ಕ್ಯಾರಟ್ನೊಂದಿಗೆ(caret) ವೀಕ್ಷಿಸು(_B)" +#: ../data/ui/yelp-bookmarks-add.ui.h:1 +msgid "Add Bookmark" +msgstr "ಬುಕ್ಮಾರ್ಕುಗಳನ್ನು ಸೇರಿಸು" -#: ../data/ui/yelp.glade.h:12 -msgid "_Find:" -msgstr "ಹುಡುಕು(_F):" +#: ../data/ui/yelp-bookmarks-add.ui.h:2 +msgid "_Title:" +msgstr "ಶೀರ್ಷಿಕೆ(_T):" -#: ../data/ui/yelp.glade.h:13 -msgid "_Fixed width:" -msgstr "ನಿಗದಿತ ಅಗಲ(_F):" +#: ../data/ui/yelp-open-location.ui.h:1 +msgid "Open Location" +msgstr "ಸ್ಥಳವನ್ನು ತೆಗೆ" -#: ../data/ui/yelp.glade.h:14 +#: ../data/ui/yelp-open-location.ui.h:2 msgid "_Location:" msgstr "ಸ್ಥಳ(_L):" -#: ../data/ui/yelp.glade.h:15 -msgid "_Next" -msgstr "ಮುಂದಿನ(_N)" +#: ../data/ui/yelp-preferences.ui.h:2 +msgid "Fonts" +msgstr "ಅಕ್ಷರಶೈಲಿಗಳು" -#: ../data/ui/yelp.glade.h:16 -msgid "_Previous" -msgstr "ಹಿಂದಿನ(_P)" +#: ../data/ui/yelp-preferences.ui.h:3 +msgid "Preferences" +msgstr "ಆದ್ಯತೆಗಳು" -#: ../data/ui/yelp.glade.h:17 -msgid "_Title:" -msgstr "ಶೀರ್ಷಿಕೆ(_T):" +#: ../data/ui/yelp-preferences.ui.h:4 +msgid "_Browse with caret" +msgstr "ಕ್ಯಾರಟ್ನೊಂದಿಗೆ(caret) ವೀಕ್ಷಿಸು(_B)" -#: ../data/ui/yelp.glade.h:18 +#: ../data/ui/yelp-preferences.ui.h:5 +msgid "_Fixed width:" +msgstr "ನಿಗದಿತ ಅಗಲ(_F):" + +#: ../data/ui/yelp-preferences.ui.h:6 msgid "_Use system fonts" msgstr "ಗಣಕದ ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸು(_U)" -#: ../data/ui/yelp.glade.h:19 +#: ../data/ui/yelp-preferences.ui.h:7 msgid "_Variable width:" msgstr "ಬದಲಾಗುವ ಅಗಲ(_V):" -#: ../data/ui/yelp.glade.h:20 -msgid "_Wrap around" -msgstr "ವ್ರಾಪ್ ಮಾಡು(_W)" - #: ../data/yelp.schemas.in.h:1 msgid "Font for fixed text" msgstr "ನಿಗದಿತ ಪಠ್ಯಕ್ಕಾಗಿನ ಅಕ್ಷರಶೈಲಿ" @@ -973,47 +948,112 @@ msgstr "ಗಣಕದ ಅಕ್ಷರಶೈಲಿಯನ್ನು ಬಳಸು" #: ../data/yelp.schemas.in.h:8 msgid "Use the default fonts set for the system." -msgstr "ಗಣಕಕ್ಕೆ ಹೊಂದಿಸಲಾದ ಡೀಫಾಲ್ಟ್ ಅಕ್ಷರಶೈಲಿಯನ್ನು ಬಳಸು." +msgstr "ಗಣಕಕ್ಕೆ ಹೊಂದಿಸಲಾದ ಪೂರ್ವನಿಯೋಜಿತಅಕ್ಷರಶೈಲಿಯನ್ನು ಬಳಸು." -#: ../src/yelp-bookmarks.c:150 +#: ../src/eggdesktopfile.c:165 +#, c-format +msgid "File is not a valid .desktop file" +msgstr "ಕಡತವು ಒಂದು ಮಾನ್ಯವಾದಂತಹ .desktop ಕಡತವಾಗಿಲ್ಲ" + +#: ../src/eggdesktopfile.c:188 +#, c-format +msgid "Unrecognized desktop file Version '%s'" +msgstr "ಗುರುತಿಸಲಾಗದ ಗಣಕತೆರೆ ಕಡತದ ಆವೃತ್ತಿ '%s'" + +#: ../src/eggdesktopfile.c:957 +#, c-format +msgid "Starting %s" +msgstr "%s ಅನ್ನು ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ" + +#: ../src/eggdesktopfile.c:1098 +#, c-format +msgid "Application does not accept documents on command line" +msgstr "ಅನ್ವಯವು ಆಜ್ಞಾ ಸಾಲಿನಲ್ಲಿ ದಸ್ತಾವೇಜುಗಳನ್ನು ಅಂಗೀಕರಿಸುವುದಿಲ್ಲ" + +#: ../src/eggdesktopfile.c:1166 +#, c-format +msgid "Unrecognized launch option: %d" +msgstr "ಗುರುತಿಸಲಾಗದ ಆರಂಭದ ಆಯ್ಕೆ: %d" + +#: ../src/eggdesktopfile.c:1365 +#, c-format +msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +msgstr "" +"ದಸ್ತಾವೇಜಿನ URI ಗಳನ್ನು ಒಂದು 'Type=Link' ಗಣಕತೆರೆ ನಮೂದಿಗೆ ರವಾನಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" + +#: ../src/eggdesktopfile.c:1384 +#, c-format +msgid "Not a launchable item" +msgstr "ಆರಂಭಿಸಬಹುದಾದ ಅಂಶವಾಗಿಲ್ಲ" + +#: ../src/eggsmclient.c:225 +msgid "Disable connection to session manager" +msgstr "ಅಧಿವೇಶನದ ವ್ಯವಸ್ಥಾಪಕನೊಂದಿಗಿನ ಸಂಪರ್ಕವನ್ನು ಅಶಕ್ತಗೊಳಿಸು" + +#: ../src/eggsmclient.c:228 +msgid "Specify file containing saved configuration" +msgstr "ಉಳಿಸಲಾದ ಸಂರಚನೆಯನ್ನು ಹೊಂದಿರುವ ಕಡತವನ್ನು ಸೂಚಿಸಿ" + +#: ../src/eggsmclient.c:228 +msgid "FILE" +msgstr "FILE" + +#: ../src/eggsmclient.c:231 +msgid "Specify session management ID" +msgstr "ಅಧೀವೇಶನ ವ್ಯವಸ್ಥಾಪನಾ ID ಯನ್ನು ಸೂಚಿಸಿ" + +#: ../src/eggsmclient.c:231 +msgid "ID" +msgstr "ID" + +#: ../src/eggsmclient.c:252 +msgid "Session management options:" +msgstr "ಅಧಿವೇಶನ ನಿರ್ವಹಣಾ ಆಯ್ಕೆಗಳು:" + +#: ../src/eggsmclient.c:253 +msgid "Show session management options" +msgstr "ಅಧಿವೇಶನ ವ್ಯವಸ್ಥಾಪನಾ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು" + +#: ../src/yelp-bookmarks.c:148 msgid "Open Bookmark in New Window" msgstr "ಬುಕ್ಮಾರ್ಕನ್ನು ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆ" -#: ../src/yelp-bookmarks.c:154 +#: ../src/yelp-bookmarks.c:152 msgid "Rename Bookmark" msgstr "ಬುಕ್ಮಾರ್ಕಿನ ಹೆಸರನ್ನು ಬದಲಾಯಿಸು" -#: ../src/yelp-bookmarks.c:158 +#: ../src/yelp-bookmarks.c:156 msgid "Remove Bookmark" msgstr "ಬುಕ್ಮಾರ್ಕನ್ನು ತೆಗೆದುಹಾಕು" -#: ../src/yelp-bookmarks.c:315 +#: ../src/yelp-bookmarks.c:314 #, c-format msgid "A bookmark titled %s already exists for this page." msgstr "ಈ ಪುಟಕ್ಕಾಗಿನ %s ಎಂಬ ಶೀರ್ಷಿಕೆಯ ಒಂದು ಬುಕ್ಮಾರ್ಕು ಈಗಾಗೆಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." -#: ../src/yelp-bookmarks.c:392 +#: ../src/yelp-bookmarks.c:390 #, c-format msgid "A bookmark titled <b>%s</b> already exists for this page." msgstr "ಈ ಪುಟಕ್ಕಾಗಿನ <b>%s</b> ಎಂಬ ಶೀರ್ಷಿಕೆಯ ಒಂದು ಬುಕ್ಮಾರ್ಕು ಈಗಾಗೆಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." -#: ../src/yelp-bookmarks.c:405 +#: ../src/yelp-bookmarks.c:403 msgid "Help Topics" msgstr "ನೆರವಿನ ವಿಷಯಗಳು" -#: ../src/yelp-bookmarks.c:420 +#: ../src/yelp-bookmarks.c:418 msgid "Document Sections" msgstr "ದಸ್ತಾವೇಜು ವಿಭಾಗಗಳು" #: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 #: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-man.c:292 ../src/yelp-man.c:385 -#: ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 +#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:284 ../src/yelp-mallard.c:384 +#: ../src/yelp-man.c:292 ../src/yelp-man.c:385 ../src/yelp-toc.c:266 +#: ../src/yelp-toc.c:365 msgid "Page not found" msgstr "ಪುಟವು ಕಂಡುಬಂದಿಲ್ಲ" #: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-man.c:293 +#: ../src/yelp-mallard.c:285 ../src/yelp-mallard.c:385 ../src/yelp-man.c:293 #, c-format msgid "The page %s was not found in the document %s." msgstr "%s ಪುಟವು %s ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಕಂಡುಬಂದಿಲ್ಲ." @@ -1046,16 +1086,20 @@ msgstr "ಕಡತವನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಆಗಲಿ msgid "" "The file ‘%s’ could not be parsed because it is not a well-formed XML " "document." -msgstr "ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು XML ಪುಟವಾಗಿಲ್ಲ." +msgstr "" +"ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು XML " +"ಪುಟವಾಗಿಲ್ಲ." #: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 #, c-format msgid "" "The file ‘%s’ could not be parsed because one or more of its included files " "is not a well-formed XML document." -msgstr "ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಒಳಗೊಂಡಿರುವ ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ ಕಡತಗಳು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು XML ಪುಟವಾಗಿಲ್ಲ." +msgstr "" +"ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಒಳಗೊಂಡಿರುವ ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ " +"ಕಡತಗಳು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು XML ಪುಟವಾಗಿಲ್ಲ." -#: ../src/yelp-db-print.c:765 ../src/yelp-docbook.c:786 +#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 msgid "Unknown" msgstr "ಗೊತ್ತಿಲ್ಲದ" @@ -1063,7 +1107,7 @@ msgstr "ಗೊತ್ತಿಲ್ಲದ" msgid "Unknown Error" msgstr "ಗೊತ್ತಿರದ ದೋಷ" -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1643 +#: ../src/yelp-error.c:136 ../src/yelp-window.c:1716 msgid "Could Not Read File" msgstr "ಕಡತವನ್ನು ಓದಲು ಆಗಲಿಲ್ಲ" @@ -1073,64 +1117,81 @@ msgstr "ಈ ದೋಷದ ಬಗ್ಗೆ ಯಾವುದೆ ಮಾಹಿತಿ #: ../src/yelp-info.c:396 #, c-format -msgid "The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು ಮಾಹಿತಿ (info) ಪುಟವಾಗಿಲ್ಲ." +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "" +"ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು ಮಾಹಿತಿ " +"(info) ಪುಟವಾಗಿಲ್ಲ." #: ../src/yelp-io-channel.c:132 #, c-format msgid "" "The file ‘%s’ could not be read and decoded. The file may be compressed in " "an unsupported format." -msgstr "ಕಡತ ‘%s’ ಅನ್ನು ಓದಿ ಡೀಕೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕಡತವನ್ನು ಬೆಂಬಲವಿಲ್ಲದ ಒಂದು ಬಗೆಯಲ್ಲಿ ಸಂಕುಚನಗೊಳಿಸಿರಬಹುದು." +msgstr "" +"ಕಡತ ‘%s’ ಅನ್ನು ಓದಿ ಡೀಕೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕಡತವನ್ನು ಬೆಂಬಲವಿಲ್ಲದ ಒಂದು ಬಗೆಯಲ್ಲಿ " +"ಸಂಕುಚನಗೊಳಿಸಿರಬಹುದು." -#: ../src/yelp-main.c:91 +#: ../src/yelp-main.c:88 msgid "Use a private session" msgstr "ಖಾಸಗಿ ಅಧಿವೇಶನವನ್ನು ಬಳಸು" -#: ../src/yelp-main.c:100 +#: ../src/yelp-main.c:97 msgid "Define which cache directory to use" msgstr "ಯಾವ ಕ್ಯಾಶೆ ಕೋಶವನ್ನು ಬಳಸಬೇಕು ಎಂದು ಸೂಚಿಸಿ" #. Commandline parsing is done here -#: ../src/yelp-main.c:357 +#: ../src/yelp-main.c:355 msgid " GNOME Help Browser" msgstr " GNOME ಸಹಾಯ ವೀಕ್ಷಕ" -#: ../src/yelp-main.c:377 ../yelp.desktop.in.in.h:2 +#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 msgid "Help" msgstr "ಸಹಾಯ" +#: ../src/yelp-mallard.c:315 +msgid "Directory not found" +msgstr "ಕೋಶವು ಕಂಡುಬಂದಿಲ್ಲ" + +#: ../src/yelp-mallard.c:316 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "ಕೋಶ ‘%s’ ಅಸ್ತಿತ್ವದಲ್ಲಿ ಇಲ್ಲ." + #: ../src/yelp-man.c:459 #, c-format -msgid "The file ‘%s’ could not be parsed because it is not a well-formed man page." -msgstr "ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು ಮ್ಯಾನ್ (man) ಪುಟವಾಗಿಲ್ಲ." +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed man page." +msgstr "" +"ಕಡತ ‘%s’ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಸೂಕ್ತವಾಗಿ ರಚಿಸಲಾದ ಒಂದು ಮ್ಯಾನ್ " +"(man) ಪುಟವಾಗಿಲ್ಲ." -#: ../src/yelp-print.c:97 +#: ../src/yelp-print.c:99 msgid "Print" msgstr "ಮುದ್ರಿಸು" -#: ../src/yelp-print.c:167 +#: ../src/yelp-print.c:169 msgid "Preparing to print" msgstr "ಮುದ್ರಣಕ್ಕೆ ಅಣಿಗೊಳ್ಳುತ್ತಿದೆ" -#: ../src/yelp-print.c:261 +#: ../src/yelp-print.c:263 msgid "Printing is not supported on this printer" msgstr "ಈ ಮುದ್ರಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಬೆಂಬಲವಿಲ್ಲ" -#: ../src/yelp-print.c:264 +#: ../src/yelp-print.c:266 #, c-format msgid "Printer %s does not support postscript printing." msgstr "ಮುದ್ರಕ %s ವು ಪೋಸ್ಟ್ಸ್ಕ್ರಿಪ್ಟ್ ಮುದ್ರಣವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ." -#: ../src/yelp-print.c:366 +#: ../src/yelp-print.c:368 msgid "Waiting to print" msgstr "ಮುದ್ರಿಸಲು ಕಾಯಲಾಗುತ್ತಿದೆ" -#: ../src/yelp-print.c:578 +#: ../src/yelp-print.c:580 msgid "An error occurred while printing" msgstr "ಮುದ್ರಿಸುವಾಗ ಒಂದು ದೋಷ ಕಂಡು ಬಂದಿದೆ" -#: ../src/yelp-print.c:582 +#: ../src/yelp-print.c:584 #, c-format msgid "It was not possible to print your document: %s" msgstr "ನಿಮ್ಮ ದಸ್ತಾವೇಜನ್ನು ಮುದ್ರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s" @@ -1148,7 +1209,9 @@ msgstr "\"%s\" ಗಾಗಿ ಯಾವುದೆ ಫಲಿತಾಂಶಗಳಿಲ msgid "" "Try using different words to describe the problem you're having or the topic " "you want help with." -msgstr "ನೀವು ಎದುರಿಸುತ್ತಿರುವ ತೊಂದರೆಯನ್ನು ಅಥವ ನಿಮಗೆ ನೆರವು ಬೇಕಿರುವ ವಿಷಯವನ್ನು ವಿವರಿಸಲು ಬೇರೆ ಪದಗಳನ್ನು ಬಳಸಿ." +msgstr "" +"ನೀವು ಎದುರಿಸುತ್ತಿರುವ ತೊಂದರೆಯನ್ನು ಅಥವ ನಿಮಗೆ ನೆರವು ಬೇಕಿರುವ ವಿಷಯವನ್ನು ವಿವರಿಸಲು ಬೇರೆ " +"ಪದಗಳನ್ನು ಬಳಸಿ." #: ../src/yelp-search-parser.c:289 #, c-format @@ -1246,28 +1309,28 @@ msgstr "" "TOC ಕಡತವನ್ನು ಪಾರ್ಸ್ ಮಾಡಲಾಗಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಒಂದು ಸೂಕ್ತವಾಗಿ ರಚಿತವಾಗಿರದ XML " "ದಸ್ತಾವೇಜಾಗಿದೆ." -#: ../src/yelp-transform.c:80 +#: ../src/yelp-transform.c:86 msgid "Invalid Stylesheet" msgstr "ಅಮಾನ್ಯವಾದ ಶೈಲಿಹಾಳೆ" -#: ../src/yelp-transform.c:81 +#: ../src/yelp-transform.c:87 #, c-format msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." msgstr "XSLT ಶೈಲಿಹಾಳೆ(ಸ್ಟೈಲ್ಶೀಟ್) ‘%s’ ಯು ಒಂದೊ ಕಾಣುತ್ತಿಲ್ಲ, ಅಥವ ಅಮಾನ್ಯವಾದುದಾಗಿದೆ." -#: ../src/yelp-transform.c:112 +#: ../src/yelp-transform.c:122 msgid "Broken Transformation" msgstr "ಭಿನ್ನಗೊಂಡ ಪರಿವರ್ತನೆ" -#: ../src/yelp-transform.c:113 +#: ../src/yelp-transform.c:123 msgid "An unknown error occurred while attempting to transform the document." msgstr "ದಸ್ತಾವೇಜನ್ನು ಪರಿವರ್ತಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ಒಂದು ಅಜ್ಞಾತ ದೋಷವು ಕಂಡುಬಂದಿದೆ." -#: ../src/yelp-transform.c:373 +#: ../src/yelp-transform.c:389 msgid "No href attribute found on yelp:document\n" msgstr "yelp:ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಯಾವುದೆ href ವೈಶಿಷ್ಟ್ಯವು ಕಂಡುಬಂದಿಲ್ಲ\n" -#: ../src/yelp-transform.c:388 +#: ../src/yelp-transform.c:404 msgid "Out of memory" msgstr "ಮೆಮೊರಿ ಇಲ್ಲ" @@ -1419,66 +1482,62 @@ msgstr "ತಂತ್ರಾಂಶದ ಬಗ್ಗೆ(_A)" msgid "Copy _Email Address" msgstr "ಇಮೈಲ್ ವಿಳಾಸವನ್ನು ಕಾಪಿ ಮಾಡು(_E)" -#: ../src/yelp-window.c:501 +#: ../src/yelp-window.c:524 msgid "Help Browser" msgstr "ಸಹಾಯ ವೀಕ್ಷಕ" -#: ../src/yelp-window.c:592 ../src/yelp-window.c:644 ../src/yelp-window.c:1700 +#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1779 msgid "Loading..." msgstr "ಓದುತ್ತಿದೆ..." -#: ../src/yelp-window.c:593 ../src/yelp-window.c:645 +#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 msgid "Unknown Page" msgstr "ಅಜ್ಞಾತ ಪುಟ" -#: ../src/yelp-window.c:1008 ../src/yelp-window.c:1064 -#: ../src/yelp-window.c:1084 +#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1105 +#: ../src/yelp-window.c:1114 #, c-format msgid "The requested URI \"%s\" is invalid" msgstr "ಮನವಿ ಸಲ್ಲಿಸಲಾದ URI \"%s\" ಅಮಾನ್ಯವಾಗಿದೆ" -#: ../src/yelp-window.c:1009 ../src/yelp-window.c:1066 -#: ../src/yelp-window.c:1085 +#: ../src/yelp-window.c:1044 ../src/yelp-window.c:1107 +#: ../src/yelp-window.c:1115 msgid "Unable to load page" msgstr "ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" -#: ../src/yelp-window.c:1079 -msgid "Error executing \"gnome-open\"" -msgstr "\"gnome-open\" ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ದೋಷ" - -#: ../src/yelp-window.c:1265 +#: ../src/yelp-window.c:1336 msgid "_Search:" msgstr "ಹುಡುಕು(_S):" -#: ../src/yelp-window.c:1266 +#: ../src/yelp-window.c:1337 msgid "Search for other documentation" msgstr "ಇತರೆ ದಸ್ತಾವೇಜುಗಳನ್ನು ಹುಡುಕು" -#: ../src/yelp-window.c:1286 +#: ../src/yelp-window.c:1357 msgid "Cannot create window" msgstr "ಹೊಸ ವಿಂಡೋವನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" -#: ../src/yelp-window.c:1292 +#: ../src/yelp-window.c:1363 msgid "Cannot create search component" msgstr "ಹುಡುಕು ಅಂಗವನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" -#: ../src/yelp-window.c:1464 +#: ../src/yelp-window.c:1535 msgid "Fin_d:" msgstr "ಹುಡುಕು(_d):" -#: ../src/yelp-window.c:1486 +#: ../src/yelp-window.c:1557 msgid "Find _Previous" msgstr "ಹಿಂದಿನದನ್ನು ಹುಡುಕು(_P)" -#: ../src/yelp-window.c:1498 +#: ../src/yelp-window.c:1569 msgid "Find _Next" msgstr "ಮುಂದಿನದನ್ನು ಹುಡುಕು(_N)" -#: ../src/yelp-window.c:1511 +#: ../src/yelp-window.c:1582 msgid "Phrase not found" msgstr "ಪದವು ಕಂಡುಬಂದಿಲ್ಲ" -#: ../src/yelp-window.c:1640 +#: ../src/yelp-window.c:1713 #, c-format msgid "" "The file ‘%s’ could not be read. This file might be missing, or you might " @@ -1489,19 +1548,18 @@ msgstr "" #. Note to translators: put here your name (and address) so it #. * will show up in the "about" box -#: ../src/yelp-window.c:2480 +#: ../src/yelp-window.c:2604 msgid "translator-credits" msgstr "ಪ್ರಮೋದ್.ಆರ್, ಶಂಕರ್ ಪ್ರಸಾದ್ <svenkate@redhat.com>" -#: ../src/yelp-window.c:2483 +#: ../src/yelp-window.c:2607 msgid "Yelp" msgstr "ಯೆಲ್ಪ್" -#: ../src/yelp-window.c:2485 +#: ../src/yelp-window.c:2609 msgid "A documentation browser and viewer for the Gnome Desktop." msgstr "Gnome Desktop ಗಾಗಿನ ಒಂದು ದಸ್ತಾವೇಜು ವೀಕ್ಷಕ ಹಾಗು ನೋಡುಗ." #: ../yelp.desktop.in.in.h:1 msgid "Get help with GNOME" msgstr "GNOME ಬಗ್ಗೆ ನೆರವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ" - @@ -1,13 +1,13 @@ # Norwegian (bokmål) translation of yelp. # Copyright © 2001-2004 Free Software Foundation, Inc. -# Kjartan Maraas <kmaraas@gnome.org>, 2001-2009. +# Kjartan Maraas <kmaraas@gnome.org>, 2001-2010. # msgid "" msgstr "" -"Project-Id-Version: yelp 2.27.x\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-09-01 14:28+0200\n" -"PO-Revision-Date: 2009-09-01 14:29+0200\n" +"Project-Id-Version: yelp 2.30.x\n" +"Report-Msgid-Bugs-To:\n" +"POT-Creation-Date: 2010-05-02 11:33+0200\n" +"PO-Revision-Date: 2010-05-02 11:38+0200\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norsk (bokmål) <i18n-nb@lister.ping.uio.no>\n" "MIME-Version: 1.0\n" @@ -286,7 +286,7 @@ msgstr "2D-grafikk" msgid "3D Graphics" msgstr "3D-grafikk" -#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 +#: ../data/toc.xml.in.h:3 msgid "Accessibility" msgstr "Tilgjengelighet" @@ -864,89 +864,281 @@ msgstr "Velkommen til GNOME hjelpleser" msgid "Word Processors" msgstr "Tekstbehandlere" -#: ../data/ui/yelp-bookmarks.ui.h:1 -msgid "Bookmarks" -msgstr "Bokmerke" +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:147 +msgid "Invalid compressed data" +msgstr "Ugyldige komprimerte data" -#: ../data/ui/yelp-bookmarks.ui.h:2 -msgid "Re_name" -msgstr "E_ndre navn" +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:153 +msgid "Not enough memory" +msgstr "Ikke nok minne" -#: ../data/ui/yelp-bookmarks.ui.h:3 -msgid "_Bookmarks:" -msgstr "_Bokmerker:" +#: ../libyelp/yelp-docbook-document.c:264 ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 +#, c-format +msgid "The page ‘%s’ was not found in the document ‘%s’." +msgstr "Siden «%s» ble ikke funnet i dokumentet «%s»." -#: ../data/ui/yelp-bookmarks-add.ui.h:1 -msgid "Add Bookmark" -msgstr "Legg til bokmerke" +#: ../libyelp/yelp-docbook-document.c:298 ../libyelp/yelp-info-document.c:366 +#, c-format +msgid "The file does not exist." +msgstr "Filen eksisterer ikke." -#: ../data/ui/yelp-bookmarks-add.ui.h:2 -msgid "_Title:" -msgstr "_Tittel:" +#: ../libyelp/yelp-docbook-document.c:308 ../libyelp/yelp-info-document.c:376 +#: ../src/yelp-db-print.c:393 ../src/yelp-man.c:430 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "Filen «%s» eksisterer ikke." -#: ../data/ui/yelp-open-location.ui.h:1 -msgid "Open Location" -msgstr "Åpne lokasjon" +#: ../libyelp/yelp-docbook-document.c:323 ../src/yelp-db-print.c:407 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "" +"Filen «%s» kunne ikke leses fordi den ikke er et gyldig utformet XML-dokument." -#: ../data/ui/yelp-open-location.ui.h:2 -msgid "_Location:" -msgstr "_Lokasjon:" +#: ../libyelp/yelp-docbook-document.c:336 ../src/yelp-db-print.c:419 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"Filen «%s» kunne ikke tolkes fordi den eller en inkludert fil ikke er " +"velformet XML." -#: ../data/ui/yelp-preferences.ui.h:2 -msgid "Fonts" -msgstr "Skrifter" +#: ../libyelp/yelp-docbook-document.c:720 ../src/yelp-db-print.c:766 +msgid "Unknown" +msgstr "Ukjent" -#: ../data/ui/yelp-preferences.ui.h:3 -msgid "Preferences" -msgstr "Brukervalg" +#: ../libyelp/yelp-docbook-document.c:781 ../libyelp/yelp-info-document.c:309 +#, c-format +msgid "The requested page was not found in the document ‘%s’." +msgstr "Etterspurt side ble ikke funnet i dokument «%s»." -#: ../data/ui/yelp-preferences.ui.h:4 -msgid "_Browse with caret" -msgstr "_Bruk markør" +#: ../libyelp/yelp-error.c:33 +#, c-format +msgid "An unknown error occurred." +msgstr "En ukjent feil oppsto." -#: ../data/ui/yelp-preferences.ui.h:5 -msgid "_Fixed width:" -msgstr "_Fast bredde:" +#: ../libyelp/yelp-info-document.c:391 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "Filen «%s» kunne ikke tolkes fordi den ikke er en velformet info-side." -#: ../data/ui/yelp-preferences.ui.h:6 -msgid "_Use system fonts" -msgstr "Br_uk systemets skrifter" +#: ../libyelp/yelp-io-channel.c:125 +#, c-format +msgid "" +"The file ‘%s’ could not be read and decoded. The file may be compressed in " +"an unsupported format." +msgstr "" +"Filen «%s» kunne ikke leses og dekodes. Filen kan være komprimert i et format " +"som ikke støttes." -#: ../data/ui/yelp-preferences.ui.h:7 -msgid "_Variable width:" -msgstr "_Variabel bredde:" +#: ../libyelp/yelp-location-entry.c:246 +msgid "Description Column" +msgstr "Beskrivelseskolonne" -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Skrift for fast tekst" +#: ../libyelp/yelp-location-entry.c:247 +msgid "A column in the model to descriptions from" +msgstr "" -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Skrift for tekst" +#: ../libyelp/yelp-location-entry.c:262 +msgid "Icon Column" +msgstr "Ikonkolonne" -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Skrift for tekst med fast bredde." +#: ../libyelp/yelp-location-entry.c:263 +msgid "A column in the model to get icon names from" +msgstr "" -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Skrift for tekst med variabel bredde." +#: ../libyelp/yelp-location-entry.c:278 +msgid "Flags Column" +msgstr "" -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "Bruk tastaturkontrollert markør ved visning av sider." +#: ../libyelp/yelp-location-entry.c:279 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "" -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Bruk markør" +#: ../libyelp/yelp-location-entry.c:295 +msgid "Enable Search" +msgstr "Slå på søk" -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Bruk systemets skrifter" +#: ../libyelp/yelp-location-entry.c:296 +msgid "Whether the location entry can be used as a search field" +msgstr "Om lokasjonsfeltet kan brukes som et søkefelt" -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Bruk systemets forvalgte skrifter." +#: ../libyelp/yelp-mallard-document.c:294 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "Katalogen «%s» eksisterer ikke." + +#: ../libyelp/yelp-settings.c:146 +msgid "GtkSettings" +msgstr "GtkSettings" + +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "" + +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "GtkIconTheme" + +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "" + +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "Justering av skrift" + +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "" + +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" +msgstr "Vis tekstmarkør" + +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" +msgstr "" + +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "Redigeringsmodus" + +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "" + +#: ../libyelp/yelp-transform.c:171 +msgid "XSLT Stylesheet" +msgstr "XSLT-stilark" + +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "" + +#: ../libyelp/yelp-transform.c:379 ../libyelp/yelp-transform.c:394 +#, fuzzy, c-format +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." +msgstr "XSLT-stilark «%s» mangler eller er ugyldig." + +#: ../libyelp/yelp-transform.c:528 +msgid "No href attribute found on yelp:document\n" +msgstr "Ingen href-attributt funnet på yelp:document\n" + +#: ../libyelp/yelp-transform.c:543 +msgid "Out of memory" +msgstr "Ikke mer minne" + +#: ../libyelp/yelp-view.c:92 +msgid "_Back" +msgstr "Til_bake" + +#: ../libyelp/yelp-view.c:97 +msgid "_Forward" +msgstr "_Fremover" + +#: ../libyelp/yelp-view.c:102 +msgid "_Previous Page" +msgstr "_Forrige side" + +#: ../libyelp/yelp-view.c:107 +msgid "_Next Page" +msgstr "_Neste side" + +#: ../libyelp/yelp-view.c:310 +msgid "Yelp URI" +msgstr "Yelp URI" + +#: ../libyelp/yelp-view.c:311 +msgid "A YelpUri with the current location" +msgstr "" + +#: ../libyelp/yelp-view.c:319 +msgid "Loading State" +msgstr "Laster tilstand" + +#: ../libyelp/yelp-view.c:320 +msgid "The loading state of the view" +msgstr "" + +#: ../libyelp/yelp-view.c:329 +msgid "Page ID" +msgstr "Side-ID" + +#: ../libyelp/yelp-view.c:330 +msgid "The ID of the root page of the page being viewew" +msgstr "" + +#: ../libyelp/yelp-view.c:338 +msgid "Root Title" +msgstr "" + +#: ../libyelp/yelp-view.c:339 +msgid "The title of the root page of the page being viewew" +msgstr "" + +#: ../libyelp/yelp-view.c:347 +msgid "Page Title" +msgstr "Sidetittel" + +#: ../libyelp/yelp-view.c:348 +msgid "The title of the page being viewed" +msgstr "" + +#: ../libyelp/yelp-view.c:356 +msgid "Page Description" +msgstr "Beskrivelse av side" + +#: ../libyelp/yelp-view.c:357 +msgid "The description of the page being viewed" +msgstr "" + +#: ../libyelp/yelp-view.c:365 +msgid "Page Icon" +msgstr "Sideikon" + +#: ../libyelp/yelp-view.c:366 +msgid "The icon of the page being viewed" +msgstr "" + +#: ../libyelp/yelp-view.c:683 +#, c-format +msgid "Could not load a document for ‘%s’" +msgstr "Kunne ikke laste dokument for «%s»" + +#: ../libyelp/yelp-view.c:689 +#, c-format +msgid "Could not load a document" +msgstr "Kunne ikke laste et dokument" + +#: ../libyelp/yelp-view.c:756 +msgid "Not Found" +msgstr "Ikke funnet" + +#: ../libyelp/yelp-view.c:759 +msgid "Cannot Read" +msgstr "Kan ikke lese" + +#: ../libyelp/yelp-view.c:765 ../src/yelp-error.c:132 ../src/yelp-error.c:139 +msgid "Unknown Error" +msgstr "Ukjent feil" + +#: ../libyelp/yelp-view.c:855 +#, fuzzy, c-format +msgid "The URI ‘%s’ does point to a valid page." +msgstr "Filen «%s» eksisterer ikke." + +#: ../libyelp/yelp-view.c:863 +#, c-format +msgid "The URI ‘%s’ could not be parsed." +msgstr "URI «%s» kunne ikke tolkes." #: ../src/eggdesktopfile.c:165 #, c-format @@ -1011,99 +1203,66 @@ msgstr "Alternativer for sesjonshåndtering:" msgid "Show session management options" msgstr "Vis alternativer for sesjonshåndtering" -#: ../src/yelp-bookmarks.c:148 -msgid "Open Bookmark in New Window" -msgstr "Åpne bokmerke i nytt vindu" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "" -#: ../src/yelp-bookmarks.c:152 -msgid "Rename Bookmark" -msgstr "Endre navn på bokmerke" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "_Større tekst" -#: ../src/yelp-bookmarks.c:156 -msgid "Remove Bookmark" -msgstr "Fjern bokmerke" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "Øk størrelsen på teksten" -#: ../src/yelp-bookmarks.c:314 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Et bokmerke med navn %s eksisterer allerede for denne siden." +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "_Mindre tekst" -#: ../src/yelp-bookmarks.c:390 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "Et bokmerke med navn <b>%s</b> eksisterer allerede for denne siden." - -#: ../src/yelp-bookmarks.c:403 -msgid "Help Topics" -msgstr "Hjelpemner" - -#: ../src/yelp-bookmarks.c:418 -msgid "Document Sections" -msgstr "Dokumentdeler" - -#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:280 ../src/yelp-mallard.c:380 -#: ../src/yelp-man.c:292 ../src/yelp-man.c:385 ../src/yelp-toc.c:266 -#: ../src/yelp-toc.c:365 +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "" + +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "" + +#: ../src/yelp-application.c:297 ../src/yelp-main.c:386 +#: ../src/yelp-window.c:1000 ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "Hjelp" + +#: ../src/yelp-application.c:547 +msgid "" +"You do not have PackageKit installed. Package installation links require " +"PackageKit." +msgstr "" + +#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 ../src/yelp-man.c:292 +#: ../src/yelp-man.c:385 ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 msgid "Page not found" msgstr "Side ikke funnet" -#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-mallard.c:281 ../src/yelp-mallard.c:381 ../src/yelp-man.c:293 +#: ../src/yelp-db-print.c:259 ../src/yelp-man.c:293 #, c-format msgid "The page %s was not found in the document %s." msgstr "Siden %s ble ikke funnet i dokument %s." -#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 -#: ../src/yelp-man.c:386 +#: ../src/yelp-db-print.c:351 ../src/yelp-man.c:386 #, c-format msgid "The requested page was not found in the document %s." msgstr "Etterspurt side ble ikke funnet i dokument %s." -#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 -#: ../src/yelp-man.c:429 +#: ../src/yelp-db-print.c:392 ../src/yelp-man.c:429 msgid "File not found" msgstr "Fil ikke funnet" -#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 -#: ../src/yelp-man.c:430 -#, c-format -msgid "The file ‘%s’ does not exist." -msgstr "Filen «%s» eksisterer ikke." - -#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 -#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 +#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 ../src/yelp-man.c:458 +#: ../src/yelp-toc.c:437 msgid "Could not parse file" msgstr "Kunne ikke lese fil" -#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed XML " -"document." -msgstr "" -"Filen «%s» kunne ikke leses fordi den ikke er et gyldig utformet XML-dokument." - -#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because one or more of its included files " -"is not a well-formed XML document." -msgstr "" -"Filen «%s» kunne ikke tolkes fordi den eller en inkludert fil ikke er " -"velformet XML." - -#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 -msgid "Unknown" -msgstr "Ukjent" - -#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 -msgid "Unknown Error" -msgstr "Ukjent feil" - -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1723 +#: ../src/yelp-error.c:136 msgid "Could Not Read File" msgstr "Kunne ikke lese filen" @@ -1111,47 +1270,19 @@ msgstr "Kunne ikke lese filen" msgid "No information is available about this error." msgstr "Ingen informasjon er tilgjengelig om denne feilen." -#: ../src/yelp-info.c:396 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "Filen «%s» kunne ikke tolkes fordi den ikke er en velformet info-side." - -#: ../src/yelp-io-channel.c:132 -#, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." -msgstr "" -"Filen «%s» kunne ikke leses og dekodes. Filen kan være komprimert i et format " -"som ikke støttes." - -#: ../src/yelp-main.c:88 +#: ../src/yelp-main.c:89 msgid "Use a private session" msgstr "Bruk en privat sesjon" -#: ../src/yelp-main.c:97 +#: ../src/yelp-main.c:98 msgid "Define which cache directory to use" msgstr "Definer hvilken bufferkatalog som skal brukes" #. Commandline parsing is done here -#: ../src/yelp-main.c:355 +#: ../src/yelp-main.c:357 msgid " GNOME Help Browser" msgstr "GNOME hjelpleser" -#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Hjelp" - -#: ../src/yelp-mallard.c:311 -msgid "Directory not found" -msgstr "Katalog ikke funnet" - -#: ../src/yelp-mallard.c:312 -#, c-format -msgid "The directory ‘%s’ does not exist." -msgstr "Katalogen «%s» eksisterer ikke." - #: ../src/yelp-man.c:459 #, c-format msgid "" @@ -1300,256 +1431,53 @@ msgstr "" "Innholdsfortegnelsen kunne ikke tolkes fordi den ikke er et velformet XML-" "dokument." -#: ../src/yelp-transform.c:86 -msgid "Invalid Stylesheet" -msgstr "Ugyldig stilark" - -#: ../src/yelp-transform.c:87 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "XSLT-stilark «%s» mangler eller er ugyldig." +#: ../src/yelp-window.c:203 +msgid "_Page" +msgstr "Si_de" -#: ../src/yelp-transform.c:122 -msgid "Broken Transformation" -msgstr "Feil i transformasjon" +#: ../src/yelp-window.c:204 +msgid "_View" +msgstr "_Visning" -#: ../src/yelp-transform.c:123 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "En ukjent feil oppsto under forsøk på å transformere dokumentet." - -#: ../src/yelp-transform.c:389 -msgid "No href attribute found on yelp:document\n" -msgstr "Ingen href-attributt funnet på yelp:document\n" - -#: ../src/yelp-transform.c:404 -msgid "Out of memory" -msgstr "Ikke mer minne" - -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "_Fil" - -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "R_ediger" - -#: ../src/yelp-window.c:306 +#: ../src/yelp-window.c:205 msgid "_Go" msgstr "_Naviger" -#: ../src/yelp-window.c:307 +#: ../src/yelp-window.c:206 msgid "_Bookmarks" msgstr "_Bokmerker" -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "_Hjelp" - -#: ../src/yelp-window.c:311 +#: ../src/yelp-window.c:209 msgid "_New Window" msgstr "_Nytt vindu" -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "Skriv ut dette dokumentet..." - -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "Skriv ut denne siden..." - -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "Om dette dokumentet" - -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "Åpne _lokasjon" - -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "_Lukk vindu" - -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "_Kopier" - -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "_Velg alt" - -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "_Finn..." - -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "Finn f_orrige" - -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "Finn forrige oppføring av ordet eller frasen" - -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "Finn ne_ste" - -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "Finn neste oppføring av ordet eller frasen" - -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "_Brukervalg" - -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "_Gjenles" - -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "Til_bake" - -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "Vis forrige side i historikken" - -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "_Fremover" - -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "Vis neste side i historikken" - -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "_Hjelpemner" +#: ../src/yelp-window.c:214 +msgid "_Close" +msgstr "_Lukk" -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "Gå til listen over hjelpemner" - -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "_Forrige del" - -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "_Neste del" - -#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "_Innhold" - -#: ../src/yelp-window.c:416 +#: ../src/yelp-window.c:219 msgid "_Add Bookmark" msgstr "_Legg til bokmerke" -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "R_ediger bokmerker..." - -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "Å_pne lenke" - -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "Åpne lenke i _nytt vindu" - -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "_Kopier lenkens adresse" - -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "Hjelp for dette programmet" - -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "_Om" - -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "Kopier e-postadresse" - -#: ../src/yelp-window.c:524 -msgid "Help Browser" -msgstr "Hjelp leser" - -#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1785 -msgid "Loading..." -msgstr "Laster..." - -#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 -msgid "Unknown Page" -msgstr "Ukjent side" - -#: ../src/yelp-window.c:1042 ../src/yelp-window.c:1104 -#: ../src/yelp-window.c:1113 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "Etterspurt URI «%s» er ugyldig" - -#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1106 -#: ../src/yelp-window.c:1114 -msgid "Unable to load page" -msgstr "Kan ikke laste siden" - -#: ../src/yelp-window.c:1343 -msgid "_Search:" -msgstr "_Søk:" - -#: ../src/yelp-window.c:1344 -msgid "Search for other documentation" -msgstr "Søk etter annen dokumentasjon" - -#: ../src/yelp-window.c:1364 -msgid "Cannot create window" -msgstr "Kan ikke opprette vindu" - -#: ../src/yelp-window.c:1370 -msgid "Cannot create search component" -msgstr "Kan ikke opprette søkekomponent" - -#: ../src/yelp-window.c:1542 -msgid "Fin_d:" -msgstr "_Finn:" +#: ../src/yelp-window.c:224 +msgid "Open Location" +msgstr "Åpne lokasjon" -#: ../src/yelp-window.c:1564 -msgid "Find _Previous" -msgstr "_Finn forrige" +#: ../src/yelp-window.c:249 +msgid "Application" +msgstr "Program" -#: ../src/yelp-window.c:1576 -msgid "Find _Next" -msgstr "Finn _neste" +#: ../src/yelp-window.c:250 +msgid "A YelpApplication instance that controls this window" +msgstr "" -#: ../src/yelp-window.c:1589 -msgid "Phrase not found" -msgstr "Frase ikke funnet" +#: ../src/yelp-window.c:416 +msgid "Search..." +msgstr "Søk..." -#: ../src/yelp-window.c:1720 -#, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "" -"Filen «%s» kunne ikke leses. Filen kan mangle eller kanskje du ikke har " -"rettigheter til å lese den." - -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2602 -msgid "translator-credits" -msgstr "Kjartan Maraas <kmaraas@gnome.org>" - -#: ../src/yelp-window.c:2605 -msgid "Yelp" -msgstr "Yelp" - -#: ../src/yelp-window.c:2607 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "Program for å finne og lese dokumentasjon for GNOME skrivebordet." +#: ../src/yelp-window.c:945 +msgid "Loading" +msgstr "Laster" #: ../yelp.desktop.in.in.h:1 msgid "Get help with GNOME" @@ -3,13 +3,13 @@ # This file is distributed under the same license as the yelp package. # Copyright (C) 2005 Free Software Foundation,Inc. # -# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2006-2008. +# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2006-2008, 2010. msgid "" msgstr "" "Project-Id-Version: oc\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-07-02 09:01+0200\n" -"PO-Revision-Date: 2008-08-06 02:41+0200\n" +"PO-Revision-Date: 2010-04-14 18:40+0200\n" "Last-Translator: Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>\n" "Language-Team: Occitan <ubuntu-l10n-oci@lists.ubuntu.com>\n" "MIME-Version: 1.0\n" @@ -59,7 +59,7 @@ msgstr "Periferics materials" #: ../data/man.xml.in.h:9 msgid "Kernel Routines" -msgstr "" +msgstr "Rotinas del nucli" #: ../data/man.xml.in.h:10 msgid "Manual Pages" @@ -239,7 +239,7 @@ msgstr "Administracion sistèma" #: ../data/man.xml.in.h:54 msgid "System Calls" -msgstr "" +msgstr "Apèls del sistèma" #: ../data/man.xml.in.h:55 msgid "System V Form/Menu Functions" @@ -283,11 +283,11 @@ msgstr "Presentacion de X11" #: ../data/toc.xml.in.h:1 msgid "2D Graphics" -msgstr "" +msgstr "Grafismes 2D" #: ../data/toc.xml.in.h:2 msgid "3D Graphics" -msgstr "" +msgstr "Grafismes 3D" #: ../data/toc.xml.in.h:3 msgid "Accessibility" @@ -307,11 +307,11 @@ msgstr "Divertiment" #: ../data/toc.xml.in.h:7 msgid "Applications for viewing and manipulating graphics" -msgstr "" +msgstr "Aplicacions per afichar o manipular de grafics" #: ../data/toc.xml.in.h:8 msgid "Applications related to audio and video" -msgstr "" +msgstr "Aplicacions ligadas a l'àudio o a la vidèo" #: ../data/toc.xml.in.h:9 msgid "Applications that teach or aid in learning" @@ -319,11 +319,11 @@ msgstr "Aplicacions per ensenhar o ajudar a aprene" #: ../data/toc.xml.in.h:10 msgid "Arcade Games" -msgstr "" +msgstr "Jòcs d'arcada" #: ../data/toc.xml.in.h:11 msgid "Archiving Tools" -msgstr "" +msgstr "Espleches d'archivatge" #: ../data/toc.xml.in.h:12 msgid "Art" @@ -343,15 +343,15 @@ msgstr "Biologia" #: ../data/toc.xml.in.h:16 msgid "Blocks Games" -msgstr "" +msgstr "Jòcs de blòcs" #: ../data/toc.xml.in.h:17 msgid "Board Games" -msgstr "" +msgstr "Jòcs de platèus" #: ../data/toc.xml.in.h:18 msgid "Building" -msgstr "" +msgstr "Construccion" #: ../data/toc.xml.in.h:19 msgid "Calculator" @@ -367,7 +367,7 @@ msgstr "Jòcs de cartas" #: ../data/toc.xml.in.h:22 msgid "Charting Tools" -msgstr "" +msgstr "Espleches de diagramas" #: ../data/toc.xml.in.h:23 msgid "Chat" @@ -395,11 +395,11 @@ msgstr "Construccion" #: ../data/toc.xml.in.h:29 msgid "Contact Management" -msgstr "" +msgstr "Gestion dels contactes" #: ../data/toc.xml.in.h:30 msgid "Data Visualization" -msgstr "" +msgstr "Visualizacion de donadas" #: ../data/toc.xml.in.h:31 msgid "Databases" @@ -407,7 +407,7 @@ msgstr "Basas de donadas" #: ../data/toc.xml.in.h:32 msgid "Debuggers" -msgstr "" +msgstr "Desbugadors" #: ../data/toc.xml.in.h:33 msgid "Desktop" @@ -419,7 +419,7 @@ msgstr "Paramètres del burèu" #: ../data/toc.xml.in.h:36 msgid "Dialup" -msgstr "" +msgstr "Connexions comutadas" #: ../data/toc.xml.in.h:37 msgid "Dictionaries" @@ -428,7 +428,7 @@ msgstr "Diccionaris" #. Translators: this is a menu title for burning audio and video to dics #: ../data/toc.xml.in.h:39 msgid "Disc Burning" -msgstr "" +msgstr "Gravadura de disques" #: ../data/toc.xml.in.h:40 msgid "Economy" @@ -448,15 +448,15 @@ msgstr "Electronica" #: ../data/toc.xml.in.h:44 msgid "Email Tools" -msgstr "" +msgstr "Espleches de messatjariá" #: ../data/toc.xml.in.h:45 msgid "Emulator" -msgstr "" +msgstr "Emulator" #: ../data/toc.xml.in.h:46 msgid "Engineering" -msgstr "" +msgstr "Ingenhiariá" #: ../data/toc.xml.in.h:47 msgid "File Manager" @@ -476,11 +476,11 @@ msgstr "Sistèma de fichièrs" #: ../data/toc.xml.in.h:51 msgid "Financial Tools" -msgstr "" +msgstr "Espleches financièrs" #: ../data/toc.xml.in.h:52 msgid "Flow Charting Tools" -msgstr "" +msgstr "Espleches de diagramas de flux" #: ../data/toc.xml.in.h:53 msgid "GNOME Applications" @@ -492,7 +492,7 @@ msgstr "GTK" #: ../data/toc.xml.in.h:55 msgid "GUI Designers" -msgstr "" +msgstr "Conceptors d'interfàcia grafica d'utilizaire" #: ../data/toc.xml.in.h:57 msgid "Generic applications for the GNOME environment" @@ -512,7 +512,7 @@ msgstr "Geologia" #: ../data/toc.xml.in.h:61 msgid "Geoscience" -msgstr "" +msgstr "Geosciéncia" #: ../data/toc.xml.in.h:62 msgid "Graphics" @@ -520,23 +520,23 @@ msgstr "Grafisme" #: ../data/toc.xml.in.h:63 msgid "Guides and manuals for applications that connect to the outside world" -msgstr "" +msgstr "Guidas e manuals de las aplicacions que se connèctan al mond exterior" #: ../data/toc.xml.in.h:64 msgid "Guides for getting involved in development" -msgstr "" +msgstr "Guidas d'introduccion al desvolopament" #: ../data/toc.xml.in.h:65 msgid "Ham Radio" -msgstr "" +msgstr "Ràdio amator" #: ../data/toc.xml.in.h:66 msgid "Hardware Settings" -msgstr "" +msgstr "Configuracion materiala" #: ../data/toc.xml.in.h:67 msgid "Have some fun" -msgstr "" +msgstr "Divertiment" #: ../data/toc.xml.in.h:68 msgid "History" @@ -544,7 +544,7 @@ msgstr "Istoric" #: ../data/toc.xml.in.h:69 msgid "IDEs" -msgstr "" +msgstr "Environaments de desvolopament integrat" #: ../data/toc.xml.in.h:70 msgid "IRC Clients" @@ -552,7 +552,7 @@ msgstr "Clients IRC" #: ../data/toc.xml.in.h:71 msgid "Image Processing" -msgstr "" +msgstr "Tractament dels imatges" #: ../data/toc.xml.in.h:72 msgid "Instant Messaging" @@ -579,10 +579,12 @@ msgid "" "Learn more about making your system more accessible for a range of " "disabilities" msgstr "" +"Ne saber mai sul biais de rendre vòstre sistèma mai accessible a las " +"personas que patisson d'andicaps" #: ../data/toc.xml.in.h:78 msgid "Licenses" -msgstr "" +msgstr "Licéncias" #: ../data/toc.xml.in.h:79 msgid "Literature" @@ -598,7 +600,7 @@ msgstr "Matematicas" #: ../data/toc.xml.in.h:82 msgid "Medical Software" -msgstr "" +msgstr "Logicial medical" #: ../data/toc.xml.in.h:83 msgid "Midi" @@ -610,15 +612,15 @@ msgstr "Documentacion divèrsa" #: ../data/toc.xml.in.h:85 msgid "Mixers" -msgstr "" +msgstr "Mixadors" #: ../data/toc.xml.in.h:86 msgid "Monitor" -msgstr "" +msgstr "Ecran" #: ../data/toc.xml.in.h:87 msgid "Motif" -msgstr "" +msgstr "Motiu" #: ../data/toc.xml.in.h:88 msgid "Music" @@ -630,7 +632,7 @@ msgstr "Novèlas" #: ../data/toc.xml.in.h:90 msgid "Numerical Analysis" -msgstr "" +msgstr "Analisi numeric" #: ../data/toc.xml.in.h:91 msgid "OCR" @@ -654,7 +656,7 @@ msgstr "P2P" #: ../data/toc.xml.in.h:96 msgid "PDA Communication" -msgstr "" +msgstr "Comunicacion PDA" #: ../data/toc.xml.in.h:97 msgid "Package Manager" @@ -662,7 +664,7 @@ msgstr "Gestinari de paquetatges" #: ../data/toc.xml.in.h:98 msgid "Parallel Computing" -msgstr "" +msgstr "Calcul parallèl" #: ../data/toc.xml.in.h:99 msgid "Photography" @@ -679,7 +681,7 @@ msgstr "Jogaires" #: ../data/toc.xml.in.h:103 msgid "Presentation Tools" -msgstr "" +msgstr "Espleches de presentacion" #: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 msgid "Printing" @@ -687,11 +689,11 @@ msgstr "Estampatge" #: ../data/toc.xml.in.h:105 msgid "Profiling Tools" -msgstr "" +msgstr "Espleches d'analisi" #: ../data/toc.xml.in.h:106 msgid "Project Management Tools" -msgstr "" +msgstr "Espleches de gestion de projècte" #: ../data/toc.xml.in.h:107 msgid "Publishing" @@ -703,12 +705,12 @@ msgstr "Qt" #: ../data/toc.xml.in.h:109 msgid "Raster Graphics" -msgstr "" +msgstr "Rendut de grafismes" #. Translators: this is a menu title for audio and video recorders #: ../data/toc.xml.in.h:111 msgid "Recorders" -msgstr "" +msgstr "Enregistradors" #: ../data/toc.xml.in.h:112 msgid "Remote Access" @@ -716,7 +718,7 @@ msgstr "Accès distant" #: ../data/toc.xml.in.h:113 msgid "Revision Control" -msgstr "" +msgstr "Gestion de versions" #: ../data/toc.xml.in.h:114 msgid "Robotics" @@ -724,11 +726,11 @@ msgstr "Robotica" #: ../data/toc.xml.in.h:115 msgid "Role Playing Games" -msgstr "" +msgstr "Jòcs de ròtle" #: ../data/toc.xml.in.h:116 msgid "Scanning" -msgstr "" +msgstr "Fintar" #: ../data/toc.xml.in.h:117 msgid "Science" @@ -740,7 +742,7 @@ msgstr "Seguritat" #: ../data/toc.xml.in.h:119 msgid "Sequencers" -msgstr "" +msgstr "Sequenciadors" #: ../data/toc.xml.in.h:120 msgid "Settings" @@ -749,10 +751,12 @@ msgstr "Paramètres" #: ../data/toc.xml.in.h:121 msgid "Settings users can manipulate to make their environment more pleasant" msgstr "" +"Paramètres que los utilizares pòdon modificar per far lor environament mai " +"agradiu" #: ../data/toc.xml.in.h:122 msgid "Simulation Games" -msgstr "" +msgstr "Jòcs de simulacion" #: ../data/toc.xml.in.h:123 msgid "Sound" @@ -764,7 +768,7 @@ msgstr "Son e videò" #: ../data/toc.xml.in.h:125 msgid "Sound & Video Editing" -msgstr "" +msgstr "Edicion sonòra e vidèo" #: ../data/toc.xml.in.h:126 msgid "Sports" @@ -792,15 +796,15 @@ msgstr "TV" #: ../data/toc.xml.in.h:132 msgid "Telephony" -msgstr "" +msgstr "Telefoniá" #: ../data/toc.xml.in.h:133 msgid "Telephony Tools" -msgstr "" +msgstr "Espleches de telefoniá" #: ../data/toc.xml.in.h:134 msgid "Terminal Emulator" -msgstr "" +msgstr "Emulador de terminal" #: ../data/toc.xml.in.h:135 msgid "Text Editors" @@ -820,7 +824,7 @@ msgstr "Espleches de revirada" #: ../data/toc.xml.in.h:139 msgid "Tuners" -msgstr "" +msgstr "Ràdio" #: ../data/toc.xml.in.h:140 msgid "Utilities" @@ -828,11 +832,11 @@ msgstr "Utilitaris" #: ../data/toc.xml.in.h:141 msgid "Utilities to help you get work done" -msgstr "" +msgstr "Utilitaris per vos ajudar a far vòstre trabalh" #: ../data/toc.xml.in.h:142 msgid "Vector Graphics" -msgstr "" +msgstr "Grafisme vectorial" #: ../data/toc.xml.in.h:143 msgid "Video" @@ -881,7 +885,7 @@ msgstr "Marca-paginas" #: ../data/ui/yelp.glade.h:5 msgid "C_ase sensitive" -msgstr "" +msgstr "Téner compte de la c_assa" #: ../data/ui/yelp.glade.h:6 msgid "Find" @@ -905,7 +909,7 @@ msgstr "_Favorits :" #: ../data/ui/yelp.glade.h:11 msgid "_Browse with caret" -msgstr "" +msgstr "_Navigar amb lo cursor" #: ../data/ui/yelp.glade.h:12 msgid "_Find:" @@ -913,7 +917,7 @@ msgstr "_Recercar :" #: ../data/ui/yelp.glade.h:13 msgid "_Fixed width:" -msgstr "" +msgstr "Chassa _fixa :" #: ../data/ui/yelp.glade.h:14 msgid "_Location:" @@ -941,11 +945,11 @@ msgstr "Largor _variabla :" #: ../data/ui/yelp.glade.h:20 msgid "_Wrap around" -msgstr "" +msgstr "Recèrca _circulara" #: ../data/yelp.schemas.in.h:1 msgid "Font for fixed text" -msgstr "" +msgstr "Poliça de chassa fixa" #: ../data/yelp.schemas.in.h:2 msgid "Font for text" @@ -953,19 +957,21 @@ msgstr "Poliça pel tèxt" #: ../data/yelp.schemas.in.h:3 msgid "Font for text with fixed width." -msgstr "" +msgstr "Poliça de tèxte de chassa fixa." #: ../data/yelp.schemas.in.h:4 msgid "Font for text with variable width." -msgstr "" +msgstr "Poliça de tèxte de chassa variabla." #: ../data/yelp.schemas.in.h:5 msgid "Use a keyboard-controllable caret when viewing pages." msgstr "" +"Utilizar un cursor contrarotlable pel clavièr al moment de la visualizacion " +"de las paginas." #: ../data/yelp.schemas.in.h:6 msgid "Use caret" -msgstr "" +msgstr "Utilizar lo cursor" #: ../data/yelp.schemas.in.h:7 msgid "Use system fonts" @@ -1022,7 +1028,7 @@ msgstr "Impossible de trobar la pagina %s dins lo document %s." #: ../src/yelp-man.c:386 #, c-format msgid "The requested page was not found in the document %s." -msgstr "" +msgstr "La pagina demandada es pas estada trobada dins lo document %s." #: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 #: ../src/yelp-man.c:429 @@ -1039,7 +1045,7 @@ msgstr "Lo fichièr '%s' existís pas." #: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 #: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 msgid "Could not parse file" -msgstr "" +msgstr "Impossible d'analisar lo fichièr" #: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 #, c-format @@ -1047,6 +1053,8 @@ msgid "" "The file ‘%s’ could not be parsed because it is not a well-formed XML " "document." msgstr "" +"Lo fichièr « %s » a pas pogut èsser analisat, perque es pas un document XML " +"corrèctament format." #: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 #, c-format @@ -1054,6 +1062,8 @@ msgid "" "The file ‘%s’ could not be parsed because one or more of its included files " "is not a well-formed XML document." msgstr "" +"Lo fichièr « %s » a pas pogut èsser analisat, perque un o mai d'un de sos " +"fichièrs incluses es pas un document XML corrèctament format." #: ../src/yelp-db-print.c:765 ../src/yelp-docbook.c:786 msgid "Unknown" @@ -1069,13 +1079,15 @@ msgstr "Impossible de legir lo fichièr" #: ../src/yelp-error.c:146 msgid "No information is available about this error." -msgstr "" +msgstr "Cap d'informacion es pas disponibla a prepaus d'aquesta error." #: ../src/yelp-info.c:396 #, c-format msgid "" "The file ‘%s’ could not be parsed because it is not a well-formed info page." msgstr "" +"Lo fichièr « %s » a pas pogut èsser analisat, perque es pas una pagina info " +"corrèctament formada." #: ../src/yelp-io-channel.c:132 #, c-format @@ -1108,6 +1120,8 @@ msgstr "Ajuda" msgid "" "The file ‘%s’ could not be parsed because it is not a well-formed man page." msgstr "" +"Lo fichièr « %s » a pas pogut èsser analisat, perque es pas una pagina de " +"manual corrèctament formada." #: ../src/yelp-print.c:97 msgid "Print" @@ -1141,7 +1155,7 @@ msgstr "Impossible d'estampar vòstre document : %s" #: ../src/yelp-search-parser.c:67 msgid "the GNOME Support Forums" -msgstr "" +msgstr "Los forums d'assisténcia de GNOME" #: ../src/yelp-search-parser.c:285 #, c-format @@ -1153,6 +1167,8 @@ msgid "" "Try using different words to describe the problem you're having or the topic " "you want help with." msgstr "" +"Ensajatz d'utilizar de mots diferents per descriure lo problèma qu'avètz o " +"lo tèma dins lo qual volètz d'ajuda." #: ../src/yelp-search-parser.c:289 #, c-format @@ -1167,7 +1183,7 @@ msgstr "Resultas de la recèrca per \"%s\"" #: ../src/yelp-search-parser.c:303 #, c-format msgid "Repeat the search online at %s" -msgstr "" +msgstr "Repetir la recèrca en linha a %s" #. Translators: Do not translate this list exactly. These are #. * colon-separated words that aren't useful for choosing search @@ -1184,6 +1200,8 @@ msgid "" "help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" "where:who:will:with:won't:wont:why:work:working:works" msgstr "" +"ieu:tu:el:ela:nos:vos:eles:elas:me:te:le:la:los:li:lor:me:te:mas:o:e:doncas:" +"o:ni:perque:un:una:de:que:quina:siá:qué:quora:tanben:coma:causa:daquòs:ajuda" #. Translators: This is a list of common prefixes for words. #. * Do not translate this directly. Instead, use a colon @@ -1207,55 +1225,62 @@ msgstr "re" #: ../src/yelp-search-parser.c:899 msgid "ers:er:ing:es:s:'s" msgstr "" +"acion:aça:ada:atge:enc:ava:al:algia:algic:antròp:antropic:arquia:arque:assa:" +"astre:cid:còl:cultura:dèrme:eria:esca:e:or:oses:gama:gamia:gèn:genèsi:gòn:" +"gonia:grada:grafia:genia:iatra:iatria:isme:ista:ium:latria:logia:logic:lòg:" +"ment:nòm:onar:patia:fag:fil:filia:fòba:fobia:s:tcnia:tecnic:terapèuta:" +"terapia:terapic:tiu:vòr" #: ../src/yelp-search-parser.c:1095 msgid "No Comment" -msgstr "" +msgstr "Sens comentari" #. Much bigger problems #: ../src/yelp-search.c:238 msgid "Search could not be processed" -msgstr "" +msgstr "Impossible d'efectuar la recèrca" #: ../src/yelp-search.c:239 msgid "The requested search could not be processed." -msgstr "" +msgstr "La recèrca demandada a pas pogut èsser tractada." #: ../src/yelp-search.c:366 msgid "Cannot process the search" -msgstr "" +msgstr "Impossible d'efectuar la recèrca" #: ../src/yelp-search.c:367 msgid "The search processor returned invalid results" -msgstr "" +msgstr "Lo motor de recèrca a tornat de resultats invalids" #: ../src/yelp-toc.c:267 #, c-format msgid "The page %s was not found in the TOC." -msgstr "" +msgstr "La pagina %s se tròba pas dins l'ensenhador" #: ../src/yelp-toc.c:366 msgid "The requested page was not found in the TOC." -msgstr "" +msgstr "La pagina demandada se tròba pas dins l'ensenhador" #: ../src/yelp-toc.c:438 msgid "" "The TOC file could not be parsed because it is not a well-formed XML " "document." msgstr "" +"Lo fichièr d'ensenhador pòt pas èsser analisat perque es pas un document XML " +"corrèctament format." #: ../src/yelp-transform.c:80 msgid "Invalid Stylesheet" -msgstr "" +msgstr "Fuèlha d'estil invalida" #: ../src/yelp-transform.c:81 #, c-format msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "" +msgstr "Lo fuèlh d'estil « %s » es mancant o es invalid." #: ../src/yelp-transform.c:112 msgid "Broken Transformation" -msgstr "" +msgstr "Fracàs de transformacion" #: ../src/yelp-transform.c:113 msgid "An unknown error occurred while attempting to transform the document." @@ -1265,7 +1290,7 @@ msgstr "" #: ../src/yelp-transform.c:373 msgid "No href attribute found on yelp:document\n" -msgstr "" +msgstr "Cap d'atribut href pas trobat dins yelp:document\n" #: ../src/yelp-transform.c:388 msgid "Out of memory" @@ -1333,7 +1358,7 @@ msgstr "Recercar lo _precedent" #: ../src/yelp-window.c:360 msgid "Find previous occurrence of the word or phrase" -msgstr "" +msgstr "Recèrca l'occurréncia precedenta d'aqueste mot o d'aquesta expression" #: ../src/yelp-window.c:363 msgid "Find Ne_xt" @@ -1341,7 +1366,7 @@ msgstr "Recercar lo seguent" #: ../src/yelp-window.c:365 msgid "Find next occurrence of the word or phrase" -msgstr "" +msgstr "Recèrca l'occurréncian venenta d'aqueste mot o d'aquesta expression" #: ../src/yelp-window.c:368 msgid "_Preferences" @@ -1435,7 +1460,7 @@ msgstr "Pagina desconeguda" #: ../src/yelp-window.c:1084 #, c-format msgid "The requested URI \"%s\" is invalid" -msgstr "" +msgstr "L'URI demandat « %s » es invalid" #: ../src/yelp-window.c:1009 ../src/yelp-window.c:1066 #: ../src/yelp-window.c:1085 @@ -1444,7 +1469,7 @@ msgstr "Impossible de cargar la pagina" #: ../src/yelp-window.c:1079 msgid "Error executing \"gnome-open\"" -msgstr "" +msgstr "Error al moment d'executar \"gnome-open\"" #: ../src/yelp-window.c:1265 msgid "_Search:" @@ -1460,7 +1485,7 @@ msgstr "Impossible de crear una fenèstra" #: ../src/yelp-window.c:1292 msgid "Cannot create search component" -msgstr "" +msgstr "Impossible de crear un component de recèrca" #: ../src/yelp-window.c:1464 msgid "Fin_d:" @@ -1484,6 +1509,8 @@ msgid "" "The file ‘%s’ could not be read. This file might be missing, or you might " "not have permissions to read it." msgstr "" +"Lo fichièr « %s » pòt pas èsser legit. Benlèu qu'aqueste fichièr es mancant, " +"o qu'avètz pas las permissions per lo legir." #. Note to translators: put here your name (and address) so it #. * will show up in the "about" box @@ -1502,4 +1529,3 @@ msgstr "Un navigador e legidor de documentacion pel burèu GNOME." #: ../yelp.desktop.in.in.h:1 msgid "Get help with GNOME" msgstr "Obténer d'ajuda amb GNOME" - @@ -1,4 +1,4 @@ -# translation of yelp.HEAD.or.po to Oriya +# translation of yelp.master.or.po to Oriya # Oriya translation of yelp.HEAD.pot. # This file is distributed under the same license as the yelp package. # Copyright (C) 2005 Free Software Foundation,Inc. @@ -8,20 +8,20 @@ # Kasturi Dhal <kasturi_mama@yahoo.com>, 2005. # Gora Mohanty <gora_mohanty@yahoo.co.in>, 2006. # Subhransu Behera <arya_subhransu@yahoo.co.in>, 2006. -# Manoj Kumar Giri <mgiri@redhat.com>, 2008. +# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2010. msgid "" msgstr "" -"Project-Id-Version: yelp.HEAD.or\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-08-20 04:08+0000\n" -"PO-Revision-Date: 2008-08-19 19:30+0530\n" +"Project-Id-Version: yelp.master.or\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=yelp&component=general\n" +"POT-Creation-Date: 2010-05-07 16:33+0000\n" +"PO-Revision-Date: 2010-05-11 19:28+0530\n" "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n" -"Language-Team: Oriya\n" +"Language-Team: Oriya <Translation-team-or@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n!=1)\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" "\n" "\n" @@ -77,7 +77,7 @@ msgstr "ସହାୟକ ପୁସ୍ତକ ପୃଷ୍ଠା" #: ../data/man.xml.in.h:11 msgid "Network Audio Sound Functions" -msgstr "ନେଟଓ୍ବାର୍କ ଧ୍ବନୀ ଶବ୍ଦ ଫଳନ" +msgstr "ନେଟୱର୍କ ଧ୍ବନୀ ଶବ୍ଦ ଫଳନ" #: ../data/man.xml.in.h:12 msgid "OpenSSL Applications" @@ -369,7 +369,7 @@ msgstr "କାଲକୁଲେଟର" #: ../data/toc.xml.in.h:20 msgid "Calendar" -msgstr "କାଲେଣ୍ଡର" +msgstr "କ୍ଯାଲେଣ୍ଡର" #: ../data/toc.xml.in.h:21 msgid "Card Games" @@ -421,7 +421,7 @@ msgstr "ତ୍ରୁଟି ନିବାରଣକାରୀ" #: ../data/toc.xml.in.h:33 msgid "Desktop" -msgstr "ଡେସ୍କଟପ୍" +msgstr "ଡେସ୍କଟପ" #: ../data/toc.xml.in.h:34 msgid "Desktop Settings" @@ -526,7 +526,7 @@ msgstr "ଭୂବିଜ୍ଞାନ" #: ../data/toc.xml.in.h:62 msgid "Graphics" -msgstr "ଆଲେଖୀ" +msgstr "ଆଲେଖୀକ" #: ../data/toc.xml.in.h:63 msgid "Guides and manuals for applications that connect to the outside world" @@ -550,7 +550,7 @@ msgstr "କିଛି ମଜା କରନ୍ତୁ" #: ../data/toc.xml.in.h:68 msgid "History" -msgstr "ଇତିହାସ" +msgstr "ପୁରୁଣା ତଥ୍ଯ" #: ../data/toc.xml.in.h:69 msgid "IDEs" @@ -574,7 +574,7 @@ msgstr "ଇଣ୍ଟରନେଟ" #: ../data/toc.xml.in.h:74 msgid "Java" -msgstr "Java" +msgstr "ଜାଭା" #: ../data/toc.xml.in.h:75 msgid "KDE Applications" @@ -588,8 +588,7 @@ msgstr "ପିଲାଙ୍କ ଖେଳ" msgid "" "Learn more about making your system more accessible for a range of " "disabilities" -msgstr "" -"ଆପଣଙ୍କ ତନ୍ତ୍ରକୁ ଗୋଟିଏ ପରିସରଭୁକ୍ତ ନିଷ୍କ୍ରିତା ପାଇଁ ପ୍ରବେଶକୁ ଅଧିକ ସହଜମୟ କରିବା ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ" +msgstr "ଆପଣଙ୍କ ତନ୍ତ୍ରକୁ ଗୋଟିଏ ପରିସରଭୁକ୍ତ ନିଷ୍କ୍ରିତା ପାଇଁ ପ୍ରବେଶକୁ ଅଧିକ ସହଜମୟ କରିବା ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ" #: ../data/toc.xml.in.h:78 msgid "Licenses" @@ -692,7 +691,7 @@ msgstr "ଖେଳାଳୀମାନେ" msgid "Presentation Tools" msgstr "ଉପସ୍ଥାପନ ଉପକରଣଗୁଡ଼ିକ" -#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:337 ../src/yelp-print.c:364 +#: ../data/toc.xml.in.h:104 msgid "Printing" msgstr "ମୁଦ୍ରଣ କରୁଅଛି" @@ -755,7 +754,7 @@ msgstr "ଅନୁକ୍ରମିକା" #: ../data/toc.xml.in.h:120 msgid "Settings" -msgstr "ବିନ୍ୟାସ" +msgstr "ବିନ୍ଯାସ" #: ../data/toc.xml.in.h:121 msgid "Settings users can manipulate to make their environment more pleasant" @@ -874,192 +873,45 @@ msgstr "ନୋମ ସହାୟତା ବ୍ରାଉଜରକୁ ସ୍ବାଗ msgid "Word Processors" msgstr "ଶବ୍ଦ ସଂସାଧକ" -#: ../data/ui/yelp.glade.h:1 -msgid "<b>Accessibility</b>" -msgstr "<b>ଅଭିଗମ୍ଯତା</b>" - -#: ../data/ui/yelp.glade.h:2 -msgid "<b>Fonts</b>" -msgstr "<b>ଅକ୍ଷରରୂପ</b>" - -#: ../data/ui/yelp.glade.h:3 -msgid "Add Bookmark" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ ଯୋଗ କରନ୍ତୁ" - -#: ../data/ui/yelp.glade.h:4 -msgid "Bookmarks" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ" - -#: ../data/ui/yelp.glade.h:5 -msgid "C_ase sensitive" -msgstr "ଅକ୍ଷର ନିର୍ଦ୍ଦିଷ୍ଟ (_a)" - -#: ../data/ui/yelp.glade.h:6 -msgid "Find" -msgstr "ଖୋଜନ୍ତୁ" - -#: ../data/ui/yelp.glade.h:7 -msgid "Open Location" -msgstr "ଅବସ୍ଥାନ ଖୋଲନ୍ତୁ" - -#: ../data/ui/yelp.glade.h:8 -msgid "Preferences" -msgstr "ପସନ୍ଦ" - -#: ../data/ui/yelp.glade.h:9 -msgid "Re_name" -msgstr "ନାମ ବଦଳାନ୍ତୁ (_n)" - -#: ../data/ui/yelp.glade.h:10 -msgid "_Bookmarks:" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ (_B)" - -#: ../data/ui/yelp.glade.h:11 -msgid "_Browse with caret" -msgstr "କାରେଟ ସହିତ ଖୋଜନ୍ତୁ (_B)" - -#: ../data/ui/yelp.glade.h:12 -msgid "_Find:" -msgstr "ଖୋଜନ୍ତୁ: (_F)" - -#: ../data/ui/yelp.glade.h:13 -msgid "_Fixed width:" -msgstr "ସ୍ଥିର ଓସାର: (_F)" - -#: ../data/ui/yelp.glade.h:14 -msgid "_Location:" -msgstr "ଅବସ୍ଥାନ: (_L)" - -#: ../data/ui/yelp.glade.h:15 -msgid "_Next" -msgstr "ପରବର୍ତ୍ତୀ (_N)" - -#: ../data/ui/yelp.glade.h:16 -msgid "_Previous" -msgstr "ପୂର୍ବବର୍ତ୍ତୀ (_P)" - -#: ../data/ui/yelp.glade.h:17 -msgid "_Title:" -msgstr "ଶୀର୍ଷକ (_T)" - -#: ../data/ui/yelp.glade.h:18 -msgid "_Use system fonts" -msgstr "ତନ୍ତ୍ର ଅକ୍ଷରରୂପ ବ୍ଯବହାର କରନ୍ତୁ (_U)" - -#: ../data/ui/yelp.glade.h:19 -msgid "_Variable width:" -msgstr "ଅସ୍ଥିର ଓସାର: (_V)" - -#: ../data/ui/yelp.glade.h:20 -msgid "_Wrap around" -msgstr "ପରିବେଷ୍ଟନ (_W)" - -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "ସ୍ଥିର ପାଠ୍ଯ ପାଇଁ ଅକ୍ଷରରୂପ" - -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "ପାଠ୍ଯ ପାଇଁ ଅକ୍ଷରରୂପ" - -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "ପାଠ୍ଯ ପାଇଁ ସ୍ଥିର ଓସାରର ଅକ୍ଷରରୂପ" - -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "ପାଠ୍ଯ ପାଇଁ ଅସ୍ଥିର ଓସାରର ଅକ୍ଷରରୂପ" - -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "ପୃଷ୍ଠା ଦେଖିଲାବେଳେ ଚାବି ପଟି ଦ୍ବାରା ନିୟନ୍ତ୍ରଣଯୋଗ୍ଯ କାରେଟ ବ୍ଯବହାର କରନ୍ତୁ" - -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "କାରେଟ ବ୍ଯବହାର କରନ୍ତୁ" - -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "ତନ୍ତ୍ର ଅକ୍ଷରରୂପ ବ୍ଯବହାର କରନ୍ତୁ" - -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "ତନ୍ତ୍ର ପାଇଁ ପୂର୍ବନିର୍ଦ୍ଧାରିତ ଅକ୍ଷରରୂପ ବ୍ଯବହାର କରନ୍ତୁ." - -#: ../src/yelp-bookmarks.c:150 -msgid "Open Bookmark in New Window" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ" - -#: ../src/yelp-bookmarks.c:154 -msgid "Rename Bookmark" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନର ନାମ ବଦଳାନ୍ତୁ" - -#: ../src/yelp-bookmarks.c:158 -msgid "Remove Bookmark" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ କାଢ଼ନ୍ତୁ" - -#: ../src/yelp-bookmarks.c:315 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "ଏହି ପୃଷ୍ଠା ପାଇଁ %s ନାମକ ଚିହ୍ନିତ ସ୍ଥାନ ପୂର୍ବରୁ ଅଛି." +#: ../libyelp/yelp-bz2-decompressor.c:146 +#: ../libyelp/yelp-lzma-decompressor.c:155 +msgid "Invalid compressed data" +msgstr "" -#: ../src/yelp-bookmarks.c:392 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "ଏହି ପୃଷ୍ଠା ପାଇଁ <b>%s</b> ନାମକ ଚିହ୍ନିତ ସ୍ଥାନ ପୂର୍ବରୁ ଅଛି." - -#: ../src/yelp-bookmarks.c:405 -msgid "Help Topics" -msgstr "ସାହାଯ୍ଯ ବିଷୟ" - -#: ../src/yelp-bookmarks.c:420 -msgid "Document Sections" -msgstr "ଦଲିଲ ଅଂଶ" - -#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 ../src/yelp-man.c:292 ../src/yelp-man.c:385 -#: ../src/yelp-toc.c:266 ../src/yelp-toc.c:365 -msgid "Page not found" -msgstr "ପୃଷ୍ଠା ମିଳୁନାହିଁ" +#: ../libyelp/yelp-bz2-decompressor.c:152 +#: ../libyelp/yelp-lzma-decompressor.c:161 +#, fuzzy +#| msgid "Out of memory" +msgid "Not enough memory" +msgstr "ଯଥେଷ୍ଟ ସ୍ମ୍ରୁତି ନାହିଁ" -#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 -#: ../src/yelp-man.c:293 -#, c-format -msgid "The page %s was not found in the document %s." +#: ../libyelp/yelp-docbook-document.c:264 ../libyelp/yelp-info-document.c:233 +#: ../libyelp/yelp-mallard-document.c:254 +#: ../libyelp/yelp-mallard-document.c:391 +#, fuzzy, c-format +#| msgid "The page %s was not found in the document %s." +msgid "The page ‘%s’ was not found in the document ‘%s’." msgstr "ଦଲିଲ %s ରେ ପୃଷ୍ଠା %s ମିଳୁନାହିଁ." -#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 -#: ../src/yelp-man.c:386 -#, c-format -msgid "The requested page was not found in the document %s." -msgstr "ଦଲିଲ %s ରେ ଅନୁରୋଧିତ ପୃଷ୍ଠାଟି ମିଳିଲା ନାହିଁ." - -#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 -#: ../src/yelp-man.c:429 -msgid "File not found" -msgstr "ଫାଇଲ ମିଳୁନାହିଁ" +#: ../libyelp/yelp-docbook-document.c:298 ../libyelp/yelp-info-document.c:366 +#, fuzzy, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The file does not exist." +msgstr "ଫାଇଲ '%s' ଅବସ୍ଥିତ ନାହିଁ." -#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 -#: ../src/yelp-man.c:430 +#: ../libyelp/yelp-docbook-document.c:308 ../libyelp/yelp-info-document.c:376 #, c-format msgid "The file ‘%s’ does not exist." msgstr "ଫାଇଲ '%s' ଅବସ୍ଥିତ ନାହିଁ." -#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 -#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 -msgid "Could not parse file" -msgstr "ଫାଇଲ ବିଶ୍ଲେଷଣ କରିପାରୁ ନାହିଁଲା ନାହିଁ" - -#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +#: ../libyelp/yelp-docbook-document.c:323 #, c-format msgid "" "The file ‘%s’ could not be parsed because it is not a well-formed XML " "document." msgstr "‘%s’ ଫାଇଲକୁ ବିଶ୍ଳେଷଣ କରିହେଲା ନାହିଁ କାରଣ ଏହା ସୁନିର୍ମିତ XML ଦଲିଲ ନୁହଁ." -#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +#: ../libyelp/yelp-docbook-document.c:336 #, c-format msgid "" "The file ‘%s’ could not be parsed because one or more of its included files " @@ -1068,453 +920,367 @@ msgstr "" "‘%s’ ଫାଇଲକୁ ବିଶ୍ଳେଷଣ କରିହେଲା ନାହିଁ କାରଣ ଏଥିରେ ଅନ୍ତର୍ଭୁକ୍ତ ଥିବା ଏକ ଅଧିକ ଫାଇଲ ସୁନିର୍ମିତ XML ଦଲିଲ " "ନୁହଁ." -#: ../src/yelp-db-print.c:765 ../src/yelp-docbook.c:786 +#: ../libyelp/yelp-docbook-document.c:720 msgid "Unknown" msgstr "ଅଜଣା" -#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 -msgid "Unknown Error" -msgstr "ଅଜଣା ତ୍ରୁଟି" - -#: ../src/yelp-error.c:136 ../src/yelp-window.c:1643 -msgid "Could Not Read File" -msgstr "ଫାଇଲ ପଢ଼ିହେଲା ନାହିଁ" +#: ../libyelp/yelp-docbook-document.c:781 ../libyelp/yelp-info-document.c:309 +#, fuzzy, c-format +#| msgid "The requested page was not found in the document %s." +msgid "The requested page was not found in the document ‘%s’." +msgstr "ଦଲିଲ %s ରେ ଅନୁରୋଧିତ ପୃଷ୍ଠାଟି ମିଳିଲା ନାହିଁ." -#: ../src/yelp-error.c:146 -msgid "No information is available about this error." -msgstr "ଏହି ତ୍ରୁଟି ବିଷୟରେ କୌଣସି ସୂଚନା ଉପଲବ୍ଧ ନାହିଁ।" +#: ../libyelp/yelp-error.c:33 +#, c-format +msgid "An unknown error occurred." +msgstr "" -#: ../src/yelp-info.c:396 +#: ../libyelp/yelp-info-document.c:391 #, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgid "The file ‘%s’ could not be parsed because it is not a well-formed info page." msgstr "‘%s’ ଫାଇଲକୁ ବିଶ୍ଳେଷଣ କରିହେଲା ନାହିଁ କାରଣ ଏହା ସୁନିର୍ମିତ ସୂଚନା ପୃଷ୍ଠା ନୁହଁ." -#: ../src/yelp-io-channel.c:132 -#, c-format -msgid "" -"The file ‘%s’ could not be read and decoded. The file may be compressed in " -"an unsupported format." +#: ../libyelp/yelp-location-entry.c:251 +msgid "Description Column" msgstr "" -"‘%s’ ଫାଇଲ ପଢ଼ି ଅବସଙ୍କେତିତ କରିହେଲା ନାହିଁ। ସମ୍ଭବ କି ଫାଇଲ ଗୋଟିଏ ଅସହାୟକ ଶୈଲୀରେ ସଂକୁଚିତ।" -#: ../src/yelp-main.c:91 -msgid "Use a private session" -msgstr "ଗୋଟିଏ ବ୍ଯକ୍ତିଗତ ଅଧିବେଶନକୁ ବ୍ଯବହାର କରନ୍ତୁ" +#: ../libyelp/yelp-location-entry.c:252 +msgid "A column in the model to get descriptions from" +msgstr "" -#: ../src/yelp-main.c:100 -msgid "Define which cache directory to use" -msgstr "କ୍ଯାଶ ଡିରେକ୍ଟୋରିକୁ ବ୍ଯାଖ୍ଯା କରନ୍ତୁ" +#: ../libyelp/yelp-location-entry.c:267 +msgid "Icon Column" +msgstr "" -#. Commandline parsing is done here -#: ../src/yelp-main.c:357 -msgid " GNOME Help Browser" -msgstr " ନୋମ ସାହାଯ୍ଯ ଖୋଜାଳୀ" +#: ../libyelp/yelp-location-entry.c:268 +msgid "A column in the model to get icon names from" +msgstr "" -#: ../src/yelp-main.c:377 ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "ସହାୟତା" +#: ../libyelp/yelp-location-entry.c:283 +msgid "Flags Column" +msgstr "" -#: ../src/yelp-man.c:459 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed because it is not a well-formed man page." -msgstr "‘%s’ ଫାଇଲକୁ ବିଶ୍ଳେଷଣ କରିହେଲା ନାହିଁ କାରଣ ଏହା ସୁନିର୍ମିତ ମୂଖ୍ୟ ପୃଷ୍ଠା ନୁହଁ." +#: ../libyelp/yelp-location-entry.c:284 +msgid "A column in the model with YelpLocationEntryFlags flags" +msgstr "" -#: ../src/yelp-print.c:97 -msgid "Print" -msgstr "ମୁଦ୍ରଣ କରନ୍ତୁ" +#: ../libyelp/yelp-location-entry.c:300 +msgid "Enable Search" +msgstr "" -#: ../src/yelp-print.c:167 -msgid "Preparing to print" -msgstr "ମୁଦ୍ରଣ ପାଇଁ ବ୍ଯବସ୍ଥା କରାଯାଉଛି" +#: ../libyelp/yelp-location-entry.c:301 +msgid "Whether the location entry can be used as a search field" +msgstr "" -#: ../src/yelp-print.c:261 -msgid "Printing is not supported on this printer" -msgstr "ଏହି ମୁଦ୍ରଣୀରେ ମୁଦ୍ରଣ ଅସହାୟକ" +#: ../libyelp/yelp-mallard-document.c:294 +#, fuzzy, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The directory ‘%s’ does not exist." +msgstr "ଡିରେକ୍ଟୋରୀ '%s' ଅବସ୍ଥିତ ନାହିଁ।" -#: ../src/yelp-print.c:264 -#, c-format -msgid "Printer %s does not support postscript printing." -msgstr "%s ମୁଦ୍ରଣୀରେ ପୋଷ୍ଟସ୍କ୍ରିପ୍ଟ ମୁଦ୍ରଣକୁ ସମର୍ଥ କରେନାହିଁ।" +#: ../libyelp/yelp-settings.c:146 +#, fuzzy +#| msgid "Settings" +msgid "GtkSettings" +msgstr "ବିନ୍ୟାସ" -#: ../src/yelp-print.c:366 -msgid "Waiting to print" -msgstr "ମୁଦ୍ରଣ ପାଇଁ ଅପେକ୍ଷାରେ" +#: ../libyelp/yelp-settings.c:147 +msgid "A GtkSettings object to get settings from" +msgstr "" -#: ../src/yelp-print.c:578 -msgid "An error occurred while printing" -msgstr "ମୁଦ୍ରଣରେ ତ୍ରୁଟି" +#: ../libyelp/yelp-settings.c:155 +msgid "GtkIconTheme" +msgstr "" -#: ../src/yelp-print.c:582 -#, c-format -msgid "It was not possible to print your document: %s" -msgstr "ଆପଣଙ୍କ ଦଲିଲ ମୁଦ୍ରଣ କରିହେଲା ନାହିଁ: %s" +#: ../libyelp/yelp-settings.c:156 +msgid "A GtkIconTheme object to get icons from" +msgstr "" -#: ../src/yelp-search-parser.c:67 -msgid "the GNOME Support Forums" -msgstr "ନୋମ ସହାୟତା ବିଚାରସ୍ଥଳ" +#: ../libyelp/yelp-settings.c:164 +msgid "Font Adjustment" +msgstr "" -#: ../src/yelp-search-parser.c:285 -#, c-format -msgid "No results for \"%s\"" -msgstr "\"%s\" ପାଇଁ କୌଣସି ଫଳାଫଳ ମିଳିଲା ନାହିଁ" +#: ../libyelp/yelp-settings.c:165 +msgid "A size adjustment to add to font sizes" +msgstr "" -#: ../src/yelp-search-parser.c:286 -msgid "" -"Try using different words to describe the problem you're having or the topic " -"you want help with." +#: ../libyelp/yelp-settings.c:173 +msgid "Show Text Cursor" msgstr "" -"ଆପଣ ସମ୍ମୁଖୀନ ହେଉଥିବା ସମସ୍ଯାକୁ କିମ୍ବା ଆପଣ ଯେଉଁ ବିଷୟ ବସ୍ତୁ ସହିତ ସାହାର୍ଯ୍ଯ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି " -"ତାହାକୁ ବର୍ଣ୍ଣନା କରିବା ପାଇଁ ବିଭିନ୍ନ ଶବ୍ଦ ମାନଙ୍କୁ ପ୍ରୟୋଗ କରିବା ପାଇଁ ପ୍ରଚେଷ୍ଟା କରନ୍ତୁ।" -#: ../src/yelp-search-parser.c:289 -#, c-format -msgid "Search results for \"%s\"" -msgstr "\"%s\" ପାଇଁ ଗୋଟିଏ ଫଳାଫଳ ସନ୍ଧାନ କରନ୍ତୁ" - -#. TRANSLATORS: Please don't do anything funny with the -#. * format arguement. It isn't really going through a printf -#. * The %s is used to indicate where the name of the site (linked) -#. * should be. This is done in the XSLT -#. -#: ../src/yelp-search-parser.c:303 -#, c-format -msgid "Repeat the search online at %s" -msgstr "%s ରେ ଅନ-ଲାଇନ ଭାବରେ ପୁଣିଥରେ ସନ୍ଧାନ କରନ୍ତୁ" - -#. Translators: Do not translate this list exactly. These are -#. * colon-separated words that aren't useful for choosing search -#. * results; they will be different for each language. Include -#. * pronouns, articles, very common verbs and prepositions, -#. * words from question structures like "tell me about" and -#. * "how do I", and words for functional states like "not", -#. * "work", and "broken". -#. -#: ../src/yelp-search-parser.c:874 -msgid "" -"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" -"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" -"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" -"where:who:will:with:won't:wont:why:work:working:works" +#: ../libyelp/yelp-settings.c:174 +msgid "Show the text cursor or caret for accessibile navigation" msgstr "" -"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" -"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" -"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" -"where:who:will:with:won't:wont:why:work:working:works" - -#. Translators: This is a list of common prefixes for words. -#. * Do not translate this directly. Instead, use a colon -#. * seperated list of word-starts. In English, an example -#. * is re-. If there is none, please use the term NULL -#. * If there is only one, please put a colon after. -#. * E.g. if the common prefix is re then the string would be -#. * "re:" -#. -#: ../src/yelp-search-parser.c:890 -msgid "re" -msgstr "NULL" - -#. Translators: This is a list of (guess what?) common suffixes -#. * to words. Things that may be put at ends of words to slightly -#. * alter their meaning (like -ing and -s in English). This is a -#. * colon seperated list (I like colons). If there are none, -#. * please use the string NULL. If there is only 1, please -#. * add a colon at the end of the list -#. -#: ../src/yelp-search-parser.c:899 -msgid "ers:er:ing:es:s:'s" -msgstr "NULL" - -#: ../src/yelp-search-parser.c:1095 -msgid "No Comment" -msgstr "କିଛି ଟିପ୍ପଣୀ ନାହିଁ" - -#. Much bigger problems -#: ../src/yelp-search.c:238 -msgid "Search could not be processed" -msgstr "ସନ୍ଧାନକୁ ସଂସାଧନ କରିହେଲା ନାହିଁ" - -#: ../src/yelp-search.c:239 -msgid "The requested search could not be processed." -msgstr "ଅନୁରୋଧିତ ସନ୍ଧାନଟି ସଂସାଧନ କରିହେଲା ନାହିଁ." - -#: ../src/yelp-search.c:366 -msgid "Cannot process the search" -msgstr "ସନ୍ଧାନକୁ ସଂସାଧନ କରିପାରିଲେ ନାହିଁ" - -#: ../src/yelp-search.c:367 -msgid "The search processor returned invalid results" -msgstr "ସନ୍ଧାନ ସଂସାଧକ ଅବୈଧ ଫଳାଫଳ ଫେରାଇଲା" - -#: ../src/yelp-toc.c:267 -#, c-format -msgid "The page %s was not found in the TOC." -msgstr "TOC ରେ ପୃଷ୍ଠା %s ମିଳିଲା ନାହିଁ." -#: ../src/yelp-toc.c:366 -msgid "The requested page was not found in the TOC." -msgstr "TOC ରେ ଅନୁରୋଧିତ ପୃଷ୍ଠା %s ମିଳିଲା ନାହିଁ." +#: ../libyelp/yelp-settings.c:182 +msgid "Editor Mode" +msgstr "" -#: ../src/yelp-toc.c:438 -msgid "" -"The TOC file could not be parsed because it is not a well-formed XML " -"document." -msgstr "TOC ଫାଇଲକୁ ବିଶ୍ଳେଷଣ କରିହେଲା ନାହିଁ କାରଣ ଏହା ଏକ ସୁନିର୍ମିତ XML ଦଲିଲ ନୁହଁ." +#: ../libyelp/yelp-settings.c:183 +msgid "Enable features useful to editors" +msgstr "" -#: ../src/yelp-transform.c:80 -msgid "Invalid Stylesheet" +#: ../libyelp/yelp-transform.c:171 +#, fuzzy +#| msgid "Invalid Stylesheet" +msgid "XSLT Stylesheet" msgstr "ଅବୈଧ ଶୈଳୀ ପୃଷ୍ଠା" -#: ../src/yelp-transform.c:81 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "XSLT ଶୈଳୀପୃଷ୍ଠା '%s'ଟି ହଜିଯାଇଥାଇପାରେ, ଅଥବା ଏହା ବୈଧ ନୁହଁ." - -#: ../src/yelp-transform.c:112 -msgid "Broken Transformation" -msgstr "ଭଙ୍ଗା ରୂପାନ୍ତରଣ" +#: ../libyelp/yelp-transform.c:172 +msgid "The location of the XSLT stylesheet" +msgstr "" -#: ../src/yelp-transform.c:113 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "ଦଲିଲକୁ ରୂପାନ୍ତରଣ କରିବାକୁ ପ୍ରୟାସ କରିବା ସମୟରେ ଗୋଟିଏ ଅଜଣା ତ୍ରୁଟି ଘଟିଲା." +#: ../libyelp/yelp-transform.c:379 ../libyelp/yelp-transform.c:394 +#, fuzzy, c-format +#| msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." +msgid "The XSLT stylesheet ‘%s’ is either missing or not valid." +msgstr "XSLT ଶୈଳୀପୃଷ୍ଠା '%s'ଟି ହଜିଯାଇଥାଇପାରେ, ଅଥବା ଏହା ବୈଧ ନୁହଁ." -#: ../src/yelp-transform.c:373 +#: ../libyelp/yelp-transform.c:528 msgid "No href attribute found on yelp:document\n" msgstr "yelp:ଦଲିଲରେ କୌଣସି href ଗୁଣ ମିଳିଲା ନାହିଁ\n" -#: ../src/yelp-transform.c:388 +#: ../libyelp/yelp-transform.c:543 msgid "Out of memory" msgstr "ଯଥେଷ୍ଟ ସ୍ମ୍ରୁତି ନାହିଁ" -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "ଫାଇଲ (_F)" +#: ../libyelp/yelp-view.c:94 +#, fuzzy +#| msgid "Print" +msgid "_Print..." +msgstr "ମୂଦ୍ରଣ କରନ୍ତୁ ... (_P)" -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "ସମ୍ପାଦନ (_E)" - -#: ../src/yelp-window.c:306 -msgid "_Go" -msgstr "ଯାଆନ୍ତୁ (_G)" +#: ../libyelp/yelp-view.c:99 +msgid "_Back" +msgstr "ପଛକୁ (_B)" -#: ../src/yelp-window.c:307 -msgid "_Bookmarks" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ (_B)" +#: ../libyelp/yelp-view.c:104 +msgid "_Forward" +msgstr "ପରବର୍ତ୍ତୀ (_F)" -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "ସାହାଯ୍ଯ (_H)" +#: ../libyelp/yelp-view.c:109 +#, fuzzy +#| msgid "_Previous" +msgid "_Previous Page" +msgstr "ପୂର୍ବବର୍ତ୍ତୀ (_P)" -#: ../src/yelp-window.c:311 -msgid "_New Window" -msgstr "ନୂଆ ୱିଣ୍ଡୋ (_N)" +#: ../libyelp/yelp-view.c:114 +#, fuzzy +#| msgid "_Next" +msgid "_Next Page" +msgstr "ପରବର୍ତ୍ତୀ (_N)" -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "ଏହି ଦଲିଲକୁ ମୁଦ୍ରଣ କରନ୍ତୁ ..." +#: ../libyelp/yelp-view.c:317 +#, fuzzy +#| msgid "Yelp" +msgid "Yelp URI" +msgstr "ୟେଲ୍ପ" -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "ଏହି ପୃଷ୍ଠାକୁ ମୁଦ୍ରଣ କରନ୍ତୁ ..." +#: ../libyelp/yelp-view.c:318 +msgid "A YelpUri with the current location" +msgstr "" -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "ଏହି ଦଲିଲ ବିଷୟରେ" +#: ../libyelp/yelp-view.c:326 +#, fuzzy +#| msgid "Loading..." +msgid "Loading State" +msgstr "ଧାରଣ..." -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "ଅବସ୍ଥାନ ଖୋଲନ୍ତୁ (_L)" +#: ../libyelp/yelp-view.c:327 +msgid "The loading state of the view" +msgstr "" -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "ୱିଣ୍ଡୋ ବନ୍ଦ କରନ୍ତୁ (_C)" +#: ../libyelp/yelp-view.c:336 +msgid "Page ID" +msgstr "" -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "ନକଲ (_C)" +#: ../libyelp/yelp-view.c:337 +msgid "The ID of the root page of the page being viewed" +msgstr "" -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "ସବୁ ବାଛନ୍ତୁ (_S)" +#: ../libyelp/yelp-view.c:345 +msgid "Root Title" +msgstr "" -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "ଖୋଜନ୍ତୁ... (_F)" +#: ../libyelp/yelp-view.c:346 +msgid "The title of the root page of the page being viewed" +msgstr "" -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "ପୂର୍ବବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_v)" +#: ../libyelp/yelp-view.c:354 +msgid "Page Title" +msgstr "" -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "ଶବ୍ଦ ବା ବାକ୍ଯଖଣ୍ଡର ପୂର୍ବବର୍ତ୍ତୀ ଘଟଣା ଖୋଜନ୍ତୁ" +#: ../libyelp/yelp-view.c:355 +msgid "The title of the page being viewed" +msgstr "" -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "ପରବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_x)" +#: ../libyelp/yelp-view.c:363 +msgid "Page Description" +msgstr "" -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "ଶବ୍ଦ ବା ବାକ୍ଯଖଣ୍ଡର ପରବର୍ତ୍ତୀ ଘଟଣା ଖୋଜନ୍ତୁ" +#: ../libyelp/yelp-view.c:364 +msgid "The description of the page being viewed" +msgstr "" -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "ପସନ୍ଦ (_P)" +#: ../libyelp/yelp-view.c:372 +#, fuzzy +#| msgid "Page not found" +msgid "Page Icon" +msgstr "ପୃଷ୍ଠା ମିଳୁନାହିଁ" -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "ପୁନର୍ଧାରଣ (_R)" +#: ../libyelp/yelp-view.c:373 +msgid "The icon of the page being viewed" +msgstr "" -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "ପଛକୁ ଯାଆନ୍ତୁ (_B)" +#: ../libyelp/yelp-view.c:696 +#, c-format +msgid "Could not load a document for ‘%s’" +msgstr "" -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "ଇତିହାସର ପୂର୍ବବର୍ତ୍ତୀ ପୃଷ୍ଠା ଦେଖାନ୍ତୁ" +#: ../libyelp/yelp-view.c:702 +#, c-format +msgid "Could not load a document" +msgstr "" -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "ଆଗକୁ (_F)" +#: ../libyelp/yelp-view.c:769 +#, fuzzy +#| msgid "Page not found" +msgid "Not Found" +msgstr "ପୃଷ୍ଠା ମିଳୁନାହିଁ" -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "ଇତିହାସର ପରବର୍ତ୍ତୀ ପୃଷ୍ଠା ଦେଖାନ୍ତୁ" +#: ../libyelp/yelp-view.c:772 +#, fuzzy +#| msgid "Cannot create window" +msgid "Cannot Read" +msgstr "ୱିଣ୍ଡୋ ସୃଷ୍ଟି କରିପାରିଲା ନାହିଁ" -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "ସାହାଯ୍ଯ ବିଷୟ (_H)" +#: ../libyelp/yelp-view.c:778 +msgid "Unknown Error" +msgstr "ଅଜଣା ତ୍ରୁଟି" -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "ସାହାଯ୍ଯ ବିଷୟ ତାଲିକାକୁ ଯାଆନ୍ତୁ" +#: ../libyelp/yelp-view.c:868 +#, fuzzy, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The URI ‘%s’ does point to a valid page." +msgstr "ଫାଇଲ '%s' ଅବସ୍ଥିତ ନାହିଁ." -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "ପୂର୍ବବର୍ତ୍ତୀ ଅଂଶ (_P)" +#: ../libyelp/yelp-view.c:876 +#, fuzzy, c-format +#| msgid "The file ‘%s’ does not exist." +msgid "The URI ‘%s’ could not be parsed." +msgstr "ଫାଇଲ '%s' ଅବସ୍ଥିତ ନାହିଁ." -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "ପରବର୍ତ୍ତୀ ଅଂଶ (_N)" +#: ../src/yelp-application.c:55 +msgid "Turn on editor mode" +msgstr "" -#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "ସୂଚୀପତ୍ର (_C)" +#: ../src/yelp-application.c:106 +msgid "_Larger Text" +msgstr "" -#: ../src/yelp-window.c:416 -msgid "_Add Bookmark" -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ ଯୋଗ କରନ୍ତୁ (_A)" +#: ../src/yelp-application.c:108 +msgid "Increase the size of the text" +msgstr "" -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "ଚିହ୍ନିତ ସ୍ଥାନ ସମ୍ପାଦନ କରନ୍ତୁ... (_E)" +#: ../src/yelp-application.c:111 +msgid "_Smaller Text" +msgstr "" -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "ସଂଯୋଗ ଖୋଲନ୍ତୁ (_O)" +#: ../src/yelp-application.c:113 +msgid "Descrease the size of the text" +msgstr "" -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "ନୂଆ ୱିଣ୍ଡୋରେ ସଂଯୋଗ ଖୋଲନ୍ତୁ (_N)" +#: ../src/yelp-application.c:221 +msgid "Show Text _Cursor" +msgstr "" -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "ସଂଯୋଗ ଠିକଣା ନକଲ କରନ୍ତୁ (_C)" +#: ../src/yelp-application.c:297 ../src/yelp-window.c:1353 +#: ../yelp.desktop.in.in.h:2 +msgid "Help" +msgstr "ସହାୟତା" -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "ଏହି ପ୍ରୟୋଗ ପାଇଁ ସହାୟତା" +#: ../src/yelp-application.c:547 +msgid "" +"You do not have PackageKit installed. Package installation links require " +"PackageKit." +msgstr "" -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "ବିବରଣୀ (_A)" +#: ../src/yelp-window.c:241 +msgid "_Page" +msgstr "" -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "ଇ-ଡାକ ଠିକଣା ନକଲ କରନ୍ତୁ (_E)" +#: ../src/yelp-window.c:242 +#, fuzzy +#| msgid "Viewer" +msgid "_View" +msgstr "ଦ୍ରୁଶ୍ଯ (_V)" -#: ../src/yelp-window.c:501 -msgid "Help Browser" -msgstr "ସାହାଯ୍ଯ ଖୋଜାଳୀ" +#: ../src/yelp-window.c:243 +msgid "_Go" +msgstr "ଯାଆନ୍ତୁ (_G)" -#: ../src/yelp-window.c:592 ../src/yelp-window.c:644 ../src/yelp-window.c:1700 -msgid "Loading..." -msgstr "ଧାରଣ..." +#: ../src/yelp-window.c:244 +msgid "_Bookmarks" +msgstr "ଚିହ୍ନିତ ସ୍ଥାନ (_B)" -#: ../src/yelp-window.c:593 ../src/yelp-window.c:645 -msgid "Unknown Page" -msgstr "ଅଜଣା ପୃଷ୍ଠା" +#: ../src/yelp-window.c:247 +msgid "_New Window" +msgstr "ନୂଆ ୱିଣ୍ଡୋ (_N)" -#: ../src/yelp-window.c:1008 ../src/yelp-window.c:1064 -#: ../src/yelp-window.c:1084 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "ଅନୁରୋଧିତ URI \"%s\"ଟି ଅବୈଧ ଅଟେ" +#: ../src/yelp-window.c:252 +#, fuzzy +#| msgid "Clocks" +msgid "_Close" +msgstr "ବନ୍ଦ କରନ୍ତୁ (_C)" -#: ../src/yelp-window.c:1009 ../src/yelp-window.c:1066 -#: ../src/yelp-window.c:1085 -msgid "Unable to load page" -msgstr "ପୃଷ୍ଠା ଧାରଣ କରିବାରେ ଅସମର୍ଥ" +#: ../src/yelp-window.c:257 +msgid "_Add Bookmark" +msgstr "ବୁକମାର୍କକୁ ଯୋଗ କରନ୍ତୁ (_A)" -#: ../src/yelp-window.c:1079 -msgid "Error executing \"gnome-open\"" -msgstr "\"gnome-ଖୋଲନ୍ତୁ\"କୁ ନିଷ୍ପାଦନ କରିବା ସମୟରେ ତ୍ରୁଟି" +#: ../src/yelp-window.c:262 +#, fuzzy +#| msgid "Print This Page ..." +msgid "Find in Page..." +msgstr "ଏହି ପୃଷ୍ଠାକୁ ମୁଦ୍ରଣ କରନ୍ତୁ ..." -#: ../src/yelp-window.c:1265 -msgid "_Search:" +#: ../src/yelp-window.c:267 ../src/yelp-window.c:482 +#, fuzzy +#| msgid "_Search:" +msgid "Search..." msgstr "ଖୋଜନ୍ତୁ: (_S)" -#: ../src/yelp-window.c:1266 -msgid "Search for other documentation" -msgstr "ଅନ୍ଯ ଦଲିଲିକରଣ ଖୋଜନ୍ତୁ" - -#: ../src/yelp-window.c:1286 -msgid "Cannot create window" -msgstr "ୱିଣ୍ଡୋ ସୃଷ୍ଟି କରିପାରିଲା ନାହିଁ" - -#: ../src/yelp-window.c:1292 -msgid "Cannot create search component" -msgstr "ଖୋଜା ଯନ୍ତ୍ରାଂଶ ସୃଷ୍ଟି କରିପାରିଲା ନାହିଁ" - -#: ../src/yelp-window.c:1464 -msgid "Fin_d:" -msgstr "ଖୋଜନ୍ତୁ: (_d)" - -#: ../src/yelp-window.c:1486 -msgid "Find _Previous" -msgstr "ପୂର୍ବବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_P)" +#: ../src/yelp-window.c:272 +msgid "Open Location" +msgstr "ଅବସ୍ଥାନକୁ ଖୋଲନ୍ତୁ" -#: ../src/yelp-window.c:1498 -msgid "Find _Next" -msgstr "ପରବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_N)" +#: ../src/yelp-window.c:299 +#, fuzzy +#| msgid "Applications" +msgid "Application" +msgstr "ପ୍ରୟୋଗ" -#: ../src/yelp-window.c:1511 -msgid "Phrase not found" -msgstr "ବାକ୍ୟାଂଶ ମିଳିଲା ନାହିଁ" +#: ../src/yelp-window.c:300 +msgid "A YelpApplication instance that controls this window" +msgstr "" -#: ../src/yelp-window.c:1640 +#: ../src/yelp-window.c:995 #, c-format -msgid "" -"The file ‘%s’ could not be read. This file might be missing, or you might " -"not have permissions to read it." -msgstr "‘%s’ ଫାଇଲ ପଢ଼ିହେଲା ନାହିଁ. ଏହି ଫାଇଲ ମିଳୁ ନାହିଁ, ବା ଆପଣଙ୍କର ଏହାକୁ ପଢ଼ିବାର ଅନୁମତି ନାହିଁ." - -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2480 -msgid "translator-credits" -msgstr "Sudhansu <srujanika@yahoo.com>" - -#: ../src/yelp-window.c:2483 -msgid "Yelp" -msgstr "ୟେଲ୍ପ" +msgid "%i match" +msgid_plural "%i matches" +msgstr[0] "" +msgstr[1] "" -#: ../src/yelp-window.c:2485 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "ନୋମ ଡେକ୍ସଟପ ପାଇଁ ଗୋଟିଏ ଦଲିଲିକରଣ ଖୋଜାଳି ଓ ପ୍ରଦର୍ଶକ." +#: ../src/yelp-window.c:1020 +msgid "No matches" +msgstr "" + +#: ../src/yelp-window.c:1297 +#, fuzzy +#| msgid "Loading..." +msgid "Loading" +msgstr "ଧାରଣ କରୁଅଛି" #: ../yelp.desktop.in.in.h:1 msgid "Get help with GNOME" msgstr "ନୋମ ପାଇଁ ସାହାଯ୍ଯ ପାଆନ୍ତୁ" + @@ -1,1516 +1,1524 @@ -# Copyright (C) 2005-2007 Free Software Foundation, Inc. -# This file is distributed under the same license as the program package. -# -# Andraz Tori <andraz.tori1@guest.arnes.si>, 2002. -# Matej Urbančič <mateju@svn.gnome.org>, 2006 - 2008. -# -msgid "" -msgstr "" -"Project-Id-Version: yelp\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-10-15 14:51+0100\n" -"PO-Revision-Date: 2008-01-25 15:58+0100\n" -"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" -"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" -"X-Poedit-Language: Slovenian\n" -"X-Poedit-Country: SLOVENIA\n" -"X-Poedit-SourceCharset: utf-8\n" - -#: ../data/info.xml.in.h:1 -msgid "GNU Info Pages" -msgstr "GNU strani podrobnosti" - -#: ../data/info.xml.in.h:2 -msgid "Traditional command line help (info)" -msgstr "Pomoč z ukazne vrstice (info)" - -#: ../data/man.xml.in.h:1 -msgid "Applications" -msgstr "Programi" - -#: ../data/man.xml.in.h:2 -msgid "BLT Functions" -msgstr "BLT funkcije" - -#: ../data/man.xml.in.h:3 -msgid "Configuration Files" -msgstr "Nastavitvene datoteke" - -#: ../data/man.xml.in.h:4 -msgid "Curses Functions" -msgstr "Curses funkcije" - -#: ../data/man.xml.in.h:5 -#: ../data/toc.xml.in.h:35 -msgid "Development" -msgstr "Razvoj" - -#: ../data/man.xml.in.h:6 -msgid "FORTRAN Functions" -msgstr "FORTRAN Funkcije" - -#: ../data/man.xml.in.h:7 -#: ../data/toc.xml.in.h:56 -msgid "Games" -msgstr "Igre" - -#: ../data/man.xml.in.h:8 -msgid "Hardware Devices" -msgstr "Strojne naprava" - -#: ../data/man.xml.in.h:9 -msgid "Kernel Routines" -msgstr "Funkcije jedra" - -#: ../data/man.xml.in.h:10 -msgid "Manual Pages" -msgstr "Strani priročnika" - -#: ../data/man.xml.in.h:11 -msgid "Network Audio Sound Functions" -msgstr "Omrežni zvočne funkcije" - -#: ../data/man.xml.in.h:12 -msgid "OpenSSL Applications" -msgstr "OpenSSL programi" - -#: ../data/man.xml.in.h:13 -msgid "OpenSSL Configuration" -msgstr "OpenSSL nastavitve" - -#: ../data/man.xml.in.h:14 -msgid "OpenSSL Functions" -msgstr "OpenSSL nastavitve" - -#: ../data/man.xml.in.h:15 -msgid "OpenSSL Overviews" -msgstr "OpenSSL pogledi" - -#: ../data/man.xml.in.h:16 -msgid "Overviews" -msgstr "Drugi pogledi" - -#: ../data/man.xml.in.h:17 -msgid "POSIX Functions" -msgstr "POSIX funkcije" - -#: ../data/man.xml.in.h:18 -msgid "POSIX Headers" -msgstr "POSIX Glave" - -#: ../data/man.xml.in.h:19 -msgid "Perl Functions" -msgstr "Perl funkcije" - -#: ../data/man.xml.in.h:20 -msgid "Qt Functions" -msgstr "Qt funkcije" - -#: ../data/man.xml.in.h:21 -msgid "Readline Functions" -msgstr "Readline funkcije" - -#: ../data/man.xml.in.h:22 -msgid "Section 0p" -msgstr "Odsek 0p" - -#: ../data/man.xml.in.h:23 -msgid "Section 1m" -msgstr "Odsek 1m" - -#: ../data/man.xml.in.h:24 -msgid "Section 1ssl" -msgstr "Odsek 1ssl" - -#: ../data/man.xml.in.h:25 -msgid "Section 1x" -msgstr "Odsek 1x" - -#: ../data/man.xml.in.h:26 -msgid "Section 2" -msgstr "Odsek 2" - -#: ../data/man.xml.in.h:27 -msgid "Section 3blt" -msgstr "Odsek 3blt" - -#: ../data/man.xml.in.h:28 -msgid "Section 3f" -msgstr "Odsek 3f" - -#: ../data/man.xml.in.h:29 -msgid "Section 3nas" -msgstr "Odsek 3nas" - -#: ../data/man.xml.in.h:30 -msgid "Section 3p" -msgstr "Odsek 3p" - -#: ../data/man.xml.in.h:31 -msgid "Section 3qt" -msgstr "Odsek 3qt" - -#: ../data/man.xml.in.h:32 -msgid "Section 3readline" -msgstr "Odsek 3readline" - -#: ../data/man.xml.in.h:33 -msgid "Section 3ssl" -msgstr "Odsek 3ssl" - -#: ../data/man.xml.in.h:34 -msgid "Section 3tiff" -msgstr "Odsek 3tiff" - -#: ../data/man.xml.in.h:35 -msgid "Section 4" -msgstr "Odsek 4" - -#: ../data/man.xml.in.h:36 -msgid "Section 4x" -msgstr "Odsek 4x" - -#: ../data/man.xml.in.h:37 -msgid "Section 5" -msgstr "Odsek 5" - -#: ../data/man.xml.in.h:38 -msgid "Section 5ssl" -msgstr "Odsek 5ssl" - -#: ../data/man.xml.in.h:39 -msgid "Section 5x" -msgstr "Odsek 5x" - -#: ../data/man.xml.in.h:40 -msgid "Section 6" -msgstr "Odsek 6" - -#: ../data/man.xml.in.h:41 -msgid "Section 6x" -msgstr "Odsek 6x" - -#: ../data/man.xml.in.h:42 -msgid "Section 7ssl" -msgstr "Odsek 7ssl" - -#: ../data/man.xml.in.h:43 -msgid "Section 7x" -msgstr "Odsek 7x" - -#: ../data/man.xml.in.h:44 -msgid "Section 9" -msgstr "Odsek 9" - -#: ../data/man.xml.in.h:45 -msgid "Sections 1, 1p, 1g and 1t" -msgstr "Odseki 1, 1p, 1g in 1t" - -#: ../data/man.xml.in.h:46 -msgid "Sections 3, 3o, and 3t" -msgstr "Odseki 3, 3o, in 3t" - -#: ../data/man.xml.in.h:47 -msgid "Sections 3form and 3menu" -msgstr "Odseki 3form in 3menu" - -#: ../data/man.xml.in.h:48 -msgid "Sections 3ncurses and 3curses" -msgstr "Odseki 3ncurses ind 3curses" - -#: ../data/man.xml.in.h:49 -msgid "Sections 3pm and 3perl" -msgstr "Odseki 3pm in 3perl" - -#: ../data/man.xml.in.h:50 -msgid "Sections 3x and 3X11" -msgstr "Odseki 3x in 3X11" - -#: ../data/man.xml.in.h:51 -msgid "Sections 7 and 7gcc" -msgstr "Odseki 7 in 7gcc" - -#: ../data/man.xml.in.h:52 -msgid "Sections 8 and 8l" -msgstr "Odseki 8 in 8l" - -#: ../data/man.xml.in.h:53 -msgid "System Administration" -msgstr "Sistemska administracija" - -#: ../data/man.xml.in.h:54 -msgid "System Calls" -msgstr "Sistemski klici" - -#: ../data/man.xml.in.h:55 -msgid "System V Form/Menu Functions" -msgstr "Sistem V Form/Menu funkcije" - -#: ../data/man.xml.in.h:56 -msgid "TIFF Functions" -msgstr "TIFF Funkcije" - -#: ../data/man.xml.in.h:57 -msgid "Termcap Applications" -msgstr "Termcap programi" - -#: ../data/man.xml.in.h:58 -msgid "Traditional command line help (man)" -msgstr "Pomoč z ukazne vrstice (man)" - -#: ../data/man.xml.in.h:59 -msgid "X11 Applications" -msgstr "X11 Programi" - -#: ../data/man.xml.in.h:60 -msgid "X11 Configuration" -msgstr "X11 nastavitve" - -#: ../data/man.xml.in.h:61 -msgid "X11 Devices" -msgstr "X11 naprave" - -#: ../data/man.xml.in.h:62 -msgid "X11 Functions" -msgstr "X11 funkcije" - -#: ../data/man.xml.in.h:63 -msgid "X11 Games" -msgstr "X11 igre" - -#: ../data/man.xml.in.h:64 -msgid "X11 Overviews" -msgstr "X11 pogledi" - -#: ../data/toc.xml.in.h:1 -msgid "2D Graphics" -msgstr "2D oblikovanje" - -#: ../data/toc.xml.in.h:2 -msgid "3D Graphics" -msgstr "3D oblikovanje" - -#: ../data/toc.xml.in.h:3 -msgid "Accessibility" -msgstr "Dostopnost" - -#: ../data/toc.xml.in.h:4 -msgid "Action Games" -msgstr "Akcijske igre" - -#: ../data/toc.xml.in.h:5 -msgid "Adventure Games" -msgstr "Igre avanture" - -#: ../data/toc.xml.in.h:6 -msgid "Amusement" -msgstr "Zabava" - -#: ../data/toc.xml.in.h:7 -msgid "Applications for viewing and manipulating graphics" -msgstr "Programi za obdelavo in pregledovanje slik" - -#: ../data/toc.xml.in.h:8 -msgid "Applications related to audio and video" -msgstr "Programi povezani z zvokom in sliko" - -#: ../data/toc.xml.in.h:9 -msgid "Applications that teach or aid in learning" -msgstr "Programi povezani z učenjem" - -#: ../data/toc.xml.in.h:10 -msgid "Arcade Games" -msgstr "Arkadne igre" - -#: ../data/toc.xml.in.h:11 -msgid "Archiving Tools" -msgstr "Orodja za arhiviranje" - -#: ../data/toc.xml.in.h:12 -msgid "Art" -msgstr "Umetnost" - -#: ../data/toc.xml.in.h:13 -msgid "Artificial Intelligence" -msgstr "Umetna Inteligenca" - -#: ../data/toc.xml.in.h:14 -msgid "Astronomy" -msgstr "Astronomija" - -#: ../data/toc.xml.in.h:15 -msgid "Biology" -msgstr "Biologija" - -#: ../data/toc.xml.in.h:16 -msgid "Blocks Games" -msgstr "Igre blokov" - -#: ../data/toc.xml.in.h:17 -msgid "Board Games" -msgstr "Tabelne Igre" - -#: ../data/toc.xml.in.h:18 -msgid "Building" -msgstr "Gredbeništvo" - -#: ../data/toc.xml.in.h:19 -msgid "Calculator" -msgstr "Kalkulator" - -#: ../data/toc.xml.in.h:20 -msgid "Calendar" -msgstr "Koledar" - -#: ../data/toc.xml.in.h:21 -msgid "Card Games" -msgstr "Igre s kartami" - -#: ../data/toc.xml.in.h:22 -msgid "Charting Tools" -msgstr "Orodja za izris grafov" - -#: ../data/toc.xml.in.h:23 -msgid "Chat" -msgstr "Klepet" - -#: ../data/toc.xml.in.h:24 -msgid "Chemistry" -msgstr "Kemija" - -#: ../data/toc.xml.in.h:25 -msgid "Clocks" -msgstr "Ure" - -#: ../data/toc.xml.in.h:26 -msgid "Compression Tools" -msgstr "Orodja za stiskanjee" - -#: ../data/toc.xml.in.h:27 -msgid "Computer Science" -msgstr "Računalništvo" - -#: ../data/toc.xml.in.h:28 -msgid "Construction" -msgstr "Gradbeništvo" - -#: ../data/toc.xml.in.h:29 -msgid "Contact Management" -msgstr "Upravljanje s stiki" - -#: ../data/toc.xml.in.h:30 -msgid "Data Visualization" -msgstr "Prikazovanje podatkov" - -#: ../data/toc.xml.in.h:31 -msgid "Databases" -msgstr "Podatkovne zbirke" - -#: ../data/toc.xml.in.h:32 -msgid "Debuggers" -msgstr "Razhroščevalniki" - -#: ../data/toc.xml.in.h:33 -msgid "Desktop" -msgstr "Namizje" - -#: ../data/toc.xml.in.h:34 -msgid "Desktop Settings" -msgstr "Nastavitve namizja" - -#: ../data/toc.xml.in.h:36 -msgid "Dialup" -msgstr "Klicanje" - -#: ../data/toc.xml.in.h:37 -msgid "Dictionaries" -msgstr "Slovarji" - -#. Translators: this is a menu title for burning audio and video to dics -#: ../data/toc.xml.in.h:39 -msgid "Disc Burning" -msgstr "Peka zgoščenk" - -#: ../data/toc.xml.in.h:40 -msgid "Economy" -msgstr "Ekonomija" - -#: ../data/toc.xml.in.h:41 -msgid "Education" -msgstr "Izobraževanje" - -#: ../data/toc.xml.in.h:42 -msgid "Electricity" -msgstr "Elektrika" - -#: ../data/toc.xml.in.h:43 -msgid "Electronics" -msgstr "Elektronika" - -#: ../data/toc.xml.in.h:44 -msgid "Email Tools" -msgstr "Orodja za elektronsko pošto" - -#: ../data/toc.xml.in.h:45 -msgid "Emulator" -msgstr "Emulator" - -#: ../data/toc.xml.in.h:46 -msgid "Engineering" -msgstr "Inženiring" - -#: ../data/toc.xml.in.h:47 -msgid "File Manager" -msgstr "Upravljalnik datotek" - -#: ../data/toc.xml.in.h:48 -msgid "File Tools" -msgstr "Datotečna orodja" - -#: ../data/toc.xml.in.h:49 -msgid "File Transfer" -msgstr "Prenos datotek" - -#: ../data/toc.xml.in.h:50 -msgid "Filesystem" -msgstr "Datotečni sistem" - -#: ../data/toc.xml.in.h:51 -msgid "Financial Tools" -msgstr "Finančna orodja" - -#: ../data/toc.xml.in.h:52 -msgid "Flow Charting Tools" -msgstr "Orodja za izdelovanje grafikonov" - -#: ../data/toc.xml.in.h:53 -msgid "GNOME Applications" -msgstr "GNOME programi" - -#: ../data/toc.xml.in.h:54 -msgid "GTK" -msgstr "GTK" - -#: ../data/toc.xml.in.h:55 -msgid "GUI Designers" -msgstr "Oblikovanje uporabniškega vmesnika" - -#: ../data/toc.xml.in.h:57 -msgid "Generic applications for the GNOME environment" -msgstr "Program GNOME okolja" - -#: ../data/toc.xml.in.h:58 -msgid "Generic applications for the KDE environment" -msgstr "Programi privzeti za namizje KDE" - -#: ../data/toc.xml.in.h:59 -msgid "Geography" -msgstr "Geografija" - -#: ../data/toc.xml.in.h:60 -msgid "Geology" -msgstr "Geologija" - -#: ../data/toc.xml.in.h:61 -msgid "Geoscience" -msgstr "Geološke znanosti" - -#: ../data/toc.xml.in.h:62 -msgid "Graphics" -msgstr "Grafika" - -#: ../data/toc.xml.in.h:63 -msgid "Guides and manuals for applications that connect to the outside world" -msgstr "Vodila in priročniki za programe povezane v splet" - -#: ../data/toc.xml.in.h:64 -msgid "Guides for getting involved in development" -msgstr "Vodila za sodelovanje pri razvoju programov" - -#: ../data/toc.xml.in.h:65 -msgid "Ham Radio" -msgstr "Ham Radio" - -#: ../data/toc.xml.in.h:66 -msgid "Hardware Settings" -msgstr "Strojne nastavitve" - -#: ../data/toc.xml.in.h:67 -msgid "Have some fun" -msgstr "Zabava in sprostitev" - -#: ../data/toc.xml.in.h:68 -msgid "History" -msgstr "Zgodovina" - -#: ../data/toc.xml.in.h:69 -msgid "IDEs" -msgstr "IDE" - -#: ../data/toc.xml.in.h:70 -msgid "IRC Clients" -msgstr "IRC odjemalci" - -#: ../data/toc.xml.in.h:71 -msgid "Image Processing" -msgstr "Obdelovanje slik" - -#: ../data/toc.xml.in.h:72 -msgid "Instant Messaging" -msgstr "Trenutno sporočanje" - -#: ../data/toc.xml.in.h:73 -msgid "Internet" -msgstr "Internet" - -#: ../data/toc.xml.in.h:74 -msgid "Java" -msgstr "Java" - -#: ../data/toc.xml.in.h:75 -msgid "KDE Applications" -msgstr "KDE programi" - -#: ../data/toc.xml.in.h:76 -msgid "Kids Games" -msgstr "Otroške igre" - -#: ../data/toc.xml.in.h:77 -msgid "Learn more about making your system more accessible for a range of disabilities" -msgstr "Spoznajte več o prilagoditvi sistema za širši krog nedostopnosti" - -#: ../data/toc.xml.in.h:78 -msgid "Licenses" -msgstr "Licence" - -#: ../data/toc.xml.in.h:79 -msgid "Literature" -msgstr "Literatura" - -#: ../data/toc.xml.in.h:80 -msgid "Logic Games" -msgstr "Logične igre" - -#: ../data/toc.xml.in.h:81 -msgid "Math" -msgstr "Matematika" - -#: ../data/toc.xml.in.h:82 -msgid "Medical Software" -msgstr "Medicinski programi" - -#: ../data/toc.xml.in.h:83 -msgid "Midi" -msgstr "Midi" - -#: ../data/toc.xml.in.h:84 -msgid "Miscellaneous Documentation" -msgstr "Različni dokumenti" - -#: ../data/toc.xml.in.h:85 -msgid "Mixers" -msgstr "Mešala" - -#: ../data/toc.xml.in.h:86 -msgid "Monitor" -msgstr "Nadzorovanje" - -#: ../data/toc.xml.in.h:87 -msgid "Motif" -msgstr "Motif" - -#: ../data/toc.xml.in.h:88 -msgid "Music" -msgstr "Glasba" - -#: ../data/toc.xml.in.h:89 -msgid "News" -msgstr "Novice" - -#: ../data/toc.xml.in.h:90 -msgid "Numerical Analysis" -msgstr "Številčne analize" - -#: ../data/toc.xml.in.h:91 -msgid "OCR" -msgstr "OCR" - -#: ../data/toc.xml.in.h:92 -msgid "Office Applications" -msgstr "Pisarniški programi" - -#: ../data/toc.xml.in.h:93 -msgid "Office applications" -msgstr "Pisarniški programi" - -#: ../data/toc.xml.in.h:94 -msgid "Other Documentation" -msgstr "Dodatna dokumentacija" - -#: ../data/toc.xml.in.h:95 -msgid "P2P" -msgstr "P2P" - -#: ../data/toc.xml.in.h:96 -msgid "PDA Communication" -msgstr "PDA komuniciranje" - -#: ../data/toc.xml.in.h:97 -msgid "Package Manager" -msgstr "Upravljalnik paketov" - -#: ../data/toc.xml.in.h:98 -msgid "Parallel Computing" -msgstr "Vzporedno računanje" - -#: ../data/toc.xml.in.h:99 -msgid "Photography" -msgstr "Fotografija" - -#: ../data/toc.xml.in.h:100 -msgid "Physics" -msgstr "Fizika" - -#. Translators: this is a menu title for audio and video players -#: ../data/toc.xml.in.h:102 -msgid "Players" -msgstr "Predvajalniki" - -#: ../data/toc.xml.in.h:103 -msgid "Presentation Tools" -msgstr "Orodja za izdelovanje predstavitev" - -#: ../data/toc.xml.in.h:104 -#: ../src/yelp-print.c:337 -#: ../src/yelp-print.c:364 -msgid "Printing" -msgstr "Tiskanje" - -#: ../data/toc.xml.in.h:105 -msgid "Profiling Tools" -msgstr "Orodja za profiliranje" - -#: ../data/toc.xml.in.h:106 -msgid "Project Management Tools" -msgstr "Orodja za upravljanje projektov" - -#: ../data/toc.xml.in.h:107 -msgid "Publishing" -msgstr "Objavljanje" - -#: ../data/toc.xml.in.h:108 -msgid "Qt" -msgstr "Qt" - -#: ../data/toc.xml.in.h:109 -msgid "Raster Graphics" -msgstr "Rastersko oblikovanje" - -#. Translators: this is a menu title for audio and video recorders -#: ../data/toc.xml.in.h:111 -msgid "Recorders" -msgstr "Snemalniki" - -#: ../data/toc.xml.in.h:112 -msgid "Remote Access" -msgstr "Oddaljeni dostop" - -#: ../data/toc.xml.in.h:113 -msgid "Revision Control" -msgstr "Nadzor revizij" - -#: ../data/toc.xml.in.h:114 -msgid "Robotics" -msgstr "Robotika" - -#: ../data/toc.xml.in.h:115 -msgid "Role Playing Games" -msgstr "Igre igranja vlog" - -#: ../data/toc.xml.in.h:116 -msgid "Scanning" -msgstr "Skeniranje" - -#: ../data/toc.xml.in.h:117 -msgid "Science" -msgstr "Znanost" - -#: ../data/toc.xml.in.h:118 -msgid "Security" -msgstr "Varnost" - -#: ../data/toc.xml.in.h:119 -msgid "Sequencers" -msgstr "Sekvenčniki" - -#: ../data/toc.xml.in.h:120 -msgid "Settings" -msgstr "Nastavitve" - -#: ../data/toc.xml.in.h:121 -msgid "Settings users can manipulate to make their environment more pleasant" -msgstr "Nastavitve s katerimi si uporabnik prilagaja delovno okolje" - -#: ../data/toc.xml.in.h:122 -msgid "Simulation Games" -msgstr "Simulacijske igre" - -#: ../data/toc.xml.in.h:123 -msgid "Sound" -msgstr "Zvok" - -#: ../data/toc.xml.in.h:124 -msgid "Sound & Video" -msgstr "Zvok in video" - -#: ../data/toc.xml.in.h:125 -msgid "Sound & Video Editing" -msgstr "Urejanje zvoka & slike" - -#: ../data/toc.xml.in.h:126 -msgid "Sports" -msgstr "Šport" - -#: ../data/toc.xml.in.h:127 -msgid "Sports Games" -msgstr "Športne igre" - -#: ../data/toc.xml.in.h:128 -msgid "Spreadsheet Tools" -msgstr "Orodja za izdelovanje preglednic" - -#: ../data/toc.xml.in.h:129 -msgid "Strategy Games" -msgstr "Strateške igre" - -#: ../data/toc.xml.in.h:130 -msgid "System" -msgstr "Sistem" - -#: ../data/toc.xml.in.h:131 -msgid "TV" -msgstr "TV" - -#: ../data/toc.xml.in.h:132 -msgid "Telephony" -msgstr "Telefonija" - -#: ../data/toc.xml.in.h:133 -msgid "Telephony Tools" -msgstr "Orodja telefonije" - -#: ../data/toc.xml.in.h:134 -msgid "Terminal Emulator" -msgstr "Terminalski emulatorji" - -#: ../data/toc.xml.in.h:135 -msgid "Text Editors" -msgstr "Urejevalniki besedila" - -#: ../data/toc.xml.in.h:136 -msgid "Text Tools" -msgstr "Besedilna orodja" - -#: ../data/toc.xml.in.h:137 -msgid "Tools to help you manage your computer" -msgstr "Orodja za upravljanje z računalnikom" - -#: ../data/toc.xml.in.h:138 -msgid "Translation Tools" -msgstr "Orodja za prevajanje" - -#: ../data/toc.xml.in.h:139 -msgid "Tuners" -msgstr "Uravnalci" - -#: ../data/toc.xml.in.h:140 -msgid "Utilities" -msgstr "Pripomočki" - -#: ../data/toc.xml.in.h:141 -msgid "Utilities to help you get work done" -msgstr "Pripomočki za izvajanje nalog" - -#: ../data/toc.xml.in.h:142 -msgid "Vector Graphics" -msgstr "Vektorsko oblikovanje" - -#: ../data/toc.xml.in.h:143 -msgid "Video" -msgstr "Video" - -#: ../data/toc.xml.in.h:144 -msgid "Video Conference" -msgstr "VideoKonference" - -#. Translators: This is a menu title for graphics viewing applications -#: ../data/toc.xml.in.h:146 -msgid "Viewer" -msgstr "Pregledovalnik" - -#: ../data/toc.xml.in.h:147 -msgid "Web Browser" -msgstr "Spletni brskalnik" - -#: ../data/toc.xml.in.h:148 -msgid "Web Development" -msgstr "Razvoj spletišča" - -#: ../data/toc.xml.in.h:149 -msgid "Welcome to the GNOME Help Browser" -msgstr "Dobrodošli v GNOME brskalniku pomoči" - -#: ../data/toc.xml.in.h:150 -msgid "Word Processors" -msgstr "Pisarniški urejevalniki besedil" - -#: ../data/ui/yelp.glade.h:1 -msgid "<b>Accessibility</b>" -msgstr "<b>Dostopnost</b>" - -#: ../data/ui/yelp.glade.h:2 -msgid "<b>Fonts</b>" -msgstr "<b>Pisave</b>" - -#: ../data/ui/yelp.glade.h:3 -msgid "Add Bookmark" -msgstr "Dodaj zaznamek" - -#: ../data/ui/yelp.glade.h:4 -msgid "Bookmarks" -msgstr "Zaznamki" - -#: ../data/ui/yelp.glade.h:5 -msgid "C_ase sensitive" -msgstr "Velike in m_ale črke" - -#: ../data/ui/yelp.glade.h:6 -msgid "Find" -msgstr "Najdi" - -#: ../data/ui/yelp.glade.h:7 -msgid "Open Location" -msgstr "Odpri lokacijo" - -#: ../data/ui/yelp.glade.h:8 -msgid "Preferences" -msgstr "Nastavitve" - -#: ../data/ui/yelp.glade.h:9 -msgid "Re_name" -msgstr "Preime_nuj" - -#: ../data/ui/yelp.glade.h:10 -msgid "_Bookmarks:" -msgstr "_Zaznamki:" - -#: ../data/ui/yelp.glade.h:11 -msgid "_Browse with caret" -msgstr "_Brskanje s kazalko" - -#: ../data/ui/yelp.glade.h:12 -msgid "_Find:" -msgstr "_Poišči:" - -#: ../data/ui/yelp.glade.h:13 -msgid "_Fixed width:" -msgstr "_Določena širina:" - -#: ../data/ui/yelp.glade.h:14 -msgid "_Location:" -msgstr "_Položaj:" - -#: ../data/ui/yelp.glade.h:15 -msgid "_Next" -msgstr "_Naslednje" - -#: ../data/ui/yelp.glade.h:16 -msgid "_Previous" -msgstr "_Predhodno" - -#: ../data/ui/yelp.glade.h:17 -msgid "_Title:" -msgstr "_Naslov:" - -#: ../data/ui/yelp.glade.h:18 -msgid "_Use system fonts" -msgstr "_Uporabi sistemske pisave" - -#: ../data/ui/yelp.glade.h:19 -msgid "_Variable width:" -msgstr "_Spremenljiva širina:" - -#: ../data/ui/yelp.glade.h:20 -msgid "_Wrap around" -msgstr "_Prelom vrstic" - -#: ../data/yelp.schemas.in.h:1 -msgid "Font for fixed text" -msgstr "Pisava za določeno besedilo" - -#: ../data/yelp.schemas.in.h:2 -msgid "Font for text" -msgstr "Pisava za besedilo" - -#: ../data/yelp.schemas.in.h:3 -msgid "Font for text with fixed width." -msgstr "Pisava za besedilo z določeno širino." - -#: ../data/yelp.schemas.in.h:4 -msgid "Font for text with variable width." -msgstr "Pisava za besedilo s spremenljivo širino." - -#: ../data/yelp.schemas.in.h:5 -msgid "Use a keyboard-controllable caret when viewing pages." -msgstr "Uporabi s tipkovnico nadzorovano kazalko med ogledom strani." - -#: ../data/yelp.schemas.in.h:6 -msgid "Use caret" -msgstr "Uporabi kazalko" - -#: ../data/yelp.schemas.in.h:7 -msgid "Use system fonts" -msgstr "Uporabi sistemske pisave" - -#: ../data/yelp.schemas.in.h:8 -msgid "Use the default fonts set for the system." -msgstr "Uporabi privzete pisave za sistem." - -#: ../src/yelp-bookmarks.c:150 -msgid "Open Bookmark in New Window" -msgstr "Odpri zaznamek v novem oknu" - -#: ../src/yelp-bookmarks.c:154 -msgid "Rename Bookmark" -msgstr "Preimenuj zaznamek" - -#: ../src/yelp-bookmarks.c:158 -msgid "Remove Bookmark" -msgstr "Odstrani zaznamek" - -#: ../src/yelp-bookmarks.c:315 -#, c-format -msgid "A bookmark titled %s already exists for this page." -msgstr "Zaznamek z imenom %s za to stran že obstaja." - -#: ../src/yelp-bookmarks.c:392 -#, c-format -msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "Zaznamek z imenom <b>%s</b> za to stran že obstaja." - -#: ../src/yelp-bookmarks.c:405 -msgid "Help Topics" -msgstr "Teme pomoči" - -#: ../src/yelp-bookmarks.c:420 -msgid "Document Sections" -msgstr "Odseki dokumentov" - -#: ../src/yelp-db-print.c:258 -#: ../src/yelp-db-print.c:350 -#: ../src/yelp-docbook.c:275 -#: ../src/yelp-docbook.c:367 -#: ../src/yelp-info.c:243 -#: ../src/yelp-info.c:338 -#: ../src/yelp-man.c:293 -#: ../src/yelp-man.c:388 -#: ../src/yelp-toc.c:266 -#: ../src/yelp-toc.c:365 -msgid "Page not found" -msgstr "Strani ni mogoče najti" - -#: ../src/yelp-db-print.c:259 -#: ../src/yelp-docbook.c:276 -#: ../src/yelp-info.c:244 -#: ../src/yelp-man.c:294 -#, c-format -msgid "The page %s was not found in the document %s." -msgstr "Strani %s v dokumentu %s ni mogoče najti." - -#: ../src/yelp-db-print.c:351 -#: ../src/yelp-docbook.c:368 -#: ../src/yelp-info.c:339 -#: ../src/yelp-man.c:389 -#, c-format -msgid "The requested page was not found in the document %s." -msgstr "Zahtevane strani ni mogoče najti v dokumentu %s." - -#: ../src/yelp-db-print.c:392 -#: ../src/yelp-docbook.c:409 -#: ../src/yelp-info.c:379 -#: ../src/yelp-man.c:431 -msgid "File not found" -msgstr "Datoteke ni mogoče najti" - -#: ../src/yelp-db-print.c:393 -#: ../src/yelp-docbook.c:410 -#: ../src/yelp-info.c:380 -#: ../src/yelp-man.c:432 -#, c-format -msgid "The file ‘%s’ does not exist." -msgstr "Dokument '%s' ne obstaja." - -#: ../src/yelp-db-print.c:406 -#: ../src/yelp-db-print.c:418 -#: ../src/yelp-docbook.c:423 -#: ../src/yelp-docbook.c:435 -#: ../src/yelp-info.c:394 -#: ../src/yelp-man.c:460 -#: ../src/yelp-toc.c:436 -msgid "Could not parse file" -msgstr "Ni mogoče razčleniti datoteke" - -#: ../src/yelp-db-print.c:407 -#: ../src/yelp-docbook.c:424 -#, c-format -msgid "The file ‘%s’ could not be parsed because it is not a well-formed XML document." -msgstr "Datoteke ‘%s’ ni mogoče razčleniti ni pravilnem XML zapisu." - -#: ../src/yelp-db-print.c:419 -#: ../src/yelp-docbook.c:436 -#, c-format -msgid "The file ‘%s’ could not be parsed because one or more of its included files is not a well-formed XML document." -msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilnem XML zapisu." - -#: ../src/yelp-db-print.c:765 -#: ../src/yelp-docbook.c:786 -msgid "Unknown" -msgstr "Neznano" - -#: ../src/yelp-error.c:132 -#: ../src/yelp-error.c:139 -msgid "Unknown Error" -msgstr "Neznana napaka" - -#: ../src/yelp-error.c:136 -#: ../src/yelp-window.c:1630 -msgid "Could Not Read File" -msgstr "Ni mogoče prebrati dokumenta" - -#: ../src/yelp-error.c:146 -msgid "No information is available about this error." -msgstr "Podrobnosti o napaki niso na voljo." - -#: ../src/yelp-info.c:395 -#, c-format -msgid "The file ‘%s’ could not be parsed because it is not a well-formed info page." -msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilno oblikovanem zapisu info." - -#: ../src/yelp-io-channel.c:123 -#, c-format -msgid "The file ‘%s’ could not be read and decoded. The file may be compressed in an unsupported format." -msgstr "Datoteke ‘%s’ ni mogoče prebrati in dekodirati. Datoteka je morda skrčena v nepodprtem arhivu." - -#: ../src/yelp-main.c:92 -msgid "Use a private session" -msgstr "Uporabi osebno sejo" - -#: ../src/yelp-main.c:101 -msgid "Define which cache directory to use" -msgstr "Določitev predpomnilniškega imenika za uporabo" - -#. Commandline parsing is done here -#: ../src/yelp-main.c:358 -msgid " GNOME Help Browser" -msgstr "Gnome brskalnik pomoči" - -#: ../src/yelp-main.c:378 -#: ../yelp.desktop.in.in.h:2 -msgid "Help" -msgstr "Pomoč" - -#: ../src/yelp-man.c:461 -#, c-format -msgid "The file ‘%s’ could not be parsed because it is not a well-formed man page." -msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilno oblikovanem zapisu man strani." - -#: ../src/yelp-print.c:97 -msgid "Print" -msgstr "Natisni" - -#: ../src/yelp-print.c:167 -msgid "Preparing to print" -msgstr "Priprava na tiskanje" - -#: ../src/yelp-print.c:261 -msgid "Printing is not supported on this printer" -msgstr "Tiskanje s tem tiskalnikom ni podprto" - -#: ../src/yelp-print.c:264 -#, c-format -msgid "Printer %s does not support postscript printing." -msgstr "Tiskalnik %s ne podpira postscript tiskanja." - -#: ../src/yelp-print.c:366 -msgid "Waiting to print" -msgstr "Čakanje na tiskanje" - -#: ../src/yelp-print.c:578 -msgid "An error occurred while printing" -msgstr "Med tiskanjem je prišlo do napake" - -#: ../src/yelp-print.c:582 -#, c-format -msgid "It was not possible to print your document: %s" -msgstr "Dokumenta ni bilo mogoče natisniti: %s" - -#: ../src/yelp-search-parser.c:68 -msgid "the GNOME Support Forums" -msgstr "GNOME Podporni Forumi" - -#: ../src/yelp-search-parser.c:286 -#, c-format -msgid "No results for \"%s\"" -msgstr "Ni zadetkov za \"%s\"" - -#: ../src/yelp-search-parser.c:287 -msgid "Try using different words to describe the problem you're having or the topic you want help with." -msgstr "Poskusite uporabiti drugačne besede za opis vašega problema ali teme, za katero potrebujete pomoč." - -#: ../src/yelp-search-parser.c:290 -#, c-format -msgid "Search results for \"%s\"" -msgstr "Iskalni zadetki za \"%s\"" - -#. TRANSLATORS: Please don't do anything funny with the -#. * format arguement. It isn't really going through a printf -#. * The %s is used to indicate where the name of the site (linked) -#. * should be. This is done in the XSLT -#. -#: ../src/yelp-search-parser.c:304 -#, c-format -msgid "Repeat the search online at %s" -msgstr "Ponovi iskanje na mreži %s" - -#. Translators: Do not translate this list exactly. These are -#. * colon-separated words that aren't useful for choosing search -#. * results; they will be different for each language. Include -#. * pronouns, articles, very common verbs and prepositions, -#. * words from question structures like "tell me about" and -#. * "how do I", and words for functional states like "not", -#. * "work", and "broken". -#. -#: ../src/yelp-search-parser.c:874 -msgid "a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:where:who:will:with:won't:wont:why:work:working:works" -msgstr "da:od:ne:k:kot:h:o:in:ali:to:tisto:tisti:tista" - -#. Translators: This is a list of common prefixes for words. -#. * Do not translate this directly. Instead, use a colon -#. * seperated list of word-starts. In English, an example -#. * is re-. If there is none, please use the term NULL -#. * If there is only one, please put a colon after. -#. * E.g. if the common prefix is re then the string would be -#. * "re:" -#. -#: ../src/yelp-search-parser.c:890 -msgid "re" -msgstr "NULL" - -#. Translators: This is a list of (guess what?) common suffixes -#. * to words. Things that may be put at ends of words to slightly -#. * alter their meaning (like -ing and -s in English). This is a -#. * colon seperated list (I like colons). If there are none, -#. * please use the string NULL. If there is only 1, please -#. * add a colon at the end of the list -#. -#: ../src/yelp-search-parser.c:899 -msgid "ers:er:ing:es:s:'s" -msgstr "NULL" - -#: ../src/yelp-search-parser.c:1095 -msgid "No Comment" -msgstr "Ni opomb" - -#. Much bigger problems -#: ../src/yelp-search.c:238 -msgid "Search could not be processed" -msgstr "Ni mogoče izvesti iskanja" - -#: ../src/yelp-search.c:239 -msgid "The requested search could not be processed." -msgstr "Iskalnega niza ni mogoče izvesti." - -#: ../src/yelp-search.c:366 -msgid "Cannot process the search" -msgstr "Ni mogoče izvesti iskanja" - -#: ../src/yelp-search.c:367 -msgid "The search processor returned invalid results" -msgstr "Iskalnik je vrnil neveljavne rezultate" - -#: ../src/yelp-toc.c:267 -#, c-format -msgid "The page %s was not found in the TOC." -msgstr "Strani %s ni mogoče najti v kazalu." - -#: ../src/yelp-toc.c:366 -msgid "The requested page was not found in the TOC." -msgstr "Zahtevane stran ni mogoče najti v kazalu" - -#: ../src/yelp-toc.c:437 -msgid "The TOC file could not be parsed because it is not a well-formed XML document." -msgstr "Datoteke TOC ni mogoče razčleniti, ker ni pravilno oblikovana v formatu XML." - -#: ../src/yelp-transform.c:80 -msgid "Invalid Stylesheet" -msgstr "Neveljavna oblikovna datoteka" - -#: ../src/yelp-transform.c:81 -#, c-format -msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." -msgstr "Oblikovna datoteka XSLT ‘%s’ ne obstaja ali pa ni zapisana v veljavnem zapisu." - -#: ../src/yelp-transform.c:112 -msgid "Broken Transformation" -msgstr "Pokvarjena pretvorba" - -#: ../src/yelp-transform.c:113 -msgid "An unknown error occurred while attempting to transform the document." -msgstr "Prišlo je do neznane napake med poskusom pretvorbe dokumenta." - -#: ../src/yelp-transform.c:372 -msgid "No href attribute found on yelp:document\n" -msgstr "Ni mogoče najti atributa href na yelp:dokument\n" - -#: ../src/yelp-transform.c:387 -msgid "Out of memory" -msgstr "Primanjkuje pomnilnika" - -#: ../src/yelp-window.c:304 -msgid "_File" -msgstr "_Datoteka" - -#: ../src/yelp-window.c:305 -msgid "_Edit" -msgstr "_Uredi" - -#: ../src/yelp-window.c:306 -msgid "_Go" -msgstr "Po_jdi" - -#: ../src/yelp-window.c:307 -msgid "_Bookmarks" -msgstr "_Zaznamki" - -#: ../src/yelp-window.c:308 -msgid "_Help" -msgstr "_Pomoč" - -#: ../src/yelp-window.c:311 -msgid "_New Window" -msgstr "_Novo okno" - -#: ../src/yelp-window.c:316 -msgid "Print This Document ..." -msgstr "Natisni dokument ..." - -#: ../src/yelp-window.c:321 -msgid "Print This Page ..." -msgstr "Natisni stran ..." - -#: ../src/yelp-window.c:326 -msgid "About This Document" -msgstr "O dokumentu" - -#: ../src/yelp-window.c:331 -msgid "Open _Location" -msgstr "Odpri _povezavo" - -#: ../src/yelp-window.c:336 -msgid "_Close Window" -msgstr "_Zapri okno" - -#: ../src/yelp-window.c:342 -msgid "_Copy" -msgstr "_Kopiraj" - -#: ../src/yelp-window.c:348 -msgid "_Select All" -msgstr "_Izberi vse" - -#: ../src/yelp-window.c:353 -msgid "_Find..." -msgstr "_Poišči ..." - -#: ../src/yelp-window.c:358 -msgid "Find Pre_vious" -msgstr "Poišči _predhodne" - -#: ../src/yelp-window.c:360 -msgid "Find previous occurrence of the word or phrase" -msgstr "Poišči predhodno besedo ali frazo" - -#: ../src/yelp-window.c:363 -msgid "Find Ne_xt" -msgstr "Poišči na_slednjo" - -#: ../src/yelp-window.c:365 -msgid "Find next occurrence of the word or phrase" -msgstr "Poišči naslednjo besedo ali frazo" - -#: ../src/yelp-window.c:368 -msgid "_Preferences" -msgstr "_Lastnosti" - -#: ../src/yelp-window.c:373 -msgid "_Reload" -msgstr "_Osveži" - -#: ../src/yelp-window.c:385 -msgid "_Back" -msgstr "Naza_j" - -#: ../src/yelp-window.c:387 -msgid "Show previous page in history" -msgstr "Pokaži predhodno stran zgodovine" - -#: ../src/yelp-window.c:390 -msgid "_Forward" -msgstr "_Naprej" - -#: ../src/yelp-window.c:392 -msgid "Show next page in history" -msgstr "Pokaži naslednjo stran v zgodovini" - -#: ../src/yelp-window.c:395 -msgid "_Help Topics" -msgstr "_Teme pomoči" - -#: ../src/yelp-window.c:397 -msgid "Go to the listing of help topics" -msgstr "Pojdi na seznam pomoči" - -#: ../src/yelp-window.c:400 -msgid "_Previous Section" -msgstr "_Predhodni odsek" - -#: ../src/yelp-window.c:405 -msgid "_Next Section" -msgstr "_Naslednji odsek" - -#: ../src/yelp-window.c:410 -#: ../src/yelp-window.c:442 -msgid "_Contents" -msgstr "_Vsebina" - -#: ../src/yelp-window.c:416 -msgid "_Add Bookmark" -msgstr "_Dodaj zaznamek" - -#: ../src/yelp-window.c:421 -msgid "_Edit Bookmarks..." -msgstr "_Uredi zaznamke ..." - -#: ../src/yelp-window.c:427 -msgid "_Open Link" -msgstr "_Odpri povezavo" - -#: ../src/yelp-window.c:432 -msgid "Open Link in _New Window" -msgstr "Odpri povezavo v _novem oknu" - -#: ../src/yelp-window.c:437 -msgid "_Copy Link Address" -msgstr "_Kopiraj naslov povezave" - -#: ../src/yelp-window.c:444 -msgid "Help On this application" -msgstr "Pomoč programa" - -#: ../src/yelp-window.c:447 -msgid "_About" -msgstr "_O programu" - -#: ../src/yelp-window.c:452 -msgid "Copy _Email Address" -msgstr "Kopiraj elektronski naslov" - -#: ../src/yelp-window.c:501 -msgid "Help Browser" -msgstr "Brskalnik pomoči" - -#: ../src/yelp-window.c:592 -#: ../src/yelp-window.c:644 -#: ../src/yelp-window.c:1684 -msgid "Loading..." -msgstr "Nalaganje ..." - -#: ../src/yelp-window.c:593 -#: ../src/yelp-window.c:645 -msgid "Unknown Page" -msgstr "Neznana stran" - -#: ../src/yelp-window.c:1008 -#: ../src/yelp-window.c:1074 -#, c-format -msgid "The requested URI \"%s\" is invalid" -msgstr "Zahtevan naslov URI \"%s\" ni veljaven" - -#: ../src/yelp-window.c:1009 -#: ../src/yelp-window.c:1075 -msgid "Unable to load page" -msgstr "Ni mogoče naložiti strani" - -#: ../src/yelp-window.c:1069 -msgid "Error executing \"gnome-open\"" -msgstr "Napaka izvedbe \"gnome-open\"" - -#: ../src/yelp-window.c:1253 -msgid "_Search:" -msgstr "_Išči:" - -#: ../src/yelp-window.c:1254 -msgid "Search for other documentation" -msgstr "Iskanje druge dokumentacije" - -#: ../src/yelp-window.c:1274 -msgid "Cannot create window" -msgstr "Ni mogoče ustvariti okna" - -#: ../src/yelp-window.c:1280 -msgid "Cannot create search component" -msgstr "Ni mogoče ustvariti iskalnega niza" - -#: ../src/yelp-window.c:1452 -msgid "Fin_d:" -msgstr "_Poišči:" - -#: ../src/yelp-window.c:1474 -msgid "Find _Previous" -msgstr "Poišči _predhodne" - -#: ../src/yelp-window.c:1486 -msgid "Find _Next" -msgstr "Poišči _naslednje" - -#: ../src/yelp-window.c:1499 -msgid "Phrase not found" -msgstr "Fraze ni mogoče najti" - -#: ../src/yelp-window.c:1627 -#, c-format -msgid "The file ‘%s’ could not be read. This file might be missing, or you might not have permissions to read it." -msgstr "Datoteke ‘%s’ ni mogoče prebrati. Datoteka ne obstaja ali pa nimate dovoljenja za branje." - -#. Note to translators: put here your name (and address) so it -#. * will show up in the "about" box -#: ../src/yelp-window.c:2453 -msgid "translator-credits" -msgstr "Matej Urbančič <mateju@svn.gnome.org>" - -#: ../src/yelp-window.c:2456 -msgid "Yelp" -msgstr "Yelp" - -#: ../src/yelp-window.c:2458 -msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "Pregledovalnik dokumentov za namizje Gnome." - -#: ../yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "Iskanje pomoči z Gnome namizjem" - +# Slovenian translation of yelp package.
+# Copyright (C) 2005-2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the program package.
+#
+# Andraž Tori <andraz.tori1@guest.arnes.si>, 2002.
+# Matej Urbančič <mateju@svn.gnome.org>, 2006 - 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: yelp master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=yelp&component=general\n"
+"POT-Creation-Date: 2010-05-07 23:28+0000\n"
+"PO-Revision-Date: 2010-05-08 10:00+0100\n"
+"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
+"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../data/info.xml.in.h:1
+msgid "GNU Info Pages"
+msgstr "GNU Info strani"
+
+#: ../data/info.xml.in.h:2
+msgid "Traditional command line help (info)"
+msgstr "Pomoč z ukazne vrstice (info)"
+
+#: ../data/man.xml.in.h:1
+msgid "Applications"
+msgstr "Programi"
+
+#: ../data/man.xml.in.h:2
+msgid "BLT Functions"
+msgstr "BLT funkcije"
+
+#: ../data/man.xml.in.h:3
+msgid "Configuration Files"
+msgstr "Nastavitvene datoteke"
+
+#: ../data/man.xml.in.h:4
+msgid "Curses Functions"
+msgstr "Curses funkcije"
+
+#: ../data/man.xml.in.h:5
+#: ../data/toc.xml.in.h:35
+msgid "Development"
+msgstr "Razvoj"
+
+#: ../data/man.xml.in.h:6
+msgid "FORTRAN Functions"
+msgstr "FORTRAN funkcije"
+
+#: ../data/man.xml.in.h:7
+#: ../data/toc.xml.in.h:56
+msgid "Games"
+msgstr "Igre"
+
+#: ../data/man.xml.in.h:8
+msgid "Hardware Devices"
+msgstr "Strojne naprave"
+
+#: ../data/man.xml.in.h:9
+msgid "Kernel Routines"
+msgstr "Funkcije jedra"
+
+#: ../data/man.xml.in.h:10
+msgid "Manual Pages"
+msgstr "Strani priročnika"
+
+#: ../data/man.xml.in.h:11
+msgid "Network Audio Sound Functions"
+msgstr "Omrežne zvočne funkcije"
+
+#: ../data/man.xml.in.h:12
+msgid "OpenSSL Applications"
+msgstr "OpenSSL programi"
+
+#: ../data/man.xml.in.h:13
+msgid "OpenSSL Configuration"
+msgstr "OpenSSL nastavitve"
+
+#: ../data/man.xml.in.h:14
+msgid "OpenSSL Functions"
+msgstr "OpenSSL funkcije"
+
+#: ../data/man.xml.in.h:15
+msgid "OpenSSL Overviews"
+msgstr "OpenSSL pregledi"
+
+#: ../data/man.xml.in.h:16
+msgid "Overviews"
+msgstr "Pregledi"
+
+#: ../data/man.xml.in.h:17
+msgid "POSIX Functions"
+msgstr "POSIX funkcije"
+
+#: ../data/man.xml.in.h:18
+msgid "POSIX Headers"
+msgstr "POSIX glave"
+
+#: ../data/man.xml.in.h:19
+msgid "Perl Functions"
+msgstr "Perl funkcije"
+
+#: ../data/man.xml.in.h:20
+msgid "Qt Functions"
+msgstr "Qt funkcije"
+
+#: ../data/man.xml.in.h:21
+msgid "Readline Functions"
+msgstr "Readline funkcije"
+
+#: ../data/man.xml.in.h:22
+msgid "Section 0p"
+msgstr "Odsek 0p"
+
+#: ../data/man.xml.in.h:23
+msgid "Section 1m"
+msgstr "Odsek 1m"
+
+#: ../data/man.xml.in.h:24
+msgid "Section 1ssl"
+msgstr "Odsek 1ssl"
+
+#: ../data/man.xml.in.h:25
+msgid "Section 1x"
+msgstr "Odsek 1x"
+
+#: ../data/man.xml.in.h:26
+msgid "Section 2"
+msgstr "Odsek 2"
+
+#: ../data/man.xml.in.h:27
+msgid "Section 3blt"
+msgstr "Odsek 3blt"
+
+#: ../data/man.xml.in.h:28
+msgid "Section 3f"
+msgstr "Odsek 3f"
+
+#: ../data/man.xml.in.h:29
+msgid "Section 3nas"
+msgstr "Odsek 3nas"
+
+#: ../data/man.xml.in.h:30
+msgid "Section 3p"
+msgstr "Odsek 3p"
+
+#: ../data/man.xml.in.h:31
+msgid "Section 3qt"
+msgstr "Odsek 3qt"
+
+#: ../data/man.xml.in.h:32
+msgid "Section 3readline"
+msgstr "Odsek 3readline"
+
+#: ../data/man.xml.in.h:33
+msgid "Section 3ssl"
+msgstr "Odsek 3ssl"
+
+#: ../data/man.xml.in.h:34
+msgid "Section 3tiff"
+msgstr "Odsek 3tiff"
+
+#: ../data/man.xml.in.h:35
+msgid "Section 4"
+msgstr "Odsek 4"
+
+#: ../data/man.xml.in.h:36
+msgid "Section 4x"
+msgstr "Odsek 4x"
+
+#: ../data/man.xml.in.h:37
+msgid "Section 5"
+msgstr "Odsek 5"
+
+#: ../data/man.xml.in.h:38
+msgid "Section 5ssl"
+msgstr "Odsek 5ssl"
+
+#: ../data/man.xml.in.h:39
+msgid "Section 5x"
+msgstr "Odsek 5x"
+
+#: ../data/man.xml.in.h:40
+msgid "Section 6"
+msgstr "Odsek 6"
+
+#: ../data/man.xml.in.h:41
+msgid "Section 6x"
+msgstr "Odsek 6x"
+
+#: ../data/man.xml.in.h:42
+msgid "Section 7ssl"
+msgstr "Odsek 7ssl"
+
+#: ../data/man.xml.in.h:43
+msgid "Section 7x"
+msgstr "Odsek 7x"
+
+#: ../data/man.xml.in.h:44
+msgid "Section 9"
+msgstr "Odsek 9"
+
+#: ../data/man.xml.in.h:45
+msgid "Sections 1, 1p, 1g and 1t"
+msgstr "Odseki 1, 1p, 1g in 1t"
+
+#: ../data/man.xml.in.h:46
+msgid "Sections 3, 3o, and 3t"
+msgstr "Odseki 3, 3o, in 3t"
+
+#: ../data/man.xml.in.h:47
+msgid "Sections 3form and 3menu"
+msgstr "Odseki 3form in 3menu"
+
+#: ../data/man.xml.in.h:48
+msgid "Sections 3ncurses and 3curses"
+msgstr "Odseki 3ncurses in 3curses"
+
+#: ../data/man.xml.in.h:49
+msgid "Sections 3pm and 3perl"
+msgstr "Odseki 3pm in 3perl"
+
+#: ../data/man.xml.in.h:50
+msgid "Sections 3x and 3X11"
+msgstr "Odseki 3x in 3X11"
+
+#: ../data/man.xml.in.h:51
+msgid "Sections 7 and 7gcc"
+msgstr "Odseki 7 in 7gcc"
+
+#: ../data/man.xml.in.h:52
+msgid "Sections 8 and 8l"
+msgstr "Odseki 8 in 8l"
+
+#: ../data/man.xml.in.h:53
+msgid "System Administration"
+msgstr "Sistemsko upravljanje"
+
+#: ../data/man.xml.in.h:54
+msgid "System Calls"
+msgstr "Sistemski klici"
+
+#: ../data/man.xml.in.h:55
+msgid "System V Form/Menu Functions"
+msgstr "Sistem V Form/Meni funkcije"
+
+#: ../data/man.xml.in.h:56
+msgid "TIFF Functions"
+msgstr "TIFF funkcije"
+
+#: ../data/man.xml.in.h:57
+msgid "Termcap Applications"
+msgstr "Termcap programi"
+
+#: ../data/man.xml.in.h:58
+msgid "Traditional command line help (man)"
+msgstr "Pomoč z ukazne vrstice (man)"
+
+#: ../data/man.xml.in.h:59
+msgid "X11 Applications"
+msgstr "X11 programi"
+
+#: ../data/man.xml.in.h:60
+msgid "X11 Configuration"
+msgstr "X11 nastavitve"
+
+#: ../data/man.xml.in.h:61
+msgid "X11 Devices"
+msgstr "X11 naprave"
+
+#: ../data/man.xml.in.h:62
+msgid "X11 Functions"
+msgstr "X11 funkcije"
+
+#: ../data/man.xml.in.h:63
+msgid "X11 Games"
+msgstr "X11 igre"
+
+#: ../data/man.xml.in.h:64
+msgid "X11 Overviews"
+msgstr "X11 pregledi"
+
+#: ../data/toc.xml.in.h:1
+msgid "2D Graphics"
+msgstr "2D oblikovanje"
+
+#: ../data/toc.xml.in.h:2
+msgid "3D Graphics"
+msgstr "3D oblikovanje"
+
+#: ../data/toc.xml.in.h:3
+msgid "Accessibility"
+msgstr "Dostopnost"
+
+#: ../data/toc.xml.in.h:4
+msgid "Action Games"
+msgstr "Akcijske igre"
+
+#: ../data/toc.xml.in.h:5
+msgid "Adventure Games"
+msgstr "Igre dogodivščin"
+
+#: ../data/toc.xml.in.h:6
+msgid "Amusement"
+msgstr "Zabava"
+
+#: ../data/toc.xml.in.h:7
+msgid "Applications for viewing and manipulating graphics"
+msgstr "Programi za obdelavo in pregledovanje slik"
+
+#: ../data/toc.xml.in.h:8
+msgid "Applications related to audio and video"
+msgstr "Programi povezani z zvokom in sliko"
+
+#: ../data/toc.xml.in.h:9
+msgid "Applications that teach or aid in learning"
+msgstr "Programi povezani z učenjem"
+
+#: ../data/toc.xml.in.h:10
+msgid "Arcade Games"
+msgstr "Arkadne igre"
+
+#: ../data/toc.xml.in.h:11
+msgid "Archiving Tools"
+msgstr "Orodja za arhiviranje"
+
+#: ../data/toc.xml.in.h:12
+msgid "Art"
+msgstr "Umetnost"
+
+#: ../data/toc.xml.in.h:13
+msgid "Artificial Intelligence"
+msgstr "Umetna razumnost"
+
+#: ../data/toc.xml.in.h:14
+msgid "Astronomy"
+msgstr "Astronomija"
+
+#: ../data/toc.xml.in.h:15
+msgid "Biology"
+msgstr "Biologija"
+
+#: ../data/toc.xml.in.h:16
+msgid "Blocks Games"
+msgstr "Igre z liki"
+
+#: ../data/toc.xml.in.h:17
+msgid "Board Games"
+msgstr "Tabelne Igre"
+
+#: ../data/toc.xml.in.h:18
+msgid "Building"
+msgstr "Izgradnja"
+
+#: ../data/toc.xml.in.h:19
+msgid "Calculator"
+msgstr "Računalo"
+
+#: ../data/toc.xml.in.h:20
+msgid "Calendar"
+msgstr "Koledar"
+
+#: ../data/toc.xml.in.h:21
+msgid "Card Games"
+msgstr "Igre s kartami"
+
+#: ../data/toc.xml.in.h:22
+msgid "Charting Tools"
+msgstr "Orodja za izrisovanje grafov"
+
+#: ../data/toc.xml.in.h:23
+msgid "Chat"
+msgstr "Klepet"
+
+#: ../data/toc.xml.in.h:24
+msgid "Chemistry"
+msgstr "Kemija"
+
+#: ../data/toc.xml.in.h:25
+msgid "Clocks"
+msgstr "Ure"
+
+#: ../data/toc.xml.in.h:26
+msgid "Compression Tools"
+msgstr "Orodja za stiskanje"
+
+#: ../data/toc.xml.in.h:27
+msgid "Computer Science"
+msgstr "Računalništvo"
+
+#: ../data/toc.xml.in.h:28
+msgid "Construction"
+msgstr "Gradbeništvo"
+
+#: ../data/toc.xml.in.h:29
+msgid "Contact Management"
+msgstr "Upravljanje s stiki"
+
+#: ../data/toc.xml.in.h:30
+msgid "Data Visualization"
+msgstr "Prikazovanje podatkov"
+
+#: ../data/toc.xml.in.h:31
+msgid "Databases"
+msgstr "Podatkovne zbirke"
+
+#: ../data/toc.xml.in.h:32
+msgid "Debuggers"
+msgstr "Razhroščevalniki"
+
+#: ../data/toc.xml.in.h:33
+msgid "Desktop"
+msgstr "Namizje"
+
+#: ../data/toc.xml.in.h:34
+msgid "Desktop Settings"
+msgstr "Nastavitve namizja"
+
+#: ../data/toc.xml.in.h:36
+msgid "Dialup"
+msgstr "Klicanje"
+
+#: ../data/toc.xml.in.h:37
+msgid "Dictionaries"
+msgstr "Slovarji"
+
+#. Translators: this is a menu title for burning audio and video to dics
+#: ../data/toc.xml.in.h:39
+msgid "Disc Burning"
+msgstr "Zapisovanje diskov"
+
+#: ../data/toc.xml.in.h:40
+msgid "Economy"
+msgstr "Ekonomija"
+
+#: ../data/toc.xml.in.h:41
+msgid "Education"
+msgstr "Izobraževanje"
+
+#: ../data/toc.xml.in.h:42
+msgid "Electricity"
+msgstr "Elektrika"
+
+#: ../data/toc.xml.in.h:43
+msgid "Electronics"
+msgstr "Elektronika"
+
+#: ../data/toc.xml.in.h:44
+msgid "Email Tools"
+msgstr "Orodja za elektronsko pošto"
+
+#: ../data/toc.xml.in.h:45
+msgid "Emulator"
+msgstr "Posnemovalniki"
+
+#: ../data/toc.xml.in.h:46
+msgid "Engineering"
+msgstr "Inženirstvo"
+
+#: ../data/toc.xml.in.h:47
+msgid "File Manager"
+msgstr "Upravljalnik datotek"
+
+#: ../data/toc.xml.in.h:48
+msgid "File Tools"
+msgstr "Datotečna orodja"
+
+#: ../data/toc.xml.in.h:49
+msgid "File Transfer"
+msgstr "Prenos datotek"
+
+#: ../data/toc.xml.in.h:50
+msgid "Filesystem"
+msgstr "Datotečni sistem"
+
+#: ../data/toc.xml.in.h:51
+msgid "Financial Tools"
+msgstr "Finančna orodja"
+
+#: ../data/toc.xml.in.h:52
+msgid "Flow Charting Tools"
+msgstr "Orodja za izdelovanje grafikonov"
+
+#: ../data/toc.xml.in.h:53
+msgid "GNOME Applications"
+msgstr "GNOME programi"
+
+#: ../data/toc.xml.in.h:54
+msgid "GTK"
+msgstr "GTK"
+
+#: ../data/toc.xml.in.h:55
+msgid "GUI Designers"
+msgstr "Snovalniki uporabniških vmesnikov"
+
+#: ../data/toc.xml.in.h:57
+msgid "Generic applications for the GNOME environment"
+msgstr "Osnovni programi okolja GNOME"
+
+#: ../data/toc.xml.in.h:58
+msgid "Generic applications for the KDE environment"
+msgstr "Osnovni programi okolja KDE"
+
+#: ../data/toc.xml.in.h:59
+msgid "Geography"
+msgstr "Geografija"
+
+#: ../data/toc.xml.in.h:60
+msgid "Geology"
+msgstr "Geologija"
+
+#: ../data/toc.xml.in.h:61
+msgid "Geoscience"
+msgstr "Geološke znanosti"
+
+#: ../data/toc.xml.in.h:62
+msgid "Graphics"
+msgstr "Grafika"
+
+#: ../data/toc.xml.in.h:63
+msgid "Guides and manuals for applications that connect to the outside world"
+msgstr "Vodniki in priročniki za programe povezane v splet"
+
+#: ../data/toc.xml.in.h:64
+msgid "Guides for getting involved in development"
+msgstr "Vodniki za sodelovanje pri razvoju programov"
+
+#: ../data/toc.xml.in.h:65
+msgid "Ham Radio"
+msgstr "Ham Radio"
+
+#: ../data/toc.xml.in.h:66
+msgid "Hardware Settings"
+msgstr "Strojne nastavitve"
+
+#: ../data/toc.xml.in.h:67
+msgid "Have some fun"
+msgstr "Zabava in sprostitev"
+
+#: ../data/toc.xml.in.h:68
+msgid "History"
+msgstr "Zgodovina"
+
+#: ../data/toc.xml.in.h:69
+msgid "IDEs"
+msgstr "IDE"
+
+#: ../data/toc.xml.in.h:70
+msgid "IRC Clients"
+msgstr "IRC odjemalci"
+
+#: ../data/toc.xml.in.h:71
+msgid "Image Processing"
+msgstr "Obdelovanje slik"
+
+#: ../data/toc.xml.in.h:72
+msgid "Instant Messaging"
+msgstr "Hipno sporočanje"
+
+#: ../data/toc.xml.in.h:73
+msgid "Internet"
+msgstr "Medmrežje"
+
+#: ../data/toc.xml.in.h:74
+msgid "Java"
+msgstr "Java"
+
+#: ../data/toc.xml.in.h:75
+msgid "KDE Applications"
+msgstr "KDE programi"
+
+#: ../data/toc.xml.in.h:76
+msgid "Kids Games"
+msgstr "Otroške igre"
+
+#: ../data/toc.xml.in.h:77
+msgid "Learn more about making your system more accessible for a range of disabilities"
+msgstr "Spoznajte več o prilagoditvi sistema za dostopnost širšemu krogu nezmožnosti"
+
+#: ../data/toc.xml.in.h:78
+msgid "Licenses"
+msgstr "Dovoljenja"
+
+#: ../data/toc.xml.in.h:79
+msgid "Literature"
+msgstr "Literatura"
+
+#: ../data/toc.xml.in.h:80
+msgid "Logic Games"
+msgstr "Logične igre"
+
+#: ../data/toc.xml.in.h:81
+msgid "Math"
+msgstr "Matematika"
+
+#: ../data/toc.xml.in.h:82
+msgid "Medical Software"
+msgstr "Medicinski programi"
+
+#: ../data/toc.xml.in.h:83
+msgid "Midi"
+msgstr "Midi"
+
+#: ../data/toc.xml.in.h:84
+msgid "Miscellaneous Documentation"
+msgstr "Različna dokumentacija"
+
+#: ../data/toc.xml.in.h:85
+msgid "Mixers"
+msgstr "Mešalniki"
+
+#: ../data/toc.xml.in.h:86
+msgid "Monitor"
+msgstr "Nadzor"
+
+#: ../data/toc.xml.in.h:87
+msgid "Motif"
+msgstr "Motif"
+
+#: ../data/toc.xml.in.h:88
+msgid "Music"
+msgstr "Glasba"
+
+#: ../data/toc.xml.in.h:89
+msgid "News"
+msgstr "Novice"
+
+#: ../data/toc.xml.in.h:90
+msgid "Numerical Analysis"
+msgstr "Analiza števil"
+
+#: ../data/toc.xml.in.h:91
+msgid "OCR"
+msgstr "Optično branje"
+
+#: ../data/toc.xml.in.h:92
+msgid "Office Applications"
+msgstr "Pisarniški programi"
+
+#: ../data/toc.xml.in.h:93
+msgid "Office applications"
+msgstr "Pisarniški programi"
+
+#: ../data/toc.xml.in.h:94
+msgid "Other Documentation"
+msgstr "Dodatna dokumentacija"
+
+#: ../data/toc.xml.in.h:95
+msgid "P2P"
+msgstr "P2P"
+
+#: ../data/toc.xml.in.h:96
+msgid "PDA Communication"
+msgstr "Povezovanje dlančnikov"
+
+#: ../data/toc.xml.in.h:97
+msgid "Package Manager"
+msgstr "Upravljalnik paketov"
+
+#: ../data/toc.xml.in.h:98
+msgid "Parallel Computing"
+msgstr "Vzporedno izračunavanje"
+
+#: ../data/toc.xml.in.h:99
+msgid "Photography"
+msgstr "Fotografija"
+
+#: ../data/toc.xml.in.h:100
+msgid "Physics"
+msgstr "Fizika"
+
+#. Translators: this is a menu title for audio and video players
+#: ../data/toc.xml.in.h:102
+msgid "Players"
+msgstr "Predvajalniki"
+
+#: ../data/toc.xml.in.h:103
+msgid "Presentation Tools"
+msgstr "Orodja za izdelovanje predstavitev"
+
+#: ../data/toc.xml.in.h:104
+msgid "Printing"
+msgstr "Tiskanje"
+
+#: ../data/toc.xml.in.h:105
+msgid "Profiling Tools"
+msgstr "Orodja za profiliranje"
+
+#: ../data/toc.xml.in.h:106
+msgid "Project Management Tools"
+msgstr "Orodja za upravljanje projektov"
+
+#: ../data/toc.xml.in.h:107
+msgid "Publishing"
+msgstr "Založništvo"
+
+#: ../data/toc.xml.in.h:108
+msgid "Qt"
+msgstr "Qt"
+
+#: ../data/toc.xml.in.h:109
+msgid "Raster Graphics"
+msgstr "Rastersko oblikovanje"
+
+#. Translators: this is a menu title for audio and video recorders
+#: ../data/toc.xml.in.h:111
+msgid "Recorders"
+msgstr "Snemalniki"
+
+#: ../data/toc.xml.in.h:112
+msgid "Remote Access"
+msgstr "Oddaljeni dostop"
+
+#: ../data/toc.xml.in.h:113
+msgid "Revision Control"
+msgstr "Nadzor predelav"
+
+#: ../data/toc.xml.in.h:114
+msgid "Robotics"
+msgstr "Robotika"
+
+#: ../data/toc.xml.in.h:115
+msgid "Role Playing Games"
+msgstr "Igre igranja vlog"
+
+#: ../data/toc.xml.in.h:116
+msgid "Scanning"
+msgstr "Preiskovanje"
+
+#: ../data/toc.xml.in.h:117
+msgid "Science"
+msgstr "Znanost"
+
+#: ../data/toc.xml.in.h:118
+msgid "Security"
+msgstr "Varnost"
+
+#: ../data/toc.xml.in.h:119
+msgid "Sequencers"
+msgstr "Sekvenčniki"
+
+#: ../data/toc.xml.in.h:120
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: ../data/toc.xml.in.h:121
+msgid "Settings users can manipulate to make their environment more pleasant"
+msgstr "Nastavitve za prilagajanje delovnega okolja"
+
+#: ../data/toc.xml.in.h:122
+msgid "Simulation Games"
+msgstr "Simulacije"
+
+#: ../data/toc.xml.in.h:123
+msgid "Sound"
+msgstr "Zvok"
+
+#: ../data/toc.xml.in.h:124
+msgid "Sound & Video"
+msgstr "Zvok in video"
+
+#: ../data/toc.xml.in.h:125
+msgid "Sound & Video Editing"
+msgstr "Urejanje zvoka in slike"
+
+#: ../data/toc.xml.in.h:126
+msgid "Sports"
+msgstr "Šport"
+
+#: ../data/toc.xml.in.h:127
+msgid "Sports Games"
+msgstr "Športne igre"
+
+#: ../data/toc.xml.in.h:128
+msgid "Spreadsheet Tools"
+msgstr "Orodja za izdelovanje razpredelnic"
+
+#: ../data/toc.xml.in.h:129
+msgid "Strategy Games"
+msgstr "Strateške igre"
+
+#: ../data/toc.xml.in.h:130
+msgid "System"
+msgstr "Sistem"
+
+#: ../data/toc.xml.in.h:131
+msgid "TV"
+msgstr "TV"
+
+#: ../data/toc.xml.in.h:132
+msgid "Telephony"
+msgstr "Telefonija"
+
+#: ../data/toc.xml.in.h:133
+msgid "Telephony Tools"
+msgstr "Orodja telefonije"
+
+#: ../data/toc.xml.in.h:134
+msgid "Terminal Emulator"
+msgstr "Terminalski posnemovalnik"
+
+#: ../data/toc.xml.in.h:135
+msgid "Text Editors"
+msgstr "Urejevalniki besedila"
+
+#: ../data/toc.xml.in.h:136
+msgid "Text Tools"
+msgstr "Orodja za besedilo"
+
+#: ../data/toc.xml.in.h:137
+msgid "Tools to help you manage your computer"
+msgstr "Orodja za upravljanje z računalnikom"
+
+#: ../data/toc.xml.in.h:138
+msgid "Translation Tools"
+msgstr "Orodja za prevajanje"
+
+#: ../data/toc.xml.in.h:139
+msgid "Tuners"
+msgstr "Uravnalci"
+
+#: ../data/toc.xml.in.h:140
+msgid "Utilities"
+msgstr "Pripomočki"
+
+#: ../data/toc.xml.in.h:141
+msgid "Utilities to help you get work done"
+msgstr "Pripomočki za izvajanje nalog"
+
+#: ../data/toc.xml.in.h:142
+msgid "Vector Graphics"
+msgstr "Vektorsko oblikovanje"
+
+#: ../data/toc.xml.in.h:143
+msgid "Video"
+msgstr "Video"
+
+#: ../data/toc.xml.in.h:144
+msgid "Video Conference"
+msgstr "Video konference"
+
+#. Translators: This is a menu title for graphics viewing applications
+#: ../data/toc.xml.in.h:146
+msgid "Viewer"
+msgstr "Pregledovalnik"
+
+#: ../data/toc.xml.in.h:147
+msgid "Web Browser"
+msgstr "Spletni brskalnik"
+
+#: ../data/toc.xml.in.h:148
+msgid "Web Development"
+msgstr "Razvoj spletišča"
+
+#: ../data/toc.xml.in.h:149
+msgid "Welcome to the GNOME Help Browser"
+msgstr "Dobrodošli v GNOME brskalniku pomoči"
+
+#: ../data/toc.xml.in.h:150
+msgid "Word Processors"
+msgstr "Pisarniški urejevalniki besedil"
+
+#: ../libyelp/yelp-bz2-decompressor.c:146
+#: ../libyelp/yelp-lzma-decompressor.c:155
+msgid "Invalid compressed data"
+msgstr "Neveljavni skrčeni podatki"
+
+#: ../libyelp/yelp-bz2-decompressor.c:152
+#: ../libyelp/yelp-lzma-decompressor.c:161
+msgid "Not enough memory"
+msgstr "Ni dovolj pomnilnika"
+
+#: ../libyelp/yelp-docbook-document.c:264
+#: ../libyelp/yelp-info-document.c:233
+#: ../libyelp/yelp-mallard-document.c:254
+#: ../libyelp/yelp-mallard-document.c:391
+#, c-format
+msgid "The page ‘%s’ was not found in the document ‘%s’."
+msgstr "Strani ‘%s’ ni mogoče najti v dokumentu %s."
+
+#: ../libyelp/yelp-docbook-document.c:298
+#: ../libyelp/yelp-info-document.c:366
+#, c-format
+msgid "The file does not exist."
+msgstr "Datoteka ne obstaja."
+
+#: ../libyelp/yelp-docbook-document.c:308
+#: ../libyelp/yelp-info-document.c:376
+#, c-format
+msgid "The file ‘%s’ does not exist."
+msgstr "Datoteka ‘%s’ ne obstaja."
+
+#: ../libyelp/yelp-docbook-document.c:323
+#, c-format
+msgid "The file ‘%s’ could not be parsed because it is not a well-formed XML document."
+msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni pravilnem XML zapisu."
+
+#: ../libyelp/yelp-docbook-document.c:336
+#, c-format
+msgid "The file ‘%s’ could not be parsed because one or more of its included files is not a well-formed XML document."
+msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilnem XML zapisu."
+
+#: ../libyelp/yelp-docbook-document.c:720
+msgid "Unknown"
+msgstr "Neznano"
+
+#: ../libyelp/yelp-docbook-document.c:781
+#: ../libyelp/yelp-info-document.c:309
+#, c-format
+msgid "The requested page was not found in the document ‘%s’."
+msgstr "Zahtevane strani ni mogoče najti v dokumentu ‘%s’."
+
+#: ../libyelp/yelp-error.c:33
+#, c-format
+msgid "An unknown error occurred."
+msgstr "Prišlo je do neznane napake."
+
+#: ../libyelp/yelp-info-document.c:391
+#, c-format
+msgid "The file ‘%s’ could not be parsed because it is not a well-formed info page."
+msgstr "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilno oblikovanem zapisu info."
+
+#: ../libyelp/yelp-location-entry.c:279
+msgid "Description Column"
+msgstr "Stolpec opisa"
+
+#: ../libyelp/yelp-location-entry.c:280
+msgid "A column in the model to get descriptions from"
+msgstr "Stolpec modela, iz katerega naj bodo pridobljeni nizi"
+
+#: ../libyelp/yelp-location-entry.c:295
+msgid "Icon Column"
+msgstr "Stolpec ikone"
+
+#: ../libyelp/yelp-location-entry.c:296
+msgid "A column in the model to get icon names from"
+msgstr "Stolpec iz katerega naj se pridobijo imena ikon"
+
+#: ../libyelp/yelp-location-entry.c:311
+msgid "Flags Column"
+msgstr "Stolpec zastavic"
+
+#: ../libyelp/yelp-location-entry.c:312
+msgid "A column in the model with YelpLocationEntryFlags flags"
+msgstr "Stolpec z zastavicami YelpLocationEntryFlags"
+
+#: ../libyelp/yelp-location-entry.c:328
+msgid "Enable Search"
+msgstr "Omogoči iskanje"
+
+#: ../libyelp/yelp-location-entry.c:329
+msgid "Whether the location entry can be used as a search field"
+msgstr "Ali je vnos mesta mogoče uporabiti v polju iskanja"
+
+#: ../libyelp/yelp-mallard-document.c:294
+#, c-format
+msgid "The directory ‘%s’ does not exist."
+msgstr "Mapa ‘%s’ ne obstaja."
+
+#: ../libyelp/yelp-settings.c:146
+msgid "GtkSettings"
+msgstr "GtkNastavitve"
+
+#: ../libyelp/yelp-settings.c:147
+msgid "A GtkSettings object to get settings from"
+msgstr "Predmet GtkSettings iz katerega naj se pridobijo nastavitve"
+
+#: ../libyelp/yelp-settings.c:155
+msgid "GtkIconTheme"
+msgstr "GtkIconTheme"
+
+#: ../libyelp/yelp-settings.c:156
+msgid "A GtkIconTheme object to get icons from"
+msgstr "Predmet GtkIconTheme iz katerega naj se pridobijo ikone"
+
+#: ../libyelp/yelp-settings.c:164
+msgid "Font Adjustment"
+msgstr "Prilagajanje pisave"
+
+#: ../libyelp/yelp-settings.c:165
+msgid "A size adjustment to add to font sizes"
+msgstr "Prilagoditev velikosti za prilagajanje velikosti pisave"
+
+#: ../libyelp/yelp-settings.c:173
+msgid "Show Text Cursor"
+msgstr "Pokaži kazalnik besedila"
+
+#: ../libyelp/yelp-settings.c:174
+msgid "Show the text cursor or caret for accessibile navigation"
+msgstr "Pokaži kazalnik besedila za dostopno upravljanje"
+
+#: ../libyelp/yelp-settings.c:182
+msgid "Editor Mode"
+msgstr "Način urejevalnika"
+
+#: ../libyelp/yelp-settings.c:183
+msgid "Enable features useful to editors"
+msgstr "Omogoči zmožnosti za urejevalnik"
+
+#: ../libyelp/yelp-transform.c:171
+msgid "XSLT Stylesheet"
+msgstr "Slogovna predloga XSLT"
+
+#: ../libyelp/yelp-transform.c:172
+msgid "The location of the XSLT stylesheet"
+msgstr "Mesto XSLT slogovne predloge"
+
+#: ../libyelp/yelp-transform.c:379
+#: ../libyelp/yelp-transform.c:394
+#, c-format
+msgid "The XSLT stylesheet ‘%s’ is either missing or not valid."
+msgstr "Slogovna predloga XSLT ‘%s’ ne obstaja ali pa ni zapisana v veljavnem zapisu."
+
+#: ../libyelp/yelp-transform.c:528
+msgid "No href attribute found on yelp:document\n"
+msgstr "Ni mogoče najti atributa href v yelp:dokument\n"
+
+#: ../libyelp/yelp-transform.c:543
+msgid "Out of memory"
+msgstr "Primanjkuje pomnilnika"
+
+#: ../libyelp/yelp-view.c:94
+msgid "_Print..."
+msgstr "Na_tisni ..."
+
+#: ../libyelp/yelp-view.c:99
+msgid "_Back"
+msgstr "Naza_j"
+
+#: ../libyelp/yelp-view.c:104
+msgid "_Forward"
+msgstr "_Naprej"
+
+#: ../libyelp/yelp-view.c:109
+msgid "_Previous Page"
+msgstr "_Predhodna stran"
+
+#: ../libyelp/yelp-view.c:114
+msgid "_Next Page"
+msgstr "_Naslednja stran"
+
+#: ../libyelp/yelp-view.c:317
+msgid "Yelp URI"
+msgstr "Naslov URI Yelp"
+
+#: ../libyelp/yelp-view.c:318
+msgid "A YelpUri with the current location"
+msgstr "Yelp naslov URI s trenutnim mestom"
+
+#: ../libyelp/yelp-view.c:326
+msgid "Loading State"
+msgstr "Stanje nalaganja"
+
+#: ../libyelp/yelp-view.c:327
+msgid "The loading state of the view"
+msgstr "Stanje nalaganja pogleda"
+
+#: ../libyelp/yelp-view.c:336
+msgid "Page ID"
+msgstr "ID strani"
+
+#: ../libyelp/yelp-view.c:337
+msgid "The ID of the root page of the page being viewed"
+msgstr "ID korenske strani prikazane strani"
+
+#: ../libyelp/yelp-view.c:345
+msgid "Root Title"
+msgstr "Naslov korena"
+
+#: ../libyelp/yelp-view.c:346
+msgid "The title of the root page of the page being viewed"
+msgstr "Naslov korenske strani prikazane strani"
+
+#: ../libyelp/yelp-view.c:354
+msgid "Page Title"
+msgstr "Naslov strani"
+
+#: ../libyelp/yelp-view.c:355
+msgid "The title of the page being viewed"
+msgstr "Naslov prikazane strani"
+
+#: ../libyelp/yelp-view.c:363
+msgid "Page Description"
+msgstr "Opis strani"
+
+#: ../libyelp/yelp-view.c:364
+msgid "The description of the page being viewed"
+msgstr "Opis prikazane strani"
+
+#: ../libyelp/yelp-view.c:372
+msgid "Page Icon"
+msgstr "Ikona strani"
+
+#: ../libyelp/yelp-view.c:373
+msgid "The icon of the page being viewed"
+msgstr "Ikona trenutne strani"
+
+#: ../libyelp/yelp-view.c:712
+#, c-format
+msgid "Could not load a document for ‘%s’"
+msgstr "Ni mogoče naložiti dokumenta za ‘%s’"
+
+#: ../libyelp/yelp-view.c:718
+#, c-format
+msgid "Could not load a document"
+msgstr "Ni mogoče naložiti dokumenta"
+
+#: ../libyelp/yelp-view.c:785
+msgid "Not Found"
+msgstr "Ni mogoče najti"
+
+#: ../libyelp/yelp-view.c:788
+msgid "Cannot Read"
+msgstr "Ni mogoče brati"
+
+#: ../libyelp/yelp-view.c:794
+msgid "Unknown Error"
+msgstr "Neznana napaka"
+
+#: ../libyelp/yelp-view.c:885
+#, c-format
+msgid "The URI ‘%s’ does point to a valid page."
+msgstr "Naslov URI ‘%s’ ni povezan z veljavno stranjo."
+
+#: ../libyelp/yelp-view.c:893
+#, c-format
+msgid "The URI ‘%s’ could not be parsed."
+msgstr "Naslova URI ‘%s’ ni mogoče razčleniti"
+
+#: ../src/yelp-application.c:55
+msgid "Turn on editor mode"
+msgstr "Omogoči urejevalni način"
+
+#: ../src/yelp-application.c:106
+msgid "_Larger Text"
+msgstr "_Večje besedilo"
+
+#: ../src/yelp-application.c:108
+msgid "Increase the size of the text"
+msgstr "Povečaj velikost besedila"
+
+#: ../src/yelp-application.c:111
+msgid "_Smaller Text"
+msgstr "_Manjše besedilo"
+
+#: ../src/yelp-application.c:113
+msgid "Descrease the size of the text"
+msgstr "Pomanjšaj velikost besedila"
+
+#: ../src/yelp-application.c:221
+msgid "Show Text _Cursor"
+msgstr "Pokaži _kazalnik besedila"
+
+#: ../src/yelp-application.c:297
+#: ../src/yelp-window.c:1475
+#: ../yelp.desktop.in.in.h:2
+msgid "Help"
+msgstr "Pomoč"
+
+#: ../src/yelp-application.c:547
+msgid "You do not have PackageKit installed. Package installation links require PackageKit."
+msgstr "PackageKit ni nameščen. Povezave za nameščanje zahtevajo paket PackageKit."
+
+#: ../src/yelp-window.c:254
+msgid "_Page"
+msgstr "_Stran"
+
+#: ../src/yelp-window.c:255
+msgid "_View"
+msgstr "_Pogled"
+
+#: ../src/yelp-window.c:256
+msgid "_Go"
+msgstr "Po_jdi"
+
+#: ../src/yelp-window.c:257
+msgid "_Bookmarks"
+msgstr "_Zaznamki"
+
+#: ../src/yelp-window.c:260
+msgid "_New Window"
+msgstr "_Novo okno"
+
+#: ../src/yelp-window.c:265
+msgid "_Close"
+msgstr "_Zapri"
+
+#: ../src/yelp-window.c:270
+msgid "_Add Bookmark"
+msgstr "_Dodaj zaznamek"
+
+#: ../src/yelp-window.c:275
+msgid "Find in Page..."
+msgstr "Najdi na strani ..."
+
+#: ../src/yelp-window.c:280
+#: ../src/yelp-window.c:497
+msgid "Search..."
+msgstr "Poišči ..."
+
+#: ../src/yelp-window.c:285
+msgid "Open Location"
+msgstr "Odpri mesto"
+
+#: ../src/yelp-window.c:312
+msgid "Application"
+msgstr "Program"
+
+#: ../src/yelp-window.c:313
+msgid "A YelpApplication instance that controls this window"
+msgstr "Primerek YelpApplication, ki nadzira to okno"
+
+#: ../src/yelp-window.c:1096
+#, c-format
+msgid "%i match"
+msgid_plural "%i matches"
+msgstr[0] "%i zadetkov"
+msgstr[1] "%i zadetek"
+msgstr[2] "%i zadetka"
+msgstr[3] "%i zadetki"
+
+#: ../src/yelp-window.c:1121
+msgid "No matches"
+msgstr "Ni zadetkov"
+
+#: ../src/yelp-window.c:1418
+msgid "Loading"
+msgstr "Nalaganje"
+
+#: ../yelp.desktop.in.in.h:1
+msgid "Get help with GNOME"
+msgstr "Iskanje pomoči namizja GNOME"
+
+#~ msgid ""
+#~ "The file ‘%s’ could not be read and decoded. The file may be compressed "
+#~ "in an unsupported format."
+#~ msgstr ""
+#~ "Datoteke ‘%s’ ni mogoče prebrati in dekodirati. Datoteka je morda skrčena "
+#~ "v arhivu nepodprte vrste."
+#~ msgid "File is not a valid .desktop file"
+#~ msgstr "Datoteka ni veljavna .desktop datoteka"
+#~ msgid "Unrecognized desktop file Version '%s'"
+#~ msgstr "Neznana različica datoteke namizja '%s'"
+#~ msgid "Starting %s"
+#~ msgstr "Zaganjanje %s"
+#~ msgid "Application does not accept documents on command line"
+#~ msgstr "Program ne omogoča sprejemanja dokumentov preko ukazne vrstice"
+#~ msgid "Unrecognized launch option: %d"
+#~ msgstr "Nepoznana možnost zagona: %d"
+#~ msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+#~ msgstr ""
+#~ "Ni mogoče poslati naslova URI dokumenta na vnos 'Vrsta=Povezava' predmeta "
+#~ "namizja"
+#~ msgid "Not a launchable item"
+#~ msgstr "Predmet ni zagonljiv"
+#~ msgid "Disable connection to session manager"
+#~ msgstr "Onemogoči povezavo z upravljalnikom seje"
+#~ msgid "Specify file containing saved configuration"
+#~ msgstr "Določitev datoteke s shranjenimi nastavitvami"
+#~ msgid "FILE"
+#~ msgstr "DATOTEKA"
+#~ msgid "Specify session management ID"
+#~ msgstr "Določi ID upravljanja seje"
+#~ msgid "ID"
+#~ msgstr "ID"
+#~ msgid "Session management options:"
+#~ msgstr "Možnosti upravljanja seje:"
+#~ msgid "Show session management options"
+#~ msgstr "Pokaži možnosti upravljanja seje"
+#~ msgid "Page not found"
+#~ msgstr "Strani ni mogoče najti"
+#~ msgid "The page %s was not found in the document %s."
+#~ msgstr "Strani %s v dokumentu %s ni mogoče najti."
+#~ msgid "The requested page was not found in the document %s."
+#~ msgstr "Zahtevane strani ni mogoče najti v dokumentu %s."
+#~ msgid "File not found"
+#~ msgstr "Datoteke ni mogoče najti"
+#~ msgid "Could not parse file"
+#~ msgstr "Ni mogoče razčleniti datoteke"
+#~ msgid "Could Not Read File"
+#~ msgstr "Ni mogoče prebrati dokumenta"
+#~ msgid "No information is available about this error."
+#~ msgstr "Podrobnosti o napaki niso na voljo."
+#~ msgid "Use a private session"
+#~ msgstr "Uporabi osebno sejo"
+#~ msgid "Define which cache directory to use"
+#~ msgstr "Določitev predpomnilniškega imenika za uporabo"
+#~ msgid " GNOME Help Browser"
+#~ msgstr "GNOME brskalnik pomoči"
+#~ msgid ""
+#~ "The file ‘%s’ could not be parsed because it is not a well-formed man "
+#~ "page."
+#~ msgstr ""
+#~ "Datoteke ‘%s’ ni mogoče razčleniti, ker ni v pravilno oblikovanem zapisu "
+#~ "man strani."
+#~ msgid "Preparing to print"
+#~ msgstr "Priprava na tiskanje"
+#~ msgid "Printing is not supported on this printer"
+#~ msgstr "Tiskanje s tem tiskalnikom ni podprto"
+#~ msgid "Printer %s does not support postscript printing."
+#~ msgstr "Tiskalnik %s ne podpira postscript tiskanja."
+#~ msgid "Waiting to print"
+#~ msgstr "Čakanje na tiskanje"
+#~ msgid "An error occurred while printing"
+#~ msgstr "Prišlo je do napake med tiskanjem"
+#~ msgid "It was not possible to print your document: %s"
+#~ msgstr "Dokumenta ni bilo mogoče natisniti: %s"
+#~ msgid "the GNOME Support Forums"
+#~ msgstr "GNOME podporni forumi"
+#~ msgid "No results for \"%s\""
+#~ msgstr "Ni zadetkov za \"%s\""
+#~ msgid ""
+#~ "Try using different words to describe the problem you're having or the "
+#~ "topic you want help with."
+#~ msgstr ""
+#~ "Poskusite uporabiti drugačne besede za opis vašega problema ali teme, za "
+#~ "katero potrebujete pomoč."
+#~ msgid "Search results for \"%s\""
+#~ msgstr "Iskalni zadetki za \"%s\""
+#~ msgid "Repeat the search online at %s"
+#~ msgstr "Ponovi iskanje preko povezave na %s"
+#~ msgid ""
+#~ "a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:"
+#~ "doesn't:doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:"
+#~ "when:has:have:help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:"
+#~ "this:to:what:where:who:will:with:won't:wont:why:work:working:works"
+#~ msgstr "da:od:ne:k:kot:h:o:in:ali:to:tisto:tisti:tista"
+#~ msgid "re"
+#~ msgstr "NULL"
+#~ msgid "ers:er:ing:es:s:'s"
+#~ msgstr "NULL"
+#~ msgid "No Comment"
+#~ msgstr "Ni opomb"
+#~ msgid "Search could not be processed"
+#~ msgstr "Ni mogoče izvesti iskanja"
+#~ msgid "The requested search could not be processed."
+#~ msgstr "Iskalnega niza ni mogoče izvesti."
+#~ msgid "Cannot process the search"
+#~ msgstr "Ni mogoče izvesti iskanja"
+#~ msgid "The search processor returned invalid results"
+#~ msgstr "Iskalnik je vrnil neveljavne rezultate"
+#~ msgid "The page %s was not found in the TOC."
+#~ msgstr "Strani %s ni mogoče najti v kazalu."
+#~ msgid "The requested page was not found in the TOC."
+#~ msgstr "Zahtevane stran ni mogoče najti v kazalu."
+#~ msgid ""
+#~ "The TOC file could not be parsed because it is not a well-formed XML "
+#~ "document."
+#~ msgstr ""
+#~ "Datoteke kazala ni mogoče razčleniti, ker ni pravilno oblikovana v zapisu "
+#~ "XML."
+#~ msgid "Bookmarks"
+#~ msgstr "Zaznamki"
+#~ msgid "Re_name"
+#~ msgstr "Preime_nuj"
+#~ msgid "_Bookmarks:"
+#~ msgstr "_Zaznamki:"
+#~ msgid "Add Bookmark"
+#~ msgstr "Dodaj zaznamek"
+#~ msgid "_Title:"
+#~ msgstr "_Naslov:"
+#~ msgid "_Location:"
+#~ msgstr "_Mesto:"
+#~ msgid "Fonts"
+#~ msgstr "Pisave"
+#~ msgid "Preferences"
+#~ msgstr "Možnosti"
+#~ msgid "_Browse with caret"
+#~ msgstr "_Brskanje s kazalko"
+#~ msgid "_Fixed width:"
+#~ msgstr "_Določena širina:"
+#~ msgid "_Use system fonts"
+#~ msgstr "_Uporabi sistemske pisave"
+#~ msgid "_Variable width:"
+#~ msgstr "_Spremenljiva širina:"
+#~ msgid "Font for fixed text"
+#~ msgstr "Pisava za besedilo določene širine"
+#~ msgid "Font for text"
+#~ msgstr "Pisava za besedilo"
+#~ msgid "Font for text with fixed width."
+#~ msgstr "Pisava za besedilo z določeno širino."
+#~ msgid "Font for text with variable width."
+#~ msgstr "Pisava za besedilo s spremenljivo širino."
+#~ msgid "Use a keyboard-controllable caret when viewing pages."
+#~ msgstr "Uporabi s tipkovnico nadzorovano kazalko med ogledom strani."
+#~ msgid "Use caret"
+#~ msgstr "Uporabi kazalko"
+#~ msgid "Use system fonts"
+#~ msgstr "Uporabi sistemske pisave"
+#~ msgid "Use the default fonts set for the system."
+#~ msgstr "Uporabi privzete pisave za sistem."
+#~ msgid "Open Bookmark in New Window"
+#~ msgstr "Odpri zaznamek v novem oknu"
+#~ msgid "Rename Bookmark"
+#~ msgstr "Preimenuj zaznamek"
+#~ msgid "Remove Bookmark"
+#~ msgstr "Odstrani zaznamek"
+#~ msgid "A bookmark titled %s already exists for this page."
+#~ msgstr "Zaznamek z imenom %s za to stran že obstaja."
+#~ msgid "A bookmark titled <b>%s</b> already exists for this page."
+#~ msgstr "Zaznamek z imenom <b>%s</b> za to stran že obstaja."
+#~ msgid "Help Topics"
+#~ msgstr "Teme pomoči"
+#~ msgid "Document Sections"
+#~ msgstr "Odseki dokumentov"
+#~ msgid "Directory not found"
+#~ msgstr "Mape ni mogoče najti"
+#~ msgid "Broken Transformation"
+#~ msgstr "Pokvarjena pretvorba"
+#~ msgid ""
+#~ "An unknown error occurred while attempting to transform the document."
+#~ msgstr "Prišlo je do neznane napake med poskusom pretvorbe dokumenta."
+#~ msgid "_File"
+#~ msgstr "_Datoteka"
+#~ msgid "_Edit"
+#~ msgstr "_Uredi"
+#~ msgid "_Help"
+#~ msgstr "Pomo_č"
+#~ msgid "Print This Document ..."
+#~ msgstr "Natisni dokument ..."
+#~ msgid "About This Document"
+#~ msgstr "O dokumentu"
+#~ msgid "Open _Location"
+#~ msgstr "Odpri _mesto"
+#~ msgid "_Close Window"
+#~ msgstr "_Zapri okno"
+#~ msgid "_Copy"
+#~ msgstr "_Kopiraj"
+#~ msgid "_Select All"
+#~ msgstr "_Izberi vse"
+#~ msgid "_Find..."
+#~ msgstr "_Najdi ..."
+#~ msgid "Find Pre_vious"
+#~ msgstr "Najdi _predhodno"
+#~ msgid "Find previous occurrence of the word or phrase"
+#~ msgstr "Najdi predhodno ponovitev besede ali rekla"
+#~ msgid "Find Ne_xt"
+#~ msgstr "Najdi na_slednje"
+#~ msgid "Find next occurrence of the word or phrase"
+#~ msgstr "Najdi naslednjo ponovitev besede ali rekla"
+#~ msgid "_Preferences"
+#~ msgstr "_Možnosti"
+#~ msgid "_Reload"
+#~ msgstr "_Ponovno naloži"
+#~ msgid "Show previous page in history"
+#~ msgstr "Pokaži predhodno stran zgodovine"
+#~ msgid "Show next page in history"
+#~ msgstr "Pokaži naslednjo stran v zgodovini"
+#~ msgid "_Help Topics"
+#~ msgstr "_Teme pomoči"
+#~ msgid "Go to the listing of help topics"
+#~ msgstr "Pojdi na seznam pomoči"
+#~ msgid "_Previous Section"
+#~ msgstr "_Predhodni odsek"
+#~ msgid "_Next Section"
+#~ msgstr "_Naslednji odsek"
+#~ msgid "_Contents"
+#~ msgstr "_Vsebina"
+#~ msgid "_Edit Bookmarks..."
+#~ msgstr "_Uredi zaznamke ..."
+#~ msgid "_Open Link"
+#~ msgstr "_Odpri povezavo"
+#~ msgid "Open Link in _New Window"
+#~ msgstr "Odpri povezavo v _novem oknu"
+#~ msgid "_Copy Link Address"
+#~ msgstr "_Kopiraj naslov povezave"
+#~ msgid "Help On this application"
+#~ msgstr "Pomoč za delo s programom"
+#~ msgid "_About"
+#~ msgstr "_O programu"
+#~ msgid "Copy _Email Address"
+#~ msgstr "Kopiraj _elektronski naslov"
+#~ msgid "Help Browser"
+#~ msgstr "Brskalnik pomoči"
+#~ msgid "Unknown Page"
+#~ msgstr "Neznana stran"
+#~ msgid "The requested URI \"%s\" is invalid"
+#~ msgstr "Zahtevan naslov URI \"%s\" ni veljaven"
+#~ msgid "Unable to load page"
+#~ msgstr "Ni mogoče naložiti strani"
+#~ msgid "Search for other documentation"
+#~ msgstr "Iskanje druge dokumentacije"
+#~ msgid "Cannot create search component"
+#~ msgstr "Ni mogoče ustvariti iskalnega niza"
+#~ msgid "Fin_d:"
+#~ msgstr "_Najdi:"
+#~ msgid "Find _Previous"
+#~ msgstr "Najdi _predhodne"
+#~ msgid "Find _Next"
+#~ msgstr "Najdi na_slednje"
+#~ msgid "Phrase not found"
+#~ msgstr "Rekla ni mogoče najti"
+#~ msgid ""
+#~ "The file ‘%s’ could not be read. This file might be missing, or you "
+#~ "might not have permissions to read it."
+#~ msgstr ""
+#~ "Datoteke ‘%s’ ni mogoče prebrati. Datoteka ne obstaja ali pa ni ustreznih "
+#~ "dovoljenj za branje."
+#~ msgid "translator-credits"
+#~ msgstr "Matej Urbančič <mateju@svn.gnome.org>"
+#~ msgid "A documentation browser and viewer for the Gnome Desktop."
+#~ msgstr "Pregledovalnik dokumentacije namizja Gnome."
+#~ msgid "<b>Accessibility</b>"
+#~ msgstr "<b>Dostopnost</b>"
+#~ msgid "<b>Fonts</b>"
+#~ msgstr "<b>Pisave</b>"
+#~ msgid "C_ase sensitive"
+#~ msgstr "Velike in m_ale črke"
+#~ msgid "Find"
+#~ msgstr "Najdi"
+#~ msgid "_Find:"
+#~ msgstr "_Poišči:"
+#~ msgid "_Wrap around"
+#~ msgstr "_Prelom vrstic"
+#~ msgid "Error executing \"gnome-open\""
+#~ msgstr "Napaka izvedbe \"gnome-open\""
+
@@ -2,712 +2,1809 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Abduxukur Abdurixit <abduxukur.abdurixit@t-systems.ch>, 2005 +# Gheyret T.Kenji <gheyret@gmail.com>, 2010 # msgid "" msgstr "" "Project-Id-Version: yelp 2.10\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-04-11 16:25+0200\n" -"PO-Revision-Date: \n" -"Last-Translator: Abduxukur Abdurixit <abduxukur.abdurixit@t-systems.ch>\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=yelp&component=general\n" +"POT-Creation-Date: 2010-04-26 15:25+0000\n" +"PO-Revision-Date: 2010-04-23 01:19+0000\n" +"Last-Translator: Sebastien Bacher <seb128@ubuntu.com>\n" "Language-Team: GNOME Uighur Translation Project <gnome-uighur@yahoogroups." "com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-04-27 05:28+0000\n" +"X-Generator: Launchpad (build Unknown)\n" -#: data/man.xml.in.h:1 data/toc.xml.in.h:4 +#: ../data/info.xml.in.h:1 +msgid "GNU Info Pages" +msgstr "GNU ئۇچۇر بەتلىرى" + +#: ../data/info.xml.in.h:2 +msgid "Traditional command line help (info)" +msgstr "ئەنئەنىۋى بۇيرۇق قۇرى ياردىمى (ئۇچۇرى)" + +#: ../data/man.xml.in.h:1 msgid "Applications" -msgstr "قوللانما پىروگراممىلىرى" +msgstr "پروگراممىلار" + +#: ../data/man.xml.in.h:2 +msgid "BLT Functions" +msgstr "BTL فۇنكسىيىلىرى" -#: data/man.xml.in.h:2 +#: ../data/man.xml.in.h:3 msgid "Configuration Files" -msgstr "قۇرۇلما ھۆججەتلىرى" +msgstr "سەپلىمە ھۆججەتلىرى" -#: data/man.xml.in.h:3 +#: ../data/man.xml.in.h:4 +msgid "Curses Functions" +msgstr "Curses فۇنكسىيىسى" + +#: ../data/man.xml.in.h:5 ../data/toc.xml.in.h:35 msgid "Development" msgstr "تەرەققىيات" -#: data/man.xml.in.h:4 +#: ../data/man.xml.in.h:6 msgid "FORTRAN Functions" -msgstr "فۇنكسىيەلىرى FORTRAN" +msgstr "FORTRAN فۇنكسىيىلىرى" -#: data/man.xml.in.h:5 data/toc.xml.in.h:7 +#: ../data/man.xml.in.h:7 ../data/toc.xml.in.h:56 msgid "Games" msgstr "ئويۇنلار" -#: data/man.xml.in.h:6 +#: ../data/man.xml.in.h:8 msgid "Hardware Devices" msgstr "قاتتىق دېتال زاپچاسلىرى" -#: data/man.xml.in.h:7 +#: ../data/man.xml.in.h:9 msgid "Kernel Routines" -msgstr "Kernel Routines" +msgstr "Kernel فۇنكسىيىلىرى" -#: data/man.xml.in.h:8 -msgid "Library Functions" -msgstr "كۈتۈپخانا فۇنكىسىيەلىرى" +#: ../data/man.xml.in.h:10 +msgid "Manual Pages" +msgstr "قوللانما بەتلىرى" -#: data/man.xml.in.h:9 src/yelp-toc-pager.c:787 -msgid "Man Pages" -msgstr "بەتلىرى Man " +#: ../data/man.xml.in.h:11 +msgid "Network Audio Sound Functions" +msgstr "توردىكى ئۈن ئاۋاز فۇنكسىيىسى" -#: data/man.xml.in.h:10 +#: ../data/man.xml.in.h:12 msgid "OpenSSL Applications" -msgstr "قوللانما پىروگراممىلىرى OpenSSL" +msgstr "OpenSSL پروگراممىلىرى" -#: data/man.xml.in.h:11 +#: ../data/man.xml.in.h:13 msgid "OpenSSL Configuration" -msgstr "|نىڭ قۇرۇلمىسى OpenSSL" +msgstr "OpenSSLنىڭ سەپلىمىسى" + +#: ../data/man.xml.in.h:14 +msgid "OpenSSL Functions" +msgstr "OpenSSL نىڭ فۇنكسىيىلىرى" -#: data/man.xml.in.h:12 +#: ../data/man.xml.in.h:15 msgid "OpenSSL Overviews" -msgstr "نىڭ قىسقىچە تونۇشتۇرىلىشى OpenSSL" +msgstr "OpenSSL نىڭ قىسقىچە تونۇشتۇرۇلۇشى" -#: data/man.xml.in.h:13 +#: ../data/man.xml.in.h:16 msgid "Overviews" -msgstr " قىسقىچە تونۇشتۇرۇش" +msgstr "قىسقىچە تونۇشتۇرۇش" + +#: ../data/man.xml.in.h:17 +msgid "POSIX Functions" +msgstr "POSIX نىڭ فۇنكسىيىلىرى" -#: data/man.xml.in.h:14 +#: ../data/man.xml.in.h:18 +msgid "POSIX Headers" +msgstr "POSIX بېشى" + +#: ../data/man.xml.in.h:19 msgid "Perl Functions" -msgstr "فۇنكىسىيەلىرى Perl" +msgstr "Perl فۇنكسىيىلىرى" -#: data/man.xml.in.h:15 +#: ../data/man.xml.in.h:20 msgid "Qt Functions" -msgstr "فۇنكىسىيەلىرى Qt" +msgstr "Qt فۇنكسىيىلىرى" + +#: ../data/man.xml.in.h:21 +msgid "Readline Functions" +msgstr "Readline فۇنكسىيىسى" + +#: ../data/man.xml.in.h:22 +msgid "Section 0p" +msgstr "0p بۆلەك" + +#: ../data/man.xml.in.h:23 +msgid "Section 1m" +msgstr "1m بۆلەك" + +#: ../data/man.xml.in.h:24 +msgid "Section 1ssl" +msgstr "1ssl بۆلەك" + +#: ../data/man.xml.in.h:25 +msgid "Section 1x" +msgstr "1x بۆلەك" + +#: ../data/man.xml.in.h:26 +msgid "Section 2" +msgstr "2 بۆلەك" + +#: ../data/man.xml.in.h:27 +msgid "Section 3blt" +msgstr "3blt بۆلەك" + +#: ../data/man.xml.in.h:28 +msgid "Section 3f" +msgstr "3f بۆلەك" + +#: ../data/man.xml.in.h:29 +msgid "Section 3nas" +msgstr "3nas بۆلەك" + +#: ../data/man.xml.in.h:30 +msgid "Section 3p" +msgstr "3p بۆلەك" + +#: ../data/man.xml.in.h:31 +msgid "Section 3qt" +msgstr "3qt بۆلەك" + +#: ../data/man.xml.in.h:32 +msgid "Section 3readline" +msgstr "3readline بۆلەك" + +#: ../data/man.xml.in.h:33 +msgid "Section 3ssl" +msgstr "3ssl بۆلەك" + +#: ../data/man.xml.in.h:34 +msgid "Section 3tiff" +msgstr "3tiff بۆلەك" + +#: ../data/man.xml.in.h:35 +msgid "Section 4" +msgstr "4 بۆلەك" -#: data/man.xml.in.h:16 +#: ../data/man.xml.in.h:36 +msgid "Section 4x" +msgstr "4x بۆلەك" + +#: ../data/man.xml.in.h:37 +msgid "Section 5" +msgstr "5 بۆلەك" + +#: ../data/man.xml.in.h:38 +msgid "Section 5ssl" +msgstr "5ssl بۆلەك" + +#: ../data/man.xml.in.h:39 +msgid "Section 5x" +msgstr "5x بۆلەك" + +#: ../data/man.xml.in.h:40 +msgid "Section 6" +msgstr "6 بۆلەك" + +#: ../data/man.xml.in.h:41 +msgid "Section 6x" +msgstr "6x بۆلەك" + +#: ../data/man.xml.in.h:42 +msgid "Section 7ssl" +msgstr "7ssl بۆلەك" + +#: ../data/man.xml.in.h:43 +msgid "Section 7x" +msgstr "7x بۆلەك" + +#: ../data/man.xml.in.h:44 +msgid "Section 9" +msgstr "9 بۆلەك" + +#: ../data/man.xml.in.h:45 +msgid "Sections 1, 1p, 1g and 1t" +msgstr "1، 1p، 1g ۋە 1t بۆلەك" + +#: ../data/man.xml.in.h:46 +msgid "Sections 3, 3o, and 3t" +msgstr "3، 3o ۋە 3t بۆلەك" + +#: ../data/man.xml.in.h:47 +msgid "Sections 3form and 3menu" +msgstr "3form ۋە 3menu بۆلەك" + +#: ../data/man.xml.in.h:48 +msgid "Sections 3ncurses and 3curses" +msgstr "3ncurses ۋە 3curses بۆلەك" + +#: ../data/man.xml.in.h:49 +msgid "Sections 3pm and 3perl" +msgstr "3pm ۋە 3perl بۆلەك" + +#: ../data/man.xml.in.h:50 +msgid "Sections 3x and 3X11" +msgstr "3x ۋە 3X11 بۆلەك" + +#: ../data/man.xml.in.h:51 +msgid "Sections 7 and 7gcc" +msgstr "7 ۋە 7gcc بۆلەك" + +#: ../data/man.xml.in.h:52 +msgid "Sections 8 and 8l" +msgstr "8 ۋە 8l بۆلەك" + +#: ../data/man.xml.in.h:53 msgid "System Administration" msgstr "سىستېما باشقۇرۇش" -#: data/man.xml.in.h:17 +#: ../data/man.xml.in.h:54 msgid "System Calls" -msgstr "سىستېما يۆتكەپ ئىشلىتىشى" +msgstr "سىستېما چاقىرىش" -#: data/man.xml.in.h:18 +#: ../data/man.xml.in.h:55 +msgid "System V Form/Menu Functions" +msgstr "System V جەدۋەل/تىزىملىك فۇنكسىيىسى" + +#: ../data/man.xml.in.h:56 +msgid "TIFF Functions" +msgstr "TIFF فۇنكسىيىلىرى" + +#: ../data/man.xml.in.h:57 msgid "Termcap Applications" -msgstr "قوللىنىش پىروگراممىلىرى Termcap" +msgstr "Termcap پروگراممىلىرى" + +#: ../data/man.xml.in.h:58 +msgid "Traditional command line help (man)" +msgstr "ئەنئەنىۋى بۇيرۇق قۇرى ياردىمى (man)" -#: data/man.xml.in.h:19 +#: ../data/man.xml.in.h:59 msgid "X11 Applications" -msgstr "قوللىنىش پىروگراممىلىرى X11" +msgstr "X11 پروگراممىلىرى" -#: data/man.xml.in.h:20 +#: ../data/man.xml.in.h:60 msgid "X11 Configuration" -msgstr "قۇرۇلمىسى X11 " +msgstr "X11 سەپلىمىسى" -#: data/man.xml.in.h:21 +#: ../data/man.xml.in.h:61 msgid "X11 Devices" -msgstr "زاپچاسلىرى X11" +msgstr "ئۈسكۈنىلىرىX11" -#: data/man.xml.in.h:22 +#: ../data/man.xml.in.h:62 msgid "X11 Functions" -msgstr "فۇنكسىيەلىرى X11" +msgstr "X11 فۇنكسىيىلىرى" -#: data/man.xml.in.h:23 +#: ../data/man.xml.in.h:63 msgid "X11 Games" -msgstr "ئويۇنلىرى X11" +msgstr "X11 ئويۇنلىرى" -#: data/man.xml.in.h:24 +#: ../data/man.xml.in.h:64 msgid "X11 Overviews" -msgstr "نىڭ قىسقىچە چۈشەندۈرىلىشى X11" +msgstr "X11 نىڭ قىسقىچە چۈشەندۈرۈلۈشى" + +#: ../data/toc.xml.in.h:1 +msgid "2D Graphics" +msgstr "2D گرافىكلىرى" + +#: ../data/toc.xml.in.h:2 +msgid "3D Graphics" +msgstr "3D گرافىكى" -#: data/toc.xml.in.h:1 +#: ../data/toc.xml.in.h:3 ../data/ui/yelp-preferences.ui.h:1 msgid "Accessibility" msgstr "ياردەم ئىقتىدارى" -#: data/toc.xml.in.h:2 -msgid "Accessories" -msgstr "قوشۇمچە زاپچاسلار" +#: ../data/toc.xml.in.h:4 +msgid "Action Games" +msgstr "ھەرىكەتلىك ئويۇن" -#: data/toc.xml.in.h:3 -msgid "Administration" -msgstr "باشقۇرۇش" +#: ../data/toc.xml.in.h:5 +msgid "Adventure Games" +msgstr "تەۋەككۈلچىلىك ئويۇنى" -#: data/toc.xml.in.h:5 +#: ../data/toc.xml.in.h:6 +msgid "Amusement" +msgstr "كۆڭۈل خۇشلۇقى" + +#: ../data/toc.xml.in.h:7 +msgid "Applications for viewing and manipulating graphics" +msgstr "گرافىك كۆرۈش ۋە بىر تەرەپ قىلىشقا ئىشلىتىدىغان قوللىنىشچان پروگرامما" + +#: ../data/toc.xml.in.h:8 +msgid "Applications related to audio and video" +msgstr "ئۈن ۋە سىنغا باغلىنىشلىق پروگرامما" + +#: ../data/toc.xml.in.h:9 +msgid "Applications that teach or aid in learning" +msgstr "مائارىپ ۋە ئوقۇتۇشتا ياردەمچى قوللىنىشچان پروگرامما" + +#: ../data/toc.xml.in.h:10 +msgid "Arcade Games" +msgstr "Arcade ئويۇنى" + +#: ../data/toc.xml.in.h:11 +msgid "Archiving Tools" +msgstr "ئارخىپ قورالى" + +#: ../data/toc.xml.in.h:12 +msgid "Art" +msgstr "سەنئەت" + +#: ../data/toc.xml.in.h:13 +msgid "Artificial Intelligence" +msgstr "سۈنئىي ئىدراك" + +#: ../data/toc.xml.in.h:14 +msgid "Astronomy" +msgstr "ئاسترونومىيە" + +#: ../data/toc.xml.in.h:15 +msgid "Biology" +msgstr "بىئولوگىيە" + +#: ../data/toc.xml.in.h:16 +msgid "Blocks Games" +msgstr "خىش ئويۇنى" + +#: ../data/toc.xml.in.h:17 +msgid "Board Games" +msgstr "شاھمات تاختىسى ئويۇنى" + +#: ../data/toc.xml.in.h:18 +msgid "Building" +msgstr "قۇرۇلۇش" + +#: ../data/toc.xml.in.h:19 +msgid "Calculator" +msgstr "ھېسابلىغۇچ" + +#: ../data/toc.xml.in.h:20 +msgid "Calendar" +msgstr "يىلنامە" + +#: ../data/toc.xml.in.h:21 +msgid "Card Games" +msgstr "قارتا ئويۇنلىرى" + +#: ../data/toc.xml.in.h:22 +msgid "Charting Tools" +msgstr "سىزمىچىلىق قوراللىرى" + +#: ../data/toc.xml.in.h:23 +msgid "Chat" +msgstr "دىئاگرامما" + +#: ../data/toc.xml.in.h:24 +msgid "Chemistry" +msgstr "خىمىيە" + +#: ../data/toc.xml.in.h:25 +msgid "Clocks" +msgstr "سائەتلەر" + +#: ../data/toc.xml.in.h:26 +msgid "Compression Tools" +msgstr "پرېسلاش پروگراممىلىرى" + +#: ../data/toc.xml.in.h:27 +msgid "Computer Science" +msgstr "كومپيۇتېر ئىلمى" + +#: ../data/toc.xml.in.h:28 +msgid "Construction" +msgstr "قۇرۇلۇش" + +#: ../data/toc.xml.in.h:29 +msgid "Contact Management" +msgstr "ئالاقىلەشكۈچىلەرنى باشقۇرۇش" + +#: ../data/toc.xml.in.h:30 +msgid "Data Visualization" +msgstr "سانلىق مەلۇمات كۆرۈنۈشچانلىقى" + +#: ../data/toc.xml.in.h:31 +msgid "Databases" +msgstr "ساندان" + +#: ../data/toc.xml.in.h:32 +msgid "Debuggers" +msgstr "تەڭشەپ سىناش پروگراممىسى" + +#: ../data/toc.xml.in.h:33 +#, fuzzy msgid "Desktop" -msgstr "Desktop" +msgstr "ئۈستەل يۈزى تەڭشىكى" + +#: ../data/toc.xml.in.h:34 +msgid "Desktop Settings" +msgstr "ئۈستەل يۈزى تەڭشىكى" + +#: ../data/toc.xml.in.h:36 +msgid "Dialup" +msgstr "نومۇر بۇراش" + +#: ../data/toc.xml.in.h:37 +msgid "Dictionaries" +msgstr "لۇغەتلەر" + +#. Translators: this is a menu title for burning audio and video to dics +#: ../data/toc.xml.in.h:39 +msgid "Disc Burning" +msgstr "دىسكا ئويۇش" + +#: ../data/toc.xml.in.h:40 +msgid "Economy" +msgstr "ئىقتىساد" + +#: ../data/toc.xml.in.h:41 +msgid "Education" +msgstr "ئوقۇتۇش" + +#: ../data/toc.xml.in.h:42 +msgid "Electricity" +msgstr "ئېلېكتر" + +#: ../data/toc.xml.in.h:43 +msgid "Electronics" +msgstr "ئېلېكترون ئىلمى" + +#: ../data/toc.xml.in.h:44 +msgid "Email Tools" +msgstr "ئېلخەت قوراللىرى" + +#: ../data/toc.xml.in.h:45 +msgid "Emulator" +msgstr "تەقلىدلەشتۈرگۈچ" + +#: ../data/toc.xml.in.h:46 +msgid "Engineering" +msgstr "ئىنژېنېرلىق ئىلمى" + +#: ../data/toc.xml.in.h:47 +msgid "File Manager" +msgstr "ھۆججەت باشقۇرغۇچ" + +#: ../data/toc.xml.in.h:48 +msgid "File Tools" +msgstr "ھۆججەت قورالى" + +#: ../data/toc.xml.in.h:49 +msgid "File Transfer" +msgstr "ھۆججەت يوللاش" + +#: ../data/toc.xml.in.h:50 +msgid "Filesystem" +msgstr "ھۆججەت سىستېمىسى" + +#: ../data/toc.xml.in.h:51 +msgid "Financial Tools" +msgstr "مالىيە قورالى" + +#: ../data/toc.xml.in.h:52 +msgid "Flow Charting Tools" +msgstr "تەرتىپ دىئاگرامما قورالى" -#: data/toc.xml.in.h:6 -msgid "Education Applications" -msgstr "ئوقۇتۇش قوللانما پروگراممىلىرى" +#: ../data/toc.xml.in.h:53 +msgid "GNOME Applications" +msgstr "GNOME پروگراممىلىرى" -#: data/toc.xml.in.h:8 +#: ../data/toc.xml.in.h:54 +msgid "GTK" +msgstr "GTK" + +#: ../data/toc.xml.in.h:55 +msgid "GUI Designers" +msgstr "ئىشلەتكۈچى كۆرۈنمە يۈز لايىھىلىگۈچى" + +#: ../data/toc.xml.in.h:57 +msgid "Generic applications for the GNOME environment" +msgstr "GNOME مۇھىتىدىكى ئادەتتىكى قوللىنىشچان پروگراممىلار" + +#: ../data/toc.xml.in.h:58 +msgid "Generic applications for the KDE environment" +msgstr "KDE مۇھىتىدىكى ئادەتتىكى پروگراممىلار" + +#: ../data/toc.xml.in.h:59 +msgid "Geography" +msgstr "جۇغراپىيە" + +#: ../data/toc.xml.in.h:60 +msgid "Geology" +msgstr "گېئولوگىيە" + +#: ../data/toc.xml.in.h:61 +msgid "Geoscience" +msgstr "يەر شارى ئىلمى" + +#: ../data/toc.xml.in.h:62 msgid "Graphics" -msgstr "گىرافىكلار" +msgstr "گرافىكلار" -#: data/toc.xml.in.h:9 src/yelp-bookmarks.c:391 -msgid "Help Topics" -msgstr "ياردەم تېمىلىرى" +#: ../data/toc.xml.in.h:63 +msgid "Guides and manuals for applications that connect to the outside world" +msgstr "توردىكى پروگرامما قوللانمىسى ۋە ياردىمى" + +#: ../data/toc.xml.in.h:64 +msgid "Guides for getting involved in development" +msgstr "پروگرامما تۈزۈشكە مۇناسىۋەتلىك كۆرسەتمىلەر" + +#: ../data/toc.xml.in.h:65 +msgid "Ham Radio" +msgstr "سىمسىز تېلېگراف ھەۋەسكارلار رادىئوسى" -#: data/toc.xml.in.h:10 +#: ../data/toc.xml.in.h:66 +msgid "Hardware Settings" +msgstr "قاتتىق دېتال تەڭشىكى" + +#: ../data/toc.xml.in.h:67 +msgid "Have some fun" +msgstr "خۇشال ئويناڭ" + +#: ../data/toc.xml.in.h:68 +msgid "History" +msgstr "تارىخ" + +#: ../data/toc.xml.in.h:69 +msgid "IDEs" +msgstr "يۈرۈشلەشتۈرۈلگەن ئىجادىيەت مۇھىتلىرى" + +#: ../data/toc.xml.in.h:70 +msgid "IRC Clients" +msgstr "IRC خېرىدارى" + +#: ../data/toc.xml.in.h:71 +msgid "Image Processing" +msgstr "سۈرەتچىلىك" + +#: ../data/toc.xml.in.h:72 +msgid "Instant Messaging" +msgstr "مۇڭداشقۇ" + +#: ../data/toc.xml.in.h:73 msgid "Internet" msgstr "ئىنتېرنېت" -#: data/toc.xml.in.h:11 -msgid "KDE" -msgstr "KDE" +#: ../data/toc.xml.in.h:74 +msgid "Java" +msgstr "Java" + +#: ../data/toc.xml.in.h:75 +msgid "KDE Applications" +msgstr "KDE قوللىنىشچان پروگراممىلىرى" + +#: ../data/toc.xml.in.h:76 +msgid "Kids Games" +msgstr "بالىلار ئويۇنلىرى" + +#: ../data/toc.xml.in.h:77 +msgid "" +"Learn more about making your system more accessible for a range of " +"disabilities" +msgstr "" +"قانداق قىلغاندا كومپيۇتېرىڭىزنى تېخىمۇ كۆپ مېيىپلەرنىڭ ئىشلىتىشى ھەققىدە " +"چۈشىنىڭ" + +#: ../data/toc.xml.in.h:78 +msgid "Licenses" +msgstr "ئىجازەتنامىلەر" + +#: ../data/toc.xml.in.h:79 +msgid "Literature" +msgstr "ئەدەبىيات" + +#: ../data/toc.xml.in.h:80 +msgid "Logic Games" +msgstr "لوگىكىلىق ئويۇن" + +#: ../data/toc.xml.in.h:81 +msgid "Math" +msgstr "ماتېماتىكا" + +#: ../data/toc.xml.in.h:82 +msgid "Medical Software" +msgstr "تېببىي يۇمشاق دېتال" + +#: ../data/toc.xml.in.h:83 +msgid "Midi" +msgstr "Midi" + +#: ../data/toc.xml.in.h:84 +msgid "Miscellaneous Documentation" +msgstr "باشقا پۈتۈكلەر" + +#: ../data/toc.xml.in.h:85 +msgid "Mixers" +msgstr "ئاۋاز تەڭشىگۈچ" + +#: ../data/toc.xml.in.h:86 +msgid "Monitor" +msgstr "ئېكران" + +#: ../data/toc.xml.in.h:87 +msgid "Motif" +msgstr "Motif" -#: data/toc.xml.in.h:12 -msgid "Multimedia" -msgstr "ناخشا مۇزىكىلار" +#: ../data/toc.xml.in.h:88 +msgid "Music" +msgstr "مۇزىكا" -#: data/toc.xml.in.h:13 -msgid "Office" -msgstr "ئشخانا" +#: ../data/toc.xml.in.h:89 +msgid "News" +msgstr "خەۋەر" -#: data/toc.xml.in.h:14 -msgid "Other" -msgstr "باشقىلار" +#: ../data/toc.xml.in.h:90 +msgid "Numerical Analysis" +msgstr "سانلىق ئانالىز" -#: data/toc.xml.in.h:15 +#: ../data/toc.xml.in.h:91 +msgid "OCR" +msgstr "OCR" + +#: ../data/toc.xml.in.h:92 +msgid "Office Applications" +msgstr "ئىشخانا پروگراممىلىرى" + +#: ../data/toc.xml.in.h:93 +msgid "Office applications" +msgstr "ئىشخانا پروگراممىلىرى" + +#: ../data/toc.xml.in.h:94 msgid "Other Documentation" -msgstr "باشقا ماقالىلار" +msgstr "باشقا ماقالىلەر" -#: data/toc.xml.in.h:16 -msgid "Panel Applets" -msgstr "تاختىسىدىكى كىچىك پىروگراممىلار Desktop" +#: ../data/toc.xml.in.h:95 +msgid "P2P" +msgstr "P2P" -#: data/toc.xml.in.h:17 data/ui/yelp.glade.h:10 -msgid "Preferences" -msgstr "مايىللىق" +#: ../data/toc.xml.in.h:96 +msgid "PDA Communication" +msgstr "PDA ئالاقىسى" -#: data/toc.xml.in.h:18 -msgid "Programming" -msgstr "پىروگرامما تۈزەش" +#: ../data/toc.xml.in.h:97 +msgid "Package Manager" +msgstr "بوغچا باشقۇرغۇچ" -#: data/toc.xml.in.h:19 -msgid "Scientific" -msgstr "ئىلمى" +#: ../data/toc.xml.in.h:98 +msgid "Parallel Computing" +msgstr "پاراللېل ھېسابلاش" -#: data/toc.xml.in.h:20 -msgid "System Tools" -msgstr "سىستىما قوراللىرى" +#: ../data/toc.xml.in.h:99 +msgid "Photography" +msgstr "فوتو سۈرەتچىلىك" -#: data/toc.xml.in.h:21 -msgid "X Applications" -msgstr "قوللىنىش پىروگراممىلىرى X" +#: ../data/toc.xml.in.h:100 +msgid "Physics" +msgstr "فىزىكا" -#: data/ui/yelp.glade.h:1 -msgid "<b>Accessibility</b>" -msgstr "<b>ياردەم قوراللىرى<b>" +#. Translators: this is a menu title for audio and video players +#: ../data/toc.xml.in.h:102 +msgid "Players" +msgstr "ئوينىغۇچى" -#: data/ui/yelp.glade.h:2 -msgid "<b>Fonts</b>" -msgstr "<b>:فونتلار<b>" +#: ../data/toc.xml.in.h:103 +msgid "Presentation Tools" +msgstr "كۆرسەتمە قورالى" -#: data/ui/yelp.glade.h:3 -msgid "<b>_Bookmarks:</b>" -msgstr "<b>:ئادرېس تىزىملىگى<b>" +#: ../data/toc.xml.in.h:104 ../src/yelp-print.c:339 ../src/yelp-print.c:366 +msgid "Printing" +msgstr "بېسىۋاتىدۇ" -#: data/ui/yelp.glade.h:4 -msgid "<b>_Title:</b>" -msgstr "<b>:تېمىسى<b>" +#: ../data/toc.xml.in.h:105 +msgid "Profiling Tools" +msgstr "سىناش قورالى" -#: data/ui/yelp.glade.h:5 -msgid "Add Bookmark" -msgstr "ئادرېسنى قوشۇش" +#: ../data/toc.xml.in.h:106 +msgid "Project Management Tools" +msgstr "قۇرۇلۇش باشقۇرۇش قورالى" -#: data/ui/yelp.glade.h:6 -msgid "Bookmarks" -msgstr "ئادرېس تىزىملىگى" +#: ../data/toc.xml.in.h:107 +msgid "Publishing" +msgstr "نەشرىياتچىلىق" -#: data/ui/yelp.glade.h:7 -msgid "C_ase sensitive" -msgstr "(_A) چوڭ كىچىك ھەرپنى پەرقلەندۈرۈش" +#: ../data/toc.xml.in.h:108 +msgid "Qt" +msgstr "Qt" -#: data/ui/yelp.glade.h:8 -msgid "Find" -msgstr "ئىزدەش" +#: ../data/toc.xml.in.h:109 +msgid "Raster Graphics" +msgstr "نۇر سېتكا گرافىكى" -#: data/ui/yelp.glade.h:9 -msgid "Open Location" -msgstr "تور ئادرېسىنى ئېچىش" +#. Translators: this is a menu title for audio and video recorders +#: ../data/toc.xml.in.h:111 +msgid "Recorders" +msgstr "ئۈنئالغۇ" + +#: ../data/toc.xml.in.h:112 +msgid "Remote Access" +msgstr "يىراقتىن زىيارەت" + +#: ../data/toc.xml.in.h:113 +msgid "Revision Control" +msgstr "نەشر كونترولى" + +#: ../data/toc.xml.in.h:114 +msgid "Robotics" +msgstr "ماشىنا ئادەم ئىلمى" -#: data/ui/yelp.glade.h:11 +#: ../data/toc.xml.in.h:115 +msgid "Role Playing Games" +msgstr "رول ئېلىش تىپىدىكى ئويۇن" + +#: ../data/toc.xml.in.h:116 +msgid "Scanning" +msgstr "تەكشۈرۈۋاتىدۇ" + +#: ../data/toc.xml.in.h:117 +msgid "Science" +msgstr "ئىلىم" + +#: ../data/toc.xml.in.h:118 +msgid "Security" +msgstr "بىخەتەرلىك" + +#: ../data/toc.xml.in.h:119 +msgid "Sequencers" +msgstr "تەرتىپلىگۈچ" + +#: ../data/toc.xml.in.h:120 +msgid "Settings" +msgstr "تەڭشەكلەر" + +#: ../data/toc.xml.in.h:121 +msgid "Settings users can manipulate to make their environment more pleasant" +msgstr "" +"ئىشلەتكۈچىلەر بۇ تەڭشەكلەرنى ئۆزگەرتىپ مەشغۇلات مۇھىتىنى تېخىمۇ راھەت " +"قىلالايدۇ" + +#: ../data/toc.xml.in.h:122 +msgid "Simulation Games" +msgstr "تەقلىدلەشتۈرگۈچ ئويۇنى" + +#: ../data/toc.xml.in.h:123 +msgid "Sound" +msgstr "ئاۋاز" + +#: ../data/toc.xml.in.h:124 +msgid "Sound & Video" +msgstr "ئۈن & سىن" + +#: ../data/toc.xml.in.h:125 +msgid "Sound & Video Editing" +msgstr "ئۈن & سىن تەھرىر" + +#: ../data/toc.xml.in.h:126 +msgid "Sports" +msgstr "تەنتەربىيە" + +#: ../data/toc.xml.in.h:127 +msgid "Sports Games" +msgstr "تەنتەربىيە ئويۇنلىرى" + +#: ../data/toc.xml.in.h:128 +msgid "Spreadsheet Tools" +msgstr "ئېلېكترونلۇق جەدۋەل قورالى" + +#: ../data/toc.xml.in.h:129 +msgid "Strategy Games" +msgstr "تەدبىر ئويۇنى" + +#: ../data/toc.xml.in.h:130 +msgid "System" +msgstr "سىستېما" + +#: ../data/toc.xml.in.h:131 +msgid "TV" +msgstr "تېلېۋىزور" + +#: ../data/toc.xml.in.h:132 +msgid "Telephony" +msgstr "تېلېفون ئىلمى" + +#: ../data/toc.xml.in.h:133 +msgid "Telephony Tools" +msgstr "تېلېفونشۇناسلىق قورالى" + +#: ../data/toc.xml.in.h:134 +msgid "Terminal Emulator" +msgstr "تېرمىنال تەقلىدلەشتۈرگۈچ" + +#: ../data/toc.xml.in.h:135 +msgid "Text Editors" +msgstr "تېكىست تەھرىرلىگۈچلەر" + +#: ../data/toc.xml.in.h:136 +msgid "Text Tools" +msgstr "تېكىست قوراللىرى" + +#: ../data/toc.xml.in.h:137 +msgid "Tools to help you manage your computer" +msgstr "كومپيۇتېر باشقۇرۇشقا ياردەمچى پروگراممىلار" + +#: ../data/toc.xml.in.h:138 +msgid "Translation Tools" +msgstr "تەرجىمە قوراللىرى" + +#: ../data/toc.xml.in.h:139 +msgid "Tuners" +msgstr "سازلىغۇچ" + +#: ../data/toc.xml.in.h:140 +msgid "Utilities" +msgstr "ئەمەلىي قوللىنىشچان قورال" + +#: ../data/toc.xml.in.h:141 +msgid "Utilities to help you get work done" +msgstr "خىزمىتىڭىزنى تاماملاشقا ياردەم بېرىدىغان ئەمەلىي قوللىنىشچان قورال" + +#: ../data/toc.xml.in.h:142 +msgid "Vector Graphics" +msgstr "ۋېكتورلۇق گرافىك" + +#: ../data/toc.xml.in.h:143 +msgid "Video" +msgstr "سىن" + +#: ../data/toc.xml.in.h:144 +msgid "Video Conference" +msgstr "سىنلىق يىغىن" + +#. Translators: This is a menu title for graphics viewing applications +#: ../data/toc.xml.in.h:146 +msgid "Viewer" +msgstr "كۆرگۈچ" + +#: ../data/toc.xml.in.h:147 +msgid "Web Browser" +msgstr "توركۆرگۈ" + +#: ../data/toc.xml.in.h:148 +msgid "Web Development" +msgstr "Web ئېچىش" + +#: ../data/toc.xml.in.h:149 +#, fuzzy +msgid "Welcome to the GNOME Help Browser" +msgstr " GNOME ياردەم توركۆرگۈ" + +#: ../data/toc.xml.in.h:150 +msgid "Word Processors" +msgstr "پۈتۈكچىلىك" + +#: ../data/ui/yelp-bookmarks.ui.h:1 +msgid "Bookmarks" +msgstr "خەتكۈش" + +#: ../data/ui/yelp-bookmarks.ui.h:2 msgid "Re_name" -msgstr "(_N)نامىنى ئۆزگەرتىش" +msgstr "ئاتىنى ئۆزگەرت(_N)" -#: data/ui/yelp.glade.h:12 -msgid "_Browse with caret" -msgstr "(_B) نۇر توچكىسى بىلەن كۆرۈش" +#: ../data/ui/yelp-bookmarks.ui.h:3 +msgid "_Bookmarks:" +msgstr "خەتكۈش(_B):" -#: data/ui/yelp.glade.h:13 -msgid "_Find: " -msgstr "(_F) ئىزدەش" +#: ../data/ui/yelp-bookmarks-add.ui.h:1 +msgid "Add Bookmark" +msgstr "خەتكۈش قوشۇش" -#: data/ui/yelp.glade.h:14 -msgid "_Fixed width:" -msgstr "(_F) مۇقىم كەڭلىك" +#: ../data/ui/yelp-bookmarks-add.ui.h:2 +msgid "_Title:" +msgstr "ماۋزۇ (_T):" -#: data/ui/yelp.glade.h:15 +#: ../data/ui/yelp-open-location.ui.h:1 +msgid "Open Location" +msgstr "تور ئادرېسىنى ئاچ" + +#: ../data/ui/yelp-open-location.ui.h:2 msgid "_Location:" -msgstr "(_L) تور ئادرېسى" +msgstr "ئورنى (_L):" -#: data/ui/yelp.glade.h:16 -msgid "_Next" -msgstr "(_N) كېيىنكىسى" +#: ../data/ui/yelp-preferences.ui.h:2 +msgid "Fonts" +msgstr "فونتلار" -#: data/ui/yelp.glade.h:17 -msgid "_Previous" -msgstr "(_P) ئالدىنقىسى" +#: ../data/ui/yelp-preferences.ui.h:3 +msgid "Preferences" +msgstr "مايىللىق" + +#: ../data/ui/yelp-preferences.ui.h:4 +msgid "_Browse with caret" +msgstr "نۇر بەلگىسى بىلەن كۆرۈش (_B)" -#: data/ui/yelp.glade.h:18 +#: ../data/ui/yelp-preferences.ui.h:5 +msgid "_Fixed width:" +msgstr "مۇقىم كەڭلىك(_F):" + +#: ../data/ui/yelp-preferences.ui.h:6 msgid "_Use system fonts" -msgstr "(_U) سىستېما فونتلىرىنى ئىشلىتىش" +msgstr "سىستېما فونتلىرىنى ئىشلەت(_U)" -#: data/ui/yelp.glade.h:19 +#: ../data/ui/yelp-preferences.ui.h:7 msgid "_Variable width:" -msgstr "(_V) :ئۆزگۈرۈشچان كەڭلىك" - -#: data/ui/yelp.glade.h:20 -msgid "_Wrap around" -msgstr "(_W) ئاپتوماتىك قۇر ئالمىشىش" +msgstr "ئۆزگىرىشچان كەڭلىك(_V):" -#: data/yelp.schemas.in.h:1 +#: ../data/yelp.schemas.in.h:1 msgid "Font for fixed text" -msgstr "ئوخشاش كەڭلىكتىكى تېكىست فونتى" +msgstr "تەڭ كەڭلىكتىكى تېكىست فونتى" -#: data/yelp.schemas.in.h:2 +#: ../data/yelp.schemas.in.h:2 msgid "Font for text" msgstr "تېكىست فونتى" -#: data/yelp.schemas.in.h:3 +#: ../data/yelp.schemas.in.h:3 msgid "Font for text with fixed width." -msgstr "ئوخشاش كەڭلىكتىكى تېكىست فونتى" +msgstr "تەڭ كەڭلىكتىكى تېكىست فونتى" -#: data/yelp.schemas.in.h:4 +#: ../data/yelp.schemas.in.h:4 msgid "Font for text with variable width." -msgstr "ئۆزگۈرۈشچان كەڭلىكتىكى تېكىست فونتى " +msgstr "ئۆزگىرىشچان كەڭلىكتىكى تېكىست فونتى" -#: data/yelp.schemas.in.h:5 +#: ../data/yelp.schemas.in.h:5 msgid "Use a keyboard-controllable caret when viewing pages." msgstr "" -"بەتنى كۆرۈۋاتقاندا كۇنۇپكا تاختىسىدىن كونتىرول قىلىنىدىغان نۇر توچكىسىنى " -"ئىشلىتىش" +"بەتنى كۆرۈۋاتقاندا كۇنۇپكا تاختىسىدىن كونترول قىلىنىدىغان نۇر بەلگىسى ئىشلەت" -#: data/yelp.schemas.in.h:6 +#: ../data/yelp.schemas.in.h:6 msgid "Use caret" -msgstr "نۇر توچكىسىنى ئىشلىتىش" +msgstr "نۇر بەلگىسى ئىشلەت" -#: data/yelp.schemas.in.h:7 +#: ../data/yelp.schemas.in.h:7 msgid "Use system fonts" -msgstr "سىستېما فونتىنى ئىشلىتىش" +msgstr "سىستېما فونتى ئىشلەت" -#: data/yelp.schemas.in.h:8 +#: ../data/yelp.schemas.in.h:8 msgid "Use the default fonts set for the system." -msgstr "سىستېما ئۈچۈن ئەسلىدىكى فونت قۇرۇلمىسىنى ئىشلىتىش" +msgstr "سىستېمىغا كۆڭۈلدىكى فونت قۇرۇلمىسىنى ئىشلەت" -#: src/GNOME_Yelp.server.in.h:1 src/yelp-window.c:2169 -msgid "Yelp" -msgstr "Yelp" +#: ../src/eggdesktopfile.c:165 +#, c-format +msgid "File is not a valid .desktop file" +msgstr "ھۆججەت ئىناۋەتلىك .desktop ھۆججىتى ئەمەس." + +#: ../src/eggdesktopfile.c:188 +#, c-format +msgid "Unrecognized desktop file Version '%s'" +msgstr "ئىناۋەتسىز ئۈستەل يۈزى ھۆججەت نەشرى '%s'" + +#: ../src/eggdesktopfile.c:957 +#, c-format +msgid "Starting %s" +msgstr "%s قوزغىلىۋاتىدۇ" + +#: ../src/eggdesktopfile.c:1098 +#, c-format +msgid "Application does not accept documents on command line" +msgstr "قوللىنىشچان پروگرامما بۇيرۇق قۇرىدا پۈتۈككە يول قويمايدۇ" + +#: ../src/eggdesktopfile.c:1166 +#, c-format +msgid "Unrecognized launch option: %d" +msgstr "تونۇمايدىغان ئىجرا تاللانمىسى: %d" + +#: ../src/eggdesktopfile.c:1365 +#, c-format +msgid "Can't pass document URIs to a 'Type=Link' desktop entry" +msgstr "URI پۈتۈكنى 'Type=Link' ئۈستەل يۈزى تۈرىگە يوللىيالمىدى." + +#: ../src/eggdesktopfile.c:1384 +#, c-format +msgid "Not a launchable item" +msgstr "ئىجراچان تۈر ئەمەس" + +#: ../src/eggsmclient.c:225 +msgid "Disable connection to session manager" +msgstr "سۆزلىشىش باشقۇرغۇچقا ئۇلىنىشنى چەكلەش" -#: src/GNOME_Yelp.server.in.h:2 -msgid "Yelp Factory" -msgstr "زاۋۇتى Yelp" +#: ../src/eggsmclient.c:228 +msgid "Specify file containing saved configuration" +msgstr "بەلگىلەنگەن سەپلىمە ساقلانغان ھۆججەت" -#: src/yelp-bookmarks.c:155 +#: ../src/eggsmclient.c:228 +msgid "FILE" +msgstr "ھۆججەت" + +#: ../src/eggsmclient.c:231 +msgid "Specify session management ID" +msgstr "session باشقۇرغۇچ ID سېنى بەلگىلە" + +#: ../src/eggsmclient.c:231 +msgid "ID" +msgstr "ID" + +#: ../src/eggsmclient.c:252 +msgid "Session management options:" +msgstr "session باشقۇرغۇچ تاللانمىلىرى:" + +#: ../src/eggsmclient.c:253 +msgid "Show session management options" +msgstr "session باشقۇرغۇچ تاللانمىلىرى كۆرسەت" + +#: ../src/yelp-bookmarks.c:147 msgid "Open Bookmark in New Window" -msgstr "تور ئادرېسىنى يېڭى كۆزنەكتە ئېچىش" +msgstr "خەتكۈچنى يېڭى كۆزنەكتە ئاچ" -#: src/yelp-bookmarks.c:159 +#: ../src/yelp-bookmarks.c:151 msgid "Rename Bookmark" -msgstr "تور ئادرېسىنى ئۆزگەرتىش" +msgstr "خەتكۈش ئاتى ئۆزگەرت" -#: src/yelp-bookmarks.c:163 +#: ../src/yelp-bookmarks.c:155 msgid "Remove Bookmark" -msgstr "تور ئادرېسىنى ئېلىۋېتىش" +msgstr "خەتكۈش چىقىرىۋەت" -#: src/yelp-bookmarks.c:306 src/yelp-bookmarks.c:378 +#: ../src/yelp-bookmarks.c:319 +#, c-format +msgid "A bookmark titled %s already exists for this page." +msgstr "بۇ بەتتە %s ماۋزۇلۇق خەتكۈش بار." + +#: ../src/yelp-bookmarks.c:395 #, c-format msgid "A bookmark titled <b>%s</b> already exists for this page." -msgstr "ماۋزۇلۇق تور بەت ئادرېسى ئاللىقاچان مەۋجۈت <b>%s</b> بۇ بەتنىڭ" +msgstr "بۇ بەتنىڭ <b>%s</b> ماۋزۇلۇق تور بەت ئادرېسى مەۋجۇت" -#: src/yelp-bookmarks.c:406 +#: ../src/yelp-bookmarks.c:408 +msgid "Help Topics" +msgstr "ياردەم تېمىلىرى" + +#: ../src/yelp-bookmarks.c:423 msgid "Document Sections" -msgstr "ماقالىنىڭ قىسىملىرى" +msgstr "پۈتۈك بۆلەكلىرى" + +#: ../src/yelp-db-print.c:258 ../src/yelp-db-print.c:350 +#: ../src/yelp-docbook.c:275 ../src/yelp-docbook.c:367 ../src/yelp-info.c:243 +#: ../src/yelp-info.c:338 ../src/yelp-mallard.c:284 ../src/yelp-mallard.c:384 +#: ../src/yelp-man.c:292 ../src/yelp-man.c:385 ../src/yelp-toc.c:266 +#: ../src/yelp-toc.c:365 +msgid "Page not found" +msgstr "بەتنى تاپالمىدى" + +#: ../src/yelp-db-print.c:259 ../src/yelp-docbook.c:276 ../src/yelp-info.c:244 +#: ../src/yelp-mallard.c:285 ../src/yelp-mallard.c:385 ../src/yelp-man.c:293 +#, c-format +msgid "The page %s was not found in the document %s." +msgstr "%2$s پۈتۈكتىكى %1$s بەتنى تاپالمىدى." -#: src/yelp-db-pager.c:242 +#: ../src/yelp-db-print.c:351 ../src/yelp-docbook.c:368 ../src/yelp-info.c:339 +#: ../src/yelp-man.c:386 #, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"not well-formed XML." -msgstr "" -"ھۆججەت '%s' نى ئانالىز قىلىش مۈمكىن ئەمەس. يا بۇ ھۆججەت مەۋجۈت ئەمەس, يا بۇ " -"ئىناۋەتلىك XML ئەمەس" +msgid "The requested page was not found in the document %s." +msgstr "%s پۈتۈكتىن ئىلتىماس قىلغان بەتنى تاپالمىدى." -#: src/yelp-db-pager.c:486 -msgid "Unknown Section" -msgstr "تونۇمىغان قىسىم" +#: ../src/yelp-db-print.c:392 ../src/yelp-docbook.c:410 ../src/yelp-info.c:380 +#: ../src/yelp-man.c:429 +msgid "File not found" +msgstr "ھۆججەت تېپىلمىدى" -#: src/yelp-error.c:42 src/yelp-error.c:58 -msgid "An unknown error occured" -msgstr "تونۇمىغان خاتالىق يۈز بەردى" +#: ../src/yelp-db-print.c:393 ../src/yelp-docbook.c:411 ../src/yelp-info.c:381 +#: ../src/yelp-man.c:430 +#, c-format +msgid "The file ‘%s’ does not exist." +msgstr "‘%s’ ھۆججەت مەۋجۇت ئەمەس." -#: src/yelp-error.c:46 -msgid "Could not load document" -msgstr "ھۆججەتنى يۈكلىيەلمىدى" +#: ../src/yelp-db-print.c:406 ../src/yelp-db-print.c:418 +#: ../src/yelp-docbook.c:424 ../src/yelp-docbook.c:436 ../src/yelp-info.c:395 +#: ../src/yelp-man.c:458 ../src/yelp-toc.c:437 +msgid "Could not parse file" +msgstr "ھۆججەتنى يېشەلمىدى" -#: src/yelp-error.c:48 -msgid "Could not load section" -msgstr "قىسىمنى يۈكلىيەلمىدى" +#: ../src/yelp-db-print.c:407 ../src/yelp-docbook.c:425 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed XML " +"document." +msgstr "‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكى ئۇ ئىناۋەتلىك XML پۈتۈكى ئەمەس." -#: src/yelp-error.c:50 -msgid "Could not read the table of contents" -msgstr "مۇندەرىجىنى ئوقۇيالمىدى" +#: ../src/yelp-db-print.c:419 ../src/yelp-docbook.c:437 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because one or more of its included files " +"is not a well-formed XML document." +msgstr "" +"‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكى ئۇنىڭ بىر ياكى بىر قانچە بۆلەك ھۆججىتى " +"ئىناۋەتلىك XML پۈتۈكى ئەمەس." + +#: ../src/yelp-db-print.c:766 ../src/yelp-docbook.c:787 +msgid "Unknown" +msgstr "نامەلۇم" -#: src/yelp-error.c:52 -msgid "Unsupported Format" -msgstr "قوللىمايدىغان فورمات" +#: ../src/yelp-error.c:132 ../src/yelp-error.c:139 +msgid "Unknown Error" +msgstr "نامەلۇم خاتالىق" -#: src/yelp-error.c:54 -msgid "Could not read document" -msgstr "ھۆججەتنى ئوقۇيالمىدى" +#: ../src/yelp-error.c:136 ../src/yelp-window.c:1719 +msgid "Could Not Read File" +msgstr "ھۆججەت ئوقۇيالمىدى" -#: src/yelp-error.c:56 -msgid "Could not process document" -msgstr "ھۆججەتنى بىر تەرەپ قىلالمىدى" +#: ../src/yelp-error.c:146 +msgid "No information is available about this error." +msgstr "بۇ ئۇچۇرغا مۇناسىۋەتلىك ئىشلىتىلىشچان ئۇچۇر يوق." -#: src/yelp-error.c:66 -msgid "No information is available about the error." -msgstr "خاتالىق ھەققىدە ھىچقانداق ئۇچۇر يوق" +#: ../src/yelp-info.c:396 +#, c-format +msgid "" +"The file ‘%s’ could not be parsed because it is not a well-formed info page." +msgstr "‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكى ئۇچۇر بېتى فورماتقا ماس كەلمەيدۇ." -#: src/yelp-io-channel.c:98 +#: ../src/yelp-io-channel.c:132 #, c-format msgid "" -"The file ‘s%’ could not be read and decoded. The file may be compressed in " +"The file ‘%s’ could not be read and decoded. The file may be compressed in " "an unsupported format." msgstr "" -"ھۆججەت s% نى ئوقۇش ھەم يېشىش مۈمكىن بولمىدى. ھۆججەت تونۇمايدىغان فورماتتا " -"قىسىلغان بولۇشى مۈمكىن " +"‘%s’ ھۆججەتنى ئوقۇپ كودىنى يېشەلمىدى. ھۆججەت قوللىمايدىغان فورماتتا " +"پرېسلانغان بولۇشى مۇمكىن." -#: src/yelp-main.c:95 -msgid "Define which cache directory to use" -msgstr "مۇندەرىجىسىنى ئىشلىتىشنى بەلگۈلەش cache قايسى" +#: ../src/yelp-main.c:88 +msgid "Use a private session" +msgstr "شەخسىي session ئىشلەت" -#: src/yelp-main.c:129 -#, c-format -msgid "Could not activate Yelp: '%s'" -msgstr "نى قوزغىتالمىدى Yelp: %s" +#: ../src/yelp-main.c:97 +msgid "Define which cache directory to use" +msgstr "قايسى غەملەك مۇندەرىجە ئىشلىتىشنى بەلگىلەش" -#: src/yelp-main.c:148 -msgid "Could not open new window." -msgstr "يېڭى كۆزنەك ئاچالمىدى" +#. Commandline parsing is done here +#: ../src/yelp-main.c:355 +msgid " GNOME Help Browser" +msgstr " GNOME ياردەم توركۆرگۈ" -#: src/yelp-main.c:325 yelp.desktop.in.in.h:2 +#: ../src/yelp-main.c:384 ../yelp.desktop.in.in.h:2 msgid "Help" msgstr "ياردەم" -#: src/yelp-man-pager.c:164 +#: ../src/yelp-mallard.c:315 +msgid "Directory not found" +msgstr "مۇندەرىجە تېپىلمىدى" + +#: ../src/yelp-mallard.c:316 +#, c-format +msgid "The directory ‘%s’ does not exist." +msgstr "‘%s’ دېگەن مۇندەرىجە يوق." + +#: ../src/yelp-man.c:459 #, c-format msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"formatted incorrectly." -msgstr "" -"ھۆججەت %s نى ئانالىز قىلىش مۈمكىن ئەمەس. يا بۇ ھۆججەت مەۋجۈت ئەمەس يا خاتا " -"فورماتلانغان" - -#: src/yelp-pager.c:120 -msgid "Document Information" -msgstr "ماقالا ئۇچۇرى" - -#: src/yelp-pager.c:121 -msgid "The YelpDocInfo struct of the document" -msgstr "قۇرۇلمىسى YelpDocInfo ماقالىنىڭ" - -#. TRANSLATORS: -#. This is an image of the opening quote character used to watermark -#. blockquote elements. Different languages use different opening -#. quote characters, so the icon name is translatable. The name of -#. the icon should be "yelp-watermark-blockquote-XXXX", where XXXX -#. is the Unicode code point of the opening quote character. For -#. example, some languages use the double angle quotation mark, so -#. those would use "yelp-watermark-blockquote-00AB". However, the -#. image is not automagically created. Do not translate this to a -#. value if there isn't a corresponding icon in yelp/data/icons. -#. If you need an image created, contact the maintainers. -#. -#. Phew, now some notes on which character to use. Languages that -#. use guillemets (angle quotations) should use either 00AB or AABB, -#. depending on whether the opening quotation is the left guillemet -#. or the right guillemet. Languages that use inverted comma style -#. quotations should use 201C, 201D, or 201E. Note that single -#. quotation marks don't make very nice watermarks. So if you use -#. single quotes as your primary (outer) quotation marks, you should -#. just use the corresponding double quote watermark. -#. -#: src/yelp-settings.c:153 -msgid "yelp-watermark-blockquote-201C" -msgstr "yelp-watermark-blockquote-201C" +"The file ‘%s’ could not be parsed because it is not a well-formed man page." +msgstr "‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكىman بەت فورماتىغا ماس كەلمەيدۇ." + +#: ../src/yelp-print.c:99 +msgid "Print" +msgstr "باس" + +#: ../src/yelp-print.c:169 +msgid "Preparing to print" +msgstr "بېسىشقا تەييارلىنىۋاتىدۇ" -#: src/yelp-toc-pager.c:268 -msgid "YelpTocPager: Pause count is negative." -msgstr "قىسقا توختاش قېتىم سانى مەنپى سان :YelpTocPager" +#: ../src/yelp-print.c:263 +msgid "Printing is not supported on this printer" +msgstr "بۇ پرىنتېردا بېسىشنى قوللىمايدۇ" -#: src/yelp-toc-pager.c:491 +#: ../src/yelp-print.c:266 #, c-format -msgid "Could not load the OMF file '%s'." -msgstr "نى قاچىلىيالمىدى %s ھۆججىتى OMF" +msgid "Printer %s does not support postscript printing." +msgstr "%s پرىنتېر postscript تا بېسىشنى قوللىمايدۇ" -#: src/yelp-toc-pager.c:682 +#: ../src/yelp-print.c:368 +msgid "Waiting to print" +msgstr "بېسىشنى كۈتۈۋاتىدۇ" + +#: ../src/yelp-print.c:580 +msgid "An error occurred while printing" +msgstr "بېسىۋاتقاندا خاتالىق كۆرۈلدى" + +#: ../src/yelp-print.c:584 #, c-format -msgid "Read man page for %s" -msgstr "بېتىنى ئوقۇش man نىڭ %s" +msgid "It was not possible to print your document: %s" +msgstr "پۈتۈكىڭىزنى باسالمىدى: %s" + +#: ../src/yelp-search-parser.c:67 +msgid "the GNOME Support Forums" +msgstr "" -#: src/yelp-toc-pager.c:767 +#: ../src/yelp-search-parser.c:285 #, c-format +msgid "No results for \"%s\"" +msgstr "\"%s\" نەتىجە يوق" + +#: ../src/yelp-search-parser.c:286 msgid "" -"The table of contents could not be loaded. The file ‘%s’ is either missing " -"or is not well-formed XML." +"Try using different words to describe the problem you're having or the topic " +"you want help with." msgstr "" -"مۇندەرىجىنى يۈكلەش مۇمكىن ئەمەس. يا ھۆججەت %s يوقالغان يا ئىناۋەتلىك XML " -"ئەمەس" +"ئوخشىمىغان مەزمۇندا سىز يولۇققان مەسىلىنى ياكى سىز ئېرىشمەكچى بولغان ياردەم " +"باش تېمىسىنى بايان قىلىڭ." + +#: ../src/yelp-search-parser.c:289 +#, c-format +msgid "Search results for \"%s\"" +msgstr "\"%s\" نىڭ ئىزدەش نەتىجىسى" + +#. TRANSLATORS: Please don't do anything funny with the +#. * format arguement. It isn't really going through a printf +#. * The %s is used to indicate where the name of the site (linked) +#. * should be. This is done in the XSLT +#. +#: ../src/yelp-search-parser.c:303 +#, c-format +msgid "Repeat the search online at %s" +msgstr "%s دىن قايتا ئىزدە" + +#. Translators: Do not translate this list exactly. These are +#. * colon-separated words that aren't useful for choosing search +#. * results; they will be different for each language. Include +#. * pronouns, articles, very common verbs and prepositions, +#. * words from question structures like "tell me about" and +#. * "how do I", and words for functional states like "not", +#. * "work", and "broken". +#. +#: ../src/yelp-search-parser.c:874 +msgid "" +"a:about:an:are:as:at:be:broke:broken:by:can:can't:dialog:dialogue:do:doesn't:" +"doesnt:don't:dont:explain:for:from:get:gets:got:make:makes:not:when:has:have:" +"help:how:i:in:is:it:item:me:my:of:on:or:tell:that:the:thing:this:to:what:" +"where:who:will:with:won't:wont:why:work:working:works" +msgstr "ھەققىدە: ماق: مەك:ئۈچۈن:نىڭ:دا:دە:تا:تە:" + +#. Translators: This is a list of common prefixes for words. +#. * Do not translate this directly. Instead, use a colon +#. * seperated list of word-starts. In English, an example +#. * is re-. If there is none, please use the term NULL +#. * If there is only one, please put a colon after. +#. * E.g. if the common prefix is re then the string would be +#. * "re:" +#. +#: ../src/yelp-search-parser.c:890 +msgid "re" +msgstr "جاۋاب" + +#. Translators: This is a list of (guess what?) common suffixes +#. * to words. Things that may be put at ends of words to slightly +#. * alter their meaning (like -ing and -s in English). This is a +#. * colon seperated list (I like colons). If there are none, +#. * please use the string NULL. If there is only 1, please +#. * add a colon at the end of the list +#. +#: ../src/yelp-search-parser.c:899 +msgid "ers:er:ing:es:s:'s" +msgstr "نىڭ: دار:پەز:غۇ:چى" + +#: ../src/yelp-search-parser.c:1095 +msgid "No Comment" +msgstr "باھا يوق" + +#. Much bigger problems +#: ../src/yelp-search.c:238 +msgid "Search could not be processed" +msgstr "ئىزدىيەلمىدى" + +#: ../src/yelp-search.c:239 +msgid "The requested search could not be processed." +msgstr "ئىزدەش ئىلتىماسىنى ئىجرا قىلالمىدى." -#: src/yelp-toc-pager.c:878 +#: ../src/yelp-search.c:366 +msgid "Cannot process the search" +msgstr "بۇ ئىزدەشنى ئىجرا قىلالمىدى" + +#: ../src/yelp-search.c:367 +msgid "The search processor returned invalid results" +msgstr "ئىزدەش جەريانى ئىشلەتكىلى بولمايدىغان نەتىجە قايتۇردى" + +#: ../src/yelp-toc.c:267 #, c-format +msgid "The page %s was not found in the TOC." +msgstr "TOC دا %s بەتنى تاپالمىدى." + +#: ../src/yelp-toc.c:366 +msgid "The requested page was not found in the TOC." +msgstr "TOC دا ئىلتىماس قىلغان بەتنى تاپالمىدى." + +#: ../src/yelp-toc.c:438 msgid "" -"The table of contents could not be processed. The file ‘%s’ is either " -"missing or is not a valid XSLT stylesheet." +"The TOC file could not be parsed because it is not a well-formed XML " +"document." msgstr "" -"مۇندەرىجىنى بىر تەرەپ قىلىش مۇمكىن ئەمەس. يا ھۆججەت %s يوقالغان يا " -"ئىناۋەتلىك XSLT ئەمەس " +"TOC ھۆججىتىنى تەھلىل قىلالمىدى، بۇ ئۆلچەملىك فورماتتىكى XML پۈتۈكى ئەمەس." -#: src/yelp-toc-pager.c:1029 src/yelp-xslt-pager.c:365 -msgid "No href attribute found on yelp:document" -msgstr " نى تاپالمىدى href دىن yelp:document" +#: ../src/yelp-transform.c:86 +msgid "Invalid Stylesheet" +msgstr "ئىناۋەتسىز ئۇسلۇب جەدۋىلى" -#: src/yelp-toc-pager.c:1043 src/yelp-xslt-pager.c:381 -msgid "Out of memory" -msgstr "ئىچكى ساقلىغۇچتا ئورۇن قالمىدى" +#: ../src/yelp-transform.c:87 +#, c-format +msgid "The XSLT stylesheet ‘%s’ is either missing, or it is not valid." +msgstr "XSLT ئۇسلۇب جەدۋىلى ‘%s’ يوقالغان ياكى ئىناۋەتسىز." -#: src/yelp-toc-pager.c:1084 -msgid "Help Contents" -msgstr "ياردەم تېمىلىرى" +#: ../src/yelp-transform.c:122 +msgid "Broken Transformation" +msgstr "بۇزۇلغان ئايلاندۇرۇش" + +#: ../src/yelp-transform.c:123 +msgid "An unknown error occurred while attempting to transform the document." +msgstr "ھۆججەت ئايلاندۇرغاندا نامەلۇم خاتالىق كۆرۈلدى." + +#: ../src/yelp-transform.c:389 +msgid "No href attribute found on yelp:document\n" +msgstr "yelp:document دا href خاسلىقى يوقكەن\n" + +#: ../src/yelp-transform.c:404 +msgid "Out of memory" +msgstr "ئەسلەك يېتىشمىدى" -#: src/yelp-window.c:292 +#: ../src/yelp-window.c:304 msgid "_File" -msgstr "(_F)ھۆججەت" +msgstr "ھۆججەت(_F)" -#: src/yelp-window.c:293 +#: ../src/yelp-window.c:305 msgid "_Edit" -msgstr "(_E)ئېدىتلاش" +msgstr "تەھرىر(_E)" -#: src/yelp-window.c:294 +#: ../src/yelp-window.c:306 msgid "_Go" -msgstr "(_G)يۈرگۈزۈش" +msgstr "يۆتكەل(_G)" -#: src/yelp-window.c:295 +#: ../src/yelp-window.c:307 msgid "_Bookmarks" -msgstr "(_B)ئادرېس تىزىملىگى" +msgstr "خەتكۈش(_B)" -#: src/yelp-window.c:296 +#: ../src/yelp-window.c:308 msgid "_Help" -msgstr "(_H)ياردەم" +msgstr "ياردەم(_H)" -#: src/yelp-window.c:299 +#: ../src/yelp-window.c:311 msgid "_New Window" -msgstr "(_N)يېڭى كۆزنەك" +msgstr "يېڭى كۆزنەك(_N)" -#: src/yelp-window.c:304 +#: ../src/yelp-window.c:316 +msgid "Print This Document ..." +msgstr "بۇ پۈتۈكنى باس…" + +#: ../src/yelp-window.c:321 +msgid "Print This Page ..." +msgstr "بۇ بەتنى باس…" + +#: ../src/yelp-window.c:326 msgid "About This Document" msgstr "بۇ ھۆججەت توغرىسىدا" -#: src/yelp-window.c:309 +#: ../src/yelp-window.c:331 msgid "Open _Location" -msgstr "ئادرېسنى ئېچىش" +msgstr "ئادرېس ئاچ(_L)" -#: src/yelp-window.c:314 +#: ../src/yelp-window.c:336 msgid "_Close Window" -msgstr "(_C)كۆزنەكنى ئېتىش" +msgstr "كۆزنەك ياپ(_C)" -#: src/yelp-window.c:320 +#: ../src/yelp-window.c:342 msgid "_Copy" -msgstr "(_C)كۆچۈرۈش" +msgstr "كۆچۈر(_C)" -#: src/yelp-window.c:326 +#: ../src/yelp-window.c:348 msgid "_Select All" -msgstr "(_S)ھەممىنى تاللاش" +msgstr "ھەممىنى تاللا(_S)" -#: src/yelp-window.c:331 +#: ../src/yelp-window.c:353 msgid "_Find..." -msgstr "(_F)ئىزلەش" +msgstr "ئىزدە(_F)…" + +#: ../src/yelp-window.c:358 +msgid "Find Pre_vious" +msgstr "ئالدىنقىنى ئىزدە(_V)" + +#: ../src/yelp-window.c:360 +msgid "Find previous occurrence of the word or phrase" +msgstr "ئالدىن قېتىم كۆرۈلگەن سۆز ياكى ئاتالغۇنى ئىزدە" + +#: ../src/yelp-window.c:363 +msgid "Find Ne_xt" +msgstr "كېيىنكىنى ئىزدە(_X)" -#: src/yelp-window.c:336 +#: ../src/yelp-window.c:365 +msgid "Find next occurrence of the word or phrase" +msgstr "كېيىنكى قېتىم كۆرۈلىدىغان سۆز ياكى ئاتالغۇنى ئىزدە" + +#: ../src/yelp-window.c:368 msgid "_Preferences" -msgstr "(_P)مايىللىق" +msgstr "مايىللىق(_P)" -#: src/yelp-window.c:341 +#: ../src/yelp-window.c:373 msgid "_Reload" -msgstr "(_R)يېڭىلاش" +msgstr "قايتا يۈكلە(_R)" -#: src/yelp-window.c:347 +#: ../src/yelp-window.c:385 msgid "_Back" -msgstr "(_B)كەينىگە" +msgstr "كەينىگە(_B)" -#: src/yelp-window.c:349 +#: ../src/yelp-window.c:387 msgid "Show previous page in history" -msgstr "تارىختىكى ئالدىنقى بەتنى كۆرسىتىش" +msgstr "تارىختىكى ئالدىنقى بەتنى كۆرسەت" -#: src/yelp-window.c:352 +#: ../src/yelp-window.c:390 msgid "_Forward" -msgstr "(_F)ئالدىغا" +msgstr "ئالدىغا(_F)" -#: src/yelp-window.c:354 +#: ../src/yelp-window.c:392 msgid "Show next page in history" -msgstr "تارىختىكى ئالدىنقى بەتنى كۆرسىتىش" +msgstr "تارىختىكى كېيىنكى بەتنى كۆرسەت" -#: src/yelp-window.c:357 +#: ../src/yelp-window.c:395 msgid "_Help Topics" -msgstr "(_H)ياردەم تېمىلىرى" +msgstr "ياردەم تېمىلىرى(_H)" -#: src/yelp-window.c:359 +#: ../src/yelp-window.c:397 msgid "Go to the listing of help topics" -msgstr "ياردەم تېمىلىرىنىڭ تىزىملىگىگە بېرىش" +msgstr "ياردەم تېمىلىرىنىڭ تىزىملىكىگە يۆتكەل" -#: src/yelp-window.c:362 +#: ../src/yelp-window.c:400 msgid "_Previous Section" -msgstr "(_P)ئالدىنقى بۆلۈم" +msgstr "ئالدىنقى بۆلەك(_P)" -#: src/yelp-window.c:367 +#: ../src/yelp-window.c:405 msgid "_Next Section" -msgstr "(_N)كېيىنكى بۆلۈم" +msgstr "كېيىنكى بۆلەك(_N)" -#: src/yelp-window.c:372 +#: ../src/yelp-window.c:410 ../src/yelp-window.c:442 msgid "_Contents" -msgstr "(_C)مۇندەرىجە" +msgstr "مەزمۇن(_C)" -#: src/yelp-window.c:378 +#: ../src/yelp-window.c:416 msgid "_Add Bookmark" -msgstr "(_A)تور بەت ئادرېسىنى قوشۇش" +msgstr "خەتكۈش قوش(_A)" -#: src/yelp-window.c:383 +#: ../src/yelp-window.c:421 msgid "_Edit Bookmarks..." -msgstr "(_E).... تور بەت ئادېسلىرىنى ئېدىتلاش" +msgstr "خەتكۈش تەھرىر(_E)…" -#: src/yelp-window.c:389 +#: ../src/yelp-window.c:427 msgid "_Open Link" -msgstr "(_O)ئۇلىنىشنى ئېچىش" +msgstr "ئۇلانما ئاچ(_O)" -#: src/yelp-window.c:394 +#: ../src/yelp-window.c:432 msgid "Open Link in _New Window" -msgstr "ئۇلىنىشنى يېڭى كۆزنەكتە ئېچىش" +msgstr "ئۇلانمىنى يېڭى كۆزنەكتە ئاچ(_N)" -#: src/yelp-window.c:399 +#: ../src/yelp-window.c:437 msgid "_Copy Link Address" -msgstr "(_C)ئۇلىنىش ئادرېسىنى كۆچۈرۈش" +msgstr "ئۇلانما ئادرېس كۆچۈر(_C)" + +#: ../src/yelp-window.c:444 +msgid "Help On this application" +msgstr "بۇ قوللىنىشچان پروگراممىنىڭ ياردىمى" -#: src/yelp-window.c:405 +#: ../src/yelp-window.c:447 msgid "_About" -msgstr "(_A)ھەققىدە" +msgstr "ھەققىدە(_A)" + +#: ../src/yelp-window.c:452 +msgid "Copy _Email Address" +msgstr "ئېلخەت ئادرېسى كۆچۈر(_E)" -#: src/yelp-window.c:456 +#: ../src/yelp-window.c:524 msgid "Help Browser" -msgstr "ياردەم كۆزنىگى" +msgstr "ياردەم كۆرگۈچ" -#: src/yelp-window.c:687 src/yelp-window.c:820 -msgid "The Uniform Resource Identifier for the file is invalid." -msgstr "ھۆججەتنىڭ بىرلىككە كەلگەن مەنبە ئېنىقلىغۇچى ئىناۋەتسىز" +#: ../src/yelp-window.c:619 ../src/yelp-window.c:671 ../src/yelp-window.c:1782 +msgid "Loading..." +msgstr "يۈكلەۋاتىدۇ…" + +#: ../src/yelp-window.c:620 ../src/yelp-window.c:672 +msgid "Unknown Page" +msgstr "نامەلۇم بەت" -#: src/yelp-window.c:699 src/yelp-window.c:815 +#: ../src/yelp-window.c:1043 ../src/yelp-window.c:1105 +#: ../src/yelp-window.c:1114 #, c-format -msgid "" -"The Uniform Resource Identifier ‘%s’ is invalid or does not point to an " -"actual file." -msgstr "" -" بىرلىككە كەلگەن مەنبە ئېنىقلىغۇچى %s ئىناۋەتسىز ياكى بىر ئەمىلى ھۆججەتنى " -"كۆرسەتمەيدۇ" +msgid "The requested URI \"%s\" is invalid" +msgstr "ئىلتىماس قىلغان URI \"%s\" ئىناۋەتسىز" -#: src/yelp-window.c:775 src/yelp-window.c:1130 -msgid "Man pages are not supported in this version." -msgstr "بەتلىرىنى قوللىمايدۇ man بۇ نۇسخا" +#: ../src/yelp-window.c:1044 ../src/yelp-window.c:1107 +#: ../src/yelp-window.c:1115 +msgid "Unable to load page" +msgstr "بەتنى يۈكلىيەلمەيدۇ" -#: src/yelp-window.c:785 src/yelp-window.c:1121 -msgid "GNU info pages are not supported in this version" -msgstr "بەتلىرىنى قوللىمايدۇ GNU info بۇ نۇسخا" +#: ../src/yelp-window.c:1339 +msgid "_Search:" +msgstr "ئىزدە(_S):" -#: src/yelp-window.c:795 -msgid "" -"SGML documents are no longer supported. Please ask the author of the " -"document to convert to XML." -msgstr "" -" فورمات SGML نى قوللاش ئەمەلدىن قالدۇرۇلدى. XML فورماتىغا ئايلاندۇرۇشنى " -"ماقالىنىڭ ئاپتورىدىن سوراڭ " +#: ../src/yelp-window.c:1340 +msgid "Search for other documentation" +msgstr "باشقا پۈتۈكنى ئىزدە" -#: src/yelp-window.c:1014 -msgid "Find:" -msgstr "ئىزلەش" +#: ../src/yelp-window.c:1360 +msgid "Cannot create window" +msgstr "كۆزنەك قۇرالمىدى" -#: src/yelp-window.c:1030 -msgid "Find _Next" -msgstr "كېيىنكىسىنى ئىزلەش" +#: ../src/yelp-window.c:1366 +msgid "Cannot create search component" +msgstr "ئىزدەش بۆلىكى قۇرالمىدى" + +#: ../src/yelp-window.c:1538 +msgid "Fin_d:" +msgstr "ئىزدە(_D):" -#: src/yelp-window.c:1042 +#: ../src/yelp-window.c:1560 msgid "Find _Previous" -msgstr "ئالدىنقىسىنى ئىزلەش" +msgstr "ئالدىنقىنى ئىزدە(_P)" -#: src/yelp-window.c:1147 -#, c-format -msgid "" -"A transformation context could not be created for the file ‘%s’. The format " -"may not be supported." -msgstr "" -"ھۆججىتىنى ئايلاندۇرۇش مۇھىتىنى قۇرۇش ئىمكانىيىتى بولمىدى. ھۆججەتنىڭ فورماتى" -"%s قوللىنىلمىسا كېرەك" +#: ../src/yelp-window.c:1572 +msgid "Find _Next" +msgstr "كېيىنكىسىنى ئىزدە(_N)" -#: src/yelp-window.c:1177 src/yelp-window.c:1601 src/yelp-window.c:1668 -#, c-format -msgid "" -"The section ‘%s’ does not exist in this document. If you were directed to " -"this section from a Help button in an application, please report this to the " -"maintainers of that application." -msgstr "" -"ماقالىنىڭ %s بۆلۈمى مەۋجۈت ئەمەس. ئگەر بىرەر قوللىنىش پىروگراممىسىنىڭ ياردەم " -"تۈگمىسىنى بۇ يەرگە ئۇلىنىدىغان قىلغان بولسىڭىز ئۇنداقتا شۇ پىروگراممىنىڭ " -"داۋاملاشتۇرغۇچىسىبىلەن ئالاقىلىشىڭ" +#: ../src/yelp-window.c:1585 +msgid "Phrase not found" +msgstr "ئاتالغۇنى تاپالمىدى" -#: src/yelp-window.c:1292 +#: ../src/yelp-window.c:1716 #, c-format msgid "" "The file ‘%s’ could not be read. This file might be missing, or you might " "not have permissions to read it." msgstr "" -"ھۆججەت %s نى ئوقۇغىلى بولمىدى. يا ھۆججەت يوقالغان يا سىزنىڭ ئوقۇش رۇخسىتىڭىز " -"يوق" - -#: src/yelp-window.c:1336 -msgid "Loading..." -msgstr "...... قاچىلىنىۋاتىدۇ" +"‘%s’ ھۆججەتنى ئوقۇيالمىدى. ھۆججەت يوقالغان ياكى بۇ ھۆججەتنى ئوقۇش ھوقۇقىڭىز " +"يوق." #. Note to translators: put here your name (and address) so it #. * will show up in the "about" box -#: src/yelp-window.c:2166 +#: ../src/yelp-window.c:2607 msgid "translator-credits" msgstr "" "GNOME Uighur Translation Project <gnome-uighur@yahoogroups.comAbduxukur " -"Abdurixit <abduxukur.abdurixit@t-systems.ch>, 2005" +"Abdurixit <abduxukur.abdurixit@t-systems.ch>, 2005\n" +"\n" +"Launchpad Contributions:\n" +" Burkut https://launchpad.net/~burkut\n" +" Gheyret T.Kenji https://launchpad.net/~gheyretkenji\n" +" Sebastien Bacher https://launchpad.net/~seb128" + +#: ../src/yelp-window.c:2610 +msgid "Yelp" +msgstr "Yelp" -#: src/yelp-window.c:2171 +#: ../src/yelp-window.c:2612 msgid "A documentation browser and viewer for the Gnome Desktop." -msgstr "نىڭ ماقالالە كۆرگۈچىسى Gnome Desktop" +msgstr "Gnome Desktop نىڭ پۈتۈك كۆرگۈچىسى" -#: src/yelp-xslt-pager.c:194 -#, c-format -msgid "" -"The file ‘%s’ could not be parsed. Either the file does not exist, or it is " -"improperly formatted." -msgstr "" -"ھۆججەت %s نى ئانالىز قىلىش مۈمكىن ئەمەس. يا ھۆججەت مەۋجۈت ئەمەس يا نامۇۋاپىق " -"فورماتلانغان" +#: ../yelp.desktop.in.in.h:1 +#, fuzzy +msgid "Get help with GNOME" +msgstr "Ubuntu ياردىمىگە ئېرىش" -#: src/yelp-xslt-pager.c:215 src/yelp-xslt-pager.c:228 -#, c-format -msgid "" -"The document ‘%s’ could not be processed. The file ‘%s’ is either missing, " -"or it is not a valid XSLT stylesheet." -msgstr "" -" ماقالە %s نى بىر تەرەپ قىلىش مۈمكىن ئەمەس. يا ھۆججەت %s يۈتكەن يا ئىناۋەتلىك " -"XSLT ئەمەس" +#~ msgid "Accessories" +#~ msgstr "قوشۇمچە زاپچاسلار" -#: yelp.desktop.in.in.h:1 -msgid "Get help with GNOME" -msgstr "دىن ياردەمگە ئېرىشمەك GNOME" +#~ msgid "KDE" +#~ msgstr "KDE" + +#~ msgid "Multimedia" +#~ msgstr "ناخشا مۇزىكىلار" + +#~ msgid "Office" +#~ msgstr "ئشخانا" + +#~ msgid "Other" +#~ msgstr "باشقىلار" + +#~ msgid "Panel Applets" +#~ msgstr "تاختىسىدىكى كىچىك پىروگراممىلار Desktop" + +#~ msgid "Programming" +#~ msgstr "پىروگرامما تۈزەش" + +#~ msgid "<b>Fonts</b>" +#~ msgstr "<b>:فونتلار<b>" + +#~ msgid "C_ase sensitive" +#~ msgstr "(_A) چوڭ كىچىك ھەرپنى پەرقلەندۈرۈش" + +#~ msgid "_Wrap around" +#~ msgstr "(_W) ئاپتوماتىك قۇر ئالمىشىش" + +#~ msgid "Yelp Factory" +#~ msgstr "زاۋۇتى Yelp" + +#~ msgid "An unknown error occured" +#~ msgstr "تونۇمىغان خاتالىق يۈز بەردى" + +#~ msgid "Could not read the table of contents" +#~ msgstr "مۇندەرىجىنى ئوقۇيالمىدى" + +#~ msgid "Unsupported Format" +#~ msgstr "قوللىمايدىغان فورمات" + +#~ msgid "Could not activate Yelp: '%s'" +#~ msgstr "نى قوزغىتالمىدى Yelp: %s" + +#~ msgid "The YelpDocInfo struct of the document" +#~ msgstr "قۇرۇلمىسى YelpDocInfo ماقالىنىڭ" + +#~ msgid "yelp-watermark-blockquote-201C" +#~ msgstr "yelp-watermark-blockquote-201C" + +#~ msgid "YelpTocPager: Pause count is negative." +#~ msgstr "قىسقا توختاش قېتىم سانى مەنپى سان :YelpTocPager" + +#~ msgid "Read man page for %s" +#~ msgstr "بېتىنى ئوقۇش man نىڭ %s" + +#~ msgid "The Uniform Resource Identifier for the file is invalid." +#~ msgstr "ھۆججەتنىڭ بىرلىككە كەلگەن مەنبە ئېنىقلىغۇچى ئىناۋەتسىز" + +#~ msgid "" +#~ "The Uniform Resource Identifier ‘%s’ is invalid or does not point to an " +#~ "actual file." +#~ msgstr "" +#~ " بىرلىككە كەلگەن مەنبە ئېنىقلىغۇچى %s ئىناۋەتسىز ياكى بىر ئەمىلى " +#~ "ھۆججەتنى كۆرسەتمەيدۇ" + +#~ msgid "" +#~ "SGML documents are no longer supported. Please ask the author of the " +#~ "document to convert to XML." +#~ msgstr "" +#~ " فورمات SGML نى قوللاش ئەمەلدىن قالدۇرۇلدى. XML فورماتىغا ئايلاندۇرۇشنى " +#~ "ماقالىنىڭ ئاپتورىدىن سوراڭ " + +#~ msgid "" +#~ "A transformation context could not be created for the file ‘%s’. The " +#~ "format may not be supported." +#~ msgstr "" +#~ "ھۆججىتىنى ئايلاندۇرۇش مۇھىتىنى قۇرۇش ئىمكانىيىتى بولمىدى. ھۆججەتنىڭ " +#~ "فورماتى%s قوللىنىلمىسا كېرەك" + +#~ msgid "" +#~ "The section ‘%s’ does not exist in this document. If you were directed to " +#~ "this section from a Help button in an application, please report this to " +#~ "the maintainers of that application." +#~ msgstr "" +#~ "ماقالىنىڭ %s بۆلۈمى مەۋجۈت ئەمەس. ئگەر بىرەر قوللىنىش پىروگراممىسىنىڭ " +#~ "ياردەم تۈگمىسىنى بۇ يەرگە ئۇلىنىدىغان قىلغان بولسىڭىز ئۇنداقتا شۇ " +#~ "پىروگراممىنىڭ داۋاملاشتۇرغۇچىسىبىلەن ئالاقىلىشىڭ" + +#, fuzzy +#~ msgid "Library Functions" +#~ msgstr "BTL فۇنكسىيىلىرى" + +#, fuzzy +#~ msgid "Education Applications" +#~ msgstr "KDE قوللىنىشچان پروگراممىلىرى" + +#, fuzzy +#~ msgid "<b>Accessibility</b>" +#~ msgstr "ياردەم ئىقتىدارى" + +#, fuzzy +#~ msgid "<b>_Bookmarks:</b>" +#~ msgstr "خەتكۈش(_B):" + +#, fuzzy +#~ msgid "Find" +#~ msgstr "ئىزدە(_D):" + +#, fuzzy +#~ msgid "_Find: " +#~ msgstr "ئىزدە(_D):" + +#, fuzzy +#~ msgid "_Next" +#~ msgstr "كېيىنكىسىنى ئىزدە(_N)" + +#, fuzzy +#~ msgid "_Previous" +#~ msgstr "ئالدىنقىنى ئىزدە(_P)" + +#, fuzzy +#~ msgid "Could not load document" +#~ msgstr "ھۆججەت ئوقۇيالمىدى" + +#, fuzzy +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is formatted incorrectly." +#~ msgstr "‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكى ئۇچۇر بېتى فورماتقا ماس كەلمەيدۇ." + +#, fuzzy +#~ msgid "Could not load the OMF file '%s'." +#~ msgstr "ھۆججەتنى يېشەلمىدى" + +#, fuzzy +#~ msgid "" +#~ "The table of contents could not be loaded. The file ‘%s’ is either " +#~ "missing or is not well-formed XML." +#~ msgstr "XSLT ئۇسلۇب جەدۋىلى ‘%s’ يوقالغان ياكى ئىناۋەتسىز." + +#, fuzzy +#~ msgid "" +#~ "The table of contents could not be processed. The file ‘%s’ is either " +#~ "missing or is not a valid XSLT stylesheet." +#~ msgstr "XSLT ئۇسلۇب جەدۋىلى ‘%s’ يوقالغان ياكى ئىناۋەتسىز." + +#, fuzzy +#~ msgid "Help Contents" +#~ msgstr "مەزمۇن(_C)" + +#, fuzzy +#~ msgid "GNU info pages are not supported in this version" +#~ msgstr "بۇ پرىنتېردا بېسىشنى قوللىمايدۇ" + +#, fuzzy +#~ msgid "" +#~ "The file ‘%s’ could not be parsed. Either the file does not exist, or it " +#~ "is improperly formatted." +#~ msgstr "‘%s’ ھۆججەتنى يېشەلمىدى، چۈنكىman بەت فورماتىغا ماس كەلمەيدۇ." + +#~ msgid "Can't find the answer?" +#~ msgstr "جاۋاب تېپىلمىدىمۇ؟" + +#~ msgid "Canonical, its partners and approved companies provide" +#~ msgstr "" +#~ "Canonical، ئۇنىڭ ھەمكارلاشقان شېرىكى ۋە ئىجازەت بېرىلگەن شىركىتى " +#~ "تەمىنلىگەن" + +#~ msgid "Common Questions" +#~ msgstr "ئادەتتىكى سوئاللار" + +#~ msgid "Connecting to the internet" +#~ msgstr "ئىنتېرنېتقا ئۇلىنىۋاتىدۇ" + +#~ msgid "Enabling visual effects" +#~ msgstr "Enabling visual effects" + +#~ msgid "General Guides" +#~ msgstr "ئادەتتىكى كۆرسەتمىلەر" + +#~ msgid "How to Contribute" +#~ msgstr "قانداق ھەسسە قوشىدۇ" + +#~ msgid "Importing photos" +#~ msgstr "رەسىم ئەكىر" + +#~ msgid "Keeping your computer updated" +#~ msgstr "كومپيۇتېر سىستېمىڭىزنى يېڭىلاپ تۇرۇڭ" + +#~ msgid "Playing music" +#~ msgstr "مۇزىكا چال" + +#~ msgid "The Ubuntu community provides extensive" +#~ msgstr "Ubuntu ئىجتىمائىي رايونى كېڭەيتىلمە تەمىنلىگەن" + +#~ msgid "" +#~ "These guides used to be on the front page. Put here for safe keeping in " +#~ "their own new section." +#~ msgstr "" +#~ "بۇ يېتەكچى باشلاش بېتى قىلىپ ئىشلىتىلىدۇ. ئۇلار ئۆزىنىڭ يېڭى بۆلىكىدە " +#~ "بىخەتەرلىكنى ساقلايدۇ." + +#~ msgid "To find help, insert a keyword in the search bar" +#~ msgstr "ياردەم ئىزدىسىڭىز، ئىزدەش ئىستونىغا ھالقىلىق سۆز كىرگۈزۈڭ" + +#~ msgid "Topics" +#~ msgstr "تېما" + +#~ msgid "Ubuntu Help Center" +#~ msgstr "Ubuntu ياردەم مەركىزى" + +#~ msgid "Ubuntu has an open and vibrant community of contributors. Find out" +#~ msgstr "" +#~ "Ubuntu ئوچۇق ۋە ھاياتىي كۈچكە تولغان تۆھپىكارلار ئىجتىمائىي رايونى بار. " +#~ "چۈشىنىڭ" + +#~ msgid "Welcome to the Ubuntu Help Center" +#~ msgstr "Ubuntu ياردەم مەركىزىگە خۇش كەپسىز" + +#~ msgid "commercial technical support" +#~ msgstr "تاۋارلاشقان تېخنىكىلىق قوللاش" + +#~ msgid "free support" +#~ msgstr "ھەقسىز قوللاش" + +#~ msgid "how to contribute" +#~ msgstr "قانداق تۆھپە قوشىدۇ" + +#~ msgid "http://www.ubuntu.com/community/participate" +#~ msgstr "http://www.ubuntu.com/community/participate" + +#~ msgid "http://www.ubuntu.com/support/free" +#~ msgstr "http://www.ubuntu.com/support/free" + +#~ msgid "http://www.ubuntu.com/support/paid" +#~ msgstr "http://www.ubuntu.com/support/paid" + +#~ msgid "the Ubuntu Help Pages" +#~ msgstr "Ubuntu ياردەم بېتى" diff --git a/src/Makefile.am b/src/Makefile.am index d2f4625c..fa4cdd90 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,22 +5,10 @@ yelp_SOURCES = \ yelp-window.c yelp-window.h \ yelp.c -# yelp-base.c yelp-base.h \ -# yelp-bookmarks.c yelp-bookmarks.h \ -# yelp-error.c yelp-error.h \ -# yelp-html.c yelp-html.h \ -# yelp-io-channel.c yelp-io-channel.h \ -# yelp-utils.c yelp-utils.h \ -# yelp-window.c yelp-window.h \ -# yelp-marshal.c yelp-marshal.h \ # yelp-toc.h yelp-toc.c \ # yelp-db-print.c yelp-db-print.h \ -# yelp-mallard.h yelp-mallard.c \ # yelp-man-parser.c yelp-man-parser.h \ # yelp-man.c yelp-man.h \ -# yelp-info.c yelp-info.h \ -# yelp-info-parser.c yelp-info-parser.h \ -# gtkentryaction.c gtkentryaction.h \ # yelp-search.c yelp-search.h \ # yelp-search-parser.c yelp-search-parser.h @@ -40,87 +28,28 @@ YELP_DEFINES = \ yelp_CFLAGS = \ -I$(top_srcdir)/libyelp \ $(YELP_CFLAGS) \ - $(YELP_SEARCH_CFLAGS) \ $(AM_CFLAGS) \ $(YELP_DEFINES) yelp_LDADD = \ $(top_builddir)/libyelp/libyelp.la \ $(YELP_LIBS) \ - $(YELP_SEARCH_LIBS) \ $(POPT_LIBS) \ - $(Z_LIBS) \ - $(BZ_LIBS) \ - $(LZMADEC_LIBS) \ $(X_LIBS) yelp_LDFLAGS = $(AM_LDFLAGS) -if WITH_SMCLIENT -yelp_SOURCES += \ - eggdesktopfile.c \ - eggdesktopfile.h \ - eggsmclient.c \ - eggsmclient.h \ - eggsmclient-private.h \ - $(NULL) -yelp_CFLAGS += $(SMCLIENT_CFLAGS) -yelp_LDADD += $(SMCLIENT_LIBS) -if WITH_SMCLIENT_XSMP -yelp_SOURCES += eggsmclient-xsmp.c -yelp_CFLAGS += -DEGG_SM_CLIENT_BACKEND_XSMP -endif -if WITH_SMCLIENT_WIN32 -yelp_SOURCES += eggsmclient-win32.c -endif -if WITH_SMCLIENT_QUARTZ -yelp_SOURCES += eggsmclient-osx.c -endif -endif - -BUILT_SOURCES = \ - yelp-dbus.h \ - yelp-marshal.h \ - stamp-yelp-marshal.h \ - yelp-marshal.c \ - server-bindings.h \ - client-bindings.h +BUILT_SOURCES = yelp-dbus.h noinst_HEADERS = $(BUILT_SOURCES) yelp-dbus.h: yelp-dbus.xml dbus-binding-tool --prefix=yelp --mode=glib-server $<> $@ -server-bindings.h: yelp-infos.xml - dbus-binding-tool --prefix=server_object --mode=glib-server $< > $@ - -client-bindings.h: yelp-infos.xml - dbus-binding-tool --prefix=server_object --mode=glib-client $< > $@ - -yelp-marshal.h: stamp-yelp-marshal.h - @true - -stamp-yelp-marshal.h: yelp-marshal.list - @GLIB_GENMARSHAL@ --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --header > xgen-ymh \ - && (cmp -s xgen-ymh yelp-marshal.h || cp xgen-ymh yelp-marshal.h) \ - && rm -f xgen-ymh xgen-ymh~ \ - && echo timestamp > $(@F) - -yelp-marshal.c: yelp-marshal.list - @GLIB_GENMARSHAL@ --prefix=yelp_marshal $(srcdir)/yelp-marshal.list --body > xgen-ymc \ - && cp xgen-ymc yelp-marshal.c \ - && rm -f xgen-ymc xgen-ymc~ - -yelp-marshal-main.c: yelp-marshal.c - -CLEANFILES = xgen-ymh xgen-ymc - MAINTAINERCLEANFILES = $(BUILT_SOURCES) -EXTRA_DIST = yelp-marshal.list yelp-infos.xml yelp-print.c yelp-print.h - - +EXTRA_DIST = yelp-dbus.xml install-exec-hook: rm -f $(DESTDIR)$(bindir)/gnome-help && \ diff --git a/src/eggdesktopfile.c b/src/eggdesktopfile.c deleted file mode 100644 index 357e548f..00000000 --- a/src/eggdesktopfile.c +++ /dev/null @@ -1,1477 +0,0 @@ -/* eggdesktopfile.c - Freedesktop.Org Desktop Files - * Copyright (C) 2007 Novell, Inc. - * - * Based on gnome-desktop-item.c - * Copyright (C) 1999, 2000 Red Hat Inc. - * Copyright (C) 2001 George Lebl - * - * 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; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - - * Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "eggdesktopfile.h" - -#include <string.h> -#include <unistd.h> - -#include <glib/gi18n.h> -#include <gdk/gdkx.h> -#include <gtk/gtk.h> - -struct EggDesktopFile { - GKeyFile *key_file; - char *source; - - char *name, *icon; - EggDesktopFileType type; - char document_code; -}; - -/** - * egg_desktop_file_new: - * @desktop_file_path: path to a Freedesktop-style Desktop file - * @error: error pointer - * - * Creates a new #EggDesktopFile for @desktop_file. - * - * Return value: the new #EggDesktopFile, or %NULL on error. - **/ -EggDesktopFile * -egg_desktop_file_new (const char *desktop_file_path, GError **error) -{ - GKeyFile *key_file; - - key_file = g_key_file_new (); - if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error)) - { - g_key_file_free (key_file); - return NULL; - } - - return egg_desktop_file_new_from_key_file (key_file, desktop_file_path, - error); -} - -/** - * egg_desktop_file_new_from_data_dirs: - * @desktop_file_path: relative path to a Freedesktop-style Desktop file - * @error: error pointer - * - * Looks for @desktop_file_path in the paths returned from - * g_get_user_data_dir() and g_get_system_data_dirs(), and creates - * a new #EggDesktopFile from it. - * - * Return value: the new #EggDesktopFile, or %NULL on error. - **/ -EggDesktopFile * -egg_desktop_file_new_from_data_dirs (const char *desktop_file_path, - GError **error) -{ - EggDesktopFile *desktop_file; - GKeyFile *key_file; - char *full_path; - - key_file = g_key_file_new (); - if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path, - &full_path, 0, error)) - { - g_key_file_free (key_file); - return NULL; - } - - desktop_file = egg_desktop_file_new_from_key_file (key_file, - full_path, - error); - g_free (full_path); - return desktop_file; -} - -/** - * egg_desktop_file_new_from_dirs: - * @desktop_file_path: relative path to a Freedesktop-style Desktop file - * @search_dirs: NULL-terminated array of directories to search - * @error: error pointer - * - * Looks for @desktop_file_path in the paths returned from - * g_get_user_data_dir() and g_get_system_data_dirs(), and creates - * a new #EggDesktopFile from it. - * - * Return value: the new #EggDesktopFile, or %NULL on error. - **/ -EggDesktopFile * -egg_desktop_file_new_from_dirs (const char *desktop_file_path, - const char **search_dirs, - GError **error) -{ - EggDesktopFile *desktop_file; - GKeyFile *key_file; - char *full_path; - - key_file = g_key_file_new (); - if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs, - &full_path, 0, error)) - { - g_key_file_free (key_file); - return NULL; - } - - desktop_file = egg_desktop_file_new_from_key_file (key_file, - full_path, - error); - g_free (full_path); - return desktop_file; -} - -/** - * egg_desktop_file_new_from_key_file: - * @key_file: a #GKeyFile representing a desktop file - * @source: the path or URI that @key_file was loaded from, or %NULL - * @error: error pointer - * - * Creates a new #EggDesktopFile for @key_file. Assumes ownership of - * @key_file (on success or failure); you should consider @key_file to - * be freed after calling this function. - * - * Return value: the new #EggDesktopFile, or %NULL on error. - **/ -EggDesktopFile * -egg_desktop_file_new_from_key_file (GKeyFile *key_file, - const char *source, - GError **error) -{ - EggDesktopFile *desktop_file; - char *version, *type; - - if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP)) - { - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_INVALID, - _("File is not a valid .desktop file")); - g_key_file_free (key_file); - return NULL; - } - - version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_VERSION, - NULL); - if (version) - { - double version_num; - char *end; - - version_num = g_ascii_strtod (version, &end); - if (*end) - { - g_warning ("Invalid Version string '%s' in %s", - version, source ? source : "(unknown)"); - } - else if (version_num > 1.0) - { - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_INVALID, - _("Unrecognized desktop file Version '%s'"), version); - g_free (version); - g_key_file_free (key_file); - return NULL; - } - g_free (version); - } - - desktop_file = g_new0 (EggDesktopFile, 1); - desktop_file->key_file = key_file; - - if (g_path_is_absolute (source)) - desktop_file->source = g_filename_to_uri (source, NULL, NULL); - else - desktop_file->source = g_strdup (source); - - desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_NAME, error); - if (!desktop_file->name) - { - egg_desktop_file_free (desktop_file); - return NULL; - } - - type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_TYPE, error); - if (!type) - { - egg_desktop_file_free (desktop_file); - return NULL; - } - - if (!strcmp (type, "Application")) - { - char *exec, *p; - - desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION; - - exec = g_key_file_get_string (key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_EXEC, - error); - if (!exec) - { - egg_desktop_file_free (desktop_file); - g_free (type); - return NULL; - } - - /* See if it takes paths or URIs or neither */ - for (p = exec; *p; p++) - { - if (*p == '%') - { - if (p[1] == '\0' || strchr ("FfUu", p[1])) - { - desktop_file->document_code = p[1]; - break; - } - p++; - } - } - - g_free (exec); - } - else if (!strcmp (type, "Link")) - { - char *url; - - desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK; - - url = g_key_file_get_string (key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_URL, - error); - if (!url) - { - egg_desktop_file_free (desktop_file); - g_free (type); - return NULL; - } - g_free (url); - } - else if (!strcmp (type, "Directory")) - desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY; - else - desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED; - - g_free (type); - - /* Check the Icon key */ - desktop_file->icon = g_key_file_get_string (key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_ICON, - NULL); - if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon)) - { - char *ext; - - /* Lots of .desktop files still get this wrong */ - ext = strrchr (desktop_file->icon, '.'); - if (ext && (!strcmp (ext, ".png") || - !strcmp (ext, ".xpm") || - !strcmp (ext, ".svg"))) - { - g_warning ("Desktop file '%s' has malformed Icon key '%s'" - "(should not include extension)", - source ? source : "(unknown)", - desktop_file->icon); - *ext = '\0'; - } - } - - return desktop_file; -} - -/** - * egg_desktop_file_free: - * @desktop_file: an #EggDesktopFile - * - * Frees @desktop_file. - **/ -void -egg_desktop_file_free (EggDesktopFile *desktop_file) -{ - g_key_file_free (desktop_file->key_file); - g_free (desktop_file->source); - g_free (desktop_file->name); - g_free (desktop_file->icon); - g_free (desktop_file); -} - -/** - * egg_desktop_file_get_source: - * @desktop_file: an #EggDesktopFile - * - * Gets the URI that @desktop_file was loaded from. - * - * Return value: @desktop_file's source URI - **/ -const char * -egg_desktop_file_get_source (EggDesktopFile *desktop_file) -{ - return desktop_file->source; -} - -/** - * egg_desktop_file_get_desktop_file_type: - * @desktop_file: an #EggDesktopFile - * - * Gets the desktop file type of @desktop_file. - * - * Return value: @desktop_file's type - **/ -EggDesktopFileType -egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file) -{ - return desktop_file->type; -} - -/** - * egg_desktop_file_get_name: - * @desktop_file: an #EggDesktopFile - * - * Gets the (localized) value of @desktop_file's "Name" key. - * - * Return value: the application/link name - **/ -const char * -egg_desktop_file_get_name (EggDesktopFile *desktop_file) -{ - return desktop_file->name; -} - -/** - * egg_desktop_file_get_icon: - * @desktop_file: an #EggDesktopFile - * - * Gets the value of @desktop_file's "Icon" key. - * - * If the icon string is a full path (that is, if g_path_is_absolute() - * returns %TRUE when called on it), it points to a file containing an - * unthemed icon. If the icon string is not a full path, it is the - * name of a themed icon, which can be looked up with %GtkIconTheme, - * or passed directly to a theme-aware widget like %GtkImage or - * %GtkCellRendererPixbuf. - * - * Return value: the icon path or name - **/ -const char * -egg_desktop_file_get_icon (EggDesktopFile *desktop_file) -{ - return desktop_file->icon; -} - -gboolean -egg_desktop_file_has_key (EggDesktopFile *desktop_file, - const char *key, - GError **error) -{ - return g_key_file_has_key (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, - error); -} - -char * -egg_desktop_file_get_string (EggDesktopFile *desktop_file, - const char *key, - GError **error) -{ - return g_key_file_get_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, - error); -} - -char * -egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file, - const char *key, - const char *locale, - GError **error) -{ - return g_key_file_get_locale_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, locale, - error); -} - -gboolean -egg_desktop_file_get_boolean (EggDesktopFile *desktop_file, - const char *key, - GError **error) -{ - return g_key_file_get_boolean (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, - error); -} - -double -egg_desktop_file_get_numeric (EggDesktopFile *desktop_file, - const char *key, - GError **error) -{ - return g_key_file_get_double (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, - error); -} - -char ** -egg_desktop_file_get_string_list (EggDesktopFile *desktop_file, - const char *key, - gsize *length, - GError **error) -{ - return g_key_file_get_string_list (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, length, - error); -} - -char ** -egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file, - const char *key, - const char *locale, - gsize *length, - GError **error) -{ - return g_key_file_get_locale_string_list (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, key, - locale, length, - error); -} - -/** - * egg_desktop_file_can_launch: - * @desktop_file: an #EggDesktopFile - * @desktop_environment: the name of the running desktop environment, - * or %NULL - * - * Tests if @desktop_file can/should be launched in the current - * environment. If @desktop_environment is non-%NULL, @desktop_file's - * "OnlyShowIn" and "NotShowIn" keys are checked to make sure that - * this desktop_file is appropriate for the named environment. - * - * Furthermore, if @desktop_file has type - * %EGG_DESKTOP_FILE_TYPE_APPLICATION, its "TryExec" key (if any) is - * also checked, to make sure the binary it points to exists. - * - * egg_desktop_file_can_launch() does NOT check the value of the - * "Hidden" key. - * - * Return value: %TRUE if @desktop_file can be launched - **/ -gboolean -egg_desktop_file_can_launch (EggDesktopFile *desktop_file, - const char *desktop_environment) -{ - char *try_exec, *found_program; - char **only_show_in, **not_show_in; - gboolean found; - int i; - - if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION && - desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK) - return FALSE; - - if (desktop_environment) - { - only_show_in = g_key_file_get_string_list (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN, - NULL, NULL); - if (only_show_in) - { - for (i = 0, found = FALSE; only_show_in[i] && !found; i++) - { - if (!strcmp (only_show_in[i], desktop_environment)) - found = TRUE; - } - - g_strfreev (only_show_in); - - if (!found) - return FALSE; - } - - not_show_in = g_key_file_get_string_list (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN, - NULL, NULL); - if (not_show_in) - { - for (i = 0, found = FALSE; not_show_in[i] && !found; i++) - { - if (!strcmp (not_show_in[i], desktop_environment)) - found = TRUE; - } - - g_strfreev (not_show_in); - - if (found) - return FALSE; - } - } - - if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION) - { - try_exec = g_key_file_get_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_TRY_EXEC, - NULL); - if (try_exec) - { - found_program = g_find_program_in_path (try_exec); - g_free (try_exec); - - if (!found_program) - return FALSE; - g_free (found_program); - } - } - - return TRUE; -} - -/** - * egg_desktop_file_accepts_documents: - * @desktop_file: an #EggDesktopFile - * - * Tests if @desktop_file represents an application that can accept - * documents on the command line. - * - * Return value: %TRUE or %FALSE - **/ -gboolean -egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file) -{ - return desktop_file->document_code != 0; -} - -/** - * egg_desktop_file_accepts_multiple: - * @desktop_file: an #EggDesktopFile - * - * Tests if @desktop_file can accept multiple documents at once. - * - * If this returns %FALSE, you can still pass multiple documents to - * egg_desktop_file_launch(), but that will result in multiple copies - * of the application being launched. See egg_desktop_file_launch() - * for more details. - * - * Return value: %TRUE or %FALSE - **/ -gboolean -egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file) -{ - return (desktop_file->document_code == 'F' || - desktop_file->document_code == 'U'); -} - -/** - * egg_desktop_file_accepts_uris: - * @desktop_file: an #EggDesktopFile - * - * Tests if @desktop_file can accept (non-"file:") URIs as documents to - * open. - * - * Return value: %TRUE or %FALSE - **/ -gboolean -egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file) -{ - return (desktop_file->document_code == 'U' || - desktop_file->document_code == 'u'); -} - -static void -append_quoted_word (GString *str, - const char *s, - gboolean in_single_quotes, - gboolean in_double_quotes) -{ - const char *p; - - if (!in_single_quotes && !in_double_quotes) - g_string_append_c (str, '\''); - else if (!in_single_quotes && in_double_quotes) - g_string_append (str, "\"'"); - - if (!strchr (s, '\'')) - g_string_append (str, s); - else - { - for (p = s; *p != '\0'; p++) - { - if (*p == '\'') - g_string_append (str, "'\\''"); - else - g_string_append_c (str, *p); - } - } - - if (!in_single_quotes && !in_double_quotes) - g_string_append_c (str, '\''); - else if (!in_single_quotes && in_double_quotes) - g_string_append (str, "'\""); -} - -static void -do_percent_subst (EggDesktopFile *desktop_file, - char code, - GString *str, - GSList **documents, - gboolean in_single_quotes, - gboolean in_double_quotes) -{ - GSList *d; - char *doc; - - switch (code) - { - case '%': - g_string_append_c (str, '%'); - break; - - case 'F': - case 'U': - for (d = *documents; d; d = d->next) - { - doc = d->data; - g_string_append (str, " "); - append_quoted_word (str, doc, in_single_quotes, in_double_quotes); - } - *documents = NULL; - break; - - case 'f': - case 'u': - if (*documents) - { - doc = (*documents)->data; - g_string_append (str, " "); - append_quoted_word (str, doc, in_single_quotes, in_double_quotes); - *documents = (*documents)->next; - } - break; - - case 'i': - if (desktop_file->icon) - { - g_string_append (str, "--icon "); - append_quoted_word (str, desktop_file->icon, - in_single_quotes, in_double_quotes); - } - break; - - case 'c': - if (desktop_file->name) - { - append_quoted_word (str, desktop_file->name, - in_single_quotes, in_double_quotes); - } - break; - - case 'k': - if (desktop_file->source) - { - append_quoted_word (str, desktop_file->source, - in_single_quotes, in_double_quotes); - } - break; - - case 'D': - case 'N': - case 'd': - case 'n': - case 'v': - case 'm': - /* Deprecated; skip */ - break; - - default: - g_warning ("Unrecognized %%-code '%%%c' in Exec", code); - break; - } -} - -static char * -parse_exec (EggDesktopFile *desktop_file, - GSList **documents, - GError **error) -{ - char *exec, *p, *command; - gboolean escape, single_quot, double_quot; - GString *gs; - - exec = g_key_file_get_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_EXEC, - error); - if (!exec) - return NULL; - - /* Build the command */ - gs = g_string_new (NULL); - escape = single_quot = double_quot = FALSE; - - for (p = exec; *p != '\0'; p++) - { - if (escape) - { - escape = FALSE; - g_string_append_c (gs, *p); - } - else if (*p == '\\') - { - if (!single_quot) - escape = TRUE; - g_string_append_c (gs, *p); - } - else if (*p == '\'') - { - g_string_append_c (gs, *p); - if (!single_quot && !double_quot) - single_quot = TRUE; - else if (single_quot) - single_quot = FALSE; - } - else if (*p == '"') - { - g_string_append_c (gs, *p); - if (!single_quot && !double_quot) - double_quot = TRUE; - else if (double_quot) - double_quot = FALSE; - } - else if (*p == '%' && p[1]) - { - do_percent_subst (desktop_file, p[1], gs, documents, - single_quot, double_quot); - p++; - } - else - g_string_append_c (gs, *p); - } - - g_free (exec); - command = g_string_free (gs, FALSE); - - /* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */ - if (g_key_file_has_key (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_TERMINAL, - NULL)) - { - GError *terminal_error = NULL; - gboolean use_terminal = - g_key_file_get_boolean (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_TERMINAL, - &terminal_error); - if (terminal_error) - { - g_free (command); - g_propagate_error (error, terminal_error); - return NULL; - } - - if (use_terminal) - { - gs = g_string_new ("xdg-terminal "); - append_quoted_word (gs, command, FALSE, FALSE); - g_free (command); - command = g_string_free (gs, FALSE); - } - } - - return command; -} - -static GSList * -translate_document_list (EggDesktopFile *desktop_file, GSList *documents) -{ - gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file); - GSList *ret, *d; - - for (d = documents, ret = NULL; d; d = d->next) - { - const char *document = d->data; - gboolean is_uri = !g_path_is_absolute (document); - char *translated; - - if (accepts_uris) - { - if (is_uri) - translated = g_strdup (document); - else - translated = g_filename_to_uri (document, NULL, NULL); - } - else - { - if (is_uri) - translated = g_filename_from_uri (document, NULL, NULL); - else - translated = g_strdup (document); - } - - if (translated) - ret = g_slist_prepend (ret, translated); - } - - return g_slist_reverse (ret); -} - -static void -free_document_list (GSList *documents) -{ - GSList *d; - - for (d = documents; d; d = d->next) - g_free (d->data); - g_slist_free (documents); -} - -/** - * egg_desktop_file_parse_exec: - * @desktop_file: a #EggDesktopFile - * @documents: a list of document paths or URIs - * @error: error pointer - * - * Parses @desktop_file's Exec key, inserting @documents into it, and - * returns the result. - * - * If @documents contains non-file: URIs and @desktop_file does not - * accept URIs, those URIs will be ignored. Likewise, if @documents - * contains more elements than @desktop_file accepts, the extra - * documents will be ignored. - * - * Return value: the parsed Exec string - **/ -char * -egg_desktop_file_parse_exec (EggDesktopFile *desktop_file, - GSList *documents, - GError **error) -{ - GSList *translated, *docs; - char *command; - - docs = translated = translate_document_list (desktop_file, documents); - command = parse_exec (desktop_file, &docs, error); - free_document_list (translated); - - return command; -} - -static gboolean -parse_link (EggDesktopFile *desktop_file, - EggDesktopFile **app_desktop_file, - GSList **documents, - GError **error) -{ - char *url; - GKeyFile *key_file; - - url = g_key_file_get_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_URL, - error); - if (!url) - return FALSE; - *documents = g_slist_prepend (NULL, url); - - /* FIXME: use gvfs */ - key_file = g_key_file_new (); - g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_NAME, - "xdg-open"); - g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_TYPE, - "Application"); - g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_EXEC, - "xdg-open %u"); - *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL); - return TRUE; -} - -#if GTK_CHECK_VERSION (2, 12, 0) -static char * -start_startup_notification (GdkDisplay *display, - EggDesktopFile *desktop_file, - const char *argv0, - int screen, - int workspace, - guint32 launch_time) -{ - static int sequence = 0; - char *startup_id; - char *description, *wmclass; - char *screen_str, *workspace_str; - - if (g_key_file_has_key (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, - NULL)) - { - if (!g_key_file_get_boolean (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY, - NULL)) - return NULL; - wmclass = NULL; - } - else - { - wmclass = g_key_file_get_string (desktop_file->key_file, - EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS, - NULL); - if (!wmclass) - return NULL; - } - - if (launch_time == (guint32)-1) - launch_time = gdk_x11_display_get_user_time (display); - startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu", - g_get_prgname (), - (unsigned long)getpid (), - g_get_host_name (), - argv0, - sequence++, - (unsigned long)launch_time); - - description = g_strdup_printf (_("Starting %s"), desktop_file->name); - screen_str = g_strdup_printf ("%d", screen); - workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace); - - gdk_x11_display_broadcast_startup_message (display, "new", - "ID", startup_id, - "NAME", desktop_file->name, - "SCREEN", screen_str, - "BIN", argv0, - "ICON", desktop_file->icon, - "DESKTOP", workspace_str, - "DESCRIPTION", description, - "WMCLASS", wmclass, - NULL); - - g_free (description); - g_free (wmclass); - g_free (screen_str); - g_free (workspace_str); - - return startup_id; -} - -static void -end_startup_notification (GdkDisplay *display, - const char *startup_id) -{ - gdk_x11_display_broadcast_startup_message (display, "remove", - "ID", startup_id, - NULL); -} - -#define EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH (30 /* seconds */) - -typedef struct { - GdkDisplay *display; - char *startup_id; -} StartupNotificationData; - -static gboolean -startup_notification_timeout (gpointer data) -{ - StartupNotificationData *sn_data = data; - - end_startup_notification (sn_data->display, sn_data->startup_id); - g_object_unref (sn_data->display); - g_free (sn_data->startup_id); - g_free (sn_data); - - return FALSE; -} - -static void -set_startup_notification_timeout (GdkDisplay *display, - const char *startup_id) -{ - StartupNotificationData *sn_data; - - sn_data = g_new (StartupNotificationData, 1); - sn_data->display = g_object_ref (display); - sn_data->startup_id = g_strdup (startup_id); - - g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH, - startup_notification_timeout, sn_data); -} -#endif /* GTK 2.12 */ - -static GPtrArray * -array_putenv (GPtrArray *env, char *variable) -{ - guint i, keylen; - - if (!env) - { - char **envp; - - env = g_ptr_array_new (); - - envp = g_listenv (); - for (i = 0; envp[i]; i++) - { - const char *value; - - value = g_getenv (envp[i]); - g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i], - value ? value : "")); - } - g_strfreev (envp); - } - - keylen = strcspn (variable, "="); - - /* Remove old value of key */ - for (i = 0; i < env->len; i++) - { - char *envvar = env->pdata[i]; - - if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=') - { - g_free (envvar); - g_ptr_array_remove_index_fast (env, i); - break; - } - } - - /* Add new value */ - g_ptr_array_add (env, g_strdup (variable)); - - return env; -} - -static gboolean -egg_desktop_file_launchv (EggDesktopFile *desktop_file, - GSList *documents, va_list args, - GError **error) -{ - EggDesktopFileLaunchOption option; - GSList *translated_documents = NULL, *docs = NULL; - char *command, **argv; - int argc, i, screen_num; - gboolean success, current_success; - GdkDisplay *display; - char *startup_id; - - GPtrArray *env = NULL; - char **variables = NULL; - GdkScreen *screen = NULL; - int workspace = -1; - const char *directory = NULL; - guint32 launch_time = (guint32)-1; - GSpawnFlags flags = G_SPAWN_SEARCH_PATH; - GSpawnChildSetupFunc setup_func = NULL; - gpointer setup_data = NULL; - - GPid *ret_pid = NULL; - int *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL; - char **ret_startup_id = NULL; - - if (documents && desktop_file->document_code == 0) - { - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, - _("Application does not accept documents on command line")); - return FALSE; - } - - /* Read the options: technically it's incorrect for the caller to - * NULL-terminate the list of options (rather than 0-terminating - * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED, - * it's more consistent with other glib/gtk methods, and it will - * work as long as sizeof (int) <= sizeof (NULL), and NULL is - * represented as 0. (Which is true everywhere we care about.) - */ - while ((option = va_arg (args, EggDesktopFileLaunchOption))) - { - switch (option) - { - case EGG_DESKTOP_FILE_LAUNCH_CLEARENV: - if (env) - g_ptr_array_free (env, TRUE); - env = g_ptr_array_new (); - break; - case EGG_DESKTOP_FILE_LAUNCH_PUTENV: - variables = va_arg (args, char **); - for (i = 0; variables[i]; i++) - env = array_putenv (env, variables[i]); - break; - - case EGG_DESKTOP_FILE_LAUNCH_SCREEN: - screen = va_arg (args, GdkScreen *); - break; - case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: - workspace = va_arg (args, int); - break; - - case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: - directory = va_arg (args, const char *); - break; - case EGG_DESKTOP_FILE_LAUNCH_TIME: - launch_time = va_arg (args, guint32); - break; - case EGG_DESKTOP_FILE_LAUNCH_FLAGS: - flags |= va_arg (args, GSpawnFlags); - /* Make sure they didn't set any flags that don't make sense. */ - flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO; - break; - case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC: - setup_func = va_arg (args, GSpawnChildSetupFunc); - setup_data = va_arg (args, gpointer); - break; - - case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID: - ret_pid = va_arg (args, GPid *); - break; - case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE: - ret_stdin = va_arg (args, int *); - break; - case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE: - ret_stdout = va_arg (args, int *); - break; - case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE: - ret_stderr = va_arg (args, int *); - break; - case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID: - ret_startup_id = va_arg (args, char **); - break; - - default: - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION, - _("Unrecognized launch option: %d"), - GPOINTER_TO_INT (option)); - success = FALSE; - goto out; - } - } - - if (screen) - { - char *display_name = gdk_screen_make_display_name (screen); - char *display_env = g_strdup_printf ("DISPLAY=%s", display_name); - env = array_putenv (env, display_env); - g_free (display_name); - g_free (display_env); - - display = gdk_screen_get_display (screen); - } - else - { - display = gdk_display_get_default (); - screen = gdk_display_get_default_screen (display); - } - screen_num = gdk_screen_get_number (screen); - - translated_documents = translate_document_list (desktop_file, documents); - docs = translated_documents; - - success = FALSE; - - do - { - command = parse_exec (desktop_file, &docs, error); - if (!command) - goto out; - - if (!g_shell_parse_argv (command, &argc, &argv, error)) - { - g_free (command); - goto out; - } - g_free (command); - -#if GTK_CHECK_VERSION (2, 12, 0) - startup_id = start_startup_notification (display, desktop_file, - argv[0], screen_num, - workspace, launch_time); - if (startup_id) - { - char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s", - startup_id); - env = array_putenv (env, startup_id_env); - g_free (startup_id_env); - } -#else - startup_id = NULL; -#endif /* GTK 2.12 */ - - if (env != NULL) - g_ptr_array_add (env, NULL); - - current_success = - g_spawn_async_with_pipes (directory, - argv, - env ? (char **)(env->pdata) : NULL, - flags, - setup_func, setup_data, - ret_pid, - ret_stdin, ret_stdout, ret_stderr, - error); - g_strfreev (argv); - - if (startup_id) - { -#if GTK_CHECK_VERSION (2, 12, 0) - if (current_success) - { - set_startup_notification_timeout (display, startup_id); - - if (ret_startup_id) - *ret_startup_id = startup_id; - else - g_free (startup_id); - } - else -#endif /* GTK 2.12 */ - g_free (startup_id); - } - else if (ret_startup_id) - *ret_startup_id = NULL; - - if (current_success) - { - /* If we successfully launch any instances of the app, make - * sure we return TRUE and don't set @error. - */ - success = TRUE; - error = NULL; - - /* Also, only set the output params on the first one */ - ret_pid = NULL; - ret_stdin = ret_stdout = ret_stderr = NULL; - ret_startup_id = NULL; - } - } - while (docs && current_success); - - out: - if (env) - { - g_strfreev ((char **)env->pdata); - g_ptr_array_free (env, FALSE); - } - free_document_list (translated_documents); - - return success; -} - -/** - * egg_desktop_file_launch: - * @desktop_file: an #EggDesktopFile - * @documents: a list of URIs or paths to documents to open - * @error: error pointer - * @...: additional options - * - * Launches @desktop_file with the given arguments. Additional options - * can be specified as follows: - * - * %EGG_DESKTOP_FILE_LAUNCH_CLEARENV: (no arguments) - * clears the environment in the child process - * %EGG_DESKTOP_FILE_LAUNCH_PUTENV: (char **variables) - * adds the NAME=VALUE strings in the given %NULL-terminated - * array to the child process's environment - * %EGG_DESKTOP_FILE_LAUNCH_SCREEN: (GdkScreen *screen) - * causes the application to be launched on the given screen - * %EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: (int workspace) - * causes the application to be launched on the given workspace - * %EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: (char *dir) - * causes the application to be launched in the given directory - * %EGG_DESKTOP_FILE_LAUNCH_TIME: (guint32 launch_time) - * sets the "launch time" for the application. If the user - * interacts with another window after @launch_time but before - * the launched application creates its first window, the window - * manager may choose to not give focus to the new application. - * Passing 0 for @launch_time will explicitly request that the - * application not receive focus. - * %EGG_DESKTOP_FILE_LAUNCH_FLAGS (GSpawnFlags flags) - * Sets additional #GSpawnFlags to use. See g_spawn_async() for - * more details. - * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC (GSpawnChildSetupFunc, gpointer) - * Sets the child setup callback and the data to pass to it. - * (See g_spawn_async() for more details.) - * - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID (GPid **pid) - * On a successful launch, sets *@pid to the PID of the launched - * application. - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID (char **startup_id) - * On a successful launch, sets *@startup_id to the Startup - * Notification "startup id" of the launched application. - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE (int *fd) - * On a successful launch, sets *@fd to the file descriptor of - * a pipe connected to the application's stdin. - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE (int *fd) - * On a successful launch, sets *@fd to the file descriptor of - * a pipe connected to the application's stdout. - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE (int *fd) - * On a successful launch, sets *@fd to the file descriptor of - * a pipe connected to the application's stderr. - * - * The options should be terminated with a single %NULL. - * - * If @documents contains multiple documents, but - * egg_desktop_file_accepts_multiple() returns %FALSE for - * @desktop_file, then egg_desktop_file_launch() will actually launch - * multiple instances of the application. In that case, the return - * value (as well as any values passed via - * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, etc) will only reflect the - * first instance of the application that was launched (but the - * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC will be called for each - * instance). - * - * Return value: %TRUE if the application was successfully launched. - **/ -gboolean -egg_desktop_file_launch (EggDesktopFile *desktop_file, - GSList *documents, GError **error, - ...) -{ - va_list args; - gboolean success; - EggDesktopFile *app_desktop_file; - - switch (desktop_file->type) - { - case EGG_DESKTOP_FILE_TYPE_APPLICATION: - va_start (args, error); - success = egg_desktop_file_launchv (desktop_file, documents, - args, error); - va_end (args); - break; - - case EGG_DESKTOP_FILE_TYPE_LINK: - if (documents) - { - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, - _("Can't pass document URIs to a 'Type=Link' desktop entry")); - return FALSE; - } - - if (!parse_link (desktop_file, &app_desktop_file, &documents, error)) - return FALSE; - - va_start (args, error); - success = egg_desktop_file_launchv (app_desktop_file, documents, - args, error); - va_end (args); - - egg_desktop_file_free (app_desktop_file); - free_document_list (documents); - break; - - default: - g_set_error (error, EGG_DESKTOP_FILE_ERROR, - EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE, - _("Not a launchable item")); - success = FALSE; - break; - } - - return success; -} - - -GQuark -egg_desktop_file_error_quark (void) -{ - return g_quark_from_static_string ("egg-desktop_file-error-quark"); -} - - -G_LOCK_DEFINE_STATIC (egg_desktop_file); -static EggDesktopFile *egg_desktop_file; - -/** - * egg_set_desktop_file: - * @desktop_file_path: path to the application's desktop file - * - * Creates an #EggDesktopFile for the application from the data at - * @desktop_file_path. This will also call g_set_application_name() - * with the localized application name from the desktop file, and - * gtk_window_set_default_icon_name() or - * gtk_window_set_default_icon_from_file() with the application's - * icon. Other code may use additional information from the desktop - * file. - * - * Note that for thread safety reasons, this function can only - * be called once. - **/ -void -egg_set_desktop_file (const char *desktop_file_path) -{ - GError *error = NULL; - - G_LOCK (egg_desktop_file); - if (egg_desktop_file) - egg_desktop_file_free (egg_desktop_file); - - egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error); - if (error) - { - g_warning ("Could not load desktop file '%s': %s", - desktop_file_path, error->message); - g_error_free (error); - } - - if (egg_desktop_file) { - /* Set localized application name and default window icon */ - if (egg_desktop_file->name) - g_set_application_name (egg_desktop_file->name); - if (egg_desktop_file->icon) - { - if (g_path_is_absolute (egg_desktop_file->icon)) - gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL); - else - gtk_window_set_default_icon_name (egg_desktop_file->icon); - } - } - - G_UNLOCK (egg_desktop_file); -} - -/** - * egg_get_desktop_file: - * - * Gets the application's #EggDesktopFile, as set by - * egg_set_desktop_file(). - * - * Return value: the #EggDesktopFile, or %NULL if it hasn't been set. - **/ -EggDesktopFile * -egg_get_desktop_file (void) -{ - EggDesktopFile *retval; - - G_LOCK (egg_desktop_file); - retval = egg_desktop_file; - G_UNLOCK (egg_desktop_file); - - return retval; -} diff --git a/src/eggsmclient-osx.c b/src/eggsmclient-osx.c deleted file mode 100644 index 6f3c4818..00000000 --- a/src/eggsmclient-osx.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright (C) 2007 Novell, Inc. - * Copyright (C) 2008 Red Hat, Inc. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* EggSMClientOSX - * - * For details on the OS X logout process, see: - * http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/BootProcess.html#//apple_ref/doc/uid/20002130-114618 - * - * EggSMClientOSX registers for the kAEQuitApplication AppleEvent; the - * handler we register (quit_requested()) will be invoked from inside - * the quartz event-handling code (specifically, from inside - * [NSApplication nextEventMatchingMask]) when an AppleEvent arrives. - * We use AESuspendTheCurrentEvent() and AEResumeTheCurrentEvent() to - * allow asynchronous / non-main-loop-reentering processing of the - * quit request. (These are part of the Carbon framework; it doesn't - * seem to be possible to handle AppleEvents asynchronously from - * Cocoa.) - */ - -#include "config.h" - -#include "eggsmclient-private.h" -#include <gdk/gdkquartz.h> -#include <Carbon/Carbon.h> -#include <CoreServices/CoreServices.h> - -#define EGG_TYPE_SM_CLIENT_OSX (egg_sm_client_osx_get_type ()) -#define EGG_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSX)) -#define EGG_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass)) -#define EGG_IS_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_OSX)) -#define EGG_IS_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_OSX)) -#define EGG_SM_CLIENT_OSX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass)) - -typedef struct _EggSMClientOSX EggSMClientOSX; -typedef struct _EggSMClientOSXClass EggSMClientOSXClass; - -struct _EggSMClientOSX { - EggSMClient parent; - - AppleEvent quit_event, quit_reply; - gboolean quit_requested, quitting; -}; - -struct _EggSMClientOSXClass -{ - EggSMClientClass parent_class; - -}; - -static void sm_client_osx_startup (EggSMClient *client, - const char *client_id); -static void sm_client_osx_will_quit (EggSMClient *client, - gboolean will_quit); -static gboolean sm_client_osx_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation); - -static pascal OSErr quit_requested (const AppleEvent *, AppleEvent *, long); - -G_DEFINE_TYPE (EggSMClientOSX, egg_sm_client_osx, EGG_TYPE_SM_CLIENT) - -static void -egg_sm_client_osx_init (EggSMClientOSX *osx) -{ - ; -} - -static void -egg_sm_client_osx_class_init (EggSMClientOSXClass *klass) -{ - EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); - - sm_client_class->startup = sm_client_osx_startup; - sm_client_class->will_quit = sm_client_osx_will_quit; - sm_client_class->end_session = sm_client_osx_end_session; -} - -EggSMClient * -egg_sm_client_osx_new (void) -{ - return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL); -} - -static void -sm_client_osx_startup (EggSMClient *client, - const char *client_id) -{ - AEInstallEventHandler (kCoreEventClass, kAEQuitApplication, - NewAEEventHandlerUPP (quit_requested), - (long)GPOINTER_TO_SIZE (client), false); -} - -static gboolean -idle_quit_requested (gpointer client) -{ - egg_sm_client_quit_requested (client); - return FALSE; -} - -static pascal OSErr -quit_requested (const AppleEvent *aevt, AppleEvent *reply, long refcon) -{ - EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon); - EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); - - g_return_val_if_fail (!osx->quit_requested, userCanceledErr); - - /* FIXME AEInteractWithUser? */ - - osx->quit_requested = TRUE; - AEDuplicateDesc (aevt, &osx->quit_event); - AEDuplicateDesc (reply, &osx->quit_reply); - AESuspendTheCurrentEvent (aevt); - - /* Don't emit the "quit_requested" signal immediately, since we're - * called from a weird point in the guts of gdkeventloop-quartz.c - */ - g_idle_add (idle_quit_requested, client); - return noErr; -} - -static pascal OSErr -quit_requested_resumed (const AppleEvent *aevt, AppleEvent *reply, long refcon) -{ - EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon); - - osx->quit_requested = FALSE; - return osx->quitting ? noErr : userCanceledErr; -} - -static gboolean -idle_will_quit (gpointer client) -{ - EggSMClientOSX *osx = (EggSMClientOSX *)client; - - /* Resume the event with a new handler that will return a value to - * the system. - */ - AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply, - NewAEEventHandlerUPP (quit_requested_resumed), - (long)GPOINTER_TO_SIZE (client)); - AEDisposeDesc (&osx->quit_event); - AEDisposeDesc (&osx->quit_reply); - - if (osx->quitting) - egg_sm_client_quit (client); - return FALSE; -} - -static void -sm_client_osx_will_quit (EggSMClient *client, - gboolean will_quit) -{ - EggSMClientOSX *osx = (EggSMClientOSX *)client; - - g_return_if_fail (osx->quit_requested); - - osx->quitting = will_quit; - - /* Finish in an idle handler since the caller might have called - * egg_sm_client_will_quit() from inside the "quit_requested" signal - * handler, but may not expect the "quit" signal to arrive during - * the _will_quit() call. - */ - g_idle_add (idle_will_quit, client); -} - -static gboolean -sm_client_osx_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation) -{ - static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess }; - AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL }; - AEAddressDesc target; - AEEventID id; - OSErr err; - - switch (style) - { - case EGG_SM_CLIENT_END_SESSION_DEFAULT: - case EGG_SM_CLIENT_LOGOUT: - id = request_confirmation ? kAELogOut : kAEReallyLogOut; - break; - case EGG_SM_CLIENT_REBOOT: - id = request_confirmation ? kAEShowRestartDialog : kAERestart; - break; - case EGG_SM_CLIENT_SHUTDOWN: - id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown; - break; - } - - err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn, - sizeof (loginwindow_psn), &target); - if (err != noErr) - { - g_warning ("Could not create descriptor for loginwindow: %d", err); - return FALSE; - } - - err = AECreateAppleEvent (kCoreEventClass, id, &target, - kAutoGenerateReturnID, kAnyTransactionID, - &event); - AEDisposeDesc (&target); - if (err != noErr) - { - g_warning ("Could not create logout AppleEvent: %d", err); - return FALSE; - } - - err = AESend (&event, &reply, kAENoReply, kAENormalPriority, - kAEDefaultTimeout, NULL, NULL); - AEDisposeDesc (&event); - if (err == noErr) - AEDisposeDesc (&reply); - - return err == noErr; -} diff --git a/src/eggsmclient-private.h b/src/eggsmclient-private.h deleted file mode 100644 index ccb10bfc..00000000 --- a/src/eggsmclient-private.h +++ /dev/null @@ -1,53 +0,0 @@ -/* eggsmclient-private.h - * Copyright (C) 2007 Novell, Inc. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __EGG_SM_CLIENT_PRIVATE_H__ -#define __EGG_SM_CLIENT_PRIVATE_H__ - -#include <gdkconfig.h> -#include "eggsmclient.h" - -G_BEGIN_DECLS - -GKeyFile *egg_sm_client_save_state (EggSMClient *client); -void egg_sm_client_quit_requested (EggSMClient *client); -void egg_sm_client_quit_cancelled (EggSMClient *client); -void egg_sm_client_quit (EggSMClient *client); - -#if defined (GDK_WINDOWING_X11) -# ifdef EGG_SM_CLIENT_BACKEND_XSMP -GType egg_sm_client_xsmp_get_type (void); -EggSMClient *egg_sm_client_xsmp_new (void); -# endif -# ifdef EGG_SM_CLIENT_BACKEND_DBUS -GType egg_sm_client_dbus_get_type (void); -EggSMClient *egg_sm_client_dbus_new (void); -# endif -#elif defined (GDK_WINDOWING_WIN32) -GType egg_sm_client_win32_get_type (void); -EggSMClient *egg_sm_client_win32_new (void); -#elif defined (GDK_WINDOWING_QUARTZ) -GType egg_sm_client_osx_get_type (void); -EggSMClient *egg_sm_client_osx_new (void); -#endif - -G_END_DECLS - - -#endif /* __EGG_SM_CLIENT_PRIVATE_H__ */ diff --git a/src/eggsmclient-win32.c b/src/eggsmclient-win32.c deleted file mode 100644 index 91a25715..00000000 --- a/src/eggsmclient-win32.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright (C) 2007 Novell, Inc. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* EggSMClientWin32 - * - * For details on the Windows XP logout process, see: - * http://msdn.microsoft.com/en-us/library/aa376876.aspx. - * - * Vista adds some new APIs which EggSMClient does not make use of; see - * http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx - * - * When shutting down, Windows sends every top-level window a - * WM_QUERYENDSESSION event, which the application must respond to - * synchronously, saying whether or not it will quit. To avoid main - * loop re-entrancy problems (and to avoid having to muck about too - * much with the guts of the gdk-win32 main loop), we watch for this - * event in a separate thread, which then signals the main thread and - * waits for the main thread to handle the event. Since we don't want - * to require g_thread_init() to be called, we do this all using - * Windows-specific thread methods. - * - * After the application handles the WM_QUERYENDSESSION event, - * Windows then sends it a WM_ENDSESSION event with a TRUE or FALSE - * parameter indicating whether the session is or is not actually - * going to end now. We handle this from the other thread as well. - * - * As mentioned above, Vista introduces several additional new APIs - * that don't fit into the (current) EggSMClient API. Windows also has - * an entirely separate shutdown-notification scheme for non-GUI apps, - * which we also don't handle here. - */ - -#include "config.h" - -#include "eggsmclient-private.h" -#include <gdk/gdk.h> - -#define WIN32_LEAN_AND_MEAN -#define UNICODE -#include <windows.h> -#include <process.h> - -#define EGG_TYPE_SM_CLIENT_WIN32 (egg_sm_client_win32_get_type ()) -#define EGG_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32)) -#define EGG_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class)) -#define EGG_IS_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_WIN32)) -#define EGG_IS_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_WIN32)) -#define EGG_SM_CLIENT_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class)) - -typedef struct _EggSMClientWin32 EggSMClientWin32; -typedef struct _EggSMClientWin32Class EggSMClientWin32Class; - -struct _EggSMClientWin32 { - EggSMClient parent; - - HANDLE message_event, response_event; - - volatile GSourceFunc event; - volatile gboolean will_quit; -}; - -struct _EggSMClientWin32Class -{ - EggSMClientClass parent_class; - -}; - -static void sm_client_win32_startup (EggSMClient *client, - const char *client_id); -static void sm_client_win32_will_quit (EggSMClient *client, - gboolean will_quit); -static gboolean sm_client_win32_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation); - -static GSource *g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, - gpointer user_data); -static gboolean got_message (gpointer user_data); -static void sm_client_thread (gpointer data); - -G_DEFINE_TYPE (EggSMClientWin32, egg_sm_client_win32, EGG_TYPE_SM_CLIENT) - -static void -egg_sm_client_win32_init (EggSMClientWin32 *win32) -{ - ; -} - -static void -egg_sm_client_win32_class_init (EggSMClientWin32Class *klass) -{ - EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); - - sm_client_class->startup = sm_client_win32_startup; - sm_client_class->will_quit = sm_client_win32_will_quit; - sm_client_class->end_session = sm_client_win32_end_session; -} - -EggSMClient * -egg_sm_client_win32_new (void) -{ - return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL); -} - -static void -sm_client_win32_startup (EggSMClient *client, - const char *client_id) -{ - EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; - - win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL); - win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL); - g_win32_handle_source_add (win32->message_event, got_message, win32); - _beginthread (sm_client_thread, 0, client); -} - -static void -sm_client_win32_will_quit (EggSMClient *client, - gboolean will_quit) -{ - EggSMClientWin32 *win32 = (EggSMClientWin32 *)client; - - win32->will_quit = will_quit; - SetEvent (win32->response_event); -} - -static gboolean -sm_client_win32_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation) -{ - UINT uFlags = EWX_LOGOFF; - - switch (style) - { - case EGG_SM_CLIENT_END_SESSION_DEFAULT: - case EGG_SM_CLIENT_LOGOUT: - uFlags = EWX_LOGOFF; - break; - case EGG_SM_CLIENT_REBOOT: - uFlags = EWX_REBOOT; - break; - case EGG_SM_CLIENT_SHUTDOWN: - uFlags = EWX_POWEROFF; - break; - } - - /* There's no way to make ExitWindowsEx() show a logout dialog, so - * we ignore @request_confirmation. - */ - -#ifdef SHTDN_REASON_FLAG_PLANNED - ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED); -#else - ExitWindowsEx (uFlags, 0); -#endif - - return TRUE; -} - - -/* callbacks from logout-listener thread */ - -static gboolean -emit_quit_requested (gpointer smclient) -{ - gdk_threads_enter (); - egg_sm_client_quit_requested (smclient); - gdk_threads_leave (); - - return FALSE; -} - -static gboolean -emit_quit (gpointer smclient) -{ - EggSMClientWin32 *win32 = smclient; - - gdk_threads_enter (); - egg_sm_client_quit (smclient); - gdk_threads_leave (); - - SetEvent (win32->response_event); - return FALSE; -} - -static gboolean -emit_quit_cancelled (gpointer smclient) -{ - EggSMClientWin32 *win32 = smclient; - - gdk_threads_enter (); - egg_sm_client_quit_cancelled (smclient); - gdk_threads_leave (); - - SetEvent (win32->response_event); - return FALSE; -} - -static gboolean -got_message (gpointer smclient) -{ - EggSMClientWin32 *win32 = smclient; - - win32->event (win32); - return TRUE; -} - -/* Windows HANDLE GSource */ - -typedef struct { - GSource source; - GPollFD pollfd; -} GWin32HandleSource; - -static gboolean -g_win32_handle_source_prepare (GSource *source, gint *timeout) -{ - *timeout = -1; - return FALSE; -} - -static gboolean -g_win32_handle_source_check (GSource *source) -{ - GWin32HandleSource *hsource = (GWin32HandleSource *)source; - - return hsource->pollfd.revents; -} - -static gboolean -g_win32_handle_source_dispatch (GSource *source, GSourceFunc callback, gpointer user_data) -{ - return (*callback) (user_data); -} - -static void -g_win32_handle_source_finalize (GSource *source) -{ - ; -} - -GSourceFuncs g_win32_handle_source_funcs = { - g_win32_handle_source_prepare, - g_win32_handle_source_check, - g_win32_handle_source_dispatch, - g_win32_handle_source_finalize -}; - -static GSource * -g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, gpointer user_data) -{ - GWin32HandleSource *hsource; - GSource *source; - - source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource)); - hsource = (GWin32HandleSource *)source; - hsource->pollfd.fd = (int)handle; - hsource->pollfd.events = G_IO_IN; - hsource->pollfd.revents = 0; - g_source_add_poll (source, &hsource->pollfd); - - g_source_set_callback (source, callback, user_data, NULL); - g_source_attach (source, NULL); - return source; -} - -/* logout-listener thread */ - -LRESULT CALLBACK -sm_client_win32_window_procedure (HWND hwnd, - UINT message, - WPARAM wParam, - LPARAM lParam) -{ - EggSMClientWin32 *win32 = - (EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA); - - switch (message) - { - case WM_QUERYENDSESSION: - win32->event = emit_quit_requested; - SetEvent (win32->message_event); - - WaitForSingleObject (win32->response_event, INFINITE); - return win32->will_quit; - - case WM_ENDSESSION: - if (wParam) - { - /* The session is ending */ - win32->event = emit_quit; - } - else - { - /* Nope, the session *isn't* ending */ - win32->event = emit_quit_cancelled; - } - - SetEvent (win32->message_event); - WaitForSingleObject (win32->response_event, INFINITE); - - return 0; - - default: - return DefWindowProc (hwnd, message, wParam, lParam); - } -} - -static void -sm_client_thread (gpointer smclient) -{ - HINSTANCE instance; - WNDCLASSEXW wcl; - ATOM klass; - HWND window; - MSG msg; - - instance = GetModuleHandle (NULL); - - memset (&wcl, 0, sizeof (WNDCLASSEX)); - wcl.cbSize = sizeof (WNDCLASSEX); - wcl.lpfnWndProc = sm_client_win32_window_procedure; - wcl.hInstance = instance; - wcl.lpszClassName = L"EggSmClientWindow"; - klass = RegisterClassEx (&wcl); - - window = CreateWindowEx (0, MAKEINTRESOURCE (klass), - L"EggSmClientWindow", 0, - 10, 10, 50, 50, GetDesktopWindow (), - NULL, instance, NULL); - SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient); - - /* main loop */ - while (GetMessage (&msg, NULL, 0, 0)) - DispatchMessage (&msg); -} diff --git a/src/eggsmclient-xsmp.c b/src/eggsmclient-xsmp.c deleted file mode 100644 index 81af7d2b..00000000 --- a/src/eggsmclient-xsmp.c +++ /dev/null @@ -1,1405 +0,0 @@ -/* - * Copyright (C) 2007 Novell, Inc. - * - * Inspired by various other pieces of code including GsmClient (C) - * 2001 Havoc Pennington, GnomeClient (C) 1998 Carsten Schaar, and twm - * session code (C) 1998 The Open Group. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include "eggsmclient.h" -#include "eggsmclient-private.h" - -#include "eggdesktopfile.h" - -#include <errno.h> -#include <fcntl.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <X11/SM/SMlib.h> - -#include <gdk/gdk.h> - -#define EGG_TYPE_SM_CLIENT_XSMP (egg_sm_client_xsmp_get_type ()) -#define EGG_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMP)) -#define EGG_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass)) -#define EGG_IS_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_XSMP)) -#define EGG_IS_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_XSMP)) -#define EGG_SM_CLIENT_XSMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass)) - -typedef struct _EggSMClientXSMP EggSMClientXSMP; -typedef struct _EggSMClientXSMPClass EggSMClientXSMPClass; - -/* These mostly correspond to the similarly-named states in section - * 9.1 of the XSMP spec. Some of the states there aren't represented - * here, because we don't need them. SHUTDOWN_CANCELLED is slightly - * different from the spec; we use it when the client is IDLE after a - * ShutdownCancelled message, but the application is still interacting - * and doesn't know the shutdown has been cancelled yet. - */ -typedef enum -{ - XSMP_STATE_IDLE, - XSMP_STATE_SAVE_YOURSELF, - XSMP_STATE_INTERACT_REQUEST, - XSMP_STATE_INTERACT, - XSMP_STATE_SAVE_YOURSELF_DONE, - XSMP_STATE_SHUTDOWN_CANCELLED, - XSMP_STATE_CONNECTION_CLOSED -} EggSMClientXSMPState; - -static const char *state_names[] = { - "idle", - "save-yourself", - "interact-request", - "interact", - "save-yourself-done", - "shutdown-cancelled", - "connection-closed" -}; - -#define EGG_SM_CLIENT_XSMP_STATE(xsmp) (state_names[(xsmp)->state]) - -struct _EggSMClientXSMP -{ - EggSMClient parent; - - SmcConn connection; - char *client_id; - - EggSMClientXSMPState state; - char **restart_command; - gboolean set_restart_command; - int restart_style; - char **discard_command; - gboolean set_discard_command; - - guint idle; - - /* Current SaveYourself state */ - guint expecting_initial_save_yourself : 1; - guint need_save_state : 1; - guint need_quit_requested : 1; - guint interact_errors : 1; - guint shutting_down : 1; - - /* Todo list */ - guint waiting_to_set_initial_properties : 1; - guint waiting_to_emit_quit : 1; - guint waiting_to_emit_quit_cancelled : 1; - guint waiting_to_save_myself : 1; - -}; - -struct _EggSMClientXSMPClass -{ - EggSMClientClass parent_class; - -}; - -static void sm_client_xsmp_startup (EggSMClient *client, - const char *client_id); -static void sm_client_xsmp_set_restart_command (EggSMClient *client, - int argc, - const char **argv); -static void sm_client_xsmp_set_discard_command (EggSMClient *client, - int argc, - const char **argv); -static void sm_client_xsmp_will_quit (EggSMClient *client, - gboolean will_quit); -static gboolean sm_client_xsmp_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation); - -static void xsmp_save_yourself (SmcConn smc_conn, - SmPointer client_data, - int save_style, - Bool shutdown, - int interact_style, - Bool fast); -static void xsmp_die (SmcConn smc_conn, - SmPointer client_data); -static void xsmp_save_complete (SmcConn smc_conn, - SmPointer client_data); -static void xsmp_shutdown_cancelled (SmcConn smc_conn, - SmPointer client_data); -static void xsmp_interact (SmcConn smc_conn, - SmPointer client_data); - -static SmProp *array_prop (const char *name, - ...); -static SmProp *ptrarray_prop (const char *name, - GPtrArray *values); -static SmProp *string_prop (const char *name, - const char *value); -static SmProp *card8_prop (const char *name, - unsigned char value); - -static void set_properties (EggSMClientXSMP *xsmp, ...); -static void delete_properties (EggSMClientXSMP *xsmp, ...); - -static GPtrArray *generate_command (char **argv, - const char *client_id, - const char *state_file); - -static void save_state (EggSMClientXSMP *xsmp); -static void do_save_yourself (EggSMClientXSMP *xsmp); -static void update_pending_events (EggSMClientXSMP *xsmp); - -static void ice_init (void); -static gboolean process_ice_messages (IceConn ice_conn); -static void smc_error_handler (SmcConn smc_conn, - Bool swap, - int offending_minor_opcode, - unsigned long offending_sequence, - int error_class, - int severity, - SmPointer values); - -G_DEFINE_TYPE (EggSMClientXSMP, egg_sm_client_xsmp, EGG_TYPE_SM_CLIENT) - -static void -egg_sm_client_xsmp_init (EggSMClientXSMP *xsmp) -{ - xsmp->state = XSMP_STATE_CONNECTION_CLOSED; - xsmp->connection = NULL; - xsmp->restart_style = SmRestartIfRunning; -} - -static void -egg_sm_client_xsmp_class_init (EggSMClientXSMPClass *klass) -{ - EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass); - - sm_client_class->startup = sm_client_xsmp_startup; - sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command; - sm_client_class->set_discard_command = sm_client_xsmp_set_discard_command; - sm_client_class->will_quit = sm_client_xsmp_will_quit; - sm_client_class->end_session = sm_client_xsmp_end_session; -} - -EggSMClient * -egg_sm_client_xsmp_new (void) -{ - if (!g_getenv ("SESSION_MANAGER")) - return NULL; - - return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL); -} - -static gboolean -sm_client_xsmp_set_initial_properties (gpointer user_data) -{ - EggSMClientXSMP *xsmp = user_data; - EggDesktopFile *desktop_file; - GPtrArray *clone, *restart; - char pid_str[64]; - - if (xsmp->idle) - { - g_source_remove (xsmp->idle); - xsmp->idle = 0; - } - xsmp->waiting_to_set_initial_properties = FALSE; - - if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART) - xsmp->restart_style = SmRestartNever; - - /* Parse info out of desktop file */ - desktop_file = egg_get_desktop_file (); - if (desktop_file) - { - GError *err = NULL; - char *cmdline, **argv; - int argc; - - if (xsmp->restart_style == SmRestartIfRunning) - { - if (egg_desktop_file_get_boolean (desktop_file, - "X-GNOME-AutoRestart", NULL)) - xsmp->restart_style = SmRestartImmediately; - } - - if (!xsmp->set_restart_command) - { - cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err); - if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err)) - { - egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp), - argc, (const char **)argv); - g_strfreev (argv); - } - else - { - g_warning ("Could not parse Exec line in desktop file: %s", - err->message); - g_error_free (err); - } - g_free (cmdline); - } - } - - if (!xsmp->set_restart_command) - xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1); - - clone = generate_command (xsmp->restart_command, NULL, NULL); - restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); - - g_debug ("Setting initial properties"); - - /* Program, CloneCommand, RestartCommand, and UserID are required. - * ProcessID isn't required, but the SM may be able to do something - * useful with it. - */ - g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ()); - set_properties (xsmp, - string_prop (SmProgram, g_get_prgname ()), - ptrarray_prop (SmCloneCommand, clone), - ptrarray_prop (SmRestartCommand, restart), - string_prop (SmUserID, g_get_user_name ()), - string_prop (SmProcessID, pid_str), - card8_prop (SmRestartStyleHint, xsmp->restart_style), - NULL); - g_ptr_array_free (clone, TRUE); - g_ptr_array_free (restart, TRUE); - - if (desktop_file) - { - set_properties (xsmp, - string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)), - NULL); - } - - update_pending_events (xsmp); - return FALSE; -} - -/* This gets called from two different places: xsmp_die() (when the - * server asks us to disconnect) and process_ice_messages() (when the - * server disconnects unexpectedly). - */ -static void -sm_client_xsmp_disconnect (EggSMClientXSMP *xsmp) -{ - SmcConn connection; - - if (!xsmp->connection) - return; - - g_debug ("Disconnecting"); - - connection = xsmp->connection; - xsmp->connection = NULL; - SmcCloseConnection (connection, 0, NULL); - xsmp->state = XSMP_STATE_CONNECTION_CLOSED; - - xsmp->waiting_to_save_myself = FALSE; - update_pending_events (xsmp); -} - -static void -sm_client_xsmp_startup (EggSMClient *client, - const char *client_id) -{ - EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - SmcCallbacks callbacks; - char *ret_client_id; - char error_string_ret[256]; - - xsmp->client_id = g_strdup (client_id); - - ice_init (); - SmcSetErrorHandler (smc_error_handler); - - callbacks.save_yourself.callback = xsmp_save_yourself; - callbacks.die.callback = xsmp_die; - callbacks.save_complete.callback = xsmp_save_complete; - callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled; - - callbacks.save_yourself.client_data = xsmp; - callbacks.die.client_data = xsmp; - callbacks.save_complete.client_data = xsmp; - callbacks.shutdown_cancelled.client_data = xsmp; - - client_id = NULL; - error_string_ret[0] = '\0'; - xsmp->connection = - SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor, - SmcSaveYourselfProcMask | SmcDieProcMask | - SmcSaveCompleteProcMask | - SmcShutdownCancelledProcMask, - &callbacks, - xsmp->client_id, &ret_client_id, - sizeof (error_string_ret), error_string_ret); - - if (!xsmp->connection) - { - g_warning ("Failed to connect to the session manager: %s\n", - error_string_ret[0] ? - error_string_ret : "no error message given"); - xsmp->state = XSMP_STATE_CONNECTION_CLOSED; - return; - } - - /* We expect a pointless initial SaveYourself if either (a) we - * didn't have an initial client ID, or (b) we DID have an initial - * client ID, but the server rejected it and gave us a new one. - */ - if (!xsmp->client_id || - (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0)) - xsmp->expecting_initial_save_yourself = TRUE; - - if (ret_client_id) - { - g_free (xsmp->client_id); - xsmp->client_id = g_strdup (ret_client_id); - free (ret_client_id); - - gdk_threads_enter (); - gdk_set_sm_client_id (xsmp->client_id); - gdk_threads_leave (); - - g_debug ("Got client ID \"%s\"", xsmp->client_id); - } - - xsmp->state = XSMP_STATE_IDLE; - - /* Do not set the initial properties until we reach the main loop, - * so that the application has a chance to call - * egg_set_desktop_file(). (This may also help the session manager - * have a better idea of when the application is fully up and - * running.) - */ - xsmp->waiting_to_set_initial_properties = TRUE; - xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client); -} - -static void -sm_client_xsmp_set_restart_command (EggSMClient *client, - int argc, - const char **argv) -{ - EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - int i; - - g_strfreev (xsmp->restart_command); - - xsmp->restart_command = g_new (char *, argc + 1); - for (i = 0; i < argc; i++) - xsmp->restart_command[i] = g_strdup (argv[i]); - xsmp->restart_command[i] = NULL; - - xsmp->set_restart_command = TRUE; -} - -static void -sm_client_xsmp_set_discard_command (EggSMClient *client, - int argc, - const char **argv) -{ - EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - int i; - - g_strfreev (xsmp->discard_command); - - xsmp->discard_command = g_new (char *, argc + 1); - for (i = 0; i < argc; i++) - xsmp->discard_command[i] = g_strdup (argv[i]); - xsmp->discard_command[i] = NULL; - - xsmp->set_discard_command = TRUE; -} - -static void -sm_client_xsmp_will_quit (EggSMClient *client, - gboolean will_quit) -{ - EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - - if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED) - { - /* The session manager has already exited! Schedule a quit - * signal. - */ - xsmp->waiting_to_emit_quit = TRUE; - update_pending_events (xsmp); - return; - } - else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) - { - /* We received a ShutdownCancelled message while the application - * was interacting; Schedule a quit_cancelled signal. - */ - xsmp->waiting_to_emit_quit_cancelled = TRUE; - update_pending_events (xsmp); - return; - } - - g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT); - - g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True"); - SmcInteractDone (xsmp->connection, !will_quit); - - if (will_quit && xsmp->need_save_state) - save_state (xsmp); - - g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False"); - SmcSaveYourselfDone (xsmp->connection, will_quit); - xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; -} - -static gboolean -sm_client_xsmp_end_session (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation) -{ - EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client; - int save_type; - - /* To end the session via XSMP, we have to send a - * SaveYourselfRequest. We aren't allowed to do that if anything - * else is going on, but we don't want to expose this fact to the - * application. So we do our best to patch things up here... - * - * In the worst case, this method might block for some length of - * time in process_ice_messages, but the only time that code path is - * honestly likely to get hit is if the application tries to end the - * session as the very first thing it does, in which case it - * probably won't actually block anyway. It's not worth gunking up - * the API to try to deal nicely with the other 0.01% of cases where - * this happens. - */ - - while (xsmp->state != XSMP_STATE_IDLE || - xsmp->expecting_initial_save_yourself) - { - /* If we're already shutting down, we don't need to do anything. */ - if (xsmp->shutting_down) - return TRUE; - - switch (xsmp->state) - { - case XSMP_STATE_CONNECTION_CLOSED: - return FALSE; - - case XSMP_STATE_SAVE_YOURSELF: - /* Trying to log out from the save_state callback? Whatever. - * Abort the save_state. - */ - SmcSaveYourselfDone (xsmp->connection, FALSE); - xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; - break; - - case XSMP_STATE_INTERACT_REQUEST: - case XSMP_STATE_INTERACT: - case XSMP_STATE_SHUTDOWN_CANCELLED: - /* Already in a shutdown-related state, just ignore - * the new shutdown request... - */ - return TRUE; - - case XSMP_STATE_IDLE: - if (xsmp->waiting_to_set_initial_properties) - sm_client_xsmp_set_initial_properties (xsmp); - - if (!xsmp->expecting_initial_save_yourself) - break; - /* else fall through */ - - case XSMP_STATE_SAVE_YOURSELF_DONE: - /* We need to wait for some response from the server.*/ - process_ice_messages (SmcGetIceConnection (xsmp->connection)); - break; - - default: - /* Hm... shouldn't happen */ - return FALSE; - } - } - - /* xfce4-session will do the wrong thing if we pass SmSaveGlobal and - * the user chooses to save the session. But gnome-session will do - * the wrong thing if we pass SmSaveBoth and the user chooses NOT to - * save the session... Sigh. - */ - if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session")) - save_type = SmSaveBoth; - else - save_type = SmSaveGlobal; - - g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : ""); - SmcRequestSaveYourself (xsmp->connection, - save_type, - True, /* shutdown */ - SmInteractStyleAny, - !request_confirmation, /* fast */ - True /* global */); - return TRUE; -} - -static gboolean -idle_do_pending_events (gpointer data) -{ - EggSMClientXSMP *xsmp = data; - EggSMClient *client = data; - - gdk_threads_enter (); - - xsmp->idle = 0; - - if (xsmp->waiting_to_emit_quit) - { - xsmp->waiting_to_emit_quit = FALSE; - egg_sm_client_quit (client); - goto out; - } - - if (xsmp->waiting_to_emit_quit_cancelled) - { - xsmp->waiting_to_emit_quit_cancelled = FALSE; - egg_sm_client_quit_cancelled (client); - xsmp->state = XSMP_STATE_IDLE; - } - - if (xsmp->waiting_to_save_myself) - { - xsmp->waiting_to_save_myself = FALSE; - do_save_yourself (xsmp); - } - - out: - gdk_threads_leave (); - return FALSE; -} - -static void -update_pending_events (EggSMClientXSMP *xsmp) -{ - gboolean want_idle = - xsmp->waiting_to_emit_quit || - xsmp->waiting_to_emit_quit_cancelled || - xsmp->waiting_to_save_myself; - - if (want_idle) - { - if (xsmp->idle == 0) - xsmp->idle = g_idle_add (idle_do_pending_events, xsmp); - } - else - { - if (xsmp->idle != 0) - g_source_remove (xsmp->idle); - xsmp->idle = 0; - } -} - -static void -fix_broken_state (EggSMClientXSMP *xsmp, const char *message, - gboolean send_interact_done, - gboolean send_save_yourself_done) -{ - g_warning ("Received XSMP %s message in state %s: client or server error", - message, EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - /* Forget any pending SaveYourself plans we had */ - xsmp->waiting_to_save_myself = FALSE; - update_pending_events (xsmp); - - if (send_interact_done) - SmcInteractDone (xsmp->connection, False); - if (send_save_yourself_done) - SmcSaveYourselfDone (xsmp->connection, True); - - xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE; -} - -/* SM callbacks */ - -static void -xsmp_save_yourself (SmcConn smc_conn, - SmPointer client_data, - int save_type, - Bool shutdown, - int interact_style, - Bool fast) -{ - EggSMClientXSMP *xsmp = client_data; - gboolean wants_quit_requested; - - g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s", - save_type == SmSaveLocal ? "SmSaveLocal" : - save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth", - shutdown ? "Shutdown" : "!Shutdown", - interact_style == SmInteractStyleAny ? "SmInteractStyleAny" : - interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" : - "SmInteractStyleNone", fast ? "Fast" : "!Fast", - EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - if (xsmp->state != XSMP_STATE_IDLE && - xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED) - { - fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE); - return; - } - - if (xsmp->waiting_to_set_initial_properties) - sm_client_xsmp_set_initial_properties (xsmp); - - /* If this is the initial SaveYourself, ignore it; we've already set - * properties and there's no reason to actually save state too. - */ - if (xsmp->expecting_initial_save_yourself) - { - xsmp->expecting_initial_save_yourself = FALSE; - - if (save_type == SmSaveLocal && - interact_style == SmInteractStyleNone && - !shutdown && !fast) - { - g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself"); - SmcSaveYourselfDone (xsmp->connection, True); - /* As explained in the comment at the end of - * do_save_yourself(), SAVE_YOURSELF_DONE is the correct - * state here, not IDLE. - */ - xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; - return; - } - else - g_warning ("First SaveYourself was not the expected one!"); - } - - /* Even ignoring the "fast" flag completely, there are still 18 - * different combinations of save_type, shutdown and interact_style. - * We interpret them as follows: - * - * Type Shutdown Interact Interpretation - * G F A/E/N do nothing (1) - * G T N do nothing (1)* - * G T A/E quit_requested (2) - * L/B F A/E/N save_state (3) - * L/B T N save_state (3)* - * L/B T A/E quit_requested, then save_state (4) - * - * 1. Do nothing, because the SM asked us to do something - * uninteresting (save open files, but then don't quit - * afterward) or rude (save open files without asking the user - * for confirmation). - * - * 2. Request interaction and then emit ::quit_requested. This - * perhaps isn't quite correct for the SmInteractStyleErrors - * case, but we don't care. - * - * 3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these - * rows essentially get demoted to SmSaveLocal, because their - * Global halves correspond to "do nothing". - * - * 4. Request interaction, emit ::quit_requested, and then emit - * ::save_state after interacting. This is the SmSaveBoth - * equivalent of #2, but we also promote SmSaveLocal shutdown - * SaveYourselfs to SmSaveBoth here, because we want to give - * the user a chance to save open files before quitting. - * - * (* It would be nice if we could do something useful when the - * session manager sends a SaveYourself with shutdown True and - * SmInteractStyleNone. But we can't, so we just pretend it didn't - * even tell us it was shutting down. The docs for ::quit mention - * that it might not always be preceded by ::quit_requested.) - */ - - /* As an optimization, we don't actually request interaction and - * emit ::quit_requested if the application isn't listening to the - * signal. - */ - wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE); - - xsmp->need_save_state = (save_type != SmSaveGlobal); - xsmp->need_quit_requested = (shutdown && wants_quit_requested && - interact_style != SmInteractStyleNone); - xsmp->interact_errors = (interact_style == SmInteractStyleErrors); - - xsmp->shutting_down = shutdown; - - do_save_yourself (xsmp); -} - -static void -do_save_yourself (EggSMClientXSMP *xsmp) -{ - if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) - { - /* The SM cancelled a previous SaveYourself, but we haven't yet - * had a chance to tell the application, so we can't start - * processing this SaveYourself yet. - */ - xsmp->waiting_to_save_myself = TRUE; - update_pending_events (xsmp); - return; - } - - if (xsmp->need_quit_requested) - { - xsmp->state = XSMP_STATE_INTERACT_REQUEST; - - g_debug ("Sending InteractRequest(%s)", - xsmp->interact_errors ? "Error" : "Normal"); - SmcInteractRequest (xsmp->connection, - xsmp->interact_errors ? SmDialogError : SmDialogNormal, - xsmp_interact, - xsmp); - return; - } - - if (xsmp->need_save_state) - { - save_state (xsmp); - - /* Though unlikely, the client could have been disconnected - * while the application was saving its state. - */ - if (!xsmp->connection) - return; - } - - g_debug ("Sending SaveYourselfDone(True)"); - SmcSaveYourselfDone (xsmp->connection, True); - - /* The client state diagram in the XSMP spec says that after a - * non-shutdown SaveYourself, we go directly back to "idle". But - * everything else in both the XSMP spec and the libSM docs - * disagrees. - */ - xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE; -} - -static void -save_state (EggSMClientXSMP *xsmp) -{ - GKeyFile *state_file; - char *state_file_path, *data; - EggDesktopFile *desktop_file; - GPtrArray *restart, *discard; - int offset, fd; - - /* We set xsmp->state before emitting save_state, but our caller is - * responsible for setting it back afterward. - */ - xsmp->state = XSMP_STATE_SAVE_YOURSELF; - - state_file = egg_sm_client_save_state ((EggSMClient *)xsmp); - if (!state_file) - { - restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL); - set_properties (xsmp, - ptrarray_prop (SmRestartCommand, restart), - NULL); - g_ptr_array_free (restart, TRUE); - - if (xsmp->set_discard_command) - { - discard = generate_command (xsmp->discard_command, NULL, NULL); - set_properties (xsmp, - ptrarray_prop (SmDiscardCommand, discard), - NULL); - g_ptr_array_free (discard, TRUE); - } - else - delete_properties (xsmp, SmDiscardCommand, NULL); - - return; - } - - desktop_file = egg_get_desktop_file (); - if (desktop_file) - { - GKeyFile *merged_file; - char *desktop_file_path; - - merged_file = g_key_file_new (); - desktop_file_path = - g_filename_from_uri (egg_desktop_file_get_source (desktop_file), - NULL, NULL); - if (desktop_file_path && - g_key_file_load_from_file (merged_file, desktop_file_path, - G_KEY_FILE_KEEP_COMMENTS | - G_KEY_FILE_KEEP_TRANSLATIONS, NULL)) - { - guint g, k, i; - char **groups, **keys, *value, *exec; - - groups = g_key_file_get_groups (state_file, NULL); - for (g = 0; groups[g]; g++) - { - keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL); - for (k = 0; keys[k]; k++) - { - value = g_key_file_get_value (state_file, groups[g], - keys[k], NULL); - if (value) - { - g_key_file_set_value (merged_file, groups[g], - keys[k], value); - g_free (value); - } - } - g_strfreev (keys); - } - g_strfreev (groups); - - g_key_file_free (state_file); - state_file = merged_file; - - /* Update Exec key using "--sm-client-state-file %k" */ - restart = generate_command (xsmp->restart_command, - NULL, "%k"); - for (i = 0; i < restart->len; i++) - restart->pdata[i] = g_shell_quote (restart->pdata[i]); - g_ptr_array_add (restart, NULL); - exec = g_strjoinv (" ", (char **)restart->pdata); - g_strfreev ((char **)restart->pdata); - g_ptr_array_free (restart, FALSE); - - g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP, - EGG_DESKTOP_FILE_KEY_EXEC, - exec); - g_free (exec); - } - else - desktop_file = NULL; - - g_free (desktop_file_path); - } - - /* Now write state_file to disk. (We can't use mktemp(), because - * that requires the filename to end with "XXXXXX", and we want - * it to end with ".desktop".) - */ - - data = g_key_file_to_data (state_file, NULL, NULL); - g_key_file_free (state_file); - - offset = 0; - while (1) - { - state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s", - g_get_user_config_dir (), - G_DIR_SEPARATOR, G_DIR_SEPARATOR, - g_get_prgname (), - (long)time (NULL) + offset, - desktop_file ? "desktop" : "state"); - - fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644); - if (fd == -1) - { - if (errno == EEXIST) - { - offset++; - g_free (state_file_path); - continue; - } - else if (errno == ENOTDIR || errno == ENOENT) - { - char *sep = strrchr (state_file_path, G_DIR_SEPARATOR); - - *sep = '\0'; - if (g_mkdir_with_parents (state_file_path, 0755) != 0) - { - g_warning ("Could not create directory '%s'", - state_file_path); - g_free (state_file_path); - state_file_path = NULL; - break; - } - - continue; - } - - g_warning ("Could not create file '%s': %s", - state_file_path, g_strerror (errno)); - g_free (state_file_path); - state_file_path = NULL; - break; - } - - close (fd); - g_file_set_contents (state_file_path, data, -1, NULL); - break; - } - g_free (data); - - restart = generate_command (xsmp->restart_command, xsmp->client_id, - state_file_path); - set_properties (xsmp, - ptrarray_prop (SmRestartCommand, restart), - NULL); - g_ptr_array_free (restart, TRUE); - - if (state_file_path) - { - set_properties (xsmp, - array_prop (SmDiscardCommand, - "/bin/rm", "-rf", state_file_path, - NULL), - NULL); - g_free (state_file_path); - } -} - -static void -xsmp_interact (SmcConn smc_conn, - SmPointer client_data) -{ - EggSMClientXSMP *xsmp = client_data; - EggSMClient *client = client_data; - - g_debug ("Received Interact message in state %s", - EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - if (xsmp->state != XSMP_STATE_INTERACT_REQUEST) - { - fix_broken_state (xsmp, "Interact", TRUE, TRUE); - return; - } - - xsmp->state = XSMP_STATE_INTERACT; - egg_sm_client_quit_requested (client); -} - -static void -xsmp_die (SmcConn smc_conn, - SmPointer client_data) -{ - EggSMClientXSMP *xsmp = client_data; - EggSMClient *client = client_data; - - g_debug ("Received Die message in state %s", - EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - sm_client_xsmp_disconnect (xsmp); - egg_sm_client_quit (client); -} - -static void -xsmp_save_complete (SmcConn smc_conn, - SmPointer client_data) -{ - EggSMClientXSMP *xsmp = client_data; - - g_debug ("Received SaveComplete message in state %s", - EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) - xsmp->state = XSMP_STATE_IDLE; - else - fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE); -} - -static void -xsmp_shutdown_cancelled (SmcConn smc_conn, - SmPointer client_data) -{ - EggSMClientXSMP *xsmp = client_data; - EggSMClient *client = client_data; - - g_debug ("Received ShutdownCancelled message in state %s", - EGG_SM_CLIENT_XSMP_STATE (xsmp)); - - xsmp->shutting_down = FALSE; - - if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE) - { - /* We've finished interacting and now the SM has agreed to - * cancel the shutdown. - */ - xsmp->state = XSMP_STATE_IDLE; - egg_sm_client_quit_cancelled (client); - } - else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED) - { - /* Hm... ok, so we got a shutdown SaveYourself, which got - * cancelled, but the application was still interacting, so we - * didn't tell it yet, and then *another* SaveYourself arrived, - * which we must still be waiting to tell the app about, except - * that now that SaveYourself has been cancelled too! Dizzy yet? - */ - xsmp->waiting_to_save_myself = FALSE; - update_pending_events (xsmp); - } - else - { - g_debug ("Sending SaveYourselfDone(False)"); - SmcSaveYourselfDone (xsmp->connection, False); - - if (xsmp->state == XSMP_STATE_INTERACT) - { - /* The application is currently interacting, so we can't - * tell it about the cancellation yet; we will wait until - * after it calls egg_sm_client_will_quit(). - */ - xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED; - } - else - { - /* The shutdown was cancelled before the application got a - * chance to interact. - */ - xsmp->state = XSMP_STATE_IDLE; - } - } -} - -/* Utilities */ - -/* Create a restart/clone/Exec command based on @restart_command. - * If @client_id is non-%NULL, add "--sm-client-id @client_id". - * If @state_file is non-%NULL, add "--sm-client-state-file @state_file". - * - * None of the input strings are g_strdup()ed; the caller must keep - * them around until it is done with the returned GPtrArray, and must - * then free the array, but not its contents. - */ -static GPtrArray * -generate_command (char **argv, const char *client_id, - const char *state_file) -{ - GPtrArray *cmd; - int i; - - cmd = g_ptr_array_new (); - g_ptr_array_add (cmd, argv[0]); - - if (client_id) - { - g_ptr_array_add (cmd, "--sm-client-id"); - g_ptr_array_add (cmd, (char *)client_id); - } - - if (state_file) - { - g_ptr_array_add (cmd, "--sm-client-state-file"); - g_ptr_array_add (cmd, (char *)state_file); - } - - for (i = 1; argv[i]; i++) - g_ptr_array_add (cmd, argv[i]); - - return cmd; -} - -/* Takes a NULL-terminated list of SmProp * values, created by - * array_prop, ptrarray_prop, string_prop, card8_prop, sets them, and - * frees them. - */ -static void -set_properties (EggSMClientXSMP *xsmp, ...) -{ - GPtrArray *props; - SmProp *prop; - va_list ap; - guint i; - - props = g_ptr_array_new (); - - va_start (ap, xsmp); - while ((prop = va_arg (ap, SmProp *))) - g_ptr_array_add (props, prop); - va_end (ap); - - if (xsmp->connection) - { - SmcSetProperties (xsmp->connection, props->len, - (SmProp **)props->pdata); - } - - for (i = 0; i < props->len; i++) - { - prop = props->pdata[i]; - g_free (prop->vals); - g_free (prop); - } - g_ptr_array_free (props, TRUE); -} - -/* Takes a NULL-terminated list of property names and deletes them. */ -static void -delete_properties (EggSMClientXSMP *xsmp, ...) -{ - GPtrArray *props; - char *prop; - va_list ap; - - if (!xsmp->connection) - return; - - props = g_ptr_array_new (); - - va_start (ap, xsmp); - while ((prop = va_arg (ap, char *))) - g_ptr_array_add (props, prop); - va_end (ap); - - SmcDeleteProperties (xsmp->connection, props->len, - (char **)props->pdata); - - g_ptr_array_free (props, TRUE); -} - -/* Takes an array of strings and creates a LISTofARRAY8 property. The - * strings are neither dupped nor freed; they need to remain valid - * until you're done with the SmProp. - */ -static SmProp * -array_prop (const char *name, ...) -{ - SmProp *prop; - SmPropValue pv; - GArray *vals; - char *value; - va_list ap; - - prop = g_new (SmProp, 1); - prop->name = (char *)name; - prop->type = SmLISTofARRAY8; - - vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); - - va_start (ap, name); - while ((value = va_arg (ap, char *))) - { - pv.length = strlen (value); - pv.value = value; - g_array_append_val (vals, pv); - } - - prop->num_vals = vals->len; - prop->vals = (SmPropValue *)vals->data; - - g_array_free (vals, FALSE); - - return prop; -} - -/* Takes a GPtrArray of strings and creates a LISTofARRAY8 property. - * The array contents are neither dupped nor freed; they need to - * remain valid until you're done with the SmProp. - */ -static SmProp * -ptrarray_prop (const char *name, GPtrArray *values) -{ - SmProp *prop; - SmPropValue pv; - GArray *vals; - guint i; - - prop = g_new (SmProp, 1); - prop->name = (char *)name; - prop->type = SmLISTofARRAY8; - - vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue)); - - for (i = 0; i < values->len; i++) - { - pv.length = strlen (values->pdata[i]); - pv.value = values->pdata[i]; - g_array_append_val (vals, pv); - } - - prop->num_vals = vals->len; - prop->vals = (SmPropValue *)vals->data; - - g_array_free (vals, FALSE); - - return prop; -} - -/* Takes a string and creates an ARRAY8 property. The string is - * neither dupped nor freed; it needs to remain valid until you're - * done with the SmProp. - */ -static SmProp * -string_prop (const char *name, const char *value) -{ - SmProp *prop; - - prop = g_new (SmProp, 1); - prop->name = (char *)name; - prop->type = SmARRAY8; - - prop->num_vals = 1; - prop->vals = g_new (SmPropValue, 1); - - prop->vals[0].length = strlen (value); - prop->vals[0].value = (char *)value; - - return prop; -} - -/* Takes a char and creates a CARD8 property. */ -static SmProp * -card8_prop (const char *name, unsigned char value) -{ - SmProp *prop; - char *card8val; - - /* To avoid having to allocate and free prop->vals[0], we cheat and - * make vals a 2-element-long array and then use the second element - * to store value. - */ - - prop = g_new (SmProp, 1); - prop->name = (char *)name; - prop->type = SmCARD8; - - prop->num_vals = 1; - prop->vals = g_new (SmPropValue, 2); - card8val = (char *)(&prop->vals[1]); - card8val[0] = value; - - prop->vals[0].length = 1; - prop->vals[0].value = card8val; - - return prop; -} - -/* ICE code. This makes no effort to play nice with anyone else trying - * to use libICE. Fortunately, no one uses libICE for anything other - * than SM. (DCOP uses ICE, but it has its own private copy of - * libICE.) - * - * When this moves to gtk, it will need to be cleverer, to avoid - * tripping over old apps that use GnomeClient or that use libSM - * directly. - */ - -#include <X11/ICE/ICElib.h> -#include <fcntl.h> - -static void ice_error_handler (IceConn ice_conn, - Bool swap, - int offending_minor_opcode, - unsigned long offending_sequence, - int error_class, - int severity, - IcePointer values); -static void ice_io_error_handler (IceConn ice_conn); -static void ice_connection_watch (IceConn ice_conn, - IcePointer client_data, - Bool opening, - IcePointer *watch_data); - -static void -ice_init (void) -{ - IceSetIOErrorHandler (ice_io_error_handler); - IceSetErrorHandler (ice_error_handler); - IceAddConnectionWatch (ice_connection_watch, NULL); -} - -static gboolean -process_ice_messages (IceConn ice_conn) -{ - IceProcessMessagesStatus status; - - gdk_threads_enter (); - status = IceProcessMessages (ice_conn, NULL, NULL); - gdk_threads_leave (); - - switch (status) - { - case IceProcessMessagesSuccess: - return TRUE; - - case IceProcessMessagesIOError: - sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn)); - return FALSE; - - case IceProcessMessagesConnectionClosed: - return FALSE; - - default: - g_assert_not_reached (); - } -} - -static gboolean -ice_iochannel_watch (GIOChannel *channel, - GIOCondition condition, - gpointer client_data) -{ - return process_ice_messages (client_data); -} - -static void -ice_connection_watch (IceConn ice_conn, - IcePointer client_data, - Bool opening, - IcePointer *watch_data) -{ - guint watch_id; - - if (opening) - { - GIOChannel *channel; - int fd = IceConnectionNumber (ice_conn); - - fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC); - channel = g_io_channel_unix_new (fd); - watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR, - ice_iochannel_watch, ice_conn); - g_io_channel_unref (channel); - - *watch_data = GUINT_TO_POINTER (watch_id); - } - else - { - watch_id = GPOINTER_TO_UINT (*watch_data); - g_source_remove (watch_id); - } -} - -static void -ice_error_handler (IceConn ice_conn, - Bool swap, - int offending_minor_opcode, - unsigned long offending_sequence, - int error_class, - int severity, - IcePointer values) -{ - /* Do nothing */ -} - -static void -ice_io_error_handler (IceConn ice_conn) -{ - /* Do nothing */ -} - -static void -smc_error_handler (SmcConn smc_conn, - Bool swap, - int offending_minor_opcode, - unsigned long offending_sequence, - int error_class, - int severity, - SmPointer values) -{ - /* Do nothing */ -} diff --git a/src/eggsmclient.c b/src/eggsmclient.c deleted file mode 100644 index 85aaee4e..00000000 --- a/src/eggsmclient.c +++ /dev/null @@ -1,610 +0,0 @@ -/* - * Copyright (C) 2007 Novell, Inc. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include <string.h> -#include <glib/gi18n.h> - -#include "eggsmclient.h" -#include "eggsmclient-private.h" - -static void egg_sm_client_debug_handler (const char *log_domain, - GLogLevelFlags log_level, - const char *message, - gpointer user_data); - -enum { - SAVE_STATE, - QUIT_REQUESTED, - QUIT_CANCELLED, - QUIT, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL]; - -struct _EggSMClientPrivate { - GKeyFile *state_file; -}; - -#define EGG_SM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EGG_TYPE_SM_CLIENT, EggSMClientPrivate)) - -G_DEFINE_TYPE (EggSMClient, egg_sm_client, G_TYPE_OBJECT) - -static EggSMClient *global_client; -static EggSMClientMode global_client_mode = EGG_SM_CLIENT_MODE_NORMAL; - -static void -egg_sm_client_init (EggSMClient *client) -{ - ; -} - -static void -egg_sm_client_class_init (EggSMClientClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (EggSMClientPrivate)); - - /** - * EggSMClient::save_state: - * @client: the client - * @state_file: a #GKeyFile to save state information into - * - * Emitted when the session manager has requested that the - * application save information about its current state. The - * application should save its state into @state_file, and then the - * session manager may then restart the application in a future - * session and tell it to initialize itself from that state. - * - * You should not save any data into @state_file's "start group" - * (ie, the %NULL group). Instead, applications should save their - * data into groups with names that start with the application name, - * and libraries that connect to this signal should save their data - * into groups with names that start with the library name. - * - * Alternatively, rather than (or in addition to) using @state_file, - * the application can save its state by calling - * egg_sm_client_set_restart_command() during the processing of this - * signal (eg, to include a list of files to open). - **/ - signals[SAVE_STATE] = - g_signal_new ("save_state", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggSMClientClass, save_state), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, - 1, G_TYPE_POINTER); - - /** - * EggSMClient::quit_requested: - * @client: the client - * - * Emitted when the session manager requests that the application - * exit (generally because the user is logging out). The application - * should decide whether or not it is willing to quit (perhaps after - * asking the user what to do with documents that have unsaved - * changes) and then call egg_sm_client_will_quit(), passing %TRUE - * or %FALSE to give its answer to the session manager. (It does not - * need to give an answer before returning from the signal handler; - * it can interact with the user asynchronously and then give its - * answer later on.) If the application does not connect to this - * signal, then #EggSMClient will automatically return %TRUE on its - * behalf. - * - * The application should not save its session state as part of - * handling this signal; if the user has requested that the session - * be saved when logging out, then ::save_state will be emitted - * separately. - * - * If the application agrees to quit, it should then wait for either - * the ::quit_cancelled or ::quit signals to be emitted. - **/ - signals[QUIT_REQUESTED] = - g_signal_new ("quit_requested", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggSMClientClass, quit_requested), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - /** - * EggSMClient::quit_cancelled: - * @client: the client - * - * Emitted when the session manager decides to cancel a logout after - * the application has already agreed to quit. After receiving this - * signal, the application can go back to what it was doing before - * receiving the ::quit_requested signal. - **/ - signals[QUIT_CANCELLED] = - g_signal_new ("quit_cancelled", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggSMClientClass, quit_cancelled), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - /** - * EggSMClient::quit: - * @client: the client - * - * Emitted when the session manager wants the application to quit - * (generally because the user is logging out). The application - * should exit as soon as possible after receiving this signal; if - * it does not, the session manager may choose to forcibly kill it. - * - * Normally a GUI application would only be sent a ::quit if it - * agreed to quit in response to a ::quit_requested signal. However, - * this is not guaranteed; in some situations the session manager - * may decide to end the session without giving applications a - * chance to object. - **/ - signals[QUIT] = - g_signal_new ("quit", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EggSMClientClass, quit), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); -} - -static gboolean sm_client_disable = FALSE; -static char *sm_client_state_file = NULL; -static char *sm_client_id = NULL; -static char *sm_config_prefix = NULL; - -static gboolean -sm_client_post_parse_func (GOptionContext *context, - GOptionGroup *group, - gpointer data, - GError **error) -{ - EggSMClient *client = egg_sm_client_get (); - - if (sm_client_id == NULL) - { - const gchar *desktop_autostart_id; - - desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID"); - - if (desktop_autostart_id != NULL) - sm_client_id = g_strdup (desktop_autostart_id); - } - - /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to - * use the same client id. */ - g_unsetenv ("DESKTOP_AUTOSTART_ID"); - - if (EGG_SM_CLIENT_GET_CLASS (client)->startup) - EGG_SM_CLIENT_GET_CLASS (client)->startup (client, sm_client_id); - return TRUE; -} - -/** - * egg_sm_client_get_option_group: - * - * Creates a %GOptionGroup containing the session-management-related - * options. You should add this group to the application's - * %GOptionContext if you want to use #EggSMClient. - * - * Return value: the %GOptionGroup - **/ -GOptionGroup * -egg_sm_client_get_option_group (void) -{ - const GOptionEntry entries[] = { - { "sm-client-disable", 0, 0, - G_OPTION_ARG_NONE, &sm_client_disable, - N_("Disable connection to session manager"), NULL }, - { "sm-client-state-file", 0, 0, - G_OPTION_ARG_FILENAME, &sm_client_state_file, - N_("Specify file containing saved configuration"), N_("FILE") }, - { "sm-client-id", 0, 0, - G_OPTION_ARG_STRING, &sm_client_id, - N_("Specify session management ID"), N_("ID") }, - /* GnomeClient compatibility option */ - { "sm-disable", 0, G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_NONE, &sm_client_disable, - NULL, NULL }, - /* GnomeClient compatibility option. This is a dummy option that only - * exists so that sessions saved by apps with GnomeClient can be restored - * later when they've switched to EggSMClient. See bug #575308. - */ - { "sm-config-prefix", 0, G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_STRING, &sm_config_prefix, - NULL, NULL }, - { NULL } - }; - GOptionGroup *group; - - /* Use our own debug handler for the "EggSMClient" domain. */ - g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, - egg_sm_client_debug_handler, NULL); - - group = g_option_group_new ("sm-client", - _("Session management options:"), - _("Show session management options"), - NULL, NULL); - g_option_group_add_entries (group, entries); - g_option_group_set_parse_hooks (group, NULL, sm_client_post_parse_func); - - return group; -} - -/** - * egg_sm_client_set_mode: - * @mode: an #EggSMClient mode - * - * Sets the "mode" of #EggSMClient as follows: - * - * %EGG_SM_CLIENT_MODE_DISABLED: Session management is completely - * disabled. The application will not even connect to the session - * manager. (egg_sm_client_get() will still return an #EggSMClient, - * but it will just be a dummy object.) - * - * %EGG_SM_CLIENT_MODE_NO_RESTART: The application will connect to - * the session manager (and thus will receive notification when the - * user is logging out, etc), but will request to not be - * automatically restarted with saved state in future sessions. - * - * %EGG_SM_CLIENT_MODE_NORMAL: The default. #EggSMCLient will - * function normally. - * - * This must be called before the application's main loop begins. - **/ -void -egg_sm_client_set_mode (EggSMClientMode mode) -{ - global_client_mode = mode; -} - -/** - * egg_sm_client_get_mode: - * - * Gets the global #EggSMClientMode. See egg_sm_client_set_mode() - * for details. - * - * Return value: the global #EggSMClientMode - **/ -EggSMClientMode -egg_sm_client_get_mode (void) -{ - return global_client_mode; -} - -/** - * egg_sm_client_get: - * - * Returns the master #EggSMClient for the application. - * - * On platforms that support saved sessions (ie, POSIX/X11), the - * application will only request to be restarted by the session - * manager if you call egg_set_desktop_file() to set an application - * desktop file. In particular, if the desktop file contains the key - * "X - * - * Return value: the master #EggSMClient. - **/ -EggSMClient * -egg_sm_client_get (void) -{ - if (!global_client) - { - if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED && - !sm_client_disable) - { -#if defined (GDK_WINDOWING_WIN32) - global_client = egg_sm_client_win32_new (); -#elif defined (GDK_WINDOWING_QUARTZ) - global_client = egg_sm_client_osx_new (); -#else - /* If both D-Bus and XSMP are compiled in, try XSMP first - * (since it supports state saving) and fall back to D-Bus - * if XSMP isn't available. - */ -# ifdef EGG_SM_CLIENT_BACKEND_XSMP - global_client = egg_sm_client_xsmp_new (); -# endif -# ifdef EGG_SM_CLIENT_BACKEND_DBUS - if (!global_client) - global_client = egg_sm_client_dbus_new (); -# endif -#endif - } - - /* Fallback: create a dummy client, so that callers don't have - * to worry about a %NULL return value. - */ - if (!global_client) - global_client = g_object_new (EGG_TYPE_SM_CLIENT, NULL); - } - - return global_client; -} - -/** - * egg_sm_client_is_resumed: - * @client: the client - * - * Checks whether or not the current session has been resumed from - * a previous saved session. If so, the application should call - * egg_sm_client_get_state_file() and restore its state from the - * returned #GKeyFile. - * - * Return value: %TRUE if the session has been resumed - **/ -gboolean -egg_sm_client_is_resumed (EggSMClient *client) -{ - g_return_val_if_fail (client == global_client, FALSE); - - return sm_client_state_file != NULL; -} - -/** - * egg_sm_client_get_state_file: - * @client: the client - * - * If the application was resumed by the session manager, this will - * return the #GKeyFile containing its state from the previous - * session. - * - * Note that other libraries and #EggSMClient itself may also store - * state in the key file, so if you call egg_sm_client_get_groups(), - * on it, the return value will likely include groups that you did not - * put there yourself. (It is also not guaranteed that the first - * group created by the application will still be the "start group" - * when it is resumed.) - * - * Return value: the #GKeyFile containing the application's earlier - * state, or %NULL on error. You should not free this key file; it - * is owned by @client. - **/ -GKeyFile * -egg_sm_client_get_state_file (EggSMClient *client) -{ - EggSMClientPrivate *priv = EGG_SM_CLIENT_GET_PRIVATE (client); - char *state_file_path; - GError *err = NULL; - - g_return_val_if_fail (client == global_client, NULL); - - if (!sm_client_state_file) - return NULL; - if (priv->state_file) - return priv->state_file; - - if (!strncmp (sm_client_state_file, "file://", 7)) - state_file_path = g_filename_from_uri (sm_client_state_file, NULL, NULL); - else - state_file_path = g_strdup (sm_client_state_file); - - priv->state_file = g_key_file_new (); - if (!g_key_file_load_from_file (priv->state_file, state_file_path, 0, &err)) - { - g_warning ("Could not load SM state file '%s': %s", - sm_client_state_file, err->message); - g_clear_error (&err); - g_key_file_free (priv->state_file); - priv->state_file = NULL; - } - - g_free (state_file_path); - return priv->state_file; -} - -/** - * egg_sm_client_set_restart_command: - * @client: the client - * @argc: the length of @argv - * @argv: argument vector - * - * Sets the command used to restart @client if it does not have a - * .desktop file that can be used to find its restart command. - * - * This can also be used when handling the ::save_state signal, to - * save the current state via an updated command line. (Eg, providing - * a list of filenames to open when the application is resumed.) - **/ -void -egg_sm_client_set_restart_command (EggSMClient *client, - int argc, - const char **argv) -{ - g_return_if_fail (EGG_IS_SM_CLIENT (client)); - - if (EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command) - EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command (client, argc, argv); -} - -/** - * egg_sm_client_set_discard_command: - * @client: the client - * @argc: the length of @argv - * @argv: argument vector - * - * Sets the command used to discard a custom state file if using - * egg_sm_client_set_restart_command(), which must be called before - * using this function. - **/ -void -egg_sm_client_set_discard_command (EggSMClient *client, - int argc, - const char **argv) -{ - g_return_if_fail (EGG_IS_SM_CLIENT (client)); - - if (EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command) - EGG_SM_CLIENT_GET_CLASS (client)->set_discard_command (client, argc, argv); -} - -/** - * egg_sm_client_will_quit: - * @client: the client - * @will_quit: whether or not the application is willing to quit - * - * This MUST be called in response to the ::quit_requested signal, to - * indicate whether or not the application is willing to quit. The - * application may call it either directly from the signal handler, or - * at some later point (eg, after asynchronously interacting with the - * user). - * - * If the application does not connect to ::quit_requested, - * #EggSMClient will call this method on its behalf (passing %TRUE - * for @will_quit). - * - * After calling this method, the application should wait to receive - * either ::quit_cancelled or ::quit. - **/ -void -egg_sm_client_will_quit (EggSMClient *client, - gboolean will_quit) -{ - g_return_if_fail (EGG_IS_SM_CLIENT (client)); - - if (EGG_SM_CLIENT_GET_CLASS (client)->will_quit) - EGG_SM_CLIENT_GET_CLASS (client)->will_quit (client, will_quit); -} - -/** - * egg_sm_client_end_session: - * @style: a hint at how to end the session - * @request_confirmation: whether or not the user should get a chance - * to confirm the action - * - * Requests that the session manager end the current session. @style - * indicates how the session should be ended, and - * @request_confirmation indicates whether or not the user should be - * given a chance to confirm the logout/reboot/shutdown. Both of these - * flags are merely hints though; the session manager may choose to - * ignore them. - * - * Return value: %TRUE if the request was sent; %FALSE if it could not - * be (eg, because it could not connect to the session manager). - **/ -gboolean -egg_sm_client_end_session (EggSMClientEndStyle style, - gboolean request_confirmation) -{ - EggSMClient *client = egg_sm_client_get (); - - g_return_val_if_fail (EGG_IS_SM_CLIENT (client), FALSE); - - if (EGG_SM_CLIENT_GET_CLASS (client)->end_session) - { - return EGG_SM_CLIENT_GET_CLASS (client)->end_session (client, style, - request_confirmation); - } - else - return FALSE; -} - -/* Signal-emitting callbacks from platform-specific code */ - -GKeyFile * -egg_sm_client_save_state (EggSMClient *client) -{ - GKeyFile *state_file; - char *group; - - g_return_val_if_fail (client == global_client, NULL); - - state_file = g_key_file_new (); - - g_debug ("Emitting save_state"); - g_signal_emit (client, signals[SAVE_STATE], 0, state_file); - g_debug ("Done emitting save_state"); - - group = g_key_file_get_start_group (state_file); - if (group) - { - g_free (group); - return state_file; - } - else - { - g_key_file_free (state_file); - return NULL; - } -} - -void -egg_sm_client_quit_requested (EggSMClient *client) -{ - g_return_if_fail (client == global_client); - - if (!g_signal_has_handler_pending (client, signals[QUIT_REQUESTED], 0, FALSE)) - { - g_debug ("Not emitting quit_requested because no one is listening"); - egg_sm_client_will_quit (client, TRUE); - return; - } - - g_debug ("Emitting quit_requested"); - g_signal_emit (client, signals[QUIT_REQUESTED], 0); - g_debug ("Done emitting quit_requested"); -} - -void -egg_sm_client_quit_cancelled (EggSMClient *client) -{ - g_return_if_fail (client == global_client); - - g_debug ("Emitting quit_cancelled"); - g_signal_emit (client, signals[QUIT_CANCELLED], 0); - g_debug ("Done emitting quit_cancelled"); -} - -void -egg_sm_client_quit (EggSMClient *client) -{ - g_return_if_fail (client == global_client); - - g_debug ("Emitting quit"); - g_signal_emit (client, signals[QUIT], 0); - g_debug ("Done emitting quit"); - - /* FIXME: should we just call gtk_main_quit() here? */ -} - -static void -egg_sm_client_debug_handler (const char *log_domain, - GLogLevelFlags log_level, - const char *message, - gpointer user_data) -{ - static int debug = -1; - - if (debug < 0) - debug = (g_getenv ("EGG_SM_CLIENT_DEBUG") != NULL); - - if (debug) - g_log_default_handler (log_domain, log_level, message, NULL); -} diff --git a/src/eggsmclient.h b/src/eggsmclient.h deleted file mode 100644 index f13bcecc..00000000 --- a/src/eggsmclient.h +++ /dev/null @@ -1,123 +0,0 @@ -/* eggsmclient.h - * Copyright (C) 2007 Novell, Inc. - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __EGG_SM_CLIENT_H__ -#define __EGG_SM_CLIENT_H__ - -#include <glib-object.h> - -G_BEGIN_DECLS - -#define EGG_TYPE_SM_CLIENT (egg_sm_client_get_type ()) -#define EGG_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT, EggSMClient)) -#define EGG_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT, EggSMClientClass)) -#define EGG_IS_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT)) -#define EGG_IS_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT)) -#define EGG_SM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT, EggSMClientClass)) - -typedef struct _EggSMClient EggSMClient; -typedef struct _EggSMClientClass EggSMClientClass; -typedef struct _EggSMClientPrivate EggSMClientPrivate; - -typedef enum { - EGG_SM_CLIENT_END_SESSION_DEFAULT, - EGG_SM_CLIENT_LOGOUT, - EGG_SM_CLIENT_REBOOT, - EGG_SM_CLIENT_SHUTDOWN -} EggSMClientEndStyle; - -typedef enum { - EGG_SM_CLIENT_MODE_DISABLED, - EGG_SM_CLIENT_MODE_NO_RESTART, - EGG_SM_CLIENT_MODE_NORMAL -} EggSMClientMode; - -struct _EggSMClient -{ - GObject parent; - -}; - -struct _EggSMClientClass -{ - GObjectClass parent_class; - - /* signals */ - void (*save_state) (EggSMClient *client, - GKeyFile *state_file); - - void (*quit_requested) (EggSMClient *client); - void (*quit_cancelled) (EggSMClient *client); - void (*quit) (EggSMClient *client); - - /* virtual methods */ - void (*startup) (EggSMClient *client, - const char *client_id); - void (*set_restart_command) (EggSMClient *client, - int argc, - const char **argv); - void (*set_discard_command) (EggSMClient *client, - int argc, - const char **argv); - void (*will_quit) (EggSMClient *client, - gboolean will_quit); - gboolean (*end_session) (EggSMClient *client, - EggSMClientEndStyle style, - gboolean request_confirmation); - - /* Padding for future expansion */ - void (*_egg_reserved1) (void); - void (*_egg_reserved2) (void); - void (*_egg_reserved3) (void); - void (*_egg_reserved4) (void); -}; - -GType egg_sm_client_get_type (void) G_GNUC_CONST; - -GOptionGroup *egg_sm_client_get_option_group (void); - -/* Initialization */ -void egg_sm_client_set_mode (EggSMClientMode mode); -EggSMClientMode egg_sm_client_get_mode (void); -EggSMClient *egg_sm_client_get (void); - -/* Resuming a saved session */ -gboolean egg_sm_client_is_resumed (EggSMClient *client); -GKeyFile *egg_sm_client_get_state_file (EggSMClient *client); - -/* Alternate means of saving state */ -void egg_sm_client_set_restart_command (EggSMClient *client, - int argc, - const char **argv); -void egg_sm_client_set_discard_command (EggSMClient *client, - int argc, - const char **argv); - -/* Handling "quit_requested" signal */ -void egg_sm_client_will_quit (EggSMClient *client, - gboolean will_quit); - -/* Initiate a logout/reboot/shutdown */ -gboolean egg_sm_client_end_session (EggSMClientEndStyle style, - gboolean request_confirmation); - -G_END_DECLS - - -#endif /* __EGG_SM_CLIENT_H__ */ diff --git a/src/gtkentryaction.c b/src/gtkentryaction.c deleted file mode 100644 index 25378762..00000000 --- a/src/gtkentryaction.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Copyright (C) 2003, 2004 Marco Pesenti Gritti - * Copyright (C) 2003, 2004 Christian Persch - * - * 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. - * - * $Id$ - */ - -#include "config.h" - -#include "gtkentryaction.h" - -#include <gtk/gtk.h> - -#define GTK_ENTRY_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GTK_TYPE_ENTRY_ACTION, GtkEntryActionPrivate)) - -struct _GtkEntryActionPrivate -{ - char *text; - gboolean editable; - GtkWidget *entry_widget; -}; - -static void gtk_entry_action_init (GtkEntryAction *action); -static void gtk_entry_action_class_init (GtkEntryActionClass *class); -static void changed_cb (GtkEntry *entry, - GtkEntryAction *action); - -enum -{ - PROP_0, - PROP_TEXT, - PROP_EDITABLE, -}; - -static GObjectClass *parent_class = NULL; - -GType -gtk_entry_action_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) - { - static const GTypeInfo type_info = - { - sizeof (GtkEntryActionClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gtk_entry_action_class_init, - (GClassFinalizeFunc) NULL, - NULL, - sizeof (GtkEntryAction), - 0, /* n_preallocs */ - (GInstanceInitFunc) gtk_entry_action_init, - }; - - type = g_type_register_static (GTK_TYPE_ACTION, - "GtkEntryAction", - &type_info, 0); - } - - return type; -} - -static GtkWidget * -gtk_entry_action_create_tool_item (GtkAction *action) -{ - GtkToolItem *tool_item; - GtkWidget *entry; - GtkWidget *box; - GtkWidget *label; - GtkEntryAction *action_cast = (GtkEntryAction *)action; - - tool_item = gtk_tool_item_new (); - box = gtk_hbox_new (FALSE, 6); - label = gtk_label_new (""); - entry = gtk_entry_new (); - action_cast->priv->entry_widget = entry; - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); - gtk_container_add (GTK_CONTAINER (tool_item), box); - gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); - gtk_widget_show (entry); - gtk_widget_show (box); - - g_object_set_data (G_OBJECT (tool_item), "label", label); - g_object_set_data (G_OBJECT (tool_item), "entry", entry); - - return GTK_WIDGET (tool_item); -} - -static gboolean -check_widget (GtkWidget *widget) -{ - return GTK_IS_TOOL_ITEM (widget) && - GTK_IS_LABEL (g_object_get_data (G_OBJECT (widget), "label")) && - GTK_IS_ENTRY (g_object_get_data (G_OBJECT (widget), "entry")); -} - -static void -sync_label (GtkAction *gaction, - GParamSpec *pspec, - GtkWidget *proxy) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (gaction); - GtkToolItem *item = GTK_TOOL_ITEM (proxy); - GtkLabel *label = GTK_LABEL (g_object_get_data (G_OBJECT (item), "label")); - char *text = NULL; - - g_object_get (action, "label", &text, NULL); - gtk_label_set_text_with_mnemonic (label, text); - if (text && *text) - gtk_widget_show (GTK_WIDGET (label)); - else - gtk_widget_hide (GTK_WIDGET (label)); - g_free (text); -} - -static void -sync_text (GtkAction *gaction, - GParamSpec *pspec, - GtkWidget *proxy) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (gaction); - GtkToolItem *item = GTK_TOOL_ITEM (proxy); - GtkEntry *entry = GTK_ENTRY (g_object_get_data (G_OBJECT (item), "entry")); - - g_signal_handlers_block_by_func (entry, G_CALLBACK (changed_cb), action); - gtk_entry_set_text (entry, action->priv->text); - g_signal_handlers_unblock_by_func (entry, G_CALLBACK (changed_cb), action); -} - -static void -sync_editable (GtkAction *gaction, - GParamSpec *pspec, - GtkWidget *proxy) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (gaction); - GtkToolItem *item = GTK_TOOL_ITEM (proxy); - GtkEntry *entry = GTK_ENTRY (g_object_get_data (G_OBJECT (item), "entry")); - - gtk_editable_set_editable (GTK_EDITABLE (entry), action->priv->editable); -} - -static void -changed_cb (GtkEntry *entry, GtkEntryAction *action) -{ - const char *text; - GtkWidget *proxy = GTK_WIDGET (entry)->parent; - - text = gtk_entry_get_text (entry); - - g_signal_handlers_block_by_func (action, G_CALLBACK (sync_text), proxy); - gtk_entry_action_set_text (action, text); - g_signal_handlers_unblock_by_func (action, G_CALLBACK (sync_text), proxy); -} - - - -static void -connect_proxy (GtkAction *action, GtkWidget *proxy) -{ - if (check_widget (proxy)) - { - GtkToolItem *item = GTK_TOOL_ITEM (proxy); - GtkEntry *entry = GTK_ENTRY (g_object_get_data (G_OBJECT (item), "entry")); - - sync_label (action, NULL, proxy); - g_signal_connect_object (action, "notify::label", - G_CALLBACK (sync_label), proxy, 0); - sync_text (action, NULL, proxy); - g_signal_connect_object (action, "notify::text", - G_CALLBACK (sync_text), proxy, 0); - sync_editable (action, NULL, proxy); - g_signal_connect_object (action, "notify::editable", - G_CALLBACK (sync_editable), proxy, 0); - - g_signal_connect_object (entry, "activate", - G_CALLBACK (gtk_action_activate), action, - G_CONNECT_SWAPPED); - g_signal_connect_object (entry, "changed", - G_CALLBACK (changed_cb), action, 0); - } - - GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy); -} - -static void -disconnect_proxy (GtkAction *action, GtkWidget *proxy) -{ - GTK_ACTION_CLASS (parent_class)->disconnect_proxy (action, proxy); - - if (check_widget (proxy)) - { - GtkToolItem *item = GTK_TOOL_ITEM (proxy); - GtkEntry *entry = GTK_ENTRY (g_object_get_data (G_OBJECT (item), "entry")); - - g_signal_handlers_disconnect_matched (action, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, proxy); - g_signal_handlers_disconnect_matched (entry, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, action); - } -} - -static void -gtk_entry_action_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (object); - - switch (prop_id) - { - case PROP_TEXT: - gtk_entry_action_set_text (action, g_value_get_string (value)); - break; - case PROP_EDITABLE: - action->priv->editable = g_value_get_boolean (value); - break; - } -} - -static void -gtk_entry_action_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (object); - - switch (prop_id) - { - case PROP_TEXT: - g_value_set_string (value, gtk_entry_action_get_text (action)); - break; - case PROP_EDITABLE: - g_value_set_boolean (value, action->priv->editable); - break; - } -} - -static void -gtk_entry_action_finalize (GObject *object) -{ - GtkEntryAction *action = GTK_ENTRY_ACTION (object); - GtkEntryActionPrivate *priv = action->priv; - - g_free (priv->text); - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static void -gtk_entry_action_class_init (GtkEntryActionClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - GtkActionClass *action_class = GTK_ACTION_CLASS (class); - - parent_class = g_type_class_peek_parent (class); - - object_class->finalize = gtk_entry_action_finalize; - object_class->get_property = gtk_entry_action_get_property; - object_class->set_property = gtk_entry_action_set_property; - - action_class->create_tool_item = gtk_entry_action_create_tool_item; - action_class->connect_proxy = connect_proxy; - action_class->disconnect_proxy = disconnect_proxy; - - g_object_class_install_property (object_class, - PROP_TEXT, - g_param_spec_string ("text", - "Text", - "The text", - "", - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_EDITABLE, - g_param_spec_boolean ("editable", - "Editable", - "Editable", - TRUE, - G_PARAM_READWRITE)); - - g_type_class_add_private (object_class, sizeof (GtkEntryActionPrivate)); -} - -static void -gtk_entry_action_init (GtkEntryAction *action) -{ - action->priv = GTK_ENTRY_ACTION_GET_PRIVATE (action); - - action->priv->text = g_strdup (""); - action->priv->editable = TRUE; -} - -GtkAction * -gtk_entry_action_new (const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *stock_id) -{ - GtkAction *action; - - action = g_object_new (GTK_TYPE_ENTRY_ACTION, - "name", name, - "label", label, - "tooltip", tooltip, - "stock_id", stock_id, - NULL); - - return action; -} - -const char * -gtk_entry_action_get_text (GtkEntryAction *action) -{ - g_return_val_if_fail (GTK_IS_ENTRY_ACTION (action), ""); - - return action->priv->text; -} - -void -gtk_entry_action_set_text (GtkEntryAction *action, - const char *text) -{ - char *old_text; - g_return_if_fail (GTK_IS_ENTRY_ACTION (action)); - - old_text = action->priv->text; - action->priv->text = g_strdup (text); - g_free (old_text); - g_object_notify (G_OBJECT (action), "text"); -} - -gboolean -gtk_entry_action_has_focus (GtkEntryAction *action) -{ - g_return_val_if_fail (GTK_IS_ENTRY_ACTION (action), FALSE); - - return (GTK_WIDGET_HAS_FOCUS (action->priv->entry_widget)); - -} diff --git a/src/gtkentryaction.h b/src/gtkentryaction.h deleted file mode 100644 index 413fea60..00000000 --- a/src/gtkentryaction.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2003 Marco Pesenti Gritti - * - * 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. - * - * $Id$ - */ - -#ifndef GTK_ENTRY_ACTION_H -#define GTK_ENTRY_ACTION_H - -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_ENTRY_ACTION (gtk_entry_action_get_type ()) -#define GTK_ENTRY_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY_ACTION, GtkEntryAction)) -#define GTK_ENTRY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ENTRY_ACTION, GtkEntryActionClass)) -#define GTK_IS_ENTRY_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY_ACTION)) -#define GTK_IS_ENTRY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GTK_TYPE_ENTRY_ACTION)) -#define GTK_ENTRY_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_ENTRY_ACTION, GtkEntryActionClass)) - -typedef struct _GtkEntryAction GtkEntryAction; -typedef struct _GtkEntryActionPrivate GtkEntryActionPrivate; -typedef struct _GtkEntryActionClass GtkEntryActionClass; - -struct _GtkEntryAction -{ - GtkAction parent; - - /*< private >*/ - GtkEntryActionPrivate *priv; -}; - -struct _GtkEntryActionClass -{ - GtkActionClass parent_class; -}; - -GType gtk_entry_action_get_type (void); - -GtkAction *gtk_entry_action_new (const gchar *name, - const gchar *label, - const gchar *tooltip, - const gchar *stock_id); - -const char *gtk_entry_action_get_text (GtkEntryAction *action); - -void gtk_entry_action_set_text (GtkEntryAction *action, - const char *text); - -gboolean gtk_entry_action_has_focus (GtkEntryAction *action); -G_END_DECLS - -#endif diff --git a/src/yelp-application.c b/src/yelp-application.c index dda2214f..375e43c7 100644 --- a/src/yelp-application.c +++ b/src/yelp-application.c @@ -24,10 +24,15 @@ #include <config.h> #endif +#define G_SETTINGS_ENABLE_BACKEND + #include <dbus/dbus-glib-bindings.h> #include <dbus/dbus-glib.h> +#include <gio/gio.h> +#include <gio/gsettingsbackend.h> #include <glib/gi18n.h> #include <gtk/gtk.h> +#include <gdk/gdkx.h> #include "yelp-settings.h" #include "yelp-view.h" @@ -40,6 +45,12 @@ static gboolean editor_mode = FALSE; +enum { + BOOKMARKS_CHANGED, + LAST_SIGNAL +}; +static gint signals[LAST_SIGNAL] = { 0 }; + static const GOptionEntry entries[] = { {"editor-mode", 0, 0, G_OPTION_ARG_NONE, &editor_mode, N_("Turn on editor mode"), NULL}, { NULL } @@ -48,7 +59,7 @@ static const GOptionEntry entries[] = { typedef struct _YelpApplicationLoad YelpApplicationLoad; struct _YelpApplicationLoad { YelpApplication *app; - guint timestamp; + guint32 timestamp; gboolean new; }; @@ -57,12 +68,21 @@ static void yelp_application_class_init (YelpApplicationClass *k static void yelp_application_dispose (GObject *object); static void yelp_application_finalize (GObject *object); +static void application_setup (YelpApplication *app); static void application_uri_resolved (YelpUri *uri, YelpApplicationLoad *data); static gboolean application_window_deleted (YelpWindow *window, GdkEvent *event, YelpApplication *app); +GSettings * application_get_doc_settings (YelpApplication *app, + const gchar *doc_uri); static gboolean application_maybe_quit (YelpApplication *app); +static void application_adjust_font (GtkAction *action, + YelpApplication *app); +static void application_set_font_sensitivity (YelpApplication *app); + +static gboolean window_resized (YelpWindow *window, + YelpApplication *app); G_DEFINE_TYPE (YelpApplication, yelp_application, G_TYPE_OBJECT); #define GET_PRIV(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_APPLICATION, YelpApplicationPrivate)) @@ -72,22 +92,35 @@ struct _YelpApplicationPrivate { DBusGConnection *connection; GSList *windows; - GHashTable *windows_by_document; - gboolean show_text_cursor; - gboolean map_show_text_cursor; + GtkActionGroup *action_group; + + gchar *gsettings_context; /* static, do not free */ + GSettings *gsettings; + GHashTable *docsettings; +}; + +static const GtkActionEntry action_entries[] = { + { "LargerText", GTK_STOCK_ZOOM_IN, + N_("_Larger Text"), + "<Control>plus", + N_("Increase the size of the text"), + G_CALLBACK (application_adjust_font) }, + { "SmallerText", GTK_STOCK_ZOOM_OUT, + N_("_Smaller Text"), + "<Control>minus", + N_("Descrease the size of the text"), + G_CALLBACK (application_adjust_font) } }; static void yelp_application_init (YelpApplication *app) { YelpApplicationPrivate *priv = GET_PRIV (app); - - priv->windows_by_document = g_hash_table_new_full (g_str_hash, - g_str_equal, - g_free, - NULL); + priv->docsettings = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) g_object_unref); } static void @@ -98,6 +131,14 @@ yelp_application_class_init (YelpApplicationClass *klass) object_class->dispose = yelp_application_dispose; object_class->finalize = yelp_application_finalize; + signals[BOOKMARKS_CHANGED] = + g_signal_new ("bookmarks-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); + dbus_g_object_type_install_info (YELP_TYPE_APPLICATION, &dbus_glib_yelp_object_info); @@ -114,6 +155,16 @@ yelp_application_dispose (GObject *object) priv->connection = NULL; } + if (priv->action_group) { + g_object_unref (priv->action_group); + priv->action_group = NULL; + } + + if (priv->gsettings) { + g_object_unref (priv->gsettings); + priv->gsettings = NULL; + } + G_OBJECT_CLASS (yelp_application_parent_class)->dispose (object); } @@ -123,69 +174,100 @@ yelp_application_finalize (GObject *object) YelpApplicationPrivate *priv = GET_PRIV (object); g_hash_table_destroy (priv->windows_by_document); + g_hash_table_destroy (priv->docsettings); G_OBJECT_CLASS (yelp_application_parent_class)->finalize (object); } -/******************************************************************************/ - -void -yelp_application_adjust_font (YelpApplication *app, - gint adjust) +static void +application_setup (YelpApplication *app) { - GSList *cur; - YelpSettings *settings = yelp_settings_get_default (); - GParamSpec *spec = g_object_class_find_property ((GObjectClass *) YELP_SETTINGS_GET_CLASS (settings), - "font-adjustment"); - gint adjustment = yelp_settings_get_font_adjustment (settings); YelpApplicationPrivate *priv = GET_PRIV (app); + YelpSettings *settings = yelp_settings_get_default (); + GtkAction *action; - if (!G_PARAM_SPEC_INT (spec)) { - g_warning ("Expcected integer param spec for font-adjustment"); - return; + priv->windows_by_document = g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + NULL); + /* FIXME: is there a better way to see if there's a real backend in use? */ + if (g_getenv ("GSETTINGS_BACKEND") == NULL) { + gchar *keyfile = g_build_filename (g_get_user_config_dir (), + "yelp", "yelp.cfg", + NULL); + g_settings_backend_setup_keyfile ("yelp", keyfile); + priv->gsettings_context = "yelp"; + priv->gsettings = g_settings_new_with_context ("org.gnome.yelp", + priv->gsettings_context); + g_free (keyfile); } + else { + priv->gsettings = g_settings_new ("org.gnome.yelp"); + } + g_settings_bind (priv->gsettings, "show-cursor", + settings, "show-text-cursor", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (priv->gsettings, "font-adjustment", + settings, "font-adjustment", + G_SETTINGS_BIND_DEFAULT); + + priv->action_group = gtk_action_group_new ("ApplicationActions"); + gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (priv->action_group, + action_entries, G_N_ELEMENTS (action_entries), + app); + action = (GtkAction *) gtk_toggle_action_new ("ShowTextCursor", + _("Show Text _Cursor"), + NULL, NULL); + gtk_action_group_add_action_with_accel (priv->action_group, + action, "F7"); + g_settings_bind (priv->gsettings, "show-cursor", + action, "active", + G_SETTINGS_BIND_DEFAULT); + g_object_unref (action); + application_set_font_sensitivity (app); +} - adjustment += adjust; - yelp_settings_set_font_adjustment (settings, adjustment); - - for (cur = priv->windows; cur != NULL; cur = cur->next) { - YelpWindow *win = (YelpWindow *) cur->data; - GtkActionGroup *group = yelp_window_get_action_group (win); - GtkAction *larger, *smaller; - - larger = gtk_action_group_get_action (group, "LargerText"); - gtk_action_set_sensitive (larger, adjustment < ((GParamSpecInt *) spec)->maximum); +/******************************************************************************/ - smaller = gtk_action_group_get_action (group, "SmallerText"); - gtk_action_set_sensitive (smaller, adjustment > ((GParamSpecInt *) spec)->minimum); - } +GtkActionGroup * +yelp_application_get_action_group (YelpApplication *app) +{ + YelpApplicationPrivate *priv = GET_PRIV (app); + return priv->action_group; } -void -yelp_application_set_show_text_cursor (YelpApplication *app, - gboolean show) +static void +application_adjust_font (GtkAction *action, + YelpApplication *app) { - GSList *cur; - YelpSettings *settings = yelp_settings_get_default (); YelpApplicationPrivate *priv = GET_PRIV (app); + gint adjustment = g_settings_get_int (priv->gsettings, "font-adjustment"); + gint adjust = g_str_equal (gtk_action_get_name (action), "LargerText") ? 1 : -1; - /* We get callbacks in the loop. Ignore them. */ - if (priv->map_show_text_cursor) - return; + adjustment += adjust; + g_settings_set_int (priv->gsettings, "font-adjustment", adjustment); - priv->show_text_cursor = show; - yelp_settings_set_show_text_cursor (settings, show); - priv->map_show_text_cursor = TRUE; - for (cur = priv->windows; cur != NULL; cur = cur->next) { - YelpWindow *win = (YelpWindow *) cur->data; - GtkActionGroup *group = yelp_window_get_action_group (win); - GtkAction *action; + application_set_font_sensitivity (app); +} - action = gtk_action_group_get_action (group, "ShowTextCursor"); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show); +static void +application_set_font_sensitivity (YelpApplication *app) +{ + YelpApplicationPrivate *priv = GET_PRIV (app); + YelpSettings *settings = yelp_settings_get_default (); + GParamSpec *spec = g_object_class_find_property ((GObjectClass *) YELP_SETTINGS_GET_CLASS (settings), + "font-adjustment"); + gint adjustment = g_settings_get_int (priv->gsettings, "font-adjustment"); + if (!G_PARAM_SPEC_INT (spec)) { + g_warning ("Expcected integer param spec for font-adjustment"); + return; } - priv->map_show_text_cursor = FALSE; + gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, "LargerText"), + adjustment < ((GParamSpecInt *) spec)->maximum); + gtk_action_set_sensitive (gtk_action_group_get_action (priv->action_group, "SmallerText"), + adjustment > ((GParamSpecInt *) spec)->minimum); } /******************************************************************************/ @@ -287,6 +369,8 @@ yelp_application_run (YelpApplication *app, "/org/gnome/Yelp", G_OBJECT (app)); + application_setup (app); + yelp_settings_set_editor_mode (yelp_settings_get_default (), editor_mode); yelp_application_load_uri (app, uri, gtk_get_current_event_time (), NULL); @@ -299,7 +383,7 @@ yelp_application_run (YelpApplication *app, gboolean yelp_application_load_uri (YelpApplication *app, const gchar *uri, - guint timestamp, + guint32 timestamp, GError **error) { YelpApplicationLoad *data; @@ -308,6 +392,7 @@ yelp_application_load_uri (YelpApplication *app, data = g_new (YelpApplicationLoad, 1); data->app = app; data->timestamp = timestamp; + data->new = FALSE; yuri = yelp_uri_new (uri); @@ -323,19 +408,26 @@ void yelp_application_new_window (YelpApplication *app, const gchar *uri) { - YelpApplicationLoad *data; YelpUri *yuri; + yuri = yelp_uri_new (uri ? uri : DEFAULT_URI); + + yelp_application_new_window_uri (app, yuri); +} + +void +yelp_application_new_window_uri (YelpApplication *app, + YelpUri *uri) +{ + YelpApplicationLoad *data; data = g_new (YelpApplicationLoad, 1); data->app = app; + data->timestamp = gtk_get_current_event_time (); data->new = TRUE; - - yuri = yelp_uri_new (uri ? uri : DEFAULT_URI); - - g_signal_connect (yuri, "resolved", + g_signal_connect (uri, "resolved", G_CALLBACK (application_uri_resolved), data); - yelp_uri_resolve (yuri); + yelp_uri_resolve (uri); } static void @@ -355,22 +447,22 @@ application_uri_resolved (YelpUri *uri, window = g_hash_table_lookup (priv->windows_by_document, doc_uri); if (window == NULL) { - GtkActionGroup *group; - GtkAction *action; + gint width, height; + GSettings *settings = application_get_doc_settings (data->app, doc_uri); + + g_settings_get (settings, "geometry", "(ii)", &width, &height); window = yelp_window_new (data->app); + gtk_window_set_default_size (GTK_WINDOW (window), width, height); + g_signal_connect (window, "resized", G_CALLBACK (window_resized), data->app); priv->windows = g_slist_prepend (priv->windows, window); - group = yelp_window_get_action_group (window); - action = gtk_action_group_get_action (group, "ShowTextCursor"); - priv->map_show_text_cursor = TRUE; - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), - priv->show_text_cursor); - priv->map_show_text_cursor = FALSE; - if (!data->new) { g_hash_table_insert (priv->windows_by_document, doc_uri, window); g_object_set_data (G_OBJECT (window), "doc_uri", doc_uri); } + else { + g_free (doc_uri); + } g_signal_connect (window, "delete-event", G_CALLBACK (application_window_deleted), data->app); } @@ -387,11 +479,43 @@ application_uri_resolved (YelpUri *uri, if (gdk_window) gdk_x11_window_move_to_current_desktop (gdk_window); - gtk_window_present_with_time (GTK_WINDOW (window), GDK_CURRENT_TIME); + /* Ensure we actually present the window when invoked from the command + * line. This is somewhat evil, but the minor evil of Yelp stealing + * focus (after you requested it) is outweighed for me by the major + * evil of no help window appearing when you click Help. + */ + if (data->timestamp == 0) + data->timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (window))); + + gtk_window_present_with_time (GTK_WINDOW (window), data->timestamp); g_free (data); } +GSettings * +application_get_doc_settings (YelpApplication *app, const gchar *doc_uri) +{ + YelpApplicationPrivate *priv = GET_PRIV (app); + GSettings *settings = g_hash_table_lookup (priv->docsettings, doc_uri); + if (settings == NULL) { + gchar *tmp; + gchar *settings_path; + tmp = g_uri_escape_string (doc_uri, "", FALSE); + settings_path = g_strconcat ("/apps/yelp/documents/", tmp, "/", NULL); + g_free (tmp); + if (priv->gsettings_context) + settings = g_settings_new_with_context_and_path ("org.gnome.yelp.documents", + priv->gsettings_context, + settings_path); + else + settings = g_settings_new_with_path ("org.gnome.yelp.document", + settings_path); + g_hash_table_insert (priv->docsettings, g_strdup (doc_uri), settings); + g_free (settings_path); + } + return settings; +} + static gboolean application_window_deleted (YelpWindow *window, GdkEvent *event, @@ -455,6 +579,97 @@ packages_installed (DBusGProxy *proxy, } void +yelp_application_add_bookmark (YelpApplication *app, + const gchar *doc_uri, + const gchar *page_id, + const gchar *icon, + const gchar *title) +{ + GSettings *settings; + + settings = application_get_doc_settings (app, doc_uri); + + if (settings) { + GVariantBuilder builder; + GVariantIter *iter; + gchar *this_id, *this_icon, *this_title; + gboolean broken = FALSE; + g_settings_get (settings, "bookmarks", "a(sss)", &iter); + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(sss)")); + while (g_variant_iter_loop (iter, "(&s&s&s)", &this_id, &this_icon, &this_title)) { + if (g_str_equal (page_id, this_id)) { + /* Already have this bookmark */ + broken = TRUE; + break; + } + g_variant_builder_add (&builder, "(sss)", this_id, this_icon, this_title); + } + g_variant_iter_free (iter); + + if (!broken) { + GVariant *value; + g_variant_builder_add (&builder, "(sss)", page_id, icon, title); + value = g_variant_builder_end (&builder); + g_settings_set_value (settings, "bookmarks", value); + g_signal_emit (app, signals[BOOKMARKS_CHANGED], 0, doc_uri); + } + } +} + +void +yelp_application_update_bookmarks (YelpApplication *app, + const gchar *doc_uri, + const gchar *page_id, + const gchar *icon, + const gchar *title) +{ + GSettings *settings; + + settings = application_get_doc_settings (app, doc_uri); + + if (settings) { + GVariantBuilder builder; + GVariantIter *iter; + gchar *this_id, *this_icon, *this_title; + gboolean updated = FALSE; + g_settings_get (settings, "bookmarks", "a(sss)", &iter); + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(sss)")); + while (g_variant_iter_loop (iter, "(&s&s&s)", &this_id, &this_icon, &this_title)) { + if (g_str_equal (page_id, this_id)) { + if (icon && !g_str_equal (icon, this_icon)) { + this_icon = (gchar *) icon; + updated = TRUE; + } + if (title && !g_str_equal (title, this_title)) { + this_title = (gchar *) title; + updated = TRUE; + } + if (!updated) + break; + } + g_variant_builder_add (&builder, "(sss)", this_id, this_icon, this_title); + } + g_variant_iter_free (iter); + + if (updated) { + GVariant *value; + value = g_variant_builder_end (&builder); + g_settings_set_value (settings, "bookmarks", value); + g_signal_emit (app, signals[BOOKMARKS_CHANGED], 0, doc_uri); + } + } +} + +GVariant * +yelp_application_get_bookmarks (YelpApplication *app, + const gchar *doc_uri) +{ + GSettings *settings = application_get_doc_settings (app, doc_uri); + + return g_settings_get_value (settings, "bookmarks"); +} + +void yelp_application_install_package (YelpApplication *app, const gchar *pkg, const gchar *alt) @@ -475,3 +690,28 @@ yelp_application_install_package (YelpApplication *app, G_TYPE_STRING, "", G_TYPE_INVALID, G_TYPE_INVALID); } + +static gboolean +window_resized (YelpWindow *window, + YelpApplication *app) +{ + YelpApplicationPrivate *priv = GET_PRIV (app); + YelpUri *uri; + gchar *doc_uri; + GSettings *settings; + + uri = yelp_window_get_uri (window); + doc_uri = yelp_uri_get_document_uri (uri); + settings = g_hash_table_lookup (priv->docsettings, doc_uri); + + if (settings) { + gint width, height; + yelp_window_get_geometry (window, &width, &height); + g_settings_set (settings, "geometry", "(ii)", width, height); + } + + g_free (doc_uri); + g_object_unref (uri); + + return FALSE; +} diff --git a/src/yelp-application.h b/src/yelp-application.h index ed48bb00..bf664a95 100644 --- a/src/yelp-application.h +++ b/src/yelp-application.h @@ -25,6 +25,8 @@ #include <glib-object.h> +#include "yelp-uri.h" + #define YELP_TYPE_APPLICATION (yelp_application_get_type ()) #define YELP_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), YELP_TYPE_APPLICATION, YelpApplication)) #define YELP_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), YELP_TYPE_APPLICATION, YelpApplicationClass)) @@ -44,23 +46,32 @@ struct _YelpApplicationClass GObjectClass parent_class; }; -GType yelp_application_get_type (void); -YelpApplication* yelp_application_new (void); -gint yelp_application_run (YelpApplication *app, - gint argc, - gchar **argv); -gboolean yelp_application_load_uri (YelpApplication *app, - const gchar *uri, - guint timestamp, - GError **error); -void yelp_application_new_window (YelpApplication *app, - const gchar *uri); - -void yelp_application_adjust_font (YelpApplication *app, - gint adjust); - -void yelp_application_set_show_text_cursor (YelpApplication *app, - gboolean show); +GType yelp_application_get_type (void); +YelpApplication* yelp_application_new (void); +gint yelp_application_run (YelpApplication *app, + gint argc, + gchar **argv); +gboolean yelp_application_load_uri (YelpApplication *app, + const gchar *uri, + guint timestamp, + GError **error); +void yelp_application_new_window (YelpApplication *app, + const gchar *uri); +void yelp_application_new_window_uri (YelpApplication *app, + YelpUri *uri); +GtkActionGroup * yelp_application_get_action_group (YelpApplication *app); +void yelp_application_add_bookmark (YelpApplication *app, + const gchar *doc_uri, + const gchar *page_id, + const gchar *icon, + const gchar *title); +void yelp_application_update_bookmarks (YelpApplication *app, + const gchar *doc_uri, + const gchar *page_id, + const gchar *icon, + const gchar *title); +GVariant * yelp_application_get_bookmarks (YelpApplication *app, + const gchar *doc_uri); void yelp_application_install_package (YelpApplication *app, const gchar *pkg, const gchar *alt); diff --git a/src/yelp-base.c b/src/yelp-base.c deleted file mode 100644 index c702a996..00000000 --- a/src/yelp-base.c +++ /dev/null @@ -1,321 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> - * - * 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. - * - * Author: Mikael Hallendal <micke@imendio.com> - */ - -#include <config.h> - -#include <dbus/dbus-glib-bindings.h> -#include <gdk/gdkx.h> -#define SN_API_NOT_YET_FROZEN -#include <libsn/sn-launchee.h> - -#include <string.h> - -#include "yelp-window.h" -#include "yelp-settings.h" -#include "yelp-toc.h" -#include "yelp-base.h" -#include "yelp-bookmarks.h" -#include "server-bindings.h" - -gboolean main_running; - -#define YELP_BASE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_BASE, YelpBasePriv)) - -struct _YelpBasePriv { - GNode *toc_tree; - gboolean private_session; - - GList *index; - GSList *windows; -}; - -static void yelp_base_init (YelpBase *base); -static void yelp_base_class_init (YelpBaseClass *klass); -static void yelp_base_register_dbus (YelpBase *base); -static void yelp_base_new_window_cb (YelpWindow *window, - const gchar *uri, - YelpBase *base); -static void yelp_base_window_finalized_cb (YelpBase *base, - YelpWindow *window); - - -#define PARENT_TYPE G_TYPE_OBJECT -static GObjectClass *parent_class; - -GType -yelp_base_get_type (void) -{ - static GType base_type = 0; - - if (!base_type) { - static const GTypeInfo base_info = { - sizeof (YelpBaseClass), - NULL, - NULL, - (GClassInitFunc) yelp_base_class_init, - NULL, - NULL, - sizeof (YelpBase), - 0, - (GInstanceInitFunc) yelp_base_init, - }; - - base_type = g_type_register_static (G_TYPE_OBJECT, - "YelpBase", - &base_info, 0); - } - - return base_type; -} - -static void -yelp_base_init (YelpBase *base) -{ - YelpBasePriv *priv; - - base->priv = priv = YELP_BASE_GET_PRIVATE (base); - priv->toc_tree = g_node_new (NULL); - priv->index = NULL; - priv->windows = NULL; - yelp_bookmarks_init (); - yelp_settings_init (); - /* Init here to start processing before - * we even start the window */ - yelp_toc_new(); - -} - -static void -yelp_base_class_init (YelpBaseClass *klass) -{ - parent_class = g_type_class_peek (PARENT_TYPE); - - main_running = TRUE; - - g_type_class_add_private (klass, sizeof (YelpBasePriv)); -} - -gboolean -server_new_window (YelpBase *base, gchar *url, gchar *timestamp, - GError **error) -{ - GtkWidget *new_window; - - new_window = yelp_base_new_window (base, url, timestamp); - gtk_widget_show (new_window); - return TRUE; -} - -gboolean -server_get_url_list (YelpBase *server, gchar **urls, GError **error) -{ - gint len, i; - GSList *node; - const gchar *uri; - YelpBasePriv *priv; - - priv = server->priv; - - len = g_slist_length (priv->windows); - - node = priv->windows; - - uri = yelp_window_get_uri ((YelpWindow *) node->data); - *urls = g_strdup (uri); - node = node->next; - - for (i = 0; node; node = node->next, i++) { - gchar *list; - uri = yelp_window_get_uri ((YelpWindow *) node->data); - - list = g_strconcat (uri, ";", *urls, NULL); - g_free (*urls); - *urls = g_strdup (list); - g_free (list); - } - return TRUE; -} - -static void -yelp_base_new_window_cb (YelpWindow *window, const gchar *uri, - YelpBase *base) -{ - GtkWidget *new_window; - - g_return_if_fail (YELP_IS_WINDOW (window)); - g_return_if_fail (YELP_IS_BASE (base)); - - new_window = yelp_base_new_window (base, uri, NULL); - - gtk_widget_show (new_window); -} - -static void -yelp_base_window_finalized_cb (YelpBase *base, YelpWindow *window) -{ - YelpBasePriv *priv; - - g_return_if_fail (YELP_IS_BASE (base)); - - priv = base->priv; - - priv->windows = g_slist_remove (priv->windows, window); - - if (g_slist_length (priv->windows) == 0) { - main_running = FALSE; - gtk_main_quit (); - } -} - -YelpBase * -yelp_base_new (gboolean priv) -{ - YelpBase *base; - - base = g_object_new (YELP_TYPE_BASE, NULL); - if (!priv) - yelp_base_register_dbus (base); - base->priv->private_session = priv; - - return base; -} - -static void -sn_error_trap_push (SnDisplay *display, - Display *xdisplay) -{ - gdk_error_trap_push (); -} - -static void -sn_error_trap_pop (SnDisplay *display, - Display *xdisplay) -{ - gdk_error_trap_pop (); -} - -GtkWidget * -yelp_base_new_window (YelpBase *base, const gchar *uri, const gchar *startup_id) -{ - YelpBasePriv *priv; - GtkWidget *window; - SnDisplay *sn_display = NULL; - GdkScreen *screen = NULL; - GdkDisplay *display = NULL; - SnLauncheeContext *context = NULL; - - g_return_val_if_fail (YELP_IS_BASE (base), NULL); - - priv = base->priv; - - window = yelp_window_new (priv->toc_tree, priv->index); - gtk_widget_realize (GTK_WIDGET (window)); - - if (startup_id) { - screen = gtk_window_get_screen (GTK_WINDOW (window)); - display = gdk_screen_get_display (screen); - - sn_display = - sn_display_new (gdk_x11_display_get_xdisplay (display), - sn_error_trap_push, sn_error_trap_pop); - context = sn_launchee_context_new (sn_display, - gdk_screen_get_number (screen), - startup_id); - if (strncmp (sn_launchee_context_get_startup_id (context), - "_TIME", 5) != 0) - sn_launchee_context_setup_window (context, - GDK_WINDOW_XWINDOW (window->window)); - - if (sn_launchee_context_get_id_has_timestamp (context)) { - gulong time; - - time = sn_launchee_context_get_timestamp (context); - gdk_x11_window_set_user_time (window->window, time); - } - } - - priv->windows = g_slist_prepend (priv->windows, window); - - g_object_weak_ref (G_OBJECT (window), - (GWeakNotify) yelp_base_window_finalized_cb, - base); - - g_signal_connect (window, "new_window_requested", - G_CALLBACK (yelp_base_new_window_cb), - base); - - gtk_widget_show (window); - - if (uri && uri[0] != '\0') - yelp_window_load (YELP_WINDOW (window), uri); - else - yelp_window_load (YELP_WINDOW (window), "x-yelp-toc:"); - - if (context) { - sn_launchee_context_complete (context); - sn_launchee_context_unref (context); - sn_display_unref (sn_display); - } - - return window; -} - -static void -yelp_base_register_dbus (YelpBase *base) -{ - GError *error = NULL; - DBusGProxy *driver_proxy; - YelpBaseClass *klass = YELP_BASE_GET_CLASS (base); - guint request_ret; - YelpBasePriv *priv; - - priv = base->priv; - - klass->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (klass->connection == NULL) { - g_warning("Unable to connect to dbus: %s", error->message); - g_error_free (error); - return; - } - - dbus_g_object_type_install_info (YELP_TYPE_BASE, - &dbus_glib_server_object_object_info); - - dbus_g_connection_register_g_object (klass->connection, - "/org/gnome/YelpService", - G_OBJECT (base)); - - driver_proxy = dbus_g_proxy_new_for_name (klass->connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - - if(!org_freedesktop_DBus_request_name (driver_proxy, - "org.gnome.YelpService", - 0, &request_ret, - &error)) { - g_warning("Unable to register service: %s", error->message); - g_error_free (error); - } - g_object_unref (driver_proxy); - -} diff --git a/src/yelp-base.h b/src/yelp-base.h deleted file mode 100644 index e5ac0e7c..00000000 --- a/src/yelp-base.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2001 Mikael Hallendal <micke@imendio.com> - * - * 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. - * - * Author: Mikael Hallendal <micke@imendio.com> - */ - -#ifndef __YELP_BASE_H__ -#define __YELP_BASE_H__ - -#include <dbus/dbus-glib.h> - - -typedef struct _YelpBase YelpBase; -typedef struct _YelpBaseClass YelpBaseClass; -typedef struct _YelpBasePriv YelpBasePriv; - -#define YELP_TYPE_BASE (yelp_base_get_type ()) -#define YELP_BASE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_BASE, YelpBase)) -#define YELP_BASE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_BASE, YelpBaseClass)) -#define YELP_IS_BASE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_BASE)) -#define YELP_IS_BASE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_BASE)) -#define YELP_BASE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_BASE, YelpBaseClass)) - - -struct _YelpBase { - GObject parent; - - YelpBasePriv *priv; -}; - -struct _YelpBaseClass { - GObjectClass parent_class; - - DBusGConnection *connection; -}; - -GType yelp_base_get_type (void); -YelpBase * yelp_base_new (gboolean priv); - -GtkWidget * yelp_base_new_window (YelpBase *base, - const gchar *uri, - const gchar *timestamp); -gboolean server_new_window (YelpBase *server, - gchar *url, - gchar *timestamp, - GError **error); -gboolean server_get_url_list (YelpBase *server, - gchar **urls, - GError **error); - -#endif /* __YELP_BASE_H__ */ diff --git a/src/yelp-bookmarks.c b/src/yelp-bookmarks.c deleted file mode 100644 index de66c1b9..00000000 --- a/src/yelp-bookmarks.c +++ /dev/null @@ -1,1154 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2003 Shaun McCance <shaunm@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. - * - * Author: Shaun McCance <shaunm@gnome.org> - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "yelp-bookmarks.h" -#include "yelp-utils.h" -#include "yelp-window.h" -#include "yelp-debug.h" - -#include <string.h> -#include <gtk/gtk.h> -#include <gdk/gdkkeysyms.h> -#include <libxml/parser.h> -#include <libxml/parserInternals.h> -#include <libxml/xpath.h> -#include <libxml/xpathInternals.h> -#include <libxml/xmlwriter.h> - -#define COL_NAME 0 -#define COL_LABEL 1 -#define COL_EDIT 2 -#define COL_HEADER 3 -#define TOC_PATH "ui/menubar/BookmarksMenu/BookmarksTOC" -#define DOC_PATH "ui/menubar/BookmarksMenu/BookmarksDOC" -#define BK_CONFIG_BK_GROUP "Bookmarks" -#define BK_CONFIG_WIDTH "width" -#define BK_CONFIG_HEIGHT "height" -#define BK_CONFIG_WIDTH_DEFAULT 360 -#define BK_CONFIG_HEIGHT_DEFAULT 360 - -static GSList *windows; -static GtkTreeStore *actions_store; -static gchar *dup_title; - -static GtkWidget *bookmarks_dialog = NULL; -static GtkWidget *edit_open_button = NULL; -static GtkWidget *edit_rename_button = NULL; -static GtkWidget *edit_remove_button = NULL; - - -static gboolean have_toc = FALSE; -static gboolean have_doc = FALSE; -static GtkTreeIter toc_iter; -static GtkTreeIter doc_iter; - -typedef struct _YelpWindowData YelpWindowData; -struct _YelpWindowData { - YelpWindow *window; - guint merge_id; - GtkActionGroup *toc_actions; - GtkActionGroup *doc_actions; -}; - -static const char ui_description[] = - "<ui>" - " <popup>" - " <menuitem action='OpenName'/>" - " <separator/>" - " <menuitem action='EditName'/>" - " <menuitem action='DeleteName'/>" - " </popup>" - "</ui>"; - -static void window_add_bookmark (YelpWindowData *window, - gchar *name, - const gchar *label); -static void bookmarks_add_bookmark (const gchar *uri, - const gchar *title, - gboolean save); -static void bookmark_add_response_cb (GtkDialog *dialog, - gint id, - gchar *uri); -static void window_remove_bookmark_menu(YelpWindowData *data); -static void window_remove_action (YelpWindowData *data, - gchar *name); -static gboolean bookmarks_unregister (YelpWindow *window, - GdkEvent *event, - gpointer user_data); -static void action_activated_cb (GtkActionGroup *group, - GtkAction *action, - YelpWindowData *data); -static void bookmarks_rebuild_menus (void); -static void bookmarks_key_event_cb (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data); -static void bookmarks_open_button_cb (GtkWidget *widget, - GtkTreeView *view); -static void bookmarks_rename_button_cb (GtkWidget *widget, - GtkTreeView *view); -static void bookmarks_remove_button_cb (GtkWidget *widget, - GtkTreeView *view); -static void bookmarks_ensure_valid (void); -static gboolean bookmarks_read (const gchar *filename); - -static gboolean bookmarks_dup_finder (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer data); -static void bookmarks_open_cb (GtkTreeView *view, - GtkTreePath *path, - GtkTreeViewColumn *col, - gpointer user_data); -static void bookmarks_cell_edited_cb (GtkCellRendererText *cell, - const gchar *path_string, - const gchar *new_title, - gpointer user_data); -static void bookmarks_popup_menu (GtkWidget *widget, - GdkEventButton *event); -static void bookmarks_menu_edit_cb (GtkAction *action, - GtkWidget *widget); -static void bookmarks_menu_remove_cb (GtkAction *action, - GtkWidget *widget); -static void bookmarks_menu_open_cb (GtkAction *action, - GtkWidget *widget); -static gboolean bookmarks_button_press_cb (GtkWidget *widget, - GdkEventButton *event); -static gboolean bookmarks_configure_cb (GtkWidget *widget, - GdkEventConfigure *event, - gpointer data); -static void selection_changed_cb (GtkTreeSelection *selection, - gpointer data); - -static const GtkActionEntry popup_entries[] = { - { "OpenName", GTK_STOCK_OPEN, - N_("Open Bookmark in New Window"), - NULL, NULL, - G_CALLBACK (bookmarks_menu_open_cb)}, - { "EditName", NULL, - N_("Rename Bookmark"), - NULL, NULL, - G_CALLBACK (bookmarks_menu_edit_cb)}, - { "DeleteName", GTK_STOCK_REMOVE, - N_("Remove Bookmark"), - NULL, NULL, - G_CALLBACK (bookmarks_menu_remove_cb)} -}; - - -void -yelp_bookmarks_init (void) -{ - gchar *filename = NULL; - const gchar *override; - - windows = NULL; - actions_store = gtk_tree_store_new (4, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_BOOLEAN, - G_TYPE_BOOLEAN); - - override = g_getenv ("GNOME22_USER_DIR"); - - if (override) - filename = g_build_filename (override, "yelp-bookmarks.xbel", NULL); - else - filename = g_build_filename (g_get_home_dir (), ".gnome2", - "yelp-bookmarks.xbel", NULL); - - if (g_file_test (filename, G_FILE_TEST_EXISTS)) - bookmarks_read (filename); - - g_free (filename); -} - -void -yelp_bookmarks_register (YelpWindow *window) -{ - GtkUIManager *ui_manager; - YelpWindowData *data; - GtkTreeIter top_iter, sub_iter; - gboolean top_valid, sub_valid; - - ui_manager = yelp_window_get_ui_manager (window); - - g_signal_connect (window, "delete-event", - G_CALLBACK (bookmarks_unregister), NULL); - - data = g_new0 (YelpWindowData, 1); - data->window = window; - data->toc_actions = gtk_action_group_new ("BookmarksTOC"); - data->doc_actions = gtk_action_group_new ("BookmarksDOC"); - data->merge_id = gtk_ui_manager_new_merge_id(ui_manager); - - gtk_ui_manager_insert_action_group (ui_manager, data->toc_actions, 1); - gtk_ui_manager_insert_action_group (ui_manager, data->doc_actions, 2); - - g_signal_connect (data->toc_actions, - "post-activate", - G_CALLBACK (action_activated_cb), - data); - g_signal_connect (data->doc_actions, - "post-activate", - G_CALLBACK (action_activated_cb), - data); - - top_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (actions_store), - &top_iter); - while (top_valid) { - if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &top_iter)) { - sub_valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (actions_store), - &sub_iter, &top_iter); - while (sub_valid) { - gchar *label, *name; - gtk_tree_model_get (GTK_TREE_MODEL (actions_store), &sub_iter, - COL_NAME, &name, - COL_LABEL, &label, - -1); - window_add_bookmark (data, name, label); - g_free (name); - g_free (label); - - sub_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &sub_iter); - } - } - top_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &top_iter); - } - - windows = g_slist_append (windows, data); -} - -static void -bookmarks_ensure_valid (void) -{ - if (have_toc && - !gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &toc_iter)) { - gtk_tree_store_remove (actions_store, &toc_iter); - have_toc = FALSE; - } - if (have_doc && - !gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &doc_iter)) { - gtk_tree_store_remove (actions_store, &doc_iter); - have_doc = FALSE; - } -} - -static gboolean -bookmarks_dup_finder (GtkTreeModel *model, GtkTreePath *path, - GtkTreeIter *iter, gpointer data) -{ - gchar *uri = data; - gchar *current_uri; - - gtk_tree_model_get (model, iter, - COL_NAME, ¤t_uri, - -1); - - if (current_uri && g_str_equal (current_uri, uri)) { - gtk_tree_model_get (model, iter, - COL_LABEL, &dup_title, - -1); - g_free (current_uri); - return TRUE; - } - - g_free (current_uri); - return FALSE; -} - - -void -yelp_bookmarks_add (const gchar *uri, YelpWindow *window) -{ - GtkBuilder *builder; - GError *error = NULL; - GtkWidget *dialog; - GtkEntry *entry; - gchar *title; - gchar *dup_uri; - - title = (gchar *) gtk_window_get_title (GTK_WINDOW (window)); - dup_uri = g_strdup (uri); - - if (dup_title) - g_free (dup_title); - dup_title = NULL; - gtk_tree_model_foreach (GTK_TREE_MODEL (actions_store), - bookmarks_dup_finder, dup_uri); - if (dup_title) { - char *escaped_title, *markup; - - dialog = gtk_message_dialog_new_with_markup - (GTK_WINDOW (window), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - NULL); - - escaped_title = g_markup_printf_escaped - ("<b>%s</b>", dup_title); - markup = g_strdup_printf - (_("A bookmark titled %s already exists for this page."), - escaped_title); - gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup); - g_free (markup); - g_free (escaped_title); - - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - - g_free (dup_title); - dup_title = NULL; - return; - } - - builder = gtk_builder_new (); - if (!gtk_builder_add_from_file (builder, - DATADIR "/yelp/ui/yelp-bookmarks-add.ui", - &error)) { - g_warning ("Could not load builder file: %s", error->message); - g_error_free(error); - return; - } - - dialog = GTK_WIDGET (gtk_builder_get_object (builder, "add_bookmark_dialog")); - entry = GTK_ENTRY (gtk_builder_get_object (builder, "bookmark_title_entry")); - gtk_entry_set_text (entry, title); - gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); - - g_object_set_data (G_OBJECT (dialog), "title_entry", entry); - - g_signal_connect (G_OBJECT (dialog), - "response", - G_CALLBACK (bookmark_add_response_cb), - dup_uri); - - gtk_window_present (GTK_WINDOW (dialog)); -} - -static void -bookmark_add_response_cb (GtkDialog *dialog, gint id, gchar *uri) -{ - GtkEntry *entry; - gchar *title; - - if (id == GTK_RESPONSE_OK) { - entry = GTK_ENTRY (g_object_get_data (G_OBJECT (dialog), "title_entry")); - title = (gchar *) gtk_entry_get_text (entry); - - bookmarks_add_bookmark (uri, title, TRUE); - } - - g_free (uri); - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - -static void -bookmarks_add_bookmark (const gchar *uri, - const gchar *title, - gboolean save) -{ - GtkTreeIter iter; - GSList *cur; - gboolean tocQ; - - if (dup_title) - g_free (dup_title); - dup_title = NULL; - gtk_tree_model_foreach (GTK_TREE_MODEL (actions_store), - bookmarks_dup_finder, (gpointer) uri); - if (dup_title) { - GtkWidget *dialog; - dialog = gtk_message_dialog_new_with_markup - (NULL, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - _("A bookmark titled <b>%s</b> already exists for this page."), - dup_title); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - g_free (dup_title); - dup_title = NULL; - return; - } - - tocQ = g_str_has_prefix (uri, "x-yelp-toc:"); - if (tocQ) { - if (!have_toc) { - gchar *label = g_markup_printf_escaped ("<b>%s</b>", - _("Help Topics")); - gtk_tree_store_prepend (actions_store, &toc_iter, NULL); - gtk_tree_store_set (actions_store, &toc_iter, - COL_NAME, "", - COL_LABEL, label, - COL_EDIT, FALSE, - COL_HEADER, TRUE, - -1); - have_toc = TRUE; - g_free (label); - } - gtk_tree_store_append (actions_store, &iter, &toc_iter); - } else { - if (!have_doc) { - gchar *label = g_markup_printf_escaped ("<b>%s</b>", - _("Document Sections")); - gtk_tree_store_append (actions_store, &doc_iter, NULL); - gtk_tree_store_set (actions_store, &doc_iter, - COL_NAME, "", - COL_LABEL, label, - COL_EDIT, FALSE, - COL_HEADER, TRUE, - -1); - have_doc = TRUE; - g_free (label); - } - gtk_tree_store_append (actions_store, &iter, &doc_iter); - } - - gtk_tree_store_set (actions_store, &iter, - COL_NAME, uri, - COL_LABEL, title, - COL_EDIT, TRUE, - COL_HEADER, FALSE, - -1); - if (save) { - for (cur = windows; cur != NULL; cur = cur->next) { - window_add_bookmark ((YelpWindowData *) cur->data, (gchar *) uri, - title); - } - yelp_bookmarks_write (); - } -} - -static void -window_remove_bookmark_menu (YelpWindowData *data) -{ - GtkUIManager *ui_manager; - - ui_manager = yelp_window_get_ui_manager (data->window); - - gtk_ui_manager_remove_ui (ui_manager, data->merge_id); - - data->merge_id = gtk_ui_manager_new_merge_id (ui_manager); - - gtk_ui_manager_ensure_update (ui_manager); -} - -static void -window_remove_action (YelpWindowData *data, gchar *name) -{ - GtkAction *action = gtk_action_group_get_action (data->toc_actions, name); - if (action) { - gtk_action_group_remove_action (data->toc_actions, action); - } - else { - action = gtk_action_group_get_action (data->doc_actions, name); - if (action) { - gtk_action_group_remove_action (data->doc_actions, action); - } - } -} - -static void -bookmarks_rebuild_menus (void) -{ - GSList *cur; - GtkTreeIter top_iter, sub_iter; - gboolean top_valid, sub_valid; - - for (cur = windows; cur != NULL; cur = cur->next) { - window_remove_bookmark_menu ((YelpWindowData *) cur->data); - } - - top_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (actions_store), - &top_iter); - while (top_valid) { - if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &top_iter)) { - sub_valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (actions_store), - &sub_iter, &top_iter); - while (sub_valid) { - gchar *name, *label; - gtk_tree_model_get (GTK_TREE_MODEL (actions_store), &sub_iter, - COL_NAME, &name, - COL_LABEL, &label, - -1); - for (cur = windows; cur != NULL; cur = cur->next) { - window_remove_action (cur->data, name); - window_add_bookmark (cur->data, name, label); - } - g_free (name); - g_free (label); - - sub_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &sub_iter); - } - } - top_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &top_iter); - } - - yelp_bookmarks_write (); -} - -static void -bookmarks_key_event_cb (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data) -{ - GtkTreeView *view = GTK_TREE_VIEW (widget); - GtkTreePath *path; - GtkTreeSelection *sel; - GtkTreeModel *model; - GtkTreeIter iter; - - model = gtk_tree_view_get_model (view); - sel = gtk_tree_view_get_selection (view); - - if (gtk_tree_selection_get_selected (sel, &model, &iter)) { - path = gtk_tree_model_get_path (model, &iter); - - switch (event->keyval) { - case GDK_BackSpace: - case GDK_Delete: - if (!gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &iter)) { - gtk_tree_store_remove (actions_store, &iter); - bookmarks_ensure_valid (); - bookmarks_rebuild_menus (); - } - break; - case GDK_Return: - case GDK_KP_Enter: - bookmarks_open_cb (view, path, NULL, NULL); - break; - case GDK_Up: - gtk_tree_path_prev (path); - gtk_tree_selection_select_path (sel, path); - break; - case GDK_Down: - gtk_tree_path_next (path); - gtk_tree_selection_select_path (sel, path); - break; - default: - break; - } - } -} - -static void -bookmarks_open_cb (GtkTreeView *view, GtkTreePath *path, - GtkTreeViewColumn *col, gpointer user_data) -{ - GtkTreeIter iter; - gchar *name; - gchar *title; - GSList *cur; - YelpWindowData *data; - - gtk_tree_model_get_iter (GTK_TREE_MODEL (actions_store), &iter, path); - if (!gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &iter)) { - gtk_tree_model_get (GTK_TREE_MODEL (actions_store), &iter, - COL_NAME, &name, - COL_LABEL, &title, -1); - - cur = windows; - data = cur->data; - - g_signal_emit_by_name (data->window, "new_window_requested", name, NULL); - } -} - - -static void -bookmarks_cell_edited_cb (GtkCellRendererText *cell, const gchar *path_string, - const gchar *new_title, gpointer user_data) -{ - GtkTreePath *path = gtk_tree_path_new_from_string (path_string); - GtkTreeIter it; - - gtk_tree_model_get_iter (GTK_TREE_MODEL (actions_store), &it, path); - - gtk_tree_store_set (actions_store, &it, - COL_LABEL, new_title, -1); - bookmarks_rebuild_menus (); - -} - -void -yelp_bookmarks_edit (void) -{ - GtkBuilder *builder; - GError *error = NULL; - GtkTreeView *view; - GtkTreeSelection *select; - GtkCellRenderer *renderer; - gint width, height; - GKeyFile *keyfile; - GError *config_error = NULL; - gchar *config_path; - const gchar *override; - - if (!bookmarks_dialog) { - builder = gtk_builder_new (); - if (!gtk_builder_add_from_file (builder, - DATADIR "/yelp/ui/yelp-bookmarks.ui", - &error)) { - g_warning ("Could not load builder file: %s", error->message); - g_error_free(error); - return; - } - - bookmarks_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "bookmarks_dialog")); - view = GTK_TREE_VIEW (gtk_builder_get_object (builder, "bookmarks_view")); - keyfile = g_key_file_new(); - override = g_getenv ("GNOME22_USER_DIR"); - if (override) - config_path = g_build_filename (override, "yelp", NULL); - else - config_path = g_build_filename (g_get_home_dir(), - ".gnome2", "yelp", NULL); - - if( !g_key_file_load_from_file (keyfile, config_path, - G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, - &config_error) ) { - g_warning ("Failed to load config file: %s\n", config_error->message); - g_error_free (config_error); - - width = BK_CONFIG_WIDTH_DEFAULT; - height = BK_CONFIG_HEIGHT_DEFAULT; - } else { - width = g_key_file_get_integer (keyfile, BK_CONFIG_BK_GROUP, - BK_CONFIG_WIDTH, NULL); - height = g_key_file_get_integer (keyfile, BK_CONFIG_BK_GROUP, - BK_CONFIG_HEIGHT, NULL); - - if (width == 0) - width = BK_CONFIG_WIDTH_DEFAULT; - if (height == 0) - height = BK_CONFIG_HEIGHT_DEFAULT; - } - - g_free (config_path); - g_key_file_free (keyfile); - gtk_window_set_default_size (GTK_WINDOW (bookmarks_dialog), - width, height); - - g_signal_connect (G_OBJECT (bookmarks_dialog), "response", - G_CALLBACK (gtk_widget_hide), NULL); - g_signal_connect (G_OBJECT (bookmarks_dialog), "delete_event", - G_CALLBACK (gtk_widget_hide_on_delete), NULL); - - renderer = gtk_cell_renderer_text_new (); - - gtk_tree_view_insert_column_with_attributes - (view, -1, - NULL, renderer, - "markup", COL_LABEL, - "editable", COL_EDIT, - NULL); - gtk_tree_view_set_model (view, GTK_TREE_MODEL (actions_store)); - - select = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); - - gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); - gtk_tree_view_expand_all (GTK_TREE_VIEW (view)); - - g_signal_connect (G_OBJECT (view), "row-activated", - G_CALLBACK (bookmarks_open_cb), - NULL); - g_signal_connect (G_OBJECT (view), "key-press-event", - G_CALLBACK (bookmarks_key_event_cb), - NULL); - g_signal_connect (G_OBJECT (renderer), "edited", - G_CALLBACK (bookmarks_cell_edited_cb), NULL); - - edit_open_button = GTK_WIDGET (gtk_builder_get_object (builder, "open_button")); - g_signal_connect (G_OBJECT (edit_open_button), "clicked", - G_CALLBACK (bookmarks_open_button_cb), - view); - edit_rename_button = GTK_WIDGET (gtk_builder_get_object (builder, "rename_button")); - g_signal_connect (G_OBJECT (edit_rename_button), "clicked", - G_CALLBACK (bookmarks_rename_button_cb), - view); - edit_remove_button = GTK_WIDGET (gtk_builder_get_object (builder, "remove_button")); - g_signal_connect (G_OBJECT (edit_remove_button), "clicked", - G_CALLBACK (bookmarks_remove_button_cb), - view); - g_signal_connect (G_OBJECT (select), "changed", - G_CALLBACK (selection_changed_cb), - NULL); - g_signal_connect (G_OBJECT (view), "button-press-event", - G_CALLBACK (bookmarks_button_press_cb), - NULL); - g_signal_connect (G_OBJECT (bookmarks_dialog), "configure-event", - G_CALLBACK (bookmarks_configure_cb), - NULL); - } - - gtk_window_present (GTK_WINDOW (bookmarks_dialog)); -} - -static gboolean -bookmarks_configure_cb (GtkWidget *widget, GdkEventConfigure *event, - gpointer data) -{ - gint width, height; - GKeyFile *keyfile; - gchar *config_path, *sdata; - GError *config_error = NULL; - gsize config_size; - const gchar *override; - - gtk_window_get_size (GTK_WINDOW (widget), &width, &height); - - keyfile = g_key_file_new (); - override = g_getenv ("GNOME22_USER_DIR"); - if (override) - config_path = g_build_filename (override, "yelp", NULL); - else - config_path = g_build_filename (g_get_home_dir (), - ".gnome2", "yelp", NULL); - - g_key_file_set_integer (keyfile, BK_CONFIG_BK_GROUP, - BK_CONFIG_WIDTH, width); - g_key_file_set_integer (keyfile, BK_CONFIG_BK_GROUP, - BK_CONFIG_HEIGHT, height); - - sdata = g_key_file_to_data (keyfile, &config_size, NULL); - - if ( !g_file_set_contents (config_path, sdata, config_size, - &config_error) ) { - g_warning ("Failed to save config file: %s\n", config_error->message); - g_error_free (config_error); - } - - g_free (sdata); - g_free (config_path); - g_key_file_free (keyfile); - - return FALSE; -} - -static void -selection_changed_cb (GtkTreeSelection *selection, gpointer data) -{ - GtkTreeIter iter; - if (gtk_tree_selection_get_selected (selection, NULL, &iter) && - !gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &iter)) { - /*A row is highlighted - sensitise the various widgets*/ - gtk_widget_set_sensitive (GTK_WIDGET (edit_open_button), TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (edit_rename_button), TRUE); - gtk_widget_set_sensitive (GTK_WIDGET (edit_remove_button), TRUE); - } - else { - /*No row is highlighted - desensitise the various widgets*/ - gtk_widget_set_sensitive (GTK_WIDGET (edit_open_button), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (edit_rename_button), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (edit_remove_button), FALSE); - - } -} - - -static void -bookmarks_open_button_cb (GtkWidget *widget, GtkTreeView *view) -{ - GtkTreeIter iter; - GtkTreePath *path; - GtkTreeModel *model; - GtkTreeSelection *select; - - model = gtk_tree_view_get_model (view); - - select = gtk_tree_view_get_selection (view); - if (gtk_tree_selection_get_selected (select, NULL, &iter)) { - path = gtk_tree_model_get_path (model, &iter); - - bookmarks_open_cb (view, path, NULL, NULL); - - gtk_tree_path_free (path); - } -} - -static void -bookmarks_rename_button_cb (GtkWidget *widget, GtkTreeView *view) -{ - GtkTreePath *path; - GtkTreeSelection *sel; - GtkTreeIter iter; - GtkTreeViewColumn *col; - GtkTreeModel *model = GTK_TREE_MODEL (actions_store); - gboolean selection; - - sel = gtk_tree_view_get_selection (view); - selection = gtk_tree_selection_get_selected (sel, &model, &iter); - if (selection) { - path = gtk_tree_model_get_path (model, &iter); - col = gtk_tree_view_get_column (view, 0); - - gtk_tree_view_set_cursor (view, path, col, TRUE); - } -} - -static void -bookmarks_remove_button_cb (GtkWidget *widget, GtkTreeView *view) -{ - GtkTreeIter iter; - GtkTreeSelection *select; - - select = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); - if (gtk_tree_selection_get_selected (select, NULL, &iter)) { - - gtk_tree_store_remove (actions_store, &iter); - bookmarks_ensure_valid (); - bookmarks_rebuild_menus (); - } -} - -static void -bookmarks_popup_menu (GtkWidget *widget,GdkEventButton *event) -{ - GtkWidget *menu; - gint button, event_time; - GtkActionGroup *action_group; - GtkUIManager *ui_manager; - GError *error; - - action_group = gtk_action_group_new ("PopupActions"); - gtk_action_group_set_translation_domain (action_group, - GETTEXT_PACKAGE); - gtk_action_group_add_actions (action_group, popup_entries, - G_N_ELEMENTS (popup_entries), widget); - - ui_manager = gtk_ui_manager_new (); - gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); - - if (!gtk_ui_manager_add_ui_from_string (ui_manager, - ui_description, -1, &error)) { - g_message ("Building menus failed: %s", error->message); - g_error_free (error); - exit (EXIT_FAILURE); - } - menu = gtk_ui_manager_get_widget (ui_manager, "/popup"); - - if (event) { - button = event->button; - event_time = event->time; - } else { - button = 0; - event_time = gtk_get_current_event_time (); - } - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - button, event_time); - -} - -static void -bookmarks_menu_edit_cb (GtkAction *action, GtkWidget *widget) -{ - GtkTreeView *view = GTK_TREE_VIEW (widget); - GtkTreePath *path; - GtkTreeSelection *sel; - GtkTreeIter iter; - GtkTreeViewColumn *col; - GtkTreeModel *model = GTK_TREE_MODEL (actions_store); - - sel = gtk_tree_view_get_selection (view); - if (gtk_tree_selection_get_selected (sel, &model, &iter)) { - path = gtk_tree_model_get_path (model, &iter); - col = gtk_tree_view_get_column (view, 0); - - gtk_tree_view_set_cursor (view, path, col, TRUE); - } -} - -static void -bookmarks_menu_remove_cb (GtkAction *action, GtkWidget *widget) -{ - GtkTreeView *view = GTK_TREE_VIEW (widget); - GtkTreeSelection *sel; - GtkTreeIter iter; - - sel = gtk_tree_view_get_selection (view); - if (gtk_tree_selection_get_selected (sel, NULL, &iter)) { - - gtk_tree_store_remove (actions_store, &iter); - bookmarks_ensure_valid (); - bookmarks_rebuild_menus (); - } -} - -static void -bookmarks_menu_open_cb (GtkAction *action, GtkWidget *widget) -{ - GtkTreeView *view = GTK_TREE_VIEW (widget); - GtkTreeSelection *sel = gtk_tree_view_get_selection (view); - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL (actions_store); - GtkTreePath *path; - - if (gtk_tree_selection_get_selected (sel, &model, &iter)) { - path = gtk_tree_model_get_path (model, &iter); - - bookmarks_open_cb (view, path, NULL, NULL); - } -} - -static gboolean -bookmarks_button_press_cb (GtkWidget *widget, GdkEventButton *event) -{ - GtkTreeView *view = GTK_TREE_VIEW (widget); - GtkTreeSelection *sel = gtk_tree_view_get_selection (view); - gboolean selection; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL (actions_store); - gboolean editable; - - selection = gtk_tree_selection_get_selected (sel, - &model, - &iter); - if (selection) { - gtk_tree_model_get (GTK_TREE_MODEL (actions_store), &iter, - COL_EDIT, &editable, -1); - if (event->button == 3 && event->type == GDK_BUTTON_PRESS && - editable) { - bookmarks_popup_menu (widget, event); - return TRUE; - } - } - return FALSE; -} - - -void -yelp_bookmarks_write (void) -{ - xmlTextWriterPtr file; - GtkTreeIter top_iter, sub_iter; - gboolean top_valid, sub_valid; - gchar *filename; - const gchar *override; - - override = g_getenv ("GNOME22_USER_DIR"); - - if (override) - filename = g_build_filename (override, "yelp-bookmarks.xbel", NULL); - else - filename = g_build_filename (g_get_home_dir (), ".gnome2", - "yelp-bookmarks.xbel", NULL); - - file = xmlNewTextWriterFilename (filename, - 0); - if(!file) { - g_warning ("Could not create bookmark file %s", filename); - return; - } - - xmlTextWriterStartDocument (file, NULL, NULL, NULL); - xmlTextWriterStartElement (file, BAD_CAST "xbel"); - xmlTextWriterWriteAttribute(file, BAD_CAST "version", - BAD_CAST "1.0"); - - xmlTextWriterStartElement (file, BAD_CAST "info"); - xmlTextWriterStartElement (file, BAD_CAST "metadata"); - xmlTextWriterWriteAttribute(file, BAD_CAST "owner", - BAD_CAST "http://live.gnome.org/Yelp"); - xmlTextWriterEndElement (file); - xmlTextWriterEndElement (file); - - top_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (actions_store), - &top_iter); - - while (top_valid) { - if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (actions_store), - &top_iter)) { - sub_valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (actions_store), - &sub_iter, &top_iter); - while (sub_valid) { - gchar *name; - gchar *label; - gtk_tree_model_get (GTK_TREE_MODEL (actions_store), &sub_iter, - COL_NAME, &name, - COL_LABEL, &label, - -1); - xmlTextWriterStartElement (file, BAD_CAST "bookmark"); - xmlTextWriterWriteAttribute (file, BAD_CAST "href", - BAD_CAST name); - - xmlTextWriterWriteElement (file, - BAD_CAST "title", - BAD_CAST label); - - xmlTextWriterStartElement (file, BAD_CAST "info"); - xmlTextWriterStartElement (file, BAD_CAST "metadata"); - xmlTextWriterWriteAttribute - (file, BAD_CAST "owner", - BAD_CAST "http://live.gnome.org/Yelp"); - xmlTextWriterEndElement (file); /* metadata */ - xmlTextWriterEndElement (file); /* info */ - xmlTextWriterEndElement (file); /* bookmark */ - - g_free (name); - g_free (label); - - sub_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &sub_iter); - } - } - top_valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (actions_store), - &top_iter); - } - - xmlTextWriterEndDocument(file); - xmlFreeTextWriter(file); - g_free (filename); - return; -} - -static gboolean -bookmarks_read (const gchar *filename) -{ - xmlParserCtxtPtr parser; - xmlXPathContextPtr xpath; - xmlXPathObjectPtr obj; - xmlDocPtr doc; - - gboolean ret = TRUE; - gint i; - - parser = xmlNewParserCtxt (); - doc = xmlCtxtReadFile (parser, filename, NULL, - XML_PARSE_NOBLANKS | XML_PARSE_NOCDATA | - XML_PARSE_NOENT | XML_PARSE_NOERROR | - XML_PARSE_NONET ); - - if (doc == NULL) { - if (parser) - xmlFreeParserCtxt (parser); - return FALSE; - } - - xpath = xmlXPathNewContext (doc); - obj = xmlXPathEvalExpression (BAD_CAST "/xbel/bookmark", xpath); - for (i = 0; i < obj->nodesetval->nodeNr; i++) { - xmlNodePtr node = obj->nodesetval->nodeTab[i]; - gchar *uri; - uri = (gchar *) xmlGetProp (node, BAD_CAST "href"); - if (uri) { - xmlXPathObjectPtr title_obj; - xpath->node = node; - title_obj = xmlXPathEvalExpression (BAD_CAST "string(title[1])", - xpath); - xpath->node = NULL; - - if (title_obj->stringval) - bookmarks_add_bookmark ((const gchar *) uri, - (const gchar *) title_obj->stringval, - FALSE); - - xmlXPathFreeObject (title_obj); - xmlFree (uri); - } - } - - if (obj) - xmlXPathFreeObject (obj); - if (xpath) - xmlXPathFreeContext (xpath); - if (parser) - xmlFreeParserCtxt (parser); - if (doc) - xmlFreeDoc (doc); - return ret; -} - -static void -window_add_bookmark (YelpWindowData *data, - gchar *name, - const gchar *label) -{ - GtkUIManager *ui_manager; - GtkAction *action; - gboolean tocQ; - - tocQ = g_str_has_prefix (name, "x-yelp-toc:"); - ui_manager = yelp_window_get_ui_manager (data->window); - action = gtk_action_new (name, label, label, NULL); - - gtk_action_group_add_action (tocQ ? data->toc_actions : data->doc_actions, - action); - - gtk_ui_manager_add_ui (ui_manager, - data->merge_id, - tocQ ? TOC_PATH : DOC_PATH, - label, name, - GTK_UI_MANAGER_MENUITEM, - FALSE); - g_object_unref (action); -} - -static gboolean -bookmarks_unregister (YelpWindow *window, - GdkEvent *event, - gpointer user_data) -{ - GSList *cur; - - for (cur = windows; cur != NULL; cur = cur->next) { - YelpWindowData *data = (YelpWindowData *) cur->data;; - if (data->window == window) { - g_object_unref (data->toc_actions); - g_object_unref (data->doc_actions); - g_free (data); - windows = g_slist_delete_link (windows, cur); - break; - } - } - - return FALSE; -} - -static void -action_activated_cb (GtkActionGroup *group, - GtkAction *action, - YelpWindowData *data) -{ - gchar *uri; - - g_object_get (action, "name", &uri, NULL); - yelp_window_load (data->window, uri); - - g_free (uri); -} diff --git a/src/yelp-bookmarks.h b/src/yelp-bookmarks.h deleted file mode 100644 index e3d73b7f..00000000 --- a/src/yelp-bookmarks.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2003 Shaun McCance <shaunm@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. - * - * Author: Shaun McCance <shaunm@gnome.org> - */ - -#ifndef __YELP_BOOKMARKS_H__ -#define __YELP_BOOKMARKS_H__ - -#include <glib.h> -#include <gtk/gtk.h> - -#include "yelp-window.h" - -void yelp_bookmarks_init (void); -void yelp_bookmarks_register (YelpWindow *window); -void yelp_bookmarks_add (const gchar *uri, - YelpWindow *window); -void yelp_bookmarks_edit (void); -void yelp_bookmarks_write (void); - -#endif /* __YELP_BOOKMARKS_H__ */ diff --git a/src/yelp-error.c b/src/yelp-error.c deleted file mode 100644 index 63bd7748..00000000 --- a/src/yelp-error.c +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2002 Mikael Hallendal <micke@imendio.com> - * Copyright (C) 2007 Shaun McCance <shaunm@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 <config.h> - -#include <glib.h> -#include <glib/gi18n.h> - -#include "yelp-error.h" - -struct _YelpError { - gchar *title; - gchar *message; -}; - -static YelpError * -yelp_error_new_valist (gchar *title, gchar *format, va_list args) -{ - YelpError *error; - - error = g_slice_new (YelpError); - error->title = g_strdup (title); - error->message = g_strdup_vprintf (format, args); - - return error; -} - -YelpError * -yelp_error_new (gchar *title, gchar *format, ...) -{ - YelpError *error; - va_list args; - - va_start (args, format); - error = yelp_error_new_valist (title, format, args); - va_end (args); - - return error; -} - -void -yelp_error_set (YelpError **error, gchar *title, gchar *format, ...) -{ - YelpError *new; - va_list args; - - va_start (args, format); - new = yelp_error_new_valist (title, format, args); - va_end (args); - - if (*error == NULL) - *error = new; - else - g_warning - ("YelpError set over the top of a previous YelpError or uninitialized\n" - "memory. This indicates a bug in someone's code. You must ensure an\n" - "error is NULL before it's set. The overwriting error message was:\n" - "%s", - new->message); -} - -YelpError * -yelp_error_copy (YelpError *error) -{ - YelpError *new; - - new = g_slice_new (YelpError); - new->title = g_strdup (error->title); - new->message = g_strdup (error->message); - - return new; -} - -const gchar * -yelp_error_get_title (YelpError *error) -{ - g_return_val_if_fail (error != NULL, NULL); - return error->title; -} - -const gchar * -yelp_error_get_message (YelpError *error) -{ - g_return_val_if_fail (error != NULL, NULL); - return error->message; -} - -void -yelp_error_free (YelpError *error) -{ - g_return_if_fail (error != NULL); - g_free (error->title); - g_free (error->message); - g_slice_free (YelpError, error); -} - -/******************************************************************************/ - -GQuark -yelp_gerror_quark (void) -{ - static GQuark q = 0; - - if (q == 0) - q = g_quark_from_static_string ("yelp-error-quark"); - - return q; -} - -const gchar * -yelp_gerror_get_title (GError *error) -{ - if (!error || error->domain != YELP_GERROR) - return _("Unknown Error"); - - switch (error->code) { - case YELP_GERROR_IO: - return _("Could Not Read File"); - } - - return _("Unknown Error"); -} - -const gchar * -yelp_gerror_get_message (GError *error) -{ - if (!error || !error->message) - return _("No information is available about this error."); - else - return error->message; -} diff --git a/src/yelp-error.h b/src/yelp-error.h deleted file mode 100644 index 91a5bda2..00000000 --- a/src/yelp-error.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2002 Mikael Hallendal <micke@imendio.com> - * Copyright (C) 2007 Shaun McCance <shaunm@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. - */ - -#ifndef __YELP_ERROR_H__ -#define __YELP_ERROR_H__ - -#include <glib.h> - -typedef struct _YelpError YelpError; - -YelpError * yelp_error_new (gchar *title, - gchar *format, - ...); -void yelp_error_set (YelpError **error, - gchar *title, - gchar *format, - ...); -YelpError * yelp_error_copy (YelpError *error); - -const gchar * yelp_error_get_title (YelpError *error); -const gchar * yelp_error_get_message (YelpError *error); - -void yelp_error_free (YelpError *error); - - -#define YELP_GERROR yelp_gerror_quark () - -enum { - YELP_GERROR_IO -}; - -GQuark yelp_gerror_quark (void) G_GNUC_CONST; -const gchar * yelp_gerror_get_title (GError *error); -const gchar * yelp_gerror_get_message (GError *error); - -#endif /* __YELP_ERROR_H__ */ diff --git a/src/yelp-html.c b/src/yelp-html.c deleted file mode 100644 index bc07c37b..00000000 --- a/src/yelp-html.c +++ /dev/null @@ -1,587 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2004 Marco Pesenti Gritti - * Copyright (C) 2005 Christian Persch - * - * 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. - * - * Author: Marco Pesenti Gritti <marco@gnome.org> - */ - -#include <config.h> -#include "yelp-marshal.h" -#include "yelp-settings.h" - -#include <string.h> -#include <webkit/webkitwebframe.h> -#include <webkit/webkitnetworkrequest.h> -#include <webkit/webkitwebview.h> -#include <webkit/webkitwebsettings.h> - -#include "yelp-html.h" -#include "yelp-debug.h" - - -#define YELP_HTML_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_HTML, YelpHtmlPriv)) - -struct _YelpHtmlPriv { - gchar *content; - gchar *mime; - gchar *find_string; - gboolean initialised; - gchar *base_uri; - gchar *anchor; - gboolean frames_enabled; - guint timeout; -}; - -static void html_set_fonts (YelpHtml *html); -static void html_set_colors (YelpHtml *html); -static void html_set_a11y (YelpHtml *html); - -enum { - URI_SELECTED, - FRAME_SELECTED, - TITLE_CHANGED, - POPUPMENU_REQUESTED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -static GObjectClass *parent_class = NULL; - -static gboolean -html_open_uri (WebKitWebView* view, - WebKitWebFrame* web_frame, - WebKitNetworkRequest* req, - WebKitWebNavigationAction* action, - WebKitWebPolicyDecision* decision, - gpointer data) -{ - const gchar *uri = webkit_network_request_get_uri (req); - WebKitNavigationResponse resp = WEBKIT_NAVIGATION_RESPONSE_IGNORE; - YelpHtml *html = YELP_HTML (view); - gboolean block_load; - gchar *real_uri; - - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " uri = \"%s\"\n", uri); - - /* Only emit our signals on clicks */ - if (webkit_web_navigation_action_get_reason (action) != WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) { - webkit_web_policy_decision_use (decision); - return TRUE; - } - - real_uri = g_strdup (uri); - - /* If we got an URI with an anchor, that means we got to a - * reference; we want to get what comes after #, and replace what - * is after ? in the base URI we have - */ - if (g_str_has_prefix (uri, html->priv->base_uri)) { - gint length = strlen (html->priv->base_uri); - - if (uri[length] == '#') { - gchar *question_mark = g_strrstr (real_uri, "?"); - gchar *tmp = real_uri; - - *question_mark = '\0'; - real_uri = g_strdup_printf ("%s?%s", tmp, uri + length + 1); - - g_free (tmp); - } - } - - if (!html->priv->frames_enabled) { - g_signal_emit (html, signals[URI_SELECTED], 0, real_uri, FALSE); - } else { - g_signal_emit (html, signals[FRAME_SELECTED], 0, real_uri, FALSE, &block_load); - } - - g_free (real_uri); - webkit_web_policy_decision_ignore (decision); - return TRUE; -} - -#ifdef HAVE_GECKO_1_9 -static void -html_reset_accessible_parent (GtkWidget *widget) -{ - AtkObject * html_acc = gtk_widget_get_accessible (widget); - AtkObject * parent_acc = gtk_widget_get_accessible (widget->parent); - if (html_acc && parent_acc) { - atk_object_set_parent (html_acc, parent_acc); - } -} -#endif - -static void -html_realize (GtkWidget *widget) -{ -#ifdef HAVE_GECKO_1_9 - /* When Gecko accessibility module init, it will overwrite - * atk_class->get_root. - * But the top level accessible of yelp is not controlled by Gecko. - * So we need to restore the callback. See Bug #545162. - * It only need to do once. - * We do it here because Gecko a11y module inits when it is actually used, - * we call gtk_widget_get_accessible to pull the trigger. */ - - static gboolean gail_get_root_restored = FALSE; - static AtkObject * (*gail_get_root) (void); - static AtkUtilClass * atk_class = NULL; - if (!gail_get_root_restored) { - gpointer data; - data = g_type_class_peek (ATK_TYPE_UTIL); - if (data) { - atk_class = ATK_UTIL_CLASS (data); - gail_get_root = atk_class->get_root; - } - } -#endif - - YelpHtml *html = YELP_HTML (widget); - - GTK_WIDGET_CLASS (parent_class)->realize (widget); - -} - -static void -html_init (YelpHtml *html) -{ - YelpHtmlPriv *priv; - YelpHtmlClass *klass; - - html->priv = priv = YELP_HTML_GET_PRIVATE (html); - - priv->base_uri = NULL; - priv->anchor = NULL; - priv->timeout = 0; - priv->content = NULL; - priv->mime = NULL; - priv->initialised = FALSE; - - klass = YELP_HTML_GET_CLASS (html); - if (!klass->font_handler) { - klass->font_handler = - yelp_settings_notify_add (YELP_SETTINGS_INFO_FONTS, - (GHookFunc) html_set_fonts, - html); - html_set_fonts (html); - } - if (!klass->color_handler) { - klass->color_handler = - yelp_settings_notify_add (YELP_SETTINGS_INFO_COLOR, - (GHookFunc) html_set_colors, - html); - html_set_colors (html); - } - if (!klass->a11y_handler) { - klass->a11y_handler = - yelp_settings_notify_add (YELP_SETTINGS_INFO_A11Y, - (GHookFunc) html_set_a11y, - html); - html_set_a11y (html); - } - - g_signal_connect (html, "navigation-policy-decision-requested", - G_CALLBACK (html_open_uri), NULL); -} - -static void -html_dispose (GObject *object) -{ - YelpHtml *html = YELP_HTML (object); - - parent_class->dispose (object); -} - -static void -html_finalize (GObject *object) -{ - YelpHtml *html = YELP_HTML (object); - YelpHtmlPriv *priv = html->priv; - - - if (priv->timeout) - g_source_remove (priv->timeout); - g_free (priv->base_uri); - g_free (priv->anchor); - - g_signal_handlers_disconnect_by_func (html, html_open_uri, NULL); - - parent_class->finalize (object); -} - -static void -html_class_init (YelpHtmlClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - WebKitWebViewClass* wc_class = WEBKIT_WEB_VIEW_CLASS (klass); - - parent_class = (GObjectClass *) g_type_class_peek_parent (klass); - - object_class->finalize = html_finalize; - object_class->dispose = html_dispose; - - widget_class->realize = html_realize; - - - klass->font_handler = 0; - klass->color_handler = 0; - klass->a11y_handler = 0; - - signals[URI_SELECTED] = - g_signal_new ("uri_selected", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (YelpHtmlClass, - uri_selected), - NULL, NULL, - yelp_marshal_VOID__POINTER_BOOLEAN, - G_TYPE_NONE, - 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); - - signals[FRAME_SELECTED] = - g_signal_new ("frame_selected", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (YelpHtmlClass, - frame_selected), - g_signal_accumulator_true_handled, NULL, - yelp_marshal_BOOLEAN__POINTER_BOOLEAN, - G_TYPE_BOOLEAN, - 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); - - - signals[POPUPMENU_REQUESTED] = - g_signal_new ("popupmenu_requested", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (YelpHtmlClass, - popupmenu_requested), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, - 1, G_TYPE_STRING); - - g_type_class_add_private (klass, sizeof (YelpHtmlPriv)); -} - -GType -yelp_html_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) { - static const GTypeInfo info = { - sizeof (YelpHtmlClass), - NULL, - NULL, - (GClassInitFunc) html_class_init, - NULL, - NULL, - sizeof (YelpHtml), - 0, - (GInstanceInitFunc) html_init, - }; - - type = g_type_register_static (WEBKIT_TYPE_WEB_VIEW, - "YelpHtml", - &info, (GTypeFlags) 0); - } - - return type; -} - -YelpHtml * -yelp_html_new (void) -{ - YelpHtml *html; - - html = YELP_HTML (g_object_new (YELP_TYPE_HTML, NULL)); - - return html; -} - -void -yelp_html_set_base_uri (YelpHtml *html, const gchar *uri) -{ - YelpHtmlPriv *priv; - - g_return_if_fail (YELP_IS_HTML (html)); - - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " uri = \"%s\"\n", uri); - - priv = html->priv; - - if (priv->base_uri) - g_free (priv->base_uri); - - if (uri[0] == '/') - priv->base_uri = g_strdup_printf ("file://%s", uri); - else - priv->base_uri = g_strdup (uri); -} - -void -yelp_html_open_stream (YelpHtml *html, const gchar *mime) -{ - debug_print (DB_FUNCTION, "entering\n"); - - html->priv->frames_enabled = FALSE; - g_free (html->priv->content); - html->priv->content = NULL; - g_free (html->priv->mime); - html->priv->mime = g_strdup(mime); -} - -void -yelp_html_write (YelpHtml *html, const gchar *data, gint len) -{ - gchar *tmp = NULL; - - if (len == -1) len = strlen (data); - - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " data = %i bytes\n", strlen (data)); - debug_print (DB_ARG, " len = %i\n", len); - - if (html->priv->content) { - tmp = g_strjoin (NULL, html->priv->content, data, NULL); - g_free (html->priv->content); - html->priv->content = tmp; - } else { - html->priv->content = g_strdup (data); - } -} - -void -yelp_html_frames (YelpHtml *html, gboolean enable) -{ - html->priv->frames_enabled = enable; - - -} - -void -yelp_html_printf (YelpHtml *html, char *format, ...) -{ - va_list args; - gchar *string; - - g_return_if_fail (format != NULL); - - va_start (args, format); - string = g_strdup_vprintf (format, args); - va_end (args); - - yelp_html_write (html, string, -1); - - g_free (string); -} - - -void -yelp_html_close (YelpHtml *html) -{ - debug_print (DB_FUNCTION, "entering\n"); - - if (!html->priv->initialised) { - html->priv->initialised = TRUE; - html_set_fonts (html); - html_set_colors (html); - html_set_a11y (html); - webkit_web_view_set_maintains_back_forward_list (WEBKIT_WEB_VIEW (html), FALSE); - } - - webkit_web_view_load_string (WEBKIT_WEB_VIEW (html), - html->priv->content, - html->priv->mime, - NULL, - html->priv->base_uri); - g_free (html->priv->content); - html->priv->content = NULL; - g_free (html->priv->mime); - html->priv->mime = NULL; -} - -gboolean -yelp_html_find (YelpHtml *html, - const gchar *find_string) -{ - if (html->priv->find_string) - g_free(html->priv->find_string); - html->priv->find_string = g_strdup (find_string); - return webkit_web_view_search_text (WEBKIT_WEB_VIEW (html), - find_string, FALSE, - TRUE, TRUE); -} - -gboolean -yelp_html_find_again (YelpHtml *html, - gboolean forward) -{ - return webkit_web_view_search_text (WEBKIT_WEB_VIEW (html), - html->priv->find_string, - FALSE, - forward, TRUE); -} - -void -yelp_html_set_find_props (YelpHtml *html, - const char *str, - gboolean match_case, - gboolean wrap) -{ - /* Empty */ -} - -void -yelp_html_jump_to_anchor (YelpHtml *html, - gchar *anchor) -{ - YelpHtmlPriv *priv; - - g_return_if_fail (html != NULL); - - priv = html->priv; - - g_free (priv->anchor); - priv->anchor = g_strdup (anchor); -} - -void -yelp_html_copy_selection (YelpHtml *html) -{ - webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (html)); -} - -void -yelp_html_select_all (YelpHtml *html) -{ - webkit_web_view_select_all (WEBKIT_WEB_VIEW (html)); -} - -void -yelp_html_print (YelpHtml *html) -{ - webkit_web_view_execute_script (WEBKIT_WEB_VIEW (html), "print();"); -} - -static void -html_set_fonts (YelpHtml *html) -{ - gchar *font; - WebKitWebSettings *settings; - GValue *name, *size; - gchar *str_name; - gint i_size; - gchar *tmp; - - settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW (html)); - - font = yelp_settings_get_font (YELP_FONT_VARIABLE); - - /* We have to separate the string into name and size and then - * assign to the 2 gvalues */ - tmp = g_strrstr (font, " "); - if (!tmp) { - g_warning ("Cannot decode font pattern %s", font); - g_free (font); - return; - } - - name = g_new0 (GValue, 1); - size = g_new0 (GValue, 1); - - name = g_value_init (name, G_TYPE_STRING); - size = g_value_init (size, G_TYPE_INT); - - str_name = g_strndup (font, tmp - font); - - i_size = g_strtod (tmp, NULL); - - g_value_set_string (name, str_name); - g_value_set_int (size, i_size); - - g_object_set_property (G_OBJECT (settings), "default-font-family", - name); - g_object_set_property (G_OBJECT (settings), "default-font-size", - size); - - g_free (font); - - font = yelp_settings_get_font (YELP_FONT_FIXED); - - tmp = g_strrstr (font, " "); - if (!tmp) { - g_warning ("Cannot decode monospace font pattern %s", font); - g_free (font); - return; - } - - name = g_value_reset (name); - size = g_value_reset (size); - - str_name = g_strndup (font, tmp - font); - - i_size = g_strtod (tmp, NULL); - - g_value_set_string (name, str_name); - g_value_set_int (size, i_size); - - - g_object_set_property (G_OBJECT (settings), "monospace-font-family", - name); - g_object_set_property (G_OBJECT (settings), "default-monospace-font-size", - size); - - g_free (font); -} - -static void -html_set_colors (YelpHtml *html) -{ - /* TODO: No Webkit equivalent ... */ - /* See https://bugs.webkit.org/show_bug.cgi?id=19486 */ - -} - -static void -html_set_a11y (YelpHtml *html) -{ - gboolean caret; - - caret = yelp_settings_get_caret (); - /* TODO Webkit version */ -} - -gboolean -yelp_html_initialize (void) -{ - return TRUE; -} - -void -yelp_html_shutdown (void) -{ - /* Empty */ -} diff --git a/src/yelp-html.h b/src/yelp-html.h deleted file mode 100644 index 82235991..00000000 --- a/src/yelp-html.h +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> - * - * 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. - * - * Author: Mikael Hallendal <micke@imendio.com> - */ - -#ifndef __YELP_HTML_H__ -#define __YELP_HTML_H__ - -#include <config.h> -#include <webkit/webkit.h> - -G_BEGIN_DECLS - -#define YELP_TYPE_HTML (yelp_html_get_type ()) -#define YELP_HTML(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_HTML, YelpHtml)) -#define YELP_HTML_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_HTML, YelpHtmlClass)) -#define YELP_IS_HTML(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_HTML)) -#define YELP_IS_HTML_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_HTML)) -#define YELP_HTML_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_HTML, YelpHtmlClass)) - -typedef struct _YelpHtml YelpHtml; -typedef struct _YelpHtmlClass YelpHtmlClass; -typedef struct _YelpHtmlPriv YelpHtmlPriv; - -struct _YelpHtml { - WebKitWebView parent; - YelpHtmlPriv *priv; -}; - -struct _YelpHtmlClass { - WebKitWebViewClass parent; - guint font_handler; - guint color_handler; - guint a11y_handler; - - /* Signals */ - void (*uri_selected) (YelpHtml *view, - gchar *uri, - gboolean handled); - gboolean (*frame_selected) (YelpHtml *view, - gchar *uri, - gboolean handled); - void (*title_changed) (YelpHtml *view, - const gchar *new_title); - void (*popupmenu_requested) (YelpHtml *view, - const gchar *link); - -}; - -GType yelp_html_get_type (void); -YelpHtml * yelp_html_new (void); - -void yelp_html_set_base_uri (YelpHtml *html, - const gchar *uri); -void yelp_html_open_stream (YelpHtml *html, - const gchar *mime); -void yelp_html_write (YelpHtml *html, - const gchar *data, - gint len); -void yelp_html_printf (YelpHtml *html, - char *format, - ...) G_GNUC_PRINTF (2,3); -void yelp_html_close (YelpHtml *html); - -void yelp_html_frames (YelpHtml *html, - gboolean enable); - -gboolean yelp_html_find (YelpHtml *html, - const gchar *str); - -gboolean yelp_html_find_again (YelpHtml *html, - gboolean forward); - -void yelp_html_set_find_props (YelpHtml *html, - const char *str, - gboolean match_case, - gboolean wrap); - -void yelp_html_jump_to_anchor (YelpHtml *html, - gchar *anchor); - -void yelp_html_copy_selection (YelpHtml *html); - -void yelp_html_select_all (YelpHtml *html); - -void yelp_html_print (YelpHtml *html); -gboolean yelp_html_initialize (void); -void yelp_html_shutdown (void); - -G_END_DECLS - -#endif /* __YELP_HTML_H__ */ diff --git a/src/yelp-info.c b/src/yelp-info.c deleted file mode 100644 index 17a95c6c..00000000 --- a/src/yelp-info.c +++ /dev/null @@ -1,436 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2007 Don Scorgie <dscorgie@svn.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. - * - * Author: Don Scorgie <dscorgie@svn.gnome.org> - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <glib.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <libxml/tree.h> - -#include "yelp-error.h" -#include "yelp-info.h" -#include "yelp-info-parser.h" -#include "yelp-transform.h" -#include "yelp-debug.h" -#include "yelp-settings.h" - -#define STYLESHEET DATADIR"/yelp/xslt/info2html.xsl" - -#define YELP_INFO_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_INFO, YelpInfoPriv)) - -typedef enum { - INFO_STATE_BLANK, /* Brand new, run transform as needed */ - INFO_STATE_PARSING, /* Parsing/transforming document, please wait */ - INFO_STATE_PARSED, /* All done, if we ain't got it, it ain't here */ - INFO_STATE_STOP /* Stop everything now, object to be disposed */ -} InfoState; - -struct _YelpInfoPriv { - gchar *filename; - InfoState state; - - GMutex *mutex; - GThread *thread; - - xmlDocPtr xmldoc; - GtkTreeModel *sections; - - gboolean process_running; - gboolean transform_running; - - YelpTransform *transform; -}; - - -static void info_class_init (YelpInfoClass *klass); -static void info_init (YelpInfo *info); -static void info_try_dispose (GObject *object); -static void info_dispose (GObject *object); - -/* YelpDocument */ -static void info_request (YelpDocument *document, - gint req_id, - gboolean handled, - gchar *page_id, - YelpDocumentFunc func, - gpointer user_data); - -/* YelpTransform */ -static void transform_func (YelpTransform *transform, - YelpTransformSignal signal, - gpointer func_data, - YelpInfo *info); -static void transform_page_func (YelpTransform *transform, - gchar *page_id, - YelpInfo *info); -static void transform_final_func (YelpTransform *transform, - YelpInfo *info); -static gpointer info_get_sections (YelpDocument *document); - -/* Threaded */ -static void info_process (YelpInfo *info); - -static YelpDocumentClass *parent_class; - -GType -yelp_info_get_type (void) -{ - static GType type = 0; - if (!type) { - static const GTypeInfo info = { - sizeof (YelpInfoClass), - NULL, NULL, - (GClassInitFunc) info_class_init, - NULL, NULL, - sizeof (YelpInfo), - 0, - (GInstanceInitFunc) info_init, - }; - type = g_type_register_static (YELP_TYPE_DOCUMENT, - "YelpInfo", - &info, 0); - } - return type; -} - -static void -info_class_init (YelpInfoClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - YelpDocumentClass *document_class = YELP_DOCUMENT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - object_class->dispose = info_try_dispose; - - document_class->request = info_request; - document_class->cancel = NULL; - document_class->get_sections = info_get_sections; - - g_type_class_add_private (klass, sizeof (YelpInfoPriv)); -} - -static void -info_init (YelpInfo *info) -{ - YelpInfoPriv *priv; - - priv = info->priv = YELP_INFO_GET_PRIVATE (info); - - priv->state = INFO_STATE_BLANK; - - priv->xmldoc = NULL; - - priv->mutex = g_mutex_new (); -} - -static void -info_try_dispose (GObject *object) -{ - YelpInfoPriv *priv; - - g_assert (object != NULL && YELP_IS_INFO (object)); - priv = YELP_INFO (object)->priv; - - g_mutex_lock (priv->mutex); - if (priv->process_running || priv->transform_running) { - priv->state = INFO_STATE_STOP; - g_idle_add ((GSourceFunc) info_try_dispose, object); - g_mutex_unlock (priv->mutex); - } else { - g_mutex_unlock (priv->mutex); - info_dispose (object); - } -} - -static void -info_dispose (GObject *object) -{ - YelpInfo *info = YELP_INFO (object); - - g_free (info->priv->filename); - - if (info->priv->xmldoc) - xmlFreeDoc (info->priv->xmldoc); - - g_mutex_free (info->priv->mutex); - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -/******************************************************************************/ - -YelpDocument * -yelp_info_new (gchar *filename) -{ - YelpInfo *info; - - g_return_val_if_fail (filename != NULL, NULL); - - info = (YelpInfo *) g_object_new (YELP_TYPE_INFO, NULL); - info->priv->filename = g_strdup (filename); - - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " filename = \"%s\"\n", filename); - - yelp_document_add_page_id (YELP_DOCUMENT (info), "x-yelp-index", "index"); - - return (YelpDocument *) info; -} - - -/******************************************************************************/ -/** YelpDocument **************************************************************/ - -static void -info_request (YelpDocument *document, - gint req_id, - gboolean handled, - gchar *page_id, - YelpDocumentFunc func, - gpointer user_data) -{ - YelpInfo *info; - YelpInfoPriv *priv; - YelpError *error; - - debug_print (DB_FUNCTION, "entering\n"); - debug_print (DB_ARG, " req_id = %i\n", req_id); - debug_print (DB_ARG, " page_id = \"%s\"\n", page_id); - - g_assert (document != NULL && YELP_IS_INFO (document)); - - if (handled) - return; - - info = YELP_INFO (document); - priv = info->priv; - - g_mutex_lock (priv->mutex); - - switch (priv->state) { - case INFO_STATE_BLANK: - priv->state = INFO_STATE_PARSING; - priv->process_running = TRUE; - priv->thread = g_thread_create ((GThreadFunc) info_process, info, FALSE, NULL); - break; - case INFO_STATE_PARSING: - break; - case INFO_STATE_PARSED: - case INFO_STATE_STOP: - error = yelp_error_new (_("Page not found"), - _("The page %s was not found in the document %s."), - page_id, priv->filename); - yelp_document_error_request (document, req_id, error); - break; - } - - g_mutex_unlock (priv->mutex); -} - - -/******************************************************************************/ -/** YelpTransform *************************************************************/ - -static void -transform_func (YelpTransform *transform, - YelpTransformSignal signal, - gpointer func_data, - YelpInfo *info) -{ - YelpInfoPriv *priv; - - debug_print (DB_FUNCTION, "entering\n"); - - g_assert (info != NULL && YELP_IS_INFO (info)); - - priv = info->priv; - - g_assert (transform == priv->transform); - - if (priv->state == INFO_STATE_STOP) { - switch (signal) { - case YELP_TRANSFORM_CHUNK: - g_free (func_data); - break; - case YELP_TRANSFORM_ERROR: - yelp_error_free ((YelpError *) func_data); - break; - case YELP_TRANSFORM_FINAL: - break; - } - yelp_transform_release (transform); - priv->transform = NULL; - priv->transform_running = FALSE; - return; - } - - switch (signal) { - case YELP_TRANSFORM_CHUNK: - transform_page_func (transform, (gchar *) func_data, info); - break; - case YELP_TRANSFORM_ERROR: - yelp_document_error_pending (YELP_DOCUMENT (info), (YelpError *) func_data); - yelp_transform_release (transform); - priv->transform = NULL; - priv->transform_running = FALSE; - break; - case YELP_TRANSFORM_FINAL: - transform_final_func (transform, info); - break; - } -} - -static void -transform_page_func (YelpTransform *transform, - gchar *page_id, - YelpInfo *info) -{ - YelpInfoPriv *priv; - gchar *content; - - debug_print (DB_FUNCTION, "entering\n"); - - priv = info->priv; - g_mutex_lock (priv->mutex); - - content = yelp_transform_eat_chunk (transform, page_id); - - yelp_document_add_page (YELP_DOCUMENT (info), page_id, content); - - g_free (page_id); - - g_mutex_unlock (priv->mutex); -} - -static void -transform_final_func (YelpTransform *transform, YelpInfo *info) -{ - YelpError *error; - YelpInfoPriv *priv = info->priv; - - debug_print (DB_FUNCTION, "entering\n"); - - g_mutex_lock (priv->mutex); - - error = yelp_error_new (_("Page not found"), - _("The requested page was not found in the document %s."), - priv->filename); - yelp_document_final_pending (YELP_DOCUMENT (info), error); - - yelp_transform_release (transform); - priv->transform = NULL; - priv->transform_running = FALSE; - priv->state = INFO_STATE_PARSED; - - if (priv->xmldoc) - xmlFreeDoc (priv->xmldoc); - priv->xmldoc = NULL; - - g_mutex_unlock (priv->mutex); -} - - -/******************************************************************************/ -/** Threaded ******************************************************************/ - -static void -info_process (YelpInfo *info) -{ - YelpInfoPriv *priv; - YelpError *error = NULL; - YelpDocument *document; - GtkTreeModel *model; - - gint params_i = 0; - gint params_max = 10; - gchar **params = NULL; - - - debug_print (DB_FUNCTION, "entering\n"); - - g_assert (info != NULL && YELP_IS_INFO (info)); - g_object_ref (info); - priv = info->priv; - document = YELP_DOCUMENT (info); - - if (!g_file_test (priv->filename, G_FILE_TEST_IS_REGULAR)) { - error = yelp_error_new (_("File not found"), - _("The file ‘%s’ does not exist."), - priv->filename); - yelp_document_error_pending (document, error); - goto done; - } - - priv->sections = (GtkTreeModel *) yelp_info_parser_parse_file (priv->filename); - if (!model) { - /* TODO: Handle errors - exit out somehow */ - } - - priv->xmldoc = yelp_info_parser_parse_tree ((GtkTreeStore *) priv->sections); - - if (priv->xmldoc == NULL) { - error = yelp_error_new (_("Could not parse file"), - _("The file ‘%s’ could not be parsed because it is" - " not a well-formed info page."), - priv->filename); - yelp_document_error_pending (document, error); - } - - g_mutex_lock (priv->mutex); - if (priv->state == INFO_STATE_STOP) { - g_mutex_unlock (priv->mutex); - goto done; - } - - priv->transform = yelp_transform_new (STYLESHEET, - (YelpTransformFunc) transform_func, - info); - priv->transform_running = TRUE; - - params = g_new0 (gchar *, params_max); - yelp_settings_params (¶ms, ¶ms_i, ¶ms_max); - - params[params_i] = NULL; - - - yelp_transform_start (priv->transform, - priv->xmldoc, - params); - g_strfreev (params); - g_mutex_unlock (priv->mutex); - - done: - priv->process_running = FALSE; - g_object_unref (info); -} - -static gpointer -info_get_sections (YelpDocument *document) -{ - YelpInfo *info = (YelpInfo *) document; - - return (gpointer) (info->priv->sections); -} diff --git a/src/yelp-info.h b/src/yelp-info.h deleted file mode 100644 index d592dd72..00000000 --- a/src/yelp-info.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2007 Don Scorgie <dscorgie@svn.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. - * - * Author: Don Scorgie <dscorgie@svn.gnome.org> - */ - -#ifndef __YELP_INFO_H__ -#define __YELP_INFO_H__ - -#include <glib-object.h> - -#include "yelp-document.h" - -#define YELP_TYPE_INFO (yelp_info_get_type ()) -#define YELP_INFO(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_INFO, YelpInfo)) -#define YELP_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_INFO, YelpInfoClass)) -#define YELP_IS_INFO(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_INFO)) -#define YELP_IS_INFO_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_INFO)) -#define YELP_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_INFO, YelpInfoClass)) - -typedef struct _YelpInfo YelpInfo; -typedef struct _YelpInfoClass YelpInfoClass; -typedef struct _YelpInfoPriv YelpInfoPriv; - -struct _YelpInfo { - YelpDocument parent; - YelpInfoPriv *priv; -}; - -struct _YelpInfoClass { - YelpDocumentClass parent_class; -}; - -GType yelp_info_get_type (void); -YelpDocument * yelp_info_new (gchar *uri); - -#endif /* __YELP_INFO_H__ */ diff --git a/src/yelp-infos.xml b/src/yelp-infos.xml deleted file mode 100644 index 18462b61..00000000 --- a/src/yelp-infos.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<node name="/org/gnome/YelpService"> - <interface name="org.gnome.YelpService"> - <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="server"/> - <method name="new_window"> - <arg type="s" name="url" direction="in" /> - <arg type="s" name="timestamp" direction="in" /> - </method> - <method name="get_url_list"> - <arg type="s" name="urls" direction="out" /> - </method> - <!-- Add more methods/signals if you want --> - </interface> -</node> diff --git a/src/yelp-main.c b/src/yelp-main.c deleted file mode 100644 index c88f26f4..00000000 --- a/src/yelp-main.c +++ /dev/null @@ -1,437 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2001-2003 Mikael Hallendal <micke@imendio.com> - * - * 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. - * - * Author: Mikael Hallendal <micke@imendio.com> - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <gdk/gdkx.h> -#include <dbus/dbus-glib-bindings.h> -#include <string.h> -#include <stdlib.h> -#include <libxslt/xslt.h> - -#ifdef WITH_SMCLIENT -#include "eggsmclient.h" -#endif /* WITH_SMCLIENT */ -#include "client-bindings.h" -#include "yelp-window.h" -#include "yelp-base.h" -#include "yelp-html.h" - -static gchar *cache_dir; -static gchar *open_urls; -static gchar *startup_id; -static gchar **files; -static gboolean private = FALSE; -static YelpBase *priv_base = NULL; - -static DBusGConnection *connection; - -/*structure defining command line option.*/ -enum { - OPTION_OPEN_URLS = 1, - OPTION_CACHE_DIR -}; - -static void main_start (const gchar *url); -static DBusGProxy * main_dbus_get_proxy (void); -static gboolean main_is_running (void); -static gboolean main_slave_start (gchar *url); - -#ifdef WITH_SMCLIENT -static int main_save_session (EggSMClient *client, - gpointer cdata); - -static void main_client_die (EggSMClient *client, - gpointer cdata); -#endif /* WITH_SMCLIENT */ - -static gboolean main_restore_session (void); -static Time slowly_and_stupidly_obtain_timestamp (Display *xdisplay); - - -static const GOptionEntry options[] = { - { - "open-urls", - '\0', - G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_STRING, - &open_urls, - NULL, NULL, - }, - { - "private-session", - 'p', - 0, G_OPTION_ARG_NONE, - &private, - N_("Use a private session"), - NULL, - }, - { - "with-cache-dir", - '\0', - 0, - G_OPTION_ARG_STRING, - &cache_dir, - N_("Define which cache directory to use"), - NULL, - }, - { G_OPTION_REMAINING, - 0, 0, G_OPTION_ARG_FILENAME_ARRAY, - &files, NULL, NULL }, - { NULL} -}; - -static void -main_start (const gchar *url) -{ - YelpBase *base; - GError *error = NULL; - - base = yelp_base_new (private); - - server_new_window (base, (gchar *) url, startup_id, &error); - priv_base = base; - - gtk_main (); - - return; -} - - -static gboolean -main_slave_start (gchar *url) -{ - DBusGProxy *proxy = NULL; - GError *error = NULL; - - proxy = main_dbus_get_proxy (); - - if (!proxy) - g_error ("Cannot connect to dbus\n"); - - if (!org_gnome_YelpService_new_window (proxy, url, startup_id, - &error)) - g_error ("%s\n", error->message); - - return FALSE; -} - - -#ifdef WITH_SMCLIENT -static gint -main_save_session (EggSMClient *client, - gpointer cdata) -{ - gchar **argv; - gchar *open_windows = NULL; - gint i=1; - gint arg_len = 1; - gboolean store_open_urls = FALSE; - /* DBusGProxy *proxy = NULL; */ - GError *error = NULL; - - /*proxy = main_dbus_get_proxy (); - if (!proxy) { - g_warning ("Unable to connect to bus again\n");*/ - - - if (!server_get_url_list (priv_base, &open_windows, - &error)) - g_warning ("Cannot recieve window list - %s\n", error->message); - - if (open_windows != NULL) { - store_open_urls = TRUE; - arg_len++; - } - - if (cache_dir) { - arg_len++; - } - - argv = g_malloc0 (sizeof (gchar *) * arg_len); - - /* Program name */ - argv[0] = g_strdup ("yelp"); - - if (cache_dir) { - argv[1] = g_strdup_printf ("--with-cache-dir=\"%s\"", - cache_dir); - } - - if (store_open_urls) { - argv[arg_len - 1] = g_strdup_printf ("--open-urls=\"%s\"", - open_windows); - } - - egg_sm_client_set_restart_command (client, arg_len, (const char **) argv); - - for (i = 0; i < arg_len; ++i) { - g_free (argv[i]); - } - g_free (argv); - - return TRUE; -} - -static void -main_client_die (EggSMClient *client, - gpointer cdata) -{ - gtk_main_quit (); -} -#endif /* WITH_SMCLIENT */ - -static gboolean -main_restore_session (void) -{ - YelpBase *yelp_base; - - yelp_base = yelp_base_new (private); - priv_base = yelp_base; - - if (!yelp_base) { - g_error ("Couldn't activate YelpBase"); - } - g_print ("restoring session\n"); - if (open_urls) { - gchar **urls = g_strsplit_set (open_urls, ";\"", -1); - gchar *url; - gint i = 0; - GError *error = NULL; - - while ((url = urls[i]) != NULL) { - if (*url != '\0') - server_new_window (yelp_base, url, - startup_id, &error); - ++i; - } - - g_strfreev (urls); - } - gtk_main (); - return FALSE; - -} - -/* Copied from libnautilus/nautilus-program-choosing.c; Needed in case - * we have no DESKTOP_STARTUP_ID (with its accompanying timestamp). - */ -static Time -slowly_and_stupidly_obtain_timestamp (Display *xdisplay) -{ - Window xwindow; - XEvent event; - - { - XSetWindowAttributes attrs; - Atom atom_name; - Atom atom_type; - gchar* name; - - attrs.override_redirect = True; - attrs.event_mask = PropertyChangeMask | StructureNotifyMask; - - xwindow = - XCreateWindow (xdisplay, - RootWindow (xdisplay, 0), - -100, -100, 1, 1, - 0, - CopyFromParent, - CopyFromParent, - CopyFromParent, - CWOverrideRedirect | CWEventMask, - &attrs); - - atom_name = XInternAtom (xdisplay, "WM_NAME", TRUE); - g_assert (atom_name != None); - atom_type = XInternAtom (xdisplay, "STRING", TRUE); - g_assert (atom_type != None); - - name = "Fake Window"; - XChangeProperty (xdisplay, - xwindow, atom_name, - atom_type, - 8, PropModeReplace, (guchar *) name, strlen (name)); - } - - XWindowEvent (xdisplay, - xwindow, - PropertyChangeMask, - &event); - - XDestroyWindow(xdisplay, xwindow); - - return event.xproperty.time; -} - -DBusGProxy * -main_dbus_get_proxy (void) -{ - if (!connection) - return NULL; - - return dbus_g_proxy_new_for_name (connection, - "org.gnome.YelpService", - "/org/gnome/YelpService", - "org.gnome.YelpService"); -} - -gboolean -main_is_running (void) -{ - DBusGProxy *proxy = NULL; - gboolean instance = TRUE; - GError * error = NULL; - - if (!connection) - return TRUE; - - proxy = dbus_g_proxy_new_for_name (connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - - if (!dbus_g_proxy_call (proxy, "NameHasOwner", &error, - G_TYPE_STRING, "org.gnome.YelpService", - G_TYPE_INVALID, - G_TYPE_BOOLEAN, &instance, - G_TYPE_INVALID)) { - g_error ("Cannot connect to DBus - %s\n", error->message); - exit (2); - } - return instance; -} - - -int -main (int argc, char **argv) -{ - gchar *url = NULL; -#ifdef WITH_SMCLIENT - EggSMClient *sm_client; - GError *error = NULL; -#endif /* WITH_SMCLIENT */ - gboolean retval; - gboolean session_started = FALSE; - gchar *local_id; - GOptionContext *context; - - g_thread_init(NULL); - - bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain(GETTEXT_PACKAGE); - xsltInit (); - - local_id = (gchar *) g_getenv ("DESKTOP_STARTUP_ID"); - - if (local_id != NULL && *local_id != '\0') { - startup_id = g_strdup (local_id); - putenv ("DESKTOP_STARTUP_ID="); - } - - /* Commandline parsing is done here */ - context = g_option_context_new (N_(" GNOME Help Browser")); - - g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); - - g_option_context_add_group (context, gtk_get_option_group (TRUE)); - -#ifdef WITH_SMCLIENT - g_option_context_add_group (context, egg_sm_client_get_option_group ()); -#endif /* WITH_SMCLIENT */ - - g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); - - gtk_window_set_auto_startup_notification(FALSE); - - retval = g_option_context_parse (context, &argc, &argv, &error); - g_option_context_free (context); - if (!retval) { - g_print ("%s", error->message); - g_error_free (error); - exit (1); - } - - dbus_g_thread_init(); - - if (!startup_id) { - Time tmp; - tmp = slowly_and_stupidly_obtain_timestamp (gdk_display); - startup_id = g_strdup_printf ("_TIME%lu", tmp); - } - g_set_application_name (_("Help")); - gtk_window_set_default_icon_name ("help-browser"); - - if (!private) { - connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); - if (!connection) { - g_warning ("Cannot find dbus bus\n"); - private = TRUE; - } - } - - if (!yelp_html_initialize ()) { - g_printerr ("Could not initialize HTML component\n"); - exit (1); - } - - if (files != NULL && files[0] != NULL) { - url = g_strdup (files[0]); - g_strfreev (files); - } - -#ifdef WITH_SMCLIENT - sm_client = egg_sm_client_get (); - g_signal_connect (sm_client, "save-state", - G_CALLBACK (main_save_session), NULL); - g_signal_connect (sm_client, "quit", - G_CALLBACK (main_client_die), NULL); - session_started = egg_sm_client_is_resumed(sm_client); -#endif /* WITH_SMCLIENT */ - - if (private || !main_is_running ()) { - const gchar *env; - - xsltInit (); - if (session_started) { - main_restore_session (); - } else { - main_start (url); - } - } else { - main_slave_start (url); - } - - yelp_html_shutdown (); - -#ifdef WITH_SMCLIENT - g_signal_handlers_disconnect_matched (sm_client, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, NULL); -#endif /* WITH_SMCLIENT */ - - return 0; -} diff --git a/src/yelp-marshal.list b/src/yelp-marshal.list deleted file mode 100644 index 7501fd3a..00000000 --- a/src/yelp-marshal.list +++ /dev/null @@ -1,6 +0,0 @@ -VOID:POINTER,BOOLEAN -VOID:STRING -VOID:VOID -VOID:STRING,INT -VOID:POINTER -BOOLEAN:POINTER,BOOLEAN diff --git a/src/yelp-toc.c b/src/yelp-toc.c index 201cabb4..085c47c7 100644 --- a/src/yelp-toc.c +++ b/src/yelp-toc.c @@ -553,7 +553,7 @@ xml_trim_titles (xmlNodePtr node, xmlChar * nodetype) if (!xmlStrcmp (cur->name, nodetype)) { xmlChar *cur_lang = NULL; int cur_pri = INT_MAX; - cur_lang = xmlNodeGetLang (cur); + cur_lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE); if (cur_lang) { for (j = 0; langs[j]; j++) { if (g_str_equal (cur_lang, langs[j])) { diff --git a/src/yelp-window.c b/src/yelp-window.c index 990b2bdc..14a126a7 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -24,6 +24,8 @@ #include <config.h> #endif +#include <math.h> + #include <gdk/gdkkeysyms.h> #include <glib/gi18n.h> #include <gtk/gtk.h> @@ -49,27 +51,67 @@ static void yelp_window_set_property (GObject *object, const GValue *value, GParamSpec *pspec); +static void window_construct (YelpWindow *window); static void window_new (GtkAction *action, YelpWindow *window); +static gboolean window_configure_event (YelpWindow *window, + GdkEventConfigure *event, + gpointer user_data); +static void window_drag_received (YelpWindow *window, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer userdata); +static gboolean window_resize_signal (YelpWindow *window); static void window_close (GtkAction *action, YelpWindow *window); +static void window_add_bookmark (GtkAction *action, + YelpWindow *window); +static void window_load_bookmark (GtkAction *action, + YelpWindow *window); +static void window_find_in_page (GtkAction *action, + YelpWindow *window); +static void window_start_search (GtkAction *action, + YelpWindow *window); static void window_open_location (GtkAction *action, YelpWindow *window); -static void window_font_adjustment (GtkAction *action, + +static void app_bookmarks_changed (YelpApplication *app, + const gchar *doc_uri, YelpWindow *window); -static void window_show_text_cursor (GtkToggleAction *action, +static void window_set_bookmarks (YelpWindow *window, + const gchar *doc_uri); +static void window_set_bookmark_action (YelpWindow *window); +static void window_set_bookmark_icons (YelpWindow *window); +static gboolean find_animate_open (YelpWindow *window); +static gboolean find_animate_close (YelpWindow *window); +static gboolean find_entry_focus_out (GtkEntry *entry, + GdkEventFocus *event, YelpWindow *window); -static void window_go_back (GtkAction *action, +static gboolean find_entry_key_press (GtkEntry *entry, + GdkEventKey *event, YelpWindow *window); -static void window_go_forward (GtkAction *action, +static void find_entry_changed (GtkEntry *entry, YelpWindow *window); +static void entry_bookmark_clicked (YelpLocationEntry *entry, + YelpWindow *window); static void entry_location_selected (YelpLocationEntry *entry, YelpWindow *window); +static gint entry_completion_sort (GtkTreeModel *model, + GtkTreeIter *iter1, + GtkTreeIter *iter2, + gpointer user_data); static void entry_completion_selected (YelpLocationEntry *entry, GtkTreeModel *model, GtkTreeIter *iter, YelpWindow *window); +static gboolean entry_focus_in (GtkEntry *entry, + GdkEventFocus *event, + YelpWindow *window); static gboolean entry_focus_out (YelpLocationEntry *entry, GdkEventFocus *event, YelpWindow *window); @@ -77,6 +119,9 @@ static gboolean entry_focus_out (YelpLocationEntry *entry, static void view_external_uri (YelpView *view, YelpUri *uri, YelpWindow *window); +static void view_new_window (YelpView *view, + YelpUri *uri, + YelpWindow *window); static void view_loaded (YelpView *view, YelpWindow *window); static void view_uri_selected (YelpView *view, @@ -107,243 +152,155 @@ enum { PROP_APPLICATION }; +enum { + RESIZE_EVENT, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + G_DEFINE_TYPE (YelpWindow, yelp_window, GTK_TYPE_WINDOW); #define GET_PRIV(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_WINDOW, YelpWindowPrivate)) +static GHashTable *completions; + enum { - COL_TITLE, - COL_DESC, - COL_ICON, - COL_URI, - COL_FLAGS, - COL_TERMS + HISTORY_COL_TITLE, + HISTORY_COL_DESC, + HISTORY_COL_ICON, + HISTORY_COL_URI, + HISTORY_COL_DOC, + HISTORY_COL_PAGE, + HISTORY_COL_FLAGS, + HISTORY_COL_TERMS }; -typedef struct _YelpBackEntry YelpBackEntry; -struct _YelpBackEntry { - YelpUri *uri; - gchar *title; - gchar *desc; +enum { + COMPLETION_COL_TITLE, + COMPLETION_COL_DESC, + COMPLETION_COL_ICON, + COMPLETION_COL_PAGE, + COMPLETION_COL_FLAGS }; -static void -back_entry_free (YelpBackEntry *back) -{ - if (back == NULL) - return; - g_object_unref (back->uri); - g_free (back->title); - g_free (back->desc); - g_free (back); -} + +static const gchar *YELP_UI = + "<ui>" + "<menubar>" + "<menu action='PageMenu'>" + "<menuitem action='NewWindow'/>" + "<menuitem action='Find'/>" + "<separator/>" + "<menuitem action='YelpViewPrint'/>" + "<separator/>" + "<menuitem action='CloseWindow'/>" + "</menu>" + "<menu action='ViewMenu'>" + "<menuitem action='LargerText'/>" + "<menuitem action='SmallerText'/>" + "<separator/>" + "<menuitem action='ShowTextCursor'/>" + "</menu>" + "<menu action='GoMenu'>" + "<menuitem action='YelpViewGoBack'/>" + "<menuitem action='YelpViewGoForward'/>" + "<separator/>" + "<menuitem action='YelpViewGoPrevious'/>" + "<menuitem action='YelpViewGoNext'/>" + "</menu>" + "<menu action='BookmarksMenu'>" + "<menuitem action='AddBookmark'/>" + "<separator/>" + "<placeholder name='Bookmarks'/>" + "</menu>" + "</menubar>" + "<accelerator action='Find'/>" + "<accelerator action='Search'/>" + "<accelerator action='OpenLocation'/>" + "</ui>"; typedef struct _YelpWindowPrivate YelpWindowPrivate; struct _YelpWindowPrivate { GtkListStore *history; - GtkListStore *completion; + GtkUIManager *ui_manager; GtkActionGroup *action_group; YelpApplication *application; /* no refs on these, owned by containers */ YelpView *view; + GtkWidget *vbox; GtkWidget *hbox; - GtkWidget *back_button; - GtkWidget *forward_button; YelpLocationEntry *entry; GtkWidget *hidden_entry; + GtkWidget *find_entry; + GtkWidget *find_label; /* refs because we dynamically add & remove */ + GtkWidget *find_bar; GtkWidget *align_location; GtkWidget *align_hidden; - GList *back_list; - GList *back_cur; - gboolean back_load; - gulong entry_location_selected; + + gchar *doc_uri; + + GtkActionGroup *bookmark_actions; + guint bookmarks_merge_id; + + guint resize_signal; + gint width; + gint height; + + guint entry_color_animate; + gfloat entry_color_step; + + guint find_animate; + gint find_cur_height; + gint find_entry_height; + gint find_bar_height; }; static const GtkActionEntry entries[] = { { "PageMenu", NULL, N_("_Page") }, { "ViewMenu", NULL, N_("_View") }, { "GoMenu", NULL, N_("_Go") }, + { "BookmarksMenu", NULL, N_("_Bookmarks") }, - { "NewWindow", GTK_STOCK_NEW, + { "NewWindow", NULL, N_("_New Window"), "<Control>N", NULL, G_CALLBACK (window_new) }, - { "CloseWindow", GTK_STOCK_CLOSE, + { "CloseWindow", NULL, N_("_Close"), "<Control>W", NULL, G_CALLBACK (window_close) }, + { "AddBookmark", NULL, + N_("_Add Bookmark"), + "<Control>D", + NULL, + G_CALLBACK (window_add_bookmark) }, + { "Find", NULL, + N_("Find in Page..."), + "<Control>F", + NULL, + G_CALLBACK (window_find_in_page) }, + { "Search", NULL, + N_("Search..."), + "<Control>S", + NULL, + G_CALLBACK (window_start_search) }, { "OpenLocation", NULL, N_("Open Location"), "<Control>L", NULL, - G_CALLBACK (window_open_location) }, - { "LargerText", NULL, - N_("_Larger Text"), - "<Control>plus", - NULL, - G_CALLBACK (window_font_adjustment) }, - { "SmallerText", NULL, - N_("_Smaller Text"), - "<Control>minus", - NULL, - G_CALLBACK (window_font_adjustment) }, - {"GoBack", GTK_STOCK_GO_BACK, - N_("_Back"), - "<Alt>Left", - NULL, - G_CALLBACK (window_go_back) }, - {"GoForward", GTK_STOCK_GO_FORWARD, - N_("_Forward"), - "<Alt>Right", - NULL, - G_CALLBACK (window_go_forward) } + G_CALLBACK (window_open_location) } }; static void yelp_window_init (YelpWindow *window) { - GtkWidget *vbox, *scroll; - GtkUIManager *ui_manager; - GtkAction *action; - GError *error = NULL; - GtkTreeIter iter; - YelpWindowPrivate *priv = GET_PRIV (window); - - gtk_window_set_icon_name (GTK_WINDOW (window), "help-browser"); - gtk_window_set_default_size (GTK_WINDOW (window), 520, 580); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), vbox); - - priv->action_group = gtk_action_group_new ("MenuActions"); - gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE); - gtk_action_group_add_actions (priv->action_group, - entries, G_N_ELEMENTS (entries), - window); - action = (GtkAction *) gtk_toggle_action_new ("ShowTextCursor", - _("Show Text _Cursor"), - NULL, NULL); - g_signal_connect (action, "activate", - G_CALLBACK (window_show_text_cursor), window); - gtk_action_group_add_action_with_accel (priv->action_group, - action, "F7"); - - ui_manager = gtk_ui_manager_new (); - gtk_ui_manager_insert_action_group (ui_manager, priv->action_group, 0); - gtk_window_add_accel_group (GTK_WINDOW (window), - gtk_ui_manager_get_accel_group (ui_manager)); - if (!gtk_ui_manager_add_ui_from_file (ui_manager, - DATADIR "/yelp/ui/yelp-ui.xml", - &error)) { - GtkWidget *dialog = gtk_message_dialog_new (NULL, 0, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "%s", _("Cannot create window")); - gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), "%s", - error->message); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - g_error_free (error); - } - gtk_box_pack_start (GTK_BOX (vbox), - gtk_ui_manager_get_widget (ui_manager, "/ui/menubar"), - FALSE, FALSE, 0); - - priv->hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), priv->hbox, FALSE, FALSE, 0); - - action = gtk_action_group_get_action (priv->action_group, "GoBack"); - priv->back_button = gtk_action_create_tool_item (action); - gtk_box_pack_start (GTK_BOX (priv->hbox), - priv->back_button, - FALSE, FALSE, 0); - action = gtk_action_group_get_action (priv->action_group, "GoForward"); - priv->forward_button = gtk_action_create_tool_item (action); - gtk_box_pack_start (GTK_BOX (priv->hbox), - priv->forward_button, - FALSE, FALSE, 0); - - priv->history = gtk_list_store_new (6, - G_TYPE_STRING, /* title */ - G_TYPE_STRING, /* desc */ - G_TYPE_STRING, /* icon */ - G_TYPE_STRING, /* uri */ - G_TYPE_INT, /* flags */ - G_TYPE_STRING /* search terms */ - ); - gtk_list_store_append (priv->history, &iter); - gtk_list_store_set (priv->history, &iter, - COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEPARATOR, - -1); - gtk_list_store_append (priv->history, &iter); - gtk_list_store_set (priv->history, &iter, - COL_ICON, "system-search", - COL_TITLE, _("Search..."), - COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEARCH, - -1); - priv->completion = gtk_list_store_new (4, - G_TYPE_STRING, /* title */ - G_TYPE_STRING, /* desc */ - G_TYPE_STRING, /* icon */ - G_TYPE_STRING /* uri */ - ); - priv->entry = (YelpLocationEntry *) - yelp_location_entry_new_with_model (GTK_TREE_MODEL (priv->history), - COL_TITLE, - COL_DESC, - COL_ICON, - COL_FLAGS); - g_signal_connect (priv->entry, "focus-out-event", - G_CALLBACK (entry_focus_out), window); - - yelp_location_entry_set_completion_model (YELP_LOCATION_ENTRY (priv->entry), - GTK_TREE_MODEL (priv->completion), - COL_TITLE, - COL_DESC, - COL_ICON); - g_signal_connect (priv->entry, "completion-selected", - G_CALLBACK (entry_completion_selected), window); - - priv->entry_location_selected = g_signal_connect (priv->entry, "location-selected", - G_CALLBACK (entry_location_selected), window); - priv->align_location = g_object_ref_sink (gtk_alignment_new (0.0, 0.5, 1.0, 0.0)); - gtk_box_pack_start (GTK_BOX (priv->hbox), - GTK_WIDGET (priv->align_location), - TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (priv->align_location), GTK_WIDGET (priv->entry)); - - priv->hidden_entry = gtk_entry_new (); - priv->align_hidden = g_object_ref_sink (gtk_alignment_new (0.0, 0.5, 1.0, 0.0)); - gtk_container_add (GTK_CONTAINER (priv->align_hidden), GTK_WIDGET (priv->hidden_entry)); - - g_signal_connect (priv->hidden_entry, "activate", - G_CALLBACK (hidden_entry_activate), window); - g_signal_connect_swapped (priv->hidden_entry, "focus-out-event", - G_CALLBACK (hidden_entry_hide), window); - g_signal_connect (priv->hidden_entry, "key-press-event", - G_CALLBACK (hidden_key_press), window); - - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_box_pack_end (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); - - priv->view = (YelpView *) yelp_view_new (); - g_signal_connect (priv->view, "external-uri", G_CALLBACK (view_external_uri), window); - g_signal_connect (priv->view, "loaded", G_CALLBACK (view_loaded), window); - g_signal_connect (priv->view, "notify::yelp-uri", G_CALLBACK (view_uri_selected), window); - g_signal_connect (priv->view, "notify::root-title", G_CALLBACK (view_root_title), window); - g_signal_connect (priv->view, "notify::page-title", G_CALLBACK (view_page_title), window); - g_signal_connect (priv->view, "notify::page-desc", G_CALLBACK (view_page_desc), window); - g_signal_connect (priv->view, "notify::page-icon", G_CALLBACK (view_page_icon), window); - gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (priv->view)); - gtk_widget_grab_focus (GTK_WIDGET (priv->view)); + g_signal_connect (window, "configure-event", G_CALLBACK (window_configure_event), NULL); } static void @@ -356,6 +313,8 @@ yelp_window_class_init (YelpWindowClass *klass) object_class->get_property = yelp_window_get_property; object_class->set_property = yelp_window_set_property; + completions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); + g_object_class_install_property (object_class, PROP_APPLICATION, g_param_spec_object ("application", @@ -366,6 +325,14 @@ yelp_window_class_init (YelpWindowClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + signals[RESIZE_EVENT] = + g_signal_new ("resized", + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + g_type_class_add_private (klass, sizeof (YelpWindowPrivate)); } @@ -384,6 +351,11 @@ yelp_window_dispose (GObject *object) priv->action_group = NULL; } + if (priv->bookmark_actions) { + g_object_unref (priv->bookmark_actions); + priv->bookmark_actions = NULL; + } + if (priv->align_location) { g_object_unref (priv->align_location); priv->align_location = NULL; @@ -394,9 +366,19 @@ yelp_window_dispose (GObject *object) priv->align_hidden = NULL; } - while (priv->back_list) { - back_entry_free ((YelpBackEntry *) priv->back_list->data); - priv->back_list = g_list_delete_link (priv->back_list, priv->back_list); + if (priv->find_bar) { + g_object_unref (priv->find_bar); + priv->find_bar = NULL; + } + + if (priv->find_animate != 0) { + g_source_remove (priv->find_animate); + priv->find_animate = 0; + } + + if (priv->entry_color_animate != 0) { + g_source_remove (priv->entry_color_animate); + priv->entry_color_animate = 0; } G_OBJECT_CLASS (yelp_window_parent_class)->dispose (object); @@ -405,6 +387,8 @@ yelp_window_dispose (GObject *object) static void yelp_window_finalize (GObject *object) { + YelpWindowPrivate *priv = GET_PRIV (object); + g_free (priv->doc_uri); G_OBJECT_CLASS (yelp_window_parent_class)->finalize (object); } @@ -435,6 +419,7 @@ yelp_window_set_property (GObject *object, switch (prop_id) { case PROP_APPLICATION: priv->application = g_value_get_object (value); + window_construct ((YelpWindow *) object); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -442,6 +427,170 @@ yelp_window_set_property (GObject *object, } } +static void +window_construct (YelpWindow *window) +{ + GtkWidget *scroll; + GtkActionGroup *view_actions; + GtkAction *action; + GtkWidget *button; + GtkTreeIter iter; + YelpWindowPrivate *priv = GET_PRIV (window); + + gtk_window_set_icon_name (GTK_WINDOW (window), "help-browser"); + + priv->view = (YelpView *) yelp_view_new (); + + priv->vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), priv->vbox); + + priv->action_group = gtk_action_group_new ("WindowActions"); + gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (priv->action_group, + entries, G_N_ELEMENTS (entries), + window); + + priv->bookmark_actions = gtk_action_group_new ("BookmarkActions"); + gtk_action_group_set_translate_func (priv->bookmark_actions, NULL, NULL, NULL); + + priv->ui_manager = gtk_ui_manager_new (); + gtk_ui_manager_insert_action_group (priv->ui_manager, priv->action_group, 0); + gtk_ui_manager_insert_action_group (priv->ui_manager, priv->bookmark_actions, 1); + gtk_ui_manager_insert_action_group (priv->ui_manager, + yelp_application_get_action_group (priv->application), + 2); + view_actions = yelp_view_get_action_group (priv->view); + gtk_ui_manager_insert_action_group (priv->ui_manager, view_actions, 3); + gtk_window_add_accel_group (GTK_WINDOW (window), + gtk_ui_manager_get_accel_group (priv->ui_manager)); + gtk_ui_manager_add_ui_from_string (priv->ui_manager, YELP_UI, -1, NULL); + gtk_box_pack_start (GTK_BOX (priv->vbox), + gtk_ui_manager_get_widget (priv->ui_manager, "/ui/menubar"), + FALSE, FALSE, 0); + + priv->bookmarks_merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + g_signal_connect (priv->application, "bookmarks-changed", G_CALLBACK (app_bookmarks_changed), window); + + priv->hbox = gtk_hbox_new (FALSE, 0); + g_object_set (priv->hbox, "border-width", 2, NULL); + gtk_box_pack_start (GTK_BOX (priv->vbox), priv->hbox, FALSE, FALSE, 0); + + action = gtk_action_group_get_action (view_actions, "YelpViewGoBack"); + button = gtk_action_create_tool_item (action); + gtk_box_pack_start (GTK_BOX (priv->hbox), + button, + FALSE, FALSE, 0); + action = gtk_action_group_get_action (view_actions, "YelpViewGoForward"); + button = gtk_action_create_tool_item (action); + gtk_box_pack_start (GTK_BOX (priv->hbox), + button, + FALSE, FALSE, 0); + + priv->history = gtk_list_store_new (8, + G_TYPE_STRING, /* title */ + G_TYPE_STRING, /* desc */ + G_TYPE_STRING, /* icon */ + G_TYPE_STRING, /* uri */ + G_TYPE_STRING, /* doc */ + G_TYPE_STRING, /* page */ + G_TYPE_INT, /* flags */ + G_TYPE_STRING /* search terms */ + ); + gtk_list_store_append (priv->history, &iter); + gtk_list_store_set (priv->history, &iter, + HISTORY_COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEPARATOR, + -1); + gtk_list_store_append (priv->history, &iter); + gtk_list_store_set (priv->history, &iter, + HISTORY_COL_ICON, "system-search", + HISTORY_COL_TITLE, _("Search..."), + HISTORY_COL_FLAGS, YELP_LOCATION_ENTRY_IS_SEARCH, + -1); + + priv->entry = (YelpLocationEntry *) + yelp_location_entry_new_with_model (GTK_TREE_MODEL (priv->history), + HISTORY_COL_TITLE, + HISTORY_COL_DESC, + HISTORY_COL_ICON, + HISTORY_COL_FLAGS); + g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->entry)), "focus-in-event", + G_CALLBACK (entry_focus_in), window); + g_signal_connect (priv->entry, "focus-out-event", + G_CALLBACK (entry_focus_out), window); + + g_signal_connect (priv->entry, "completion-selected", + G_CALLBACK (entry_completion_selected), window); + g_signal_connect (priv->entry, "bookmark-clicked", + G_CALLBACK (entry_bookmark_clicked), window); + + priv->entry_location_selected = g_signal_connect (priv->entry, "location-selected", + G_CALLBACK (entry_location_selected), window); + priv->align_location = g_object_ref_sink (gtk_alignment_new (0.0, 0.5, 1.0, 0.0)); + gtk_box_pack_start (GTK_BOX (priv->hbox), + GTK_WIDGET (priv->align_location), + TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (priv->align_location), GTK_WIDGET (priv->entry)); + + priv->hidden_entry = gtk_entry_new (); + priv->align_hidden = g_object_ref_sink (gtk_alignment_new (0.0, 0.5, 1.0, 0.0)); + gtk_container_add (GTK_CONTAINER (priv->align_hidden), GTK_WIDGET (priv->hidden_entry)); + + g_signal_connect (priv->hidden_entry, "activate", + G_CALLBACK (hidden_entry_activate), window); + g_signal_connect_swapped (priv->hidden_entry, "focus-out-event", + G_CALLBACK (hidden_entry_hide), window); + g_signal_connect (priv->hidden_entry, "key-press-event", + G_CALLBACK (hidden_key_press), window); + + scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), + GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (priv->vbox), scroll, TRUE, TRUE, 0); + + priv->find_bar = g_object_ref_sink (gtk_hbox_new (FALSE, 6)); + g_object_set (priv->find_bar, "border-width", 2, NULL); + + priv->find_entry = gtk_entry_new (); + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->find_entry), + GTK_ENTRY_ICON_PRIMARY, + "edit-find"); + g_signal_connect (priv->find_entry, "changed", + G_CALLBACK (find_entry_changed), window); + g_signal_connect (priv->find_entry, "key-press-event", + G_CALLBACK (find_entry_key_press), window); + g_signal_connect (priv->find_entry, "focus-out-event", + G_CALLBACK (find_entry_focus_out), window); + g_object_set (priv->find_entry, "width-request", 300, NULL); + gtk_box_pack_start (GTK_BOX (priv->find_bar), priv->find_entry, FALSE, FALSE, 0); + + priv->find_label = gtk_label_new (""); + g_object_set (priv->find_label, "xalign", 0.0, NULL); + gtk_box_pack_start (GTK_BOX (priv->find_bar), priv->find_label, FALSE, FALSE, 0); + + g_signal_connect (priv->view, "external-uri", G_CALLBACK (view_external_uri), window); + g_signal_connect (priv->view, "new-view-requested", G_CALLBACK (view_new_window), window); + g_signal_connect (priv->view, "loaded", G_CALLBACK (view_loaded), window); + g_signal_connect (priv->view, "notify::yelp-uri", G_CALLBACK (view_uri_selected), window); + g_signal_connect_swapped (priv->view, "notify::page-id", + G_CALLBACK (window_set_bookmark_action), window); + g_signal_connect (priv->view, "notify::root-title", G_CALLBACK (view_root_title), window); + g_signal_connect (priv->view, "notify::page-title", G_CALLBACK (view_page_title), window); + g_signal_connect (priv->view, "notify::page-desc", G_CALLBACK (view_page_desc), window); + g_signal_connect (priv->view, "notify::page-icon", G_CALLBACK (view_page_icon), window); + gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (priv->view)); + gtk_widget_grab_focus (GTK_WIDGET (priv->view)); + + gtk_drag_dest_set (GTK_WIDGET (window), + GTK_DEST_DEFAULT_ALL, + NULL, 0, + GDK_ACTION_COPY); + gtk_drag_dest_add_uri_targets (GTK_WIDGET (window)); + g_signal_connect (window, "drag-data-received", + G_CALLBACK (window_drag_received), NULL); +} /******************************************************************************/ @@ -464,12 +613,23 @@ yelp_window_load_uri (YelpWindow *window, yelp_view_load_uri (priv->view, uri); } -GtkActionGroup * -yelp_window_get_action_group (YelpWindow *window) +YelpUri * +yelp_window_get_uri (YelpWindow *window) { + YelpUri *uri; YelpWindowPrivate *priv = GET_PRIV (window); + g_object_get (G_OBJECT (priv->view), "yelp-uri", &uri, NULL); + return uri; +} - return priv->action_group; +void +yelp_window_get_geometry (YelpWindow *window, + gint *width, + gint *height) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + *width = priv->width; + *height = priv->height; } /******************************************************************************/ @@ -477,15 +637,64 @@ yelp_window_get_action_group (YelpWindow *window) static void window_new (GtkAction *action, YelpWindow *window) { + YelpUri *yuri; gchar *uri = NULL; YelpWindowPrivate *priv = GET_PRIV (window); - if (priv->back_list && priv->back_list->data) - uri = yelp_uri_get_document_uri (((YelpBackEntry *) priv->back_list->data)->uri); + g_object_get (priv->view, "yelp-uri", &yuri, NULL); + uri = yelp_uri_get_document_uri (yuri); yelp_application_new_window (priv->application, uri); g_free (uri); + g_object_unref (yuri); +} + +static void +window_drag_received (YelpWindow *window, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer userdata) +{ + gchar **uris = gtk_selection_data_get_uris (data); + if (uris && uris[0]) { + YelpUri *uri = yelp_uri_new (uris[0]); + yelp_window_load_uri (window, uri); + g_object_unref (uri); + g_strfreev (uris); + gtk_drag_finish (context, TRUE, FALSE, time); + } + gtk_drag_finish (context, FALSE, FALSE, time); +} + +static gboolean +window_configure_event (YelpWindow *window, + GdkEventConfigure *event, + gpointer user_data) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + priv->width = event->width; + priv->height = event->height; + if (priv->resize_signal > 0) + g_source_remove (priv->resize_signal); + priv->resize_signal = g_timeout_add (200, + (GSourceFunc) window_resize_signal, + window); + g_object_set (priv->find_entry, "width-request", 2 * priv->width / 3, NULL); + return FALSE; +} + +static gboolean +window_resize_signal (YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + g_signal_emit (window, signals[RESIZE_EVENT], 0); + priv->resize_signal = 0; + return FALSE; } static void @@ -497,10 +706,285 @@ window_close (GtkAction *action, YelpWindow *window) } static void +window_add_bookmark (GtkAction *action, + YelpWindow *window) +{ + YelpUri *uri; + gchar *doc_uri, *page_id, *icon, *title; + YelpWindowPrivate *priv = GET_PRIV (window); + + g_object_get (priv->view, + "yelp-uri", &uri, + "page-id", &page_id, + "page-icon", &icon, + "page-title", &title, + NULL); + doc_uri = yelp_uri_get_document_uri (uri); + yelp_application_add_bookmark (priv->application, doc_uri, page_id, icon, title); + g_free (doc_uri); + g_free (page_id); + g_free (icon); + g_free (title); + g_object_unref (uri); +} + +static void +window_load_bookmark (GtkAction *action, + YelpWindow *window) +{ + YelpUri *base, *uri; + gchar *xref; + YelpWindowPrivate *priv = GET_PRIV (window); + + /* Bookmark action names are prefixed with 'LoadBookmark-' */ + xref = g_strconcat ("xref:", gtk_action_get_name (action) + 13, NULL); + g_object_get (priv->view, "yelp-uri", &base, NULL); + uri = yelp_uri_new_relative (base, xref); + + yelp_view_load_uri (priv->view, uri); + + g_object_unref (base); + g_object_unref (uri); + g_free (xref); +} + +static void +app_bookmarks_changed (YelpApplication *app, + const gchar *doc_uri, + YelpWindow *window) +{ + YelpUri *uri; + gchar *this_doc_uri; + YelpWindowPrivate *priv = GET_PRIV (window); + + g_object_get (priv->view, "yelp-uri", &uri, NULL); + this_doc_uri = yelp_uri_get_document_uri (uri); + + if (g_str_equal (this_doc_uri, doc_uri)) + window_set_bookmarks (window, doc_uri); + + g_free (this_doc_uri); + g_object_unref (uri); +} + +typedef struct _YelpMenuEntry YelpMenuEntry; +struct _YelpMenuEntry { + gchar *page_id; + gchar *icon; + gchar *title; +}; + +static gint +entry_compare (YelpMenuEntry *a, YelpMenuEntry *b) +{ + gint ret = yelp_settings_cmp_icons (a->icon, b->icon); + if (ret != 0) + return ret; + + if (a->title && b->title) + return g_utf8_collate (a->title, b->title); + else if (b->title == NULL) + return -1; + else if (a->title == NULL) + return 1; + + return 0; +} + +static void +window_set_bookmarks (YelpWindow *window, + const gchar *doc_uri) +{ + GVariant *value; + GVariantIter *iter; + gchar *page_id, *icon, *title; + YelpWindowPrivate *priv = GET_PRIV (window); + GSList *entries = NULL; + + gtk_ui_manager_remove_ui (priv->ui_manager, priv->bookmarks_merge_id); + + value = yelp_application_get_bookmarks (priv->application, doc_uri); + g_variant_get (value, "a(sss)", &iter); + while (g_variant_iter_loop (iter, "(&s&s&s)", &page_id, &icon, &title)) { + YelpMenuEntry *entry = g_new0 (YelpMenuEntry, 1); + entry->page_id = page_id; + entry->icon = icon; + entry->title = title; + entries = g_slist_insert_sorted (entries, entry, (GCompareFunc) entry_compare); + } + for ( ; entries != NULL; entries = g_slist_delete_link (entries, entries)) { + GSList *cur; + GtkAction *bookmark; + YelpMenuEntry *entry = (YelpMenuEntry *) entries->data; + gchar *action_id = g_strconcat ("LoadBookmark-", entry->page_id, NULL); + + bookmark = gtk_action_group_get_action (priv->bookmark_actions, action_id); + if (bookmark == NULL) { + bookmark = gtk_action_new (action_id, entry->title, NULL, NULL); + g_signal_connect (bookmark, "activate", + G_CALLBACK (window_load_bookmark), window); + gtk_action_set_icon_name (bookmark, entry->icon); + gtk_action_group_add_action (priv->bookmark_actions, bookmark); + } + gtk_ui_manager_add_ui (priv->ui_manager, + priv->bookmarks_merge_id, + "ui/menubar/BookmarksMenu/Bookmarks", + action_id, action_id, + GTK_UI_MANAGER_MENUITEM, + FALSE); + gtk_ui_manager_ensure_update (priv->ui_manager); + for (cur = gtk_action_get_proxies (bookmark); cur != NULL; cur = cur->next) { + if (GTK_IS_IMAGE_MENU_ITEM (cur->data)) + g_object_set (cur->data, "always-show-image", TRUE, NULL); + } + g_free (action_id); + g_free (entry); + } + + window_set_bookmark_icons (window); + + g_variant_iter_free (iter); + g_variant_unref (value); +} + +static void +window_set_bookmark_action (YelpWindow *window) +{ + YelpUri *uri; + gchar *doc_uri, *page_id; + gchar *curpage; + GVariant *value; + GVariantIter *viter; + GtkAction *action; + YelpWindowPrivate *priv = GET_PRIV (window); + + action = gtk_action_group_get_action (priv->action_group, "AddBookmark"); + + g_object_get (priv->view, + "yelp-uri", &uri, + "page-id", &page_id, + NULL); + if (page_id == NULL) { + gtk_action_set_sensitive (action, FALSE); + if (uri) + g_object_unref (uri); + return; + } + gtk_action_set_sensitive (action, TRUE); + + doc_uri = yelp_uri_get_document_uri (uri); + value = yelp_application_get_bookmarks (priv->application, doc_uri); + g_variant_get (value, "a(sss)", &viter); + while (g_variant_iter_loop (viter, "(&s&s&s)", &curpage, NULL, NULL)) { + if (g_str_equal (page_id, curpage)) { + gtk_action_set_sensitive (action, FALSE); + break; + } + } + g_variant_iter_free (viter); + g_variant_unref (value); + + g_free (page_id); + g_free (doc_uri); + g_object_unref (uri); +} + +static void +window_set_bookmark_icons (YelpWindow *window) +{ + YelpUri *uri; + gchar *doc_uri; + GVariant *value; + GVariantIter *viter; + gboolean cont; + GtkTreeIter iter; + gchar *page_id; + GHashTable *bookmarks; + GtkTreeModel *completion; + YelpWindowPrivate *priv = GET_PRIV (window); + + g_object_get (priv->view, "yelp-uri", &uri, NULL); + doc_uri = yelp_uri_get_document_uri (uri); + + bookmarks = g_hash_table_new (g_str_hash, g_str_equal); + value = yelp_application_get_bookmarks (priv->application, doc_uri); + g_variant_get (value, "a(sss)", &viter); + while (g_variant_iter_loop (viter, "(&s&s&s)", &page_id, NULL, NULL)) + g_hash_table_insert (bookmarks, page_id, page_id); + g_variant_iter_free (viter); + g_variant_unref (value); + + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &iter); + while (cont) { + gchar *iter_doc, *iter_page; + gint iter_flags; + gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter, + HISTORY_COL_DOC, &iter_doc, + HISTORY_COL_PAGE, &iter_page, + HISTORY_COL_FLAGS, &iter_flags, + -1); + iter_flags &= ~YELP_LOCATION_ENTRY_CAN_BOOKMARK; + iter_flags &= ~YELP_LOCATION_ENTRY_IS_BOOKMARKED; + + if (iter_flags & (YELP_LOCATION_ENTRY_IS_SEPARATOR | YELP_LOCATION_ENTRY_IS_SEARCH)) { + } + else if (iter_doc && g_str_equal (iter_doc, doc_uri)) { + if (iter_page && g_hash_table_lookup (bookmarks, iter_page)) + iter_flags |= YELP_LOCATION_ENTRY_IS_BOOKMARKED; + else if (iter_page) + iter_flags |= YELP_LOCATION_ENTRY_CAN_BOOKMARK; + } + + g_free (iter_doc); + g_free (iter_page); + gtk_list_store_set (priv->history, &iter, HISTORY_COL_FLAGS, iter_flags, -1); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->history), &iter); + } + + completion = (GtkTreeModel *) g_hash_table_lookup (completions, doc_uri); + if (completion) { + gchar *page_id; + gint flags; + completion = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (completion)); + cont = gtk_tree_model_get_iter_first (completion, &iter); + while (cont) { + gtk_tree_model_get (completion, &iter, + COMPLETION_COL_PAGE, &page_id, + COMPLETION_COL_FLAGS, &flags, + -1); + if (page_id && g_hash_table_lookup (bookmarks, page_id)) { + flags |= YELP_LOCATION_ENTRY_IS_BOOKMARKED; + } + else { + flags &= ~YELP_LOCATION_ENTRY_IS_BOOKMARKED; + } + gtk_list_store_set (GTK_LIST_STORE (completion), &iter, + COMPLETION_COL_FLAGS, flags, + -1); + cont = gtk_tree_model_iter_next (completion, &iter); + } + } + + g_hash_table_destroy (bookmarks); + g_free (doc_uri); + g_object_unref (uri); +} + + +static void +window_start_search (GtkAction *action, YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + + yelp_location_entry_start_search (priv->entry); +} + +static void window_open_location (GtkAction *action, YelpWindow *window) { + YelpUri *yuri = NULL; gchar *uri = NULL; - const GdkColor yellow; + GdkColor yellow; gchar *color; YelpWindowPrivate *priv = GET_PRIV (window); @@ -523,8 +1007,11 @@ window_open_location (GtkAction *action, YelpWindow *window) } g_free (color); - if (priv->back_cur && priv->back_cur->data) - uri = yelp_uri_get_canonical_uri (((YelpBackEntry *) priv->back_list->data)->uri); + g_object_get (priv->view, "yelp-uri", &yuri, NULL); + if (yuri) { + uri = yelp_uri_get_canonical_uri (yuri); + g_object_unref (yuri); + } if (uri) { gchar *c; gtk_entry_set_text (GTK_ENTRY (priv->hidden_entry), uri); @@ -537,60 +1024,193 @@ window_open_location (GtkAction *action, YelpWindow *window) } } -static void -window_font_adjustment (GtkAction *action, - YelpWindow *window) -{ +static gboolean +find_animate_open (YelpWindow *window) { YelpWindowPrivate *priv = GET_PRIV (window); - yelp_application_adjust_font (priv->application, - g_str_equal (gtk_action_get_name (action), "LargerText") ? 1 : -1); + priv->find_cur_height += 2; + if (priv->find_cur_height >= priv->find_bar_height) { + priv->find_cur_height = priv->find_bar_height; + g_object_set (priv->find_bar, "height-request", -1, NULL); + g_object_set (priv->find_entry, "height-request", -1, NULL); + priv->find_animate = 0; + gtk_editable_select_region (GTK_EDITABLE (priv->find_entry), 0, -1); + return FALSE; + } + else { + if (priv->find_cur_height >= 12) + find_entry_changed (GTK_ENTRY (priv->find_entry), window); + g_object_set (priv->find_bar, "height-request", priv->find_cur_height, NULL); + g_object_set (priv->find_entry, "height-request", + MIN(priv->find_cur_height, priv->find_entry_height), + NULL); + return TRUE; + } } -static void -window_show_text_cursor (GtkToggleAction *action, - YelpWindow *window) -{ +static gboolean +find_animate_close (YelpWindow *window) { YelpWindowPrivate *priv = GET_PRIV (window); - yelp_application_set_show_text_cursor (priv->application, - gtk_toggle_action_get_active (action)); + priv->find_cur_height -= 2; + if (priv->find_cur_height <= 0) { + priv->find_cur_height = 0; + g_object_set (priv->find_bar, "height-request", -1, NULL); + g_object_set (priv->find_entry, "height-request", -1, NULL); + gtk_container_remove (GTK_CONTAINER (priv->vbox), priv->find_bar); + priv->find_animate = 0; + return FALSE; + } + else { + if (priv->find_cur_height < 12) + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->find_entry), + GTK_ENTRY_ICON_PRIMARY, + NULL); + g_object_set (priv->find_bar, "height-request", priv->find_cur_height, NULL); + g_object_set (priv->find_entry, "height-request", + MIN(priv->find_cur_height, priv->find_entry_height), + NULL); + return TRUE; + } } static void -window_go_back (GtkAction *action, - YelpWindow *window) +window_find_in_page (GtkAction *action, + YelpWindow *window) { + GtkRequisition req; YelpWindowPrivate *priv = GET_PRIV (window); - if (priv->back_cur == NULL || priv->back_cur->next == NULL) + if (priv->find_animate != 0) return; - priv->back_cur = priv->back_cur->next; - - if (priv->back_cur == NULL || priv->back_cur->data == NULL) + if (gtk_widget_get_parent (priv->find_bar) != NULL) { + gtk_widget_grab_focus (priv->find_entry); return; + } + + g_object_set (priv->find_entry, "width-request", 2 * priv->width / 3, NULL); + + gtk_box_pack_end (GTK_BOX (priv->vbox), priv->find_bar, FALSE, FALSE, 0); + g_object_set (priv->find_bar, "height-request", -1, NULL); + g_object_set (priv->find_entry, "height-request", -1, NULL); + gtk_widget_show_all (priv->find_bar); + gtk_widget_grab_focus (priv->find_entry); - priv->back_load = TRUE; - yelp_window_load_uri (window, ((YelpBackEntry *) priv->back_cur->data)->uri); + gtk_widget_size_request (priv->find_bar, &req); + priv->find_bar_height = req.height; + gtk_widget_size_request (priv->find_entry, &req); + priv->find_entry_height = req.height; + + priv->find_cur_height = 2; + + g_object_set (priv->find_bar, "height-request", 2, NULL); + g_object_set (priv->find_entry, "height-request", 2, NULL); + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->find_entry), + GTK_ENTRY_ICON_PRIMARY, + NULL); + priv->find_animate = g_timeout_add (2, (GSourceFunc) find_animate_open, window); +} + +static gboolean +find_entry_key_press (GtkEntry *entry, + GdkEventKey *event, + YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + + if (priv->find_animate != 0) + return TRUE; + + if (event->keyval == GDK_Escape) { + gtk_widget_grab_focus (GTK_WIDGET (priv->view)); + return TRUE; + } + + if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) { + gchar *text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); + webkit_web_view_search_text (WEBKIT_WEB_VIEW (priv->view), + text, FALSE, TRUE, TRUE); + g_free (text); + return TRUE; + } + + return FALSE; +} + +static gboolean +find_entry_focus_out (GtkEntry *entry, + GdkEventFocus *event, + YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (priv->view)); + webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (priv->view), FALSE); + priv->find_cur_height = priv->find_bar_height; + priv->find_animate = g_timeout_add (2, (GSourceFunc) find_animate_close, window); + return FALSE; } static void -window_go_forward (GtkAction *action, - YelpWindow *window) +find_entry_changed (GtkEntry *entry, + YelpWindow *window) { + gchar *text; + gint count; YelpWindowPrivate *priv = GET_PRIV (window); - if (priv->back_cur == NULL || priv->back_cur->prev == NULL) - return; + webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (priv->view)); - priv->back_cur = priv->back_cur->prev; + text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); - if (priv->back_cur == NULL || priv->back_cur->data == NULL) + if (text[0] == '\0') { + gtk_widget_modify_base (priv->find_entry, GTK_STATE_NORMAL, NULL); + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), + GTK_ENTRY_ICON_PRIMARY, + "edit-find"); + gtk_label_set_text (GTK_LABEL (priv->find_label), ""); return; + } - priv->back_load = TRUE; - yelp_window_load_uri (window, ((YelpBackEntry *) priv->back_cur->data)->uri); + count = webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (priv->view), + text, FALSE, 0); + if (count > 0) { + gchar *label = g_strdup_printf (ngettext ("%i match", "%i matches", count), count); + gtk_widget_modify_base (priv->find_entry, GTK_STATE_NORMAL, NULL); + webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (priv->view), TRUE); + webkit_web_view_search_text (WEBKIT_WEB_VIEW (priv->view), + text, FALSE, TRUE, TRUE); + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), + GTK_ENTRY_ICON_PRIMARY, + "edit-find"); + gtk_label_set_text (GTK_LABEL (priv->find_label), label); + g_free (label); + } + else { + gchar *color; + GdkColor gdkcolor; + + color = yelp_settings_get_color (yelp_settings_get_default (), + YELP_SETTINGS_COLOR_RED_BASE); + if (gdk_color_parse (color, &gdkcolor)) + gtk_widget_modify_base (priv->find_entry, GTK_STATE_NORMAL, &gdkcolor); + g_free (color); + + webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (priv->view), FALSE); + gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), + GTK_ENTRY_ICON_PRIMARY, + "dialog-warning"); + gtk_label_set_text (GTK_LABEL (priv->find_label), _("No matches")); + } + + g_free (text); +} + +static void +entry_bookmark_clicked (YelpLocationEntry *entry, + YelpWindow *window) +{ + window_add_bookmark (NULL, window); } static void @@ -603,12 +1223,44 @@ entry_location_selected (YelpLocationEntry *entry, gtk_combo_box_get_active_iter (GTK_COMBO_BOX (priv->entry), &iter); gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter, - COL_URI, &uri, + HISTORY_COL_URI, &uri, -1); yelp_view_load (priv->view, uri); g_free (uri); } +static gint +entry_completion_sort (GtkTreeModel *model, + GtkTreeIter *iter1, + GtkTreeIter *iter2, + gpointer user_data) +{ + gint ret = 0; + gchar *key1, *key2; + + gtk_tree_model_get (model, iter1, COMPLETION_COL_ICON, &key1, -1); + gtk_tree_model_get (model, iter2, COMPLETION_COL_ICON, &key2, -1); + ret = yelp_settings_cmp_icons (key1, key2); + g_free (key1); + g_free (key2); + + if (ret) + return ret; + + gtk_tree_model_get (model, iter1, COMPLETION_COL_TITLE, &key1, -1); + gtk_tree_model_get (model, iter2, COMPLETION_COL_TITLE, &key2, -1); + if (key1 && key2) + ret = g_utf8_collate (key1, key2); + else if (key2 == NULL) + return -1; + else if (key1 == NULL) + return 1; + g_free (key1); + g_free (key2); + + return ret; +} + static void entry_completion_selected (YelpLocationEntry *entry, GtkTreeModel *model, @@ -619,8 +1271,8 @@ entry_completion_selected (YelpLocationEntry *entry, gchar *page, *xref; YelpWindowPrivate *priv = GET_PRIV (window); - base = ((YelpBackEntry *) priv->back_cur->data)->uri; - gtk_tree_model_get (model, iter, COL_URI, &page, -1); + g_object_get (priv->view, "yelp-uri", &base, NULL); + gtk_tree_model_get (model, iter, COMPLETION_COL_PAGE, &page, -1); xref = g_strconcat ("xref:", page, NULL); uri = yelp_uri_new_relative (base, xref); @@ -630,11 +1282,60 @@ entry_completion_selected (YelpLocationEntry *entry, g_free (page); g_free (xref); g_object_unref (uri); + g_object_unref (base); gtk_widget_grab_focus (GTK_WIDGET (priv->view)); } static gboolean +entry_color_animate (YelpWindow *window) { + gchar *color; + GdkColor yellow, base; + YelpWindowPrivate *priv = GET_PRIV (window); + + color = yelp_settings_get_color (yelp_settings_get_default (), + YELP_SETTINGS_COLOR_YELLOW_BASE); + gdk_color_parse (color, &yellow); + g_free (color); + + color = yelp_settings_get_color (yelp_settings_get_default (), + YELP_SETTINGS_COLOR_BASE); + gdk_color_parse (color, &base); + g_free (color); + + yellow.red = priv->entry_color_step * yellow.red + (1.0 - priv->entry_color_step) * base.red; + yellow.green = priv->entry_color_step * yellow.green + (1.0 - priv->entry_color_step) * base.green; + yellow.blue = priv->entry_color_step * yellow.blue + (1.0 - priv->entry_color_step) * base.blue; + + gtk_widget_modify_base (gtk_bin_get_child (GTK_BIN (priv->entry)), GTK_STATE_NORMAL, &yellow); + + priv->entry_color_step -= 0.05; + + if (priv->entry_color_step < 0.0) { + priv->entry_color_animate = 0; + return FALSE; + } + + return TRUE; +} + +static gboolean +entry_focus_in (GtkEntry *entry, + GdkEventFocus *event, + YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + + if (priv->entry_color_animate != 0) + return FALSE; + + priv->entry_color_step = 1.0; + priv->entry_color_animate = g_timeout_add (40, (GSourceFunc) entry_color_animate, window); + + return FALSE; +} + +static gboolean entry_focus_out (YelpLocationEntry *entry, GdkEventFocus *event, YelpWindow *window) @@ -662,36 +1363,106 @@ view_external_uri (YelpView *view, } static void +view_new_window (YelpView *view, + YelpUri *uri, + YelpWindow *window) +{ + YelpWindowPrivate *priv = GET_PRIV (window); + yelp_application_new_window_uri (priv->application, uri); +} + +static void view_loaded (YelpView *view, YelpWindow *window) { gchar **ids; gint i; + GtkTreeIter iter; + gint flags; + YelpUri *uri; + gchar *doc_uri, *page_id, *icon, *title; + GtkTreeModel *completion; YelpWindowPrivate *priv = GET_PRIV (window); YelpDocument *document = yelp_view_get_document (view); - ids = yelp_document_list_page_ids (document); - - gtk_list_store_clear (priv->completion); - for (i = 0; ids[i]; i++) { - GtkTreeIter iter; - gchar *title, *desc, *icon; - gtk_list_store_insert (GTK_LIST_STORE (priv->completion), &iter, 0); - title = yelp_document_get_page_title (document, ids[i]); - desc = yelp_document_get_page_desc (document, ids[i]); - icon = yelp_document_get_page_icon (document, ids[i]); - gtk_list_store_set (priv->completion, &iter, - COL_TITLE, title, - COL_DESC, desc, - COL_ICON, icon, - COL_URI, ids[i], - -1); - g_free (icon); - g_free (desc); - g_free (title); + + gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &iter); + gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter, + HISTORY_COL_FLAGS, &flags, + -1); + if (flags & YELP_LOCATION_ENTRY_IS_LOADING) { + flags = flags & ~YELP_LOCATION_ENTRY_IS_LOADING; + gtk_list_store_set (priv->history, &iter, HISTORY_COL_FLAGS, flags, -1); } - g_strfreev (ids); - g_object_unref (document); + g_object_get (view, + "yelp-uri", &uri, + "page-id", &page_id, + "page-icon", &icon, + "page-title", &title, + NULL); + doc_uri = yelp_uri_get_document_uri (uri); + gtk_list_store_set (priv->history, &iter, + HISTORY_COL_DOC, doc_uri, + HISTORY_COL_PAGE, page_id, + -1); + yelp_application_update_bookmarks (priv->application, + doc_uri, + page_id, + icon, + title); + g_free (page_id); + g_free (icon); + g_free (title); + + completion = (GtkTreeModel *) g_hash_table_lookup (completions, doc_uri); + if (completion == NULL) { + GtkListStore *base = gtk_list_store_new (5, + G_TYPE_STRING, /* title */ + G_TYPE_STRING, /* desc */ + G_TYPE_STRING, /* icon */ + G_TYPE_STRING, /* uri */ + G_TYPE_INT /* flags */ + ); + completion = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (base)); + gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (completion), + entry_completion_sort, + NULL, NULL); + g_hash_table_insert (completions, doc_uri, completion); + ids = yelp_document_list_page_ids (document); + for (i = 0; ids[i]; i++) { + GtkTreeIter iter; + gchar *title, *desc, *icon; + gtk_list_store_insert (GTK_LIST_STORE (base), &iter, 0); + title = yelp_document_get_page_title (document, ids[i]); + desc = yelp_document_get_page_desc (document, ids[i]); + icon = yelp_document_get_page_icon (document, ids[i]); + gtk_list_store_set (base, &iter, + COMPLETION_COL_TITLE, title, + COMPLETION_COL_DESC, desc, + COMPLETION_COL_ICON, icon, + COMPLETION_COL_PAGE, ids[i], + -1); + g_free (icon); + g_free (desc); + g_free (title); + } + g_object_unref (base); + g_strfreev (ids); + } + else { + g_free (doc_uri); + } + + yelp_location_entry_set_completion_model (YELP_LOCATION_ENTRY (priv->entry), + GTK_TREE_MODEL (completion), + COMPLETION_COL_TITLE, + COMPLETION_COL_DESC, + COMPLETION_COL_ICON, + COMPLETION_COL_FLAGS); + + window_set_bookmark_icons (window); + + g_object_unref (uri); } static void @@ -703,71 +1474,21 @@ view_uri_selected (YelpView *view, gchar *iter_uri; gboolean cont; YelpUri *uri; - gchar *struri; - YelpBackEntry *back; - GtkAction *action; + gchar *struri, *doc_uri; YelpWindowPrivate *priv = GET_PRIV (window); g_object_get (G_OBJECT (view), "yelp-uri", &uri, NULL); if (uri == NULL) return; - back = g_new0 (YelpBackEntry, 1); - back->uri = g_object_ref (uri); - if (!priv->back_load) { - while (priv->back_list != priv->back_cur) { - back_entry_free ((YelpBackEntry *) priv->back_list->data); - priv->back_list = g_list_delete_link (priv->back_list, priv->back_list); - } - priv->back_list = g_list_prepend (priv->back_list, back); - priv->back_cur = priv->back_list; - } - priv->back_load = FALSE; - - action = gtk_action_group_get_action (priv->action_group, "GoBack"); - gtk_action_set_sensitive (action, FALSE); - gtk_widget_set_tooltip_text (priv->back_button, ""); - if (priv->back_cur->next && priv->back_cur->next->data) { - gchar *tooltip = ""; - YelpBackEntry *back = priv->back_cur->next->data; - - gtk_action_set_sensitive (action, TRUE); - if (back->title && back->desc) { - gchar *color; - color = yelp_settings_get_color (yelp_settings_get_default (), - YELP_SETTINGS_COLOR_TEXT_LIGHT); - tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>", - back->title, color, back->desc); - g_free (color); - } - else if (back->title) - tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>", - back->title); - /* Can't seem to use markup on GtkAction tooltip */ - gtk_widget_set_tooltip_markup (priv->back_button, tooltip); - } - - action = gtk_action_group_get_action (priv->action_group, "GoForward"); - gtk_action_set_sensitive (action, FALSE); - gtk_widget_set_tooltip_text (priv->forward_button, ""); - if (priv->back_cur->prev && priv->back_cur->prev->data) { - gchar *tooltip = ""; - YelpBackEntry *back = priv->back_cur->prev->data; - - gtk_action_set_sensitive (action, TRUE); - if (back->title && back->desc) { - gchar *color; - color = yelp_settings_get_color (yelp_settings_get_default (), - YELP_SETTINGS_COLOR_TEXT_LIGHT); - tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>\n<span color='%s'>%s</span>", - back->title, color, back->desc); - g_free (color); - } - else if (back->title) - tooltip = g_markup_printf_escaped ("<span size='larger'>%s</span>", - back->title); - /* Can't seem to use markup on GtkAction tooltip */ - gtk_widget_set_tooltip_markup (priv->forward_button, tooltip); + doc_uri = yelp_uri_get_document_uri (uri); + if (priv->doc_uri == NULL || !g_str_equal (priv->doc_uri, doc_uri)) { + window_set_bookmarks (window, doc_uri); + g_free (priv->doc_uri); + priv->doc_uri = doc_uri; + } + else { + g_free (doc_uri); } struri = yelp_uri_get_canonical_uri (uri); @@ -775,7 +1496,7 @@ view_uri_selected (YelpView *view, cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &iter); while (cont) { gtk_tree_model_get (GTK_TREE_MODEL (priv->history), &iter, - COL_URI, &iter_uri, + HISTORY_COL_URI, &iter_uri, -1); if (iter_uri && g_str_equal (struri, iter_uri)) { g_free (iter_uri); @@ -796,9 +1517,10 @@ view_uri_selected (YelpView *view, GtkTreeIter last; gtk_list_store_prepend (priv->history, &iter); gtk_list_store_set (priv->history, &iter, - COL_TITLE, _("Loading"), - COL_ICON, "help-contents", - COL_URI, struri, + HISTORY_COL_TITLE, _("Loading"), + HISTORY_COL_ICON, "help-contents", + HISTORY_COL_URI, struri, + HISTORY_COL_FLAGS, YELP_LOCATION_ENTRY_IS_LOADING, -1); /* Limit to 15 entries. There are two extra for the search entry and * the separator above it. @@ -811,6 +1533,7 @@ view_uri_selected (YelpView *view, gtk_list_store_remove (priv->history, &last); } } + window_set_bookmark_icons (window); } g_signal_handler_block (priv->entry, priv->entry_location_selected); @@ -846,7 +1569,6 @@ view_page_title (YelpView *view, GtkTreeIter first; gchar *title, *frag; YelpUri *uri; - YelpBackEntry *back = NULL; YelpWindowPrivate *priv = GET_PRIV (window); g_object_get (view, "page-title", &title, NULL); @@ -856,32 +1578,19 @@ view_page_title (YelpView *view, g_object_get (view, "yelp-uri", &uri, NULL); frag = yelp_uri_get_frag_id (uri); - if (priv->back_cur) - back = priv->back_cur->data; - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first); if (frag) { gchar *tmp = g_strdup_printf ("%s (#%s)", title, frag); gtk_list_store_set (priv->history, &first, - COL_TITLE, tmp, + HISTORY_COL_TITLE, tmp, -1); - if (back) { - g_free (back->title); - back->title = tmp; - } - else { - g_free (tmp); - } + g_free (tmp); g_free (frag); } else { gtk_list_store_set (priv->history, &first, - COL_TITLE, title, + HISTORY_COL_TITLE, title, -1); - if (back) { - g_free (back->title); - back->title = g_strdup (title); - } } g_free (title); @@ -895,25 +1604,16 @@ view_page_desc (YelpView *view, { GtkTreeIter first; gchar *desc; - YelpBackEntry *back = NULL; YelpWindowPrivate *priv = GET_PRIV (window); g_object_get (view, "page-desc", &desc, NULL); if (desc == NULL) return; - if (priv->back_cur) - back = priv->back_cur->data; - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first); gtk_list_store_set (priv->history, &first, - COL_DESC, desc, + HISTORY_COL_DESC, desc, -1); - if (back) { - g_free (back->desc); - back->desc = g_strdup (desc); - } - g_free (desc); } @@ -932,7 +1632,7 @@ view_page_icon (YelpView *view, gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->history), &first); gtk_list_store_set (priv->history, &first, - COL_ICON, icon, + HISTORY_COL_ICON, icon, -1); g_free (icon); } diff --git a/src/yelp-window.h b/src/yelp-window.h index 58084dcc..6231e169 100644 --- a/src/yelp-window.h +++ b/src/yelp-window.h @@ -46,11 +46,13 @@ struct _YelpWindowClass GtkWindowClass parent_class; }; -GType yelp_window_get_type (void); -YelpWindow * yelp_window_new (YelpApplication *app); -void yelp_window_load_uri (YelpWindow *window, - YelpUri *uri); - -GtkActionGroup * yelp_window_get_action_group (YelpWindow *window); +GType yelp_window_get_type (void); +YelpWindow * yelp_window_new (YelpApplication *app); +void yelp_window_load_uri (YelpWindow *window, + YelpUri *uri); +YelpUri * yelp_window_get_uri (YelpWindow *window); +void yelp_window_get_geometry (YelpWindow *window, + gint *width, + gint *height); #endif /* __YELP_WINDOW_H__ */ diff --git a/stylesheets/Makefile.am b/stylesheets/Makefile.am index d8f0b58b..996b0d07 100644 --- a/stylesheets/Makefile.am +++ b/stylesheets/Makefile.am @@ -12,4 +12,11 @@ xsl_DATA = \ toc2html.xsl \ yelp-common.xsl -EXTRA_DIST=$(xsl_DATA) db2html.xsl.in db-title.xsl.in mal2html.xsl.in toc2html.xsl.in yelp-common.xsl.in +EXTRA_DIST= \ + $(xsl_DATA) \ + db2html.xsl.in \ + db-title.xsl.in \ + info2html.xsl.in \ + mal2html.xsl.in \ + toc2html.xsl.in \ + yelp-common.xsl.in diff --git a/stylesheets/info2html.xsl b/stylesheets/info2html.xsl deleted file mode 100644 index d8340fa8..00000000 --- a/stylesheets/info2html.xsl +++ /dev/null @@ -1,127 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- --> - -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:yelp="http://www.gnome.org/yelp/ns" - xmlns="http://www.w3.org/1999/xhtml" - extension-element-prefixes="yelp" - version="1.0"> - -<xsl:param name="stylesheet_path" select="''"/> - -<xsl:param name="yelp.icon.blockquote"/> -<xsl:param name="yelp.icon.caution"/> -<xsl:param name="yelp.icon.important"/> -<xsl:param name="yelp.icon.note"/> -<xsl:param name="yelp.icon.programlisting"/> -<xsl:param name="yelp.icon.tip"/> -<xsl:param name="yelp.icon.warning"/> - -<xsl:param name="theme.color.text"/> -<xsl:param name="theme.color.background"/> -<xsl:param name="theme.color.text_light"/> -<xsl:param name="theme.color.link"/> -<xsl:param name="theme.color.link_visited"/> -<xsl:param name="theme.color.gray_background"/> -<xsl:param name="theme.color.gray_border"/> -<xsl:param name="theme.color.blue_background"/> -<xsl:param name="theme.color.blue_border"/> -<xsl:param name="theme.color.red_background"/> -<xsl:param name="theme.color.red_border"/> -<xsl:param name="theme.color.yellow_background"/> -<xsl:param name="theme.color.yellow_border"/> - -<xsl:template match="/Info"> - <xsl:apply-templates select="Section"/> -</xsl:template> - -<xsl:template match="Section"> - <yelp:document href="{@id}"> - <html> - <head> - <title> - <xsl:value-of select="@name"/> - </title> - <style type="text/css"> - <xsl:call-template name="html.css"/> - </style> - </head> - <body> - <pre class="body"> - <xsl:apply-templates select="node()[not(self::Section)]"/> - </pre> - </body> - </html> - </yelp:document> - <xsl:apply-templates select="Section"/> -</xsl:template> - -<xsl:template match="para"> - <xsl:value-of select="node()"/> - <xsl:text> - </xsl:text> -</xsl:template> - -<xsl:template match="para1"> - <xsl:value-of select="node()"/> -</xsl:template> - -<xsl:template match="spacing"> - <xsl:value-of select="node()"/> -</xsl:template> - -<xsl:template match="a"> - <xsl:element name="a"> - <xsl:attribute name="href"> <xsl:value-of select="@href"/></xsl:attribute> - <xsl:value-of select="node()"/> - </xsl:element> -</xsl:template> - -<xsl:template match="img"> - <xsl:element name="a"> - <xsl:attribute name="href"> <xsl:value-of select="@src"/></xsl:attribute> - <xsl:element name="img"> - <xsl:attribute name="src"> <xsl:value-of select="@src"/></xsl:attribute> - </xsl:element> - </xsl:element> -</xsl:template> - -<xsl:template match="menuholder"> - <xsl:apply-templates select="node()[not(self::menuholder)]"/> -</xsl:template> - -<xsl:template match="noteholder"> - <xsl:apply-templates select="node()[not(self::noteholder)]"/> -</xsl:template> - -<xsl:template name="html.css"><xsl:text> -h1 { font-size: 1.6em; font-weight: bold; } -h2 { font-size: 1.4em; font-weight: bold; } -h3 { font-size: 1.2em; font-weight: bold; } - -h1, h2, h3, h4, h5, h6, h7 { color: </xsl:text> -<xsl:value-of select="$theme.color.text"/><xsl:text>; } - -body { margin: 0em; padding: 0em; } -pre[class~="body"] { -margin-left: 0.8em; -margin-right: 0.8em; -margin-bottom: 1.6em; -} - -p, div { margin: 0em; } -p + *, div + * { margin-top: 1em; } - -dl { margin: 0em; } -dl dd + dt { margin-top: 1em; } -dl dd { - margin-top: 0.5em; - margin-left: 2em; - margin-right: 1em; -} -ol { margin-left: 2em; } -ul { margin-left: 2em; } -ul li { margin-right: 1em; } -img { border: none; } -</xsl:text></xsl:template> - -</xsl:stylesheet> diff --git a/stylesheets/info2html.xsl.in b/stylesheets/info2html.xsl.in new file mode 100644 index 00000000..9482aa2c --- /dev/null +++ b/stylesheets/info2html.xsl.in @@ -0,0 +1,167 @@ +<?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- --> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:yelp="http://www.gnome.org/yelp/ns" + xmlns="http://www.w3.org/1999/xhtml" + extension-element-prefixes="yelp" + version="1.0"> + +<xsl:import href="@XSL_GETTEXT@"/> +<xsl:import href="@XSL_THEME_COLORS@"/> +<xsl:import href="@XSL_THEME_ICONS@"/> +<xsl:import href="@XSL_THEME_HTML@"/> +<xsl:include href="yelp-common.xsl"/> + +<xsl:template name="linktrails"> + <xsl:param name="up" select="@up"/> + <xsl:variable name="upnode" select="/Info//Section[@id = $up]"/> + <xsl:if test="$upnode/@up"> + <xsl:call-template name="linktrails"> + <xsl:with-param name="up" select="$upnode/@up"/> + </xsl:call-template> + </xsl:if> + <a href="xref:{$upnode/@id}"> + <xsl:value-of select="$upnode/@name"/> + </a> + <xsl:text> » </xsl:text> +</xsl:template> + +<xsl:template match="/Info"> + <xsl:apply-templates select="Section"/> +</xsl:template> + +<xsl:template match="Section"> + <yelp:document href="{@id}"> + <html> + <head> + <title> + <xsl:value-of select="@name"/> + </title> + <style type="text/css"> + <xsl:call-template name="html.css"/> + </style> + </head> + <body> + <div class="head"> + <xsl:if test="@up"> + <div class="trails"> + <div class="trail"> + <xsl:call-template name="linktrails"/> + </div> + </div> + </xsl:if> + </div> + <div class="body"> + <div class="navbar"> + <xsl:variable name="preceding" select="preceding::Section[1]"/> + <xsl:variable name="following" select="(Section[1] | following::Section[1])[1]"/> + <xsl:if test="$preceding"> + <a class="navbar-prev" href="xref:{$preceding/@id}"> + <xsl:value-of select="$preceding/@name"/> + </a> + </xsl:if> + <xsl:if test="$preceding and $following"> + <xsl:text>  |  </xsl:text> + </xsl:if> + <xsl:if test="$following"> + <a class="navbar-next" href="xref:{$following/@id}"> + <xsl:value-of select="$following/@name"/> + </a> + </xsl:if> + </div> + <xsl:apply-templates select="node()[not(self::Section)]"/> + </div> + <div class="foot"/> + </body> + </html> + </yelp:document> + <xsl:apply-templates select="Section"/> +</xsl:template> + +<xsl:template match="para"> + <xsl:value-of select="node()"/> + <xsl:text> + </xsl:text> +</xsl:template> + +<xsl:template match="para1"> + <xsl:value-of select="node()"/> +</xsl:template> + +<xsl:template match="spacing"> + <xsl:value-of select="node()"/> +</xsl:template> + +<xsl:template match="a"> + <xsl:element name="a"> + <xsl:attribute name="href"> + <xsl:value-of select="@href"/> + </xsl:attribute> + <xsl:value-of select="node()"/> + </xsl:element> +</xsl:template> + +<xsl:template match="img"> + <xsl:element name="a"> + <xsl:attribute name="href"> + <xsl:value-of select="@src"/> + </xsl:attribute> + <xsl:element name="img"> + <xsl:attribute name="src"> <xsl:value-of select="@src"/></xsl:attribute> + </xsl:element> + </xsl:element> +</xsl:template> + +<xsl:template match="menuholder"> + <xsl:apply-templates select="node()[not(self::menuholder)]"/> +</xsl:template> + +<xsl:template match="noteholder"> + <xsl:apply-templates select="node()[not(self::noteholder)]"/> +</xsl:template> + +<xsl:template name="html.css"> + <xsl:param name="direction"> + <xsl:call-template name="l10n.direction"/> + </xsl:param> + <xsl:param name="left"> + <xsl:call-template name="l10n.align.start"> + <xsl:with-param name="direction" select="$direction"/> + </xsl:call-template> + </xsl:param> + <xsl:param name="right"> + <xsl:call-template name="l10n.align.end"> + <xsl:with-param name="direction" select="$direction"/> + </xsl:call-template> + </xsl:param> + <xsl:call-template name="theme.html.css"> + <xsl:with-param name="direction" select="$direction"/> + <xsl:with-param name="left" select="$left"/> + <xsl:with-param name="right" select="$right"/> + </xsl:call-template> + <xsl:text> +div.body { white-space: pre; font-family: monospace; } +<!-- navbar from mal2html, possibly move to theme-html --> +div.navbar { + margin: 0; + float: right; + font-family: sans-serif; +} +a.navbar-prev::before { + content: '</xsl:text><xsl:choose> + <xsl:when test="$left = 'left'"><xsl:text>◀  </xsl:text></xsl:when> + <xsl:otherwise><xsl:text>▶  </xsl:text></xsl:otherwise> + </xsl:choose><xsl:text>'; + color: </xsl:text><xsl:value-of select="$theme.color.text_light"/><xsl:text>; +} +a.navbar-next::after { + content: '</xsl:text><xsl:choose> + <xsl:when test="$left = 'left'"><xsl:text>  ▶</xsl:text></xsl:when> + <xsl:otherwise><xsl:text>  ◀</xsl:text></xsl:otherwise> + </xsl:choose><xsl:text>'; + color: </xsl:text><xsl:value-of select="$theme.color.text_light"/><xsl:text>; +} +</xsl:text> +</xsl:template> + +</xsl:stylesheet> diff --git a/stylesheets/yelp-common.xsl.in b/stylesheets/yelp-common.xsl.in index 8645b602..143c5af4 100644 --- a/stylesheets/yelp-common.xsl.in +++ b/stylesheets/yelp-common.xsl.in @@ -18,8 +18,6 @@ body { padding: 0; background-color: </xsl:text><xsl:value-of select="$theme.color.background"/><xsl:text>; max-width: 100%; - border-top: solid 1px </xsl:text> - <xsl:value-of select="$theme.color.gray_border"/><xsl:text>; } div.head { max-width: 100%; diff --git a/tests/Makefile.am b/tests/Makefile.am index 02f1d98a..260955ae 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -6,25 +6,34 @@ YELP_COMMON_CFLAGS = \ -I$(top_srcdir)/libyelp YELP_COMMON_LDADD = \ $(YELP_LIBS) \ - $(Z_LIBS) \ - $(BZ_LIBS) \ - $(LZMADEC_LIBS) \ $(top_builddir)/libyelp/libyelp.la check_PROGRAMS = \ - test-io-channel \ test-location-entry \ + test-magic \ test-settings \ test-transform \ test-uri \ test-view -test_io_channel_CFLAGS = $(YELP_COMMON_CFLAGS) -test_io_channel_LDADD = $(YELP_COMMON_LDADD) +if ENABLE_LZMA +check_PROGRAMS += test-lzma +test_lzma_CFLAGS = $(YELP_COMMON_CFLAGS) +test_lzma_LDADD = $(YELP_COMMON_LDADD) +endif + +if ENABLE_BZ2 +check_PROGRAMS += test-bz2 +test_bz2_CFLAGS = $(YELP_COMMON_CFLAGS) +test_bz2_LDADD = $(YELP_COMMON_LDADD) +endif test_location_entry_CFLAGS = $(YELP_COMMON_CFLAGS) test_location_entry_LDADD = $(YELP_COMMON_LDADD) +test_magic_CFLAGS = $(YELP_COMMON_CFLAGS) +test_magic_LDADD = $(YELP_COMMON_LDADD) + test_settings_CFLAGS = $(YELP_COMMON_CFLAGS) test_settings_LDADD = $(YELP_COMMON_LDADD) diff --git a/tests/test-io-channel.c b/tests/test-bz2.c index f2e1dbce..a2da96cb 100644 --- a/tests/test-io-channel.c +++ b/tests/test-bz2.c @@ -24,27 +24,37 @@ #include <stdio.h> #include <string.h> -#include <glib.h> +#include <gio/gio.h> -#include "yelp-io-channel.h" +#include "yelp-bz2-decompressor.h" int main (int argc, char **argv) { - GIOChannel *channel; - gchar *str; - gint len; - - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL); + GConverter *converter; + GFile *file; + GFileInputStream *file_stream; + GInputStream *stream; + gchar buf[1024]; + gssize bytes; if (argc < 2) { - g_printerr ("Usage: test-io-channel FILE\n"); - return 1; + g_printerr ("Usage: test-bz2 FILE\n"); + return 1; } - channel = yelp_io_channel_new_file (argv[1], NULL); - g_io_channel_read_to_end (channel, &str, &len, NULL); - printf ("%s\n", str); + g_type_init (); + + file = g_file_new_for_path (argv[1]); + file_stream = g_file_read (file, NULL, NULL); + converter = yelp_bz2_decompressor_new (); + stream = g_converter_input_stream_new (file_stream, converter); + + while ((bytes = g_input_stream_read (stream, buf, 1024, NULL, NULL)) > 0) { + gchar *out = g_strndup (buf, bytes); + puts (out); + g_free (out); + } return 0; } diff --git a/tests/test-lzma.c b/tests/test-lzma.c new file mode 100644 index 00000000..76af37d8 --- /dev/null +++ b/tests/test-lzma.c @@ -0,0 +1,60 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Shaun McCance <shaunm@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. + * + * Author: Shaun McCance <shaunm@gnome.org + */ + +#include <config.h> +#include <stdio.h> +#include <string.h> + +#include <gio/gio.h> + +#include "yelp-lzma-decompressor.h" + +int +main (int argc, char **argv) +{ + GConverter *converter; + GFile *file; + GFileInputStream *file_stream; + GInputStream *stream; + gchar buf[1024]; + gssize bytes; + + if (argc < 2) { + g_printerr ("Usage: test-lzma FILE\n"); + return 1; + } + + g_type_init (); + + file = g_file_new_for_path (argv[1]); + file_stream = g_file_read (file, NULL, NULL); + converter = yelp_lzma_decompressor_new (); + stream = g_converter_input_stream_new (file_stream, converter); + + while ((bytes = g_input_stream_read (stream, buf, 1024, NULL, NULL)) > 0) { + gchar *out = g_strndup (buf, bytes); + puts (out); + g_free (out); + } + + return 0; +} diff --git a/tests/test-magic.c b/tests/test-magic.c new file mode 100644 index 00000000..9a937991 --- /dev/null +++ b/tests/test-magic.c @@ -0,0 +1,60 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2009 Shaun McCance <shaunm@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. + * + * Author: Shaun McCance <shaunm@gnome.org + */ + +#include <config.h> +#include <stdio.h> +#include <string.h> + +#include <gio/gio.h> + +#include "yelp-magic-decompressor.h" + +int +main (int argc, char **argv) +{ + GConverter *converter; + GFile *file; + GFileInputStream *file_stream; + GInputStream *stream; + gchar buf[1024]; + gssize bytes; + + if (argc < 2) { + g_printerr ("Usage: test-magic FILE\n"); + return 1; + } + + g_type_init (); + + file = g_file_new_for_path (argv[1]); + file_stream = g_file_read (file, NULL, NULL); + converter = yelp_magic_decompressor_new (); + stream = g_converter_input_stream_new (file_stream, converter); + + while ((bytes = g_input_stream_read (stream, buf, 1024, NULL, NULL)) > 0) { + gchar *out = g_strndup (buf, bytes); + puts (out); + g_free (out); + } + + return 0; +} diff --git a/tests/test-transform.c b/tests/test-transform.c index efda9b8e..141a4ce1 100644 --- a/tests/test-transform.c +++ b/tests/test-transform.c @@ -147,10 +147,8 @@ main (gint argc, gchar **argv) params[5] = "2"; params[6] = NULL; - transform = yelp_transform_new (); + transform = yelp_transform_new (stylesheet); g_object_weak_ref ((GObject *) transform, transform_destroyed, NULL); - if (!yelp_transform_set_stylesheet (transform, stylesheet, NULL)) - return 1; g_signal_connect (transform, "chunk-ready", (GCallback) transform_chunk, NULL); g_signal_connect (transform, "finished", (GCallback) transform_finished, NULL); diff --git a/tests/test-uri.c b/tests/test-uri.c index 869d9b1c..d2889999 100644 --- a/tests/test-uri.c +++ b/tests/test-uri.c @@ -35,7 +35,7 @@ static void print_uri (gchar *orig, YelpUri *uri, GOutputStream *stream) { GFile *file; - gchar *type, *tmp, **tmpv, *out; + gchar *type = NULL, *tmp, **tmpv, *out; g_output_stream_write (stream, orig, strlen (orig), NULL, NULL); g_output_stream_write (stream, "\n", 1, NULL, NULL); @@ -199,7 +199,7 @@ run_all_tests (int argc, char **argv) G_FILE_ATTRIBUTE_STANDARD_NAME); if (!g_str_has_suffix (name, ".test")) continue; - list = g_list_insert_sorted (list, name, strcmp); + list = g_list_insert_sorted (list, (gchar *) name, (GCompareFunc) strcmp); } while (list) { |