summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2011-05-18 16:06:08 -0400
committerShaun McCance <shaunm@gnome.org>2011-05-18 16:06:08 -0400
commit0637f921f36910d7688f73e14b2d2ec79ca90989 (patch)
tree90441f99ffbc4e2bcddd2d2826bf75f70040d594
parentee830ed9af0b7d911a25bf26d62f115f7c842c43 (diff)
downloadyelp-0637f921f36910d7688f73e14b2d2ec79ca90989.tar.gz
Massive cleanup of old files
-rw-r--r--.cvsignore26
-rw-r--r--.gitignore51
-rw-r--r--Makefile.am6
-rw-r--r--configure.ac17
-rw-r--r--data/.cvsignore5
-rw-r--r--data/Makefile.am24
-rw-r--r--data/default.css19
-rw-r--r--data/icons/.cvsignore2
-rw-r--r--data/icons/Makefile.am20
-rw-r--r--data/icons/yelp-icon-big.pngbin30650 -> 0 bytes
-rw-r--r--data/icons/yelp-icon-caution.pngbin2369 -> 0 bytes
-rw-r--r--data/icons/yelp-icon-important.pngbin2592 -> 0 bytes
-rw-r--r--data/icons/yelp-icon-note.pngbin2520 -> 0 bytes
-rw-r--r--data/icons/yelp-icon-tip.pngbin2288 -> 0 bytes
-rw-r--r--data/icons/yelp-icon-warning.pngbin3249 -> 0 bytes
-rw-r--r--data/icons/yelp-watermark-blockquote-00AB.pngbin992 -> 0 bytes
-rw-r--r--data/icons/yelp-watermark-blockquote-00BB.pngbin1027 -> 0 bytes
-rw-r--r--data/icons/yelp-watermark-blockquote-201C.pngbin1102 -> 0 bytes
-rw-r--r--data/icons/yelp-watermark-blockquote-201D.pngbin1093 -> 0 bytes
-rw-r--r--data/icons/yelp-watermark-blockquote-201E.pngbin1106 -> 0 bytes
-rw-r--r--data/images/.cvsignore2
-rw-r--r--data/images/Makefile.am9
-rw-r--r--data/images/bcg.pngbin15304 -> 0 bytes
-rw-r--r--data/images/empty.pngbin130 -> 0 bytes
-rw-r--r--data/images/gnome2-button.pngbin3802 -> 0 bytes
-rw-r--r--data/info.xml.in7
-rw-r--r--data/jquery-1.4.2.min.js154
-rw-r--r--data/js/Makefile.am4
-rw-r--r--data/js/jquery-ui-1.8.custom.min.js (renamed from data/jquery-ui-1.8.custom.min.js)0
-rw-r--r--data/man.xml.in138
-rw-r--r--data/scrollkeeper.xml295
-rw-r--r--data/toc.xml.in416
-rw-r--r--data/ui/.cvsignore2
-rw-r--r--data/xslt/Makefile.am (renamed from stylesheets/Makefile.am)15
-rw-r--r--data/xslt/db2html.xsl.in (renamed from stylesheets/db2html.xsl.in)0
-rw-r--r--data/xslt/info2html.xsl.in (renamed from stylesheets/info2html.xsl.in)0
-rw-r--r--data/xslt/mal2html.xsl.in (renamed from stylesheets/mal2html.xsl.in)0
-rw-r--r--data/xslt/man2html.xsl.in (renamed from stylesheets/man2html.xsl.in)0
-rw-r--r--data/xslt/yelp-common.xsl.in (renamed from stylesheets/yelp-common.xsl.in)2
-rw-r--r--data/yelp.js95
-rw-r--r--important_docs.xml12
-rw-r--r--po/.cvsignore13
-rw-r--r--po/POTFILES.in3
-rw-r--r--src/.cvsignore23
-rw-r--r--src/Makefile.am8
-rw-r--r--src/eggdesktopfile.h159
-rw-r--r--src/test-document.c149
-rw-r--r--src/test-man-parser.c68
-rw-r--r--src/test-page.c83
-rw-r--r--src/test-resolver.c267
-rw-r--r--src/yelp-db-print.c768
-rw-r--r--src/yelp-db-print.h54
-rw-r--r--src/yelp-marshal-main.c2
-rw-r--r--src/yelp-page.c164
-rw-r--r--src/yelp-page.h88
-rw-r--r--src/yelp-print.c601
-rw-r--r--src/yelp-print.h89
-rw-r--r--src/yelp-search-parser.c1529
-rw-r--r--src/yelp-search-parser.h36
-rw-r--r--src/yelp-search.c391
-rw-r--r--src/yelp-search.h53
-rw-r--r--src/yelp-toc.c795
-rw-r--r--src/yelp-toc.h54
-rw-r--r--src/yelp-utils.c534
-rw-r--r--src/yelp-utils.h58
-rw-r--r--stylesheets/.cvsignore5
-rw-r--r--stylesheets/ChangeLog506
-rw-r--r--stylesheets/db-title.xsl.in23
-rw-r--r--stylesheets/docbook/.cvsignore3
-rw-r--r--stylesheets/docbook/dtd/.cvsignore3
-rwxr-xr-xstylesheets/docbook/dtd/catalog59
-rw-r--r--stylesheets/search2html.xsl171
-rw-r--r--stylesheets/toc2html.xsl.in284
73 files changed, 46 insertions, 8318 deletions
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index cf37fca4..00000000
--- a/.cvsignore
+++ /dev/null
@@ -1,26 +0,0 @@
-config.*
-aclocal.m4
-install-sh
-ltmail.sh
-libtool
-Makefile
-Makefile.in
-mkinstalldirs
-missing
-depcomp
-compile
-po
-intl
-configure
-stamp-h
-stamp-h.in
-ABOUT-NLS
-intltool-*
-ltmain.sh
-yelp.desktop
-stamp-h1
-yelp-*.tar.gz
-core*
-autom4te*
-yelp.desktop.in
-INSTALL
diff --git a/.gitignore b/.gitignore
index 35c585f8..36e71afd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,12 +26,29 @@ Makefile.in
/config.status
/config.sub
/configure
-/data/gsettings_schema_validate_stamp
-/data/info.xml
-/data/man.xml
-/data/toc.xml
-/data/dtd/catalog
/depcomp
+/ltmain.sh
+/m4
+/missing
+/mkinstalldirs
+/gtk-doc.make
+/install-sh
+/intltool-extract.in
+/intltool-merge.in
+/intltool-update.in
+/libtool
+/stamp-h1
+/yelp.desktop
+/yelp.desktop.in
+
+/data/org.gnome.yelp.gschema.valid
+/data/dtd/catalog
+/data/xslt/db2html.xsl
+/data/xslt/info2html.xsl
+/data/xslt/mal2html.xsl
+/data/xslt/man2html.xsl
+/data/xslt/yelp-common.xsl
+
/docs/libyelp/html-build.stamp
/docs/libyelp/html.stamp
/docs/libyelp/html/
@@ -56,21 +73,13 @@ Makefile.in
/docs/libyelp/tmpl/
/docs/libyelp/version.xml
/docs/libyelp/xml/
-/gtk-doc.make
-/install-sh
-/intltool-extract.in
-/intltool-merge.in
-/intltool-update.in
-/libtool
+
/libyelp/stamp-yelp-marshal.h
/libyelp/yelp-marshal.c
/libyelp/yelp-marshal.h
/libyelp/yelp-types.c
/libyelp/yelp-types.h
-/ltmain.sh
-/m4
-/missing
-/mkinstalldirs
+
/po/*.gmo
/po/.intltool-merge-cache
/po/Makefile.in.in
@@ -78,15 +87,9 @@ Makefile.in
/po/POTFILES
/po/stamp-it
/po/yelp.pot
+
/src/yelp
-/src/yelp-dbus.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
@@ -96,5 +99,3 @@ Makefile.in
/tests/test-transform
/tests/test-uri
/tests/test-view
-/yelp.desktop
-/yelp.desktop.in
diff --git a/Makefile.am b/Makefile.am
index 45ca0bc7..cb4a807b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-SUBDIRS = libyelp src stylesheets po data tests docs
+SUBDIRS = libyelp src po data tests docs
@INTLTOOL_DESKTOP_RULE@
@@ -8,16 +8,12 @@ desktopdir = $(datadir)/applications
desktop_in_files=yelp.desktop.in.in
desktop_DATA = $(desktop_in_files:.desktop.in.in=.desktop)
-yelpdatadir = $(datadir)/yelp
-yelpdata_DATA = important_docs.xml
-
EXTRA_DIST = \
autogen.sh \
MAINTAINERS \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
- important_docs.xml \
$(desktop_in_files)
DISTCLEANFILES = \
diff --git a/configure.ac b/configure.ac
index 1b36c71e..286558fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,8 +123,6 @@ 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)
@@ -199,14 +197,6 @@ 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/man2html.xsl
-stylesheets/toc2html.xsl
-stylesheets/yelp-common.xsl
data/Makefile
data/dtd/Makefile
data/dtd/catalog
@@ -217,6 +207,13 @@ data/icons/hicolor/16x16/status/Makefile
data/icons/hicolor/scalable/Makefile
data/icons/hicolor/scalable/actions/Makefile
data/icons/hicolor/scalable/status/Makefile
+data/js/Makefile
+data/xslt/Makefile
+data/xslt/db2html.xsl
+data/xslt/info2html.xsl
+data/xslt/mal2html.xsl
+data/xslt/man2html.xsl
+data/xslt/yelp-common.xsl
po/Makefile.in
tests/Makefile
yelp.desktop.in
diff --git a/data/.cvsignore b/data/.cvsignore
deleted file mode 100644
index e8444d56..00000000
--- a/data/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-man.xml
-toc.xml
-yelp.schemas
-Makefile
-Makefile.in
diff --git a/data/Makefile.am b/data/Makefile.am
index 6947367f..6ad2e1d3 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,31 +1,11 @@
-SUBDIRS = dtd icons
+SUBDIRS = dtd icons js xslt
#This has to be defined, because GSETTINGS_CHECK_RULE adds to it
MOSTLYCLEANFILES =
-@INTLTOOL_XML_RULE@
@INTLTOOL_SCHEMAS_RULE@
gsettings_SCHEMAS = org.gnome.yelp.gschema.xml
@GSETTINGS_RULES@
-tocdir = $(datadir)/yelp
-toc_DATA = man.xml toc.xml scrollkeeper.xml info.xml
-
-cssdir = $(datadir)/yelp
-css_DATA = default.css
-
-jsdir = $(datadir)/yelp
-js_DATA = \
- jquery-1.4.2.min.js \
- jquery-ui-1.8.custom.min.js \
- yelp.js
-
-EXTRA_DIST = \
- man.xml man.xml.in \
- toc.xml toc.xml.in \
- info.xml info.xml.in \
- scrollkeeper.xml default.css \
- $(gsettings_SCHEMAS) $(js_DATA)
-
-CLEANFILES = toc.xml man.xml info.xml
+EXTRA_DIST = $(gsettings_SCHEMAS)
diff --git a/data/default.css b/data/default.css
deleted file mode 100644
index f52329a5..00000000
--- a/data/default.css
+++ /dev/null
@@ -1,19 +0,0 @@
-h1 { font-size: 1.6em; font-weight: bold; }
-h2 { font-size: 1.4em; font-weight: bold; }
-h3 { font-size: 1.2em; font-weight: bold; }
-
-body {
- padding-left: 8px;
- padding-right: 12px;
-}
-
-p, div { margin: 0em; }
-p + p, p + div, div + p, div + div { margin-top: 0.8em; }
-
-dl { margin: 0px; }
-ol { margin: 0px; }
-ul { margin: 0px; }
-ol li { padding-left: 12px; }
-ul li { padding-left: 12px; }
-
-li[class="menu-folder"] + li[class="menu-file"] { margin-top: 0.8em; }
diff --git a/data/icons/.cvsignore b/data/icons/.cvsignore
deleted file mode 100644
index 282522db..00000000
--- a/data/icons/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index 161f5665..658356b2 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -1,21 +1 @@
SUBDIRS = hicolor
-
-icon192dir = $(datadir)/icons/hicolor/192x192/apps
-
-icon192_DATA = yelp-icon-big.png
-
-icondir = $(datadir)/yelp/icons
-
-icon_DATA = \
- yelp-icon-caution.png \
- yelp-icon-important.png \
- yelp-icon-note.png \
- yelp-icon-tip.png \
- yelp-icon-warning.png \
- yelp-watermark-blockquote-00AB.png \
- yelp-watermark-blockquote-00BB.png \
- yelp-watermark-blockquote-201C.png \
- yelp-watermark-blockquote-201D.png \
- yelp-watermark-blockquote-201E.png
-
-EXTRA_DIST = $(icon_DATA) $(icon192_DATA)
diff --git a/data/icons/yelp-icon-big.png b/data/icons/yelp-icon-big.png
deleted file mode 100644
index b2301601..00000000
--- a/data/icons/yelp-icon-big.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-icon-caution.png b/data/icons/yelp-icon-caution.png
deleted file mode 100644
index e3897db8..00000000
--- a/data/icons/yelp-icon-caution.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-icon-important.png b/data/icons/yelp-icon-important.png
deleted file mode 100644
index 2e1a2a36..00000000
--- a/data/icons/yelp-icon-important.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-icon-note.png b/data/icons/yelp-icon-note.png
deleted file mode 100644
index df1e0a92..00000000
--- a/data/icons/yelp-icon-note.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-icon-tip.png b/data/icons/yelp-icon-tip.png
deleted file mode 100644
index 33aa88b5..00000000
--- a/data/icons/yelp-icon-tip.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-icon-warning.png b/data/icons/yelp-icon-warning.png
deleted file mode 100644
index 3c8a37df..00000000
--- a/data/icons/yelp-icon-warning.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-watermark-blockquote-00AB.png b/data/icons/yelp-watermark-blockquote-00AB.png
deleted file mode 100644
index 22495c64..00000000
--- a/data/icons/yelp-watermark-blockquote-00AB.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-watermark-blockquote-00BB.png b/data/icons/yelp-watermark-blockquote-00BB.png
deleted file mode 100644
index a003624d..00000000
--- a/data/icons/yelp-watermark-blockquote-00BB.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-watermark-blockquote-201C.png b/data/icons/yelp-watermark-blockquote-201C.png
deleted file mode 100644
index f134ad9b..00000000
--- a/data/icons/yelp-watermark-blockquote-201C.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-watermark-blockquote-201D.png b/data/icons/yelp-watermark-blockquote-201D.png
deleted file mode 100644
index 2e9b6958..00000000
--- a/data/icons/yelp-watermark-blockquote-201D.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/yelp-watermark-blockquote-201E.png b/data/icons/yelp-watermark-blockquote-201E.png
deleted file mode 100644
index 33bd5631..00000000
--- a/data/icons/yelp-watermark-blockquote-201E.png
+++ /dev/null
Binary files differ
diff --git a/data/images/.cvsignore b/data/images/.cvsignore
deleted file mode 100644
index 282522db..00000000
--- a/data/images/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/data/images/Makefile.am b/data/images/Makefile.am
deleted file mode 100644
index 34ff562c..00000000
--- a/data/images/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-imagesdir = $(datadir)/images/yelp
-
-images_DATA = \
- bcg.png \
- gnome2-button.png \
- empty.png
-
-EXTRA_DIST = \
- $(images_DATA)
diff --git a/data/images/bcg.png b/data/images/bcg.png
deleted file mode 100644
index 4faf8e5a..00000000
--- a/data/images/bcg.png
+++ /dev/null
Binary files differ
diff --git a/data/images/empty.png b/data/images/empty.png
deleted file mode 100644
index 8f2e12d3..00000000
--- a/data/images/empty.png
+++ /dev/null
Binary files differ
diff --git a/data/images/gnome2-button.png b/data/images/gnome2-button.png
deleted file mode 100644
index 4a16fb11..00000000
--- a/data/images/gnome2-button.png
+++ /dev/null
Binary files differ
diff --git a/data/info.xml.in b/data/info.xml.in
deleted file mode 100644
index f22ccd1a..00000000
--- a/data/info.xml.in
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- -*- indent-tabs-mode: nil -*- -->
-<?xml-stylesheet href="toc.xml.in.content/toc.css" type="text/css"?>
-<toc id="Info">
- <_title>GNU Info Pages</_title>
- <_description>Traditional command line help (info)</_description>
-
-</toc>
diff --git a/data/jquery-1.4.2.min.js b/data/jquery-1.4.2.min.js
deleted file mode 100644
index 7c243080..00000000
--- a/data/jquery-1.4.2.min.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/data/js/Makefile.am b/data/js/Makefile.am
new file mode 100644
index 00000000..955f318e
--- /dev/null
+++ b/data/js/Makefile.am
@@ -0,0 +1,4 @@
+jsdir = $(datadir)/yelp/js
+js_DATA = jquery-ui-1.8.custom.min.js
+
+EXTRA_DIST = $(js_DATA)
diff --git a/data/jquery-ui-1.8.custom.min.js b/data/js/jquery-ui-1.8.custom.min.js
index 4709703b..4709703b 100644
--- a/data/jquery-ui-1.8.custom.min.js
+++ b/data/js/jquery-ui-1.8.custom.min.js
diff --git a/data/man.xml.in b/data/man.xml.in
deleted file mode 100644
index be883b80..00000000
--- a/data/man.xml.in
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- -*- indent-tabs-mode: nil -*- -->
-<?xml-stylesheet href="toc.xml.in.content/toc.css" type="text/css"?>
-<toc id="Man">
- <_title>Manual Pages</_title>
- <_description>Traditional command line help (man)</_description>
-
- <toc id="Man-man1" sect="1 1p 1g 1t">
- <_title>Applications</_title>
- <_description>Sections 1, 1p, 1g and 1t</_description>
- <toc id="Man-man1x" sect="1x">
- <_title>X11 Applications</_title>
- <_description>Section 1x</_description>
- </toc>
- <toc id="Man-man1ssl" sect="1ssl">
- <_title>OpenSSL Applications</_title>
- <_description>Section 1ssl</_description>
- </toc>
- <toc id="Man-man1m" sect="1m">
- <_title>Termcap Applications</_title>
- <_description>Section 1m</_description>
- </toc>
- </toc>
-
- <toc id="Man-man3" sect="3 3o 3t">
- <_title>Development</_title>
- <_description>Sections 3, 3o, and 3t</_description>
- <toc id="Man-man3p" sect="3p">
- <_title>POSIX Functions</_title>
- <_description>Section 3p</_description>
- </toc>
- <toc id="Man-man0p" sect="0p">
- <_title>POSIX Headers</_title>
- <_description>Section 0p</_description>
- </toc>
- <toc id="Man-3blt" sect="3blt">
- <_title>BLT Functions</_title>
- <_description>Section 3blt</_description>
- </toc>
- <toc id="Man-3nas" sect="3nas">
- <_title>Network Audio Sound Functions</_title>
- <_description>Section 3nas</_description>
- </toc>
- <toc id="Man-3form" sect="3form 3menu">
- <_title>System V Form/Menu Functions</_title>
- <_description>Sections 3form and 3menu</_description>
- </toc>
- <toc id="Man-3tiff" sect="3tiff">
- <_title>TIFF Functions</_title>
- <_description>Section 3tiff</_description>
- </toc>
- <toc id="Man-3ssl" sect="3ssl">
- <_title>OpenSSL Functions</_title>
- <_description>Section 3ssl</_description>
- </toc>
- <toc id="Man-3readline" sect="3readline">
- <_title>Readline Functions</_title>
- <_description>Section 3readline</_description>
- </toc>
- <toc id="Man-3curses" sect="3ncurses 3curses">
- <_title>Curses Functions</_title>
- <_description>Sections 3ncurses and 3curses</_description>
- </toc>
- <toc id="Man-man3f" sect="3f">
- <_title>FORTRAN Functions</_title>
- <_description>Section 3f</_description>
- </toc>
- <toc id="Man-man3pm" sect="3pm 3perl">
- <_title>Perl Functions</_title>
- <_description>Sections 3pm and 3perl</_description>
- </toc>
- <toc id="Man-man3qt" sect="3qt">
- <_title>Qt Functions</_title>
- <_description>Section 3qt</_description>
- </toc>
- <toc id="Man-man3x" sect="3x 3X11">
- <_title>X11 Functions</_title>
- <_description>Sections 3x and 3X11</_description>
- </toc>
- <toc id="Man-man2" sect="2">
- <_title>System Calls</_title>
- <_description>Section 2</_description>
- </toc>
- <toc id="Man-man9" sect="9">
- <_title>Kernel Routines</_title>
- <_description>Section 9</_description>
- </toc>
- </toc>
-
- <toc id="Man-man4" sect="4">
- <_title>Hardware Devices</_title>
- <_description>Section 4</_description>
- <toc id="Man-man4x" sect="4x">
- <_title>X11 Devices</_title>
- <_description>Section 4x</_description>
- </toc>
- </toc>
-
- <toc id="Man-man5" sect="5 5snmp">
- <_title>Configuration Files</_title>
- <_description>Section 5</_description>
- <toc id="Man-man5x" sect="5x">
- <_title>X11 Configuration</_title>
- <_description>Section 5x</_description>
- </toc>
- <toc id="Man-man5ssl" sect="5ssl">
- <_title>OpenSSL Configuration</_title>
- <_description>Section 5ssl</_description>
- </toc>
- </toc>
-
- <toc id="Man-man6" sect="6">
- <_title>Games</_title>
- <_description>Section 6</_description>
- <toc id="Man-man6x" sect="6x">
- <_title>X11 Games</_title>
- <_description>Section 6x</_description>
- </toc>
- </toc>
-
- <toc id="Man-man7" sect="7 7gcc">
- <_title>Overviews</_title>
- <_description>Sections 7 and 7gcc</_description>
- <toc id="Man-man7x" sect="7x">
- <_title>X11 Overviews</_title>
- <_description>Section 7x</_description>
- </toc>
- <toc id="Man-man7ssl" sect="7ssl">
- <_title>OpenSSL Overviews</_title>
- <_description>Section 7ssl</_description>
- </toc>
- </toc>
-
- <toc id="Man-man8" sect="8 8l">
- <_title>System Administration</_title>
- <_description>Sections 8 and 8l</_description>
- </toc>
-
-</toc>
diff --git a/data/scrollkeeper.xml b/data/scrollkeeper.xml
deleted file mode 100644
index 51626517..00000000
--- a/data/scrollkeeper.xml
+++ /dev/null
@@ -1,295 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- -*- indent-tabs-mode: nil -*- -->
-<toc>
- <toc id="index">
- <subject category="GNOME"/>
- <subject category="GNOME|Core Desktop"/>
- <subject category="GNOME|Desktop"/>
- <subject category="GNOME|Desktop|User Guides"/>
- <subject category="GNOME|Other"/>
- <subject category="GNOME|Settings"/>
- <subject category="GNOME|Applications|Desktop Preferences"/>
- <subject category="GNOME|Preferences"/>
- </toc>
- <toc id="DesktopApplets">
- <subject category="GNOME|Applets"/>
- <subject category="GNOME|Applets|Accessories"/>
- <subject category="GNOME|Applets|Amusement"/>
- <subject category="GNOME|Applets|Clock"/>
- <subject category="GNOME|Applets|Internet"/>
- <subject category="GNOME|Applets|Monitors"/>
- <subject category="GNOME|Applets|Multimedia"/>
- <subject category="GNOME|Applets|Network"/>
- <subject category="GNOME|Applets|Utility"/>
- </toc>
- <toc id="KDE">
- <subject category="KDE"/>
- <subject category="KDE|Settings"/>
- <subject category="KDE|Applications"/>
- <subject category="KDE|Programs"/>
- <subject category="KDE|Other"/>
- </toc>
- <toc id="ApplicationsAccessibility">
- <subject category="GNOME|Accessibility"/>
- </toc>
- <toc id="ApplicationsAccessories">
- <subject category="GNOME|Applications|Accessories"/>
- <subject category="Applications|Utilities"/>
- <subject category="Applications|Utilities|Archiving"/>
- <subject category="Applications|Utilities|Calculating"/>
- <subject category="Applications|Utilities|Clocks"/>
- <subject category="Applications|Utilities|Compression"/>
- <subject category="Applications|Utilities|File Utilities"/>
- <subject category="Applications|Utilities|Printing"/>
- <subject category="Applications|Utilities|Text Utilities"/>
- <subject category="Applications|Utilities|Other"/>
- <subject category="GNOME|Utilities"/>
- <subject category="KDE|Utilities"/>
- </toc>
- <toc id="ApplicationsEducation">
- <subject category="Applications|Education"/>
- <subject category="Applications|Education|Arts"/>
- <subject category="Applications|Education|Computer Science"/>
- <subject category="Applications|Education|English"/>
- <subject category="Applications|Education|Language"/>
- <subject category="Applications|Education|Maths"/>
- <subject category="Applications|Education|Music"/>
- <subject category="Applications|Education|Science"/>
- <subject category="Applications|Education|Technology"/>
- <subject category="Applications|Education|Testing"/>
- <subject category="Applications|Education|Other"/>
- </toc>
- <toc id="ApplicationsGames">
- <subject category="Applications|Amusement"/>
- <subject category="Applications|Games"/>
- <subject category="Applications|Games|Arcade"/>
- <subject category="Applications|Games|Board"/>
- <subject category="Applications|Games|First Person Shooters"/>
- <subject category="Applications|Games|Puzzles"/>
- <subject category="Applications|Games|Fighting"/>
- <subject category="Applications|Games|Role-Playing"/>
- <subject category="Applications|Games|Simulation"/>
- <subject category="Applications|Games|Strategy"/>
- <subject category="Applications|Games|Other"/>
- <subject category="GNOME|Applications|Games"/>
- <subject category="GNOME|Games"/>
- <subject category="KDE|Games"/>
- </toc>
- <toc id="ApplicationsGraphics">
- <subject category="Applications|Multimedia|Graphics"/>
- <subject category="Applications|Multimedia|Graphics|3D Modelling"/>
- <subject category="Applications|Multimedia|Graphics|3D Rendering"/>
- <subject category="Applications|Multimedia|Graphics|CAD"/>
- <subject category="Applications|Multimedia|Graphics|Capture"/>
- <subject category="Applications|Multimedia|Graphics|Conversion"/>
- <subject category="Applications|Multimedia|Graphics|Drawing"/>
- <subject category="Applications|Multimedia|Graphics|Editing"/>
- <subject category="Applications|Multimedia|Graphics|Viewing"/>
- <subject category="Applications|Multimedia|Graphics|Other"/>
- <subject category="GNOME|Applications|Graphics"/>
- <subject category="GNOME|Graphics"/>
- <subject category="KDE|Graphics"/>
- </toc>
- <toc id="ApplicationsInternet">
- <subject category="Applications|Internet"/>
- <subject category="Applications|Internet|Chat"/>
- <subject category="Applications|Internet|Email"/>
- <subject category="Applications|Internet|Fax"/>
- <subject category="Applications|Internet|File Sharing"/>
- <subject category="Applications|Internet|FTP"/>
- <subject category="Applications|Internet|Internet Phone"/>
- <subject category="Applications|Internet|Messaging"/>
- <subject category="Applications|Internet|News"/>
- <subject category="Applications|Internet|Video Conferencing"/>
- <subject category="Applications|Internet|Web"/>
- <subject category="Applications|Internet|Other"/>
- <subject category="GNOME|Applications|Internet"/>
- <subject category="GNOME|Internet"/>
- <subject category="KDE|Internet"/>
- </toc>
- <toc id="ApplicationsMultimedia">
- <subject category="Applications|Multimedia"/>
- <subject category="Applications|Multimedia|Sound"/>
- <subject category="Applications|Multimedia|Sound|Analysis"/>
- <subject category="Applications|Multimedia|Sound|CD Mastering"/>
- <subject category="Applications|Multimedia|Sound|Conversion"/>
- <subject category="Applications|Multimedia|Sound|Editing"/>
- <subject category="Applications|Multimedia|Sound|MIDI"/>
- <subject category="Applications|Multimedia|Sound|Mixers"/>
- <subject category="Applications|Multimedia|Sound|Players"/>
- <subject category="Applications|Multimedia|Sound|Recording"/>
- <subject category="Applications|Multimedia|Sound|Speech"/>
- <subject category="Applications|Multimedia|Sound|Other"/>
- <subject category="Applications|Multimedia|Video"/>
- <subject category="Applications|Multimedia|Video|Capture"/>
- <subject category="Applications|Multimedia|Video|Conversion"/>
- <subject category="Applications|Multimedia|Video|Display"/>
- <subject category="Applications|Multimedia|Video|Editing"/>
- <subject category="Applications|Multimedia|Video|Other"/>
- <subject category="Applications|Multimedia|Other"/>
- <subject category="GNOME|Applications|Sound and Video"/>
- <subject category="GNOME|Multimedia"/>
- <subject category="KDE|Multimedia"/>
- </toc>
- <toc id="ApplicationsOffice">
- <subject category="Applications|Office"/>
- <subject category="Applications|Office|Calendar"/>
- <subject category="Applications|Office|Data Processing"/>
- <subject category="Applications|Office|Database"/>
- <subject category="Applications|Office|Email"/>
- <subject category="Applications|Office|Financial"/>
- <subject category="Applications|Office|PIM"/>
- <subject category="Applications|Office|Plotting"/>
- <subject category="Applications|Office|Presentation"/>
- <subject category="Applications|Office|Publishing"/>
- <subject category="Applications|Office|Publishing|Web Publishing"/>
- <subject category="Applications|Office|Word Processing"/>
- <subject category="Applications|Office|Other"/>
- <subject category="GNOME|Applications|Office"/>
- </toc>
- <toc id="ApplicationsProgramming">
- <subject category="Applications|Text Editors"/>
- <subject category="Applications|Text Editors|CLI"/>
- <subject category="Applications|Text Editors|GUI"/>
- <subject category="Applications|Text Editors|Other"/>
- <subject category="Development"/>
- <subject category="Development|Databases"/>
- <subject category="GNOME|Applications|Programming"/>
- <subject category="GNOME|Development"/>
- <subject category="GNOME|Development|Applications"/>
- <subject category="GNOME|Development|Introductory"/>
- <subject category="GNOME|Development|Tutorials"/>
- <subject category="GNOME|Development|White Papers"/>
- <subject category="Development|Development Tools"/>
- <subject category="Development|Development Tools|Build Tools"/>
- <subject category="Development|Development Tools|Code Generators"/>
- <subject category="Development|Development Tools|Configuration"/>
- <subject category="Development|Development Tools|Debuggers"/>
- <subject category="Development|Development Tools|IDEs"/>
- <subject category="Development|Development Tools|Packaging"/>
- <subject category="Development|Development Tools|Profiling"/>
- <subject category="Development|Development Tools|RAD"/>
- <subject category="Development|Development Tools|Version Control"/>
- <subject category="Development|Development Tools|Other"/>
- <subject category="Development|Environments"/>
- <subject category="Development|Environments|ADA"/>
- <subject category="Development|Environments|C"/>
- <subject category="Development|Environments|C++"/>
- <subject category="Development|Environments|GNOME"/>
- <subject category="Development|Environments|GTK+"/>
- <subject category="Development|Environments|gtk++"/>
- <subject category="Development|Environments|Java"/>
- <subject category="Development|Environments|KDE"/>
- <subject category="Development|Environments|Perl"/>
- <subject category="Development|Environments|Python"/>
- <subject category="Development|Environments|Qt"/>
- <subject category="Development|Environments|Tcl/Tk"/>
- <subject category="Development|Environments|WebML"/>
- <subject category="Development|Environments|Other"/>
- <subject category="Development|Kernels"/>
- <subject category="Development|Kernels|FreeBSD"/>
- <subject category="Development|Kernels|Linux"/>
- <subject category="Development|Kernels|NetBSD"/>
- <subject category="Development|Kernels|Other"/>
- <subject category="Development|Libraries"/>
- <subject category="Development|System Calls"/>
- <subject category="Development|Other"/>
- <subject category="KDE|Development"/>
- </toc>
- <toc id="ApplicationsScientific">
- <subject category="Applications|Scientific"/>
- <subject category="Applications|Scientific|Astronomy"/>
- <subject category="Applications|Scientific|Astrophysics"/>
- <subject category="Applications|Scientific|Biology"/>
- <subject category="Applications|Scientific|Chemistry"/>
- <subject category="Applications|Scientific|EDA"/>
- <subject category="Applications|Scientific|Genetics"/>
- <subject category="Applications|Scientific|Math"/>
- <subject category="Applications|Scientific|Physics"/>
- <subject category="Applications|Scientific|Visualisation"/>
- <subject category="Applications|Scientific|Other"/>
- </toc>
- <toc id="ApplicationsSystem">
- <subject category="Applications|Utilities|Monitors"/>
- <subject category="Applications|Utilities|Terminals"/>
- <subject category="Applications|Security"/>
- <subject category="Applications|Security|Cryptography"/>
- <subject category="Applications|Security|Other"/>
- <subject category="GNOME|Applications|System Tools"/>
- <subject category="GNOME|System"/>
- <subject category="GNOME|System Administration"/>
- <subject category="KDE|System"/>
- </toc>
- <toc id="ApplicationsX">
- <subject category="Applications|X"/>
- <subject category="Applications|X|Configuration"/>
- <subject category="Applications|X|Fonts"/>
- <subject category="Applications|X|Login Managers"/>
- <subject category="Applications|X|Screensavers"/>
- <subject category="Applications|X|Window Managers"/>
- <subject category="Applications|X|Other"/>
- <subject category="CDE"/>
- </toc>
- <toc id="Other">
- <subject category="Applications"/>
- <subject category="GNOME|Applications"/>
- <subject category="General"/>
- <subject category="General|Licenses"/>
- <subject category="General|Linux"/>
- <subject category="General|Linux|Distributions"/>
- <subject category="General|Linux|Distributions|Caldera"/>
- <subject category="General|Linux|Distributions|Debian"/>
- <subject category="General|Linux|Distributions|Mandrake"/>
- <subject category="General|Linux|Distributions|Red Flag"/>
- <subject category="General|Linux|Distributions|Red Hat"/>
- <subject category="General|Linux|Distributions|Slackware"/>
- <subject category="General|Linux|Distributions|SuSE"/>
- <subject category="General|Linux|Distributions|Other"/>
- <subject category="General|Linux|General"/>
- <subject category="General|Linux|Other"/>
- <subject category="General|Other"/>
- <subject category="System"/>
- <subject category="System|Administration"/>
- <subject category="System|Administration|Backups"/>
- <subject category="System|Administration|Backups|Local"/>
- <subject category="System|Administration|Backups|Remote"/>
- <subject category="System|Administration|Filesystems"/>
- <subject category="System|Administration|Networking"/>
- <subject category="System|Administration|Networking|AppleTalk"/>
- <subject category="System|Administration|Networking|PPP"/>
- <subject category="System|Administration|Networking|SMB"/>
- <subject category="System|Administration|Networking|TCP/IP"/>
- <subject category="System|Administration|Networking|DNS"/>
- <subject category="System|Administration|Networking|Other"/>
- <subject category="System|Administration|Users"/>
- <subject category="System|Administration|Other"/>
- <subject category="System|Configuration"/>
- <subject category="System|Configuration|Config Files"/>
- <subject category="System|Configuration|Configuration Tools"/>
- <subject category="System|Configuration|Other"/>
- <subject category="System|Hardware"/>
- <subject category="System|Hardware|Input Devices"/>
- <subject category="System|Hardware|Networking"/>
- <subject category="System|Hardware|Other"/>
- <subject category="System|Hardware|PCI/ISA/PCMCIA"/>
- <subject category="System|Hardware|Processor"/>
- <subject category="System|Hardware|Storage"/>
- <subject category="System|Hardware|Video"/>
- <subject category="System|Other"/>
- <subject category="System|Package Management"/>
- <subject category="System|Security"/>
- <subject category="System|Security|Firewall"/>
- <subject category="System|Security|Intrusion Detection"/>
- <subject category="System|Security|Virus"/>
- <subject category="System|Security|Other"/>
- <subject category="System|Services"/>
- <subject category="System|Services|BIND"/>
- <subject category="System|Services|FTP"/>
- <subject category="System|Services|HTTP"/>
- <subject category="System|Services|Other"/>
- <subject category="System|Services|Printing"/>
- <subject category="System|Services|SMB"/>
- <subject category="System|Services|SSH"/>
- <subject category="System|Services|Syslog"/>
- <subject category="System|Services|Telnet"/>
- </toc>
-</toc>
diff --git a/data/toc.xml.in b/data/toc.xml.in
deleted file mode 100644
index a06a741b..00000000
--- a/data/toc.xml.in
+++ /dev/null
@@ -1,416 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet href="toc.xml.in.content/toc.css" type="text/css"?>
-<toc id="Core">
- <_title>Desktop</_title>
- <_description>Welcome to the GNOME Help Browser</_description>
- <toc id="Accessibility" icon="accessibility-directory">
- <_title>Accessibility</_title>
- <_description>Learn more about making your system more accessible for a
- range of disabilities</_description>
- </toc>
- <toc id="GNOME">
- <_title>GNOME Applications</_title>
- <_description>Generic applications for the GNOME environment</_description>
- </toc>
- <toc id="KDE">
- <_title>KDE Applications</_title>
- <_description>Generic applications for the KDE environment</_description>
- </toc>
- <toc id="AudioVideo" icon="gnome-multimedia">
- <_title>Sound &amp; Video</_title>
- <_description>Applications related to audio and video</_description>
- <toc id="Video">
- <_title>Video</_title>
- <toc id="TV">
- <_title>TV</_title>
- </toc>
- </toc>
- <toc id="AudioVideoEditing">
- <_title>Sound &amp; Video Editing</_title>
- </toc>
- <toc id="Audio">
- <_title>Sound</_title>
- <toc id="Midi">
- <_title>Midi</_title>
- </toc>
- <toc id="Mixer">
- <_title>Mixers</_title>
- </toc>
- <toc id="Sequencer">
- <_title>Sequencers</_title>
- </toc>
- <toc id="Tuner">
- <_title>Tuners</_title>
- </toc>
- </toc>
- <toc id="Player">
- <!-- Translators: this is a menu title for audio and video players -->
- <_title>Players</_title>
- </toc>
- <toc id="Recorder">
- <!-- Translators: this is a menu title for audio and video recorders -->
- <_title>Recorders</_title>
- </toc>
- <toc id="DiscBurning">
- <!-- Translators: this is a menu title for burning audio and video to dics -->
- <_title>Disc Burning</_title>
- </toc>
- </toc>
-
- <toc id="Development" icon="gnome-devel">
- <_title>Development</_title>
- <_description>Guides for getting involved in development</_description>
- <toc id="Building">
- <_title>Building</_title>
- </toc>
- <toc id="Debugger">
- <_title>Debuggers</_title>
- </toc>
- <toc id="IDE">
- <_title>IDEs</_title>
- </toc>
- <toc id="GUIDesigner">
- <_title>GUI Designers</_title>
- </toc>
- <toc id="Profiling">
- <_title>Profiling Tools</_title>
- </toc>
- <toc id="RevisionControl">
- <_title>Revision Control</_title>
- </toc>
- <toc id="Translation">
- <_title>Translation Tools</_title>
- </toc>
- </toc>
- <toc id="Education">
- <_title>Education</_title>
- <_description>Applications that teach or aid in learning</_description>
- <toc id="Art">
- <_title>Art</_title>
- </toc>
- <toc id="Construction">
- <_title>Construction</_title>
- </toc>
- <toc id="Music">
- <_title>Music</_title>
- </toc>
- <toc id="Science">
- <_title>Science</_title>
- </toc>
- <toc id="ArtificialIntelligence">
- <_title>Artificial Intelligence</_title>
- </toc>
- <toc id="Astronomy">
- <_title>Astronomy</_title>
- </toc>
- <toc id="Biology">
- <_title>Biology</_title>
- </toc>
- <toc id="Chemistry">
- <_title>Chemistry</_title>
- </toc>
- <toc id="ComputerScience">
- <_title>Computer Science</_title>
- </toc>
- <toc id="DataVisualization">
- <_title>Data Visualization</_title>
- </toc>
- <toc id="Economy">
- <_title>Economy</_title>
- </toc>
- <toc id="Electricity">
- <_title>Electricity</_title>
- </toc>
- <toc id="Geography">
- <_title>Geography</_title>
- </toc>
- <toc id="Geology">
- <_title>Geology</_title>
- </toc>
- <toc id="Geoscience">
- <_title>Geoscience</_title>
- </toc>
- <toc id="History">
- <_title>History</_title>
- </toc>
- <toc id="ImageProcessing">
- <_title>Image Processing</_title>
- </toc>
- <toc id="Literature">
- <_title>Literature</_title>
- </toc>
- <toc id="Math">
- <_title>Math</_title>
- </toc>
- <toc id="NumericalAnalysis">
- <_title>Numerical Analysis</_title>
- </toc>
- <toc id="MedicalSoftware">
- <_title>Medical Software</_title>
- </toc>
- <toc id="Physics">
- <_title>Physics</_title>
- </toc>
- <toc id="Robotics">
- <_title>Robotics</_title>
- </toc>
- <toc id="Sports">
- <_title>Sports</_title>
- </toc>
- <toc id="ParallelComputing">
- <_title>Parallel Computing</_title>
- </toc>
- </toc>
- <toc id="Game" icon="gnome-joystick">
- <_title>Games</_title>
- <_description>Have some fun</_description>
- <toc id="ActionGame">
- <_title>Action Games</_title>
- </toc>
- <toc id="AdventureGame">
- <_title>Adventure Games</_title>
- </toc>
- <toc id="ArcadeGame">
- <_title>Arcade Games</_title>
- </toc>
- <toc id="BoardGame">
- <_title>Board Games</_title>
- </toc>
- <toc id="BlocksGame">
- <_title>Blocks Games</_title>
- </toc>
- <toc id="CardGame">
- <_title>Card Games</_title>
- </toc>
- <toc id="KidsGame">
- <_title>Kids Games</_title>
- </toc>
- <toc id="LogicGame">
- <_title>Logic Games</_title>
- </toc>
- <toc id="RolePlaying">
- <_title>Role Playing Games</_title>
- </toc>
- <toc id="Simulation">
- <_title>Simulation Games</_title>
- </toc>
- <toc id="SportsGame">
- <_title>Sports Games</_title>
- </toc>
- <toc id="StrategyGame">
- <_title>Strategy Games</_title>
- </toc>
- <toc id="Amusement">
- <_title>Amusement</_title>
- </toc>
- </toc>
- <toc id="Graphics" icon="gnome-graphics">
- <_title>Graphics</_title>
- <_description>Applications for viewing and manipulating graphics</_description>
- <toc id="2DGraphics">
- <_title>2D Graphics</_title>
- </toc>
- <toc id="VectorGraphics">
- <_title>Vector Graphics</_title>
- </toc>
- <toc id="RasterGraphics">
- <_title>Raster Graphics</_title>
- </toc>
- <toc id="3DGraphics">
- <_title>3D Graphics</_title>
- </toc>
- <toc id="Scanning">
- <_title>Scanning</_title>
- </toc>
- <toc id="OCR">
- <_title>OCR</_title>
- </toc>
- <toc id="Photography">
- <_title>Photography</_title>
- </toc>
- <toc id="Publishing">
- <_title>Publishing</_title>
- </toc>
- <toc id="Viewer">
- <!-- Translators: This is a menu title for graphics viewing applications-->
- <_title>Viewer</_title>
- </toc>
- </toc>
- <toc id="Network">
- <_title>Internet</_title>
- <_description>Guides and manuals for applications that connect to the outside world</_description>
- <toc id="Dialup">
- <_title>Dialup</_title>
- </toc>
- <toc id="InstantMessaging">
- <_title>Instant Messaging</_title>
- </toc>
- <toc id="Chat">
- <_title>Chat</_title>
- </toc>
- <toc id="IRCClient">
- <_title>IRC Clients</_title>
- </toc>
- <toc id="FileTransfer">
- <_title>File Transfer</_title>
- </toc>
- <toc id="HamRadio">
- <_title>Ham Radio</_title>
- </toc>
- <toc id="News">
- <_title>News</_title>
- </toc>
- <toc id="P2P">
- <_title>P2P</_title>
- </toc>
- <toc id="RemoteAccess">
- <_title>Remote Access</_title>
- </toc>
- <toc id="Telephony">
- <_title>Telephony</_title>
- </toc>
- <toc id="VideoConference">
- <_title>Video Conference</_title>
- </toc>
- <toc id="WebBrowser">
- <_title>Web Browser</_title>
- </toc>
- <toc id="WebDevelopment">
- <_title>Web Development</_title>
- </toc>
- </toc>
- <toc id="Office" icon="gnome-applications">
- <_title>Office Applications</_title>
- <_description>Office applications</_description>
- <toc id="Calendar">
- <_title>Calendar</_title>
- </toc>
- <toc id="ContactManagement">
- <_title>Contact Management</_title>
- </toc>
- <toc id="Database">
- <_title>Databases</_title>
- </toc>
- <toc id="Dictionary">
- <_title>Dictionaries</_title>
- </toc>
- <toc id="Chart">
- <_title>Charting Tools</_title>
- </toc>
- <toc id="Email">
- <_title>Email Tools</_title>
- </toc>
- <toc id="Finance">
- <_title>Financial Tools</_title>
- </toc>
- <toc id="FlowChart">
- <_title>Flow Charting Tools</_title>
- </toc>
- <toc id="PDA">
- <_title>PDA Communication</_title>
- </toc>
- <toc id="ProjectManagement">
- <_title>Project Management Tools</_title>
- </toc>
- <toc id="Presentation">
- <_title>Presentation Tools</_title>
- </toc>
- <toc id="Spreadsheet">
- <_title>Spreadsheet Tools</_title>
- </toc>
- <toc id="WordProcessor">
- <_title>Word Processors</_title>
- </toc>
- </toc>
- <toc id="Settings" icon="gnome-system">
- <_title>Settings</_title>
- <_description>Settings users can manipulate to make their environment more pleasant</_description>
- <toc id="DesktopSettings">
- <_title>Desktop Settings</_title>
- </toc>
- <toc id="Printing">
- <_title>Printing</_title>
- </toc>
- <toc id="TerminalEmulator">
- <_title>Terminal Emulator</_title>
- </toc>
- </toc>
- <toc id="System" icon="gnome-system">
- <_title>System</_title>
- <_description>Tools to help you manage your computer</_description>
- <toc id="Emulator">
- <_title>Emulator</_title>
- </toc>
- <toc id="Engineering">
- <_title>Engineering</_title>
- </toc>
- <toc id="PackageManager">
- <_title>Package Manager</_title>
- </toc>
- <toc id="FileTools">
- <_title>File Tools</_title>
- </toc>
- <toc id="FileManager">
- <_title>File Manager</_title>
- </toc>
- <toc id="HardwareSettings">
- <_title>Hardware Settings</_title>
- </toc>
- <toc id="Filesystem">
- <_title>Filesystem</_title>
- </toc>
- <toc id="Monitor">
- <_title>Monitor</_title>
- </toc>
- <toc id="Security">
- <_title>Security</_title>
- </toc>
- </toc>
- <toc id="Utility" icon="gnome-util">
- <_title>Utilities</_title>
- <_description>Utilities to help you get work done</_description>
- <toc id="Calculator">
- <_title>Calculator</_title>
- </toc>
- <toc id="Clock">
- <_title>Clocks</_title>
- </toc>
- <toc id="TextEditor">
- <_title>Text Editors</_title>
- </toc>
- <toc id="TelephonyTools">
- <_title>Telephony Tools</_title>
- </toc>
- <toc id="Archiving">
- <_title>Archiving Tools</_title>
- </toc>
- <toc id="Compression">
- <_title>Compression Tools</_title>
- </toc>
- <toc id="Electronics">
- <_title>Electronics</_title>
- </toc>
- </toc>
- <toc id="Other" icon="gnome-other">
- <_title>Other Documentation</_title>
- <_description>Miscellaneous Documentation</_description>
- <toc id="TextTools">
- <_title>Text Tools</_title>
- </toc>
- <toc id="Documentation">
- <_title>Licenses</_title>
- </toc>
- <toc id="GTK">
- <_title>GTK</_title>
- </toc>
- <toc id="Qt">
- <_title>Qt</_title>
- </toc>
- <toc id="Motif">
- <_title>Motif</_title>
- </toc>
- <toc id="Java">
- <_title>Java</_title>
- </toc>
- </toc>
-</toc>
diff --git a/data/ui/.cvsignore b/data/ui/.cvsignore
deleted file mode 100644
index 282522db..00000000
--- a/data/ui/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/stylesheets/Makefile.am b/data/xslt/Makefile.am
index f64d28fa..e46ebabe 100644
--- a/stylesheets/Makefile.am
+++ b/data/xslt/Makefile.am
@@ -2,22 +2,17 @@
xsldir=$(datadir)/yelp/xslt
-xsl_DATA = \
- db2html.xsl \
- db-title.xsl \
- mal2html.xsl \
- info2html.xsl \
- man2html.xsl \
- search2html.xsl \
- toc2html.xsl \
+xsl_DATA = \
+ db2html.xsl \
+ info2html.xsl \
+ mal2html.xsl \
+ man2html.xsl \
yelp-common.xsl
EXTRA_DIST= \
$(xsl_DATA) \
db2html.xsl.in \
- db-title.xsl.in \
info2html.xsl.in \
mal2html.xsl.in \
man2html.xsl.in \
- toc2html.xsl.in \
yelp-common.xsl.in
diff --git a/stylesheets/db2html.xsl.in b/data/xslt/db2html.xsl.in
index c44950f9..c44950f9 100644
--- a/stylesheets/db2html.xsl.in
+++ b/data/xslt/db2html.xsl.in
diff --git a/stylesheets/info2html.xsl.in b/data/xslt/info2html.xsl.in
index a97b054f..a97b054f 100644
--- a/stylesheets/info2html.xsl.in
+++ b/data/xslt/info2html.xsl.in
diff --git a/stylesheets/mal2html.xsl.in b/data/xslt/mal2html.xsl.in
index 0d45cba3..0d45cba3 100644
--- a/stylesheets/mal2html.xsl.in
+++ b/data/xslt/mal2html.xsl.in
diff --git a/stylesheets/man2html.xsl.in b/data/xslt/man2html.xsl.in
index a9907b9d..a9907b9d 100644
--- a/stylesheets/man2html.xsl.in
+++ b/data/xslt/man2html.xsl.in
diff --git a/stylesheets/yelp-common.xsl.in b/data/xslt/yelp-common.xsl.in
index ef278517..7c05f92d 100644
--- a/stylesheets/yelp-common.xsl.in
+++ b/data/xslt/yelp-common.xsl.in
@@ -93,7 +93,7 @@ div.body {
<!-- == html.js.custom == -->
<xsl:template name="html.js.custom">
-<script type="text/javascript" language="javascript" src="@DATADIR@/jquery-ui-1.8.custom.min.js"/>
+<script type="text/javascript" language="javascript" src="@DATADIR@/js/jquery-ui-1.8.custom.min.js"/>
</xsl:template>
<!-- == html.js.content.custom == -->
diff --git a/data/yelp.js b/data/yelp.js
deleted file mode 100644
index 8cc6d5f0..00000000
--- a/data/yelp.js
+++ /dev/null
@@ -1,95 +0,0 @@
-var slt = {
- /* Shorten the link trail by chopping off links from the
- beginning of it until it's no longer wider than the screen */
- init: function() {
- slt.lt = document.getElementById('linktrail');
- if (!slt.lt) return;
-
- /* Try and add links, in case we've just resized the
- window to be bigger */
- var canContinue = true;
- while (canContinue &&
- (slt.findRightEdge() < document.body.offsetWidth)) {
- canContinue = slt.addLinktrailElement();
- }
-
- /* Now remove links until the linktrail is narrower than
- the window */
- canContinue = true;
- while (canContinue &&
- (slt.findRightEdge() > document.body.offsetWidth)) {
- canContinue = slt.removeLinktrailElement();
- }
- },
-
- findRightEdge: function() {
- /* get the position of the far right-hand-edge of the rightmost
- element in the linktrail */
- var maxright = 0;
-
- for (var i=0;i<slt.lt.childNodes.length;i++) {
- if (typeof slt.lt.childNodes[i].offsetLeft != 'undefined' &&
- typeof slt.lt.childNodes[i].offsetWidth != 'undefined') {
- var rightedge = slt.lt.childNodes[i].offsetLeft +
- slt.lt.childNodes[i].offsetWidth;
- if (rightedge > maxright) maxright = rightedge;
- }
- }
-
- return maxright;
- },
-
- removeLinktrailElement: function() {
- /* Walk through the link trail until we find a complete
- link; when we do, change its displayed text to "…",
- put its actual text in a tooltip, and return */
- var links = slt.lt.getElementsByTagName('a');
-
- for (var i=0;i<links.length;i++) {
- if (links[i].firstChild) {
- if (links[i].firstChild.nodeValue != '…') {
- links[i].title = links[i].firstChild.nodeValue;
- links[i].firstChild.nodeValue = '…';
- return true;
- }
- }
- }
-
- /* There are no links left to remove; indicate this back
- to the caller so it doesn't loop infinitely */
- return false;
- },
-
- addLinktrailElement: function() {
- /* Walk through the link trail until we find a "…"
- link; when we do, change its displayed text back to
- what it should be and return */
- var links = slt.lt.getElementsByTagName('a');
-
- for (var i=0;i<links.length;i++) {
- if (links[i].firstChild) {
- if (links[i].firstChild.nodeValue == '…') {
- links[i].firstChild.nodeValue = links[i].title;
- return true;
- }
- }
- }
-
- /* There are no links left to add; indicate this back
- to the caller so it doesn't loop infinitely */
- return false;
- }
-}
-
-/* addEventListener() is Gecko-only, but so is yelp */
-window.addEventListener("load",slt.init,false);
-/* load doesn't seem to get fired in Yelp. I might need to tell Gecko
- that I'm finished or something. DOMContentLoaded works though */
-window.addEventListener("DOMContentLoaded",slt.init,false);
-window.addEventListener("resize",slt.init,false);
-
-function submit_search ()
-{
- window.location = "x-yelp-search:" + document.getElementById ('search-entry').value;
- return false;
-}
diff --git a/important_docs.xml b/important_docs.xml
deleted file mode 100644
index faa8794c..00000000
--- a/important_docs.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<docs>
- <section>
- <title>Important Docs One</title>
- <document seriesid="01ddeea4-0a42-11d6-9cf9-ee43c422358d"/>
- <document seriesid="2d0b7a0c-11d0-11d6-8146-ca25164c0f62"/>
- </section>
- <section>
- <title>Important Docs two</title>
- <document seriesid="01ddeea4-0a42-11d6-9cf9-ee43c422358e"/>
- <document seriesid="2d0b7a0c-11d0-11d6-8146-ca25164c0f62"/>
- </section>
-</docs>
diff --git a/po/.cvsignore b/po/.cvsignore
deleted file mode 100644
index e2ec6219..00000000
--- a/po/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.gmo
-*.mo
-*.pot
-Makefile
-Makefile.in
-Makefile.in.in
-POTFILES
-cat-id-tbl.c
-messages
-missing
-po2tbl.sed
-po2tbl.sed.in
-stamp-cat-id
diff --git a/po/POTFILES.in b/po/POTFILES.in
index fe485a98..857f8d8f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,9 +1,6 @@
# Add files with translateable strings here.
# Please keep this file sorted alphabetically.
[encoding: UTF-8]
-data/info.xml.in
-data/man.xml.in
-data/toc.xml.in
libyelp/yelp-bz2-decompressor.c
libyelp/yelp-debug.c
libyelp/yelp-docbook-document.c
diff --git a/src/.cvsignore b/src/.cvsignore
deleted file mode 100644
index a83b7aed..00000000
--- a/src/.cvsignore
+++ /dev/null
@@ -1,23 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.o
-ghelp-test
-libvfs-help.la
-*.lo
-GNOME_Yelp-*
-GNOME_Yelp.h
-GNOME_Yelp.server
-gnome_yelp_idl_stamp
-test-uri
-test-pager
-test-reader
-test-man-parser
-yelp-marshal.c
-yelp-marshal.h
-yelp
-yelp-db2html
-yelp-pregenerate
-core*
-stamp-*
diff --git a/src/Makefile.am b/src/Makefile.am
index 9c563cd4..f1c3296b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,14 +5,6 @@ yelp_SOURCES = \
yelp-window.c yelp-window.h \
yelp.c
-# yelp-toc.h yelp-toc.c \
-# yelp-db-print.c yelp-db-print.h \
-# yelp-man-parser.c yelp-man-parser.h \
-# yelp-man.c yelp-man.h \
-# yelp-search.c yelp-search.h \
-# yelp-search-parser.c yelp-search-parser.h
-
-
YELP_DEFINES = \
-DG_LOG_DOMAIN=\"Yelp\" \
-DPREFIX=\""$(prefix)"\" \
diff --git a/src/eggdesktopfile.h b/src/eggdesktopfile.h
deleted file mode 100644
index f8a3d3e0..00000000
--- a/src/eggdesktopfile.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* eggdesktopfile.h - Freedesktop.Org Desktop Files
- * 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; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place -
- * Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EGG_DESKTOP_FILE_H__
-#define __EGG_DESKTOP_FILE_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct EggDesktopFile EggDesktopFile;
-
-typedef enum {
- EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED,
-
- EGG_DESKTOP_FILE_TYPE_APPLICATION,
- EGG_DESKTOP_FILE_TYPE_LINK,
- EGG_DESKTOP_FILE_TYPE_DIRECTORY
-} EggDesktopFileType;
-
-EggDesktopFile *egg_desktop_file_new (const char *desktop_file_path,
- GError **error);
-
-EggDesktopFile *egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
- GError **error);
-EggDesktopFile *egg_desktop_file_new_from_dirs (const char *desktop_file_path,
- const char **search_dirs,
- GError **error);
-EggDesktopFile *egg_desktop_file_new_from_key_file (GKeyFile *key_file,
- const char *source,
- GError **error);
-
-void egg_desktop_file_free (EggDesktopFile *desktop_file);
-
-const char *egg_desktop_file_get_source (EggDesktopFile *desktop_file);
-
-EggDesktopFileType egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file);
-
-const char *egg_desktop_file_get_name (EggDesktopFile *desktop_file);
-const char *egg_desktop_file_get_icon (EggDesktopFile *desktop_file);
-
-gboolean egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
- const char *desktop_environment);
-
-gboolean egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file);
-gboolean egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file);
-gboolean egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file);
-
-char *egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
- GSList *documents,
- GError **error);
-
-gboolean egg_desktop_file_launch (EggDesktopFile *desktop_file,
- GSList *documents,
- GError **error,
- ...) G_GNUC_NULL_TERMINATED;
-
-typedef enum {
- EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1,
- EGG_DESKTOP_FILE_LAUNCH_PUTENV,
- EGG_DESKTOP_FILE_LAUNCH_SCREEN,
- EGG_DESKTOP_FILE_LAUNCH_WORKSPACE,
- EGG_DESKTOP_FILE_LAUNCH_DIRECTORY,
- EGG_DESKTOP_FILE_LAUNCH_TIME,
- EGG_DESKTOP_FILE_LAUNCH_FLAGS,
- EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_PID,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID
-} EggDesktopFileLaunchOption;
-
-/* Standard Keys */
-#define EGG_DESKTOP_FILE_GROUP "Desktop Entry"
-
-#define EGG_DESKTOP_FILE_KEY_TYPE "Type"
-#define EGG_DESKTOP_FILE_KEY_VERSION "Version"
-#define EGG_DESKTOP_FILE_KEY_NAME "Name"
-#define EGG_DESKTOP_FILE_KEY_GENERIC_NAME "GenericName"
-#define EGG_DESKTOP_FILE_KEY_NO_DISPLAY "NoDisplay"
-#define EGG_DESKTOP_FILE_KEY_COMMENT "Comment"
-#define EGG_DESKTOP_FILE_KEY_ICON "Icon"
-#define EGG_DESKTOP_FILE_KEY_HIDDEN "Hidden"
-#define EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN "OnlyShowIn"
-#define EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN "NotShowIn"
-#define EGG_DESKTOP_FILE_KEY_TRY_EXEC "TryExec"
-#define EGG_DESKTOP_FILE_KEY_EXEC "Exec"
-#define EGG_DESKTOP_FILE_KEY_PATH "Path"
-#define EGG_DESKTOP_FILE_KEY_TERMINAL "Terminal"
-#define EGG_DESKTOP_FILE_KEY_MIME_TYPE "MimeType"
-#define EGG_DESKTOP_FILE_KEY_CATEGORIES "Categories"
-#define EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY "StartupNotify"
-#define EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS "StartupWMClass"
-#define EGG_DESKTOP_FILE_KEY_URL "URL"
-
-/* Accessors */
-gboolean egg_desktop_file_has_key (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-char *egg_desktop_file_get_string (EggDesktopFile *desktop_file,
- const char *key,
- GError **error) G_GNUC_MALLOC;
-char *egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- GError **error) G_GNUC_MALLOC;
-gboolean egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-double egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-char **egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
- const char *key,
- gsize *length,
- GError **error) G_GNUC_MALLOC;
-char **egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- gsize *length,
- GError **error) G_GNUC_MALLOC;
-
-
-/* Errors */
-#define EGG_DESKTOP_FILE_ERROR egg_desktop_file_error_quark()
-
-GQuark egg_desktop_file_error_quark (void);
-
-typedef enum {
- EGG_DESKTOP_FILE_ERROR_INVALID,
- EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
- EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION
-} EggDesktopFileError;
-
-/* Global application desktop file */
-void egg_set_desktop_file (const char *desktop_file_path);
-EggDesktopFile *egg_get_desktop_file (void);
-
-
-G_END_DECLS
-
-#endif /* __EGG_DESKTOP_FILE_H__ */
diff --git a/src/test-document.c b/src/test-document.c
deleted file mode 100644
index a7adb427..00000000
--- a/src/test-document.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2006 Shaun McCance
- *
- * 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, Cambridge, MA 02139, USA.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- */
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <libxml/parser.h>
-#include <libxml/xinclude.h>
-
-#include "yelp-error.h"
-#include "yelp-docbook.h"
-#include "yelp-man.h"
-#include "yelp-toc.h"
-
-static gchar *mode = NULL;
-static gchar **files = NULL;
-static const GOptionEntry options[] = {
- { "mode", 'm',
- 0, G_OPTION_ARG_STRING,
- &mode,
- "One of man, docbook or toc", "MODE" },
- { G_OPTION_REMAINING,
- 0, 0, G_OPTION_ARG_FILENAME_ARRAY,
- &files, NULL, NULL },
- { NULL }
-};
-
-static void document_func (YelpDocument *document,
- YelpDocumentSignal signal,
- gint req_id,
- gpointer *func_data,
- gpointer user_data);
-
-GMainLoop *loop;
-
-static void
-document_func (YelpDocument *document,
- YelpDocumentSignal signal,
- gint req_id,
- gpointer *func_data,
- gpointer user_data)
-{
- gchar contents[60];
- gchar *contents_;
- gsize read;
- YelpPage *page;
- YelpError *error;
- switch (signal) {
- case YELP_DOCUMENT_SIGNAL_PAGE:
- page = (YelpPage *) func_data;
- printf ("PAGE: %s (%i)\n", page->id, req_id);
- printf (" PREV: %s\n", page->prev_id);
- printf (" NEXT: %s\n", page->next_id);
- printf (" UP: %s\n", page->up_id);
- printf (" ROOT: %s\n", page->root_id);
- printf (" SECTIONS: %s\n", yelp_document_get_sections (document) ? "yep": "nah");
- yelp_page_read (page, contents, 60, &read, NULL);
- /* contents isn't \0-terminated */
- contents_ = g_strndup (contents, read);
- printf (" DATA: %s\n", contents_);
- g_free (contents_);
- yelp_page_free (page);
- break;
- case YELP_DOCUMENT_SIGNAL_TITLE:
- printf ("TITLE: %s (%i)\n", (gchar *) func_data, req_id);
- g_free (func_data);
- break;
- case YELP_DOCUMENT_SIGNAL_ERROR:
- error = (YelpError *) func_data;
- printf ("ERROR: %s\n", yelp_error_get_title (error));
- printf (" %s\n", yelp_error_get_message (error));
- yelp_error_free (error);
- break;
- }
-}
-
-gint
-main (gint argc, gchar **argv)
-{
- GOptionContext *context;
- YelpDocument *document;
- gint i;
-
- g_thread_init (NULL);
- gdk_threads_init ();
- gdk_threads_leave ();
-
- gtk_init (&argc, &argv);
-
- context = g_option_context_new ("FILE PAGE_IDS...");
- g_option_context_add_main_entries (context, options, NULL);
- g_option_context_parse (context, &argc, &argv, NULL);
-
- if (!mode)
- mode = g_strdup ("docbook");
-
- if ((files == NULL || files[0] == NULL) && !g_str_equal (mode, "toc")) {
- g_printerr ("Usage: test-docbook FILE PAGE_IDS...\n");
- return 1;
- }
-
- if (g_str_equal (mode, "man"))
- document = yelp_man_new (files[0]);
- else if (g_str_equal (mode, "toc"))
- document = yelp_toc_new ();
- else if (g_str_equal (mode, "docbook"))
- document = yelp_docbook_new (files[0]);
- else {
- g_error ("Unknown test. Please try again later\n");
- return 3;
- }
-
- if ((files == NULL || files[1] == NULL) && (!g_str_equal (mode, "toc")))
- yelp_document_get_page (document, "x-yelp-index", (YelpDocumentFunc) document_func, NULL);
- else if (!g_str_equal (mode, "toc")) {
- for (i = 1; files[i]; i++)
- yelp_document_get_page (document, files[i], (YelpDocumentFunc) document_func, NULL);
- } else {
- if (files) {
- for (i = 0; files[i]; i++)
- yelp_document_get_page (document, files[i], (YelpDocumentFunc) document_func, NULL);
- } else {
- yelp_document_get_page (document, "index", (YelpDocumentFunc) document_func, NULL);
- }
- }
- loop = g_main_loop_new (NULL, FALSE);
- g_main_loop_run (loop);
-
- gdk_threads_leave ();
-
- return 0;
-}
diff --git a/src/test-man-parser.c b/src/test-man-parser.c
deleted file mode 100644
index 38b38497..00000000
--- a/src/test-man-parser.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2002 Shaun McCance
- *
- * 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, Cambridge, MA 02139, USA.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- */
-
-#include <glib.h>
-#include <libxml/tree.h>
-
-#include "yelp-man-parser.h"
-
-static gchar **files = NULL;
-static const GOptionEntry options[] = {
- { G_OPTION_REMAINING,
- 0, 0, G_OPTION_ARG_FILENAME_ARRAY,
- &files, NULL, NULL },
- { NULL }
-};
-
-gint
-main (gint argc, gchar **argv)
-{
- GOptionContext *context;
- YelpManParser *parser;
- xmlDocPtr doc;
- gchar *encoding;
- gint i;
-
- context = g_option_context_new ("FILES...");
- g_option_context_add_main_entries (context, options, NULL);
- g_option_context_parse (context, &argc, &argv, NULL);
-
- if (files == NULL || files[0] == NULL) {
- g_printerr ("Usage: test-man-parser [OPTION...] FILES...\n");
- return 1;
- }
-
- parser = yelp_man_parser_new ();
-
- encoding = (gchar *) g_getenv("MAN_ENCODING");
- if (encoding == NULL)
- encoding = "ISO-8859-1";
-
- for (i = 0; files[i]; i++) {
- doc = yelp_man_parser_parse_file (parser, files[i], encoding);
- xmlDocDump (stdout, doc);
- xmlFreeDoc (doc);
- }
-
- yelp_man_parser_free (parser);
-
- return 0;
-}
diff --git a/src/test-page.c b/src/test-page.c
deleted file mode 100644
index c7d2c701..00000000
--- a/src/test-page.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * 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, Cambridge, MA 02139, USA.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- */
-
-#include <glib.h>
-
-#include "yelp-page.h"
-#include "yelp-error.h"
-
-#define READ_SIZE 1024
-
-static gchar *file = NULL;
-static const GOptionEntry options[] = {
- { G_OPTION_REMAINING,
- 0, 0, G_OPTION_ARG_FILENAME,
- &file, NULL, NULL },
- { NULL }
-};
-
-gint
-main (gint argc, gchar **argv)
-{
- GOptionContext *context;
- YelpPage *page;
- YelpError *error;
- gchar buffer[READ_SIZE];
- gsize read;
- gint num_reads;
-
- context = g_option_context_new ("[FILE]");
- g_option_context_add_main_entries (context, options, NULL);
- g_option_context_parse (context, &argc, &argv, NULL);
-
- if (file == NULL) {
- gint i;
- gchar *str, *new;
- str = g_strdup ("Fe fi fo fum. I smell the blood of an Englishman.\n");
- for (i = 0; i < 5; i++) {
- new = g_strconcat (str, str, str, str, str, str, str, NULL);
- g_free (str);
- str = new;
- }
- page = yelp_page_new_string (NULL, NULL, str);
- } else {
- g_error ("File pages not yet supported.\n");
- return 1;
- }
-
- num_reads = 0;
- while (yelp_page_read (page, buffer, READ_SIZE, &read, &error)
- == G_IO_STATUS_NORMAL) {
- gchar *str;
- num_reads++;
- /* buffer isn't NULL-terminated */
- str = g_strndup (buffer, READ_SIZE);
- printf ("%s", str);
- g_free (str);
- }
-
- printf ("\n%i total reads\n", num_reads);
- printf ("%i bytes in last read\n", read);
-
- yelp_page_free (page);
-
- return 0;
-}
diff --git a/src/test-resolver.c b/src/test-resolver.c
deleted file mode 100644
index cfadb956..00000000
--- a/src/test-resolver.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* A test util to try out the new
- * yelp-utils resolver for URIs
- * Basically, tries to resolve each
- * given URI and compares to the expected results
- * (only checks the files exist and the type is correct)
- */
-
-#include <stdio.h>
-#include <glib.h>
-#include "yelp-utils.h"
-
-
-int DefaultTests (void);
-int TestFile (char *uri);
-
-
-int
-TestFile (char *uri)
-{
- return (g_file_test (uri, G_FILE_TEST_EXISTS));
-}
-
-int
-DefaultTests (void)
-{
- gchar *result = NULL;
- gchar *section = NULL;
- YelpRrnType restype = YELP_TYPE_ERROR;
-
- /* First, normal docs - these will only work with rrn XDG_DATA_DIRS set correctly */
- /* Normal doc, no section */
- restype = yelp_uri_resolve ("ghelp:user-guide", &result, &section);
- if (restype != YELP_TYPE_DOC || !TestFile (result) ||
- section != NULL) {
- return 101;
- }
- g_free (result); result=NULL;
-
- /* Section type 1*/
- restype = yelp_uri_resolve ("ghelp:user-guide#madeupsection", &result, &section);
- if (restype != YELP_TYPE_DOC || !TestFile (result) ||
- !g_str_equal (section, "madeupsection")) {
- return 102;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Section type 2 */
- restype = yelp_uri_resolve ("ghelp:user-guide?madeupsection", &result, &section);
- if (restype != YELP_TYPE_DOC || !TestFile (result) ||
- !g_str_equal (section, "madeupsection")) {
- return 103;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* man pages - only work with correct man pages installed */
- /* Simple man page */
- restype = yelp_uri_resolve ("man:yelp", &result, &section);
- if (restype != YELP_TYPE_MAN || !TestFile (result) ||
- !g_str_equal (section, "1")) {
- return 104;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* man page from specific section 1*/
- restype = yelp_uri_resolve ("man:yelp(1)", &result, &section);
- if (restype != YELP_TYPE_MAN || !TestFile (result) ||
- !g_str_equal (section, "1")) {
- return 105;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* man page from specific section 2*/
- restype = yelp_uri_resolve ("man:yelp.1", &result, &section);
- if (restype != YELP_TYPE_MAN || !TestFile (result) ||
- !g_str_equal (section, "1")) {
- return 106;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* man page from specific section 3*/
- restype = yelp_uri_resolve ("man:yelp#1", &result, &section);
- if (restype != YELP_TYPE_MAN || !TestFile (result) ||
- !g_str_equal (section, "1")) {
- return 107;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Info pages */
- /* Simple info page */
- restype = yelp_uri_resolve ("info:cvs", &result, &section);
- if (restype != YELP_TYPE_INFO || !TestFile (result) ||
- section != NULL) {
- return 108;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* info page with section */
- restype = yelp_uri_resolve ("info:cvs#toolbar", &result, &section);
- if (restype != YELP_TYPE_INFO || !TestFile (result) ||
- !g_str_equal (section, "toolbar")) {
- return 109;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* info page with section 2*/
- restype = yelp_uri_resolve ("info:cvs?toolbar", &result, &section);
- if (restype != YELP_TYPE_INFO || !TestFile (result) ||
- !g_str_equal (section, "toolbar")) {
- return 110;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
-
- /* info page with section included */
- restype = yelp_uri_resolve ("info:autopoint", &result, &section);
- if (restype != YELP_TYPE_INFO || !TestFile (result) ||
- !g_str_equal (section, "autopoint Invocation")) {
- return 111;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Other types: html - no html installed by default. Should be the same
- * as ghelp
- */
- /* External */
- restype = yelp_uri_resolve ("http://www.gnome.org", &result, &section);
- if (restype != YELP_TYPE_EXTERNAL) {
- return 112;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* External, but local */
- restype = yelp_uri_resolve ("/usr/bin/yelp", &result, &section);
- if (restype != YELP_TYPE_EXTERNAL) {
- return 113;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* External, local using file: uri */
- restype = yelp_uri_resolve ("file:///usr/bin/yelp", &result, &section);
- if (restype != YELP_TYPE_EXTERNAL) {
- return 114;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Local, file, readable */
- restype = yelp_uri_resolve ("file:///usr/share/gnome/help/user-guide/C/user-guide.xml", &result, &section);
- if (restype != YELP_TYPE_DOC || !TestFile (result) ||
- section != NULL) {
- return 115;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Local, readable, html */
- restype = yelp_uri_resolve ("/usr/share/doc/shared-mime-info/shared-mime-info-spec.html/index.html", &result, &section);
- if (restype != YELP_TYPE_HTML || !TestFile (result) ||
- section != NULL) {
- return 116;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* Local, readable, html, with section */
- restype = yelp_uri_resolve ("/usr/share/doc/shared-mime-info/shared-mime-info-spec.html/index.html#foobar", &result, &section);
- if (restype != YELP_TYPE_HTML || !TestFile (result) ||
- !g_str_equal (section, "foobar")) {
- return 117;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
- /* error */
- restype = yelp_uri_resolve ("file:///usr/fake_file1", &result, &section);
- if (restype != YELP_TYPE_ERROR || result != NULL || section != NULL) {
- return 118;
- }
- g_free (result); result=NULL;
- g_free (section); section = NULL;
-
-
-
-
- return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
- int i=1;
-
- if (argc % 2 != 1) {
- printf ("Usage: %s [<test-uri> <type> <test-uri> <type> ... ]\n", argv[0]);
- printf ("type can be one of:\n");
- printf ("man, info, doc, html, external, fail\n");
- return 1;
- }
-
- if (argc == 1) {
- int ret;
- ret = DefaultTests ();
- return ret;
- }
- while (i < argc) {
- char *uri = argv[i];
- char *type = argv[i+1];
- char *result = NULL;
- char *section = NULL;
- YelpRrnType restype = YELP_TYPE_ERROR;
-
-
- printf ("uri: %s type: %s\n", argv[i], argv[i+1]);
-
- if (g_str_equal (type, "doc")) {
- restype = yelp_uri_resolve (argv[i], &result, &section);
- if (restype != YELP_TYPE_DOC || !TestFile (result)) {
- printf ("Failed doc test %s. Aborting.\n", uri);
- return 2;
- }
- } else if (g_str_equal (type, "info")) {
- restype = yelp_uri_resolve (argv[i], &result, &section);
- if (restype != YELP_TYPE_INFO || !TestFile (result)) {
- printf ("Failed doc test %s. Aborting.\n", uri);
- return 3;
- }
- } else if (g_str_equal (type, "man")) {
- restype = yelp_uri_resolve (argv[i], &result, &section);
- if (restype != YELP_TYPE_MAN || !TestFile (result)) {
- printf ("Failed doc test %s. Aborting.\n", uri);
- return 4;
- }
- } else if (g_str_equal (type, "external")) {
- restype = yelp_uri_resolve (argv[i], &result, &section);
- if (restype != YELP_TYPE_EXTERNAL) {
- printf ("Failed doc test %s. Aborting.\n", uri, restype, YELP_TYPE_EXTERNAL);
- return 5;
- }
- } else if (g_str_equal (type, "error")) {
- restype = yelp_uri_resolve (argv[i], &result, &section);
- if (restype != YELP_TYPE_ERROR || result != NULL) {
- printf ("Failed doc test %s. Aborting.\n", uri);
- return 6;
- }
- } else {
- printf ("Unknown test: %s. Ignoring.\n", type);
- }
- i+=2;
- g_free (result);
- result = NULL;
- }
- return 0;
-}
-
-
diff --git a/src/yelp-db-print.c b/src/yelp-db-print.c
deleted file mode 100644
index b85eea67..00000000
--- a/src/yelp-db-print.c
+++ /dev/null
@@ -1,768 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2003-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.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- * Author: Don Scorgie <Don@Scorgie.org>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xinclude.h>
-
-#include "yelp-error.h"
-#include "yelp-db-print.h"
-#include "yelp-settings.h"
-#include "yelp-transform.h"
-#include "yelp-debug.h"
-
-#define STYLESHEET DATADIR"/yelp/xslt/db2html.xsl"
-
-#define YELP_DBPRINT_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_DBPRINT, YelpDbprintPriv))
-
-typedef enum {
- DBPRINT_STATE_BLANK, /* Brand new, run transform as needed */
- DBPRINT_STATE_PARSING, /* Parsing/transforming document, please wait */
- DBPRINT_STATE_PARSED, /* All done, if we ain't got it, it ain't here */
- DBPRINT_STATE_STOP /* Stop everything now, object to be disposed */
-} DbprintState;
-
-struct _YelpDbprintPriv {
- gchar *filename;
- DbprintState state;
-
- GMutex *mutex;
- GThread *thread;
-
- gboolean process_running;
- gboolean transform_running;
-
- YelpTransform *transform;
-
- xmlDocPtr xmldoc;
- xmlNodePtr xmlcur;
- gint max_depth;
- gint cur_depth;
- gchar *cur_page_id;
- gchar *cur_prev_id;
-};
-
-
-static void dbprint_class_init (YelpDbprintClass *klass);
-static void dbprint_init (YelpDbprint *dbprint);
-static void dbprint_try_dispose (GObject *object);
-static void dbprint_dispose (GObject *object);
-
-/* YelpDocument */
-static void dbprint_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,
- YelpDbprint *dbprint);
-static void transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpDbprint *dbprint);
-static void transform_final_func (YelpTransform *transform,
- YelpDbprint *dbprint);
-
-/* Threaded */
-static void dbprint_process (YelpDbprint *dbprint);
-
-#if 0
-/* Walker */
-static void dbprint_walk (YelpDbprint *dbprint);
-static gboolean dbprint_walk_chunkQ (YelpDbprint *dbprint);
-static gboolean dbprint_walk_divisionQ (YelpDbprint *dbprint);
-static gchar * dbprint_walk_get_title (YelpDbprint *dbprint);
-#endif
-
-static YelpDocumentClass *parent_class;
-
-GType
-yelp_dbprint_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- static const GTypeInfo info = {
- sizeof (YelpDbprintClass),
- NULL, NULL,
- (GClassInitFunc) dbprint_class_init,
- NULL, NULL,
- sizeof (YelpDbprint),
- 0,
- (GInstanceInitFunc) dbprint_init,
- };
- type = g_type_register_static (YELP_TYPE_DOCUMENT,
- "YelpDbprint",
- &info, 0);
- }
- return type;
-}
-
-static void
-dbprint_class_init (YelpDbprintClass *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 = dbprint_try_dispose;
-
- document_class->request = dbprint_request;
- document_class->cancel = NULL;
-
- g_type_class_add_private (klass, sizeof (YelpDbprintPriv));
-}
-
-static void
-dbprint_init (YelpDbprint *dbprint)
-{
- YelpDbprintPriv *priv;
- priv = dbprint->priv = YELP_DBPRINT_GET_PRIVATE (dbprint);
-
-
- priv->state = DBPRINT_STATE_BLANK;
-
- priv->mutex = g_mutex_new ();
-}
-
-static void
-dbprint_try_dispose (GObject *object)
-{
- YelpDbprintPriv *priv;
-
- g_assert (object != NULL && YELP_IS_DBPRINT (object));
-
- priv = YELP_DBPRINT (object)->priv;
-
- g_mutex_lock (priv->mutex);
- if (priv->process_running || priv->transform_running) {
- priv->state = DBPRINT_STATE_STOP;
- g_idle_add ((GSourceFunc) dbprint_try_dispose, object);
- g_mutex_unlock (priv->mutex);
- } else {
- g_mutex_unlock (priv->mutex);
- dbprint_dispose (object);
- }
-}
-
-static void
-dbprint_dispose (GObject *object)
-{
- YelpDbprint *dbprint = YELP_DBPRINT (object);
-
- g_free (dbprint->priv->filename);
-
- if (dbprint->priv->xmldoc)
- xmlFreeDoc (dbprint->priv->xmldoc);
-
- g_free (dbprint->priv->cur_page_id);
- g_free (dbprint->priv->cur_prev_id);
-
- g_mutex_free (dbprint->priv->mutex);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-/******************************************************************************/
-
-YelpDocument *
-yelp_dbprint_new (gchar *filename)
-{
- YelpDbprint *dbprint;
-
- g_return_val_if_fail (filename != NULL, NULL);
-
- debug_print (DB_FUNCTION, "entering\n");
- debug_print (DB_ARG, " filename = \"%s\"\n", filename);
-
- dbprint = (YelpDbprint *) g_object_new (YELP_TYPE_DBPRINT, NULL);
- dbprint->priv->filename = g_strdup (filename);
-
- yelp_document_add_page_id (YELP_DOCUMENT (dbprint), "x-yelp-titlepage", "x-yelp-titlepage");
-
- return (YelpDocument *) dbprint;
-}
-
-
-/******************************************************************************/
-/** YelpDocument **************************************************************/
-
-static void
-dbprint_request (YelpDocument *document,
- gint req_id,
- gboolean handled,
- gchar *page_id,
- YelpDocumentFunc func,
- gpointer user_data)
-{
- YelpDbprint *dbprint;
- YelpDbprintPriv *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_DBPRINT (document));
-
- if (handled) {
- return;
- }
-
- dbprint = YELP_DBPRINT (document);
- priv = dbprint->priv;
-
- g_mutex_lock (priv->mutex);
-
- switch (priv->state) {
- case DBPRINT_STATE_BLANK:
- priv->state = DBPRINT_STATE_PARSING;
- priv->process_running = TRUE;
- priv->thread = g_thread_create ((GThreadFunc) dbprint_process,
- dbprint, FALSE, NULL);
- break;
- case DBPRINT_STATE_PARSING:
- break;
- case DBPRINT_STATE_PARSED:
- case DBPRINT_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,
- YelpDbprint *dbprint)
-{
- YelpDbprintPriv *priv;
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (dbprint != NULL && YELP_IS_DBPRINT (dbprint));
-
- priv = dbprint->priv;
-
- g_assert (transform == priv->transform);
-
- if (priv->state == DBPRINT_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, dbprint);
- break;
- case YELP_TRANSFORM_ERROR:
- yelp_document_error_pending (YELP_DOCUMENT (dbprint), (YelpError *) func_data);
- yelp_transform_release (transform);
- priv->transform = NULL;
- priv->transform_running = FALSE;
- break;
- case YELP_TRANSFORM_FINAL:
- transform_final_func (transform, dbprint);
- break;
- }
-}
-
-static void
-transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpDbprint *dbprint)
-{
- YelpDbprintPriv *priv;
- gchar *content;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- priv = dbprint->priv;
- g_mutex_lock (priv->mutex);
-
- content = yelp_transform_eat_chunk (transform, page_id);
- yelp_document_add_page (YELP_DOCUMENT (dbprint), page_id, content);
-
- g_free (page_id);
-
- g_mutex_unlock (priv->mutex);
-}
-
-static void
-transform_final_func (YelpTransform *transform, YelpDbprint *dbprint)
-{
- YelpError *error;
- YelpDbprintPriv *priv = dbprint->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_error_pending (YELP_DOCUMENT (dbprint), error);
-
- yelp_transform_release (transform);
- priv->transform = NULL;
- priv->transform_running = FALSE;
-
- if (priv->xmldoc)
- xmlFreeDoc (priv->xmldoc);
- priv->xmldoc = NULL;
-
- g_mutex_unlock (priv->mutex);
-}
-
-
-/******************************************************************************/
-/** Threaded ******************************************************************/
-
-static void
-dbprint_process (YelpDbprint *dbprint)
-{
- YelpDbprintPriv *priv;
- xmlDocPtr xmldoc = NULL;
- xmlChar *id = NULL;
- YelpError *error = NULL;
- xmlParserCtxtPtr parserCtxt = NULL;
- YelpDocument *document;
- gchar **params;
- gint params_i = 0;
- gint params_max = 20;
-
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (dbprint != NULL && YELP_IS_DBPRINT (dbprint));
- g_object_ref (dbprint);
- priv = dbprint->priv;
- document = YELP_DOCUMENT (dbprint);
-
- 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;
- }
-
- parserCtxt = xmlNewParserCtxt ();
- xmldoc = xmlCtxtReadFile (parserCtxt,
- (const char *) priv->filename, NULL,
- XML_PARSE_DTDLOAD | XML_PARSE_NOCDATA |
- XML_PARSE_NOENT | XML_PARSE_NONET );
-
- if (xmldoc == NULL) {
- error = yelp_error_new (_("Could not parse file"),
- _("The file ‘%s’ could not be parsed because it is"
- " not a well-formed XML document."),
- priv->filename);
- yelp_document_error_pending (document, error);
- goto done;
- }
-
- if (xmlXIncludeProcessFlags (xmldoc,
- XML_PARSE_DTDLOAD | XML_PARSE_NOCDATA |
- XML_PARSE_NOENT | XML_PARSE_NONET )
- < 0) {
- error = yelp_error_new (_("Could not parse file"),
- _("The file ‘%s’ could not be parsed because"
- " one or more of its included files is not"
- " a well-formed XML document."),
- priv->filename);
- yelp_document_error_pending (document, error);
- goto done;
- }
-
- g_mutex_lock (priv->mutex);
- if (!xmlStrcmp (xmlDocGetRootElement (xmldoc)->name, BAD_CAST "book"))
- priv->max_depth = 2;
- else
- priv->max_depth = 1;
-
- priv->xmldoc = xmldoc;
- priv->xmlcur = xmlDocGetRootElement (xmldoc);
-
- id = xmlGetProp (priv->xmlcur, BAD_CAST "id");
- if (id) {
- yelp_document_set_root_id (document, (gchar *) id);
- yelp_document_add_page_id (document, "x-yelp-index", (gchar *) id);
- yelp_document_add_prev_id (document, (gchar *) id, "x-yelp-titlepage");
- yelp_document_add_next_id (document, "x-yelp-titlepage", (gchar *) id);
- }
- else {
- yelp_document_set_root_id (document, "x-yelp-index");
- yelp_document_add_page_id (document, "x-yelp-index", "x-yelp-index");
- yelp_document_add_prev_id (document, "x-yelp-index", "x-yelp-titlepage");
- yelp_document_add_next_id (document, "x-yelp-titlepage", "x-yelp-index");
- /* add the id attribute to the root element with value "index"
- * so when we try to load the document later, it doesn't fail */
- xmlNewProp (priv->xmlcur, BAD_CAST "id", BAD_CAST "x-yelp-index");
- }
- g_mutex_unlock (priv->mutex);
-
- g_mutex_lock (priv->mutex);
- if (priv->state == DBPRINT_STATE_STOP) {
- g_mutex_unlock (priv->mutex);
- goto done;
- }
- g_mutex_unlock (priv->mutex);
-
- g_mutex_lock (priv->mutex);
- if (priv->state == DBPRINT_STATE_STOP) {
- g_mutex_unlock (priv->mutex);
- goto done;
- }
- priv->transform = yelp_transform_new (STYLESHEET,
- (YelpTransformFunc) transform_func,
- dbprint);
- priv->transform_running = TRUE;
- /* FIXME: we probably need to set our own params */
-
- params = g_new0 (gchar *, params_max);
-
- yelp_settings_params (&params, &params_i, &params_max);
-
- if ((params_i + 10) >= params_max - 1) {
- params_max += 20;
- params = g_renew (gchar *, params, params_max);
- }
- params[params_i++] = "db.chunk.extension";
- params[params_i++] = g_strdup ("\"\"");
- params[params_i++] = "db.chunk.info_basename";
- params[params_i++] = g_strdup ("\"index\"");
- params[params_i++] = "db.chunk.max_depth";
- params[params_i++] = g_strdup ("0");
- params[params_i++] = "db2html.navbar.top";
- params[params_i++] = g_strdup ("0");
- params[params_i++] = "db2html.navbar.bottom";
- params[params_i++] = g_strdup ("0");
- params[params_i++] = "db2html.sidenav";
- params[params_i++] = g_strdup ("0");
-
- params[params_i] = NULL;
-
- yelp_transform_start (priv->transform,
- priv->xmldoc,
- params);
- g_strfreev (params);
- g_mutex_unlock (priv->mutex);
-
- done:
- if (id)
- xmlFree (id);
- if (parserCtxt)
- xmlFreeParserCtxt (parserCtxt);
-
- priv->process_running = FALSE;
- g_object_unref (dbprint);
-}
-
-#if 0
-/******************************************************************************/
-/** Walker ********************************************************************/
-
-static void
-dbprint_walk (YelpDbprint *dbprint)
-{
- static gint autoid = 0;
- gchar autoidstr[20];
- xmlChar *id = NULL;
- xmlChar *title = NULL;
- gchar *old_page_id = NULL;
- xmlNodePtr cur, old_cur;
- GtkTreeIter iter;
- GtkTreeIter *old_iter = NULL;
- YelpDbprintPriv *priv = dbprint->priv;
- YelpDocument *document = YELP_DOCUMENT (dbprint);
-
- debug_print (DB_FUNCTION, "entering\n");
- debug_print (DB_DEBUG, " priv->xmlcur->name: %s\n", priv->xmlcur->name);
-
- /* check for the yelp:chunk-depth or db.chunk.max_depth processing
- * instruction and set the max chunk depth accordingly.
- */
- if (priv->cur_depth == 0)
- for (cur = priv->xmlcur; cur; cur = cur->prev)
- if (cur->type == XML_PI_NODE)
- if (!xmlStrcmp (cur->name, (const xmlChar *) "yelp:chunk-depth") ||
- !xmlStrcmp (cur->name, (const xmlChar *) "db.chunk.max_depth")) {
- gint max = atoi ((gchar *) cur->content);
- if (max)
- priv->max_depth = max;
- break;
- }
-
- id = xmlGetProp (priv->xmlcur, BAD_CAST "id");
-
- if (dbprint_walk_chunkQ (dbprint)) {
- title = BAD_CAST dbprint_walk_get_title (dbprint);
-
- /* if id attribute is not present, autogenerate a
- * unique value, and insert it into the in-memory tree */
- if (!id) {
- g_snprintf (autoidstr, 20, "_auto-gen-id-%d", ++autoid);
- xmlNewProp (priv->xmlcur, BAD_CAST "id", BAD_CAST autoidstr);
- id = xmlGetProp (priv->xmlcur, BAD_CAST "id");
- }
-
- debug_print (DB_DEBUG, " id: \"%s\"\n", id);
- debug_print (DB_DEBUG, " title: \"%s\"\n", title);
-
- yelp_document_add_title (document, (gchar *) id, (gchar *) title);
-
-
- if (priv->cur_prev_id) {
- yelp_document_add_prev_id (document, (gchar *) id, priv->cur_prev_id);
- yelp_document_add_next_id (document, priv->cur_prev_id, (gchar *) id);
- g_free (priv->cur_prev_id);
- }
- priv->cur_prev_id = g_strdup ((gchar *) id);
-
- if (priv->cur_page_id)
- yelp_document_add_up_id (document, (gchar *) id, priv->cur_page_id);
- old_page_id = priv->cur_page_id;
- priv->cur_page_id = g_strdup ((gchar *) id);
-
- }
-
- old_cur = priv->xmlcur;
- priv->cur_depth++;
-
- if (id)
- yelp_document_add_page_id (document, (gchar *) id, priv->cur_page_id);
-
- for (cur = priv->xmlcur->children; cur; cur = cur->next) {
- if (cur->type == XML_ELEMENT_NODE) {
- priv->xmlcur = cur;
- dbprint_walk (dbprint);
- }
- }
- priv->cur_depth--;
- priv->xmlcur = old_cur;
-
- if (dbprint_walk_chunkQ (dbprint)) {
- priv->sections_iter = old_iter;
- g_free (priv->cur_page_id);
- priv->cur_page_id = old_page_id;
- }
-
- if (priv->cur_depth == 0) {
- g_free (priv->cur_prev_id);
- priv->cur_prev_id = NULL;
-
- g_free (priv->cur_page_id);
- priv->cur_page_id = NULL;
- }
-
- if (id != NULL)
- xmlFree (id);
- if (title != NULL)
- xmlFree (title);
-}
-
-static gboolean
-dbprint_walk_chunkQ (YelpDbprint *dbprint)
-{
- if (dbprint->priv->cur_depth <= dbprint->priv->max_depth
- && dbprint_walk_divisionQ (dbprint))
- return TRUE;
- else
- return FALSE;
-}
-
-static gboolean
-dbprint_walk_divisionQ (YelpDbprint *dbprint)
-{
- xmlNodePtr node = dbprint->priv->xmlcur;
- return (!xmlStrcmp (node->name, (const xmlChar *) "appendix") ||
- !xmlStrcmp (node->name, (const xmlChar *) "article") ||
- !xmlStrcmp (node->name, (const xmlChar *) "book") ||
- !xmlStrcmp (node->name, (const xmlChar *) "bibliography") ||
- !xmlStrcmp (node->name, (const xmlChar *) "chapter") ||
- !xmlStrcmp (node->name, (const xmlChar *) "colophon") ||
- !xmlStrcmp (node->name, (const xmlChar *) "glossary") ||
- !xmlStrcmp (node->name, (const xmlChar *) "index") ||
- !xmlStrcmp (node->name, (const xmlChar *) "part") ||
- !xmlStrcmp (node->name, (const xmlChar *) "preface") ||
- !xmlStrcmp (node->name, (const xmlChar *) "reference") ||
- !xmlStrcmp (node->name, (const xmlChar *) "refentry") ||
- !xmlStrcmp (node->name, (const xmlChar *) "refsect1") ||
- !xmlStrcmp (node->name, (const xmlChar *) "refsect2") ||
- !xmlStrcmp (node->name, (const xmlChar *) "refsect3") ||
- !xmlStrcmp (node->name, (const xmlChar *) "refsection") ||
- !xmlStrcmp (node->name, (const xmlChar *) "sect1") ||
- !xmlStrcmp (node->name, (const xmlChar *) "sect2") ||
- !xmlStrcmp (node->name, (const xmlChar *) "sect3") ||
- !xmlStrcmp (node->name, (const xmlChar *) "sect4") ||
- !xmlStrcmp (node->name, (const xmlChar *) "sect5") ||
- !xmlStrcmp (node->name, (const xmlChar *) "section") ||
- !xmlStrcmp (node->name, (const xmlChar *) "set") ||
- !xmlStrcmp (node->name, (const xmlChar *) "setindex") ||
- !xmlStrcmp (node->name, (const xmlChar *) "simplesect") );
-}
-
-static gchar *
-dbprint_walk_get_title (YelpDbprint *dbprint)
-{
- gchar *infoname = NULL;
- xmlNodePtr child = NULL;
- xmlNodePtr title = NULL;
- xmlNodePtr title_tmp = NULL;
- YelpDbprintPriv *priv = dbprint->priv;
-
- if (!xmlStrcmp (priv->xmlcur->name, BAD_CAST "refentry")) {
- /* The title for a refentry element can come from the following:
- * refmeta/refentrytitle
- * refentryinfo/title[abbrev]
- * refnamediv/refname
- * We take the first one we find.
- */
- for (child = priv->xmlcur->children; child; child = child->next) {
- if (!xmlStrcmp (child->name, BAD_CAST "refmeta")) {
- for (title = child->children; title; title = title->next) {
- if (!xmlStrcmp (title->name, BAD_CAST "refentrytitle"))
- break;
- }
- if (title)
- goto done;
- }
- else if (!xmlStrcmp (child->name, BAD_CAST "refentryinfo")) {
- for (title = child->children; title; title = title->next) {
- if (!xmlStrcmp (title->name, BAD_CAST "titleabbrev"))
- break;
- else if (!xmlStrcmp (title->name, BAD_CAST "title"))
- title_tmp = title;
- }
- if (title)
- goto done;
- else if (title_tmp) {
- title = title_tmp;
- goto done;
- }
- }
- else if (!xmlStrcmp (child->name, BAD_CAST "refnamediv")) {
- for (title = child->children; title; title = title->next) {
- if (!xmlStrcmp (title->name, BAD_CAST "refname"))
- break;
- else if (!xmlStrcmp (title->name, BAD_CAST "refpurpose")) {
- title = NULL;
- break;
- }
- }
- if (title)
- goto done;
- }
- else if (!xmlStrncmp (child->name, BAD_CAST "refsect", 7))
- break;
- }
- }
- else {
- /* The title for other elements appears in the following:
- * title[abbrev]
- * *info/title[abbrev]
- * blockinfo/title[abbrev]
- * objectinfo/title[abbrev]
- * We take them in that order.
- */
- xmlNodePtr infos[3] = {NULL, NULL, NULL};
- int i;
-
- infoname = g_strdup_printf ("%sinfo", priv->xmlcur->name);
-
- for (child = priv->xmlcur->children; child; child = child->next) {
- if (!xmlStrcmp (child->name, BAD_CAST "titleabbrev")) {
- title = child;
- goto done;
- }
- else if (!xmlStrcmp (child->name, BAD_CAST "title"))
- title_tmp = child;
- else if (!xmlStrcmp (child->name, BAD_CAST infoname))
- infos[0] = child;
- else if (!xmlStrcmp (child->name, BAD_CAST "blockinfo"))
- infos[1] = child;
- else if (!xmlStrcmp (child->name, BAD_CAST "objectinfo"))
- infos[2] = child;
- }
-
- if (title_tmp) {
- title = title_tmp;
- goto done;
- }
-
- for (i = 0; i < 3; i++) {
- child = infos[i];
- if (child) {
- for (title = child->children; title; title = title->next) {
- if (!xmlStrcmp (title->name, BAD_CAST "titleabbrev"))
- goto done;
- else if (!xmlStrcmp (title->name, BAD_CAST "title"))
- title_tmp = title;
- }
- if (title_tmp) {
- title = title_tmp;
- goto done;
- }
- }
- }
- }
-
- done:
- g_free (infoname);
-
- if (title)
- return (gchar *) xmlNodeGetContent (title);
- else
- return g_strdup (_("Unknown"));
-}
-#endif
diff --git a/src/yelp-db-print.h b/src/yelp-db-print.h
deleted file mode 100644
index c0ded190..00000000
--- a/src/yelp-db-print.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2003-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.
- *
- * Author: Shaun McCance <shaunm@gnome.org>
- * Author: Don Scorgie <Don@Scorgie.org>
- */
-
-#ifndef __YELP_DB_PRINT_H__
-#define __YELP_DB_PRINT_H__
-
-#include <glib-object.h>
-
-#include "yelp-document.h"
-
-#define YELP_TYPE_DBPRINT (yelp_dbprint_get_type ())
-#define YELP_DBPRINT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_DBPRINT, YelpDbprint))
-#define YELP_DBPRINT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_DBPRINT, YelpDbprintClass))
-#define YELP_IS_DBPRINT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_DBPRINT))
-#define YELP_IS_DBPRINT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_DBPRINT))
-#define YELP_DBPRINT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_DBPRINT, YelpDbprintClass))
-
-typedef struct _YelpDbprint YelpDbprint;
-typedef struct _YelpDbprintClass YelpDbprintClass;
-typedef struct _YelpDbprintPriv YelpDbprintPriv;
-
-struct _YelpDbprint {
- YelpDocument parent;
- YelpDbprintPriv *priv;
-};
-
-struct _YelpDbprintClass {
- YelpDocumentClass parent_class;
-};
-
-GType yelp_dbprint_get_type (void);
-YelpDocument * yelp_dbprint_new (gchar *uri);
-
-#endif /* __YELP_DB_PRINT_H__ */
diff --git a/src/yelp-marshal-main.c b/src/yelp-marshal-main.c
deleted file mode 100644
index 594ab6f3..00000000
--- a/src/yelp-marshal-main.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "yelp-marshal.h"
-#include "yelp-marshal.c"
diff --git a/src/yelp-page.c b/src/yelp-page.c
deleted file mode 100644
index c0ad894e..00000000
--- a/src/yelp-page.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2006 Brent Smith <gnome@nextreality.net>
- * 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.
- *
- * Authors: Brent Smith <gnome@nextreality.net>
- * Shaun McCance <shaunm@gnome.org>
- */
-
-#include <glib.h>
-#include <string.h>
-
-#include "yelp-page.h"
-
-static GIOStatus page_read_string (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error);
-static GIOStatus page_read_file (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error);
-
-YelpPage *
-yelp_page_new_string (YelpDocument *document,
- gchar *id,
- const gchar *content,
- YelpPageMime mime)
-{
- YelpPage *page;
-
- page = g_slice_new0 (YelpPage);
-
- page->mime = mime;
-
- if (document)
- page->document = g_object_ref (document);
- page->source = YELP_PAGE_SOURCE_STRING;
- page->id = g_strdup (id);
-
- page->content = (gchar *) content;
- page->content_len = strlen (content);
-
- return page;
-}
-
-gsize
-yelp_page_get_length (YelpPage *page)
-{
- g_return_val_if_fail (page != NULL, 0);
-
- return page->content_len;
-}
-
-GIOStatus
-yelp_page_read (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error)
-{
- /* FIXME: set error */
- g_return_val_if_fail (page != NULL, G_IO_STATUS_ERROR);
-
- if (page->source == YELP_PAGE_SOURCE_STRING)
- return page_read_string (page, buffer, count, bytes_read, error);
- else
- return page_read_file (page, buffer, count, bytes_read, error);
-}
-
-static GIOStatus
-page_read_string (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error)
-{
- gint real_count = 0;
- g_return_val_if_fail (page != NULL, G_IO_STATUS_ERROR);
-
- if (count < 0) {
- real_count = (page->content_len - page->content_offset) + 1;
- } else {
- real_count = count;
- }
-
-
- if (page->content_offset == page->content_len) {
- /* FIXME: set the error */
- return G_IO_STATUS_EOF;
- }
- else if (page->content_offset > page->content_len) {
- /* FIXME: set the error */
- return G_IO_STATUS_ERROR;
- }
- else if (page->content_offset + real_count <= page->content_len) {
- strncpy (buffer, page->content + page->content_offset, count);
- page->content_offset += count;
- *bytes_read = count;
- return G_IO_STATUS_NORMAL;
- }
- else {
- strcpy (buffer, page->content + page->content_offset);
- *bytes_read = strlen (buffer);
- page->content_offset += *bytes_read;
- return G_IO_STATUS_NORMAL;
- }
-}
-
-static GIOStatus
-page_read_file (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error)
-{
- g_return_val_if_fail (page != NULL, G_IO_STATUS_ERROR);
- /* FIXME: just use yelp-io-channel? */
- return G_IO_STATUS_ERROR;
-}
-
-void
-yelp_page_free (YelpPage *page)
-{
- g_return_if_fail (page != NULL);
-
- if (page->document) {
- yelp_document_release_page (page->document, page);
- g_object_unref (page->document);
- }
-
- if (page->title)
- g_free (page->title);
-
- if (page->id)
- g_free (page->id);
- if (page->prev_id)
- g_free (page->prev_id);
- if (page->next_id)
- g_free (page->next_id);
- if (page->up_id)
- g_free (page->up_id);
- if (page->root_id)
- g_free (page->root_id);
-
- g_slice_free (YelpPage, page);
-}
diff --git a/src/yelp-page.h b/src/yelp-page.h
deleted file mode 100644
index 30a45bf7..00000000
--- a/src/yelp-page.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2006 Brent Smith <gnome@nextreality.net>
- * 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.
- *
- * Authors: Brent Smith <gnome@nextreality.net>
- * Shaun McCance <shaunm@gnome.org>
- */
-
-#ifndef __YELP_PAGE_H__
-#define __YELP_PAGE_H__
-
-#include <glib.h>
-
-#include "yelp-error.h"
-
-G_BEGIN_DECLS
-
-typedef enum {
- YELP_PAGE_MIME_HTML,
- YELP_PAGE_MIME_XHTML
-} YelpPageMime;
-
-typedef enum {
- YELP_PAGE_SOURCE_STRING,
- YELP_PAGE_SOURCE_FILE
-} YelpPageSource;
-
-typedef struct _YelpPage YelpPage;
-
-/* This needs to be right here to compile. */
-#include "yelp-document.h"
-
-struct _YelpPage {
- YelpDocument *document;
- YelpPageSource source;
- YelpPageMime mime;
-
- gchar *title;
-
- /* Do not free content. The string is owned by the YelpDocument,
- * and it does some internal reference counting to make sure it's
- * only reed when it's no longer referenced. These strings are
- * just too big to strdup all over the place.
- */
- gchar *content;
- gsize content_len;
- gsize content_offset;
-
- gchar *id;
- gchar *prev_id;
- gchar *next_id;
- gchar *up_id;
- gchar *root_id;
-};
-
-YelpPage * yelp_page_new_string (YelpDocument *document,
- gchar *id,
- const gchar *content,
- YelpPageMime mime);
-
-GIOStatus yelp_page_read (YelpPage *page,
- gchar *buffer,
- gsize count,
- gsize *bytes_read,
- YelpError **error);
-gsize yelp_page_get_length (YelpPage *page);
-
-void yelp_page_free (YelpPage *page);
-
-G_END_DECLS
-
-#endif
diff --git a/src/yelp-print.c b/src/yelp-print.c
deleted file mode 100644
index 8abf35a6..00000000
--- a/src/yelp-print.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2002 Jorn Baayen
- * Copyright (C) 2003, 2004 Christian Persch
- * Copyright (C) 2005 Juerg Billeter
- * Copyright (C) 2005 Don Scorgie <Don@Scorgie.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.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <unistd.h>
-#include <sys/stat.h>
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <string.h>
-#include "yelp-print.h"
-#include "yelp-html.h"
-#include "yelp-utils.h"
-#include <gtk/gtkprintunixdialog.h>
-
-static GtkPrintSettings * yelp_print_load_config_from_file ( void );
-static void yelp_print_save_config_to_file (GtkPrintSettings *config);
-static void cancel_print_cb (GtkDialog *dialog,
- gint arg1,
- YelpPrintInfo *info);
-static void parent_destroyed_cb (GtkWindow *window,
- YelpPrintInfo *info);
-static gboolean print_jobs_run ( void );
-void print_present_config_dialog (YelpPrintInfo *info);
-static YelpPrintInfo * yelp_print_get_print_info ( void );
-void yelp_print_info_free (YelpPrintInfo *info);
-gboolean yelp_print_verify_postscript (GtkPrinter *printer,
- GtkWidget *print_dialog);
-void yelp_print_present_status_dialog (YelpWindow *window,
- YelpPrintInfo *info);
-gboolean yelp_print_preview (YelpPrintInfo *info);
-
-gboolean print_preview_finished_cb (GtkWindow *win,
- GdkEvent *ev,
- YelpPrintInfo *info);
-void preview_go_first (GtkToolButton *b,
- YelpPrintInfo *info);
-void preview_go_back (GtkToolButton *b,
- YelpPrintInfo *info);
-void preview_go_forward (GtkToolButton *b,
- YelpPrintInfo *info);
-void preview_go_last (GtkToolButton *b,
- YelpPrintInfo *info);
-void preview_close (GtkToolButton *b,
- YelpPrintInfo *info);
-gboolean print_free_idle_cb (YelpPrintInfo *info);
-void yelp_finish_printing (GtkPrintJob *job,
- YelpPrintInfo *info,
- GError *error);
-
-static GSList * current_jobs = NULL;
-
-static gboolean currently_running = FALSE;
-
-void
-yelp_print_run (YelpWindow *window, gpointer html, gpointer fake_win,
- gpointer content_box)
-{
- YelpPrintInfo *info;
-
- info = yelp_print_get_print_info ();
- info->owner = window;
- info->html_frame = html;
- info->fake_win = fake_win;
- info->content_box = content_box;
- info->previewed = FALSE;
-
- print_present_config_dialog (info);
-
-}
-
-void
-print_present_config_dialog (YelpPrintInfo *info)
-{
- int ret;
-
- if (!info->print_dialog) {
- info->print_dialog = gtk_print_unix_dialog_new (_("Print"),
- GTK_WINDOW (info->owner));
- gtk_print_unix_dialog_set_settings (
- GTK_PRINT_UNIX_DIALOG (info->print_dialog),
- info->config);
- gtk_print_unix_dialog_set_page_setup (
- GTK_PRINT_UNIX_DIALOG (info->print_dialog),
- info->setup);
- gtk_print_unix_dialog_set_manual_capabilities (
- GTK_PRINT_UNIX_DIALOG (info->print_dialog),
- GTK_PRINT_CAPABILITY_PAGE_SET |
- GTK_PRINT_CAPABILITY_COPIES |
- GTK_PRINT_CAPABILITY_COLLATE |
- GTK_PRINT_CAPABILITY_REVERSE |
- GTK_PRINT_CAPABILITY_SCALE |
- GTK_PRINT_CAPABILITY_GENERATE_PS |
- GTK_PRINT_CAPABILITY_PREVIEW);
- }
- while (1) {
-
- ret = gtk_dialog_run (GTK_DIALOG (info->print_dialog));
- info->config =
- gtk_print_unix_dialog_get_settings (
- GTK_PRINT_UNIX_DIALOG (info->print_dialog));
- info->setup =
- gtk_print_unix_dialog_get_page_setup (GTK_PRINT_UNIX_DIALOG
- (info->print_dialog));
- info->printer =
- gtk_print_unix_dialog_get_selected_printer (GTK_PRINT_UNIX_DIALOG
- (info->print_dialog));
- g_object_ref (info->printer);
- if (ret != GTK_RESPONSE_OK)
- break;
- if (yelp_print_verify_postscript (info->printer, info->print_dialog))
- break;
-
- }
-
- gtk_widget_hide (info->print_dialog);
- if (ret == GTK_RESPONSE_APPLY) {
- g_idle_add ((GSourceFunc) yelp_print_preview, info);
- return;
- }
- if (ret != GTK_RESPONSE_OK) {
- yelp_print_info_free (info);
- return;
- }
- yelp_print_save_config_to_file (info->config);
- yelp_print_present_status_dialog (info->owner, info);
- info->cancel_print_id = g_signal_connect (info->owner, "destroy",
- G_CALLBACK (parent_destroyed_cb),
- info);
-
-
- current_jobs = g_slist_append (current_jobs, info);
-
- if (!currently_running) {
- g_idle_add ((GSourceFunc) print_jobs_run,
- NULL);
- currently_running = TRUE;
- }
-
-}
-
-static gboolean
-print_jobs_run ()
-{
- YelpPrintInfo * info = current_jobs->data;
- info->started = TRUE;
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (info->dialog),
- _("Preparing to print"));
-
- yelp_html_print (info->html_frame, info, FALSE, NULL);
-
- return FALSE;
-}
-
-static GtkPrintSettings *
-yelp_print_load_config_from_file ()
-{
- GtkPrintSettings *settings;
-
- settings = gtk_print_settings_new ();
-
- /* TODO: Load settings from a file somehow */
- return settings;
-}
-
-static void
-yelp_print_save_config_to_file (GtkPrintSettings *config)
-{
- /* TODO: Save settings to a file somehow */
- return;
-}
-
-void
-yelp_print_info_free (YelpPrintInfo *info)
-{
- if (info) {
- g_object_unref (info->config);
- g_object_unref (info->setup);
- g_object_unref (info->printer);
- gtk_widget_destroy (info->print_dialog);
- if (info->tempfile) {
- g_unlink (info->tempfile);
- g_free (info->tempfile);
- }
-
- g_free (info->header_left_string);
- g_free (info->header_center_string);
- g_free (info->header_right_string);
- g_free (info->footer_left_string);
- g_free (info->footer_center_string);
- g_free (info->footer_right_string);
- if (info->dialog != NULL) {
- gtk_widget_destroy (info->progress);
- gtk_widget_destroy (info->dialog);
- }
- if (info->fake_win)
- gtk_widget_destroy (info->fake_win);
- if (info->cancel_print_id) {
- g_signal_handler_disconnect (info->owner, info->cancel_print_id);
- }
- g_free (info);
- }
-
-}
-
-YelpPrintInfo *
-yelp_print_get_print_info ()
-{
- YelpPrintInfo *info;
-
- info = g_new0 (YelpPrintInfo, 1);
-
- info->config = yelp_print_load_config_from_file ();
-
- info->setup = gtk_page_setup_new ();
-
- info->cancelled = FALSE;
- info->moz_finished = FALSE;
-
- info->dialog = NULL;
- info->print_dialog = NULL;
-
- info->header_left_string = g_strdup ("&T");
- info->header_center_string = g_strdup ("");
- info->header_right_string = g_strdup ("");
- info->footer_left_string = g_strdup ("");
- info->footer_center_string = g_strdup ("&PT");
- info->footer_right_string = g_strdup ("");
-
- return info;
-}
-
-gboolean
-yelp_print_verify_postscript (GtkPrinter *printer, GtkWidget *print_dialog)
-{
- if (!gtk_printer_accepts_ps (printer)) {
- GtkDialog *dialog;
- dialog = (GtkDialog *) gtk_message_dialog_new ( GTK_WINDOW (print_dialog),
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Printing is not supported on this"
- " printer"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Printer %s does not"
- " support postscript "
- "printing."),
- gtk_printer_get_description (printer));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- return FALSE;
- }
-
- return TRUE;
-}
-
-static gboolean
-print_idle_cb (YelpPrintInfo *info)
-{
- GtkPrintJob *job;
-
- if (g_file_test (info->tempfile, G_FILE_TEST_EXISTS) == FALSE)
- return FALSE;
- job = gtk_print_job_new (gtk_window_get_title (GTK_WINDOW (info->owner)),
- info->printer,
- info->config, info->setup);
- gtk_print_job_set_source_file (job, info->tempfile, NULL);
- gtk_print_job_send (job, (GtkPrintJobCompleteFunc) yelp_finish_printing,
- info, NULL);
-
- return FALSE;
-
-}
-
-static void
-parent_destroyed_cb (GtkWindow *window, YelpPrintInfo *info)
-{
- current_jobs = g_slist_remove (current_jobs, info);
- if (info->started) {
- info->cancelled = TRUE;
- if (info->moz_finished) {
- if (info->print_idle_id)
- g_source_remove (info->print_idle_id);
- yelp_print_info_free (info);
- }
- } else {
- yelp_print_info_free (info);
- }
-}
-
-static void
-cancel_print_cb (GtkDialog *dialog, gint arg1, YelpPrintInfo *info)
-{
- gtk_widget_hide (info->dialog);
- if (info->started) {
- info->cancelled = TRUE;
- if (info->moz_finished) {
- if (info->print_idle_id)
- g_source_remove (info->print_idle_id);
- yelp_print_info_free (info);
- }
- } else {
- current_jobs = g_slist_remove (current_jobs, info);
- yelp_print_info_free (info);
- }
-}
-
-void
-yelp_print_moz_finished (YelpPrintInfo *info)
-{
- info->moz_finished = TRUE;
-
- current_jobs = g_slist_remove (current_jobs, info);
-
- if (!info->cancelled) {
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (info->dialog),
- _("Printing"));
-
- info->print_idle_id = g_idle_add ((GSourceFunc) print_idle_cb,
- info);
-
- } else {
- if (g_slist_length (current_jobs) == 0) {
- currently_running = FALSE;
- } else {
- g_idle_add ((GSourceFunc) print_jobs_run,
- NULL);
- }
- g_idle_add ((GSourceFunc) print_free_idle_cb, info);
- }
-
-}
-
-void
-yelp_print_present_status_dialog (YelpWindow *window, YelpPrintInfo *info)
-{
- if (info->dialog != NULL)
- return;
-
- info->dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_CANCEL,
- "%s", _("Printing"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (info->dialog),
- _("Waiting to print"));
- info->progress = gtk_progress_bar_new ();
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG(info->dialog)->vbox),
- info->progress);
-
- gtk_widget_show (info->progress);
-
- g_signal_connect (info->dialog, "response",
- G_CALLBACK (cancel_print_cb),
- (gpointer) info);
-
- gtk_window_present (GTK_WINDOW (info->dialog));
-}
-
-void
-yelp_print_cancel (YelpPrintInfo *info)
-{
- cancel_print_cb (NULL, 0, info);
-}
-
-void
-yelp_print_update_progress (YelpPrintInfo *info, gdouble percentage)
-{
- /* This is horribly inefficient, but since we're waiting for
- * mozilla to do its thing, might as well waste a few cycles
- */
- YelpPrintInfo * temp;
- GSList *jobs = current_jobs;
- while (g_slist_length (jobs) != 0) {
- temp = jobs->data;
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (temp->progress));
- jobs = g_slist_next(jobs);
- }
- jobs = g_slist_find (current_jobs, info);
- temp = jobs->data;
- if (percentage > 1.0)
- percentage = 1.0;
- else if (percentage <0.0)
- percentage = 0.0;
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (temp->progress),
- percentage);
-
-}
-
-gboolean
-yelp_print_preview (YelpPrintInfo *info)
-{
- gint width, height;
- /* Add some funky nav widgets to the fake_win since we're gonna
- * have to actually show it now :(
- */
- if (!info->previewed) {
- GtkWidget *box;
- info->previewed = TRUE;
- box = gtk_toolbar_new ();
-
- gtk_box_pack_start (GTK_BOX (info->content_box), box, FALSE, FALSE, 0);
- info->GoFirst = GTK_WIDGET (gtk_tool_button_new_from_stock (GTK_STOCK_GOTO_FIRST));
- gtk_container_add (GTK_CONTAINER (box), info->GoFirst);
- g_signal_connect (info->GoFirst, "clicked",
- G_CALLBACK (preview_go_first),
- info);
- gtk_widget_show (info->GoFirst);
-
- info->GoBack = GTK_WIDGET (gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK));
- gtk_container_add (GTK_CONTAINER (box), info->GoBack);
- g_signal_connect (info->GoBack, "clicked",
- G_CALLBACK (preview_go_back),
- info);
- gtk_widget_show (info->GoBack);
-
- info->GoForward = GTK_WIDGET (gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD));
- gtk_container_add (GTK_CONTAINER (box), info->GoForward);
- g_signal_connect (info->GoForward, "clicked",
- G_CALLBACK (preview_go_forward),
- info);
- gtk_widget_show (info->GoForward);
-
- info->GoLast = GTK_WIDGET (gtk_tool_button_new_from_stock (GTK_STOCK_GOTO_LAST));
- gtk_container_add (GTK_CONTAINER (box), info->GoLast);
- g_signal_connect (info->GoLast, "clicked",
- G_CALLBACK (preview_go_last),
- info);
- gtk_widget_show (info->GoLast);
-
- info->Close = GTK_WIDGET (gtk_tool_button_new_from_stock (GTK_STOCK_CLOSE));
- gtk_container_add (GTK_CONTAINER (box), info->Close);
- g_signal_connect (info->Close, "clicked",
- G_CALLBACK (preview_close),
- info);
- gtk_widget_show (info->Close);
-
- gtk_widget_show (box);
- }
- gtk_window_set_modal (GTK_WINDOW (info->fake_win), TRUE);
- gtk_widget_set_sensitive (info->GoFirst, FALSE);
- gtk_widget_set_sensitive (info->GoBack, FALSE);
- info->currentpage = 1;
- yelp_html_print (info->html_frame, info, TRUE, &(info->npages));
-
- if (info->npages == 1) { /*Desensitise all buttons */
- gtk_widget_set_sensitive (info->GoForward, FALSE);
- gtk_widget_set_sensitive (info->GoLast, FALSE);
- }
- g_signal_connect (info->fake_win, "delete-event",
- G_CALLBACK (print_preview_finished_cb),
- info);
-
- /* Set the preview window to the same size as the real window */
- gtk_window_get_size (GTK_WINDOW (info->owner), &width, &height);
- gtk_window_resize (GTK_WINDOW (info->fake_win), width, height);
-
- gtk_container_set_focus_child (GTK_CONTAINER (info->fake_win),
- GTK_WIDGET (info->html_frame));
-
- gtk_widget_show (GTK_WIDGET (info->fake_win));
-
- return FALSE;
-}
-
-gboolean
-print_preview_finished_cb (GtkWindow *win, GdkEvent *ev, YelpPrintInfo *info)
-{
- gtk_widget_hide (GTK_WIDGET (info->fake_win));
- yelp_html_preview_end (info->html_frame);
- print_present_config_dialog (info);
- return TRUE;
-}
-
-void
-preview_go_first (GtkToolButton *b, YelpPrintInfo *info)
-{
- info->currentpage = 1;
- yelp_html_preview_navigate (info->html_frame, info->currentpage);
-
- /* Reset sensitives */
- gtk_widget_set_sensitive (info->GoBack, FALSE);
- gtk_widget_set_sensitive (info->GoFirst, FALSE);
- gtk_widget_set_sensitive (info->GoForward, TRUE);
- gtk_widget_set_sensitive (info->GoLast, TRUE);
-}
-
-void
-preview_go_back (GtkToolButton *b, YelpPrintInfo *info)
-{
- info->currentpage--;
- yelp_html_preview_navigate (info->html_frame, info->currentpage);
-
- /* Reset sensitives */
- gtk_widget_set_sensitive (info->GoForward, TRUE);
- gtk_widget_set_sensitive (info->GoLast, TRUE);
-
- if (info->currentpage == 1) {
- gtk_widget_set_sensitive (info->GoBack, FALSE);
- gtk_widget_set_sensitive (info->GoFirst, FALSE);
- }
-}
-
-void
-preview_go_forward (GtkToolButton *b, YelpPrintInfo *info)
-{
- info->currentpage++;
- yelp_html_preview_navigate (info->html_frame, info->currentpage);
- /* Reset sensitives */
- gtk_widget_set_sensitive (info->GoBack, TRUE);
- gtk_widget_set_sensitive (info->GoFirst, TRUE);
-
- if (info->currentpage == info->npages) {
- gtk_widget_set_sensitive (info->GoForward, FALSE);
- gtk_widget_set_sensitive (info->GoLast, FALSE);
- }
-}
-
-void
-preview_go_last (GtkToolButton *b, YelpPrintInfo *info)
-{
- info->currentpage=info->npages;
- yelp_html_preview_navigate (info->html_frame, info->currentpage);
-
- /* Reset sensitives */
- gtk_widget_set_sensitive (info->GoBack, TRUE);
- gtk_widget_set_sensitive (info->GoFirst, TRUE);
- gtk_widget_set_sensitive (info->GoForward, FALSE);
- gtk_widget_set_sensitive (info->GoLast, FALSE);
-
-}
-
-void
-preview_close (GtkToolButton *b, YelpPrintInfo *info)
-{
- print_preview_finished_cb (NULL, NULL, info);
-}
-
-gboolean
-print_free_idle_cb (YelpPrintInfo *info)
-{
- yelp_print_info_free (info);
- return FALSE;
-}
-
-void
-yelp_finish_printing (GtkPrintJob *job, YelpPrintInfo *info, GError *error)
-{
- if (error) {
- /*There was an error printing. Panic.*/
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL,
- GTK_DIALOG_MODAL |
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- _("An error "
- "occurred while printing")
- );
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("It was not possible to "
- "print your document: %s"),
- error->message);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_hide (dialog);
- gtk_widget_destroy (dialog);
- }
-
- yelp_print_info_free (info);
-
- if (g_slist_length (current_jobs) > 0)
- g_idle_add ((GSourceFunc) print_jobs_run, NULL);
- else
- currently_running = FALSE;
-
-}
diff --git a/src/yelp-print.h b/src/yelp-print.h
deleted file mode 100644
index c85848c0..00000000
--- a/src/yelp-print.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2005 Don Scorgie <Don@Scorgie.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 <Don@Scorgie.org>
- */
-
-#ifndef YELP_PRINT_H
-#define YELP_PRINT_H
-
-#include <glib.h>
-
-/* Needed to fill the struct */
-#include <gtk/gtkprinter.h>
-#include <gtk/gtk.h>
-
-#include "yelp-window.h"
-
-G_BEGIN_DECLS
-
-
-typedef struct _YelpPrintInfo
-{
- GtkPrintSettings *config;
- GtkPageSetup *setup;
- GtkPrinter *printer;
- GtkWidget *print_dialog;
-
- char *tempfile;
- guint print_idle_id;
- guint cancel_print_id;
-
- gboolean cancelled;
- gboolean moz_finished;
- gboolean started;
- gboolean previewed;
-
- char *header_left_string;
- char *header_center_string;
- char *header_right_string;
- char *footer_left_string;
- char *footer_center_string;
- char *footer_right_string;
- YelpWindow *owner;
- GtkWidget *dialog;
- gpointer html_frame;
- GtkWidget *progress;
- GtkWidget *fake_win;
- GtkWidget *content_box;
-
- /* Preview buttons */
- GtkWidget *GoBack;
- GtkWidget *GoForward;
- GtkWidget *GoFirst;
- GtkWidget *GoLast;
- GtkWidget *Close;
- gint npages;
- gint currentpage;
-
-
-} YelpPrintInfo;
-
-void yelp_print_run (YelpWindow *window,
- gpointer html,
- gpointer fake_win,
- gpointer content_box);
-void yelp_print_moz_finished (YelpPrintInfo *info);
-void yelp_print_cancel (YelpPrintInfo *info);
-void yelp_print_info_free (YelpPrintInfo *info);
-void yelp_print_update_progress (YelpPrintInfo *info,
- gdouble percentage);
-G_END_DECLS
-
-#endif
diff --git a/src/yelp-search-parser.c b/src/yelp-search-parser.c
deleted file mode 100644
index 8844b44e..00000000
--- a/src/yelp-search-parser.c
+++ /dev/null
@@ -1,1529 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2007 Don Scorgie <Don@Scorgie.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 <Don@Scorgie.org>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlreader.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/tree.h>
-#include <libxslt/xslt.h>
-#include <libxslt/templates.h>
-#include <libxslt/transform.h>
-#include <libxslt/extensions.h>
-#include <libxslt/xsltInternals.h>
-#include <libxslt/xsltutils.h>
-#define I_KNOW_RARIAN_0_8_IS_UNSTABLE
-#include <rarian.h>
-
-#ifdef ENABLE_BEAGLE
-#include <beagle/beagle.h>
-#endif /* ENABLE_BEAGLE */
-
-#include "yelp-error.h"
-#include "yelp-settings.h"
-#include "yelp-search-parser.h"
-#include "yelp-utils.h"
-#include "yelp-debug.h"
-
-#define DESKTOP_ENTRY_GROUP "Desktop Entry"
-#define KDE_DESKTOP_ENTRY_GROUP "KDE Desktop Entry"
-
-#define YELP_NAMESPACE "http://www.gnome.org/yelp/ns"
-
-typedef gboolean (*ProcessFunction) (YelpSearchParser *parser);
-
-typedef struct _SearchContainer SearchContainer;
-
-#define ONLINE_URL "http://api.gnome.org/yelp/forums?query=%s"
-
-#define ONLINE_NAME N_("the GNOME Support Forums")
-
-enum {
- NOT_SEARCHING = 0,
- SEARCH_1,
- SEARCH_CHILD,
- SEARCH_DOC = 99
-};
-
-struct _SearchContainer {
- gchar * current_subsection;
- gchar * result_subsection;
- gchar * doc_title;
- gchar * base_path;
- gchar * base_filename;
- gchar * snippet;
- GSList * components;
- GHashTable *entities;
- gchar ** search_term;
- gint required_words;
- gint * dup_of;
- gboolean * found_terms;
- gboolean * stop_word;
- gfloat * score_per_word;
- gchar * top_element;
- gint search_status;
- gchar * elem_type;
- GSList * elem_stack;
- gfloat score;
- gfloat snippet_score;
- gboolean html;
- gchar * sect_name;
- gboolean grab_text;
- gchar * default_snippet;
-};
-
-typedef struct {
- YelpSearchParser *parser;
- gint required_no;
- gint terms_number;
- gboolean *stop_list;
- gint *dup_list;
- gchar **terms_list;
- SearchContainer *container;
-} SearchDocData;
-
-
-struct _YelpSearchParser {
- gchar *search_terms;
- xmlDocPtr search_doc;
- xmlNodePtr root;
-
- GPtrArray *hits;
- int snippet_request_count;
- GSList * pending_searches;
-
- guint search_process_id;
- guint slow_search_setup_process_id;
- guint slow_search_process_id;
-
- gboolean finished;
-
-};
-
-
-static gboolean search_parser_process_idle (YelpSearchParser *parser);
-
-static void s_startElement (void *data,
- const xmlChar *name,
- const xmlChar **attrs);
-static void s_endElement (void *data,
- const xmlChar *name);
-static void s_characters (void *data,
- const xmlChar *ch,
- int len);
-static void s_declEntity (void *data,
- const xmlChar *name,
- int type,
- const xmlChar *pID,
- const xmlChar *sID,
- xmlChar *content);
-static xmlEntityPtr s_getEntity (void *data,
- const xmlChar *name);
-static gboolean slow_search_setup (YelpSearchParser *parser);
-static gboolean slow_search_process (RrnReg *reg,
- SearchDocData *data);
-static void search_parse_result (YelpSearchParser *parser,
- SearchContainer *c);
-static gchar * search_clean_snippet (gchar *snippet,
- gchar **terms);
-static void search_process_man (YelpSearchParser *parser,
- gchar **terms);
-static void search_process_info (YelpSearchParser *parser,
- gchar **terms);
-static void process_man_result (YelpSearchParser *parser,
- gchar *result,
- gchar **terms);
-void process_info_result (YelpSearchParser *parser,
- gchar *result,
- gchar **terms);
-gchar * string_append (gchar *current,
- gchar *new,
- gchar *suffix);
-static void search_free_container (SearchContainer *c);
-
-
-#ifdef ENABLE_BEAGLE
-static BeagleClient *beagle_client;
-#endif /* ENABLE_BEAGLE */
-static char const * const * langs;
-
-YelpSearchParser *
-yelp_search_parser_new (void)
-{
- YelpSearchParser *parser = g_new0 (YelpSearchParser, 1);
-
- return parser;
-}
-
-void
-yelp_search_parser_free (YelpSearchParser *parser)
-{
- g_free (parser);
-}
-
-static gboolean
-check_hex (char check)
-{
- if (check >= '0' && check <= '9')
- return TRUE;
- if (check >= 'a' && check <= 'f')
- return TRUE;
- if (check >= 'A' && check <= 'F')
- return TRUE;
- return FALSE;
-}
-
-static int
-conv_hex (char conv)
-{
- if (conv >= '0' && conv <= '9')
- return conv - '0';
- if (conv >= 'a' && conv <= 'f')
- return conv - 'a' + 10;
- if (conv >= 'A' && conv <= 'F')
- return conv - 'A' + 10;
- return 0;
-}
-
-static char *
-decode_uri (const char *uri)
-{
- char *decoded = g_strdup (uri);
- char *iterator;
-
- for (iterator = decoded; *iterator; iterator ++) {
- if (*iterator == '%' && check_hex (iterator[1]) && check_hex(iterator[2])) {
- *iterator = conv_hex (iterator[1]) * 16 + conv_hex (iterator[2]);
- memmove (iterator + 1, iterator + 3, strlen (iterator + 3));
- }
- }
-
- return decoded;
-}
-
-xmlDocPtr
-yelp_search_parser_process (YelpSearchParser *parser, gchar *search_terms)
-{
- debug_print (DB_FUNCTION, "entering\n");
-
- langs = g_get_language_names ();
-
- parser->search_terms = decode_uri (search_terms);
-
-#ifdef ENABLE_BEAGLE
- if (beagle_util_daemon_is_running()) {
- beagle_client = beagle_client_new (NULL);
- debug_print (DB_DEBUG, "client: %p\n", beagle_client);
- } else {
- beagle_client = NULL;
- }
-#endif /* ENABLE_BEAGLE */
-
- parser->search_process_id =
- g_idle_add_full (G_PRIORITY_LOW,
- (GSourceFunc) search_parser_process_idle,
- parser, NULL);
-
- while (!parser->finished)
- g_thread_yield ();
- return parser->search_doc;
-}
-
-/******************************************************************************/
-static void
-check_finished (YelpSearchParser *parser)
-{
- gchar *tmp;
- gchar **split;
- xmlNodePtr online = NULL;
- gchar *check;
- gchar *title;
- gchar *text = NULL;
- xmlXPathContextPtr results_xpath_ctx = NULL;
- xmlXPathObjectPtr results_xpath = NULL;
- gint number_of_results = 0;
-
- results_xpath_ctx = xmlXPathNewContext(parser->search_doc);
- results_xpath = xmlXPathEvalExpression(BAD_CAST "/search/result", results_xpath_ctx);
- if (results_xpath && results_xpath->nodesetval && results_xpath->nodesetval->nodeNr) {
- number_of_results = results_xpath->nodesetval->nodeNr;
- } else {
- number_of_results = 0;
- }
- xmlXPathFreeObject(results_xpath);
- xmlXPathFreeContext(results_xpath_ctx);
-
- if (number_of_results == 0) {
- title = g_strdup_printf( _("No results for \"%s\""), parser->search_terms);
- text = g_strdup(_("Try using different words to describe the problem "
- "you're having or the topic you want help with."));
- } else {
- title = g_strdup_printf( _("Search results for \"%s\""), parser->search_terms);
- }
- xmlNewTextChild (parser->root, NULL, BAD_CAST "title", BAD_CAST title);
-
- if (text) {
- xmlNewTextChild (parser->root, NULL, BAD_CAST "text", BAD_CAST text);
- g_free(text);
- }
-
- /* 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
- */
- tmp = g_strdup (_("Repeat the search online at %s"));
- split = g_strsplit (tmp, "%s", 2);
- check = g_strdup_printf (ONLINE_URL, parser->search_terms);
-
- online = xmlNewTextChild (parser->root, NULL, BAD_CAST "online", BAD_CAST split[0]);
- g_free (tmp);
- xmlNewProp (online, BAD_CAST "name",
- BAD_CAST ONLINE_NAME);
- xmlNewProp (online, BAD_CAST "href",
- BAD_CAST check);
- g_free (check);
- xmlNewTextChild (parser->root, NULL, BAD_CAST "online1", BAD_CAST split[1]);
-
- if (parser->snippet_request_count == 0)
- parser->finished = TRUE;
-
-}
-
-#ifdef ENABLE_BEAGLE
-typedef struct
-{
- YelpSearchParser *parser;
- xmlNode *node;
-} SnippetLocation;
-
-static void snippet_closed (BeagleSnippetRequest *request,
- SnippetLocation *snippet_location);
-static void snippet_response (BeagleSnippetRequest *request,
- BeagleSnippetResponse *response,
- SnippetLocation *snippet_location);
-static void snippet_error (BeagleSnippetRequest *request,
- GError *error,
- SnippetLocation *snippet_location);
-
-static void
-snippet_closed (BeagleSnippetRequest *request, SnippetLocation *snippet_location)
-{
- YelpSearchParser *parser = snippet_location->parser;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- parser->snippet_request_count --;
- check_finished (parser);
-
- g_signal_handlers_disconnect_by_func (request,
- G_CALLBACK (snippet_response),
- snippet_location);
- g_signal_handlers_disconnect_by_func (request,
- G_CALLBACK (snippet_error),
- snippet_location);
- g_signal_handlers_disconnect_by_func (request,
- G_CALLBACK (snippet_closed),
- snippet_location);
-
- g_free (snippet_location);
- g_object_unref (request);
-}
-
-static void
-snippet_response (BeagleSnippetRequest *request, BeagleSnippetResponse *response, SnippetLocation *snippet_location)
-{
- xmlDoc *snippet_doc;
- xmlNode *node;
- char *xmldoc;
-
- const char *xml = beagle_snippet_response_get_snippet (response);
-
- if (xml == NULL || strlen (xml) == 0) {
- debug_print (DB_DEBUG, "snippet_response empty\n");
- return;
- }
- debug_print (DB_DEBUG, "snippet_response: %s\n", xml);
-
- xmldoc = g_strdup_printf ("<snippet>%s</snippet>", xml);
- snippet_doc = xmlParseDoc (BAD_CAST xmldoc);
- g_free (xmldoc);
- if (!snippet_doc)
- return;
- node = xmlDocGetRootElement (snippet_doc);
- xmlUnlinkNode (node);
- xmlAddChild (snippet_location->node, node);
- xmlFreeDoc (snippet_doc);
-}
-
-static void
-snippet_error (BeagleSnippetRequest *request, GError *error, SnippetLocation *snippet_location)
-{
- debug_print (DB_FUNCTION, "entering\n");
-}
-
-
-static void
-hits_added_cb (BeagleQuery *query, BeagleHitsAddedResponse *response, YelpSearchParser *parser)
-{
- GSList *hits, *l;
-
- debug_print (DB_FUNCTION, "hits_added\n");
-
- hits = beagle_hits_added_response_get_hits (response);
-
- for (l = hits; l; l = l->next) {
- BeagleHit *hit = l->data;
- beagle_hit_ref (hit);
- debug_print (DB_DEBUG, "%f\n", beagle_hit_get_score (hit));
- g_ptr_array_add (parser->hits, hit);
- }
-}
-
-static gboolean
-check_lang (const char *lang)
-{
- int i;
- for (i = 0; langs[i]; i++) {
- if (!strncmp (lang, langs[i], 2)) {
- debug_print (DB_DEBUG, "%s preferred\n", lang);
- return TRUE;
- }
- }
- debug_print (DB_DEBUG, "%s not preferred\n", lang);
- return FALSE;
-}
-
-static gint
-compare_hits (gconstpointer a,
- gconstpointer b)
-{
- BeagleHit **hita = (BeagleHit **) a;
- BeagleHit **hitb = (BeagleHit **) b;
- const char *langa, *langb;
- gboolean a_preferred = TRUE, b_preferred = TRUE;
-
- if (beagle_hit_get_one_property (*hita, "fixme:language", &langa))
- a_preferred = check_lang(langa);
- if (beagle_hit_get_one_property (*hitb, "fixme:language", &langb))
- b_preferred = check_lang(langb);
-
- if (a_preferred != b_preferred) {
- if (a_preferred)
- return -1;
- if (b_preferred)
- return 1;
- }
-
- double scorea = beagle_hit_get_score (*hita);
- double scoreb = beagle_hit_get_score (*hitb);
-
- /* The values here are inverted so that it's a descending sort. */
- if (scorea < scoreb)
- return 1;
- if (scoreb < scorea)
- return -1;
- return 0;
-}
-
-static void
-finished_cb (BeagleQuery *query,
- BeagleFinishedResponse *response,
- YelpSearchParser *parser)
-{
- int i;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_ptr_array_sort (parser->hits, compare_hits);
-
- for (i = 0; i < 10 && i < parser->hits->len; i++) {
- BeagleHit *hit = g_ptr_array_index (parser->hits, i);
- xmlNode *child;
- /* static float score_fake = 0; */
- char *score;
- const char *property;
- BeagleSnippetRequest *request;
- SnippetLocation *snippet_location;
-
- child = xmlNewTextChild (parser->root, NULL, BAD_CAST "result", NULL);
- xmlSetProp (child, BAD_CAST "uri", BAD_CAST beagle_hit_get_uri (hit));
- xmlSetProp (child, BAD_CAST "parent_uri",
- BAD_CAST beagle_hit_get_parent_uri (hit));
- if (beagle_hit_get_one_property (hit, "dc:title", &property))
- xmlSetProp (child, BAD_CAST "title", BAD_CAST property);
- if (beagle_hit_get_one_property (hit, "fixme:base_title", &property))
- xmlSetProp (child, BAD_CAST "base_title", BAD_CAST property);
-
- score = g_strdup_printf ("%f", beagle_hit_get_score (hit));
- debug_print (DB_DEBUG, "%f\n", beagle_hit_get_score (hit));
- /*xmlSetProp (child, BAD_CAST "score", BAD_CAST score);*/
- g_free (score);
-
- parser->snippet_request_count ++;
-
- snippet_location = g_new (SnippetLocation, 1);
-
- snippet_location->parser = parser;
- snippet_location->node = child;
-
- request = beagle_snippet_request_new ();
- beagle_snippet_request_set_hit (request, hit);
- beagle_snippet_request_set_query (request, query);
-
- g_signal_connect (request, "response",
- G_CALLBACK (snippet_response), snippet_location);
- g_signal_connect (request, "error",
- G_CALLBACK (snippet_error), snippet_location);
- g_signal_connect (request, "closed",
- G_CALLBACK (snippet_closed), snippet_location);
-
- debug_print (DB_DEBUG, "Requesting snippet\n");
- beagle_client_send_request_async (beagle_client, BEAGLE_REQUEST (request),
- NULL);
- }
-
- g_signal_handlers_disconnect_by_func (query,
- G_CALLBACK (hits_added_cb),
- parser);
- g_signal_handlers_disconnect_by_func (query,
- G_CALLBACK (finished_cb),
- parser);
- g_object_unref (query);
-
- g_ptr_array_foreach (parser->hits, (GFunc) beagle_hit_unref, NULL);
- g_ptr_array_free (parser->hits, TRUE);
- parser->hits = NULL;
-
- check_finished (parser);
-}
-#endif /* ENABLE_BEAGLE */
-
-static gboolean
-search_parser_process_idle (YelpSearchParser *parser)
-{
-#ifdef ENABLE_BEAGLE
- BeagleQuery *query;
- GError *error = NULL;
-#endif /* ENABLE_BEAGLE */
-
- parser->search_doc = xmlNewDoc (BAD_CAST "1.0");
- parser->root = xmlNewNode (NULL, BAD_CAST "search");
- xmlSetProp (parser->root, BAD_CAST "title", BAD_CAST parser->search_terms);
- xmlDocSetRootElement (parser->search_doc, parser->root);
-
-
- /* Easter egg. Do not translate. Oh, and congratulations on
- * finding it ;)
- */
- if (g_str_equal (parser->search_terms, "Easter Egg")) {
- xmlNode *child;
- child = xmlNewTextChild (parser->root, NULL,
- BAD_CAST "result", NULL);
- xmlSetProp (child, BAD_CAST "uri", BAD_CAST "http://www.gnome.org");
- xmlSetProp (child, BAD_CAST "title", BAD_CAST "Congratulations!");
- xmlNewChild (child, NULL, BAD_CAST "snippet",
- BAD_CAST "It's widely known GNOME rocks. Welcome to the party.");
- xmlNewChild (child, NULL, BAD_CAST "score",
- BAD_CAST "1000.0");
- }
-
-#ifdef ENABLE_BEAGLE
- if (beagle_client != NULL) {
- query = beagle_query_new ();
-
- beagle_query_set_max_hits (query, 10000);
- beagle_query_add_text (query, parser->search_terms);
- beagle_query_add_text (query, "source:documentation OR source:manpages");
-
- parser->hits = g_ptr_array_new ();
-
- g_signal_connect (query, "hits-added",
- G_CALLBACK (hits_added_cb),
- parser);
-
- g_signal_connect (query, "finished",
- G_CALLBACK (finished_cb),
- parser);
-
- beagle_client_send_request_async (beagle_client, BEAGLE_REQUEST (query), &error);
-
- if (error) {
- debug_print (DB_DEBUG, "error: %s\n", error->message);
- }
-
- g_clear_error (&error);
- } else {
- g_warning ("beagled not running, using basic search support.");
- }
-#endif /* ENABLE_BEAGLE */
-
-#ifdef ENABLE_BEAGLE
- if (beagle_client == NULL) {
-#endif
- g_return_val_if_fail (parser->slow_search_setup_process_id == 0, FALSE);
-
- if (g_str_equal (parser->search_terms, ":"))
- check_finished(parser);
- else {
- parser->slow_search_setup_process_id =
- g_idle_add ((GSourceFunc) slow_search_setup,
- parser);
- }
-#ifdef ENABLE_BEAGLE
- }
-#endif
-
- /* returning false removes this idle function from the main loop;
- * we also set our search process id to zero */
- parser->search_process_id = 0;
- return FALSE;
-}
-
-void s_startElement(void *data,
- const xmlChar * name,
- const xmlChar ** attrs)
-{
- SearchContainer *c = (SearchContainer *) data;
-
- if (g_str_equal (name, "xi:include") || g_str_equal (name, "include")) {
- gint i=0;
- while (attrs[i]) {
- if (g_str_equal (attrs[i], "href")) {
-
- c->components = g_slist_append (c->components,
- g_strconcat (c->base_path,
- "/",
- attrs[i+1],
- NULL));
- break;
- }
- i+=2;
- }
- }
-
- if (attrs) {
- gint i=0;
- while (attrs[i]) {
- if (g_str_equal (attrs[i], "id")) {
- g_free (c->current_subsection);
- c->current_subsection = g_strdup ((gchar *) attrs[i+1]);
- }
- i+=2;
- }
- }
- /* Do we need to grab the title of the document?
- * used in snippets when displaying results from an indexterm etc.
- */
- if (c->search_status != NOT_SEARCHING && g_str_equal (name, "title")) {
- c->grab_text = TRUE;
- }
-
- /* Are we allowed to search this element? */
- if (c->search_status == NOT_SEARCHING) {
- if (c->html && g_str_equal (name, "html")) {
- c->search_status = SEARCH_DOC;
- return;
- }
-
- if (g_str_equal (name, "title")) {
- c->search_status = SEARCH_1;
- }
- else if (g_str_equal (name, "indexterm"))
- c->search_status = SEARCH_1;
- else if (g_str_equal (name, "sect1") ||
- g_str_equal (name, "section") ||
- g_str_equal (name, "chapter") ||
- g_str_equal (name, "body"))
- c->search_status = SEARCH_DOC;
- } else if (c->search_status == SEARCH_1) {
- c->search_status = SEARCH_CHILD;
- }
-
- if (c->elem_type) {
- c->elem_stack = g_slist_prepend (c->elem_stack,
- g_strdup (c->elem_type));
- g_free (c->elem_type);
- }
-
- c->elem_type = g_strdup ((gchar *) name);
-
- return;
-}
-
-void s_endElement(void * data,
- const xmlChar * name)
-{
- SearchContainer *c = (SearchContainer *) data;
-
- if (c->search_status == SEARCH_CHILD) {
- c->search_status = SEARCH_1;
- } else if (c->search_status == SEARCH_1) {
- c->search_status = NOT_SEARCHING;
- }
-
- g_free (c->elem_type);
- c->elem_type = NULL;
-
- if (c->elem_stack) {
- GSList *top = c->elem_stack;
- c->elem_type = g_strdup ((gchar *) top->data);
- c->elem_stack = g_slist_delete_link (c->elem_stack, top);
- }
- c->grab_text = FALSE;
- return;
-}
-
-void s_characters(void * data,
- const xmlChar * ch,
- int len)
-{
- SearchContainer *c = (SearchContainer *) data;
- if (c->grab_text) {
- g_free (c->sect_name);
- c->sect_name = g_strndup ((gchar *) ch, len);
- }
-
- /* Sometimes html docs don't trigger the "startElement" method
- * I don't know why. Instead, we just search the entire
- * html file, hoping to find something.
- */
- if (c->html && c->search_status != SEARCH_DOC)
- c->search_status = SEARCH_DOC;
- if (c->search_status != NOT_SEARCHING) {
- gchar *tmp = g_utf8_casefold ((gchar *) ch, len);
- gint i = 0;
- gchar *s_term = c->search_term[i];
- while (s_term && c->score_per_word[i] < 1.0) {
- gchar *location;
-
- if (c->stop_word[i] || c->score_per_word[c->dup_of[i]] == 1.0) {
- i++;
- s_term = c->search_term[i];
- continue;
- }
-
- location = strstr (tmp, s_term);
- if (location) {
- gchar before = *(location-1);
- gchar after = *(location+strlen(s_term));
- gfloat local_score = 0.0;
- gboolean use_text = TRUE;
- if (location == tmp)
- before = ' ';
- if (strlen(location) == strlen(s_term))
- after = ' ';
-
- if ((g_ascii_ispunct (before) || g_ascii_isspace (before))
- && (g_ascii_ispunct (after) || g_ascii_isspace (after))) {
- if (!c->elem_type) {
- /* Stupid HTML. Treat like its a normal tag */
- local_score = 0.1;
- } else if (g_str_equal(c->elem_type, "primary")) {
- local_score = 1.0;
- use_text = FALSE;
- } else if (g_str_equal (c->elem_type, "secondary")) {
- local_score = 0.9;
- use_text = FALSE;
- } else if (g_str_equal (c->elem_type, "title") ||
- g_str_equal (c->elem_type, "titleabbrev")) {
- local_score = 0.8;
- } else {
- local_score = 0.1;
- }
- c->score += local_score;
- c->found_terms[c->dup_of[i]] = TRUE;
- if (local_score > c->snippet_score) {
- g_free (c->snippet);
- if (use_text) {
- c->snippet = g_strndup (g_utf8_casefold ((gchar *) ch,
- len),
- len);
- } else {
- c->snippet = g_strdup (c->sect_name);
- }
- c->result_subsection = g_strdup (c->current_subsection);
- c->snippet_score = local_score;
- c->score_per_word[c->dup_of[i]] = local_score;
- }
- }
- }
- i++;
- s_term = c->search_term[i];
- }
- g_free (tmp);
- }
- return;
-}
-
-void s_declEntity (void *data, const xmlChar *name, int type,
- const xmlChar *pID, const xmlChar *sID,
- xmlChar *content)
-{
- SearchContainer *c = (SearchContainer *) data;
- if (type == 2) {
- g_hash_table_insert (c->entities,
- g_strdup ((gchar *) name),
- g_strdup ((gchar *) sID));
-
- }
- return;
-}
-
-xmlEntityPtr s_getEntity (void *data, const xmlChar *name)
-{
- SearchContainer *c = (SearchContainer *) data;
- xmlEntityPtr t = xmlGetPredefinedEntity(name);
-
- if (!t) {
- gchar * lookup = g_hash_table_lookup (c->entities, name);
- if (lookup) {
- c->components = g_slist_append (c->components,
- g_strconcat (c->base_path,
- "/",
- lookup, NULL));
- }
- }
-
- return t;
-
-}
-
-
-
-
-
-static xmlSAXHandler handlers = {
- NULL, NULL, NULL, NULL, NULL,
- s_getEntity,
- s_declEntity, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- s_startElement, s_endElement, NULL, s_characters,
- NULL, NULL, NULL, NULL, NULL, NULL
-};
-
-
-/* Parse the omfs and build the list of files to be searched */
-
-/* A common bit of code used below. Chucked in a function for easy */
-gchar *
-string_append (gchar *current, gchar *new, gchar *suffix)
-{
- gchar *ret;
-
- if (suffix) {
- ret = g_strconcat (current, "\n", new, suffix, NULL);
- } else {
- ret = g_strconcat (current, "\n", new, NULL);
- }
- g_free (current);
- return ret;
-}
-
-static gint
-build_lists (gchar *search_terms, gchar ***terms, gint **dups,
- gboolean ** stops, gint *req)
-{
- gchar *ignore_words, *common_prefixes, *common_suffixes;
- gchar **prefixes, **suffixes, **ignore;
- gchar **list_copy;
- gchar **iter, **iter1 = NULL;
- gchar *term_str = NULL;
- gchar *dup_str = NULL;
- gint n_terms = 0, i=-1;
- gint orig_term = 0;
- gint non_stop = 0;
-
-
- /* 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".
- */
- ignore_words = g_strdup (_("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:"
- */
- common_prefixes = g_strdup (_("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
- */
- common_suffixes = g_strdup (_("ers:er:ing:es:s:'s"));
-
- ignore = g_strsplit (ignore_words, ":", -1);
- if (strchr (common_prefixes, ':')) {
- prefixes = g_strsplit (common_prefixes, ":", -1);
- } else {
- prefixes = NULL;
- }
- if (strchr (common_suffixes, ':')) {
- suffixes = g_strsplit (common_suffixes, ":", -1);
- } else {
- suffixes = NULL;
- }
-
-/* search_terms = g_strdelimit (search_terms, ":", ' '); */
- list_copy = g_strsplit (g_utf8_casefold (g_strstrip (
- search_terms), -1),
- " ", -1);
-
- for (iter = list_copy; *iter != NULL; iter++) {
- gboolean ignoring = FALSE;
- if (strlen (*iter) == 0) {
- continue;
- }
- if (g_str_has_suffix (*iter, "?")) {
- gchar *tmp;
- tmp = g_strndup (*iter, strlen (*iter) - 1);
- g_free (*iter);
- *iter = g_strdup (tmp);
- g_free (tmp);
- }
- if (!term_str) {
- term_str = g_strdup (*iter);
- } else {
- term_str = string_append (term_str, *iter, NULL);
- }
-
- for (iter1 = ignore; *iter1; iter1++) {
- if (g_str_equal (*iter, *iter1)) {
- ignoring = TRUE;
- break;
- }
- }
- if (ignoring) {
- if (!dup_str) {
- dup_str = g_strdup ("I");
- } else {
- dup_str = string_append (dup_str, "I", NULL);
- }
- continue;
- }
- non_stop++;
-
- if (!dup_str) {
- dup_str = g_strdup ("O");
- } else {
- dup_str = string_append (dup_str, "O", NULL);
- }
- (*req)++;
- if (prefixes) {
- for (iter1 = prefixes; *iter1; iter1++) {
- if (g_str_has_prefix (*iter, *iter1)) {
- term_str = string_append (term_str,
- (*iter+strlen(*iter1)), NULL);
- } else {
- term_str = string_append (term_str, *iter, *iter1);
- }
- dup_str = string_append (dup_str, "D", NULL);
- }
- }
- if (suffixes) {
- for (iter1 = suffixes; *iter1; iter1++) {
- if (g_str_has_suffix (*iter, *iter1)) {
- gchar *tmp;
- tmp = g_strndup (*iter, (strlen(*iter)-strlen(*iter1)));
- term_str = string_append (term_str, tmp, NULL);
- g_free (tmp);
- } else {
- term_str = string_append (term_str, *iter, *iter1);
- }
- dup_str = string_append (dup_str, "D", NULL);
- }
- }
- }
- g_strfreev (list_copy);
- *terms = g_strsplit (term_str, "\n", -1);
- n_terms = g_strv_length (*terms);
- (*dups) = g_new0 (gint, n_terms);
- (*stops) = g_new0 (gboolean, n_terms);
- list_copy = g_strsplit (dup_str, "\n", -1);
-
- if (n_terms == 0)
- goto done;
-
- for (iter = *terms; *iter; iter++) {
- i++;
- if (g_str_equal (list_copy[i], "O")) {
- orig_term = i;
- }
- (*dups)[i] = orig_term;
-
- for (iter1 = ignore; *iter1; iter1++) {
- if (non_stop > 0 && g_str_equal (*iter, *iter1)) {
- (*stops)[i] = TRUE;
- (*dups)[i] = -2;
- break;
- }
- }
- }
-
- done:
- /* Clean up all those pesky strings */
- g_free (ignore_words);
- g_free (common_prefixes);
- g_free (common_suffixes);
- g_free (term_str);
- g_free (dup_str);
- g_strfreev (prefixes);
- g_strfreev (suffixes);
- g_strfreev (ignore);
- g_strfreev (list_copy);
-
- return n_terms;
-}
-
-static gboolean
-slow_search_setup (YelpSearchParser *parser)
-{
- gchar **terms_list = NULL;
- gint *dup_list = NULL;
- gboolean *stop_list = NULL;
- gint terms_number = 0;
- gint required_no = 0;
- SearchDocData *data;
-
-
- terms_number = build_lists (parser->search_terms,&terms_list,
- &dup_list, &stop_list,
- &required_no);
- if (terms_number < 1)
- goto done;
-
- data = g_new0 (SearchDocData, 1);
- data->container = g_new0 (SearchContainer, 1);
- data->parser = parser;
- data->required_no = required_no;
- data->terms_number = terms_number;
- data->stop_list = stop_list;
- data->dup_list = dup_list;
- data->terms_list = terms_list;
- data->terms_number = terms_number;
-
- rrn_for_each ((RrnForeachFunc) slow_search_process, data);
-
- search_process_man (parser, terms_list);
- search_process_info (parser, terms_list);
-
- done:
- check_finished (parser);
-
- return FALSE;
-}
-
-
-static gboolean
-slow_search_process (RrnReg *reg, SearchDocData *data)
-{
- gint i, j=0;
- SearchContainer *container = data->container;
- gchar *ptr, *path;
- gchar *fname;
-
- if (!reg->uri || g_str_equal (reg->uri, ""))
- return TRUE;
-
- /* Set up the container with the new data */
- if (g_str_has_prefix (reg->uri, "file:")) {
- fname = &(reg->uri[5]);
- } else {
- fname = reg->uri;
- }
-
- while (fname[0] == '/' && fname[1] == '/') {
- fname++;
- }
-
- container->base_filename = g_strdup (fname);
- fname = g_strdup (container->base_filename);
-
- container->entities = g_hash_table_new (g_str_hash, g_str_equal);
- container->doc_title = g_strdup ((gchar *) reg->name);
- container->score=0;
- container->html = FALSE;
- if (reg->comment)
- container->default_snippet = g_strdup ((gchar *) reg->comment);
- else
- container->default_snippet = g_strdup (_("No Comment"));
- container->current_subsection = NULL;
- container->elem_type = NULL;
-
- ptr = g_strrstr (container->base_filename, "/");
-
- if (ptr) {
- path = g_strndup (container->base_filename,
- ptr - container->base_filename);
- } else {
- path = g_strdup (container->base_filename);
- }
-
- /* BEGIN HTML special block */
- if (reg->type && (g_str_equal (reg->type, "text/html") ||
- g_str_has_suffix (fname, "html"))) {
- GDir *dir;
- gchar *filename;
- container->html = TRUE;
- ptr++;
-
- dir = g_dir_open (path, 0, NULL);
-
- while ((filename = (gchar *) g_dir_read_name (dir))) {
- if ((g_str_has_suffix (filename, ".html") ||
- g_str_has_suffix (filename, ".htm")) &&
- !g_str_equal (filename, ptr)) {
- container->components =
- g_slist_append (container->components,
- g_strconcat (path, "/", filename,
- NULL));
-
- }
- }
- /* END HTML special blcok */
- }
-
- container->base_path = g_strdup (path);
-
- container->required_words = data->required_no;
- container->grab_text = FALSE;
- container->sect_name = NULL;
-
- container->search_term = g_strdupv (data->terms_list);
- container->stop_word = g_new0 (gboolean, data->terms_number);
- container->dup_of = g_new0 (gint, data->terms_number);
- container->found_terms = g_new0 (gboolean, data->terms_number);
- container->score_per_word = g_new0 (gfloat, data->terms_number);
- container->found_terms = g_new0 (gboolean, data->terms_number);
- container->result_subsection = NULL;
- container->search_status = NOT_SEARCHING;
- container->snippet_score = 0;
- container->snippet = NULL;
-
- for (i=0; i< data->terms_number; i++) {
- container->stop_word[i] = data->stop_list[i];
- container->dup_of[i] = data->dup_list[i];
- }
-
-
- xmlSAXUserParseFile (&handlers, container, fname);
- for (i=0; i< g_strv_length (container->search_term); ++i) {
- if (container->found_terms[i]) {
- j++;
- }
- }
- if (j >= container->required_words) {
- search_parse_result (data->parser, container);
- } else while (container->components) {
- GSList *next = container->components;
- container->components = g_slist_remove_link (container->components, next);
- container->search_status = NOT_SEARCHING;
- xmlSAXUserParseFile (&handlers, container, (gchar *) next->data);
- j = 0;
- for (i=0; i< g_strv_length (container->search_term); ++i) {
- if (container->found_terms[i])
- j++;
- }
- if (j >= container->required_words) {
- search_parse_result (data->parser, container);
- break;
- }
- }
-
- search_free_container (container);
- g_free (path);
- return TRUE;
-
-}
-
-static void
-search_free_container (SearchContainer *c)
-{
- g_strfreev (c->search_term);
- g_free (c->dup_of);
- g_free (c->found_terms);
- g_free (c->stop_word);
- g_free (c->score_per_word);
- g_free (c->top_element);
- g_free (c->elem_type);
- g_free (c->sect_name);
- g_free (c->default_snippet);
- g_free (c->current_subsection);
- g_free (c->result_subsection);
- g_free (c->doc_title);
- g_free (c->base_path);
- g_free (c->base_filename);
- g_free (c->snippet);
- g_hash_table_destroy (c->entities);
-}
-
-gchar *
-search_clean_snippet (gchar *snippet, gchar **terms)
-{
- /* This is probably what you want to change */
- gint len_before_term = 47;
- gint len_after_term = 47;
- gchar **iteration;
- gboolean am_cutting = FALSE;
- gchar *result = NULL;
- gboolean found_terms = FALSE;
- int i;
-
-
- if (!snippet)
- return NULL;
-
- if (strlen(snippet) > (len_before_term+len_after_term)) {
- am_cutting = TRUE;
- }
- result = g_strdup (snippet);
-
- for (iteration = terms, i = 0; iteration[i]; i++) {
- gchar *before, *after, *tmp;
- gchar *str;
- gchar before_c, after_c;
- gint count = 0;
-
- while ((str = strstr (result, (iteration[i])))) {
- gboolean breaking = FALSE;
- gint k;
- for (k=0; k< count; k++) {
- if(iteration[k] == NULL){
- breaking = TRUE;
- break;
- }
- str++;
- str = strstr (str, (iteration[k]));
- if (!str) {
- breaking = TRUE;
- break;
- }
- }
- count++;
- if (breaking)
- break;
-
- before_c = *(str-1);
- after_c = *(str+strlen(iteration[i]));
-
- if (g_ascii_isalpha (before_c) || g_ascii_isalpha (after_c)) {
- continue;
- }
-
- tmp = g_strndup (result, (str-result));
- /* If we have to chop the snippet down to size, here is the
- * place to do it. Only the first time through though
- */
- if (am_cutting && !found_terms && strlen (tmp) > len_before_term) {
- gchar *tmp1;
- gchar *tmp2;
- gint cut_by;
-
- tmp1 = tmp;
- cut_by = strlen(tmp) - len_before_term;
-
- tmp1 += cut_by;
- tmp2 = g_strdup (tmp1);
- g_free (tmp);
- tmp = g_strconcat ("...",tmp2, NULL);
- g_free (tmp2);
- }
-
- before = g_strconcat (tmp, "<em>", NULL);
- g_free (tmp);
-
- str += strlen (iteration[i]);
-
- if (am_cutting && !found_terms && strlen (str) > len_after_term) {
- gchar *tmp1;
-
- tmp1 = g_strndup (str, len_after_term);
- tmp = g_strconcat (tmp1, "...", NULL);
- g_free (tmp1);
- } else {
- tmp = g_strdup (str);
- }
-
- after = g_strconcat ((iteration[i]), "</em>", tmp, NULL);
-
-
-
- g_free (result);
- result = g_strconcat (before, after, NULL);
- found_terms = TRUE;
- }
- }
- return result;
-}
-
-void
-search_parse_result (YelpSearchParser *parser, SearchContainer *c)
-{
- xmlNode *child;
- gchar *new_uri;
- xmlDoc *snippet_doc;
- xmlNode *node;
- char *xmldoc;
-
- new_uri = g_strconcat (c->base_filename, "#", c->result_subsection,
- NULL);
- child = xmlNewTextChild (parser->root, NULL,
- BAD_CAST "result", NULL);
- xmlSetProp (child, BAD_CAST "uri", BAD_CAST new_uri);
- xmlSetProp (child, BAD_CAST "title", BAD_CAST g_strstrip (c->doc_title));
- xmlSetProp (child, BAD_CAST "score",
- BAD_CAST g_strdup_printf ("%f", c->score));
- /* Fix up the snippet to show the break_term in bold */
- if (!c->snippet)
- c->snippet = g_strdup (c->default_snippet);
- xmldoc = g_strdup_printf ("<snippet>%s</snippet>",
- search_clean_snippet (c->snippet, c->search_term));
- snippet_doc = xmlParseDoc (BAD_CAST xmldoc);
- g_free (xmldoc);
-
- if (!snippet_doc)
- return;
-
- node = xmlDocGetRootElement (snippet_doc);
- xmlUnlinkNode (node);
- xmlAddChild (child, node);
- xmlFreeDoc (snippet_doc);
-}
-
-void
-process_man_result (YelpSearchParser *parser, gchar *result, gchar **terms)
-{
- gchar ** split = g_strsplit (result, "\n", -1);
- gint i;
-
- for (i=0;split[i];i++) {
- gchar ** line = g_strsplit (split[i], "(", 2);
- gchar *filename = NULL;
- gchar *desc = NULL;
- xmlNode *child;
- gchar *tmp = NULL;
- gchar *after = NULL;
- /*gchar *before = NULL;*/
- gchar *title = NULL;
- /*gint i;*/
-
- if (line == NULL || line[0] == NULL || line[1] == NULL)
- goto done;
-
- /* RH man inserts rpm references into the whatis database */
- if (g_str_has_prefix (line[1], "rpm)"))
- goto done;
-
- tmp = strchr (line[0], ' ');
- if (tmp)
- *tmp = '\0';
-
-
- title = g_strdup (g_strstrip (line[0]));
- after = strstr (line[1], ")");
-
- tmp = g_strndup (line[1], after-line[1]);
-
- filename = g_strconcat ("man:", title, "(", tmp,")", NULL);
-
- after++;
- g_free (tmp);
-
- tmp = g_strdup (g_strchug (after));
- after = tmp; after++;
- desc = g_strdup (g_strchug (after));
-
- child = xmlNewTextChild (parser->root, NULL,
- BAD_CAST "result", NULL);
- xmlSetProp (child, BAD_CAST "uri", BAD_CAST filename);
- xmlSetProp (child, BAD_CAST "title",
- BAD_CAST g_strconcat (title,
- " manual page", NULL));
-
- xmlNewChild (child, NULL, BAD_CAST "snippet",
- BAD_CAST desc);
- xmlNewChild (child, NULL, BAD_CAST "score",
- BAD_CAST "0.1");
- g_free (tmp);
- done:
- g_strfreev (line);
- }
-
-}
-
-void
-process_info_result (YelpSearchParser *parser, gchar *result, gchar **terms)
-{
- gchar ** split = NULL;
- gint i;
-
- split = g_strsplit (result, "\n", -1);
- if (split == NULL)
- return;
-
- for (i=0;split[i];i++) {
- gchar ** line = NULL;
- gchar *filename = NULL;
- gchar *desc = NULL;
- gchar *title = NULL;
- xmlNode *child;
- gchar *tmp;
- gchar *tmp1;
- gchar *file_name;
-
- line = g_strsplit (split[i], "--", 3);
- if (g_strv_length (line) != 2) {
- g_strfreev (line);
- continue;
- }
-
- /* First is the filename
- * We gotta do some fiddling to get the actual filename
- * we can use
- */
- tmp = g_strdup (g_strchomp (line[0]));
- tmp++;
- tmp1 = strstr (tmp, "\"");
- if (!tmp1) {
- g_strfreev (line);
- g_free (tmp);
- continue;
- }
- file_name = g_strndup (tmp, tmp1-tmp);
- tmp++;
- tmp1 = strstr (tmp, ")");
- if (tmp1)
- title = g_strndup (tmp, tmp1-tmp);
- else {
- title = g_strdup (++file_name);
- --file_name;
- }
- tmp--;
- tmp--;
- filename = g_strconcat ("info:", file_name, NULL);
- g_free (tmp);
- g_free (file_name);
-
- /* Then the description */
- desc = g_strdup (g_strchug (line[1]));
-
- /* Now we add the result to the page */
- child = xmlNewTextChild (parser->root, NULL,
- BAD_CAST "result", NULL);
- xmlSetProp (child, BAD_CAST "uri", BAD_CAST filename);
- xmlSetProp (child, BAD_CAST "title",
- BAD_CAST g_strconcat (title,
- " info page", NULL));
-
- xmlNewChild (child, NULL, BAD_CAST "snippet",
- BAD_CAST desc);
- xmlNewChild (child, NULL, BAD_CAST "score",
- BAD_CAST "0.05");
- g_strfreev (line);
- g_free (title);
- }
-
-}
-
-void
-search_process_man (YelpSearchParser *parser, gchar **terms)
-{
- gchar *command;
- gchar *stdout_str = NULL;
- gint exit_code;
- gchar *tmp = NULL;
- gchar *search = NULL;
-
- tmp = g_strescape (parser->search_terms, NULL);
- tmp = g_strdelimit (tmp, "\'", '\'');
- search = g_strconcat ("\"",tmp,"\"", NULL);
-
- command = g_strconcat("apropos ", search, NULL);
-
- if (g_spawn_command_line_sync (command, &stdout_str, NULL,
- &exit_code, NULL) && exit_code == 0) {
- process_man_result (parser, stdout_str, terms);
-
- }
- g_free (tmp);
- g_free (search);
- g_free (stdout_str);
- g_free (command);
-
- return;
-}
-
-void
-search_process_info (YelpSearchParser *parser, gchar **terms)
-{
- gchar *command;
- gchar *stdout_str = NULL;
- gchar *stderr_str = NULL;
- gchar *tmp;
- gint exit_code;
-
- gchar *search = NULL;
-
- tmp = g_strescape (parser->search_terms, NULL);
- tmp = g_strdelimit (tmp, "\'", '\'');
- search = g_strconcat ("\"",tmp,"\"", NULL);
- command = g_strconcat("info --apropos ", search, NULL);
-
- if (g_spawn_command_line_sync (command, &stdout_str, &stderr_str,
- &exit_code, NULL) &&
- stdout_str != NULL) {
- process_info_result (parser, stdout_str, terms);
- }
- g_free (tmp);
- g_free (stdout_str);
- g_free (stderr_str);
- g_free (command);
-
- return;
-}
diff --git a/src/yelp-search-parser.h b/src/yelp-search-parser.h
deleted file mode 100644
index d0d25ac7..00000000
--- a/src/yelp-search-parser.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2007 Don Scorgie <Don@Scorgie.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 <Don@Scorgie.org>
- */
-
-#ifndef __YELP_SEARCH_PARSER_H__
-#define __YELP_SEARCH_PARSER_H__
-
-#include <glib.h>
-#include <libxml/tree.h>
-
-typedef struct _YelpSearchParser YelpSearchParser;
-
-YelpSearchParser * yelp_search_parser_new (void);
-xmlDocPtr yelp_search_parser_process (YelpSearchParser *parser,
- gchar *terms);
-void yelp_search_parser_free (YelpSearchParser *parser);
-
-#endif /* __YELP_SEARCH_PARSER_H__ */
diff --git a/src/yelp-search.c b/src/yelp-search.c
deleted file mode 100644
index 73c3c16c..00000000
--- a/src/yelp-search.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2007 Don Scorgie <Don@Scorgie.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 <Don@Scorgie.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-search.h"
-#include "yelp-search-parser.h"
-#include "yelp-transform.h"
-#include "yelp-debug.h"
-
-#define STYLESHEET DATADIR"/yelp/xslt/search2html.xsl"
-
-#define YELP_SEARCH_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_SEARCH, YelpSearchPriv))
-
-typedef enum {
- SEARCH_STATE_BLANK, /* Brand new, run transform as needed */
- SEARCH_STATE_PARSING, /* Parsing/transforming document, please wait */
- SEARCH_STATE_PARSED, /* All done, if we ain't got it, it ain't here */
- SEARCH_STATE_STOP /* Stop everything now, object to be disposed */
-} SearchState;
-
-struct _YelpSearchPriv {
- gchar *search_terms;
- SearchState state;
-
- GMutex *mutex;
- GThread *thread;
-
- xmlDocPtr xmldoc;
-
- gboolean process_running;
- gboolean transform_running;
-
- YelpTransform *transform;
-};
-
-
-static void search_class_init (YelpSearchClass *klass);
-static void search_init (YelpSearch *search);
-static void search_try_dispose (GObject *object);
-static void search_dispose (GObject *object);
-
-/* YelpDocument */
-static void search_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,
- YelpSearch *search);
-static void transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpSearch *search);
-static void transform_final_func (YelpTransform *transform,
- YelpSearch *search);
-
-/* Threaded */
-static void search_process (YelpSearch *search);
-
-static YelpDocumentClass *parent_class;
-
-GType
-yelp_search_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- static const GTypeInfo info = {
- sizeof (YelpSearchClass),
- NULL, NULL,
- (GClassInitFunc) search_class_init,
- NULL, NULL,
- sizeof (YelpSearch),
- 0,
- (GInstanceInitFunc) search_init,
- };
- type = g_type_register_static (YELP_TYPE_DOCUMENT,
- "YelpSearch",
- &info, 0);
- }
- return type;
-}
-
-static void
-search_class_init (YelpSearchClass *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 = search_try_dispose;
-
- document_class->request = search_request;
- document_class->cancel = NULL;
-
- g_type_class_add_private (klass, sizeof (YelpSearchPriv));
-}
-
-static void
-search_init (YelpSearch *search)
-{
- YelpSearchPriv *priv;
-
- priv = search->priv = YELP_SEARCH_GET_PRIVATE (search);
-
- priv->state = SEARCH_STATE_BLANK;
-
- priv->mutex = g_mutex_new ();
-}
-
-static void
-search_try_dispose (GObject *object)
-{
- YelpSearchPriv *priv;
-
- g_assert (object != NULL && YELP_IS_SEARCH (object));
- priv = YELP_SEARCH (object)->priv;
-
- g_mutex_lock (priv->mutex);
- if (priv->process_running || priv->transform_running) {
- priv->state = SEARCH_STATE_STOP;
- g_idle_add ((GSourceFunc) search_try_dispose, object);
- g_mutex_unlock (priv->mutex);
- } else {
- g_mutex_unlock (priv->mutex);
- search_dispose (object);
- }
-}
-
-static void
-search_dispose (GObject *object)
-{
- YelpSearch *search = YELP_SEARCH (object);
-
- g_free (search->priv->search_terms);
-
- if (search->priv->xmldoc)
- xmlFreeDoc (search->priv->xmldoc);
-
- g_mutex_free (search->priv->mutex);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-/******************************************************************************/
-
-YelpDocument *
-yelp_search_new (gchar *filename)
-{
- YelpSearch *search;
-
- g_return_val_if_fail (filename != NULL, NULL);
-
- search = (YelpSearch *) g_object_new (YELP_TYPE_SEARCH, NULL);
- search->priv->search_terms = g_strdup (filename);
-
- debug_print (DB_FUNCTION, "entering\n");
- debug_print (DB_ARG, " filename = \"%s\"\n", filename);
-
- yelp_document_add_page_id (YELP_DOCUMENT (search), "x-yelp-index", "index");
-
- return (YelpDocument *) search;
-}
-
-
-/******************************************************************************/
-/** YelpDocument **************************************************************/
-
-static void
-search_request (YelpDocument *document,
- gint req_id,
- gboolean handled,
- gchar *page_id,
- YelpDocumentFunc func,
- gpointer user_data)
-{
- YelpSearch *search;
- YelpSearchPriv *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_SEARCH (document));
-
- if (handled)
- return;
-
- search = YELP_SEARCH (document);
- priv = search->priv;
-
- g_mutex_lock (priv->mutex);
-
- switch (priv->state) {
- case SEARCH_STATE_BLANK:
- priv->state = SEARCH_STATE_PARSING;
- priv->process_running = TRUE;
- priv->thread = g_thread_create ((GThreadFunc) search_process, search, FALSE, NULL);
- break;
- case SEARCH_STATE_PARSING:
- break;
- case SEARCH_STATE_PARSED:
- case SEARCH_STATE_STOP:
- /* Much bigger problems */
- error = yelp_error_new (_("Search could not be processed"),
- _("The requested search could not be processed."));
- 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,
- YelpSearch *search)
-{
- YelpSearchPriv *priv;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (search != NULL && YELP_IS_SEARCH (search));
-
- priv = search->priv;
-
- g_assert (transform == priv->transform);
-
- if (priv->state == SEARCH_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, search);
- break;
- case YELP_TRANSFORM_ERROR:
- yelp_document_error_pending (YELP_DOCUMENT (search), (YelpError *) func_data);
- yelp_transform_release (transform);
- priv->transform = NULL;
- priv->transform_running = FALSE;
- break;
- case YELP_TRANSFORM_FINAL:
- transform_final_func (transform, search);
- break;
- }
-}
-
-static void
-transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpSearch *search)
-{
- YelpSearchPriv *priv;
- gchar *content;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- priv = search->priv;
- g_mutex_lock (priv->mutex);
-
- content = yelp_transform_eat_chunk (transform, page_id);
-
- yelp_document_add_page (YELP_DOCUMENT (search), page_id, content);
-
- g_free (page_id);
-
- g_mutex_unlock (priv->mutex);
-}
-
-static void
-transform_final_func (YelpTransform *transform, YelpSearch *search)
-{
- YelpSearchPriv *priv = search->priv;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_mutex_lock (priv->mutex);
-
- yelp_transform_release (transform);
- priv->transform = NULL;
- priv->transform_running = FALSE;
-
- if (priv->xmldoc)
- xmlFreeDoc (priv->xmldoc);
- priv->xmldoc = NULL;
-
- g_mutex_unlock (priv->mutex);
-}
-
-
-/******************************************************************************/
-/** Threaded ******************************************************************/
-
-static void
-search_process (YelpSearch *search)
-{
- YelpSearchPriv *priv;
- YelpSearchParser *parser;
- YelpError *error = NULL;
- YelpDocument *document;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (search != NULL && YELP_IS_SEARCH (search));
- g_object_ref (search);
- priv = search->priv;
- document = YELP_DOCUMENT (search);
-
- parser = yelp_search_parser_new ();
- priv->xmldoc = yelp_search_parser_process (parser, priv->search_terms);
- yelp_search_parser_free (parser);
-
- if (priv->xmldoc == NULL) {
- error = yelp_error_new (_("Cannot process the search"),
- _("The search processor returned invalid results"));
- yelp_document_error_pending (document, error);
- }
-
- g_mutex_lock (priv->mutex);
- if (priv->state == SEARCH_STATE_STOP) {
- g_mutex_unlock (priv->mutex);
- goto done;
- }
-
- priv->transform = yelp_transform_new (STYLESHEET,
- (YelpTransformFunc) transform_func,
- search);
- priv->transform_running = TRUE;
-
- /* FIXME: we probably need to set our own params */
- yelp_transform_start (priv->transform,
- priv->xmldoc,
- NULL);
- g_mutex_unlock (priv->mutex);
-
- done:
- priv->process_running = FALSE;
- g_object_unref (search);
-}
diff --git a/src/yelp-search.h b/src/yelp-search.h
deleted file mode 100644
index a6cec17e..00000000
--- a/src/yelp-search.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 <Don@Scorgie.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 <Don@Scorgie.org>
- */
-
-#ifndef __YELP_SEARCH_H__
-#define __YELP_SEARCH_H__
-
-#include <glib-object.h>
-
-#include "yelp-document.h"
-
-#define YELP_TYPE_SEARCH (yelp_search_get_type ())
-#define YELP_SEARCH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_SEARCH, YelpSearch))
-#define YELP_SEARCH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_SEARCH, YelpSearchClass))
-#define YELP_IS_SEARCH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_SEARCH))
-#define YELP_IS_SEARCH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_SEARCH))
-#define YELP_SEARCH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_SEARCH, YelpSearchClass))
-
-typedef struct _YelpSearch YelpSearch;
-typedef struct _YelpSearchClass YelpSearchClass;
-typedef struct _YelpSearchPriv YelpSearchPriv;
-
-struct _YelpSearch {
- YelpDocument parent;
- YelpSearchPriv *priv;
-};
-
-struct _YelpSearchClass {
- YelpDocumentClass parent_class;
-};
-
-GType yelp_search_get_type (void);
-YelpDocument * yelp_search_new (gchar *uri);
-
-#endif /* __YELP_SEARCH_H__ */
diff --git a/src/yelp-toc.c b/src/yelp-toc.c
deleted file mode 100644
index 085c47c7..00000000
--- a/src/yelp-toc.c
+++ /dev/null
@@ -1,795 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2003-2007 Shaun McCance <shaunm@gnome.org>
- * 2007 Don Scorgie <Don@Scorgie.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>
- * Don Scorgie <Don@Scorgie.org>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xinclude.h>
-#include <libxml/xmlreader.h>
-#define I_KNOW_RARIAN_0_8_IS_UNSTABLE
-#include <rarian.h>
-
-#include "yelp-error.h"
-#include "yelp-toc.h"
-#include "yelp-settings.h"
-#include "yelp-transform.h"
-#include "yelp-debug.h"
-
-#define STYLESHEET DATADIR"/yelp/xslt/toc2html.xsl"
-
-#define YELP_TOC_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), YELP_TYPE_TOC, YelpTocPriv))
-
-typedef enum {
- TOC_STATE_BLANK, /* Brand new, run transform as needed */
- TOC_STATE_PARSING, /* Parsing/transforming document, please wait */
- TOC_STATE_PARSED, /* All done, if we ain't got it, it ain't here */
- TOC_STATE_STOP /* Stop everything now, object to be disposed */
-} TocState;
-
-struct _YelpTocPriv {
- TocState state;
-
- GMutex *mutex;
- GThread *thread;
-
- gboolean process_running;
- gboolean transform_running;
- gboolean man_processed;
- gboolean info_processed;
-
- YelpTransform *transform;
-
- xmlDocPtr xmldoc;
- xmlNodePtr xmlcur;
- gchar *cur_page_id;
- gchar *cur_prev_id;
-};
-
-
-static YelpDocument *toc_doc = NULL;
-
-static void toc_class_init (YelpTocClass *klass);
-static void toc_init (YelpToc *toc);
-static void toc_try_dispose (GObject *object);
-static void toc_dispose (GObject *object);
-
-/* YelpDocument */
-static void toc_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,
- YelpToc *toc);
-static void transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpToc *toc);
-static void transform_final_func (YelpTransform *transform,
- YelpToc *toc);
-
-/* Threaded */
-static void toc_process (YelpToc *toc);
-static void toc_process_info (YelpToc *toc);
-static void toc_process_man (YelpToc *toc);
-static void xml_trim_titles (xmlNodePtr node,
- xmlChar * nodetype);
-
-static YelpDocumentClass *parent_class;
-
-GType
-yelp_toc_get_type (void)
-{
- static GType type = 0;
- if (!type) {
- static const GTypeInfo info = {
- sizeof (YelpTocClass),
- NULL, NULL,
- (GClassInitFunc) toc_class_init,
- NULL, NULL,
- sizeof (YelpToc),
- 0,
- (GInstanceInitFunc) toc_init,
- };
- type = g_type_register_static (YELP_TYPE_DOCUMENT,
- "YelpToc",
- &info, 0);
- }
- return type;
-}
-
-static void
-toc_class_init (YelpTocClass *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 = toc_try_dispose;
-
- document_class->request = toc_request;
- document_class->cancel = NULL;
-
- g_type_class_add_private (klass, sizeof (YelpTocPriv));
-}
-
-static void
-toc_init (YelpToc *toc)
-{
- YelpTocPriv *priv;
- priv = toc->priv = YELP_TOC_GET_PRIVATE (toc);
-
- priv->state = TOC_STATE_BLANK;
-
- priv->man_processed = FALSE;
- priv->info_processed = FALSE;
-
- priv->mutex = g_mutex_new ();
-}
-
-static void
-toc_try_dispose (GObject *object)
-{
- YelpTocPriv *priv;
-
- g_assert (object != NULL && YELP_IS_TOC (object));
-
- priv = YELP_TOC (object)->priv;
-
- g_mutex_lock (priv->mutex);
- if (priv->process_running || priv->transform_running) {
- priv->state = TOC_STATE_STOP;
- g_idle_add ((GSourceFunc) toc_try_dispose, object);
- g_mutex_unlock (priv->mutex);
- } else {
- g_mutex_unlock (priv->mutex);
- toc_dispose (object);
- }
-}
-
-static void
-toc_dispose (GObject *object)
-{
- YelpToc *toc = YELP_TOC (object);
-
- toc_doc = NULL;
- if (toc->priv->xmldoc)
- xmlFreeDoc (toc->priv->xmldoc);
-
- g_free (toc->priv->cur_page_id);
- g_free (toc->priv->cur_prev_id);
-
- g_mutex_free (toc->priv->mutex);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-/******************************************************************************/
-
-YelpDocument *
-yelp_toc_new (void)
-{
- debug_print (DB_FUNCTION, "entering\n");
-
- if (toc_doc == NULL) {
- toc_doc = (YelpDocument *) g_object_new (YELP_TYPE_TOC, NULL);
- }
-
- return (YelpDocument *) toc_doc;
-}
-
-YelpDocument *
-yelp_toc_get (void)
-{
- debug_print (DB_FUNCTION, "entering\n");
-
- if (toc_doc == NULL) {
- toc_doc = (YelpDocument *) g_object_new (YELP_TYPE_TOC, NULL);
- }
-
- return (YelpDocument *) toc_doc;
-}
-
-
-/******************************************************************************/
-/** YelpDocument **************************************************************/
-
-static void
-toc_request (YelpDocument *document,
- gint req_id,
- gboolean handled,
- gchar *page_id,
- YelpDocumentFunc func,
- gpointer user_data)
-{
- YelpToc *toc;
- YelpTocPriv *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_TOC (document));
-
- if (handled)
- return;
-
- toc = YELP_TOC (document);
- priv = toc->priv;
-
- g_mutex_lock (priv->mutex);
-
- switch (priv->state) {
- case TOC_STATE_BLANK:
- priv->state = TOC_STATE_PARSING;
- priv->process_running = TRUE;
- priv->thread = g_thread_create ((GThreadFunc) toc_process,
- toc, FALSE, NULL);
- break;
- case TOC_STATE_PARSING:
- break;
- case TOC_STATE_PARSED:
- case TOC_STATE_STOP:
- error = yelp_error_new (_("Page not found"),
- _("The page %s was not found in the TOC."),
- page_id);
- 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,
- YelpToc *toc)
-{
- YelpTocPriv *priv;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (toc != NULL && YELP_IS_TOC (toc));
-
- priv = toc->priv;
- g_assert (transform == priv->transform);
-
- if (priv->state == TOC_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;
- priv->process_running = FALSE;
- return;
- }
-
- switch (signal) {
- case YELP_TRANSFORM_CHUNK:
- transform_page_func (transform, (gchar *) func_data, toc);
- break;
- case YELP_TRANSFORM_ERROR:
- yelp_document_error_pending (YELP_DOCUMENT (toc), (YelpError *) func_data);
- yelp_transform_release (transform);
- priv->transform = NULL;
- priv->transform_running = FALSE;
- priv->process_running = FALSE;
- break;
- case YELP_TRANSFORM_FINAL:
- transform_final_func (transform, toc);
- break;
- }
-}
-
-static void
-transform_page_func (YelpTransform *transform,
- gchar *page_id,
- YelpToc *toc)
-{
- YelpTocPriv *priv;
- gchar *content;
- debug_print (DB_FUNCTION, "entering\n");
-
- priv = toc->priv;
- g_mutex_lock (priv->mutex);
-
- content = yelp_transform_eat_chunk (transform, page_id);
-
-#if 0 /* Used for debugging */
- gchar * filename = NULL;
- filename = g_strdup_printf ("out/%s.html", page_id);
- g_file_set_contents (filename, content, -1, NULL);
-#endif
-
- yelp_document_add_page (YELP_DOCUMENT (toc), page_id, content);
-
- g_free (page_id);
-
- g_mutex_unlock (priv->mutex);
-}
-
-static void
-transform_final_func (YelpTransform *transform, YelpToc *toc)
-{
- YelpError *error;
- YelpTocPriv *priv = toc->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 TOC."));
- yelp_document_final_pending (YELP_DOCUMENT (toc), error);
-
- yelp_transform_release (priv->transform);
- priv->transform = NULL;
-
- priv->transform_running = FALSE;
- priv->process_running = FALSE;
- priv->state = TOC_STATE_PARSED;
-
- if (priv->xmldoc) {
- xmlFreeDoc (priv->xmldoc);
- }
- priv->xmldoc = NULL;
-
- g_mutex_unlock (priv->mutex);
-}
-
-
-/******************************************************************************/
-/** Threaded ******************************************************************/
-
-static int
-rrn_add_document (void *reg, void * user_data)
-{
- xmlNodePtr node = (xmlNodePtr) user_data;
- RrnReg *r = (RrnReg *) reg;
- xmlNodePtr new;
- gchar *tmp;
- new = xmlNewChild (node, NULL, BAD_CAST "doc", NULL);
- xmlNewNsProp (new, NULL, BAD_CAST "href", BAD_CAST r->uri);
- xmlNewTextChild (new, NULL, BAD_CAST "title", BAD_CAST r->name);
- xmlNewTextChild (new, NULL, BAD_CAST "description", BAD_CAST r->comment);
- tmp = g_strdup_printf ("%d", r->weight);
- xmlNewNsProp (new, NULL, BAD_CAST "weight", BAD_CAST tmp);
- g_free (tmp);
- return FALSE;
-}
-
-static void
-toc_process (YelpToc *toc)
-{
- YelpTocPriv *priv;
- YelpError *error = NULL;
- xmlParserCtxtPtr parserCtxt = NULL;
- YelpDocument *document;
- gint params_i = 0;
- gint params_max = 10;
- gchar **params = NULL;
- GtkIconInfo *info = NULL ;
- GtkIconTheme *theme = (GtkIconTheme *) yelp_settings_get_icon_theme ();
-
- GThread *info_thread;
- GThread *man_thread;
- xmlXPathContextPtr xpath;
- xmlXPathObjectPtr obj;
- gint i;
- debug_print (DB_FUNCTION, "entering\n");
-
- g_assert (toc != NULL && YELP_IS_TOC (toc));
- g_object_ref (toc);
- priv = toc->priv;
- document = YELP_DOCUMENT (toc);
-
- parserCtxt = xmlNewParserCtxt ();
- priv->xmldoc = xmlCtxtReadFile (parserCtxt,
- (const char *) DATADIR "/yelp/toc.xml", NULL,
- XML_PARSE_DTDLOAD | XML_PARSE_NOCDATA |
- XML_PARSE_NOENT | XML_PARSE_NONET );
-
- if (priv->xmldoc == NULL) {
- error = yelp_error_new (_("Could not parse file"),
- _("The TOC file "
- "could not be parsed because it is"
- " not a well-formed XML document."));
- yelp_document_error_pending (document, error);
- goto done;
- }
-
- xpath = xmlXPathNewContext (priv->xmldoc);
- obj = xmlXPathEvalExpression (BAD_CAST "//toc", xpath);
-
- for (i = 0; i < obj->nodesetval->nodeNr; i++) {
- xmlNodePtr node = obj->nodesetval->nodeTab[i];
- xmlChar *icon = NULL;
- xmlChar *id = NULL;
-
- xmlNodeSetLang (node, BAD_CAST g_get_language_names ()[0]);
-
- xml_trim_titles (node, BAD_CAST "title");
- xml_trim_titles (node, BAD_CAST "description");
-
- icon = xmlGetProp (node, BAD_CAST "icon");
- if (icon) {
- info = gtk_icon_theme_lookup_icon (theme, (gchar *) icon, 48,
- GTK_ICON_LOOKUP_NO_SVG);
- if (info) {
- xmlNodePtr new = xmlNewChild (node, NULL, BAD_CAST "icon",
- NULL);
- xmlNewNsProp (new, NULL, BAD_CAST "file",
- BAD_CAST gtk_icon_info_get_filename (info));
- gtk_icon_info_free (info);
- }
- }
- xmlFree (icon);
- id = xmlGetProp (node, BAD_CAST "id");
-
- if (id) {
- if (g_str_equal (id, "Core"))
- xmlSetProp (node, BAD_CAST "id", BAD_CAST "index");
- rrn_for_each_in_category (rrn_add_document,
- (char *) id,
- (void *) node);
- xmlFree (id);
- }
-
- }
- xmlXPathFreeObject (obj);
-
- man_thread = g_thread_create ((GThreadFunc) toc_process_man, toc, TRUE, NULL);
- if (!man_thread) {
- g_warning ("Could not create Man page thread");
- priv->man_processed = TRUE;
- }
-
- info_thread = g_thread_create ((GThreadFunc) toc_process_info, toc, TRUE, NULL);
- if (!info_thread) {
- g_warning ("Could not create Info page thread");
- priv->info_processed = TRUE;
- }
-
- params = g_new0 (gchar *, params_max);
- yelp_settings_params (&params, &params_i, &params_max);
-
- if ((params_i + 10) >= params_max - 1) {
- params_max += 10;
- params = g_renew (gchar *, params, params_max);
- }
-
- info = gtk_icon_theme_lookup_icon (theme, "yelp-icon-big", 192, 0);
- if (info) {
- params[params_i++] = g_strdup ("help_icon");
- params[params_i++] = g_strdup_printf ("\"%s\"",
- gtk_icon_info_get_filename (info));
- params[params_i++] = g_strdup ("help_icon_size");
- params[params_i++] = g_strdup_printf ("%i",
- gtk_icon_info_get_base_size (info));
- gtk_icon_info_free (info);
- }
-
- params[params_i] = NULL;
-
- while (!priv->info_processed || !priv->man_processed) {
- g_thread_yield ();
- }
-
- g_mutex_lock (priv->mutex);
-
- priv->transform = yelp_transform_new (STYLESHEET,
- (YelpTransformFunc) transform_func,
- toc);
- priv->transform_running = TRUE;
-
- yelp_transform_start (priv->transform,
- priv->xmldoc,
- params);
- g_strfreev (params);
- g_mutex_unlock (priv->mutex);
-
- done:
- if (parserCtxt)
- xmlFreeParserCtxt (parserCtxt);
-
- g_object_unref (toc);
-}
-
-
-static void
-xml_trim_titles (xmlNodePtr node, xmlChar * nodetype)
-{
- xmlNodePtr cur, keep = NULL;
- xmlChar *keep_lang = NULL;
- int j, keep_pri = INT_MAX;
-
- const gchar * const * langs = g_get_language_names ();
-
- for (cur = node->children; cur; cur = cur->next) {
- if (!xmlStrcmp (cur->name, nodetype)) {
- xmlChar *cur_lang = NULL;
- int cur_pri = INT_MAX;
- 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])) {
- cur_pri = j;
- break;
- }
- }
- } else {
- cur_pri = INT_MAX - 1;
- }
- if (cur_pri <= keep_pri) {
- if (keep_lang)
- xmlFree (keep_lang);
- keep_lang = cur_lang;
- keep_pri = cur_pri;
- keep = cur;
- } else {
- if (cur_lang)
- xmlFree (cur_lang);
- }
- }
- }
- cur = node->children;
- while (cur) {
- xmlNodePtr this = cur;
- cur = cur->next;
- if (!xmlStrcmp (this->name, nodetype)) {
- if (this != keep) {
- xmlUnlinkNode (this);
- xmlFreeNode (this);
- }
- }
- }
- xmlFree (keep_lang);
-}
-
-static int
-rrn_info_add_document (RrnInfoEntry *entry, void *user_data)
-{
- xmlNodePtr node = (xmlNodePtr) user_data;
- xmlNodePtr new;
- gchar *tmp;
-
- new = xmlNewChild (node, NULL, BAD_CAST "doc", NULL);
- if (entry->section)
- tmp = g_strdup_printf("info:%s#%s", entry->name, entry->section);
- else
- tmp = g_strdup_printf("info:%s", entry->name);
- xmlNewNsProp (new, NULL, BAD_CAST "href", BAD_CAST tmp);
- xmlNewTextChild (new, NULL, BAD_CAST "title", BAD_CAST entry->doc_name);
- xmlNewTextChild (new, NULL, BAD_CAST "description", BAD_CAST entry->comment);
- g_free(tmp);
- return TRUE;
-
-}
-
-static void
-toc_process_info (YelpToc *toc)
-{
- xmlNodePtr node = NULL;
- xmlNodePtr cat_node = NULL;
- xmlNodePtr mynode = NULL;
- char **categories = NULL;
- char **cat_iter = NULL;
- int sectno = 0;
- YelpTocPriv * priv = toc->priv;
- int i;
- xmlXPathContextPtr xpath;
- xmlXPathObjectPtr obj;
- xmlDocPtr info_doc;
- xmlParserCtxtPtr parserCtxt = NULL;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- parserCtxt = xmlNewParserCtxt ();
-
- info_doc = xmlCtxtReadFile (parserCtxt,
- DATADIR "/yelp/info.xml", NULL,
- XML_PARSE_NOBLANKS |
- XML_PARSE_NOCDATA |
- XML_PARSE_NOENT |
- XML_PARSE_NOERROR |
- XML_PARSE_NONET );
-
- if (!info_doc) {
- g_warning ("Could not process info TOC");
- goto done;
- }
-
- g_mutex_lock (priv->mutex);
- yelp_document_add_page_id (YELP_DOCUMENT (toc), (gchar *) "Info", (gchar *) "Info");
- g_mutex_unlock (priv->mutex);
-
- xpath = xmlXPathNewContext (info_doc);
- obj = xmlXPathEvalExpression (BAD_CAST "//toc", xpath);
- node = obj->nodesetval->nodeTab[0];
- for (i=0; i < obj->nodesetval->nodeNr; i++) {
- xmlNodePtr tmpnode = obj->nodesetval->nodeTab[i];
- xml_trim_titles (tmpnode, BAD_CAST "title");
- xml_trim_titles (tmpnode, BAD_CAST "description");
- }
- xmlXPathFreeObject (obj);
- xmlXPathFreeContext (xpath);
-
- categories = rrn_info_get_categories ();
- cat_iter = categories;
-
- while (cat_iter && *cat_iter) {
- char *tmp;
-
- cat_node = xmlNewChild (node, NULL, BAD_CAST "toc",
- NULL);
- tmp = g_strdup_printf ("%d", sectno);
- xmlNewNsProp (cat_node, NULL, BAD_CAST "sect",
- BAD_CAST tmp);
- g_free (tmp);
- tmp = g_strdup_printf ("infosect%d", sectno);
- g_mutex_lock (priv->mutex);
- yelp_document_add_page_id (YELP_DOCUMENT (toc), (gchar *) tmp, (gchar *) tmp);
- g_mutex_unlock (priv->mutex);
-
- xmlNewNsProp (cat_node, NULL, BAD_CAST "id",
- BAD_CAST tmp);
- g_free (tmp);
- sectno++;
- xmlNewTextChild (cat_node, NULL, BAD_CAST "title",
- BAD_CAST *cat_iter);
-
- rrn_info_for_each_in_category (*cat_iter, (RrnInfoForeachFunc) rrn_info_add_document,
- cat_node);
- cat_iter++;
- }
-
- mynode = xmlCopyNode (xmlDocGetRootElement (info_doc), 1);
-
- g_mutex_lock (priv->mutex);
- xmlAddChild (xmlDocGetRootElement (priv->xmldoc), mynode);
- g_mutex_unlock (priv->mutex);
-
- xmlFreeDoc (info_doc);
-
-
- done:
- if (parserCtxt)
- xmlFreeParserCtxt (parserCtxt);
- g_mutex_lock (priv->mutex);
- priv->info_processed = TRUE;
- g_mutex_unlock (priv->mutex);
-}
-
-static int
-rrn_add_man_document (RrnManEntry *entry, void *user_data)
-{
- xmlNodePtr node = (xmlNodePtr) user_data;
- xmlNodePtr new;
- gchar *tmp;
-
- new = xmlNewChild (node, NULL, BAD_CAST "doc", NULL);
- tmp = g_strdup_printf ("man:%s", entry->path);
-
- xmlNewNsProp (new, NULL, BAD_CAST "href", BAD_CAST tmp);
- xmlNewTextChild (new, NULL, BAD_CAST "title", BAD_CAST entry->name);
- if (entry->comment)
- xmlNewTextChild (new, NULL, BAD_CAST "description", BAD_CAST entry->comment);
- g_free(tmp);
-
- return TRUE;
-}
-
-void
-toc_process_man (YelpToc *toc)
-{
- xmlNodePtr cat_node = NULL;
- xmlNodePtr mynode = NULL;
- YelpTocPriv * priv = toc->priv;
- int i, j;
- xmlXPathContextPtr xpath;
- xmlXPathObjectPtr obj;
- xmlDocPtr man_doc;
- xmlParserCtxtPtr parserCtxt = NULL;
-
- debug_print (DB_FUNCTION, "entering\n");
-
- parserCtxt = xmlNewParserCtxt ();
-
- man_doc = xmlCtxtReadFile (parserCtxt, DATADIR "/yelp/man.xml", NULL,
- XML_PARSE_NOBLANKS | XML_PARSE_NOCDATA |
- XML_PARSE_NOENT | XML_PARSE_NOERROR |
- XML_PARSE_NONET );
- if (!man_doc) {
- g_warning ("Could not process man TOC");
- goto done;
- }
-
- xpath = xmlXPathNewContext (man_doc);
- obj = xmlXPathEvalExpression (BAD_CAST "//toc", xpath);
-
- for (i = 0; i < obj->nodesetval->nodeNr; i++) {
- xmlNodePtr node = obj->nodesetval->nodeTab[i];
- xmlChar *sect = xmlGetProp (node, BAD_CAST "sect");
- xmlChar *id = xmlGetProp (node, BAD_CAST "id");
-
- if (sect) {
- gchar **sects = g_strsplit ((gchar *)sect, " ", 0);
-
- g_mutex_lock (priv->mutex);
- yelp_document_add_page_id (YELP_DOCUMENT (toc), (gchar *) id, (gchar *) id);
- g_mutex_unlock (priv->mutex);
-
- cat_node = xmlNewChild (node, NULL, BAD_CAST "toc",
- NULL);
- for (j = 0; sects[j] != NULL; j++) {
- rrn_man_for_each_in_category (sects[j], (RrnManForeachFunc) rrn_add_man_document, node);
- }
- g_strfreev (sects);
- }
- xmlFree (sect);
- xmlFree (id);
- xml_trim_titles (node, BAD_CAST "title");
- xml_trim_titles (node, BAD_CAST "description");
- }
- xmlXPathFreeObject (obj);
- xmlXPathFreeContext (xpath);
-
- mynode = xmlCopyNode (xmlDocGetRootElement (man_doc), 1);
-
- g_mutex_lock (priv->mutex);
- xmlAddChild (xmlDocGetRootElement (priv->xmldoc), mynode);
- g_mutex_unlock (priv->mutex);
-
- xmlFreeDoc (man_doc);
-
- done:
- if (parserCtxt)
- xmlFreeParserCtxt (parserCtxt);
- g_mutex_lock (priv->mutex);
- priv->man_processed = TRUE;
- g_mutex_unlock (priv->mutex);
-}
diff --git a/src/yelp-toc.h b/src/yelp-toc.h
deleted file mode 100644
index 83b6e919..00000000
--- a/src/yelp-toc.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-/*
- * Copyright (C) 2003-2007 Don Scorgie <Don@Scorgie.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 <Don@Scorgie.org>
- */
-
-#ifndef __YELP_TOC_H__
-#define __YELP_TOC_H__
-
-#include <glib-object.h>
-
-#include "yelp-document.h"
-
-#define YELP_TYPE_TOC (yelp_toc_get_type ())
-#define YELP_TOC(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), YELP_TYPE_TOC, YelpToc))
-#define YELP_TOC_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), YELP_TYPE_TOC, YelpTocClass))
-#define YELP_IS_TOC(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), YELP_TYPE_TOC))
-#define YELP_IS_TOC_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), YELP_TYPE_TOC))
-#define YELP_TOC_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), YELP_TYPE_TOC, YelpTocClass))
-
-typedef struct _YelpToc YelpToc;
-typedef struct _YelpTocClass YelpTocClass;
-typedef struct _YelpTocPriv YelpTocPriv;
-
-struct _YelpToc {
- YelpDocument parent;
- YelpTocPriv *priv;
-};
-
-struct _YelpTocClass {
- YelpDocumentClass parent_class;
-};
-
-GType yelp_toc_get_type (void);
-YelpDocument * yelp_toc_new (void);
-YelpDocument * yelp_toc_get (void);
-
-#endif /* __YELP_TOC_H__ */
diff --git a/src/yelp-utils.c b/src/yelp-utils.c
deleted file mode 100644
index 09a37247..00000000
--- a/src/yelp-utils.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; 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.
- *
- * Authors: Shaun McCance <shaunm@gnome.org>
- * Brent Smith <gnome@nextreality.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include <string.h>
-#define I_KNOW_RARIAN_0_8_IS_UNSTABLE
-#include <rarian.h>
-
-#include "yelp-utils.h"
-#include "yelp-debug.h"
-
-
-YelpRrnType resolve_process_ghelp (char *uri,
- gchar **result);
-gchar * resolve_get_section (const gchar *uri);
-gboolean resolve_is_man_path (const gchar *path,
- const gchar *encoding);
-YelpRrnType resolve_full_file (const gchar *path);
-YelpRrnType resolve_man_page (const gchar *name,
- gchar **result,
- gchar **section);
-gchar * resolve_remove_section (const gchar *uri,
- const gchar *sect);
-
-YelpRrnType
-resolve_process_ghelp (char *uri, gchar **result)
-{
- gboolean uncertain;
- RrnReg *reg = rrn_find_from_ghelp (&uri[6]);
- YelpRrnType type = YELP_RRN_TYPE_ERROR;
-
- if (!strncmp (uri, "ghelp:", 6)) {
- reg = rrn_find_from_ghelp (&uri[6]);
- } else if (!strncmp (uri, "gnome-help:", 11)) {
- reg = rrn_find_from_ghelp (&uri[11]);
- } else {
- g_warning ("Trying to resolve a ghelp URI from a non-ghelp string.");
- return YELP_RRN_TYPE_ERROR;
- }
-
-
- if (reg) {
- gchar *mime = NULL;
- if (g_str_has_prefix (reg->uri, "file:"))
- *result = g_strdup (&reg->uri[5]);
- else
- *result = g_strdup (reg->uri);
-
- /* mime types are horrible in omf-translated files */
- if (reg->type && *(reg->type))
- mime = g_strdup (reg->type);
- else
- mime = g_content_type_guess (*result, NULL, 0, &uncertain);
-
- if (!mime) {
- type = YELP_RRN_TYPE_ERROR;
- } else if (g_str_equal (mime, "text/xml") ||
- g_str_equal (mime, "application/docbook+xml") ||
- g_str_equal (mime, "application/xml"))
- type = YELP_RRN_TYPE_DOC;
- else if (g_str_equal (mime, "text/html"))
- type = YELP_RRN_TYPE_HTML;
- else if (g_str_equal (mime, "application/xhtml+xml"))
- type = YELP_RRN_TYPE_XHTML;
- else if (g_str_equal (mime, "text/plain"))
- type = YELP_RRN_TYPE_TEXT;
-
- }
- else if (uri[6] == '/') {
- gint file_cut = 6;
- /* If a full file path after ghelp:, see if the file
- * exists and return type if it does
- */
- while (uri[file_cut] == '/' && uri[file_cut+1] == '/')
- file_cut++;
- type = resolve_full_file (&uri[file_cut]);
- *result = g_strdup (&uri[file_cut]);
- }
- else {
- const gchar * const *dirs = g_get_system_data_dirs ();
- gchar *dir, *hash;
- gint i;
- hash = strchr (uri + 6, '#');
- if (hash) {
- dir = g_strndup (uri + 6, hash + 6);
- hash++;
- } else {
- dir = g_strdup (uri + 6);
- hash = NULL;
- }
- for (i = 0; type != YELP_RRN_TYPE_MAL && dirs[i]; i++) {
- gchar *path = g_strdup_printf ("%sgnome/help/%s", dirs[i], dir);
- if (g_file_test (path, G_FILE_TEST_IS_DIR)) {
- const gchar * const *langs = g_get_language_names ();
- gint j;
- for (j = 0; type != YELP_RRN_TYPE_MAL && langs[j]; j++) {
- gchar *index = g_strdup_printf ("%sgnome/help/%s/%s/index.page", dirs[i], dir, langs[j]);
- if (g_file_test (index, G_FILE_TEST_IS_REGULAR)) {
- type = YELP_RRN_TYPE_MAL;
- *result = g_strdup_printf ("%sgnome/help/%s/%s/", dirs[i], dir, langs[j]);
- }
- g_free (index);
- }
- }
- g_free (path);
- }
- g_free (dir);
- }
-
- return type;
-}
-
-gchar *
-resolve_get_section (const gchar *uri)
-{
- gchar *sect_delimit;
- gchar *sect;
-
- sect_delimit = strrchr (uri, '#');
- if (!sect_delimit) {
- sect_delimit = strrchr (uri, '?');
- }
- if (!sect_delimit) {
- return NULL;
- }
- sect = g_strdup (sect_delimit+1);
-
- return sect;
-}
-
-gboolean
-resolve_is_man_path (const gchar *path, const gchar *encoding)
-{
- gchar **cats;
- gchar **iter;
-
- cats = rrn_man_get_categories ();
-
- iter = cats;
-
- if (encoding && *encoding) {
- while (iter && *iter) {
- gchar *ending = g_strdup_printf ("%s.%s", *iter, encoding);
- if (g_str_has_suffix (path, ending)) {
- g_free (ending);
- return TRUE;
- }
- g_free (ending);
- iter++;
- }
- } else {
- while (iter && *iter) {
- if (g_str_has_suffix (path, *iter)) {
- return TRUE;
- }
- iter++;
- }
- }
- return FALSE;
-}
-
-YelpRrnType
-resolve_full_file (const gchar *path)
-{
- gchar *mime_type;
- gboolean uncertain;
-
- YelpRrnType type = YELP_RRN_TYPE_ERROR;
-
- if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
- return YELP_RRN_TYPE_ERROR;
- }
-
- mime_type = g_content_type_guess (path, NULL, 0, &uncertain);
- if (mime_type == NULL) {
- return YELP_RRN_TYPE_ERROR;
- }
-
- if (g_file_test (path, G_FILE_TEST_IS_DIR)) {
- type = YELP_RRN_TYPE_MAL;
- }
- else if (g_str_equal (mime_type, "text/xml") ||
- g_str_equal (mime_type, "application/docbook+xml") ||
- g_str_equal (mime_type, "application/xml")) {
- type = YELP_RRN_TYPE_DOC;
- }
- else if (g_str_equal (mime_type, "text/html")) {
- type = YELP_RRN_TYPE_HTML;
- }
- else if (g_str_equal (mime_type, "application/xhtml+xml")) {
- type = YELP_RRN_TYPE_XHTML;
- }
- else if (g_str_equal (mime_type, "application/x-gzip")) {
- if (g_str_has_suffix (path, ".info.gz")) {
- type = YELP_RRN_TYPE_INFO;
- } else if (resolve_is_man_path (path, "gz")) {
- type = YELP_RRN_TYPE_MAN;
- }
-
- }
- else if (g_str_equal (mime_type, "application/x-bzip")) {
- if (g_str_has_suffix (path, ".info.bz2")) {
- type = YELP_RRN_TYPE_INFO;
- } else if (resolve_is_man_path (path, "bz2")) {
- type = YELP_RRN_TYPE_MAN;
- }
- }
- else if (g_str_equal (mime_type, "application/x-lzma")) {
- if (g_str_has_suffix (path, ".info.lzma")) {
- type = YELP_RRN_TYPE_INFO;
- } else if (resolve_is_man_path (path, "lzma")) {
- type = YELP_RRN_TYPE_MAN;
- }
- }
- else if (g_str_equal (mime_type, "application/octet-stream")) {
- if (g_str_has_suffix (path, ".info")) {
- type = YELP_RRN_TYPE_INFO;
- } else if (resolve_is_man_path (path, NULL)) {
- type = YELP_RRN_TYPE_MAN;
- }
- }
- else if (g_str_equal (mime_type, "text/plain")) {
- if (g_str_has_suffix (path, ".info")) {
- type = YELP_RRN_TYPE_INFO;
- } else if (resolve_is_man_path (path, NULL)) {
- type = YELP_RRN_TYPE_MAN;
- } else {
- type = YELP_RRN_TYPE_TEXT;
- }
- }
- else {
- type = YELP_RRN_TYPE_EXTERNAL;
- }
-
- g_free (mime_type);
- return type;
-
-}
-
-YelpRrnType
-resolve_man_page (const gchar *name, gchar **result, gchar **section)
-{
- /* Various ways the path could be presented:
- * filename - full filename after man:
- * name(section) - resolve to a particular section
- * name.section - ditto. This must be tested twice. Once for full filename and
- * once for section
- * name#section - ditto, though this is never used, just added for completeness
- * name - resolve to the first one found
- */
- gchar *lbrace = NULL;
- gchar *rbrace = NULL;
- gchar *sect = NULL;
- gchar *real_name = NULL;
- gboolean repeat = FALSE;
- RrnManEntry *entry = NULL;
-
- lbrace = strrchr (name, '(');
- if (lbrace) {
- rbrace = strrchr (name, ')');
- if (rbrace) {
- sect = g_strndup (lbrace+1, rbrace - lbrace - 1);
- real_name = g_strndup (name, lbrace - name);
- } else {
- sect = NULL;
- real_name = strdup (name);
- }
- } else {
- lbrace = strrchr (name, '.');
- if (lbrace) {
- repeat = TRUE;
- sect = strdup (lbrace+1);
- real_name = g_strndup (name, lbrace - name);
- } else {
- lbrace = strrchr (name, '#');
- if (lbrace) {
- sect = strdup (lbrace+1);
- real_name = g_strndup (name, lbrace - name);
- } else {
- real_name = strdup (name);
- sect = NULL;
- }
- }
- }
- if (g_file_test (real_name, G_FILE_TEST_EXISTS)) {
- /* Full filename */
- *result = g_strdup (real_name);
- return YELP_RRN_TYPE_MAN;
- } else if (g_file_test (name, G_FILE_TEST_EXISTS)) {
- /* Full filename */
- *result = g_strdup (name);
- return YELP_RRN_TYPE_MAN;
- }
-
- entry = rrn_man_find_from_name (real_name, sect);
-
- if (entry) {
- *result = strdup (entry->path);
- /**section = strdup (entry->section);*/
- return YELP_RRN_TYPE_MAN;
- } else if (repeat) {
- entry = rrn_man_find_from_name ((char *) name, NULL);
- if (entry) {
- *result = strdup (entry->path);
- /**section = strdup (entry->section);*/
- return YELP_RRN_TYPE_MAN;
- }
- }
- return YELP_RRN_TYPE_ERROR;
-}
-
-
-gchar *
-resolve_remove_section (const gchar *uri, const gchar *sect)
-{
- if (sect)
- return (g_strndup (uri, (strlen(uri) - strlen(sect) - 1 /*for the delimiter char */)));
- else
- return (g_strdup (uri));
-}
-
-YelpRrnType
-yelp_uri_resolve (gchar *uri, gchar **result, gchar **section)
-{
- YelpRrnType ret = YELP_RRN_TYPE_ERROR;
- gchar *intern_section = NULL;
- gchar *intern_uri = NULL;
- g_assert (result != NULL);
- if (*result != NULL) {
- g_warning ("result is not empty: %s.", *result);
- return ret;
- }
- g_assert (section != NULL);
- if (*section != NULL) {
- g_warning ("section is not empty: %s.", *section);
- return ret;
- }
- if (uri == NULL) {
- g_warning ("URI is NULL");
- return ret;
- }
- intern_section = resolve_get_section(uri);
- intern_uri = resolve_remove_section (uri, intern_section);
-
- if (intern_section && g_str_equal (intern_section, "")) {
- intern_section = NULL;
- }
-
- if (!strncmp (uri, "ghelp:", 6) || !strncmp (uri, "gnome-help:", 11)) {
- ret = resolve_process_ghelp (intern_uri, result);
- if (*result) {
- *section = intern_section;
- }
- } else if (!strncmp (uri, "man:", 4)) {
- ret = resolve_man_page (&uri[4], result, section);
- if (ret == YELP_RRN_TYPE_ERROR) {
- *result = NULL;
- *section = NULL;
- }
- /* Man page */
- } else if (!strncmp (uri, "info:", 5)) {
- /* info page */
-
- gchar *info_name = intern_uri;
- gchar *info_sect = intern_section;
- gboolean free_stuff = FALSE;
- RrnInfoEntry *entry = NULL;
-
- if (g_str_equal (&uri[5], "dir")) {
- *section = g_strdup ("info");
- *result = NULL;
- ret = YELP_RRN_TYPE_TOC;
- if (intern_uri)
- g_free (intern_uri);
- return ret;
- }
-
- if (!intern_section) {
- gchar *lbrace = NULL;
- gchar *rbrace = NULL;
- lbrace = strchr (info_name, '(');
- rbrace = strchr (info_name, ')');
- if (lbrace && rbrace) {
- info_name = g_strndup (lbrace+1, (rbrace-lbrace-1));
- info_sect = g_strdup (rbrace+1);
- free_stuff = TRUE;
- } else {
- info_name += 5;
- }
- } else {
- info_name += 5;
- }
-
- entry = rrn_info_find_from_uri (info_name, info_sect);
- if (entry) {
- ret = YELP_RRN_TYPE_INFO;
- if (entry->section)
- *section = g_strdup (entry->section);
- else
- *section = g_strdup (intern_section);
- *result = g_strdup (entry->base_filename);
- } else {
- ret = resolve_man_page (&uri[5], result, section);
- if (!ret) {
- ret = YELP_RRN_TYPE_ERROR;
- *section = NULL;
- *result = NULL;
- }
- }
- if (free_stuff) {
- g_free (info_name);
- g_free (info_sect);
- }
- } else if (!strncmp (uri, "file:", 5)) {
- int file_cut = 5;
- while (uri[file_cut+1] == '/')
- file_cut++;
- ret = resolve_full_file (&intern_uri[file_cut]);
- if (ret == YELP_RRN_TYPE_EXTERNAL) {
- *result = g_strdup (&uri[file_cut]);
- *section = NULL;
- }
- else if (ret == YELP_RRN_TYPE_ERROR) {
- *result = NULL;
- *section = NULL;
- } else {
- *result = g_strdup (&intern_uri[file_cut]);
- *section = intern_section;
- }
- /* full file path. Ensure file exists and determine type */
- } else if (!strncmp (uri, "x-yelp-toc:", 11)) {
- ret = YELP_RRN_TYPE_TOC;
- if (strlen (uri) > 11) {
- gint frag = 11;
- while (uri[frag] == '#' || uri[frag] == '?')
- frag++;
- *section = g_strdup (&uri[frag]);
- } else {
- *section = g_strdup("index");
- }
- *result = g_strdup ("x-yelp-toc:");
- /* TOC page */
- } else if (!strncmp (uri, "x-yelp-search:", 14)) {
- /* Search pager request. *result contains the search terms */
- *result = g_strdup (uri);
- *section = g_strdup ("results");
- ret = YELP_RRN_TYPE_SEARCH;
- } else if (g_file_test (intern_uri, G_FILE_TEST_EXISTS)) {
- gchar *copy_uri;
- /* Full path */
- /* Check to see if the file is in the current directory */
- if (intern_uri[0] != '/' &&
- strstr (intern_uri, ":/") == NULL) {
- /* Probably current dir - get the current directory,
- * put it on the front and see if it exists */
- gchar *current_path = NULL;
- gchar *new_uri = NULL;
-
- current_path = g_get_current_dir();
-
- new_uri = g_strdup_printf ("%s/%s", current_path,
- intern_uri);
- printf ("new_uri: %s\n", new_uri);
-
- if (g_file_test (new_uri, G_FILE_TEST_EXISTS)) {
- copy_uri = g_strdup (new_uri);
- } else {
- copy_uri = g_strdup (intern_uri);
- }
- g_free (current_path);
- g_free (new_uri);
- } else {
- copy_uri = g_strdup (intern_uri);
- }
-
- ret = resolve_full_file (intern_uri);
- if (ret == YELP_RRN_TYPE_EXTERNAL) {
- *section = NULL;
- *result = copy_uri;
- }
- else if (ret == YELP_RRN_TYPE_ERROR) {
- *section = NULL;
- *result = NULL;
- } else {
- *result = copy_uri;
- *section = g_strdup (intern_section);
- }
- } else if (*uri == '/' || g_str_has_suffix (uri, ".xml")) {
- /* Quite probable it was supposed to be ours, but
- * the file doesn't exist. Hence, we should bin it
- */
- ret = YELP_RRN_TYPE_ERROR;
- *result = NULL;
- *section = NULL;
- } else {
- /* We really don't care what it is. It's not ours. Let
- * someone else handle it
- */
- ret = YELP_RRN_TYPE_EXTERNAL;
- *result = g_strdup (uri);
- *section = NULL;
- }
-
- if (intern_uri)
- g_free (intern_uri);
- return ret;
-}
diff --git a/src/yelp-utils.h b/src/yelp-utils.h
deleted file mode 100644
index f0c35cac..00000000
--- a/src/yelp-utils.h
+++ /dev/null
@@ -1,58 +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_UTILS_H__
-#define __YELP_UTILS_H__
-
-#include <glib/gi18n.h>
-
-typedef enum {
- YELP_RRN_TYPE_DOC = 0,
- YELP_RRN_TYPE_MAL,
- YELP_RRN_TYPE_MAN,
- YELP_RRN_TYPE_INFO,
- YELP_RRN_TYPE_TEXT,
- YELP_RRN_TYPE_HTML,
- YELP_RRN_TYPE_XHTML,
- YELP_RRN_TYPE_TOC,
- YELP_RRN_TYPE_SEARCH,
- YELP_RRN_TYPE_NOT_FOUND,
- YELP_RRN_TYPE_EXTERNAL,
- YELP_RRN_TYPE_ERROR
-} YelpRrnType;
-
-
-/* Generic resolver function. Takes in the uri (which can be
- * anything) and returns the type (enum above)
- * The result is filled with a new string that the callee
- * must free, except when returning YELP_TYPE_ERROR, when it will
- * be NULL. The result is the base filename for the document.
- * The section will be filled when the requested uri has a section
- * otherwise, it will be NULL
- * Both *result and *section must be NULL when calling (otherwise
- * we throw an error
- */
-YelpRrnType yelp_uri_resolve (gchar *uri,
- gchar **result,
- gchar **section);
-
-#endif /* __YELP_UTILS_H__ */
diff --git a/stylesheets/.cvsignore b/stylesheets/.cvsignore
deleted file mode 100644
index 219709c5..00000000
--- a/stylesheets/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-Makefile
-Makefile.in
-l10n.xml
-db2html.xsl
-db-title.xsl
diff --git a/stylesheets/ChangeLog b/stylesheets/ChangeLog
deleted file mode 100644
index b9be378f..00000000
--- a/stylesheets/ChangeLog
+++ /dev/null
@@ -1,506 +0,0 @@
-==================== 2.23.2 ====================
-
-==================== 2.11.92 ====================
-
-2004-01-08 Shaun McCance <shaunm@gnome.org>
-No longer using this file. See ../ChangeLog for future changes.
-
-2004-01-08 Shaun McCance <shaunm@gnome.org>
-
- * stylesheets/Makefile.am:
- * stylesheets/db2html-block.xsl:
- * stylesheets/db2html-glossary.xsl:
- * stylesheets/db2html-header.xsl:
- * stylesheets/db2html-html.xsl:
- * stylesheets/db2html-inline.xsl:
- * stylesheets/db2html-titlepage.xsl:
- * stylesheets/db2html-toc.xsl:
- * stylesheets/db2html-xref.xsl:
- * stylesheets/gettext.xsl:
- * stylesheets/l10n.xml:
- * stylesheets/l10n.xml.in:
- - Made translations work in XSLT, still need to do plurals.
-
-2004-01-02 Shaun McCance <shaunm@gnome.org>
-
- * stylesheets/db2html-param.xsl
- - Implement yelp:chunk-depth PI.
-
-2004-01-01 Shaun McCance <shaunm@gnome.org>
-
- * db2html-header.xsl:
- - Actually implement 'header' for all relevant elements.
-
- * db2html-html.xsl:
- - Some formattings changes.
-
- * db2html-toc.xsl:
- - Don't replicate the 'xref' template. That's silly.
-
- * db2html-xref.xsl:
- - Do links properly. Duh.
-
-2003-12-30 Shaun McCance <shaunm@gnome.org>
-
- * db2html-html.xsl:
- - Some fancification to the navbar.
-
-2003-12-30 Shaun McCance <shaunm@gnome.org>
-
- * db2html-html.xsl:
- - Make admonitions use the only theme color we have for now.
-
- * db2html-list.xsl:
- - Don't bold varlistentry/term. I might change this back.
-
-2003-12-29 Shaun McCance <shaunm@gnome.org>
-
- * db2html-division.xsl:
- - Pull titles from articleinfo and bookinfo when necessary.
-
-2003-12-29 Shaun McCance <shaunm@gnome.org>
-
- * db2html-header.xsl
- - Implement @label attribute.
-
- * db2html-html.xsl:
- * db2html-navbar.xsl:
- - Fixes for prev/next links.
-
- * db2html-toc.xsl:
- - Deboldify section titles.
-
-2003-12-29 Shaun McCance <shaunm@gnome.org>
-
- * db2html-html.xsl:
- - Put classsynopsis in a gray box.
- - Monospace tt, since gtkhtml2 doesn't.
-
- * db2html-index.xsl:
- - Remove indexterm, as it's already in -suppressed.xsl.
-
- * db2html-synopsis.xsl:
- - More work on classsynopsis and friends.
-
- * db2html.xsl:
- - Actually include -synopsis.xsl.
-
-2003-12-26 Shaun McCance <shaunm@gnome.org>
-
- * docbook/
- - Removing a bunch of stuff.
-
- * db2html-admon.xsl:
- * db2html-html.xsl
- - Various stylistic improvements.
-
-2003-12-26 Shaun McCance <shaunm@gnome.org>
-
- * Makefile.am:
- - Removed db2html-tmp.xsl:
-
- * db2html-biblio.xsl:
- * db2html-index.xsl:
- * db2html-navbar.xsl:
- * db2html-synopsis.xsl:
- * db2html.xsl:
- - Various additions and improvements.
-
-2003-12-24 Shaun McCance <shaunm@gnome.org>
-
- * Makefile.am:
- * db2html-formal.xsl:
- * db2html-lists.xsl:
- - Removing db2html-formal and db2html-lists
-
- * db2html-block.xsl:
- - Better implementation of msg stuff.
-
- * db2html-html.xsl:
- * db2html-param.xsl:
- - Theme the gray color of screen, programlisting, etc.
- - Various stylistic improvements in the CSS.
-
- * db2html-inline.xsl:
- * db2html-titlepage.xsl:
- * gettext.xsl:
- - Get rid of em-dashes. ~sigh~
-
- * db2html-title.xsl:
- - Implemented some more titles and subtitles.
-
- * db2html-titlepage.xsl:
- - Deboldify Affiliation. The pages are too bold.
-
-2003-12-22 Shaun McCance <shaunm@gnome.org>
-
- * Makefile.am:
- - Removing yelp-customization.xsl
-
-2003-12-22 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl: Removing.
-
-2003-12-15 Shaun McCance <shaunm@gnome.org>
-
- * db2html-html.xsl:
- * db2html-navbar.xsl:
- - Make prev/next stuff work.
- - Create a top (TOC) link.
- - Switch to having db2html-navbar just return an id, more flexible.
- - Insert link tags in html for prev, next, and top.
-
-2003-12-13 Shaun McCance <shaunm@gnome.org>
-
- * db2html-chunk.xsl:
- - Call yelp:document on the selected node, so we can use xml_get_title.
-
-2003-12-02 Shaun McCance <shaunm@gnome.org>
-
- * db2html-chunk.xsl:
- - Don't require top element id to be index.
-
-2003-11-30 Shaun McCance <shaunm@gnome.org>
-
- * Makefile.am:
- * *.xsl:
- * docbook/Makefile.am:
- - Merging transformation-playground
-
-2003-11-15 Shaun McCance <shaunm@gnome.org>
-
- * db2html-param.xsl:
- * db2html-xref.xsl:
- - Added resolve_xref_chunk parameter
-
-2003-10-30 Shaun McCance <shaunm@gnome.org>
-
- * db2html-chunk.xsl:
- - Small fixes to chunking code.
-
-2003-10-29 Shaun McCance <shaunm@gnome.org>
-
- * db2html-chunk.xsl:
- - Added yelp:document in preparation for new transformation code.
-
-2003-10-23 Shaun McCance <shaunm@gnome.org>
-
- * db2html-header.xsl:
- - call-template instead of apply-templates for header
-
- * db2html-navbar.xsl:
- - New navbar handlers, as necessitated by new chunk handlers
-
- * db2html-html.xsl:
- * yelp-customization.xsl:
- - Using new navbar handlers
-
- * db2html-xref.xsl:
- - A few additional rules for xref.content
-
-2003-10-22 Shaun McCance <shaunm@gnome.org>
-
- * db2html-division.xsl:
- - Use $depth_chunk instead of $depth
-
-2003-10-22 Shaun McCance <shaunm@gnome.org>
-
- * Makefile.am:
- - Removed db2html-section.xsl
- - Removed db2html-node.xsl
- - Added db2html-header.xsl
-
- * db2html-chunk.xsl:
- * db2html-html.xsl:
- * db2html-titlepage.xsl
- - Some more changes for the new chunking behavior. Mostly stuff I forgot.
-
- * yelp-customization.xsl:
- - Make the new chunking stuff actually work in Yelp.
-
-2003-10-22 Shaun McCance <shaunm@gnome.org>
-
- * db2html-node.xsl:
- - Removing db2html-node.xsl, replace with db2html-header.xsl
-
- * db2html-header.xsl:
- - Adding db2html-header.xsl
- - Does much of what db2html-node.xsl did, but better
-
- * db2html-title.xsl:
- - New title-handling code
-
- * db2html-chunk.xsl:
- - More intelligent chunking templates. Fewer hoops, easier to extend.
-
- * db2html-admon.xsl:
- * db2html-block.xsl:
- * db2html-division.xsl:
- * db2html-glossary.xsl:
- * db2html-list.xsl:
- * db2html-media.xsl:
- * db2html-refentry.xsl:
- * db2html-toc.xsl:
- - Rearranged block-handling code a bit
- - Using new title-handling code
- - Using new chunk-handling code
- - Using new title-handling code
-
- * db2html-html.xsl:
- - New title-handling code necessitated changing how the HTML title
- was obtained. Current implementation is bad.
-
- * db2html-inline.xsl:
- - Moved attribution from inline to block
- - Changed arrow for menuchoice
-
- * db2html-navbar.xsl:
- - Temporarily disabled. Needs to work with new chunk-handling code.
-
- * db2html-xref.xsl:
- - Created xref.content.mode, which will replace node.header.inline.mode.
- Needs work.
-
- * db2html.xsl:
- - Using new chunk-handling code
-
- * gettext.xsl:
- - Changes for the new title- and header-handling code
-
-2003-10-16 Shaun McCance <shaunm@gnome.org>
-
- * db2html-node.xsl:
- * gettext.xsl:
- - Only include parent number in section number when below
- something we typically number.
-
-2003-10-16 Shaun McCance <shaunm@gnome.org>
-
- * db2html-chunk.xsl:
- * db2html-xref.xsl:
- - Fix links to titlepage
-
-2003-10-16 Shaun McCance <shaunm@gnome.org>
-
- * db2html-titlepage.xsl:
- - Fix copyright so it works
-
-2003-10-16 Shaun McCance <shaunm@gnome.org>
-
- * db2html-html.xsl:
- * yelp-customization.xsl:
- - Actually use html.navbar.*, passing in links as params
-
- * db2html-inline.xsl:
- - Handle interface, because Gnumeric hates me
-
-2003-10-12 Shaun McCance <shaunm@gnome.org>
-
- * db2html*.xsl:
- * yelp-customization.xsl:
- - Uber-fast new stylesheets
-
- * Makefile.am:
- * docbook/Makefile.am:
- - Use new stylesheets
-
-2003-09-08 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Wrapped TOC in <dl>
-
-2003-09-05 Danilo Šegan <dsegan@gmx.net>
-
- * l10n.xml: Added Previous, Next, Contents translation for
- Serbian.
-
-2003-09-04 Shaun McCance <shaunm@gnome.org>
-
- * l10n.xml:
- - Updated Italian translation from Luca Ferretti
-
-2003-09-03 Danilo Šegan <dsegan@gmx.net>
-
- * l10n.xml: Added Serbian translation.
-
-2003-08-31 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Fixed bad anchor tag on certain headers.
-
-2003-08-12 Shaun McCance <shaunm@gnome.org>
-
- * yelp-functions.xsl:
- - Fixed stupid bad syntax in yelp:get-admon.class
-
-2003-07-31 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Fix for the thing where parts got two TOCs.
-
-2003-07-29 Shaun McCance <shaunm@gnome.org>
-
- * yelp-functions.xsl:
- - Abilitity to get title from refmeta/refentrytitle. Probably
- a few more things along this line are needed.
-
-2003-07-24 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Remove compatibility with old param names.
-
-2003-07-21 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- * yelp-functions.xsl:
- - Fix dumb bug where singleton subsections didn't get processed.
-
-2003-07-21 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Revert current to 1.48 until I can investigate more thoroughly.
- - Put in compatibility with old param names until I can get the
- changes pushed through in C.
-
-2003-07-20 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Fix linking problem to toc and title-page introduced
- in previous commit.
-
-2003-07-20 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Remove unused params.
- - Change toc and title-page filenames on file chunking to be
- the same as the current GDP stylesheets.
-
-2003-07-20 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Support for chunking to files.
- - Import current nwalsh xsl. There don't seem to be problems.
- - Changed gdb_ [sic] to yelp_.
- - Removed link color attributes on body.
- - Revert the use-titles-as-prev-next-text change.
- Do as the GDP xsl does instead.
-
- * yelp-functions.xsl:
- - Fix a problem in get-prev where a first subsection would point
- to the last introductory para of its parent. Links resolved,
- but titles didn't.
- - Changed gdb_ [sic] to yelp_.
-
-2003-07-15 Shaun McCance <shaunm@gnome.org>
-
- * yelp-functions.xsl: Speed improvement
-
-2003-07-11 Shaun McCance <shaunm@gnome.org>
-
- * yelp-custom.xsl: Put xsl: prefix on use-attribute-sets,
- so it'll actually work.
-
-2003-07-10 Shaun McCance <shaunm@gnome.org>
-
- * yelp-functions.xsl: Only link Previous and Next to divisions
- that have the id attribute. Yelp and SK currently arent'
- capable of working with id-less divisions, so we shouldn't
- link to them with Previous and Next.
-
-2003-07-07 Shaun McCance <shaunm@gnome.org>
-
- * yelp-custom.xsl: Initial work on header spacing
-
-2003-07-07 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- * yelp-functions.xsl:
- - Move the id-less part hackery into get-divisions, fixing the Next
- link in the User Guide and reducing the chance of other subtle bugs
- resulting from this stuff.
-
-2003-07-02 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Minor navbar fixes and tweaks.
-
- * yelp-custom.xsl:
- - 'Legal Notice' added as title to legalnotice iff there is no title,
- rather than if it's the first legalnotice. More changes to come
- to fix some of the heading's spacing in the title page.
-
-2003-07-02 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- - Insert blank <tr> when there's no previous/next link, for alignment.
- - Make Contents not link to itself in the up link on the bottom navbar.
-
-2003-07-01 Shaun McCance <shaunm@gnome.org>
-
- * yelp-customization.xsl:
- * yelp-functions.xsl:
- - Retooled navbar code to make it cleaner and to generate the location
- of previous and next links only once per node.
-
-2003-06-29 Shaun Mccance <shaunm@gnome.org>
-
- * yelp-customization.xsl: Transparently thread parts when there is
- no id attribute, rather than when there's only one chapter, for
- consistancy with ScrollKeeper.
-
-2003-06-16 Eric Baudais <drake@gnome.org>
-
- * yelp-custom.xsl: Applied Alexander's patch for bug #100476.
-
-2003-06-16 Pablo Saratxaga <pablo@mandrakesoft.com>
-
- * l10n.xml: Added Walloon, Spanish and French.
-
-2003-05-12 Abel Cheung <maddog@linux.org.hk>
-
- * l10n.xml: Added traditional Chinese translation.
-
-2003-04-03 Mikael Hallendal <micke@codefactory.se>
-
- * yelp-customization.xsl:
- - Applied patch from Shaun fixing #86081
-
-2003-04-02 Mikael Hallendal <micke@codefactory.se>
-
- * images/*: Updated images so that they have transparent
- background. Thanks Alexander, Fixes #91622
-
-2003-03-31 Mikael Hallendal <micke@codefactory.se>
-
- * yelp-customization.xsl:
- - Applied patch from Baudais@kkpsi.org to lessen space before
- figure captions. Fixes #100414.
- - Applied patch from Baudais@kkpsi.org to make table borders
- lighter. Fixes #100479
-
-2003-03-16 Andras Timar <timar@gnome.hu>
-
- * l10n.xml: Added Hungarian translation.
-
-2002-09-18 Marius Andreiana <mandreiana@yahoo.com>
-
- * l10n.xml: added Romanian translation
-
-2002-06-03 Mikael Hallendal <micke@codefactory.se>
-
- * docbook/catalog.in: updated
-
-2002-06-02 Mikael Hallendal <micke@codefactory.se>
-
- * docbook/Makefile.am (SUBDIRS): added dtd
-
- * docbook/catalog.in: added, this is a local catalog for for Yelp.
-
- * yelp-customization.xsl: Reverted into having the URI for the
- import of stylesheets. Now that I have my own catalog file
- installed.
-
- * docbook/dtd/*: Added the DTD 4.1.2 for now. Jamesh notified me
- that this was needed. The long term solution would be not to
- ship these at all but instead depend on the system to do this
- correctly.
diff --git a/stylesheets/db-title.xsl.in b/stylesheets/db-title.xsl.in
deleted file mode 100644
index d8f09157..00000000
--- a/stylesheets/db-title.xsl.in
+++ /dev/null
@@ -1,23 +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:import href="@XSL_DB_TITLE@"/>
-
-<xsl:template name="node"/>
-
-<xsl:output method="text"/>
-
-<xsl:template match="/">
- <xsl:variable name="title">
- <xsl:call-template name="db.titleabbrev">
- <xsl:with-param name="node" select="$node"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:value-of select="normalize-space($title)"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/stylesheets/docbook/.cvsignore b/stylesheets/docbook/.cvsignore
deleted file mode 100644
index 00e519be..00000000
--- a/stylesheets/docbook/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile
-Makefile.in
-catalog
diff --git a/stylesheets/docbook/dtd/.cvsignore b/stylesheets/docbook/dtd/.cvsignore
deleted file mode 100644
index 22a4e729..00000000
--- a/stylesheets/docbook/dtd/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile
-Makefile.in
-
diff --git a/stylesheets/docbook/dtd/catalog b/stylesheets/docbook/dtd/catalog
deleted file mode 100755
index c24e5df7..00000000
--- a/stylesheets/docbook/dtd/catalog
+++ /dev/null
@@ -1,59 +0,0 @@
- -- ...................................................................... --
- -- Catalog data for DocBook XML V4.1.2 .................................... --
- -- File docbook.cat ..................................................... --
-
- -- Please direct all questions, bug reports, or suggestions for
- changes to the docbook@lists.oasis-open.org mailing list. For more
- information, see http://www.oasis-open.org/.
- --
-
- -- This is the catalog data file for DocBook XML V4.1.2. It is provided as
- a convenience in building your own catalog files. You need not use
- the filenames listed here, and need not use the filename method of
- identifying storage objects at all. See the documentation for
- detailed information on the files associated with the DocBook DTD.
- See SGML Open Technical Resolution 9401 for detailed information
- on supplying and using catalog data.
- --
-
- -- ...................................................................... --
- -- DocBook driver file .................................................. --
-
-PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd"
-
- -- ...................................................................... --
- -- DocBook modules ...................................................... --
-
-PUBLIC "-//OASIS//DTD DocBook XML CALS Table Model V4.1.2//EN" "calstblx.dtd"
-PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "soextblx.dtd"
-PUBLIC "-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN" "dbpoolx.mod"
-PUBLIC "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN" "dbhierx.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN" "dbgenent.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN" "dbnotnx.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN" "dbcentx.mod"
-
- -- ...................................................................... --
- -- ISO entity sets ...................................................... --
-
-PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN" "ent/iso-dia.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" "ent/iso-num.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN" "ent/iso-pub.ent"
-PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN" "ent/iso-tech.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN" "ent/iso-lat1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN" "ent/iso-lat2.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN" "ent/iso-grk1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" "ent/iso-grk2.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN" "ent/iso-grk3.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" "ent/iso-grk4.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" "ent/iso-amsa.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" "ent/iso-amsb.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" "ent/iso-amsc.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" "ent/iso-amsn.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" "ent/iso-amso.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" "ent/iso-amsr.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" "ent/iso-box.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" "ent/iso-cyr1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" "ent/iso-cyr2.ent"
-
- -- End of catalog data for DocBook XML V4.1.2 ............................. --
- -- ...................................................................... --
diff --git a/stylesheets/search2html.xsl b/stylesheets/search2html.xsl
deleted file mode 100644
index 331b2515..00000000
--- a/stylesheets/search2html.xsl
+++ /dev/null
@@ -1,171 +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="help_icon"/>
-<xsl:param name="help_icon_size"/>
-
-<xsl:param name="yelp.javascript"/>
-<xsl:param name="yelp.topimage"/>
-
-<xsl:param name="yelp.color.fg"/>
-<xsl:param name="yelp.color.bg"/>
-<xsl:param name="yelp.color.anchor"/>
-<xsl:param name="yelp.color.rule"/>
-<xsl:param name="yelp.color.gray.fg"/>
-<xsl:param name="yelp.color.gray.bg"/>
-<xsl:param name="yelp.color.gray.bg.dark1"/>
-<xsl:param name="yelp.color.gray.bg.dark2"/>
-<xsl:param name="yelp.color.gray.bg.dark3"/>
-<xsl:param name="yelp.color.selected.fg"/>
-<xsl:param name="yelp.color.selected.bg"/>
-<xsl:param name="yelp.color.selected.bg.dark1"/>
-<xsl:param name="yelp.color.selected.bg.dark2"/>
-<xsl:param name="yelp.color.selected.bg.dark3"/>
-<xsl:param name="yelp.color.admon.fg"/>
-<xsl:param name="yelp.color.admon.bg"/>
-<xsl:param name="yelp.color.admon.bg.dark1"/>
-<xsl:param name="yelp.color.admon.bg.dark2"/>
-<xsl:param name="yelp.color.admon.bg.dark3"/>
-
-<xsl:template match="search">
- <yelp:document href="results">
- <html>
- <head>
- <title>
- <xsl:value-of select="@title"/>
- </title>
- <script type="text/javascript">
- <xsl:attribute name="src">
- <xsl:value-of select="concat('file://', $yelp.javascript)"/>
- </xsl:attribute>
- </script>
- <style type="text/css"><xsl:text>
- body {
- margin: 0px;
- padding: 0px;
- background-image: url("file://</xsl:text>
- <xsl:value-of select="$yelp.topimage"/><xsl:text>");
- background-position: 0px 0px;
- background-repeat: no-repeat;
- position: absolute;
- width: 100%;
- }
- div.content {
- margin-top: 36px;
- padding-left: 38px;
- }
- div.header {
- font-weight: bold;
- border-bottom: 2px solid </xsl:text>
- <xsl:value-of select="$yelp.color.gray.bg.dark1"/><xsl:text>;
- margin-bottom: 0px;
- padding-bottom: 0px;
- }
- div.footer {
- padding-left: 38px;
- }
- ul { margin-left: 0em; padding-left: 0em; }
- li {
- margin-left: 1em;
- padding-left: 0em;
- list-style-type: none;
- }
- dl { margin-left: 36px; padding-left: 0em; }
- dt { margin-top: 1em; }
- dd { margin-left: 1em; margin-top: 0.5em; }
- a { text-decoration: none; }
- a:hover { text-decoration: underline; }
- </xsl:text></style>
- </head>
- <body>
- <div class="content">
- <div class="header">
- <h1><xsl:value-of select="title" /></h1>
- </div>
- <xsl:if test="text">
- <p>
- <xsl:value-of select="text" />
- </p>
- </xsl:if>
- <dl>
- <xsl:for-each select="result[@uri != '' and position() &lt; 21]">
- <!-- Don't sort. Program deals with that. We do however
- need it for slow search-->
- <xsl:sort order="descending" data-type="number" select="normalize-space(@score)"/>
- <xsl:apply-templates select="."/>
- </xsl:for-each>
- </dl>
- </div>
- <div class="footer">
- <br/>
- <xsl:apply-templates select="online"/><xsl:apply-templates select="online1"/>
- </div>
- </body>
- </html>
- </yelp:document>
-</xsl:template>
-
-<xsl:template match="result">
- <dt>
- <a href="{@uri}">
- <xsl:choose>
- <xsl:when test="@title != ''">
- <xsl:value-of select="@title"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@uri"/>
- </xsl:otherwise>
- </xsl:choose>
- </a>
- <xsl:choose>
- <xsl:when test="@base_title != ''">
- from <xsl:value-of select="@base_title"/>
- </xsl:when>
- <xsl:when test="@parent_uri != ''">
- from <xsl:value-of select="@parent_uri"/>
- </xsl:when>
- </xsl:choose>
- </dt>
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="snippet">
- <dd>
- <xsl:apply-templates/>
- </dd>
-</xsl:template>
-<xsl:template match="font">
- <span class="match">
- <xsl:apply-templates/>
- </span>
-</xsl:template>
-<xsl:template match="b">
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="em">
- <strong>
- <xsl:apply-templates/>
- </strong>
-</xsl:template>
-<xsl:template match="score">
- <!--Empty to kill score result-->
-</xsl:template>
-
-<xsl:template match="online">
- <hr/>
- <br/>
- <xsl:apply-templates/>
- <a href="{@href}">
- <xsl:value-of select="@name"/>
- </a>
-</xsl:template>
-<xsl:template match="online1">
- <xsl:apply-templates/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/stylesheets/toc2html.xsl.in b/stylesheets/toc2html.xsl.in
deleted file mode 100644
index d557ec6c..00000000
--- a/stylesheets/toc2html.xsl.in
+++ /dev/null
@@ -1,284 +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:import href="@XSL_GETTEXT@"/>
-
-<xsl:param name="help_icon"/>
-<xsl:param name="help_icon_size"/>
-
-<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="toc">
- <xsl:variable name="direction">
- <xsl:call-template name="l10n.direction"/>
- </xsl:variable>
- <xsl:variable name="left">
- <xsl:call-template name="l10n.align.start">
- <xsl:with-param name="direction" select="$direction"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="right">
- <xsl:call-template name="l10n.align.end">
- <xsl:with-param name="direction" select="$direction"/>
- </xsl:call-template>
- </xsl:variable>
- <yelp:document href="{@id}">
- <html>
- <head>
- <title>
- <xsl:value-of select="title[1]"/>
- </title>
- <style type="text/css"><xsl:text>
- body {
- margin: 0px;
- padding: 0px;
- }
- h1 {
- font-size: 1.6em;
- margin-bottom: 0.4em;
- margin-top: 12px;
- margin-left: 12px;
- margin-right: 12px;
- padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 204px;
- padding-top: 0.2em;
- padding-bottom: 0.2em;
- -webkit-border-radius: 6px;
- border: solid 1px </xsl:text>
- <xsl:value-of select="$theme.color.blue_border"/><xsl:text>;
- background-color: </xsl:text>
- <xsl:value-of select="$theme.color.blue_background"/><xsl:text>;
- color: </xsl:text>
- <xsl:value-of select="$theme.color.text"/><xsl:text>;
- }
- h1 img {
- float: </xsl:text><xsl:value-of select="$right"/><xsl:text>;
- margin-</xsl:text><xsl:value-of select="$right"/><xsl:text>: 18px;
- }
- h2 h3 {
- color: </xsl:text><xsl:value-of select="$theme.color.text"/><xsl:text>;
- }
- div[class~="body"] { }
- div[class~="leftbar"] {
- position: absolute;
- top: 4em;
- </xsl:text><xsl:value-of select="$left"/><xsl:text>: 12px;
- width: 192px;
- min-height: 192px;
- text-align: </xsl:text><xsl:value-of select="$left"/><xsl:text>;
- /* padding-top: </xsl:text>
- <xsl:value-of select="$help_icon_size"/><xsl:text>px;
- background-image: url("</xsl:text>
- <xsl:value-of select="$help_icon"/><xsl:text>");
- background-position: </xsl:text>
- <xsl:value-of select="(192 - $help_icon_size) div 2"/><xsl:text>px 0px;
- background-repeat: no-repeat;
- opacity: .3; */
- }
- div[class~="leftbackground"] {
- position: absolute;
- top: 4em;
- </xsl:text><xsl:value-of select="$left"/><xsl:text>: 1px;
- width: 210px;
- min-height: 192px;
- text-align: center;
- padding-top: 0px;
- background-image:url("</xsl:text>
- <xsl:value-of select="$help_icon"/><xsl:text>");
- background-position: </xsl:text>
- <xsl:value-of select="(192 - $help_icon_size) div 2"/><xsl:text>px 0px;
-
- background-repeat: no-repeat;
- opacity: .1;
- }
- div[class~="rightbar"] {
- margin-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 216px;
- margin-</xsl:text><xsl:value-of select="$right"/><xsl:text>: 12px;
- padding: 1em;
- background-color: </xsl:text><xsl:value-of select="$theme.color.background"/><xsl:text>;
- color: </xsl:text><xsl:value-of select="$theme.color.text"/><xsl:text>;
- -webkit-border-radius: 8px;
- }
- ul { margin-left: 0em; padding-left: 0em; }
- li[class~="toclist"] {
- margin-top: 0.3em;
- margin-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0em;
- padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0em;
- font-size: 1.2em;
- list-style-type: none;
- }
- li li[class~="toclist"] {
- padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0.8em;
- font-size: 0.8em;
- }
- li li li[class~="toclist"] {
- padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0.8em;
- font-size: 0.6em;
- }
- li[class~="toc"] {
- margin-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0em;
- font-size: 1.2em;
- padding-top: 0.5em;
- list-style-type: none;
- }
- dl {
- margin-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0em;
- padding-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 0em;
- }
- dt { font-size: 1.2em; margin-top: 1em; }
- dd {
- margin-</xsl:text><xsl:value-of select="$left"/><xsl:text>: 1em;
- margin-top: 0.5em;
- }
- a { text-decoration: none; color: </xsl:text><xsl:value-of select="$theme.color.link"/><xsl:text>; }
- a:hover { text-decoration: underline; }
- </xsl:text></style>
- </head>
- <body>
- <div>
- <xsl:if test="$direction = 'ltr' or $direction='rtl'">
- <xsl:attribute name="dir">
- <xsl:value-of select="$direction"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates mode="body.mode" select="."/>
- </div>
- </body>
- </html>
- </yelp:document>
-</xsl:template>
-
-<xsl:template name="print.documents">
- <div class="docs">
- <dl>
- <xsl:for-each select="doc">
- <xsl:sort order="ascending" data-type="number"
- select="normalize-space(@weight)"/>
- <xsl:sort select="normalize-space(title)"/>
- <dt class="doc">
- <a href="{@href}" title="{@href}">
- <xsl:if test="tooltip">
- <xsl:attribute name="title">
- <xsl:value-of select="tooltip"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:value-of select="title"/>
- </a>
- </dt>
- <dd>
- <xsl:value-of select="description"/>
- </dd>
- </xsl:for-each>
- </dl>
- </div>
-</xsl:template>
-
-<xsl:template name="print.subsections">
- <div class="tocs">
- <ul>
- <xsl:for-each select="toc[../@id = 'index' or .//doc]">
- <xsl:sort select="number(../@id = 'index') * position()"/>
- <xsl:sort select="normalize-space(title)"/>
- <li class="toc">
- <a href="x-yelp-toc:{@id}">
- <xsl:apply-templates select="title[1]/node()"/>
- </a>
- </li>
- </xsl:for-each>
- </ul>
- </div>
-</xsl:template>
-
-<xsl:template mode="body.mode" match="toc">
- <div class="leftbackground">
- </div>
- <div class="body">
- <h1>
- <xsl:if test="icon">
- <img src="{icon/@file}"/>
- </xsl:if>
- <xsl:apply-templates select="title"/>
- </h1>
- <div class="leftbar">
- <xsl:choose>
- <xsl:when test="@id= 'index'">
- <h2><xsl:value-of select="/toc/title"/></h2>
- </xsl:when>
- <xsl:otherwise>
- <a href="x-yelp-toc:index"><h2><xsl:value-of select="/toc/title"/>
- </h2></a>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:apply-templates mode="leftbar.mode" select="/toc">
- <xsl:with-param name="curid" select="@id"/>
- </xsl:apply-templates>
- </div>
- <div class="rightbar">
- <h3><xsl:apply-templates select="description/node()"/></h3>
- <xsl:choose>
- <!-- if there are documents and subsections, only print documents -->
- <xsl:when test="doc[1] and toc[.//doc[1]]">
- <xsl:call-template name="print.documents"/>
- </xsl:when>
- <!-- if there are documents, print them -->
- <xsl:when test="doc[1]">
- <xsl:call-template name="print.documents"/>
- </xsl:when>
- <!-- if there are subsections, print them -->
- <xsl:when test="toc[.//doc[1]]">
- <xsl:call-template name="print.subsections"/>
- </xsl:when>
- <xsl:otherwise>
- <h3>No documents or subcategories found.</h3>
- </xsl:otherwise>
- </xsl:choose>
- </div>
- </div>
-</xsl:template>
-
-<!-- tricky recursive xslt -->
-<xsl:template mode="leftbar.mode" match="toc">
- <xsl:param name="curid" select="0"/>
- <ul>
- <xsl:for-each select="toc[.//doc[1] or @protected]">
- <li class="toclist">
- <xsl:choose>
- <xsl:when test="@id != $curid">
- <a href="x-yelp-toc:{@id}">
- <xsl:value-of select="title[1]/node()"/>
- </a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="title[1]/node()"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:if test="@id = $curid or .//toc[@id = $curid]">
- <xsl:apply-templates mode="leftbar.mode" select=".">
- <xsl:with-param name="curid" select="$curid"/>
- </xsl:apply-templates>
- </xsl:if>
- </li>
- </xsl:for-each>
- </ul>
-</xsl:template>
-
-<xsl:template match="/">
- <xsl:apply-templates select="//toc" />
-</xsl:template>
-
-</xsl:stylesheet>