[libreoffice] Resolves: rhbz#824035 do not bundle saxon

David Tardon dtardon at fedoraproject.org
Fri Oct 26 07:38:49 UTC 2012


commit b1beb92031b4c04f1db8da8f4426d657d010b25b
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Oct 26 09:27:31 2012 +0200

    Resolves: rhbz#824035 do not bundle saxon

 ...nvert-java-XSL-transformer-into-extension.patch |  214 ++
 ...lection-of-transformer-for-an-XSLT-filter.patch |  730 +++++
 0003-drop-saxon-based-XSLT-transformer.patch       | 3001 ++++++++++++++++++++
 0004-remove-all-traces-of-saxon.patch              | 1650 +++++++++++
 libreoffice.spec                                   |   21 +-
 sources                                            |    1 -
 6 files changed, 5610 insertions(+), 7 deletions(-)
---
diff --git a/0001-convert-java-XSL-transformer-into-extension.patch b/0001-convert-java-XSL-transformer-into-extension.patch
new file mode 100644
index 0000000..1662751
--- /dev/null
+++ b/0001-convert-java-XSL-transformer-into-extension.patch
@@ -0,0 +1,214 @@
+From db698b1878a38c732e73bf0e5ab06368b1a5f29a Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Wed, 19 Sep 2012 12:54:24 +0200
+Subject: [PATCH 1/4] convert java XSL transformer into extension
+
+Change-Id: Ided6c480969764073056830722c8996e0df52285
+(cherry picked from commit 25113cd050d931b0e195fda6d6da9864a575070e)
+---
+ filter/Extension_xslt2_transformer.mk          | 18 +++++++++++++++++
+ filter/Module_filter.mk                        |  1 +
+ filter/source/xsltfilter/components.rdb        |  8 ++++++++
+ filter/source/xsltfilter/description-en-US.txt |  1 +
+ filter/source/xsltfilter/description.xml       | 28 ++++++++++++++++++++++++++
+ filter/source/xsltfilter/manifest.xml          |  6 ++++++
+ postprocess/packcomponents/makefile.mk         |  1 -
+ scp2/InstallModule_ooo.mk                      |  3 ---
+ scp2/source/ooo/common_brand.scp               |  3 ---
+ scp2/source/ooo/file_library_ooo.scp           |  1 -
+ scp2/source/ooo/file_ooo.scp                   |  6 ------
+ scp2/source/ooo/module_hidden_ooo.scp          |  1 -
+ 12 files changed, 62 insertions(+), 15 deletions(-)
+ create mode 100644 filter/Extension_xslt2_transformer.mk
+ create mode 100644 filter/source/xsltfilter/components.rdb
+ create mode 100644 filter/source/xsltfilter/description-en-US.txt
+ create mode 100644 filter/source/xsltfilter/description.xml
+ create mode 100644 filter/source/xsltfilter/manifest.xml
+
+diff --git a/filter/Extension_xslt2_transformer.mk b/filter/Extension_xslt2_transformer.mk
+new file mode 100644
+index 0000000..ab239d8
+--- /dev/null
++++ b/filter/Extension_xslt2_transformer.mk
+@@ -0,0 +1,18 @@
++# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
++#
++# This file is part of the LibreOffice project.
++#
++# This Source Code Form is subject to the terms of the Mozilla Public
++# License, v. 2.0. If a copy of the MPL was not distributed with this
++# file, You can obtain one at http://mozilla.org/MPL/2.0/.
++#
++
++$(eval $(call gb_Extension_Extension,xslt2-transformer,filter/source/xsltfilter))
++
++$(eval $(call gb_Extension_add_files,xslt2-transformer,,\
++    $(call gb_Jar_get_outdir_target,saxon9) \
++    $(call gb_Jar_get_outdir_target,XSLTFilter) \
++	$(SRCDIR)/filter/source/xsltfilter/components.rdb \
++))
++
++# vim: set noet sw=4 ts=4:
+diff --git a/filter/Module_filter.mk b/filter/Module_filter.mk
+index 922d4f5..9c18157 100644
+--- a/filter/Module_filter.mk
++++ b/filter/Module_filter.mk
+@@ -72,6 +72,7 @@ $(eval $(call gb_Module_add_targets,filter,\
+ 
+ ifneq ($(SOLAR_JAVA),)
+ $(eval $(call gb_Module_add_targets,filter,\
++	Extension_xslt2_transformer \
+ 	Jar_XSLTFilter \
+ 	Jar_XSLTValidate \
+ ))
+diff --git a/filter/source/xsltfilter/components.rdb b/filter/source/xsltfilter/components.rdb
+new file mode 100644
+index 0000000..080cb7a
+--- /dev/null
++++ b/filter/source/xsltfilter/components.rdb
+@@ -0,0 +1,8 @@
++<?xml version="1.0"?>
++<components xmlns="http://openoffice.org/2010/uno-components">
++    <component loader="com.sun.star.loader.Java2" uri="./XSLTFilter.jar">
++        <implementation name="XSLTransformer">
++            <service name="com.sun.star.comp.JAXTHelper"/>
++        </implementation>
++    </component>
++</components>
+diff --git a/filter/source/xsltfilter/description-en-US.txt b/filter/source/xsltfilter/description-en-US.txt
+new file mode 100644
+index 0000000..88c8abf
+--- /dev/null
++++ b/filter/source/xsltfilter/description-en-US.txt
+@@ -0,0 +1 @@
++The xslt2-transformer implements a transformer for XSLT import/export filters with support for XSLT 2.0.
+diff --git a/filter/source/xsltfilter/description.xml b/filter/source/xsltfilter/description.xml
+new file mode 100644
+index 0000000..ae6abcb
+--- /dev/null
++++ b/filter/source/xsltfilter/description.xml
+@@ -0,0 +1,28 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<description
++
++    xmlns="http://openoffice.org/extensions/description/2006"
++    xmlns:dep="http://libreoffice.org/extensions/description/2011"
++    xmlns:xlink="http://www.w3.org/1999/xlink">
++
++    <identifier value="org.libreoffice.JavaXSLT2Transformer"/>
++
++    <dependencies>
++        <dep:LibreOffice-minimal-version value="3.7"/>
++    </dependencies>
++
++    <version value="1.0.0"/>
++
++    <publisher>
++        <name xlink:href="http://www.documentfoundation.org" lang="en-US">The Document Foundation</name>
++    </publisher>
++
++    <display-name>
++        <name lang="en-US">XSLT 2.0 transformer</name>
++    </display-name>
++
++    <extension-description>
++      <src xlink:href="description-en-US.txt" lang="en-US" />
++    </extension-description>
++
++</description>
+diff --git a/filter/source/xsltfilter/manifest.xml b/filter/source/xsltfilter/manifest.xml
+new file mode 100644
+index 0000000..a443e65
+--- /dev/null
++++ b/filter/source/xsltfilter/manifest.xml
+@@ -0,0 +1,6 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
++<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
++  <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-components"
++                       manifest:full-path="components.rdb"/>
++</manifest:manifest>
+diff --git a/postprocess/packcomponents/makefile.mk b/postprocess/packcomponents/makefile.mk
+index 09e296b..ccb87f0 100644
+--- a/postprocess/packcomponents/makefile.mk
++++ b/postprocess/packcomponents/makefile.mk
+@@ -288,7 +288,6 @@ my_components += component/framework/util/lomenubar
+ .IF "$(SOLAR_JAVA)" == "TRUE"
+ my_components += \
+     component/xmerge/source/bridge/XMergeBridge \
+-    component/filter/source/xsltfilter/XSLTFilter.jar \
+     component/filter/source/xsltvalidate/XSLTValidate \
+     component/scripting/java/ScriptFramework \
+     component/scripting/java/ScriptProviderForJava \
+diff --git a/scp2/InstallModule_ooo.mk b/scp2/InstallModule_ooo.mk
+index 0c49414..640ea3a 100644
+--- a/scp2/InstallModule_ooo.mk
++++ b/scp2/InstallModule_ooo.mk
+@@ -158,9 +158,6 @@ $(eval $(call gb_InstallModule_add_defs,scp2/ooo,\
+ 	$(if $(filter YES,$(SYSTEM_HSQLDB)),\
+ 		-DHSQLDB_JAR=\""$(call gb_Helper_make_path,$(HSQLDB_JAR))"\" \
+ 	) \
+-	$(if $(filter YES,$(SYSTEM_SAXON)),\
+-		-DSAXON_JAR=\""$(call gb_Helper_make_path,$(SAXON_JAR))"\" \
+-	) \
+ 	$(if $(filter-out YES,$(WITH_MOZILLA)),\
+ 		-DWITHOUT_MOZILLA \
+ 	) \
+diff --git a/scp2/source/ooo/common_brand.scp b/scp2/source/ooo/common_brand.scp
+index 997a142..83c5c21 100644
+--- a/scp2/source/ooo/common_brand.scp
++++ b/scp2/source/ooo/common_brand.scp
+@@ -1259,9 +1259,6 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Ure_Java_Classpath_Urls
+ #ifdef SYSTEM_HSQLDB
+     ValueList1 = HSQLDB_JAR;
+ #endif
+-#ifdef SYSTEM_SAXON
+-    ValueList2 = SAXON_JAR;
+-#endif
+ End
+ 
+ ProfileItem gid_Brand_Profileitem_Fundamental_Ure_Bin_Dir
+diff --git a/scp2/source/ooo/file_library_ooo.scp b/scp2/source/ooo/file_library_ooo.scp
+index 66c50e2..f3448e5 100644
+--- a/scp2/source/ooo/file_library_ooo.scp
++++ b/scp2/source/ooo/file_library_ooo.scp
+@@ -1382,7 +1382,6 @@ STD_LIB_FILE( gid_File_Lib_Textfd, textfd )
+ STD_LIB_FILE( gid_File_Lib_Odfflatxml, odfflatxml )
+ 
+ #ifdef SOLAR_JAVA
+-STD_JAR_FILE( gid_File_Jar_Xsltfilter, XSLTFilter )
+ STD_JAR_FILE( gid_File_Jar_Xsltvalidate, XSLTValidate )
+ #endif
+ 
+diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
+index ebdcf25..e274fc3 100644
+--- a/scp2/source/ooo/file_ooo.scp
++++ b/scp2/source/ooo/file_ooo.scp
+@@ -469,12 +469,6 @@ End
+ 
+ #endif
+ 
+-#ifdef SOLAR_JAVA
+-#ifndef SYSTEM_SAXON
+-STD_JAR_FILE( gid_File_Jar_Saxon, saxon9 )
+-#endif
+-#endif
+-
+ #ifndef AIX
+ #ifndef DISABLE_PYUNO
+ 
+diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
+index 76e062b..e00a38b 100644
+--- a/scp2/source/ooo/module_hidden_ooo.scp
++++ b/scp2/source/ooo/module_hidden_ooo.scp
+@@ -129,7 +129,6 @@ Module gid_Module_Root_Files_3
+ 	Default = YES;
+ 	Styles = (HIDDEN_ROOT);
+ 	Files = (gid_File_Dat_Root3,
+-	gid_File_Jar_Saxon,
+ 	gid_File_Jar_Unoil,
+ 	gid_File_Jar_Hsqldb,
+ 	gid_File_Jar_Hsqldb_Sdbc,
+-- 
+1.7.11.7
+
diff --git a/0002-rework-selection-of-transformer-for-an-XSLT-filter.patch b/0002-rework-selection-of-transformer-for-an-XSLT-filter.patch
new file mode 100644
index 0000000..3ddfbf4
--- /dev/null
+++ b/0002-rework-selection-of-transformer-for-an-XSLT-filter.patch
@@ -0,0 +1,730 @@
+From f05438dda954965651f332b2f7ee97dbdd951b98 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Thu, 20 Sep 2012 10:28:56 +0200
+Subject: [PATCH 2/4] rework selection of transformer for an XSLT filter
+
+(cherry picked from commit ca0ea73a4ab104031a16b5bac7a9bb6e57c77ba0)
+
+Conflicts:
+	filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+
+Change-Id: I765762f11813c6b612416a8db2707bf94114c876
+---
+ filter/source/xsltdialog/typedetectionexport.cxx   |  2 +-
+ filter/source/xsltdialog/typedetectionimport.cxx   |  2 +-
+ filter/source/xsltdialog/xmlfiltercommon.hxx       |  2 +-
+ filter/source/xsltdialog/xmlfilterhelpids.hrc      |  3 +-
+ .../source/xsltdialog/xmlfiltersettingsdialog.cxx  | 19 ++----
+ filter/source/xsltdialog/xmlfiltertabpagexslt.cxx  | 20 ++-----
+ filter/source/xsltdialog/xmlfiltertabpagexslt.hrc  |  5 +-
+ filter/source/xsltdialog/xmlfiltertabpagexslt.hxx  |  5 +-
+ filter/source/xsltdialog/xmlfiltertabpagexslt.src  | 23 +++----
+ filter/source/xsltfilter/LibXSLTTransformer.cxx    |  4 +-
+ filter/source/xsltfilter/LibXSLTTransformer.hxx    | 18 +++---
+ filter/source/xsltfilter/XSLTFilter.cxx            | 70 +++++++++++++++-------
+ .../sun/star/comp/xsltfilter/XSLTransformer.java   | 13 ++--
+ filter/source/xsltfilter/components.rdb            |  4 +-
+ filter/source/xsltfilter/xsltfilter.component      |  2 +-
+ offapi/UnoApi_offapi.mk                            |  9 +++
+ offapi/com/sun/star/xml/xslt/XSLT2Transformer.idl  | 30 ++++++++++
+ offapi/com/sun/star/xml/xslt/XSLTTransformer.idl   | 32 ++++++++++
+ offapi/com/sun/star/xml/xslt/XXSLTTransformer.idl  | 36 +++++++++++
+ 19 files changed, 204 insertions(+), 95 deletions(-)
+ create mode 100644 offapi/com/sun/star/xml/xslt/XSLT2Transformer.idl
+ create mode 100644 offapi/com/sun/star/xml/xslt/XSLTTransformer.idl
+ create mode 100644 offapi/com/sun/star/xml/xslt/XXSLTTransformer.idl
+
+diff --git a/filter/source/xsltdialog/typedetectionexport.cxx b/filter/source/xsltdialog/typedetectionexport.cxx
+index a01b462..83bf7fa 100644
+--- a/filter/source/xsltdialog/typedetectionexport.cxx
++++ b/filter/source/xsltdialog/typedetectionexport.cxx
+@@ -192,7 +192,7 @@ void TypeDetectionExporter::doExport( Reference< XOutputStream > xOS,  const XML
+                 sValue += sComma;
+                 sValue += sXSLTFilterService;
+                 sValue += sDelim;
+-                sValue += pFilter->maXSLTTransformerImpl;
++                sValue += OUString::valueOf( pFilter->mbNeedsXSLT2 );
+                 sValue += sDelim;
+ 
+                 const application_info_impl* pAppInfo = getApplicationInfo( pFilter->maExportService );
+diff --git a/filter/source/xsltdialog/typedetectionimport.cxx b/filter/source/xsltdialog/typedetectionimport.cxx
+index 3d3b937..50428e7 100644
+--- a/filter/source/xsltdialog/typedetectionimport.cxx
++++ b/filter/source/xsltdialog/typedetectionimport.cxx
+@@ -180,7 +180,7 @@ filter_info_impl* TypeDetectionImporter::createFilterForNode( Node * pNode )
+ 
+     OUString aAdapterService( getSubdata( 0, aDelim, aFilterUserData ) );
+     //Import/ExportService
+-    pFilter->maXSLTTransformerImpl = getSubdata( 1, aDelim, aFilterUserData );
++    pFilter->mbNeedsXSLT2 = getSubdata( 1, aDelim, aFilterUserData ).toBoolean();
+     pFilter->maImportService = getSubdata( 2, aDelim, aFilterUserData );
+     pFilter->maExportService = getSubdata( 3, aDelim, aFilterUserData );
+     pFilter->maImportXSLT = getSubdata( 4, aDelim, aFilterUserData );
+diff --git a/filter/source/xsltdialog/xmlfiltercommon.hxx b/filter/source/xsltdialog/xmlfiltercommon.hxx
+index cdb767e..41be2c7 100644
+--- a/filter/source/xsltdialog/xmlfiltercommon.hxx
++++ b/filter/source/xsltdialog/xmlfiltercommon.hxx
+@@ -77,7 +77,7 @@ public:
+ 
+     sal_Bool        mbReadonly;
+ 
+-    rtl::OUString   maXSLTTransformerImpl;
++    sal_Bool        mbNeedsXSLT2;
+ 
+     filter_info_impl();
+     filter_info_impl( const filter_info_impl& rInfo );
+diff --git a/filter/source/xsltdialog/xmlfilterhelpids.hrc b/filter/source/xsltdialog/xmlfilterhelpids.hrc
+index 558a274..a22fa52 100644
+--- a/filter/source/xsltdialog/xmlfilterhelpids.hrc
++++ b/filter/source/xsltdialog/xmlfilterhelpids.hrc
+@@ -50,8 +50,7 @@
+ #define HID_XML_FILTER_DOCTYPE                              "FILTER_HID_XML_FILTER_DOCTYPE"
+ #define HID_XML_FILTER_DTD                                  "FILTER_HID_XML_FILTER_DTD"
+ #define HID_XML_FILTER_DTD_BROWSE                           "FILTER_HID_XML_FILTER_DTD_BROWSE"
+-#define HID_XML_FILTER_TRANSFORM_SERVICE_SAXON_J			"FILTER_HID_XML_FILTER_TRANSFORM_SERVICE_SAXON_J"
+-#define HID_XML_FILTER_TRANSFORM_SERVICE_LIBXSLT			"FILTER_HID_XML_FILTER_TRANSFORM_SERVICE_LIBXSLT"
++#define HID_XML_FILTER_NEEDS_XSLT2			    "FILTER_HID_XML_FILTER_NEEDS_XSLT2"
+ #define HID_XML_FILTER_EXPORT_XSLT                          "FILTER_HID_XML_FILTER_EXPORT_XSLT"
+ #define HID_XML_FILTER_EXPORT_XSLT_BROWSE                   "FILTER_HID_XML_FILTER_EXPORT_XSLT_BROWSE"
+ #define HID_XML_FILTER_IMPORT_XSLT                          "FILTER_HID_XML_FILTER_IMPORT_XSLT"
+diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+index 558ac0d..a54b520 100644
+--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
++++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+@@ -1164,7 +1164,7 @@ void XMLFilterSettingsDialog::initFilterList()
+                     continue;
+ 
+                 // get filter information from userdata
+-                pTempFilter->maXSLTTransformerImpl = aUserData[1];
++                pTempFilter->mbNeedsXSLT2 = aUserData[1].toBoolean();
+                 pTempFilter->maImportService = aUserData[2];
+                 pTempFilter->maExportService = aUserData[3];
+                 pTempFilter->maImportXSLT = aUserData[4];
+@@ -1590,7 +1590,8 @@ filter_info_impl::filter_info_impl()
+ :   maFlags(0x00080040),
+     maFileFormatVersion(0),
+     mnDocumentIconID(0),
+-    mbReadonly(sal_False)
++    mbReadonly(sal_False),
++    mbNeedsXSLT2(sal_False)
+ {
+ }
+ 
+@@ -1615,7 +1616,7 @@ filter_info_impl::filter_info_impl( const filter_info_impl& rInfo ) :
+     maFileFormatVersion( rInfo.maFileFormatVersion ),
+     mnDocumentIconID( rInfo.mnDocumentIconID ),
+     mbReadonly( rInfo.mbReadonly ),
+-    maXSLTTransformerImpl( rInfo.maXSLTTransformerImpl )
++    mbNeedsXSLT2( rInfo.mbNeedsXSLT2 )
+ {
+ }
+ 
+@@ -1639,7 +1640,7 @@ int filter_info_impl::operator==( const filter_info_impl& r ) const
+         maImportTemplate != r.maImportTemplate ||
+         maFlags != r.maFlags ||
+         maFileFormatVersion != r.maFileFormatVersion ||
+-        maXSLTTransformerImpl != r.maXSLTTransformerImpl
++        mbNeedsXSLT2 != r.mbNeedsXSLT2
+         )
+         return false;
+ 
+@@ -1653,15 +1654,7 @@ Sequence< OUString > filter_info_impl::getFilterUserData() const
+     Sequence< OUString > aUserData(8);
+ 
+     aUserData[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.documentconversion.XSLTFilter" ) );
+-    /*
+-    const application_info_impl* pInfo = getApplicationInfo( maDocumentService );
+-    if( pInfo )
+-    {
+-        aUserData[2] = pInfo->maXMLImporter;
+-        aUserData[3] = pInfo->maXMLExporter;
+-    }
+-    */
+-    aUserData[1] = maXSLTTransformerImpl;
++    aUserData[1] = OUString::valueOf( mbNeedsXSLT2 );
+     aUserData[2] = maImportService;
+     aUserData[3] = maExportService;
+     aUserData[4] = maImportXSLT;
+diff --git a/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx b/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
+index dc1a4c8..b4cae16 100644
+--- a/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
++++ b/filter/source/xsltdialog/xmlfiltertabpagexslt.cxx
+@@ -68,9 +68,8 @@ XMLFilterTabPageXSLT::XMLFilterTabPageXSLT( Window* pParent, ResMgr& rResMgr, co
+     maEDImportTemplate( this, ResId( ED_XML_IMPORT_TEMPLATE, rResMgr ), INET_PROT_FILE ),
+     maPBImportTemplate( this, ResId( PB_XML_IMPORT_TEMPLATE_BROWSE, rResMgr ) ),
+ 
+-    maFTTransformationService( this, ResId (FT_XML_TRANSFORM_SERVICE, rResMgr ) ),
+-    maRBTransformationServiceLibXSLT( this, ResId (RB_XML_TRANSFORM_SERVICE_LIBXSLT, rResMgr ) ),
+-    maRBTransformationServiceSaxonJ( this, ResId (RB_XML_TRANSFORM_SERVICE_SAXON_J, rResMgr ) ),
++    maFTNeedsXSLT2( this, ResId (FT_XML_NEEDS_XSLT2, rResMgr ) ),
++    maCBNeedsXSLT2( this, ResId (CB_XML_NEEDS_XSLT2, rResMgr ) ),
+ 
+     sHTTPSchema( RTL_CONSTASCII_USTRINGPARAM( "http://" ) ),
+     sSHTTPSchema( RTL_CONSTASCII_USTRINGPARAM( "shttp://" ) ),
+@@ -100,8 +99,7 @@ XMLFilterTabPageXSLT::XMLFilterTabPageXSLT( Window* pParent, ResMgr& rResMgr, co
+     maEDExportXSLT.SetHelpId( HID_XML_FILTER_EXPORT_XSLT );
+     maEDImportXSLT.SetHelpId( HID_XML_FILTER_IMPORT_XSLT );
+     maEDImportTemplate.SetHelpId( HID_XML_FILTER_IMPORT_TEMPLATE );
+-    maRBTransformationServiceLibXSLT.SetHelpId( HID_XML_FILTER_TRANSFORM_SERVICE_LIBXSLT );
+-    maRBTransformationServiceSaxonJ.SetHelpId( HID_XML_FILTER_TRANSFORM_SERVICE_SAXON_J );
++    maCBNeedsXSLT2.SetHelpId( HID_XML_FILTER_NEEDS_XSLT2 );
+ }
+ 
+ XMLFilterTabPageXSLT::~XMLFilterTabPageXSLT()
+@@ -117,10 +115,7 @@ bool XMLFilterTabPageXSLT::FillInfo( filter_info_impl* pInfo )
+         pInfo->maExportXSLT = GetURL( maEDExportXSLT );
+         pInfo->maImportXSLT = GetURL( maEDImportXSLT );
+         pInfo->maImportTemplate = GetURL( maEDImportTemplate );
+-        pInfo->maXSLTTransformerImpl
+-                = maRBTransformationServiceSaxonJ.IsChecked() ? OUString(
+-                        RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.JAXTHelper" ))
+-                        : OUString(RTL_CONSTASCII_USTRINGPARAM( "" ));
++        pInfo->mbNeedsXSLT2 = maCBNeedsXSLT2.IsChecked();
+     }
+ 
+     return true;
+@@ -136,12 +131,7 @@ void XMLFilterTabPageXSLT::SetInfo(const filter_info_impl* pInfo)
+         SetURL( maEDExportXSLT, pInfo->maExportXSLT );
+         SetURL( maEDImportXSLT, pInfo->maImportXSLT );
+         SetURL( maEDImportTemplate, pInfo->maImportTemplate );
+-        if (pInfo->maXSLTTransformerImpl.equals(OUString(
+-                RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.JAXTHelper" )))) {
+-            maRBTransformationServiceSaxonJ.Check();
+-        } else {
+-            maRBTransformationServiceLibXSLT.Check();
+-        }
++        maCBNeedsXSLT2.Check( pInfo->mbNeedsXSLT2 );
+     }
+ }
+ 
+diff --git a/filter/source/xsltdialog/xmlfiltertabpagexslt.hrc b/filter/source/xsltdialog/xmlfiltertabpagexslt.hrc
+index 12a9d46..bdd39e7 100644
+--- a/filter/source/xsltdialog/xmlfiltertabpagexslt.hrc
++++ b/filter/source/xsltdialog/xmlfiltertabpagexslt.hrc
+@@ -44,8 +44,7 @@
+ #define FT_XML_IMPORT_TEMPLATE          12
+ #define ED_XML_IMPORT_TEMPLATE          13
+ #define PB_XML_IMPORT_TEMPLATE_BROWSE   14
+-#define FT_XML_TRANSFORM_SERVICE		15
+-#define RB_XML_TRANSFORM_SERVICE_LIBXSLT 16
+-#define RB_XML_TRANSFORM_SERVICE_SAXON_J 17
++#define FT_XML_NEEDS_XSLT2		15
++#define CB_XML_NEEDS_XSLT2		16
+ 
+ #endif
+diff --git a/filter/source/xsltdialog/xmlfiltertabpagexslt.hxx b/filter/source/xsltdialog/xmlfiltertabpagexslt.hxx
+index a9d8062..a0375b7 100644
+--- a/filter/source/xsltdialog/xmlfiltertabpagexslt.hxx
++++ b/filter/source/xsltdialog/xmlfiltertabpagexslt.hxx
+@@ -69,9 +69,8 @@ public:
+     SvtURLBox       maEDImportTemplate;
+     PushButton      maPBImportTemplate;
+ 
+-    FixedText       maFTTransformationService;
+-    RadioButton		maRBTransformationServiceLibXSLT;
+-    RadioButton		maRBTransformationServiceSaxonJ;
++    FixedText       maFTNeedsXSLT2;
++    CheckBox	    maCBNeedsXSLT2;
+ 
+ private:
+     void SetURL( SvtURLBox& rURLBox, const rtl::OUString& rURL );
+diff --git a/filter/source/xsltdialog/xmlfiltertabpagexslt.src b/filter/source/xsltdialog/xmlfiltertabpagexslt.src
+index 2d0391c..96b83f7 100644
+--- a/filter/source/xsltdialog/xmlfiltertabpagexslt.src
++++ b/filter/source/xsltdialog/xmlfiltertabpagexslt.src
+@@ -175,27 +175,18 @@ TabPage RID_XML_FILTER_TABPAGE_XSLT
+ 
+     // XSLT transformation service --------------------------------------------------------
+ 
+-    FixedText FT_XML_TRANSFORM_SERVICE
++    CheckBox CB_XML_NEEDS_XSLT2
+     {
++        HelpID = HID_XML_FILTER_NEEDS_XSLT2;
+         Pos                 = MAP_APPFONT ( FIRST_ROW_X , FIRST_ROW_Y + 5 * ROW_HEIGHT + 5 * SPACING + FIXED_TEXT_OFFSET + EDIT_OFFSET ) ;
+-        Size                = MAP_APPFONT ( FIRST_ROW_WIDTH , 8 ) ;
+-        Text [ en-US ]  = "XSLT Transformation Service";
+-    };
+-
+-    RadioButton RB_XML_TRANSFORM_SERVICE_LIBXSLT
+-    {
+-        HelpID = HID_XML_FILTER_TRANSFORM_SERVICE_LIBXSLT;
+-        Pos                 = MAP_APPFONT ( SECOND_ROW_X , SECOND_ROW_Y + 5 * ROW_HEIGHT + 5 * SPACING + EDIT_OFFSET ) ;
+-        Size                = MAP_APPFONT ( SECOND_ROW_WIDTH - SPACING - BROWSE_WIDTH, 12 ) ;
+-        Text[ en-US ] = "~Builtin (LibXSLT)";
++        Size                = MAP_APPFONT ( 12, 12 ) ;
+     };
+ 
+-    RadioButton RB_XML_TRANSFORM_SERVICE_SAXON_J
++    FixedText FT_XML_NEEDS_XSLT2
+     {
+-        HelpID = HID_XML_FILTER_TRANSFORM_SERVICE_SAXON_J;
+-        Pos                 = MAP_APPFONT ( SECOND_ROW_X , SECOND_ROW_Y + 6 * ROW_HEIGHT + 6 * SPACING + EDIT_OFFSET ) ;
+-        Size                = MAP_APPFONT ( SECOND_ROW_WIDTH - SPACING - BROWSE_WIDTH, 12 ) ;
+-        Text[ en-US ] = "~Saxon/J";
++        Pos                 = MAP_APPFONT ( FIRST_ROW_X + 3 * SPACING , SECOND_ROW_Y + 5 * ROW_HEIGHT + 5 * SPACING + FIXED_TEXT_OFFSET + EDIT_OFFSET ) ;
++        Size                = MAP_APPFONT ( 2 * FIRST_ROW_WIDTH , 8 ) ; // guess width
++        Text [ en-US ]  = "The filter needs XSLT 2.0 processor";
+     };
+ 
+ };
+diff --git a/filter/source/xsltfilter/LibXSLTTransformer.cxx b/filter/source/xsltfilter/LibXSLTTransformer.cxx
+index ff57fc1..ab03316 100644
+--- a/filter/source/xsltfilter/LibXSLTTransformer.cxx
++++ b/filter/source/xsltfilter/LibXSLTTransformer.cxx
+@@ -488,9 +488,11 @@ namespace XSLT
+     }
+ 
+     void
+-    LibXSLTTransformer::initialize(const Sequence<Any>& params)
++    LibXSLTTransformer::initialize(const Sequence<Any>& args)
+             throw (RuntimeException)
+     {
++        Sequence<Any> params;
++        args[0] >>= params;
+         xmlSubstituteEntitiesDefault(0);
+         m_parameters.clear();
+         for (int i = 0; i < params.getLength(); i++)
+diff --git a/filter/source/xsltfilter/LibXSLTTransformer.hxx b/filter/source/xsltfilter/LibXSLTTransformer.hxx
+index 444cb2f..a7c71a6 100644
+--- a/filter/source/xsltfilter/LibXSLTTransformer.hxx
++++ b/filter/source/xsltfilter/LibXSLTTransformer.hxx
+@@ -42,7 +42,7 @@
+ 
+ #include <cppuhelper/factory.hxx>
+ #include <cppuhelper/servicefactory.hxx>
+-#include <cppuhelper/implbase4.hxx>
++#include <cppuhelper/implbase1.hxx>
+ #include <cppuhelper/implbase.hxx>
+ 
+ #include <rtl/ref.hxx>
+@@ -51,14 +51,12 @@
+ 
+ #include <com/sun/star/uno/Any.hxx>
+ 
++#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+ #include <com/sun/star/io/XInputStream.hpp>
+ #include <com/sun/star/io/XOutputStream.hpp>
+-#include <com/sun/star/io/XActiveDataSource.hpp>
+-#include <com/sun/star/io/XActiveDataSink.hpp>
+-#include <com/sun/star/io/XActiveDataControl.hpp>
+ #include <com/sun/star/io/XStreamListener.hpp>
+-#include <com/sun/star/lang/XInitialization.hpp>
+ #include <com/sun/star/beans/NamedValue.hpp>
++#include <com/sun/star/xml/xslt/XXSLTTransformer.hpp>
+ 
+ using namespace ::rtl;
+ using namespace ::cppu;
+@@ -66,7 +64,6 @@ using namespace ::osl;
+ using namespace ::com::sun::star::beans;
+ using namespace ::com::sun::star::io;
+ using namespace ::com::sun::star::uno;
+-using namespace ::com::sun::star::lang;
+ 
+ using ::std::list;
+ using ::std::map;
+@@ -90,8 +87,7 @@ namespace XSLT
+      *
+      * See Reader below.
+      */
+-    class LibXSLTTransformer : public WeakImplHelper4<XActiveDataSink,
+-            XActiveDataSource, XActiveDataControl, XInitialization>
++    class LibXSLTTransformer : public WeakImplHelper1<com::sun::star::xml::xslt::XXSLTTransformer>
+     {
+     private:
+         static const char* const PARAM_SOURCE_URL;
+@@ -102,7 +98,7 @@ namespace XSLT
+         static const char* const PARAM_DOCTYPE_PUBLIC;
+ 
+         // the UNO ServiceFactory
+-        com::sun::star::uno::Reference<XMultiServiceFactory> m_rServiceFactory;
++        com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory> m_rServiceFactory;
+ 
+         com::sun::star::uno::Reference<XInputStream> m_rInputStream;
+ 
+@@ -129,7 +125,7 @@ namespace XSLT
+     public:
+ 
+         // ctor...
+-        LibXSLTTransformer(const com::sun::star::uno::Reference<XMultiServiceFactory> &r);
++        LibXSLTTransformer(const com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory> &r);
+ 
+         // XActiveDataSink
+         virtual void SAL_CALL
+@@ -169,7 +165,7 @@ namespace XSLT
+         ::std::map<const char*, OString> SAL_CALL
+         getParameters();
+ 
+-        virtual com::sun::star::uno::Reference<XMultiServiceFactory> SAL_CALL
++        virtual com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory> SAL_CALL
+         getServiceFactory() {
+             return m_rServiceFactory;
+         }
+diff --git a/filter/source/xsltfilter/XSLTFilter.cxx b/filter/source/xsltfilter/XSLTFilter.cxx
+index f3ebd2f..36968e7 100644
+--- a/filter/source/xsltfilter/XSLTFilter.cxx
++++ b/filter/source/xsltfilter/XSLTFilter.cxx
+@@ -41,6 +41,7 @@
+ #include <rtl/strbuf.hxx>
+ #include <tools/urlobj.hxx>
+ 
++#include <comphelper/componentcontext.hxx>
+ #include <comphelper/interaction.hxx>
+ 
+ #include <com/sun/star/lang/XComponent.hpp>
+@@ -72,6 +73,8 @@
+ #include <com/sun/star/task/XInteractionHandler.hpp>
+ #include <com/sun/star/task/XInteractionRequest.hpp>
+ #include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
++#include <com/sun/star/xml/xslt/XSLT2Transformer.hpp>
++#include <com/sun/star/xml/xslt/XSLTTransformer.hpp>
+ 
+ #include <xmloff/attrlist.hxx>
+ 
+@@ -102,14 +105,10 @@ namespace XSLT
+      * them to an XSLT transformation service. XSLT transformation errors are
+      * reported to XSLTFilter.
+      *
+-     * Currently, two implementations for the XSLT transformation service exist:
+-     * a java based service (see XSLTransformer.java) and  a libxslt based
+-     * service (LibXSLTTransformer.cxx).
+-     *
+-     * The libxslt implementation will be used by default.
+-     *
+-     * If the value of the 2nd "UserData" parameter of the filter configuration is
+-     * not empty, the service name given there will be used.
++     * Currently, our transformation service is libxslt based, so it
++     * only supports XSLT 1.0. There is a possibility to use XSLT 2.0
++     * supporting service from an extension for a specific filter; the
++     * service must support com.sun.star.xml.xslt.XSLT2Transformer.
+      */
+     class XSLTFilter : public WeakImplHelper4<XImportFilter, XExportFilter,
+             XStreamListener, ExtendedDocumentHandlerAdapter>
+@@ -122,7 +121,7 @@ namespace XSLT
+         // DocumentHandler interface of the css::xml::sax::Writer service
+         css::uno::Reference<XOutputStream> m_rOutputStream;
+ 
+-        css::uno::Reference<XActiveDataControl> m_tcontrol;
++        css::uno::Reference<xslt::XXSLTTransformer> m_tcontrol;
+ 
+         oslCondition m_cTransformed;
+         sal_Bool m_bTerminated;
+@@ -135,6 +134,8 @@ namespace XSLT
+         OUString
+         expandUrl(const OUString&);
+ 
++        css::uno::Reference<xslt::XXSLTTransformer> impl_createTransformer(const rtl::OUString& rTransformer, const Sequence<Any>& rArgs);
++
+     public:
+ 
+         // ctor...
+@@ -211,6 +212,43 @@ m_rServiceFactory(r), m_bTerminated(sal_False), m_bError(sal_False)
+         return sExpandedUrl;
+     }
+ 
++    css::uno::Reference<xslt::XXSLTTransformer>
++    XSLTFilter::impl_createTransformer(const rtl::OUString& rTransformer, const Sequence<Any>& rArgs)
++    {
++        css::uno::Reference<xslt::XXSLTTransformer> xTransformer;
++
++        // check if the filter needs XSLT-2.0-capable transformer
++        // COMPATIBILITY: libreoffice 3.5/3.6 used to save the impl.
++        // name of the XSLT 2.0 transformation service there, so check
++        // for that too (it is sufficient to check that there is _a_
++        // service name there)
++        if (rTransformer.toBoolean() || rTransformer.match("com.sun."))
++        {
++            try
++            {
++                xTransformer = xslt::XSLT2Transformer::create(
++                        comphelper::ComponentContext(m_rServiceFactory).getUNOContext(), rArgs);
++            }
++            catch (const Exception&)
++            {
++                // TODO: put a dialog telling about the need to install
++                // xslt2-transformer extension here
++                SAL_WARN("filter.xslt", "could not create XSLT 2.0 transformer");
++                throw;
++            }
++        }
++
++        // instantiation of XSLT 2.0 transformer service failed, or the
++        // filter does not need it
++        if (!xTransformer.is())
++        {
++            xTransformer = xslt::XSLTTransformer::create(
++                    comphelper::ComponentContext(m_rServiceFactory).getUNOContext(), rArgs);
++        }
++
++        return xTransformer;
++    }
++
+     void
+     XSLTFilter::started() throw (RuntimeException)
+     {
+@@ -322,11 +360,7 @@ m_rServiceFactory(r), m_bTerminated(sal_False), m_bError(sal_False)
+         nv.Value <<= OUString(INetURLObject(aURL).getBase());
+         args[2] <<= nv;
+ 
+-        OUString serviceName("com.sun.star.comp.documentconversion.LibXSLTTransformer");
+-        if (!msUserData[1].isEmpty())
+-            serviceName = msUserData[1];
+-
+-        m_tcontrol = css::uno::Reference<XActiveDataControl> (m_rServiceFactory->createInstanceWithArguments(serviceName, args), UNO_QUERY);
++        m_tcontrol = impl_createTransformer(msUserData[1], args);
+ 
+         OSL_ASSERT(xHandler.is());
+         OSL_ASSERT(xInputStream.is());
+@@ -486,11 +520,7 @@ m_rServiceFactory(r), m_bTerminated(sal_False), m_bError(sal_False)
+         nv.Value <<= m_aExportBaseUrl;
+         args[3] <<= nv;
+ 
+-        OUString serviceName("com.sun.star.comp.documentconversion.LibXSLTTransformer");
+-        if (!msUserData[1].isEmpty())
+-            serviceName = msUserData[1];
+-
+-        m_tcontrol = css::uno::Reference<XActiveDataControl> (m_rServiceFactory->createInstanceWithArguments(serviceName, args), UNO_QUERY);
++        m_tcontrol = impl_createTransformer(msUserData[1], args);
+ 
+         OSL_ASSERT(m_rOutputStream.is());
+         OSL_ASSERT(m_tcontrol.is());
+@@ -566,7 +596,7 @@ m_rServiceFactory(r), m_bTerminated(sal_False), m_bError(sal_False)
+     // --------------------------------------
+ #define FILTER_SERVICE_NAME "com.sun.star.documentconversion.XSLTFilter"
+ #define FILTER_IMPL_NAME "com.sun.star.comp.documentconversion.XSLTFilter"
+-#define TRANSFORMER_SERVICE_NAME "com.sun.star.documentconversion.LibXSLTTransformer"
++#define TRANSFORMER_SERVICE_NAME "com.sun.star.xml.xslt.XSLTTransformer"
+ #define TRANSFORMER_IMPL_NAME "com.sun.star.comp.documentconversion.LibXSLTTransformer"
+ 
+     static css::uno::Reference<XInterface> SAL_CALL
+diff --git a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java b/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
+index 1a6d8cf..7036646 100644
+--- a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
++++ b/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
+@@ -75,6 +75,7 @@ import com.sun.star.registry.XRegistryKey;
+ import com.sun.star.uno.AnyConverter;
+ import com.sun.star.uno.Type;
+ import com.sun.star.uno.UnoRuntime;
++import com.sun.star.xml.xslt.XXSLTTransformer;
+ 
+ //Uno to java Adaptor
+ import com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter;
+@@ -88,8 +89,8 @@ import net.sf.saxon.FeatureKeys;
+  * component on demand (__getServiceFactory()).
+  */
+ public class XSLTransformer
+-        implements XTypeProvider, XServiceName, XServiceInfo, XActiveDataSink,
+-        XActiveDataSource, XActiveDataControl, XInitialization, URIResolver, EntityResolver {
++        implements XTypeProvider, XServiceName, XServiceInfo, XXSLTTransformer,
++        URIResolver, EntityResolver {
+ 
+     /**
+      * This component provides java based XSL transformations
+@@ -132,7 +133,7 @@ public class XSLTransformer
+         svcfactory = msf;
+     }
+ 
+-    public void initialize(Object[] values) throws com.sun.star.uno.Exception {
++    public void initialize(Object[] args) throws com.sun.star.uno.Exception {
+         // some configurable debugging
+         String statsfilepath = null;
+         if ((statsfilepath = System.getProperty(STATSPROP)) != null) {
+@@ -146,6 +147,8 @@ public class XSLTransformer
+             }
+         }
+ 
++        Object[] values = (Object[]) args[0];
++
+         // reading the values
+         NamedValue nv = null;
+         debug("The transformation's parameters as 'name = value' pairs:\n");
+@@ -444,7 +447,7 @@ public class XSLTransformer
+             }
+         }
+     }    // --- component management interfaces... ---
+-    private final static String _serviceName = "com.sun.star.comp.JAXTHelper";
++    private final static String _serviceName = "com.sun.star.xml.xslt.XSLT2Transformer";
+ 
+     // Implement methods from interface XTypeProvider
+     public byte[] getImplementationId() {
+@@ -494,7 +497,7 @@ public class XSLTransformer
+     public static XSingleServiceFactory __getServiceFactory(
+             String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) {
+         XSingleServiceFactory xSingleServiceFactory = null;
+-        if (implName.indexOf("XSLTransformer") != -1) {
++        if (implName.equals(XSLTransformer.class.getName())) {
+             xSingleServiceFactory = FactoryHelper.getServiceFactory(XSLTransformer.class,
+                     _serviceName, multiFactory, regKey);
+         }
+diff --git a/filter/source/xsltfilter/components.rdb b/filter/source/xsltfilter/components.rdb
+index 080cb7a..6014b82 100644
+--- a/filter/source/xsltfilter/components.rdb
++++ b/filter/source/xsltfilter/components.rdb
+@@ -1,8 +1,8 @@
+ <?xml version="1.0"?>
+ <components xmlns="http://openoffice.org/2010/uno-components">
+     <component loader="com.sun.star.loader.Java2" uri="./XSLTFilter.jar">
+-        <implementation name="XSLTransformer">
+-            <service name="com.sun.star.comp.JAXTHelper"/>
++        <implementation name="com.sun.star.comp.xsltfilter.XSLTransformer">
++            <service name="com.sun.star.xml.xslt.XSLT2Transformer"/>
+         </implementation>
+     </component>
+ </components>
+diff --git a/filter/source/xsltfilter/xsltfilter.component b/filter/source/xsltfilter/xsltfilter.component
+index 5fb985c..296f2bc 100644
+--- a/filter/source/xsltfilter/xsltfilter.component
++++ b/filter/source/xsltfilter/xsltfilter.component
+@@ -32,6 +32,6 @@
+     <service name="com.sun.star.documentconversion.XSLTFilter"/>
+   </implementation>
+   <implementation name="com.sun.star.comp.documentconversion.LibXSLTTransformer">
+-    <service name="com.sun.star.documentconversion.LibXSLTTransformer"/>
++    <service name="com.sun.star.xml.xslt.XSLTTransformer"/>
+   </implementation>
+ </component>
+diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
+index 98cca5f..007cc52 100644
+--- a/offapi/UnoApi_offapi.mk
++++ b/offapi/UnoApi_offapi.mk
+@@ -285,6 +285,10 @@ $(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,offapi/com/sun/star/xml/sax,\
+ 	FastShapeContextHandler \
+ 	FastTokenHandler \
+ ))
++$(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,offapi/com/sun/star/xml/xslt,\
++	XSLTTransformer \
++	XSLT2Transformer \
++))
+ 
+ 
+ $(eval $(call gb_UnoApi_add_idlfiles_noheader,offapi,offapi/com/sun/star,\
+@@ -4255,6 +4259,11 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/xml/xpath,\
+ 	XXPathExtension \
+ 	XXPathObject \
+ ))
++
++$(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/xml/xslt,\
++	XXSLTTransformer \
++))
++
+ $(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/xsd,\
+ 	DataTypeClass \
+ 	WhiteSpaceTreatment \
+diff --git a/offapi/com/sun/star/xml/xslt/XSLT2Transformer.idl b/offapi/com/sun/star/xml/xslt/XSLT2Transformer.idl
+new file mode 100644
+index 0000000..af5abed
+--- /dev/null
++++ b/offapi/com/sun/star/xml/xslt/XSLT2Transformer.idl
+@@ -0,0 +1,30 @@
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/*
++ * This file is part of the LibreOffice project.
++ *
++ * This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
++ */
++
++#ifndef INCLUDED_COM_SUN_STAR_XML_XSLT_XSLT2TRANSFORMER_IDL
++#define INCLUDED_COM_SUN_STAR_XML_XSLT_XSLT2TRANSFORMER_IDL
++
++#include <com/sun/star/xml/xslt/XXSLTTransformer.idl>
++
++module com { module sun { module star { module xml { module xslt {
++
++/** Get XSLT filter transformer supporting XSLT 2.0.
++
++    @since LibreOffice 3.7
++ */
++service XSLT2Transformer : XXSLTTransformer
++{
++    create([in] sequence<any> args);
++};
++
++}; }; }; }; };
++
++#endif
++
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/offapi/com/sun/star/xml/xslt/XSLTTransformer.idl b/offapi/com/sun/star/xml/xslt/XSLTTransformer.idl
+new file mode 100644
+index 0000000..f9d75e3
+--- /dev/null
++++ b/offapi/com/sun/star/xml/xslt/XSLTTransformer.idl
+@@ -0,0 +1,32 @@
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/*
++ * This file is part of the LibreOffice project.
++ *
++ * This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
++ */
++
++#ifndef INCLUDED_COM_SUN_STAR_XML_XSLT_XSLTTRANSFORMER_IDL
++#define INCLUDED_COM_SUN_STAR_XML_XSLT_XSLTTRANSFORMER_IDL
++
++#include <com/sun/star/xml/xslt/XXSLTTransformer.idl>
++
++module com { module sun { module star { module xml { module xslt {
++
++/** Get unspecified XSLT filter transformer.
++
++    <p>It is not safe to expect support for any features except XSLT 1.0 .
++
++    @since LibreOffice 3.7
++  */
++service XSLTTransformer : XXSLTTransformer
++{
++    create([in] sequence<any> args);
++};
++
++}; }; }; }; };
++
++#endif
++
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/offapi/com/sun/star/xml/xslt/XXSLTTransformer.idl b/offapi/com/sun/star/xml/xslt/XXSLTTransformer.idl
+new file mode 100644
+index 0000000..9316c25
+--- /dev/null
++++ b/offapi/com/sun/star/xml/xslt/XXSLTTransformer.idl
+@@ -0,0 +1,36 @@
++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/*
++ * This file is part of the LibreOffice project.
++ *
++ * This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
++ */
++
++#ifndef INCLUDED_COM_SUN_STAR_XML_XSLT_XXSLTTRANSFORMER_IDL
++#define INCLUDED_COM_SUN_STAR_XML_XSLT_XXSLTTRANSFORMER_IDL
++
++#include <com/sun/star/io/XActiveDataControl.idl>
++#include <com/sun/star/io/XActiveDataSink.idl>
++#include <com/sun/star/io/XActiveDataSource.idl>
++#include <com/sun/star/lang/XInitialization.idl>
++
++module com { module sun { module star { module xml { module xslt {
++
++/** An interface for XSLT transformers.
++
++    @since LibreOffice 3.7
++ */
++interface XXSLTTransformer
++{
++    interface com::sun::star::io::XActiveDataControl;
++    interface com::sun::star::io::XActiveDataSink;
++    interface com::sun::star::io::XActiveDataSource;
++    interface com::sun::star::lang::XInitialization;
++};
++
++}; }; }; }; };
++
++#endif
++
++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+-- 
+1.7.11.7
+
diff --git a/0003-drop-saxon-based-XSLT-transformer.patch b/0003-drop-saxon-based-XSLT-transformer.patch
new file mode 100644
index 0000000..d856a95
--- /dev/null
+++ b/0003-drop-saxon-based-XSLT-transformer.patch
@@ -0,0 +1,3001 @@
+From 45928a0bf76f4cd59f4bcb20ac60057e4a786910 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Wed, 10 Oct 2012 17:33:30 +0200
+Subject: [PATCH 3/4] drop saxon-based XSLT transformer
+
+(cherry picked from commit bfc71eb03e2bc6f26d53f70b32f9a8937086808b)
+
+Conflicts:
+	filter/Jar_XSLTFilter.mk
+	filter/source/xsltfilter/XSLTFilter.jar.component
+	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java
+	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter.java
+	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
+
+Change-Id: I2cd4e0965452c376df8c5e43353fbdd6f62fb27d
+---
+ filter/Extension_xslt2_transformer.mk              |   18 -
+ filter/Jar_XSLTFilter.mk                           |   45 -
+ filter/Module_filter.mk                            |    2 -
+ filter/source/xsltfilter/Manifest                  |    2 -
+ filter/source/xsltfilter/XSLTFilter.jar.component  |   34 -
+ .../com/sun/star/comp/xsltfilter/Base64.java       | 1835 --------------------
+ .../comp/xsltfilter/XSLTFilterOLEExtracter.java    |  395 -----
+ .../sun/star/comp/xsltfilter/XSLTransformer.java   |  506 ------
+ filter/source/xsltfilter/components.rdb            |    8 -
+ filter/source/xsltfilter/description-en-US.txt     |    1 -
+ filter/source/xsltfilter/description.xml           |   28 -
+ filter/source/xsltfilter/manifest.xml              |    6 -
+ 12 files changed, 2880 deletions(-)
+ delete mode 100644 filter/Extension_xslt2_transformer.mk
+ delete mode 100644 filter/Jar_XSLTFilter.mk
+ delete mode 100644 filter/source/xsltfilter/Manifest
+ delete mode 100644 filter/source/xsltfilter/XSLTFilter.jar.component
+ delete mode 100644 filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java
+ delete mode 100644 filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter.java
+ delete mode 100644 filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
+ delete mode 100644 filter/source/xsltfilter/components.rdb
+ delete mode 100644 filter/source/xsltfilter/description-en-US.txt
+ delete mode 100644 filter/source/xsltfilter/description.xml
+ delete mode 100644 filter/source/xsltfilter/manifest.xml
+
+diff --git a/filter/Extension_xslt2_transformer.mk b/filter/Extension_xslt2_transformer.mk
+deleted file mode 100644
+index ab239d8..0000000
+--- a/filter/Extension_xslt2_transformer.mk
++++ /dev/null
+@@ -1,18 +0,0 @@
+-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+-#
+-# This file is part of the LibreOffice project.
+-#
+-# This Source Code Form is subject to the terms of the Mozilla Public
+-# License, v. 2.0. If a copy of the MPL was not distributed with this
+-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+-#
+-
+-$(eval $(call gb_Extension_Extension,xslt2-transformer,filter/source/xsltfilter))
+-
+-$(eval $(call gb_Extension_add_files,xslt2-transformer,,\
+-    $(call gb_Jar_get_outdir_target,saxon9) \
+-    $(call gb_Jar_get_outdir_target,XSLTFilter) \
+-	$(SRCDIR)/filter/source/xsltfilter/components.rdb \
+-))
+-
+-# vim: set noet sw=4 ts=4:
+diff --git a/filter/Jar_XSLTFilter.mk b/filter/Jar_XSLTFilter.mk
+deleted file mode 100644
+index 9522c26..0000000
+--- a/filter/Jar_XSLTFilter.mk
++++ /dev/null
+@@ -1,45 +0,0 @@
+-#***************************************************************
+-# Licensed to the Apache Software Foundation (ASF) under one
+-# or more contributor license agreements.  See the NOTICE file
+-# distributed with this work for additional information
+-# regarding copyright ownership.  The ASF licenses this file
+-# to you under the Apache License, Version 2.0 (the
+-# "License"); you may not use this file except in compliance
+-# with the License.  You may obtain a copy of the License at
+-#
+-#  http://www.apache.org/licenses/LICENSE-2.0
+-#
+-# Unless required by applicable law or agreed to in writing,
+-# software distributed under the License is distributed on an
+-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-# KIND, either express or implied.  See the License for the
+-# specific language governing permissions and limitations
+-# under the License.
+-#***************************************************************
+-
+-$(eval $(call gb_Jar_Jar,XSLTFilter))
+-
+-$(eval $(call gb_Jar_use_jars,XSLTFilter,\
+-	$(OUTDIR)/bin/ridl.jar \
+-	$(OUTDIR)/bin/unoil.jar \
+-	$(OUTDIR)/bin/jurt.jar \
+-	$(OUTDIR)/bin/juh.jar \
+-))
+-
+-$(eval $(call gb_Jar_use_externals,XSLTFilter,saxon))
+-
+-$(eval $(call gb_Jar_set_componentfile,XSLTFilter,filter/source/xsltfilter/XSLTFilter.jar,OOO))
+-
+-$(eval $(call gb_Jar_set_manifest,XSLTFilter,$(SRCDIR)/filter/source/xsltfilter/Manifest))
+-
+-$(eval $(call gb_Jar_set_jarclasspath,XSLTFilter,saxon9.jar))
+-
+-$(eval $(call gb_Jar_set_packageroot,XSLTFilter,com))
+-
+-$(eval $(call gb_Jar_add_sourcefiles,XSLTFilter,\
+-	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64 \
+-	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter \
+-	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer \
+-))
+-
+-# vim: set noet sw=4 ts=4:
+diff --git a/filter/Module_filter.mk b/filter/Module_filter.mk
+index 9c18157..c372862 100644
+--- a/filter/Module_filter.mk
++++ b/filter/Module_filter.mk
+@@ -72,8 +72,6 @@ $(eval $(call gb_Module_add_targets,filter,\
+ 
+ ifneq ($(SOLAR_JAVA),)
+ $(eval $(call gb_Module_add_targets,filter,\
+-	Extension_xslt2_transformer \
+-	Jar_XSLTFilter \
+ 	Jar_XSLTValidate \
+ ))
+ endif
+diff --git a/filter/source/xsltfilter/Manifest b/filter/source/xsltfilter/Manifest
+deleted file mode 100644
+index 1bd3102..0000000
+--- a/filter/source/xsltfilter/Manifest
++++ /dev/null
+@@ -1,2 +0,0 @@
+-RegistrationClassName: com.sun.star.comp.xsltfilter.XSLTransformer
+-UNO-Type-Path: 
+diff --git a/filter/source/xsltfilter/XSLTFilter.jar.component b/filter/source/xsltfilter/XSLTFilter.jar.component
+deleted file mode 100644
+index d4ecd66..0000000
+--- a/filter/source/xsltfilter/XSLTFilter.jar.component
++++ /dev/null
+@@ -1,34 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<!--**********************************************************************
+-*
+-* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-*
+-* Copyright 2000, 2010 Oracle and/or its affiliates.
+-*
+-* OpenOffice.org - a multi-platform office productivity suite
+-*
+-* This file is part of OpenOffice.org.
+-*
+-* OpenOffice.org is free software: you can redistribute it and/or modify
+-* it under the terms of the GNU Lesser General Public License version 3
+-* only, as published by the Free Software Foundation.
+-*
+-* OpenOffice.org is distributed in the hope that 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 version 3 for more details
+-* (a copy is included in the LICENSE file that accompanied this code).
+-*
+-* You should have received a copy of the GNU Lesser General Public License
+-* version 3 along with OpenOffice.org.  If not, see
+-* <http://www.openoffice.org/license.html>
+-* for a copy of the LGPLv3 License.
+-*
+-**********************************************************************-->
+-
+-<component loader="com.sun.star.loader.Java2"
+-    xmlns="http://openoffice.org/2010/uno-components">
+-  <implementation name="XSLTransformer">
+-    <service name="com.sun.star.comp.JAXTHelper"/>
+-  </implementation>
+-</component>
+diff --git a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java b/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java
+deleted file mode 100644
+index f92012e..0000000
+--- a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java
++++ /dev/null
+@@ -1,1835 +0,0 @@
+-package com.sun.star.comp.xsltfilter;
+-
+-/************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that 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 version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-/**
+- * <p>Encodes and decodes to and from Base64 notation.</p>
+- * <p>Homepage: <a href="http://iharder.net/base64">http://iharder.net/base64</a>.</p>
+- *
+- * <p>The <tt>options</tt> parameter, which appears in a few places, is used to pass
+- * several pieces of information to the encoder. In the "higher level" methods such as
+- * encodeBytes( bytes, options ) the options parameter can be used to indicate such
+- * things as first gzipping the bytes before encoding them, not inserting linefeeds
+- * (though that breaks strict Base64 compatibility), and encoding using the URL-safe
+- * and Ordered dialects.</p>
+- *
+- * <p>The constants defined in Base64 can be OR-ed together to combine options, so you
+- * might make a call like this:</p>
+- *
+- * <code>String encoded = Base64.encodeBytes( mybytes, Base64.GZIP | Base64.DONT_BREAK_LINES );</code>
+- *
+- * <p>to compress the data before encoding it and then making the output have no newline characters.</p>
+- *
+- *
+- * <p>
+- * Change Log:
+- * </p>
+- * <ul>
+- *  <li>v2.2.2 - Fixed encodeFileToFile and decodeFileToFile to use the
+- *   Base64.InputStream class to encode and decode on the fly which uses
+- *   less memory than encoding/decoding an entire file into memory before writing.</li>
+- *  <li>v2.2.1 - Fixed bug using URL_SAFE and ORDERED encodings. Fixed bug
+- *   when using very small files (~< 40 bytes).</li>
+- *  <li>v2.2 - Added some helper methods for encoding/decoding directly from
+- *   one file to the next. Also added a main() method to support command line
+- *   encoding/decoding from one file to the next. Also added these Base64 dialects:
+- *   <ol>
+- *   <li>The default is RFC3548 format.</li>
+- *   <li>Calling Base64.setFormat(Base64.BASE64_FORMAT.URLSAFE_FORMAT) generates
+- *   URL and file name friendly format as described in Section 4 of RFC3548.
+- *   http://www.faqs.org/rfcs/rfc3548.html</li>
+- *   <li>Calling Base64.setFormat(Base64.BASE64_FORMAT.ORDERED_FORMAT) generates
+- *   URL and file name friendly format that preserves lexical ordering as described
+- *   in http://www.faqs.org/qa/rfcc-1940.html</li>
+- *   </ol>
+- *   Special thanks to Jim Kellerman at <a href="http://www.powerset.com/">http://www.powerset.com/</a>
+- *   for contributing the new Base64 dialects.
+- *  </li>
+- *
+- *  <li>v2.1 - Cleaned up javadoc comments and unused variables and methods. Added
+- *   some convenience methods for reading and writing to and from files.</li>
+- *  <li>v2.0.2 - Now specifies UTF-8 encoding in places where the code fails on systems
+- *   with other encodings (like EBCDIC).</li>
+- *  <li>v2.0.1 - Fixed an error when decoding a single byte, that is, when the
+- *   encoded data was a single byte.</li>
+- *  <li>v2.0 - I got rid of methods that used booleans to set options.
+- *   Now everything is more consolidated and cleaner. The code now detects
+- *   when data that's being decoded is gzip-compressed and will decompress it
+- *   automatically. Generally things are cleaner. You'll probably have to
+- *   change some method calls that you were making to support the new
+- *   options format (<tt>int</tt>s that you "OR" together).</li>
+- *  <li>v1.5.1 - Fixed bug when decompressing and decoding to a
+- *   byte[] using <tt>decode( String s, boolean gzipCompressed )</tt>.
+- *   Added the ability to "suspend" encoding in the Output Stream so
+- *   you can turn on and off the encoding if you need to embed base64
+- *   data in an otherwise "normal" stream (like an XML file).</li>
+- *  <li>v1.5 - Output stream pases on flush() command but doesn't do anything itself.
+- *      This helps when using GZIP streams.
+- *      Added the ability to GZip-compress objects before encoding them.</li>
+- *  <li>v1.4 - Added helper methods to read/write files.</li>
+- *  <li>v1.3.6 - Fixed OutputStream.flush() so that 'position' is reset.</li>
+- *  <li>v1.3.5 - Added flag to turn on and off line breaks. Fixed bug in input stream
+- *      where last buffer being read, if not completely full, was not returned.</li>
+- *  <li>v1.3.4 - Fixed when "improperly padded stream" error was thrown at the wrong time.</li>
+- *  <li>v1.3.3 - Fixed I/O streams which were totally messed up.</li>
+- * </ul>
+- *
+- * <p>
+- * I am placing this code in the Public Domain. Do with it as you will.
+- * This software comes with no guarantees or warranties but with
+- * plenty of well-wishing instead!
+- * Please visit <a href="http://iharder.net/base64">http://iharder.net/base64</a>
+- * periodically to check for updates or to contribute improvements.
+- * </p>
+- *
+- * @author Robert Harder
+- * @author rob at iharder.net
+- * @version 2.2.2
+- */
+-public class Base64
+-{
+-
+-/* ********  P U B L I C   F I E L D S  ******** */
+-
+-
+-    /** No options specified. Value is zero. */
+-    public final static int NO_OPTIONS = 0;
+-
+-    /** Specify encoding. */
+-    public final static int ENCODE = 1;
+-
+-
+-    /** Specify decoding. */
+-    public final static int DECODE = 0;
+-
+-
+-    /** Specify that data should be gzip-compressed. */
+-    public final static int GZIP = 2;
+-
+-
+-    /** Don't break lines when encoding (violates strict Base64 specification) */
+-    public final static int DONT_BREAK_LINES = 8;
+-
+-    /**
+-     * Encode using Base64-like encoding that is URL- and Filename-safe as described
+-     * in Section 4 of RFC3548:
+-     * <a href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>.
+-     * It is important to note that data encoded this way is <em>not</em> officially valid Base64,
+-     * or at the very least should not be called Base64 without also specifying that is
+-     * was encoded using the URL- and Filename-safe dialect.
+-     */
+-     public final static int URL_SAFE = 16;
+-
+-
+-     /**
+-      * Encode using the special "ordered" dialect of Base64 described here:
+-      * <a href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
+-      */
+-     public final static int ORDERED = 32;
+-
+-
+-/* ********  P R I V A T E   F I E L D S  ******** */
+-
+-
+-    /** Maximum line length (76) of Base64 output. */
+-    private final static int MAX_LINE_LENGTH = 76;
+-
+-
+-    /** The equals sign (=) as a byte. */
+-    private final static byte EQUALS_SIGN = (byte)'=';
+-
+-
+-    /** The new line character (\n) as a byte. */
+-    private final static byte NEW_LINE = (byte)'\n';
+-
+-
+-    /** Preferred encoding. */
+-    private final static String PREFERRED_ENCODING = "UTF-8";
+-
+-
+-    // I think I end up not using the BAD_ENCODING indicator.
+-    //private final static byte BAD_ENCODING    = -9; // Indicates error in encoding
+-    private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding
+-    private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding
+-
+-
+-/* ********  S T A N D A R D   B A S E 6 4   A L P H A B E T  ******** */
+-
+-    /** The 64 valid Base64 values. */
+-    //private final static byte[] ALPHABET;
+-    /* Host platform me be something funny like EBCDIC, so we hardcode these values. */
+-    private final static byte[] _STANDARD_ALPHABET =
+-    {
+-        (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
+-        (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
+-        (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
+-        (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
+-        (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
+-        (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
+-        (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
+-        (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z',
+-        (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5',
+-        (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'+', (byte)'/'
+-    };
+-
+-
+-    /**
+-     * Translates a Base64 value to either its 6-bit reconstruction value
+-     * or a negative number indicating some other meaning.
+-     **/
+-    private final static byte[] _STANDARD_DECODABET =
+-    {
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,                 // Decimal  0 -  8
+-        -5,-5,                                      // Whitespace: Tab and Linefeed
+-        -9,-9,                                      // Decimal 11 - 12
+-        -5,                                         // Whitespace: Carriage Return
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 14 - 26
+-        -9,-9,-9,-9,-9,                             // Decimal 27 - 31
+-        -5,                                         // Whitespace: Space
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,              // Decimal 33 - 42
+-        62,                                         // Plus sign at decimal 43
+-        -9,-9,-9,                                   // Decimal 44 - 46
+-        63,                                         // Slash at decimal 47
+-        52,53,54,55,56,57,58,59,60,61,              // Numbers zero through nine
+-        -9,-9,-9,                                   // Decimal 58 - 60
+-        -1,                                         // Equals sign at decimal 61
+-        -9,-9,-9,                                      // Decimal 62 - 64
+-        0,1,2,3,4,5,6,7,8,9,10,11,12,13,            // Letters 'A' through 'N'
+-        14,15,16,17,18,19,20,21,22,23,24,25,        // Letters 'O' through 'Z'
+-        -9,-9,-9,-9,-9,-9,                          // Decimal 91 - 96
+-        26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm'
+-        39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z'
+-        -9,-9,-9,-9                                 // Decimal 123 - 126
+-        /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 179 - 191
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 192 - 204
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */
+-    };
+-
+-
+-/* ********  U R L   S A F E   B A S E 6 4   A L P H A B E T  ******** */
+-
+-    /**
+-     * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548:
+-     * <a href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>.
+-     * Notice that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash."
+-     */
+-    private final static byte[] _URL_SAFE_ALPHABET =
+-    {
+-      (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
+-      (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
+-      (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
+-      (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
+-      (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
+-      (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
+-      (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
+-      (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z',
+-      (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5',
+-      (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'-', (byte)'_'
+-    };
+-
+-    /**
+-     * Used in decoding URL- and Filename-safe dialects of Base64.
+-     */
+-    private final static byte[] _URL_SAFE_DECODABET =
+-    {
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,                 // Decimal  0 -  8
+-      -5,-5,                                      // Whitespace: Tab and Linefeed
+-      -9,-9,                                      // Decimal 11 - 12
+-      -5,                                         // Whitespace: Carriage Return
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 14 - 26
+-      -9,-9,-9,-9,-9,                             // Decimal 27 - 31
+-      -5,                                         // Whitespace: Space
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,              // Decimal 33 - 42
+-      -9,                                         // Plus sign at decimal 43
+-      -9,                                         // Decimal 44
+-      62,                                         // Minus sign at decimal 45
+-      -9,                                         // Decimal 46
+-      -9,                                         // Slash at decimal 47
+-      52,53,54,55,56,57,58,59,60,61,              // Numbers zero through nine
+-      -9,-9,-9,                                   // Decimal 58 - 60
+-      -1,                                         // Equals sign at decimal 61
+-      -9,-9,-9,                                   // Decimal 62 - 64
+-      0,1,2,3,4,5,6,7,8,9,10,11,12,13,            // Letters 'A' through 'N'
+-      14,15,16,17,18,19,20,21,22,23,24,25,        // Letters 'O' through 'Z'
+-      -9,-9,-9,-9,                                // Decimal 91 - 94
+-      63,                                         // Underscore at decimal 95
+-      -9,                                         // Decimal 96
+-      26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm'
+-      39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z'
+-      -9,-9,-9,-9                                 // Decimal 123 - 126
+-      /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 179 - 191
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 192 - 204
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */
+-    };
+-
+-
+-
+-/* ********  O R D E R E D   B A S E 6 4   A L P H A B E T  ******** */
+-
+-    /**
+-     * I don't get the point of this technique, but it is described here:
+-     * <a href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
+-     */
+-    private final static byte[] _ORDERED_ALPHABET =
+-    {
+-      (byte)'-',
+-      (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4',
+-      (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9',
+-      (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
+-      (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
+-      (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
+-      (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
+-      (byte)'_',
+-      (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
+-      (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
+-      (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
+-      (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z'
+-    };
+-
+-    /**
+-     * Used in decoding the "ordered" dialect of Base64.
+-     */
+-    private final static byte[] _ORDERED_DECODABET =
+-    {
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,                 // Decimal  0 -  8
+-      -5,-5,                                      // Whitespace: Tab and Linefeed
+-      -9,-9,                                      // Decimal 11 - 12
+-      -5,                                         // Whitespace: Carriage Return
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 14 - 26
+-      -9,-9,-9,-9,-9,                             // Decimal 27 - 31
+-      -5,                                         // Whitespace: Space
+-      -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,              // Decimal 33 - 42
+-      -9,                                         // Plus sign at decimal 43
+-      -9,                                         // Decimal 44
+-      0,                                          // Minus sign at decimal 45
+-      -9,                                         // Decimal 46
+-      -9,                                         // Slash at decimal 47
+-      1,2,3,4,5,6,7,8,9,10,                       // Numbers zero through nine
+-      -9,-9,-9,                                   // Decimal 58 - 60
+-      -1,                                         // Equals sign at decimal 61
+-      -9,-9,-9,                                   // Decimal 62 - 64
+-      11,12,13,14,15,16,17,18,19,20,21,22,23,     // Letters 'A' through 'M'
+-      24,25,26,27,28,29,30,31,32,33,34,35,36,     // Letters 'N' through 'Z'
+-      -9,-9,-9,-9,                                // Decimal 91 - 94
+-      37,                                         // Underscore at decimal 95
+-      -9,                                         // Decimal 96
+-      38,39,40,41,42,43,44,45,46,47,48,49,50,     // Letters 'a' through 'm'
+-      51,52,53,54,55,56,57,58,59,60,61,62,63,     // Letters 'n' through 'z'
+-      -9,-9,-9,-9                                 // Decimal 123 - 126
+-      /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 179 - 191
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 192 - 204
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243
+-        -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */
+-    };
+-
+-
+-/* ********  D E T E R M I N E   W H I C H   A L H A B E T  ******** */
+-
+-
+-    /**
+-     * Returns one of the _SOMETHING_ALPHABET byte arrays depending on
+-     * the options specified.
+-     * It's possible, though silly, to specify ORDERED and URLSAFE
+-     * in which case one of them will be picked, though there is
+-     * no guarantee as to which one will be picked.
+-     */
+-    private final static byte[] getAlphabet( int options )
+-    {
+-        if( (options & URL_SAFE) == URL_SAFE ) return _URL_SAFE_ALPHABET;
+-        else if( (options & ORDERED) == ORDERED ) return _ORDERED_ALPHABET;
+-        else return _STANDARD_ALPHABET;
+-
+-    }   // end getAlphabet
+-
+-
+-    /**
+-     * Returns one of the _SOMETHING_DECODABET byte arrays depending on
+-     * the options specified.
+-     * It's possible, though silly, to specify ORDERED and URL_SAFE
+-     * in which case one of them will be picked, though there is
+-     * no guarantee as to which one will be picked.
+-     */
+-    private final static byte[] getDecodabet( int options )
+-    {
+-        if( (options & URL_SAFE) == URL_SAFE ) return _URL_SAFE_DECODABET;
+-        else if( (options & ORDERED) == ORDERED ) return _ORDERED_DECODABET;
+-        else return _STANDARD_DECODABET;
+-
+-    }   // end getAlphabet
+-
+-
+-
+-    /** Defeats instantiation. */
+-    private Base64(){}
+-
+-
+-    /**
+-     * Encodes or decodes two files from the command line;
+-     * <strong>feel free to delete this method (in fact you probably should)
+-     * if you're embedding this code into a larger program.</strong>
+-     */
+-    public final static void main( String[] args )
+-    {
+-        if( args.length < 3 ){
+-            usage("Not enough arguments.");
+-        }   // end if: args.length < 3
+-        else {
+-            String flag = args[0];
+-            String infile = args[1];
+-            String outfile = args[2];
+-            if( flag.equals( "-e" ) ){
+-                Base64.encodeFileToFile( infile, outfile );
+-            }   // end if: encode
+-            else if( flag.equals( "-d" ) ) {
+-                Base64.decodeFileToFile( infile, outfile );
+-            }   // end else if: decode
+-            else {
+-                usage( "Unknown flag: " + flag );
+-            }   // end else
+-        }   // end else
+-    }   // end main
+-
+-    /**
+-     * Prints command line usage.
+-     *
+-     * @param msg A message to include with usage info.
+-     */
+-    private final static void usage( String msg )
+-    {
+-        System.err.println( msg );
+-        System.err.println( "Usage: java Base64 -e|-d inputfile outputfile" );
+-    }   // end usage
+-
+-
+-/* ********  E N C O D I N G   M E T H O D S  ******** */
+-
+-
+-    /**
+-     * Encodes up to the first three bytes of array <var>threeBytes</var>
+-     * and returns a four-byte array in Base64 notation.
+-     * The actual number of significant bytes in your array is
+-     * given by <var>numSigBytes</var>.
+-     * The array <var>threeBytes</var> needs only be as big as
+-     * <var>numSigBytes</var>.
+-     * Code can reuse a byte array by passing a four-byte array as <var>b4</var>.
+-     *
+-     * @param b4 A reusable byte array to reduce array instantiation
+-     * @param threeBytes the array to convert
+-     * @param numSigBytes the number of significant bytes in your array
+-     * @return four byte array in Base64 notation.
+-     * @since 1.5.1
+-     */
+-    private static byte[] encode3to4( byte[] b4, byte[] threeBytes, int numSigBytes, int options )
+-    {
+-        encode3to4( threeBytes, 0, numSigBytes, b4, 0, options );
+-        return b4;
+-    }   // end encode3to4
+-
+-
+-    /**
+-     * <p>Encodes up to three bytes of the array <var>source</var>
+-     * and writes the resulting four Base64 bytes to <var>destination</var>.
+-     * The source and destination arrays can be manipulated
+-     * anywhere along their length by specifying
+-     * <var>srcOffset</var> and <var>destOffset</var>.
+-     * This method does not check to make sure your arrays
+-     * are large enough to accomodate <var>srcOffset</var> + 3 for
+-     * the <var>source</var> array or <var>destOffset</var> + 4 for
+-     * the <var>destination</var> array.
+-     * The actual number of significant bytes in your array is
+-     * given by <var>numSigBytes</var>.</p>
+-     * <p>This is the lowest level of the encoding methods with
+-     * all possible parameters.</p>
+-     *
+-     * @param source the array to convert
+-     * @param srcOffset the index where conversion begins
+-     * @param numSigBytes the number of significant bytes in your array
+-     * @param destination the array to hold the conversion
+-     * @param destOffset the index where output will be put
+-     * @return the <var>destination</var> array
+-     * @since 1.3
+-     */
+-    private static byte[] encode3to4(
+-     byte[] source, int srcOffset, int numSigBytes,
+-     byte[] destination, int destOffset, int options )
+-    {
+-        byte[] ALPHABET = getAlphabet( options );
+-
+-        //           1         2         3
+-        // 01234567890123456789012345678901 Bit position
+-        // --------000000001111111122222222 Array position from threeBytes
+-        // --------|    ||    ||    ||    | Six bit groups to index ALPHABET
+-        //          >>18  >>12  >> 6  >> 0  Right shift necessary
+-        //                0x3f  0x3f  0x3f  Additional AND
+-
+-        // Create buffer with zero-padding if there are only one or two
+-        // significant bytes passed in the array.
+-        // We have to shift left 24 in order to flush out the 1's that appear
+-        // when Java treats a value as negative that is cast from a byte to an int.
+-        int inBuff =   ( numSigBytes > 0 ? ((source[ srcOffset     ] << 24) >>>  8) : 0 )
+-                     | ( numSigBytes > 1 ? ((source[ srcOffset + 1 ] << 24) >>> 16) : 0 )
+-                     | ( numSigBytes > 2 ? ((source[ srcOffset + 2 ] << 24) >>> 24) : 0 );
+-
+-        switch( numSigBytes )
+-        {
+-            case 3:
+-                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
+-                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
+-                destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>>  6) & 0x3f ];
+-                destination[ destOffset + 3 ] = ALPHABET[ (inBuff       ) & 0x3f ];
+-                return destination;
+-
+-            case 2:
+-                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
+-                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
+-                destination[ destOffset + 2 ] = ALPHABET[ (inBuff >>>  6) & 0x3f ];
+-                destination[ destOffset + 3 ] = EQUALS_SIGN;
+-                return destination;
+-
+-            case 1:
+-                destination[ destOffset     ] = ALPHABET[ (inBuff >>> 18)        ];
+-                destination[ destOffset + 1 ] = ALPHABET[ (inBuff >>> 12) & 0x3f ];
+-                destination[ destOffset + 2 ] = EQUALS_SIGN;
+-                destination[ destOffset + 3 ] = EQUALS_SIGN;
+-                return destination;
+-
+-            default:
+-                return destination;
+-        }   // end switch
+-    }   // end encode3to4
+-
+-
+-
+-    /**
+-     * Serializes an object and returns the Base64-encoded
+-     * version of that serialized object. If the object
+-     * cannot be serialized or there is another error,
+-     * the method will return <tt>null</tt>.
+-     * The object is not GZip-compressed before being encoded.
+-     *
+-     * @param serializableObject The object to encode
+-     * @return The Base64-encoded object
+-     * @since 1.4
+-     */
+-    public static String encodeObject( java.io.Serializable serializableObject )
+-    {
+-        return encodeObject( serializableObject, NO_OPTIONS );
+-    }   // end encodeObject
+-
+-
+-
+-    /**
+-     * Serializes an object and returns the Base64-encoded
+-     * version of that serialized object. If the object
+-     * cannot be serialized or there is another error,
+-     * the method will return <tt>null</tt>.
+-     * <p>
+-     * Valid options:<pre>
+-     *   GZIP: gzip-compresses object before encoding it.
+-     *   DONT_BREAK_LINES: don't break lines at 76 characters
+-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+-     * </pre>
+-     * <p>
+-     * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or
+-     * <p>
+-     * Example: <code>encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
+-     *
+-     * @param serializableObject The object to encode
+-     * @param options Specified options
+-     * @return The Base64-encoded object
+-     * @see Base64#GZIP
+-     * @see Base64#DONT_BREAK_LINES
+-     * @since 2.0
+-     */
+-    public static String encodeObject( java.io.Serializable serializableObject, int options )
+-    {
+-        // Streams
+-        java.io.ByteArrayOutputStream  baos  = null;
+-        java.io.OutputStream           b64os = null;
+-        java.io.ObjectOutputStream     oos   = null;
+-        java.util.zip.GZIPOutputStream gzos  = null;
+-
+-        // Isolate options
+-        int gzip           = (options & GZIP);
+-        int dontBreakLines = (options & DONT_BREAK_LINES);
+-
+-        try
+-        {
+-            // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
+-            baos  = new java.io.ByteArrayOutputStream();
+-            b64os = new Base64.OutputStream( baos, ENCODE | options );
+-
+-            // GZip?
+-            if( gzip == GZIP )
+-            {
+-                gzos = new java.util.zip.GZIPOutputStream( b64os );
+-                oos  = new java.io.ObjectOutputStream( gzos );
+-            }   // end if: gzip
+-            else
+-                oos   = new java.io.ObjectOutputStream( b64os );
+-
+-            oos.writeObject( serializableObject );
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-            e.printStackTrace();
+-            return null;
+-        }   // end catch
+-        finally
+-        {
+-            try{ oos.close();   } catch( Exception e ){}
+-            try{ gzos.close();  } catch( Exception e ){}
+-            try{ b64os.close(); } catch( Exception e ){}
+-            try{ baos.close();  } catch( Exception e ){}
+-        }   // end finally
+-
+-        // Return value according to relevant encoding.
+-        try
+-        {
+-            return new String( baos.toByteArray(), PREFERRED_ENCODING );
+-        }   // end try
+-        catch (java.io.UnsupportedEncodingException uue)
+-        {
+-            return new String( baos.toByteArray() );
+-        }   // end catch
+-
+-    }   // end encode
+-
+-
+-
+-    /**
+-     * Encodes a byte array into Base64 notation.
+-     * Does not GZip-compress data.
+-     *
+-     * @param source The data to convert
+-     * @since 1.4
+-     */
+-    public static String encodeBytes( byte[] source )
+-    {
+-        return encodeBytes( source, 0, source.length, NO_OPTIONS );
+-    }   // end encodeBytes
+-
+-
+-
+-    /**
+-     * Encodes a byte array into Base64 notation.
+-     * <p>
+-     * Valid options:<pre>
+-     *   GZIP: gzip-compresses object before encoding it.
+-     *   DONT_BREAK_LINES: don't break lines at 76 characters
+-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+-     * </pre>
+-     * <p>
+-     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
+-     * <p>
+-     * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
+-     *
+-     *
+-     * @param source The data to convert
+-     * @param options Specified options
+-     * @see Base64#GZIP
+-     * @see Base64#DONT_BREAK_LINES
+-     * @since 2.0
+-     */
+-    public static String encodeBytes( byte[] source, int options )
+-    {
+-        return encodeBytes( source, 0, source.length, options );
+-    }   // end encodeBytes
+-
+-
+-    /**
+-     * Encodes a byte array into Base64 notation.
+-     * Does not GZip-compress data.
+-     *
+-     * @param source The data to convert
+-     * @param off Offset in array where conversion should begin
+-     * @param len Length of data to convert
+-     * @since 1.4
+-     */
+-    public static String encodeBytes( byte[] source, int off, int len )
+-    {
+-        return encodeBytes( source, off, len, NO_OPTIONS );
+-    }   // end encodeBytes
+-
+-
+-
+-    /**
+-     * Encodes a byte array into Base64 notation.
+-     * <p>
+-     * Valid options:<pre>
+-     *   GZIP: gzip-compresses object before encoding it.
+-     *   DONT_BREAK_LINES: don't break lines at 76 characters
+-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+-     * </pre>
+-     * <p>
+-     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
+-     * <p>
+-     * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
+-     *
+-     *
+-     * @param source The data to convert
+-     * @param off Offset in array where conversion should begin
+-     * @param len Length of data to convert
+-     * @param options Specified options
+-     * @param options alphabet type is pulled from this (standard, url-safe, ordered)
+-     * @see Base64#GZIP
+-     * @see Base64#DONT_BREAK_LINES
+-     * @since 2.0
+-     */
+-    public static String encodeBytes( byte[] source, int off, int len, int options )
+-    {
+-        // Isolate options
+-        int dontBreakLines = ( options & DONT_BREAK_LINES );
+-        int gzip           = ( options & GZIP   );
+-
+-        // Compress?
+-        if( gzip == GZIP )
+-        {
+-            java.io.ByteArrayOutputStream  baos  = null;
+-            java.util.zip.GZIPOutputStream gzos  = null;
+-            Base64.OutputStream            b64os = null;
+-
+-
+-            try
+-            {
+-                // GZip -> Base64 -> ByteArray
+-                baos = new java.io.ByteArrayOutputStream();
+-                b64os = new Base64.OutputStream( baos, ENCODE | options );
+-                gzos  = new java.util.zip.GZIPOutputStream( b64os );
+-
+-                gzos.write( source, off, len );
+-                gzos.close();
+-            }   // end try
+-            catch( java.io.IOException e )
+-            {
+-                e.printStackTrace();
+-                return null;
+-            }   // end catch
+-            finally
+-            {
+-                try{ gzos.close();  } catch( Exception e ){}
+-                try{ b64os.close(); } catch( Exception e ){}
+-                try{ baos.close();  } catch( Exception e ){}
+-            }   // end finally
+-
+-            // Return value according to relevant encoding.
+-            try
+-            {
+-                return new String( baos.toByteArray(), PREFERRED_ENCODING );
+-            }   // end try
+-            catch (java.io.UnsupportedEncodingException uue)
+-            {
+-                return new String( baos.toByteArray() );
+-            }   // end catch
+-        }   // end if: compress
+-
+-        // Else, don't compress. Better not to use streams at all then.
+-        else
+-        {
+-            // Convert option to boolean in way that code likes it.
+-            boolean breakLines = dontBreakLines == 0;
+-
+-            int    len43   = len * 4 / 3;
+-            byte[] outBuff = new byte[   ( len43 )                      // Main 4:3
+-                                       + ( (len % 3) > 0 ? 4 : 0 )      // Account for padding
+-                                       + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines
+-            int d = 0;
+-            int e = 0;
+-            int len2 = len - 2;
+-            int lineLength = 0;
+-            for( ; d < len2; d+=3, e+=4 )
+-            {
+-                encode3to4( source, d+off, 3, outBuff, e, options );
+-
+-                lineLength += 4;
+-                if( breakLines && lineLength == MAX_LINE_LENGTH )
+-                {
+-                    outBuff[e+4] = NEW_LINE;
+-                    e++;
+-                    lineLength = 0;
+-                }   // end if: end of line
+-            }   // en dfor: each piece of array
+-
+-            if( d < len )
+-            {
+-                encode3to4( source, d+off, len - d, outBuff, e, options );
+-                e += 4;
+-            }   // end if: some padding needed
+-
+-
+-            // Return value according to relevant encoding.
+-            try
+-            {
+-                return new String( outBuff, 0, e, PREFERRED_ENCODING );
+-            }   // end try
+-            catch (java.io.UnsupportedEncodingException uue)
+-            {
+-                return new String( outBuff, 0, e );
+-            }   // end catch
+-
+-        }   // end else: don't compress
+-
+-    }   // end encodeBytes
+-
+-
+-
+-
+-
+-/* ********  D E C O D I N G   M E T H O D S  ******** */
+-
+-
+-    /**
+-     * Decodes four bytes from array <var>source</var>
+-     * and writes the resulting bytes (up to three of them)
+-     * to <var>destination</var>.
+-     * The source and destination arrays can be manipulated
+-     * anywhere along their length by specifying
+-     * <var>srcOffset</var> and <var>destOffset</var>.
+-     * This method does not check to make sure your arrays
+-     * are large enough to accomodate <var>srcOffset</var> + 4 for
+-     * the <var>source</var> array or <var>destOffset</var> + 3 for
+-     * the <var>destination</var> array.
+-     * This method returns the actual number of bytes that
+-     * were converted from the Base64 encoding.
+-     * <p>This is the lowest level of the decoding methods with
+-     * all possible parameters.</p>
+-     *
+-     *
+-     * @param source the array to convert
+-     * @param srcOffset the index where conversion begins
+-     * @param destination the array to hold the conversion
+-     * @param destOffset the index where output will be put
+-     * @param options alphabet type is pulled from this (standard, url-safe, ordered)
+-     * @return the number of decoded bytes converted
+-     * @since 1.3
+-     */
+-    private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset, int options )
+-    {
+-        byte[] DECODABET = getDecodabet( options );
+-
+-        // Example: Dk==
+-        if( source[ srcOffset + 2] == EQUALS_SIGN )
+-        {
+-            // Two ways to do the same thing. Don't know which way I like best.
+-            //int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] << 24 ) >>>  6 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );
+-            int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] & 0xFF ) << 18 )
+-                          | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 );
+-
+-            destination[ destOffset ] = (byte)( outBuff >>> 16 );
+-            return 1;
+-        }
+-
+-        // Example: DkL=
+-        else if( source[ srcOffset + 3 ] == EQUALS_SIGN )
+-        {
+-            // Two ways to do the same thing. Don't know which way I like best.
+-            //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );
+-            int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )
+-                          | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )
+-                          | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6 );
+-
+-            destination[ destOffset     ] = (byte)( outBuff >>> 16 );
+-            destination[ destOffset + 1 ] = (byte)( outBuff >>>  8 );
+-            return 2;
+-        }
+-
+-        // Example: DkLE
+-        else
+-        {
+-            try{
+-            // Two ways to do the same thing. Don't know which way I like best.
+-            //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )
+-            //              | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );
+-            int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )
+-                          | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )
+-                          | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6)
+-                          | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF )      );
+-
+-
+-            destination[ destOffset     ] = (byte)( outBuff >> 16 );
+-            destination[ destOffset + 1 ] = (byte)( outBuff >>  8 );
+-            destination[ destOffset + 2 ] = (byte)( outBuff       );
+-
+-            return 3;
+-            }catch( Exception e){
+-                System.out.println(""+source[srcOffset]+ ": " + ( DECODABET[ source[ srcOffset     ] ]  ) );
+-                System.out.println(""+source[srcOffset+1]+  ": " + ( DECODABET[ source[ srcOffset + 1 ] ]  ) );
+-                System.out.println(""+source[srcOffset+2]+  ": " + ( DECODABET[ source[ srcOffset + 2 ] ]  ) );
+-                System.out.println(""+source[srcOffset+3]+  ": " + ( DECODABET[ source[ srcOffset + 3 ] ]  ) );
+-                return -1;
+-            }   // end catch
+-        }
+-    }   // end decodeToBytes
+-
+-
+-
+-
+-    /**
+-     * Very low-level access to decoding ASCII characters in
+-     * the form of a byte array. Does not support automatically
+-     * gunzipping or any other "fancy" features.
+-     *
+-     * @param source The Base64 encoded data
+-     * @param off    The offset of where to begin decoding
+-     * @param len    The length of characters to decode
+-     * @return decoded data
+-     * @since 1.3
+-     */
+-    public static byte[] decode( byte[] source, int off, int len, int options )
+-    {
+-        byte[] DECODABET = getDecodabet( options );
+-
+-        int    len34   = len * 3 / 4;
+-        byte[] outBuff = new byte[ len34 ]; // Upper limit on size of output
+-        int    outBuffPosn = 0;
+-
+-        byte[] b4        = new byte[4];
+-        int    b4Posn    = 0;
+-        int    i         = 0;
+-        byte   sbiCrop   = 0;
+-        byte   sbiDecode = 0;
+-        for( i = off; i < off+len; i++ )
+-        {
+-            sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits
+-            sbiDecode = DECODABET[ sbiCrop ];
+-
+-            if( sbiDecode >= WHITE_SPACE_ENC ) // White space, Equals sign or better
+-            {
+-                if( sbiDecode >= EQUALS_SIGN_ENC )
+-                {
+-                    b4[ b4Posn++ ] = sbiCrop;
+-                    if( b4Posn > 3 )
+-                    {
+-                        outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options );
+-                        b4Posn = 0;
+-
+-                        // If that was the equals sign, break out of 'for' loop
+-                        if( sbiCrop == EQUALS_SIGN )
+-                            break;
+-                    }   // end if: quartet built
+-
+-                }   // end if: equals sign or better
+-
+-            }   // end if: white space, equals sign or better
+-            else
+-            {
+-                System.err.println( "Bad Base64 input character at " + i + ": " + source[i] + "(decimal)" );
+-                return null;
+-            }   // end else:
+-        }   // each input character
+-
+-        byte[] out = new byte[ outBuffPosn ];
+-        System.arraycopy( outBuff, 0, out, 0, outBuffPosn );
+-        return out;
+-    }   // end decode
+-
+-
+-
+-
+-    /**
+-     * Decodes data from Base64 notation, automatically
+-     * detecting gzip-compressed data and decompressing it.
+-     *
+-     * @param s the string to decode
+-     * @return the decoded data
+-     * @since 1.4
+-     */
+-    public static byte[] decode( String s )
+-    {
+-        return decode( s, NO_OPTIONS );
+-    }
+-
+-
+-    /**
+-     * Decodes data from Base64 notation, automatically
+-     * detecting gzip-compressed data and decompressing it.
+-     *
+-     * @param s the string to decode
+-     * @param options encode options such as URL_SAFE
+-     * @return the decoded data
+-     * @since 1.4
+-     */
+-    public static byte[] decode( String s, int options )
+-    {
+-        byte[] bytes;
+-        try
+-        {
+-            bytes = s.getBytes( PREFERRED_ENCODING );
+-        }   // end try
+-        catch( java.io.UnsupportedEncodingException uee )
+-        {
+-            bytes = s.getBytes();
+-        }   // end catch
+-        //</change>
+-
+-        // Decode
+-        bytes = decode( bytes, 0, bytes.length, options );
+-
+-
+-        // Check to see if it's gzip-compressed
+-        // GZIP Magic Two-Byte Number: 0x8b1f (35615)
+-        if( bytes != null && bytes.length >= 4 )
+-        {
+-
+-            int head = ((int)bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00);
+-            if( java.util.zip.GZIPInputStream.GZIP_MAGIC == head )
+-            {
+-                java.io.ByteArrayInputStream  bais = null;
+-                java.util.zip.GZIPInputStream gzis = null;
+-                java.io.ByteArrayOutputStream baos = null;
+-                byte[] buffer = new byte[2048];
+-                int    length = 0;
+-
+-                try
+-                {
+-                    baos = new java.io.ByteArrayOutputStream();
+-                    bais = new java.io.ByteArrayInputStream( bytes );
+-                    gzis = new java.util.zip.GZIPInputStream( bais );
+-
+-                    while( ( length = gzis.read( buffer ) ) >= 0 )
+-                    {
+-                        baos.write(buffer,0,length);
+-                    }   // end while: reading input
+-
+-                    // No error? Get new bytes.
+-                    bytes = baos.toByteArray();
+-
+-                }   // end try
+-                catch( java.io.IOException e )
+-                {
+-                    // Just return originally-decoded bytes
+-                }   // end catch
+-                finally
+-                {
+-                    try{ baos.close(); } catch( Exception e ){}
+-                    try{ gzis.close(); } catch( Exception e ){}
+-                    try{ bais.close(); } catch( Exception e ){}
+-                }   // end finally
+-
+-            }   // end if: gzipped
+-        }   // end if: bytes.length >= 2
+-
+-        return bytes;
+-    }   // end decode
+-
+-
+-
+-
+-    /**
+-     * Attempts to decode Base64 data and deserialize a Java
+-     * Object within. Returns <tt>null</tt> if there was an error.
+-     *
+-     * @param encodedObject The Base64 data to decode
+-     * @return The decoded and deserialized object
+-     * @since 1.5
+-     */
+-    public static Object decodeToObject( String encodedObject )
+-    {
+-        // Decode and gunzip if necessary
+-        byte[] objBytes = decode( encodedObject );
+-
+-        java.io.ByteArrayInputStream  bais = null;
+-        java.io.ObjectInputStream     ois  = null;
+-        Object obj = null;
+-
+-        try
+-        {
+-            bais = new java.io.ByteArrayInputStream( objBytes );
+-            ois  = new java.io.ObjectInputStream( bais );
+-
+-            obj = ois.readObject();
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-            e.printStackTrace();
+-            obj = null;
+-        }   // end catch
+-        catch( java.lang.ClassNotFoundException e )
+-        {
+-            e.printStackTrace();
+-            obj = null;
+-        }   // end catch
+-        finally
+-        {
+-            try{ bais.close(); } catch( Exception e ){}
+-            try{ ois.close();  } catch( Exception e ){}
+-        }   // end finally
+-
+-        return obj;
+-    }   // end decodeObject
+-
+-
+-
+-    /**
+-     * Convenience method for encoding data to a file.
+-     *
+-     * @param dataToEncode byte array of data to encode in base64 form
+-     * @param filename Filename for saving encoded data
+-     * @return <tt>true</tt> if successful, <tt>false</tt> otherwise
+-     *
+-     * @since 2.1
+-     */
+-    public static boolean encodeToFile( byte[] dataToEncode, String filename )
+-    {
+-        boolean success = false;
+-        Base64.OutputStream bos = null;
+-        try
+-        {
+-            bos = new Base64.OutputStream(
+-                      new java.io.FileOutputStream( filename ), Base64.ENCODE );
+-            bos.write( dataToEncode );
+-            success = true;
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-
+-            success = false;
+-        }   // end catch: IOException
+-        finally
+-        {
+-            try{ bos.close(); } catch( Exception e ){}
+-        }   // end finally
+-
+-        return success;
+-    }   // end encodeToFile
+-
+-
+-    /**
+-     * Convenience method for decoding data to a file.
+-     *
+-     * @param dataToDecode Base64-encoded data as a string
+-     * @param filename Filename for saving decoded data
+-     * @return <tt>true</tt> if successful, <tt>false</tt> otherwise
+-     *
+-     * @since 2.1
+-     */
+-    public static boolean decodeToFile( String dataToDecode, String filename )
+-    {
+-        boolean success = false;
+-        Base64.OutputStream bos = null;
+-        try
+-        {
+-                bos = new Base64.OutputStream(
+-                          new java.io.FileOutputStream( filename ), Base64.DECODE );
+-                bos.write( dataToDecode.getBytes( PREFERRED_ENCODING ) );
+-                success = true;
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-            success = false;
+-        }   // end catch: IOException
+-        finally
+-        {
+-                try{ bos.close(); } catch( Exception e ){}
+-        }   // end finally
+-
+-        return success;
+-    }   // end decodeToFile
+-
+-
+-
+-
+-    /**
+-     * Convenience method for reading a base64-encoded
+-     * file and decoding it.
+-     *
+-     * @param filename Filename for reading encoded data
+-     * @return decoded byte array or null if unsuccessful
+-     *
+-     * @since 2.1
+-     */
+-    public static byte[] decodeFromFile( String filename )
+-    {
+-        byte[] decodedData = null;
+-        Base64.InputStream bis = null;
+-        try
+-        {
+-            // Set up some useful variables
+-            java.io.File file = new java.io.File( filename );
+-            byte[] buffer = null;
+-            int length   = 0;
+-            int numBytes = 0;
+-
+-            // Check for size of file
+-            if( file.length() > Integer.MAX_VALUE )
+-            {
+-                System.err.println( "File is too big for this convenience method (" + file.length() + " bytes)." );
+-                return null;
+-            }   // end if: file too big for int index
+-            buffer = new byte[ (int)file.length() ];
+-
+-            // Open a stream
+-            bis = new Base64.InputStream(
+-                      new java.io.BufferedInputStream(
+-                      new java.io.FileInputStream( file ) ), Base64.DECODE );
+-
+-            // Read until done
+-            while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 )
+-                length += numBytes;
+-
+-            // Save in a variable to return
+-            decodedData = new byte[ length ];
+-            System.arraycopy( buffer, 0, decodedData, 0, length );
+-
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-            System.err.println( "Error decoding from file " + filename );
+-        }   // end catch: IOException
+-        finally
+-        {
+-            try{ bis.close(); } catch( Exception e) {}
+-        }   // end finally
+-
+-        return decodedData;
+-    }   // end decodeFromFile
+-
+-
+-
+-    /**
+-     * Convenience method for reading a binary file
+-     * and base64-encoding it.
+-     *
+-     * @param filename Filename for reading binary data
+-     * @return base64-encoded string or null if unsuccessful
+-     *
+-     * @since 2.1
+-     */
+-    public static String encodeFromFile( String filename )
+-    {
+-        String encodedData = null;
+-        Base64.InputStream bis = null;
+-        try
+-        {
+-            // Set up some useful variables
+-            java.io.File file = new java.io.File( filename );
+-            byte[] buffer = new byte[ Math.max((int)(file.length() * 1.4),40) ]; // Need max() for math on small files (v2.2.1)
+-            int length   = 0;
+-            int numBytes = 0;
+-
+-            // Open a stream
+-            bis = new Base64.InputStream(
+-                      new java.io.BufferedInputStream(
+-                      new java.io.FileInputStream( file ) ), Base64.ENCODE );
+-
+-            // Read until done
+-            while( ( numBytes = bis.read( buffer, length, 4096 ) ) >= 0 )
+-                length += numBytes;
+-
+-            // Save in a variable to return
+-            encodedData = new String( buffer, 0, length, Base64.PREFERRED_ENCODING );
+-
+-        }   // end try
+-        catch( java.io.IOException e )
+-        {
+-            System.err.println( "Error encoding from file " + filename );
+-        }   // end catch: IOException
+-        finally
+-        {
+-            try{ bis.close(); } catch( Exception e) {}
+-        }   // end finally
+-
+-        return encodedData;
+-        }   // end encodeFromFile
+-
+-
+-
+-
+-    /**
+-     * Reads <tt>infile</tt> and encodes it to <tt>outfile</tt>.
+-     *
+-     * @param infile Input file
+-     * @param outfile Output file
+-     * @return true if the operation is successful
+-     * @since 2.2
+-     */
+-    public static boolean encodeFileToFile( String infile, String outfile )
+-    {
+-        boolean success = false;
+-        java.io.InputStream in = null;
+-        java.io.OutputStream out = null;
+-        try{
+-            in  = new Base64.InputStream(
+-                      new java.io.BufferedInputStream(
+-                      new java.io.FileInputStream( infile ) ),
+-                      Base64.ENCODE );
+-            out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) );
+-            byte[] buffer = new byte[65536]; // 64K
+-            int read = -1;
+-            while( ( read = in.read(buffer) ) >= 0 ){
+-                out.write( buffer,0,read );
+-            }   // end while: through file
+-            success = true;
+-        } catch( java.io.IOException exc ){
+-            exc.printStackTrace();
+-        } finally{
+-            try{ in.close();  } catch( Exception exc ){}
+-            try{ out.close(); } catch( Exception exc ){}
+-        }   // end finally
+-
+-        return success;
+-    }   // end encodeFileToFile
+-
+-
+-
+-    /**
+-     * Reads <tt>infile</tt> and decodes it to <tt>outfile</tt>.
+-     *
+-     * @param infile Input file
+-     * @param outfile Output file
+-     * @return true if the operation is successful
+-     * @since 2.2
+-     */
+-    public static boolean decodeFileToFile( String infile, String outfile )
+-    {
+-        boolean success = false;
+-        java.io.InputStream in = null;
+-        java.io.OutputStream out = null;
+-        try{
+-            in  = new Base64.InputStream(
+-                      new java.io.BufferedInputStream(
+-                      new java.io.FileInputStream( infile ) ),
+-                      Base64.DECODE );
+-            out = new java.io.BufferedOutputStream( new java.io.FileOutputStream( outfile ) );
+-            byte[] buffer = new byte[65536]; // 64K
+-            int read = -1;
+-            while( ( read = in.read(buffer) ) >= 0 ){
+-                out.write( buffer,0,read );
+-            }   // end while: through file
+-            success = true;
+-        } catch( java.io.IOException exc ){
+-            exc.printStackTrace();
+-        } finally{
+-            try{ in.close();  } catch( Exception exc ){}
+-            try{ out.close(); } catch( Exception exc ){}
+-        }   // end finally
+-
+-        return success;
+-    }   // end decodeFileToFile
+-
+-
+-    /* ********  I N N E R   C L A S S   I N P U T S T R E A M  ******** */
+-
+-
+-
+-    /**
+-     * A {@link Base64.InputStream} will read data from another
+-     * <tt>java.io.InputStream</tt>, given in the constructor,
+-     * and encode/decode to/from Base64 notation on the fly.
+-     *
+-     * @see Base64
+-     * @since 1.3
+-     */
+-    public static class InputStream extends java.io.FilterInputStream
+-    {
+-        private boolean encode;         // Encoding or decoding
+-        private int     position;       // Current position in the buffer
+-        private byte[]  buffer;         // Small buffer holding converted data
+-        private int     bufferLength;   // Length of buffer (3 or 4)
+-        private int     numSigBytes;    // Number of meaningful bytes in the buffer
+-        private int     lineLength;
+-        private boolean breakLines;     // Break lines at less than 80 characters
+-        private int     options;        // Record options used to create the stream.
+-        private byte[]  alphabet;       // Local copies to avoid extra method calls
+-        private byte[]  decodabet;      // Local copies to avoid extra method calls
+-
+-
+-        /**
+-         * Constructs a {@link Base64.InputStream} in DECODE mode.
+-         *
+-         * @param in the <tt>java.io.InputStream</tt> from which to read data.
+-         * @since 1.3
+-         */
+-        public InputStream( java.io.InputStream in )
+-        {
+-            this( in, DECODE );
+-        }   // end constructor
+-
+-
+-        /**
+-         * Constructs a {@link Base64.InputStream} in
+-         * either ENCODE or DECODE mode.
+-         * <p>
+-         * Valid options:<pre>
+-         *   ENCODE or DECODE: Encode or Decode as data is read.
+-         *   DONT_BREAK_LINES: don't break lines at 76 characters
+-         *     (only meaningful when encoding)
+-         *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+-         * </pre>
+-         * <p>
+-         * Example: <code>new Base64.InputStream( in, Base64.DECODE )</code>
+-         *
+-         *
+-         * @param in the <tt>java.io.InputStream</tt> from which to read data.
+-         * @param options Specified options
+-         * @see Base64#ENCODE
+-         * @see Base64#DECODE
+-         * @see Base64#DONT_BREAK_LINES
+-         * @since 2.0
+-         */
+-        public InputStream( java.io.InputStream in, int options )
+-        {
+-            super( in );
+-            this.breakLines   = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
+-            this.encode       = (options & ENCODE) == ENCODE;
+-            this.bufferLength = encode ? 4 : 3;
+-            this.buffer       = new byte[ bufferLength ];
+-            this.position     = -1;
+-            this.lineLength   = 0;
+-            this.options      = options; // Record for later, mostly to determine which alphabet to use
+-            this.alphabet     = getAlphabet(options);
+-            this.decodabet    = getDecodabet(options);
+-        }   // end constructor
+-
+-        /**
+-         * Reads enough of the input stream to convert
+-         * to/from Base64 and returns the next byte.
+-         *
+-         * @return next byte
+-         * @since 1.3
+-         */
+-        public int read() throws java.io.IOException
+-        {
+-            // Do we need to get data?
+-            if( position < 0 )
+-            {
+-                if( encode )
+-                {
+-                    byte[] b3 = new byte[3];
+-                    int numBinaryBytes = 0;
+-                    for( int i = 0; i < 3; i++ )
+-                    {
+-                        try
+-                        {
+-                            int b = in.read();
+-
+-                            // If end of stream, b is -1.
+-                            if( b >= 0 )
+-                            {
+-                                b3[i] = (byte)b;
+-                                numBinaryBytes++;
+-                            }   // end if: not end of stream
+-
+-                        }   // end try: read
+-                        catch( java.io.IOException e )
+-                        {
+-                            // Only a problem if we got no data at all.
+-                            if( i == 0 )
+-                                throw e;
+-
+-                        }   // end catch
+-                    }   // end for: each needed input byte
+-
+-                    if( numBinaryBytes > 0 )
+-                    {
+-                        encode3to4( b3, 0, numBinaryBytes, buffer, 0, options );
+-                        position = 0;
+-                        numSigBytes = 4;
+-                    }   // end if: got data
+-                    else
+-                    {
+-                        return -1;
+-                    }   // end else
+-                }   // end if: encoding
+-
+-                // Else decoding
+-                else
+-                {
+-                    byte[] b4 = new byte[4];
+-                    int i = 0;
+-                    for( i = 0; i < 4; i++ )
+-                    {
+-                        // Read four "meaningful" bytes:
+-                        int b = 0;
+-                        do{ b = in.read(); }
+-                        while( b >= 0 && decodabet[ b & 0x7f ] <= WHITE_SPACE_ENC );
+-
+-                        if( b < 0 )
+-                            break; // Reads a -1 if end of stream
+-
+-                        b4[i] = (byte)b;
+-                    }   // end for: each needed input byte
+-
+-                    if( i == 4 )
+-                    {
+-                        numSigBytes = decode4to3( b4, 0, buffer, 0, options );
+-                        position = 0;
+-                    }   // end if: got four characters
+-                    else if( i == 0 ){
+-                        return -1;
+-                    }   // end else if: also padded correctly
+-                    else
+-                    {
+-                        // Must have broken out from above.
+-                        throw new java.io.IOException( "Improperly padded Base64 input." );
+-                    }   // end
+-
+-                }   // end else: decode
+-            }   // end else: get data
+-
+-            // Got data?
+-            if( position >= 0 )
+-            {
+-                // End of relevant data?
+-                if( /*!encode &&*/ position >= numSigBytes )
+-                    return -1;
+-
+-                if( encode && breakLines && lineLength >= MAX_LINE_LENGTH )
+-                {
+-                    lineLength = 0;
+-                    return '\n';
+-                }   // end if
+-                else
+-                {
+-                    lineLength++;   // This isn't important when decoding
+-                                    // but throwing an extra "if" seems
+-                                    // just as wasteful.
+-
+-                    int b = buffer[ position++ ];
+-
+-                    if( position >= bufferLength )
+-                        position = -1;
+-
+-                    return b & 0xFF; // This is how you "cast" a byte that's
+-                                     // intended to be unsigned.
+-                }   // end else
+-            }   // end if: position >= 0
+-
+-            // Else error
+-            else
+-            {
+-                // When JDK1.4 is more accepted, use an assertion here.
+-                throw new java.io.IOException( "Error in Base64 code reading stream." );
+-            }   // end else
+-        }   // end read
+-
+-
+-        /**
+-         * Calls {@link #read()} repeatedly until the end of stream
+-         * is reached or <var>len</var> bytes are read.
+-         * Returns number of bytes read into array or -1 if
+-         * end of stream is encountered.
+-         *
+-         * @param dest array to hold values
+-         * @param off offset for array
+-         * @param len max number of bytes to read into array
+-         * @return bytes read into array or -1 if end of stream is encountered.
+-         * @since 1.3
+-         */
+-        public int read( byte[] dest, int off, int len ) throws java.io.IOException
+-        {
+-            int i;
+-            int b;
+-            for( i = 0; i < len; i++ )
+-            {
+-                b = read();
+-
+-                //if( b < 0 && i == 0 )
+-                //    return -1;
+-
+-                if( b >= 0 )
+-                    dest[off + i] = (byte)b;
+-                else if( i == 0 )
+-                    return -1;
+-                else
+-                    break; // Out of 'for' loop
+-            }   // end for: each byte read
+-            return i;
+-        }   // end read
+-
+-    }   // end inner class InputStream
+-
+-
+-
+-
+-
+-
+-    /* ********  I N N E R   C L A S S   O U T P U T S T R E A M  ******** */
+-
+-
+-
+-    /**
+-     * A {@link Base64.OutputStream} will write data to another
+-     * <tt>java.io.OutputStream</tt>, given in the constructor,
+-     * and encode/decode to/from Base64 notation on the fly.
+-     *
+-     * @see Base64
+-     * @since 1.3
+-     */
+-    public static class OutputStream extends java.io.FilterOutputStream
+-    {
+-        private boolean encode;
+-        private int     position;
+-        private byte[]  buffer;
+-        private int     bufferLength;
+-        private int     lineLength;
+-        private boolean breakLines;
+-        private byte[]  b4; // Scratch used in a few places
+-        private boolean suspendEncoding;
+-        private int options; // Record for later
+-        private byte[]  alphabet;       // Local copies to avoid extra method calls
+-        private byte[]  decodabet;      // Local copies to avoid extra method calls
+-
+-        /**
+-         * Constructs a {@link Base64.OutputStream} in ENCODE mode.
+-         *
+-         * @param out the <tt>java.io.OutputStream</tt> to which data will be written.
+-         * @since 1.3
+-         */
+-        public OutputStream( java.io.OutputStream out )
+-        {
+-            this( out, ENCODE );
+-        }   // end constructor
+-
+-
+-        /**
+-         * Constructs a {@link Base64.OutputStream} in
+-         * either ENCODE or DECODE mode.
+-         * <p>
+-         * Valid options:<pre>
+-         *   ENCODE or DECODE: Encode or Decode as data is read.
+-         *   DONT_BREAK_LINES: don't break lines at 76 characters
+-         *     (only meaningful when encoding)
+-         *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+-         * </pre>
+-         * <p>
+-         * Example: <code>new Base64.OutputStream( out, Base64.ENCODE )</code>
+-         *
+-         * @param out the <tt>java.io.OutputStream</tt> to which data will be written.
+-         * @param options Specified options.
+-         * @see Base64#ENCODE
+-         * @see Base64#DECODE
+-         * @see Base64#DONT_BREAK_LINES
+-         * @since 1.3
+-         */
+-        public OutputStream( java.io.OutputStream out, int options )
+-        {
+-            super( out );
+-            this.breakLines   = (options & DONT_BREAK_LINES) != DONT_BREAK_LINES;
+-            this.encode       = (options & ENCODE) == ENCODE;
+-            this.bufferLength = encode ? 3 : 4;
+-            this.buffer       = new byte[ bufferLength ];
+-            this.position     = 0;
+-            this.lineLength   = 0;
+-            this.suspendEncoding = false;
+-            this.b4           = new byte[4];
+-            this.options      = options;
+-            this.alphabet     = getAlphabet(options);
+-            this.decodabet    = getDecodabet(options);
+-        }   // end constructor
+-
+-
+-        /**
+-         * Writes the byte to the output stream after
+-         * converting to/from Base64 notation.
+-         * When encoding, bytes are buffered three
+-         * at a time before the output stream actually
+-         * gets a write() call.
+-         * When decoding, bytes are buffered four
+-         * at a time.
+-         *
+-         * @param theByte the byte to write
+-         * @since 1.3
+-         */
+-        public void write(int theByte) throws java.io.IOException
+-        {
+-            // Encoding suspended?
+-            if( suspendEncoding )
+-            {
+-                super.out.write( theByte );
+-                return;
+-            }   // end if: supsended
+-
+-            // Encode?
+-            if( encode )
+-            {
+-                buffer[ position++ ] = (byte)theByte;
+-                if( position >= bufferLength )  // Enough to encode.
+-                {
+-                    out.write( encode3to4( b4, buffer, bufferLength, options ) );
+-
+-                    lineLength += 4;
+-                    if( breakLines && lineLength >= MAX_LINE_LENGTH )
+-                    {
+-                        out.write( NEW_LINE );
+-                        lineLength = 0;
+-                    }   // end if: end of line
+-
+-                    position = 0;
+-                }   // end if: enough to output
+-            }   // end if: encoding
+-
+-            // Else, Decoding
+-            else
+-            {
+-                // Meaningful Base64 character?
+-                if( decodabet[ theByte & 0x7f ] > WHITE_SPACE_ENC )
+-                {
+-                    buffer[ position++ ] = (byte)theByte;
+-                    if( position >= bufferLength )  // Enough to output.
+-                    {
+-                        int len = Base64.decode4to3( buffer, 0, b4, 0, options );
+-                        out.write( b4, 0, len );
+-                        //out.write( Base64.decode4to3( buffer ) );
+-                        position = 0;
+-                    }   // end if: enough to output
+-                }   // end if: meaningful base64 character
+-                else if( decodabet[ theByte & 0x7f ] != WHITE_SPACE_ENC )
+-                {
+-                    throw new java.io.IOException( "Invalid character in Base64 data." );
+-                }   // end else: not white space either
+-            }   // end else: decoding
+-        }   // end write
+-
+-
+-
+-        /**
+-         * Calls {@link #write(int)} repeatedly until <var>len</var>
+-         * bytes are written.
+-         *
+-         * @param theBytes array from which to read bytes
+-         * @param off offset for array
+-         * @param len max number of bytes to read into array
+-         * @since 1.3
+-         */
+-        public void write( byte[] theBytes, int off, int len ) throws java.io.IOException
+-        {
+-            // Encoding suspended?
+-            if( suspendEncoding )
+-            {
+-                super.out.write( theBytes, off, len );
+-                return;
+-            }   // end if: supsended
+-
+-            for( int i = 0; i < len; i++ )
+-            {
+-                write( theBytes[ off + i ] );
+-            }   // end for: each byte written
+-
+-        }   // end write
+-
+-
+-
+-        /**
+-         * Method added by PHIL. [Thanks, PHIL. -Rob]
+-         * This pads the buffer without closing the stream.
+-         */
+-        public void flushBase64() throws java.io.IOException
+-        {
+-            if( position > 0 )
+-            {
+-                if( encode )
+-                {
+-                    out.write( encode3to4( b4, buffer, position, options ) );
+-                    position = 0;
+-                }   // end if: encoding
+-                else
+-                {
+-                    throw new java.io.IOException( "Base64 input not properly padded." );
+-                }   // end else: decoding
+-            }   // end if: buffer partially full
+-
+-        }   // end flush
+-
+-
+-        /**
+-         * Flushes and closes (I think, in the superclass) the stream.
+-         *
+-         * @since 1.3
+-         */
+-        public void close() throws java.io.IOException
+-        {
+-            // 1. Ensure that pending characters are written
+-            flushBase64();
+-
+-            // 2. Actually close the stream
+-            // Base class both flushes and closes.
+-            super.close();
+-
+-            buffer = null;
+-            out    = null;
+-        }   // end close
+-
+-
+-
+-        /**
+-         * Suspends encoding of the stream.
+-         * May be helpful if you need to embed a piece of
+-         * base640-encoded data in a stream.
+-         *
+-         * @since 1.5.1
+-         */
+-        public void suspendEncoding() throws java.io.IOException
+-        {
+-            flushBase64();
+-            this.suspendEncoding = true;
+-        }   // end suspendEncoding
+-
+-
+-        /**
+-         * Resumes encoding of the stream.
+-         * May be helpful if you need to embed a piece of
+-         * base640-encoded data in a stream.
+-         *
+-         * @since 1.5.1
+-         */
+-        public void resumeEncoding()
+-        {
+-            this.suspendEncoding = false;
+-        }   // end resumeEncoding
+-
+-
+-
+-    }   // end inner class OutputStream
+-
+-
+-}   // end class Base64
+diff --git a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter.java b/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter.java
+deleted file mode 100644
+index 078e031..0000000
+--- a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTFilterOLEExtracter.java
++++ /dev/null
+@@ -1,395 +0,0 @@
+-package com.sun.star.comp.xsltfilter;
+-
+-/************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that 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 version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-//Standard Java classes
+-import java.io.FileWriter;
+-import java.util.zip.Inflater;
+-import java.util.zip.Deflater;
+-
+-//StarOffice Interfaces and UNO
+-import com.sun.star.bridge.XBridgeFactory;
+-import com.sun.star.bridge.XBridge;
+-import com.sun.star.connection.XConnector;
+-import com.sun.star.connection.XConnection;
+-import com.sun.star.container.XNameContainer;
+-import com.sun.star.embed.XTransactedObject;
+-import com.sun.star.io.XStream;
+-import com.sun.star.io.XSeekable;
+-import com.sun.star.io.XInputStream;
+-import com.sun.star.io.XOutputStream;
+-import com.sun.star.lang.XMultiServiceFactory;
+-import com.sun.star.lang.XComponent;
+-import com.sun.star.uno.XComponentContext;
+-import com.sun.star.uno.UnoRuntime;
+-
+-/** This class is an xalan extension class. It provider 2 elements
+- *  and 2 functions to used in xslt script. With this elements and functions
+- *  we can convert between oledata between Wordml and OOo flat.
+- *  To use it, we need a running OOo. There are two ways to get the XMultiServiceFactory.
+- *  When called by OOo xslt filter, an XMultiServiceFactory will be add to the transformer
+- *  by setParameter(), then we can get it using getParameter(). Another way is using an
+- *  XConnection to connect to a running OOo. We connect to a running OOo, we need know the
+- *  uno url. It can be set in the xslt script. The default uno url is:
+- *  "uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"
+- *  see XSLTXalanOLEExtracter.java
+- */
+-public class XSLTFilterOLEExtracter {
+-
+-    protected XMultiServiceFactory m_xMSF;
+-    protected XNameContainer m_Storage;
+-    protected XStream m_RootStream;
+-    protected XConnection m_Connection;
+-    protected String sConnectionString;
+-    private static final String UNO_URL = "uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager";
+-
+-    public XSLTFilterOLEExtracter() {
+-    }
+-
+-    public void init(String unoUrl) {
+-        if (unoUrl == null || unoUrl.equals("")) {
+-            unoUrl = UNO_URL;
+-        }
+-        debugln("Init with uno url=" + unoUrl);
+-        if (null == m_xMSF) {
+-            try {
+-                m_xMSF = connectAwareGetServiceFactory();
+-            } catch (Exception ex) {
+-                System.err.println("Could not connect to the office '" + unoUrl + "'\n" + ex.getMessage());
+-            }
+-        }
+-    }
+-
+-    public void exit() {
+-        m_Storage = null;
+-        m_xMSF = null;
+-        if (null != m_Connection) {
+-            try {
+-                m_Connection.close();
+-            } catch (Exception ex) {
+-                System.err.println("Could not close connection to the office.\n" + ex.getMessage());
+-            }
+-        }
+-    }
+-    //If aName = "oledata.mso" then we load the root storage from the given base64 string
+-    //Otherwise we compress the stream and add it to the root storage under the name of aName
+-    public void insertByName(String aName, String aBase64) {
+-        debugln("insertByName(" + aName + " : " + aBase64 + ")");
+-        if (aName.equals("oledata.mso")) {
+-            loadRootStorageFromBase64(aBase64);
+-        } else {
+-            ensureCreateRootStorage();
+-            insertSubStorage(aName, aBase64);
+-        }
+-    }
+-    //If aName = "oledata.mso" then we return the base64 encoded string of the root storage
+-    //Otherwise we return the base64 encoded string of the sub stream under the name of aName
+-    public String getByName(String aName) {
+-        if (aName.equals("oledata.mso")) {
+-            try {
+-                //get the length and seek to 0
+-                XSeekable xSeek = (XSeekable) UnoRuntime.queryInterface(XSeekable.class, m_RootStream);
+-                int oleLength = (int) xSeek.getLength();
+-                xSeek.seek(0);
+-                xSeek = null;
+-                //read all bytes
+-                XInputStream xInput = m_RootStream.getInputStream();
+-                byte oledata[][] = new byte[1][oleLength];
+-                xInput.readBytes(oledata, oleLength);
+-                //return the base64 encoded string
+-                return Base64.encodeBytes(oledata[0]);
+-            } catch (Exception ex) {
+-                ex.printStackTrace();
+-            }
+-        } else {
+-            return getEncodedSubStorage(aName);
+-        }
+-        return "";
+-    }
+-    //get the sub stream which name = aName, decompress it and return the base64 encoded string
+-    public String getEncodedSubStorage(String aName) {
+-        debugln("getByName(" + aName + ")");
+-        try {
+-            if (!m_Storage.hasByName(aName)) {
+-                return "Not Found:" + aName;
+-            }
+-            Object oSubStream = m_Storage.getByName(aName);
+-            if (oSubStream == null) {
+-                return "Not Found:" + aName;
+-            }
+-            XInputStream xSubStream = (XInputStream) UnoRuntime.queryInterface(XInputStream.class,
+-                    oSubStream);
+-            if (xSubStream == null) {
+-                return "Not Found:" + aName;
+-            }
+-            //The first four byte are the length of the uncompressed data
+-            byte pLength[][] = new byte[1][4];
+-            XSeekable xSeek = (XSeekable) UnoRuntime.queryInterface(XSeekable.class, xSubStream);
+-            xSeek.seek(0);
+-            xSeek = null;
+-            //Get the uncompressed length
+-            int readbytes = xSubStream.readBytes(pLength, 4);
+-            if (4 != readbytes) {
+-                System.out.println("readbytes:" + readbytes);
+-                return "Can not read the length.";
+-            }
+-            int oleLength = (pLength[0][0] << 0) + (pLength[0][1] << 8) + (pLength[0][2] << 16) + (pLength[0][3] << 24);
+-            byte pContents[][] = new byte[1][oleLength];
+-            //Read all bytes. The compressed length should less then the uncompressed length
+-            readbytes = xSubStream.readBytes(pContents, oleLength);
+-            if (oleLength < readbytes) {
+-                return "oleLength :" + oleLength + " readbytes: " + readbytes;
+-            }
+-
+-            // Decompress the bytes
+-            Inflater decompresser = new Inflater();
+-            decompresser.setInput(pContents[0], 0, readbytes);
+-            byte[] result = new byte[oleLength];
+-            int resultLength = decompresser.inflate(result);
+-            decompresser.end();
+-
+-            //return the base64 string of the uncompressed data
+-            return Base64.encodeBytes(result);
+-        } catch (Exception ex) {
+-            ex.printStackTrace();
+-        }
+-        return "";
+-    }
+-
+-    public XStream CreateTempFileStream(XMultiServiceFactory xMSF) {
+-        // try to get temporary file representation
+-        XStream xTempFileStream = null;
+-        try {
+-            Object oTempFile = xMSF.createInstance("com.sun.star.io.TempFile");
+-            xTempFileStream = (XStream) UnoRuntime.queryInterface(XStream.class, oTempFile);
+-        } catch (Exception e) {
+-        }
+-
+-        if (xTempFileStream == null) {
+-            System.out.println("Can't create temporary file!");
+-        }
+-
+-        return xTempFileStream;
+-    }
+-    //decode the base64 string and create an com.sun.star.embed.OLESimpleStorage from it
+-    public void loadRootStorageFromBase64(String aBase64) {
+-        try {
+-            //Decode and write the data to an temp stream
+-            byte[] oledata = Base64.decode(aBase64);
+-            m_RootStream = CreateTempFileStream(m_xMSF);
+-            XOutputStream xOutput = m_RootStream.getOutputStream();
+-            xOutput.writeBytes(oledata);
+-            xOutput.flush();
+-            //Get the input stream and seek to begin
+-            XInputStream xInput = m_RootStream.getInputStream();
+-            XSeekable xSeek = (XSeekable) UnoRuntime.queryInterface(XSeekable.class, xInput);
+-            xSeek.seek(0);
+-            oledata = null;
+-            xSeek = null;
+-
+-            //create an com.sun.star.embed.OLESimpleStorage from the temp stream
+-            Object pArgs[] = new Object[1];
+-            pArgs[0] = (Object) xInput;
+-            Object oTempStorage = m_xMSF.createInstanceWithArguments("com.sun.star.embed.OLESimpleStorage", pArgs);
+-            pArgs = null;
+-
+-            m_Storage = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, oTempStorage);
+-        } catch (Exception e) {
+-            e.printStackTrace();
+-        }
+-    }
+-    //Create a empty OLESimpleStorage if there is not one
+-    public void ensureCreateRootStorage() {
+-        if (null == m_RootStream || null == m_Storage) {
+-            try {
+-                m_RootStream = CreateTempFileStream(m_xMSF);
+-
+-                Object pArgs[] = new Object[1];
+-                pArgs[0] = (Object) m_RootStream;
+-                Object oTempStorage = m_xMSF.createInstanceWithArguments("com.sun.star.embed.OLESimpleStorage", pArgs);
+-                pArgs = null;
+-
+-                m_Storage = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, oTempStorage);
+-            } catch (Exception e) {
+-                e.printStackTrace();
+-            }
+-        }
+-    }
+-    //decode the base64 string and insert the length and the compressed data of it to
+-    //the root storage as a sub stream under aName
+-    public void insertSubStorage(String aName, String aBase64) {
+-        try {
+-            //decode the base64 string
+-            byte[] oledata = Base64.decode(aBase64);
+-            //create a temp stream to write data to
+-            XStream subStream = CreateTempFileStream(m_xMSF);
+-            XInputStream xInput = subStream.getInputStream();
+-            XOutputStream xOutput = subStream.getOutputStream();
+-            //write the length to the temp stream
+-            byte oleHead[] = new byte[4];
+-            oleHead[0] = (byte) ((oledata.length >>> 0) & 0xFF);
+-            oleHead[1] = (byte) ((oledata.length >>> 8) & 0xFF);
+-            oleHead[2] = (byte) ((oledata.length >>> 16) & 0xFF);
+-            oleHead[3] = (byte) ((oledata.length >>> 24) & 0xFF);
+-            xOutput.writeBytes(oleHead);
+-
+-            // Compress the bytes
+-            byte[] output = new byte[oledata.length];
+-            Deflater compresser = new Deflater();
+-            compresser.setInput(oledata);
+-            compresser.finish();
+-            int compressedDataLength = compresser.deflate(output);
+-            //realloc the data length
+-            byte[] compressedBytes = new byte[compressedDataLength];
+-            for (int i = 0; i < compressedDataLength; i++) {
+-                compressedBytes[i] = output[i];
+-            }
+-
+-            //write the compressed data to the temp stream
+-            xOutput.writeBytes(compressedBytes);
+-            //seek to 0
+-            XSeekable xSeek = (XSeekable) UnoRuntime.queryInterface(XSeekable.class, xInput);
+-            xSeek.seek(0);
+-            xSeek = null;
+-            oledata = null;
+-
+-            //insert the temp stream as a sub stream and use an XTransactedObject to commit it immediately
+-            XTransactedObject xTransact = (XTransactedObject) UnoRuntime.queryInterface(XTransactedObject.class, m_Storage);
+-            m_Storage.insertByName(aName, xInput);
+-            xTransact.commit();
+-            xTransact = null;
+-
+-        } catch (Exception e) {
+-            e.printStackTrace();
+-        }
+-    }
+-
+-    /** separtates the uno-url into 3 different parts.
+-     */
+-    protected static String[] parseUnoUrl(String url) {
+-        String[] aRet = new String[3];
+-
+-        if (!url.startsWith("uno:")) {
+-            return null;
+-        }
+-
+-        int semicolon = url.indexOf(';');
+-        if (semicolon == -1) {
+-            return null;
+-        }
+-
+-        aRet[0] = url.substring(4, semicolon);
+-        int nextSemicolon = url.indexOf(';', semicolon + 1);
+-
+-        if (semicolon == -1) {
+-            return null;
+-        }
+-        aRet[1] = url.substring(semicolon + 1, nextSemicolon);
+-
+-        aRet[2] = url.substring(nextSemicolon + 1);
+-        return aRet;
+-    }
+-    //connect to running OOo and keep an XConnection object so that we can disconnect from OOo as we wish
+-    protected XMultiServiceFactory connectAwareGetServiceFactory() throws com.sun.star.uno.Exception,
+-            com.sun.star.uno.RuntimeException,
+-            Exception {
+-
+-        // Get component context
+-        XComponentContext xComponentContext =
+-                com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);
+-
+-        // instantiate connector service
+-        Object x = xComponentContext.getServiceManager().createInstanceWithContext(
+-                "com.sun.star.connection.Connector", xComponentContext);
+-
+-        XConnector xConnector = (XConnector) UnoRuntime.queryInterface(XConnector.class, x);
+-
+-        String a[] = parseUnoUrl(sConnectionString);
+-        if (null == a) {
+-            throw new com.sun.star.uno.Exception("Couldn't parse uno-url " + sConnectionString);
+-        }
+-
+-        // connect using the connection string part of the uno-url only.
+-        m_Connection = xConnector.connect(a[0]);
+-
+-        x = xComponentContext.getServiceManager().createInstanceWithContext(
+-                "com.sun.star.bridge.BridgeFactory", xComponentContext);
+-
+-        XBridgeFactory xBridgeFactory = (XBridgeFactory) UnoRuntime.queryInterface(
+-                XBridgeFactory.class, x);
+-
+-        // create a nameless bridge with no instance provider
+-        // using the middle part of the uno-url
+-        XBridge bridge = xBridgeFactory.createBridge("", a[1], m_Connection, null);
+-
+-        // query for the XComponent interface and add this as event listener
+-        XComponent xComponent = (XComponent) UnoRuntime.queryInterface(
+-                XComponent.class, bridge);
+-
+-        // get the remote instance
+-        x = bridge.getInstance(a[2]);
+-
+-        // Did the remote server export this object ?
+-        if (null == x) {
+-            throw new com.sun.star.uno.Exception(
+-                    "Server didn't provide an instance for" + a[2], null);
+-        }
+-
+-        XMultiServiceFactory xFac = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, x);
+-        return xFac;
+-    }
+-    protected static boolean DEBUG = false;
+-    protected static boolean DEBUGCHK = false;
+-    protected static String debugfile;
+-
+-    protected static void debugln(String s) {
+-        debug(s + "\n");
+-    }
+-
+-    protected static void debug(String s) {
+-        if (!DEBUGCHK) {
+-            if (System.getProperty("xsltfilter.debug") == null) {
+-                DEBUGCHK = true;
+-                return;
+-            } else {
+-                debugfile = System.getProperty("xsltfilter.debug");
+-                DEBUG = true;
+-            }
+-        }
+-        if (!DEBUG) {
+-            return;
+-        }
+-        try {
+-            FileWriter dbgwriter = new FileWriter(debugfile, true);
+-            dbgwriter.write(s);
+-            dbgwriter.close();
+-        } catch (Exception e) {
+-            e.printStackTrace();
+-        }
+-    }
+-}
+diff --git a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java b/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
+deleted file mode 100644
+index 7036646..0000000
+--- a/filter/source/xsltfilter/com/sun/star/comp/xsltfilter/XSLTransformer.java
++++ /dev/null
+@@ -1,506 +0,0 @@
+-package com.sun.star.comp.xsltfilter;
+-
+-/************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that 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 version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-//Standard Java classes
+-import java.io.BufferedInputStream;
+-import java.io.BufferedOutputStream;
+-import java.io.File;
+-import java.io.FileOutputStream;
+-import java.io.InputStream;
+-import java.io.PrintStream;
+-import java.io.StringReader;
+-import java.net.URL;
+-import java.net.URLConnection;
+-import java.util.Enumeration;
+-import java.util.Hashtable;
+-import java.util.Vector;
+-
+-// Imported TraX classes
+-import javax.xml.parsers.SAXParserFactory;
+-import javax.xml.transform.Source;
+-import javax.xml.transform.Transformer;
+-import javax.xml.transform.TransformerFactory;
+-import javax.xml.transform.URIResolver;
+-import javax.xml.transform.sax.SAXSource;
+-import javax.xml.transform.stream.StreamResult;
+-import javax.xml.transform.stream.StreamSource;
+-import org.xml.sax.EntityResolver;
+-import org.xml.sax.InputSource;
+-import org.xml.sax.SAXException;
+-import org.xml.sax.XMLReader;
+-
+-//StarOffice Interfaces and UNO
+-import com.sun.star.beans.NamedValue;
+-import com.sun.star.comp.loader.FactoryHelper;
+-import com.sun.star.io.XActiveDataControl;
+-import com.sun.star.io.XActiveDataSink;
+-import com.sun.star.io.XActiveDataSource;
+-import com.sun.star.io.XInputStream;
+-import com.sun.star.io.XOutputStream;
+-import com.sun.star.io.XSeekable;
+-import com.sun.star.io.XStreamListener;
+-import com.sun.star.lang.XInitialization;
+-import com.sun.star.lang.XMultiServiceFactory;
+-import com.sun.star.lang.XServiceInfo;
+-import com.sun.star.lang.XServiceName;
+-import com.sun.star.lang.XSingleServiceFactory;
+-import com.sun.star.lang.XTypeProvider;
+-import com.sun.star.registry.XRegistryKey;
+-import com.sun.star.uno.AnyConverter;
+-import com.sun.star.uno.Type;
+-import com.sun.star.uno.UnoRuntime;
+-import com.sun.star.xml.xslt.XXSLTTransformer;
+-
+-//Uno to java Adaptor
+-import com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter;
+-import com.sun.star.lib.uno.adapter.XOutputStreamToOutputStreamAdapter;
+-import javax.xml.transform.Templates;
+-
+-import net.sf.saxon.FeatureKeys;
+-
+-/** This outer class provides an inner class to implement the service
+- * description and a method to instantiate the
+- * component on demand (__getServiceFactory()).
+- */
+-public class XSLTransformer
+-        implements XTypeProvider, XServiceName, XServiceInfo, XXSLTTransformer,
+-        URIResolver, EntityResolver {
+-
+-    /**
+-     * This component provides java based XSL transformations
+-     * A SAX based interface is not feasible when crossing language bordes
+-     * since too much time would be wasted by bridging the events between environments
+-     * example: 190 pages document, 82000 events 8seconds transform 40(!) sec. bridging
+-     *
+-     */
+-    private XInputStream m_xis;
+-    private XOutputStream m_xos;    // private static HashMap templatecache;
+-    private static final String STATSPROP = "XSLTransformer.statsfile";
+-    private static PrintStream statsp;
+-    private String stylesheeturl;
+-    private String targeturl;
+-    private String targetbaseurl;
+-    private String sourceurl;
+-    private String sourcebaseurl;
+-    private String pubtype = new String();
+-    private String systype = new String();    // processing thread
+-    private Thread t;    // listeners
+-    private Vector listeners = new Vector();    //
+-    private XMultiServiceFactory svcfactory;    // cache for transformations by stylesheet
+-    private static Hashtable xsltReferences = new Hashtable();
+-    // struct for cached stylesheets
+-    private static class Transformation {
+-
+-        public Templates cachedXSLT;
+-        public long lastmod;
+-    }
+-    // Resolve URIs to an empty source
+-    public Source resolve(String href, String base) {
+-        return new StreamSource(new StringReader(""));
+-    }
+-
+-    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, java.io.IOException {
+-        return new InputSource(new StringReader(""));
+-    }
+-    // --- Initialization ---
+-    public XSLTransformer(XMultiServiceFactory msf) {
+-        svcfactory = msf;
+-    }
+-
+-    public void initialize(Object[] args) throws com.sun.star.uno.Exception {
+-        // some configurable debugging
+-        String statsfilepath = null;
+-        if ((statsfilepath = System.getProperty(STATSPROP)) != null) {
+-            try {
+-                File statsfile = new File(statsfilepath);
+-                statsp = new PrintStream(new FileOutputStream(statsfile.getPath(), false));
+-            } catch (java.lang.Exception e) {
+-                System.err.println("XSLTransformer: could not open statsfile'" + statsfilepath + "'");
+-                System.err.println("   " + e.getClass().getName() + ": " + e.getMessage());
+-                System.err.println("   output disabled");
+-            }
+-        }
+-
+-        Object[] values = (Object[]) args[0];
+-
+-        // reading the values
+-        NamedValue nv = null;
+-        debug("The transformation's parameters as 'name = value' pairs:\n");
+-
+-        for (int i = 0; i < values.length; i++) {
+-            nv = (NamedValue) AnyConverter.toObject(new Type(NamedValue.class), values[i]);
+-
+-            if (nv.Name != null && !nv.Name.equals("")) {
+-                debug(nv.Name + " = " + nv.Value);
+-            }
+-
+-            if (nv.Name.equals("StylesheetURL")) {
+-                stylesheeturl = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("SourceURL")) {
+-                sourceurl = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("TargetURL")) {
+-                targeturl = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("SourceBaseURL")) {
+-                sourcebaseurl = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("TargetBaseURL")) {
+-                targetbaseurl = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("SystemType")) {
+-                systype = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            } else if (nv.Name.equals("PublicType")) {
+-                pubtype = (String) AnyConverter.toObject(
+-                        new Type(String.class), nv.Value);
+-            }
+-        }
+-    }
+-
+-    // --- XActiveDataSink        xistream = aStream;
+-    public void setInputStream(XInputStream aStream) {
+-        m_xis = aStream;
+-    }
+-
+-    public com.sun.star.io.XInputStream getInputStream() {
+-        return m_xis;
+-    }
+-
+-    // --- XActiveDataSource
+-    public void setOutputStream(XOutputStream aStream) {
+-        m_xos = aStream;
+-    }
+-
+-    public com.sun.star.io.XOutputStream getOutputStream() {
+-        return m_xos;
+-    }
+-
+-    // --- XActiveDataControl
+-    public void addListener(XStreamListener aListener) {
+-        if (aListener != null && !listeners.contains(aListener)) {
+-            listeners.add(aListener);
+-        }
+-    }
+-
+-    public void removeListener(XStreamListener aListener) {
+-        if (aListener != null) {
+-            listeners.removeElement(aListener);
+-        }
+-
+-    }
+-
+-    public void start() {
+-        // notify listeners
+-        t = new Thread() {
+-
+-            @Override
+-            public void run() {
+-
+-                // Local variabes used outside try block in finally block
+-                InputStream is = null;
+-                Source source = null;
+-                BufferedOutputStream os = null;
+-                PrintStream origOut = System.out;
+-                PrintStream origErr = System.err;
+-                if (statsp != null) {
+-                    System.setErr(statsp);
+-                    System.setOut(statsp);
+-                }
+-                try {
+-                    debug("\n\nStarting transformation...");
+-
+-                    // Set up context class loader for SAXParserFactory and
+-                    // TransformerFactory calls below:
+-                    setContextClassLoader(this.getClass().getClassLoader());
+-
+-                    for (Enumeration e = listeners.elements(); e.hasMoreElements();) {
+-                        XStreamListener l = (XStreamListener) e.nextElement();
+-                        l.started();
+-                    }
+-
+-                    XSeekable xseek = (XSeekable) UnoRuntime.queryInterface(XSeekable.class, m_xis);
+-                    if (xseek != null) {
+-                        xseek.seek(0);
+-                    }
+-
+-                    is = new BufferedInputStream(
+-                            new XInputStreamToInputStreamAdapter(m_xis));
+-                    //Source xmlsource = new StreamSource(xmlinput);
+-                    SAXParserFactory spf = SAXParserFactory.newInstance();
+-                    spf.setValidating(false);
+-                    spf.setNamespaceAware(true);
+-                    XMLReader xmlReader = spf.newSAXParser().getXMLReader();
+-                    xmlReader.setEntityResolver(XSLTransformer.this);
+-                    source = new SAXSource(xmlReader, new InputSource(is));
+-
+-                    // in order to help performance and to remedy a a possible memory
+-                    // leak in xalan, where it seems, that Transformer instances cannot
+-                    // be reclaimed though they are no longer referenced here, we use
+-                    // a cache of weak references (ie. xsltReferences) created for specific
+-                    // style sheet URLs see also #i48384#
+-
+-                    Templates xsltTemplate = null;
+-                    Transformer transformer = null;
+-                    Transformation transformation = null;
+-                    // File stylefile = new File(new URI(stylesheeturl));
+-                    long lastmod = 0;
+-                    try {
+-                        URL uStyle = new URL(stylesheeturl);
+-                        URLConnection c = uStyle.openConnection();
+-                        lastmod = c.getLastModified();
+-                    } catch (java.lang.Exception ex) {
+-                        // lastmod will remain at 0;
+-                        if (statsp != null) {
+-                            statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                            ex.printStackTrace(statsp);
+-                        }
+-                    }
+-
+-                    synchronized (xsltReferences) {
+-                        java.lang.ref.WeakReference ref = null;
+-                        // try to get the xsltTemplate reference from the cache
+-                        if ((ref = (java.lang.ref.WeakReference) xsltReferences.get(stylesheeturl)) == null ||
+-                                (transformation = ((Transformation) ref.get())) == null ||
+-                                ((Transformation) ref.get()).lastmod < lastmod) {
+-                            // we cannot find a valid reference for this stylesheet
+-                            // or the stylsheet was updated
+-                            if (ref != null) {
+-                                xsltReferences.remove(stylesheeturl);
+-                            }
+-                            // create new xsltTemplate for this stylesheet
+-                            TransformerFactory tfactory = TransformerFactory.newInstance();
+-                            debug("TransformerFactory is '" + tfactory.getClass().getName() + "'");
+-                // some external saxons (Debian, Ubuntu, ...) have this disabled
+-                // per default
+-                tfactory.setAttribute(FeatureKeys.ALLOW_EXTERNAL_FUNCTIONS, new Boolean(true));
+-                            xsltTemplate = tfactory.newTemplates(new StreamSource(stylesheeturl));
+-
+-                            // store the transformation into the cache
+-                            transformation = new Transformation();
+-                            transformation.lastmod = lastmod;
+-                            transformation.cachedXSLT = xsltTemplate;
+-                            ref = new java.lang.ref.WeakReference(transformation);
+-                            xsltReferences.put(stylesheeturl, ref);
+-                        }
+-                    }
+-                    xsltTemplate = transformation.cachedXSLT;
+-                            transformer = xsltTemplate.newTransformer();
+-                            transformer.setOutputProperty("encoding", "UTF-8");
+-                            // transformer.setURIResolver(XSLTransformer.this);
+-
+-                    // invalid to set 'null' as parameter as 'null' is not a valid Java object
+-                    if (sourceurl != null) {
+-                        transformer.setParameter("sourceURL", sourceurl);
+-                    }
+-                    if (sourcebaseurl != null) {
+-                        transformer.setParameter("sourceBaseURL", sourcebaseurl);
+-                    }
+-                    if (targeturl != null) {
+-                        transformer.setParameter("targetURL", targeturl);
+-                    }
+-                    if (targetbaseurl != null) {
+-                        transformer.setParameter("targetBaseURL", targetbaseurl);
+-                    }
+-                    if (pubtype != null) {
+-                        transformer.setParameter("publicType", pubtype);
+-                    }
+-                    if (systype != null) {
+-                        transformer.setParameter("systemType", systype);
+-                    }
+-                    if (svcfactory != null) {
+-                        transformer.setParameter("XMultiServiceFactory", svcfactory);
+-                    }
+-                    os = new BufferedOutputStream(
+-                            new XOutputStreamToOutputStreamAdapter(m_xos));
+-                    StreamResult sr = new StreamResult(os);
+-                    long tstart = System.currentTimeMillis();
+-                    transformer.transform(source, sr);
+-                    debug("finished transformation in " + (System.currentTimeMillis() - tstart) + "ms");
+-
+-                } catch (java.lang.Throwable ex) {
+-                    // notify any listeners about close
+-                    for (Enumeration e = listeners.elements(); e.hasMoreElements();) {
+-
+-                        XStreamListener l = (XStreamListener) e.nextElement();
+-                        l.error(new com.sun.star.uno.Exception(ex.getClass().getName() + ": " + ex.getMessage()));
+-                    }
+-                    if (statsp != null) {
+-                        statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                        ex.printStackTrace(statsp);
+-                    }
+-                } finally {
+-                    // dereference input buffer
+-                    source = null;
+-                    try {
+-                        if (is != null) {
+-                            is.close();
+-                        }
+-                    } catch (java.lang.Throwable ex) {
+-                        if (statsp != null) {
+-                            statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                            ex.printStackTrace(statsp);
+-                        }
+-                    }
+-                    try {
+-                        if (os != null) {
+-                            os.close();
+-                        }
+-                    } catch (java.lang.Throwable ex) {
+-                        if (statsp != null) {
+-                            statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                            ex.printStackTrace(statsp);
+-                        }
+-                    }
+-                    try {
+-                        if (m_xis != null) {
+-                            m_xis.closeInput();
+-                        }
+-                    } catch (java.lang.Throwable ex) {
+-                        if (statsp != null) {
+-                            statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                            ex.printStackTrace(statsp);
+-                        }
+-                    }
+-                    try {
+-                        if (m_xos != null) {
+-                            m_xos.closeOutput();
+-                        }
+-                    } catch (java.lang.Throwable ex) {
+-                        if (statsp != null) {
+-                            statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                            ex.printStackTrace(statsp);
+-                        }
+-                    }
+-
+-                    // resetting standard input/error streams from logfile to default
+-                    if (statsp != null) {
+-                        System.setErr(origErr);
+-                        System.setOut(origOut);
+-                    }
+-                    // try to release references asap...
+-                    m_xos = null;
+-                    m_xis = null;
+-                    is = null;
+-                    os = null;
+-                    // notify any listeners about close
+-                    if (listeners != null) {
+-                        for (Enumeration e = listeners.elements(); e.hasMoreElements();) {
+-                            XStreamListener l = (XStreamListener) e.nextElement();
+-                            l.closed();
+-                        }
+-                    }
+-                }
+-            }
+-        };
+-        t.start();
+-    } /* a statsfile have to be created as precondition to use this function */
+-
+-
+-    private static final void debug(String s) {
+-        if (statsp != null) {
+-            statsp.println(s);
+-        }
+-    }
+-
+-    public void terminate() {
+-        try {
+-            debug("terminate called");
+-            if (t.isAlive()) {
+-                t.interrupt();
+-                for (Enumeration e = listeners.elements(); e.hasMoreElements();) {
+-                    XStreamListener l = (XStreamListener) e.nextElement();
+-                    l.terminated();
+-                }
+-            }
+-        } catch (java.lang.Exception ex) {
+-            if (statsp != null) {
+-                statsp.println(ex.getClass().getName() + ": " + ex.getMessage());
+-                ex.printStackTrace(statsp);
+-            }
+-        }
+-    }    // --- component management interfaces... ---
+-    private final static String _serviceName = "com.sun.star.xml.xslt.XSLT2Transformer";
+-
+-    // Implement methods from interface XTypeProvider
+-    public byte[] getImplementationId() {
+-        byte[] byteReturn = {};
+-        byteReturn = new String("" + this.hashCode()).getBytes();
+-        return (byteReturn);
+-    }
+-
+-    public com.sun.star.uno.Type[] getTypes() {
+-        Type[] typeReturn = {};
+-        try {
+-            typeReturn = new Type[]{
+-                        new Type(XTypeProvider.class),
+-                        new Type(XServiceName.class),
+-                        new Type(XServiceInfo.class),
+-                        new Type(XActiveDataSource.class),
+-                        new Type(XActiveDataSink.class),
+-                        new Type(XActiveDataControl.class),
+-                        new Type(XInitialization.class)
+-                    };
+-        } catch (java.lang.Exception exception) {
+-        }
+-
+-        return (typeReturn);
+-    }
+-
+-    // --- Implement method from interface XServiceName ---
+-    public String getServiceName() {
+-        return (_serviceName);
+-    }
+-
+-    // --- Implement methods from interface XServiceInfo ---
+-    public boolean supportsService(String stringServiceName) {
+-        return (stringServiceName.equals(_serviceName));
+-    }
+-
+-    public String getImplementationName() {
+-        return (XSLTransformer.class.getName());
+-    }
+-
+-    public String[] getSupportedServiceNames() {
+-        String[] stringSupportedServiceNames = {_serviceName};
+-        return stringSupportedServiceNames;
+-    }
+-
+-    // --- component registration methods ---
+-    public static XSingleServiceFactory __getServiceFactory(
+-            String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) {
+-        XSingleServiceFactory xSingleServiceFactory = null;
+-        if (implName.equals(XSLTransformer.class.getName())) {
+-            xSingleServiceFactory = FactoryHelper.getServiceFactory(XSLTransformer.class,
+-                    _serviceName, multiFactory, regKey);
+-        }
+-        return xSingleServiceFactory;
+-    }
+-}
+diff --git a/filter/source/xsltfilter/components.rdb b/filter/source/xsltfilter/components.rdb
+deleted file mode 100644
+index 6014b82..0000000
+--- a/filter/source/xsltfilter/components.rdb
++++ /dev/null
+@@ -1,8 +0,0 @@
+-<?xml version="1.0"?>
+-<components xmlns="http://openoffice.org/2010/uno-components">
+-    <component loader="com.sun.star.loader.Java2" uri="./XSLTFilter.jar">
+-        <implementation name="com.sun.star.comp.xsltfilter.XSLTransformer">
+-            <service name="com.sun.star.xml.xslt.XSLT2Transformer"/>
+-        </implementation>
+-    </component>
+-</components>
+diff --git a/filter/source/xsltfilter/description-en-US.txt b/filter/source/xsltfilter/description-en-US.txt
+deleted file mode 100644
+index 88c8abf..0000000
+--- a/filter/source/xsltfilter/description-en-US.txt
++++ /dev/null
+@@ -1 +0,0 @@
+-The xslt2-transformer implements a transformer for XSLT import/export filters with support for XSLT 2.0.
+diff --git a/filter/source/xsltfilter/description.xml b/filter/source/xsltfilter/description.xml
+deleted file mode 100644
+index ae6abcb..0000000
+--- a/filter/source/xsltfilter/description.xml
++++ /dev/null
+@@ -1,28 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<description
+-
+-    xmlns="http://openoffice.org/extensions/description/2006"
+-    xmlns:dep="http://libreoffice.org/extensions/description/2011"
+-    xmlns:xlink="http://www.w3.org/1999/xlink">
+-
+-    <identifier value="org.libreoffice.JavaXSLT2Transformer"/>
+-
+-    <dependencies>
+-        <dep:LibreOffice-minimal-version value="3.7"/>
+-    </dependencies>
+-
+-    <version value="1.0.0"/>
+-
+-    <publisher>
+-        <name xlink:href="http://www.documentfoundation.org" lang="en-US">The Document Foundation</name>
+-    </publisher>
+-
+-    <display-name>
+-        <name lang="en-US">XSLT 2.0 transformer</name>
+-    </display-name>
+-
+-    <extension-description>
+-      <src xlink:href="description-en-US.txt" lang="en-US" />
+-    </extension-description>
+-
+-</description>
+diff --git a/filter/source/xsltfilter/manifest.xml b/filter/source/xsltfilter/manifest.xml
+deleted file mode 100644
+index a443e65..0000000
+--- a/filter/source/xsltfilter/manifest.xml
++++ /dev/null
+@@ -1,6 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
+-<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
+-  <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-components"
+-                       manifest:full-path="components.rdb"/>
+-</manifest:manifest>
+-- 
+1.7.11.7
+
diff --git a/0004-remove-all-traces-of-saxon.patch b/0004-remove-all-traces-of-saxon.patch
new file mode 100644
index 0000000..7c90ca2
--- /dev/null
+++ b/0004-remove-all-traces-of-saxon.patch
@@ -0,0 +1,1650 @@
+From acbef0543f72f48ff135864eed181a1111fc0700 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon at redhat.com>
+Date: Wed, 10 Oct 2012 17:42:46 +0200
+Subject: [PATCH 4/4] remove all traces of saxon
+
+(cherry picked from commit 725eba738eae4eee6cd9b833d375db5463833119)
+
+Conflicts:
+	Makefile.top
+	Module_tail_build.mk
+	RepositoryExternal.mk
+	config_host.mk.in
+	configure.ac
+	ooo.lst.in
+	readlicense_oo/html/LICENSE.html
+	saxon/prj/build.lst
+	saxon/prj/d.lst
+	tail_build/prj/build.lst
+
+Change-Id: I33ca2c27d557d24e3900d7ebf8f3ea2d99b3cfb0
+---
+ Makefile.top                                     |    1 -
+ RepositoryExternal.mk                            |   14 -
+ config_host.mk.in                                |    3 -
+ configure.in                                     |  138 ---
+ filter/prj/build.lst                             |    2 +-
+ ooo.lst.in                                       |    5 -
+ readlicense_oo/html/THIRDPARTYLICENSEREADME.html |   14 +-
+ readlicense_oo/txt/NOTICE                        |    5 -
+ readlicense_oo/txt/license.txt                   |   14 -
+ saxon/README                                     |    1 -
+ saxon/makefile.mk                                |   69 --
+ saxon/prj/build.lst                              |    2 -
+ saxon/prj/d.lst                                  |    1 -
+ saxon/saxon-9.0.0.7-bj.patch                     | 1031 ----------------------
+ stax/README                                      |    1 -
+ stax/makefile.mk                                 |   78 --
+ stax/prj/build.lst                               |    2 -
+ stax/prj/d.lst                                   |    1 -
+ tail_build/prj/build.lst                         |    2 +-
+ 19 files changed, 3 insertions(+), 1381 deletions(-)
+ delete mode 100644 saxon/README
+ delete mode 100644 saxon/makefile.mk
+ delete mode 100644 saxon/prj/build.lst
+ delete mode 100644 saxon/prj/d.lst
+ delete mode 100644 saxon/prj/dmake
+ delete mode 100644 saxon/saxon-9.0.0.7-bj.patch
+ delete mode 100644 stax/README
+ delete mode 100644 stax/makefile.mk
+ delete mode 100644 stax/prj/build.lst
+ delete mode 100644 stax/prj/d.lst
+ delete mode 100644 stax/prj/dmake
+
+diff --git a/Makefile.top b/Makefile.top
+index 7451445..c84cc6f 100644
+--- a/Makefile.top
++++ b/Makefile.top
+@@ -232,7 +232,6 @@ rhino\
+ saxon\
+ setup_native\
+ soltools\
+-stax\
+ stlport\
+ sysui\
+ tomcat\
+diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
+index 730043c..b8a3cbd 100644
+--- a/RepositoryExternal.mk
++++ b/RepositoryExternal.mk
+@@ -1698,20 +1698,6 @@ endif
+ 
+ ### Jars ############################################################
+ 
+-ifeq ($(SYSTEM_SAXON),YES)
+-
+-define gb_JavaClassSet__use_saxon
+-$(call gb_JavaClassSet_use_system_jar,$(1),$(SAXON_JAR))
+-endef
+-
+-else # !SYSTEM_SAXON
+-
+-define gb_JavaClassSet__use_saxon
+-$(call gb_JavaClassSet_use_jar,$(1),$(OUTDIR)/bin/saxon9.jar)
+-endef
+-
+-endif # SYSTEM_SAXON
+-
+ ifeq ($(SYSTEM_BSH),YES)
+ 
+ define gb_JavaClassSet__use_bsh
+diff --git a/config_host.mk.in b/config_host.mk.in
+index 4fb80d1..f643039 100644
+--- a/config_host.mk.in
++++ b/config_host.mk.in
+@@ -32,7 +32,6 @@ export BUILD_MOZAB=@BUILD_MOZAB@
+ export BUILD_NCPUS=@BUILD_NCPUS@
+ export BUILD_PLATFORM=@build@
+ export BUILD_POSTGRESQL_SDBC=@BUILD_POSTGRESQL_SDBC@
+-export BUILD_STAX=@BUILD_STAX@
+ export BUILD_TYPE=@BUILD_TYPE@
+ export BUILD_UNOWINREG=@BUILD_UNOWINREG@
+ export BUILD_VER_STRING=@BUILD_VER_STRING@
+@@ -433,7 +432,6 @@ export RTL_OS=@RTL_OS@
+ export RTL_ARCH=@RTL_ARCH@
+ export SAC_JAR=@SAC_JAR@
+ export SAL_ENABLE_FILE_LOCKING=1
+-export SAXON_JAR=@SAXON_JAR@
+ export SCPDEFS=@SCPDEFS@
+ export SERVLETAPI_JAR=@SERVLETAPI_JAR@
+ export SHOWINCLUDES_PREFIX=@SHOWINCLUDES_PREFIX@
+@@ -528,7 +526,6 @@ export SYSTEM_POSTGRESQL=@SYSTEM_POSTGRESQL@
+ export SYSTEM_PYTHON=@SYSTEM_PYTHON@
+ export SYSTEM_REDLAND=@SYSTEM_REDLAND@
+ export SYSTEM_RHINO=@SYSTEM_RHINO@
+-export SYSTEM_SAXON=@SYSTEM_SAXON@
+ export SYSTEM_SERVLETAPI=@SYSTEM_SERVLETAPI@
+ export SYSTEM_STDLIBS=@SYSTEM_STDLIBS@
+ export SYSTEM_VIGRA=@SYSTEM_VIGRA@
+diff --git a/configure.in b/configure.in
+index b2ae537..0b286ee 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1427,16 +1427,6 @@ AC_ARG_WITH(libbase-jar,
+         [Specify path to jarfile manually.]),
+     LIBBASE_JAR=$withval)
+ 
+-AC_ARG_WITH(system-saxon,
+-    AS_HELP_STRING([--with-system-saxon],
+-        [Use saxon already on system.]),,
+-    [with_system_saxon="$with_system_jars"])
+-
+-AC_ARG_WITH(saxon-jar,
+-    AS_HELP_STRING([--with-saxon-jar=JARFILE],
+-        [Specify path to jarfile manually.]),
+-    SAXON_JAR=$withval)
+-
+ AC_ARG_WITH(system-odbc,
+     AS_HELP_STRING([--with-system-odbc],
+         [Use the odbc headers already on system.]),,
+@@ -7066,134 +7056,6 @@ AC_SUBST(SYSTEM_POSTGRESQL)
+ AC_SUBST(POSTGRESQL_INC)
+ AC_SUBST(POSTGRESQL_LIB)
+ 
+-
+-dnl ===================================================================
+-dnl Check for system saxon
+-dnl ===================================================================
+-if test "$with_java" != "no"; then
+-AC_MSG_CHECKING([which saxon to use])
+-if test "$with_system_saxon" = "yes"; then
+-    AC_MSG_RESULT([external])
+-    SYSTEM_SAXON=YES
+-    if test -z $SAXON_JAR; then
+-        AC_CHECK_FILE(/usr/share/java/saxon9.jar,
+-            [ SAXON_JAR=/usr/share/java/saxon9.jar ],
+-            [
+-              AC_CHECK_FILE(/usr/share/java/saxon.jar,
+-                [ SAXON_JAR=/usr/share/java/saxon.jar ],
+-                [ AC_CHECK_FILE(/usr/share/java/saxon9.jar,
+-                    [ SAXON_JAR=/usr/share/java/saxon9.jar ],
+-                    [ AC_MSG_ERROR(saxon.jar replacement not found)]
+-                  )
+-                ]
+-              )
+-            ]
+-          )
+-    else
+-        AC_CHECK_FILE($SAXON_JAR, [],
+-               [AC_MSG_ERROR(saxon.jar replacement not found.)], [])
+-    fi
+-    if test -n "$SERIALIZER_JAR"; then
+-        AC_CHECK_FILE($SERIALIZER_JAR, [],
+-               [AC_MSG_ERROR(serializer.jar not found.)], [])
+-        AC_SUBST(SERIALIZER_JAR)
+-    fi
+-
+-    dnl Saxon comes in two practically available versions, the out-of-date saxonb which
+-    dnl supports the Java extensions that LibreOffice uses, and the up-to-date saxon he
+-    dnl "home edition" version, which is crippled to not support those Java extensions.
+-    dnl And as an aside the he one also needs to be tweaked to include
+-    dnl a META-INF/services to broadcast that it supports the jaxp transform factory
+-
+-    AC_MSG_CHECKING([if saxon works])
+-    cat > saxontest.java <<_ACEOF
+-[import javax.xml.transform.TransformerFactory;
+-import javax.xml.transform.Transformer;
+-import javax.xml.transform.stream.StreamSource;
+-import java.io.*;
+-
+-import net.sf.saxon.FeatureKeys;
+-
+-class saxontest {
+-    public static void main(String[] args) {
+-      System.setProperty("javax.xml.transform.TransformerFactory",
+-        "net.sf.saxon.TransformerFactoryImpl");
+-      try {
+-        TransformerFactory tfactory = TransformerFactory.newInstance();
+-    // some external saxons (Debian, Ubuntu, ...) have this disabled
+-    // per default
+-    tfactory.setAttribute(FeatureKeys.ALLOW_EXTERNAL_FUNCTIONS, new Boolean(true));
+-        System.out.println("TransformerFactory is" +
+-          tfactory.getClass().getName());
+-        Transformer transformer = tfactory.newTransformer(
+-          new StreamSource(new File(args[0])));
+-      } catch(Exception e){
+-        e.printStackTrace(System.err);
+-        System.exit(-1);
+-      }
+-      System.exit(0);
+-    }
+-}
+-]
+-_ACEOF
+-
+-    cat > saxontest.xsl<<_ACEOF
+-[<?xml version="1.0" encoding="UTF-8"?>
+-<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+- <xsl:template match="/">
+-  <xsl:value-of select="math:sqrt(1)" xmlns:math="java:java.lang.Math"/>
+- </xsl:template>
+-</xsl:stylesheet>
+-]
+-_ACEOF
+-
+-    javac_cmd="$JAVACOMPILER -cp $SAXON_JAR saxontest.java 1>&2"
+-    AC_TRY_EVAL(javac_cmd)
+-    if test $? = 0 -a -f ./saxontest.class; then
+-        java_cmd="$JAVAINTERPRETER -cp $SAXON_JAR:. saxontest saxontest.xsl 1>&2"
+-        AC_TRY_EVAL(java_cmd)
+-        if test $? = 0; then
+-            AC_MSG_RESULT([yes])
+-        else
+-            cat saxontest.java >&5
+-            AC_MSG_RESULT([no])
+-            AC_MSG_ERROR([Non-functional saxon jar, e.g. crippled saxon-he instead of saxonb])
+-        fi
+-    else
+-        AC_MSG_RESULT([no])
+-        cat saxontest.java >&5
+-        AC_MSG_ERROR([saxontest could not be compiled, non-functional saxon jar])
+-    fi
+-else
+-    AC_MSG_RESULT([internal])
+-    SYSTEM_SAXON=NO
+-    NEED_SAXON=TRUE
+-fi
+-fi
+-AC_SUBST(SYSTEM_SAXON)
+-AC_SUBST(SAXON_JAR)
+-
+-if test -n "$NEED_SAXON"; then
+-    BUILD_TYPE="$BUILD_TYPE SAXON"
+-fi
+-
+-# ===================================================================
+-# Check whether to build stax
+-# ===================================================================
+-AC_MSG_CHECKING([whether building the stax is required])
+-BUILD_STAX=NO
+-if test -z "$SOLAR_JAVA"; then
+-    AC_MSG_RESULT([no (java disabled)])
+-elif test "$SYSTEM_SAXON" = "YES"; then
+-    AC_MSG_RESULT([no (already provided by system saxon)])
+-elif test -f "./stax/download/jsr173_1.0_api.jar"; then
+-    AC_MSG_RESULT([no (will use the prebuilt stax/download/jsr173_1.0_api.jar)])
+-else
+-    BUILD_STAX=YES
+-    AC_MSG_RESULT([yes (no system saxon and no prebuilt copy)])
+-fi
+-AC_SUBST(BUILD_STAX)
+-
+ dnl ===================================================================
+ dnl Check for system curl
+ dnl ===================================================================
+diff --git a/filter/prj/build.lst b/filter/prj/build.lst
+index 9083dc7..2319f39 100644
+--- a/filter/prj/build.lst
++++ b/filter/prj/build.lst
+@@ -1,2 +1,2 @@
+-fl      filter  :    TRANSLATIONS:translations svtools unotools xmloff cppu tools cppuhelper sal salhelper svx javaunohelper XPDF:xpdf jvmaccess canvas SAXON:saxon LIBXSLT:libxslt basegfx package PYTHON:python NULL
++fl      filter  :    TRANSLATIONS:translations svtools unotools xmloff cppu tools cppuhelper sal salhelper svx javaunohelper XPDF:xpdf jvmaccess canvas LIBXSLT:libxslt basegfx package PYTHON:python NULL
+ fl  filter\prj nmake - all fl_prj   NULL
+diff --git a/ooo.lst.in b/ooo.lst.in
+index 02d14b0..4d5b977 100644
+--- a/ooo.lst.in
++++ b/ooo.lst.in
+@@ -8,7 +8,6 @@ c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
+ 1756c4fa6c616ae15973c104cd8cb256-Adobe-Core35_AFMs-314.tar.gz
+ 18f577b374d60b3c760a3a3350407632-STLport-4.5.tar.gz
+ 1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz
+-24be19595acad0a2cae931af77a0148a-LICENSE_source-9.0.0.7-bj.html
+ 26b3e95ddf3d9c077c480ea45874b3b8-lp_solve_5.5.tar.gz
+ 284e768eeda0e2898b0d5bf7e26a016e-raptor-1.4.18.tar.gz
+ 2a177023f9ea8ec8bd00837605c5df1b-jakarta-tomcat-5.0.30-src.tar.gz
+@@ -30,12 +29,9 @@ f101a9e88b783337b20b2e26dfd26d5f-cairo-1.10.2.tar.gz
+ 7376930b0d3f3d77a685d94c4a3acda8-STLport-4.5-0119.tar.gz
+ 798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
+ ecb2e37e45c9933e2a963cabe03670ab-curl-7.19.7.tar.gz
+-8294d6c42e3553229af9934c5c0ed997-stax-api-1.0-2-sources.jar
+ bd30e9cf5523cdfc019b94f5e1d7fd19-cppunit-1.12.1.tar.gz
+ a169ab152209200a7bad29a275cb0333-seamonkey-1.1.14.source.tar.gz
+-a4d9b30810a434a3ed39fc0003bbd637-LICENSE_stax-api-1.0-2-sources.html
+ a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
+-ada24d37d8d638b3d8a9985e80bc2978-source-9.0.0.7-bj.zip
+ af3c3acf618de6108d65fcdc92b492e1-commons-codec-1.3-src.tar.gz
+ bc702168a2af16869201dbe91e46ae48-LICENSE_Python-2.6.1
+ c441926f3a552ed3e5b274b62e86af16-STLport-4.0.tar.gz
+@@ -48,7 +44,6 @@ e61d0364a30146aaa3001296f853b2b9-libxslt-1.1.26.tar.gz
+ ea570af93c284aa9e5621cd563f54f4d-bsh-2.0b1-src.tar.gz
+ ea91f2fb4212a21d708aced277e6e85a-vigra1.4.0.tar.gz
+ dd7dab7a5fea97d2a6a43f511449b7cd-expat-2.1.0.tar.gz
+-fb7ba5c2182be4e73748859967455455-README_stax-api-1.0-2-sources.txt
+ fca8706f2c4619e2fa3f8f42f8fc1e9d-rasqal-0.9.16.tar.gz
+ f872f4ac066433d8ff92f5e316b36ff9-dejavu-fonts-ttf-2.33.zip
+ 0981bda6548a8c8233ffce2b6e4b2a23-mysql-connector-c++-1.1.0.tar.gz
+diff --git a/readlicense_oo/html/THIRDPARTYLICENSEREADME.html b/readlicense_oo/html/THIRDPARTYLICENSEREADME.html
+index 46fc32f..4fca83d 100644
+--- a/readlicense_oo/html/THIRDPARTYLICENSEREADME.html
++++ b/readlicense_oo/html/THIRDPARTYLICENSEREADME.html
+@@ -2110,18 +2110,6 @@ FITNESS FOR A PARTICULAR PURPOSE.</P>
+ <P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm">This
+ file declares SANE application interface. See the SANE standard for a
+ detailed explanation of the interface.</P>
+-<H2 CLASS="western">Saxon (B)</H2>
+-<P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm">The
+-following software may be included in this product: Saxon (B). Use of
+-any of this software is governed by the terms of the license below:</P>
+-<P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm"><A HREF="#10.Mozilla Public License Version 1.1|outline">Jump
+-to MPL Version 1.1</A></P>
+-<H2 CLASS="western">Stax</H2>
+-<P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm">The
+-following software may be included in this product: Stax API. Use of
+-any of this software is governed by the terms of the license below:</P>
+-<P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm"><A HREF="#11.Apache License|outline">Jump
+-to Apache License Version 2.0</A></P>
+ <H2 CLASS="western">STLPort</H2>
+ <P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm">The
+ following software may be included in this product:STLport. Use of
+@@ -9429,4 +9417,4 @@ this trademark restriction does not form part of the License.</P>
+ <P CLASS="western" STYLE="margin-top: 0.3cm; margin-bottom: 0.3cm">Creative
+ Commons may be contacted at <A HREF="http://creativecommons.org/">http://creativecommons.org/</A>.</P>
+ </BODY>
+-</HTML>
+\ No newline at end of file
++</HTML>
+diff --git a/readlicense_oo/txt/NOTICE b/readlicense_oo/txt/NOTICE
+index 181aea7..8edf0f0 100644
+--- a/readlicense_oo/txt/NOTICE
++++ b/readlicense_oo/txt/NOTICE
+@@ -139,7 +139,6 @@ As part of the base system this product also includes code from the following
+ projects which are licensed under the Apache license:
+ - serf
+ - redland
+-- StAX
+ 
+ The notices from these projects are following:
+ 
+@@ -153,10 +152,6 @@ This product includes Redland software (http://librdf.org/)
+ developed at the Institute for Learning and Research Technology,
+ University of Bristol, UK (http://www.bristol.ac.uk/).
+ 
+-
+-StAX
+-[no notices]
+-
+ ____
+ 
+ This product includes software developed by the OpenSSL Project
+diff --git a/readlicense_oo/txt/license.txt b/readlicense_oo/txt/license.txt
+index 6acf5b6d..137a892 100644
+--- a/readlicense_oo/txt/license.txt
++++ b/readlicense_oo/txt/license.txt
+@@ -2057,20 +2057,6 @@ SANE
+    This file declares SANE application interface. See the SANE standard
+    for a detailed explanation of the interface.
+ 
+-Saxon (B)
+-
+-   The following software may be included in this product: Saxon (B). Use
+-   of any of this software is governed by the terms of the license below:
+-
+-   See MPL Version 1.1 below
+-
+-Stax
+-
+-   The following software may be included in this product: Stax API. Use
+-   of any of this software is governed by the terms of the license below:
+-
+-   See Apache License Version 2.0 below
+-
+ STLPort
+ 
+    The following software may be included in this product:STLport. Use of
+diff --git a/saxon/README b/saxon/README
+deleted file mode 100644
+index 26344a7..0000000
+--- a/saxon/README
++++ /dev/null
+@@ -1 +0,0 @@
+-XSLT and XQuery Processor from [[http://saxon.sourceforge.net/]]
+diff --git a/saxon/makefile.mk b/saxon/makefile.mk
+deleted file mode 100644
+index 40a7404..0000000
+--- a/saxon/makefile.mk
++++ /dev/null
+@@ -1,69 +0,0 @@
+-#*************************************************************************
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-# 
+-# Copyright 2000, 2010 Oracle and/or its affiliates.
+-#
+-# OpenOffice.org - a multi-platform office productivity suite
+-#
+-# This file is part of OpenOffice.org.
+-#
+-# OpenOffice.org is free software: you can redistribute it and/or modify
+-# it under the terms of the GNU Lesser General Public License version 3
+-# only, as published by the Free Software Foundation.
+-#
+-# OpenOffice.org is distributed in the hope that 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 version 3 for more details
+-# (a copy is included in the LICENSE file that accompanied this code).
+-#
+-# You should have received a copy of the GNU Lesser General Public License
+-# version 3 along with OpenOffice.org.  If not, see
+-# <http://www.openoffice.org/license.html>
+-# for a copy of the LGPLv3 License.
+-#
+-#*************************************************************************
+-
+-PRJ=.
+-
+-PRJNAME=saxon
+-TARGET=saxon
+-
+-# --- Settings -----------------------------------------------------
+-
+-.INCLUDE :	settings.mk
+-.INCLUDE : antsettings.mk
+-
+-.IF "$(SOLAR_JAVA)" != ""
+-.IF "$(SYSTEM_SAXON)" == "YES"
+-all:
+-        @echo "An already available installation of saxon should exist on your system."
+-    @echo "Therefore the version provided here does not need to be built in addition."
+-.ENDIF
+-
+-# --- Files --------------------------------------------------------
+-
+-TARFILE_NAME=source-9.0.0.7-bj
+-TARFILE_MD5=ada24d37d8d638b3d8a9985e80bc2978
+-ADDITIONAL_FILES=build.xml
+-TARFILE_ROOTDIR=src
+-
+-PATCH_FILES=saxon-9.0.0.7-bj.patch
+-
+-BUILD_ACTION="$(ANT)" $(ANT_FLAGS) -Dsolarbindir=$(SOLARBINDIR) jar-bj
+-
+-OUT2CLASS= saxon-build$/9.0.0.7$/bj$/saxon9.jar
+-
+-.ELSE			# $(SOLAR_JAVA)!= ""
+-nojava:
+-    @echo "Not building $(PRJNAME) because Java is disabled"
+-.ENDIF			# $(SOLAR_JAVA)!= ""
+-# --- Targets ------------------------------------------------------
+-
+-.INCLUDE : set_ext.mk
+-.INCLUDE : target.mk
+-.IF "$(SOLAR_JAVA)" != ""
+-.INCLUDE : tg_ext.mk
+-.ENDIF
+-
+diff --git a/saxon/prj/build.lst b/saxon/prj/build.lst
+deleted file mode 100644
+index 813097c..0000000
+--- a/saxon/prj/build.lst
++++ /dev/null
+@@ -1,2 +0,0 @@
+-xx	saxon	:	solenv stax NULL
+-xx	saxon	nmake	-	all	xx_saxon NULL
+diff --git a/saxon/prj/d.lst b/saxon/prj/d.lst
+deleted file mode 100644
+index 0793dad..0000000
+--- a/saxon/prj/d.lst
++++ /dev/null
+@@ -1 +0,0 @@
+-..\%__SRC%\class\saxon9.jar %_DEST%\bin\saxon9.jar
+diff --git a/saxon/prj/dmake b/saxon/prj/dmake
+deleted file mode 100644
+index e69de29..0000000
+diff --git a/saxon/saxon-9.0.0.7-bj.patch b/saxon/saxon-9.0.0.7-bj.patch
+deleted file mode 100644
+index 11d3091..0000000
+--- a/saxon/saxon-9.0.0.7-bj.patch
++++ /dev/null
+@@ -1,1031 +0,0 @@
+---- misc/src/build.xml	2008-07-11 12:11:50.079281000 +0200
+-+++ misc/build/src/build.xml	2008-07-11 12:17:29.848740000 +0200
+-@@ -1 +1,1027 @@
+--dummy
+-+<?xml version="1.0" encoding="UTF-8"?>
+-+
+-+<project basedir="." default="all" name="Saxon-B The XSLT and XQuery Processor"
+-+         xmlns:dn="antlib:org.apache.ant.dotnet">
+-+         
+-+         
+-+    <!-- TODO *really* Must publish NOTICES directory with patch releases. Should also
+-+          publish doc directory, and add a notice concerning Saxon/MPL itself, as per section 3.6 of MPL 1.0 -->     
+-+    
+-+    <!--TODO: 1: ensure saxon9api.netmodule is included in the build
+-+           2: remove the archive target before shipping this file-->
+-+    
+-+    <!-- note : Ant 1.7 is needed for this script -->
+-+    
+-+    <!-- Ant 1.7 introduces a <service> element to allow META-INF/services
+-+         directories to be created in JAR files. Unfortunately it is broken,
+-+         see http://issues.apache.org/bugzilla/show_bug.cgi?id=41201. The relevant
+-+         code here is retained in the form of comments, and can be reinstated
+-+         when the bug is fixed. Meanwhile the directories are created manually -->
+-+    
+-+    <!-- Build file for Saxon. This builds all four for the released products:
+-+         Saxon-B and Saxon-SA, on both the Java and .NET platforms. It also builds
+-+         the released resources file. A full build requires access to Saxonica
+-+         proprietary source code. The open source Saxon-B product can be built for
+-+         Java using target "bj"; but building Saxon-B for .NET may require some
+-+         disentangling of tasks that depend on Saxon-SA being present. -->
+-+         
+-+    <!-- Useful targets:
+-+    
+-+         clean        clears temporary directories
+-+         bj           builds executables for Saxon-B 
+-+         saj          builds executables for Saxon-B and Saxon-SA 
+-+         n            builds executables for Saxon on .NET
+-+         build        builds all executables
+-+         resources    builds samples and documentation
+-+         release      builds ZIP files for published downloads
+-+         archive      produces a back-up archive  -->
+-+             
+-+         
+-+    <!-- Naming conventions:
+-+         -n   : .NET
+-+         -j   : Java
+-+         -b   : Saxon-B
+-+         -sa  : Saxon-SA
+-+         combined as appropriate, so -bj denotes Saxon-B on the Java platform
+-+    -->     
+-+    
+-+    <property name="version" value="9.0.0.7"/>
+-+    <property name="versionh" value="9-0-0-7"/>
+-+    <property name="release.date" value="2008-07-03"/>
+-+    
+-+    <!-- following locations are specific to the machine -->
+-+
+-+		    <!-- root drive for input files-->
+-+		    <property name="root" value="."/>
+-+		    
+-+		    <!-- root drive for generated files-->
+-+		    <property name="troot" value="."/>
+-+		    
+-+		    <!-- directory holding Java source code -->
+-+		    <property name="development-j.dir" value="${root}/MyJava/saxon8.x"/>
+-+		    
+-+		    <!-- directory holding Java source code as in Subversion -->
+-+		    <property name="subversion-j.dir" value="${root}"/>		
+-+		    
+-+		    <!-- directory holding latest patch state of Saxon-SA Java code -->
+-+		    <property name="saj-patch.dir" value="${root}/saxon-90-patch"/>				        
+-+		    
+-+		    <!-- directory holding Java test drivers -->
+-+		    <property name="drivers-j.dir" value="${root}/MyJava/test"/>		    
+-+		    
+-+		    <!-- directories holding C# source code -->
+-+		    <property name="vss-n.dir" value="${root}/Documents and Settings/Mike/My Documents/Visual Studio 2005/Projects/Saxon.Api"/>
+-+
+-+		    <!-- directory holding C# source code as in Subversion -->
+-+		    <property name="subversion-n.dir" value="${root}/saxon-svn/latest9.0/bn/csource"/>	
+-+		    
+-+		    <!-- directory holding XML user documentation -->
+-+		    <property name="userdoc.dir" value="${root}/MyJava/doc/saxon8"/>
+-+		    
+-+		    <!-- directory holding .NET API documentation (which is built manually using NDOC -->
+-+		    <property name="dotnetdoc.dir" value="${root}/MyDotNet/dotnetdoc"/>
+-+		    
+-+		    <!-- directories holding use cases and sample applications -->
+-+		    <property name="usercases.dir" value="${root}/MyJava/use-cases"/>
+-+		    <property name="samples.dir" value="${root}/MyJava/samples"/>
+-+		    
+-+		    <!-- directory in which to build the product for release -->
+-+		    <property name="product.dir" value="${troot}/saxon-build/${version}"/>
+-+		    
+-+		    <!-- directory in which to build the issued .ZIP files -->
+-+		    <property name="issue.dir" value="${troot}/saxon-issues/saxon-issue-${release.date} (${version})"/>
+-+		    
+-+		    <!-- location of the C# compiler -->
+-+		    <property name="csharp.compiler" value="c:/Windows/Microsoft.NET/Framework/v1.1.4322/csc.exe"/>   
+-+		    
+-+    
+-+    <!-- following locations are for IKVMC code used to build the .NET product -->
+-+    
+-+    <property name="development-ikvm.dir" value="${root}/MyDotNet"/>
+-+    <property name="ikvm.dir" value="${development-ikvm.dir}/ikvm-0.32.0.0"/>
+-+    <property name="generated.stubs.dir" value="${development-ikvm.dir}/stubs"/>
+-+    <property name="saxondotnet.snk" value="${development-ikvm.dir}/make/saxondotnet.snk"/>
+-+    
+-+    <!-- Precondition for .NET compilation: IKVM is installed.
+-+         * Download from www.ikvm.net
+-+         * Unzip into ${development-ikvm.dir}
+-+         * Register in the GAC (access the Microsoft .NET Framework Configuration item in the 
+-+                                Windows Control Panel, and add the assemblies to the Assembly Cache. 
+-+                                At a minimum, install the IKVM.GNU.Classpath.dll and IKVM.Runtime.dll)
+-+         * Generate stubs in ${generated.stubs.dir} 
+-+           for System.Xml.dll, System.Security.dll, and IKVM.GNU.Classpath.dll
+-+    -->       
+-+    
+-+    <!-- following locations are relative to the build file -->
+-+        
+-+    <property name="lib.dir" value="libs"/>
+-+    <property name="temp.dir" value="temp"/>
+-+    <property name="archive.dir" value="archive"/>
+-+    <property name="services.dir" value="services"/>
+-+    <property name="temp-src-j.dir" value="${temp.dir}/j/source"/>
+-+    <property name="temp-src-nj.dir" value="${temp.dir}/n/jsource"/>
+-+    <property name="temp-src-nc.dir" value="${temp.dir}/n/csource"/>
+-+    <property name="classes-j.dir" value="${temp.dir}/j/classes"/> 
+-+    <property name="classes-n.dir" value="${temp.dir}/n/classes"/> 
+-+    <property name="jar-n.dir" value="${temp.dir}/n/jar"/> 
+-+    <property name="dll-n.dir" value="${temp.dir}/n/dll"/>  
+-+
+-+		<!-- following locations are relative to the destination directory -->
+-+		
+-+		<property name="build-bj.dir" value="${product.dir}/bj"/>  
+-+		<property name="build-saj.dir" value="${product.dir}/saj"/> 
+-+		<property name="build-bn.dir" value="${product.dir}/bn"/>  
+-+		<property name="build-san.dir" value="${product.dir}/san"/>
+-+		<property name="build-resources.dir" value="${product.dir}/resources"/> 
+-+	  <property name="javadoc.dir" value="${build-resources.dir}/doc/javadoc"/>   
+-+    
+-+
+-+    <property name="build.debug" value="true"/>
+-+    <property name="build.debuglevel" value="source,lines,vars"/>
+-+    <property name="build.deprecation" value="true"/>
+-+    <property name="build.optimize" value="true"/>
+-+    <property name="build.compiler.source" value="1.4"/>
+-+    <property name="build.compiler.target" value="1.4"/>
+-+    <property name="build.s9api.compiler.source" value="1.5"/>
+-+    <property name="build.s9api.compiler.target" value="1.5"/>    
+-+    <property name="build.compress" value="false"/>
+-+    
+-+    <!-- following properties can be switched to determine whether to build from patch source
+-+         or from development source -->
+-+         
+-+    <!-- patch source -->     
+-+      
+-+    <property name="source-bj.dir" value="${subversion-j.dir}"/>
+-+    <property name="source-saj.dir" value="${saj-patch.dir}"/>
+-+    <property name="source-api-n.dir" value="${subversion-n.dir}/api/Saxon.Api"/>
+-+    <property name="source-cmd-n.dir" value="${subversion-n.dir}/cmd"/>
+-+    <property name="source-samples-n.dir" value="${subversion-n.dir}/samples"/>
+-+      
+-+    <!-- development source -->
+-+		<!--        
+-+    <property name="source-bj.dir" value="${development-j.dir}"/>
+-+    <property name="source-saj.dir" value="${development-j.dir}"/>
+-+    <property name="source-api-n.dir" value="${vss-n.dir}"/>
+-+    <property name="source-cmd-n.dir" value="${vss-n.dir}"/>
+-+    <property name="source-samples-n.dir" value="${vss-n.dir}"/>        
+-+    -->    
+-+    
+-+    <property name="solar.bin" value="${solarbindir}"/>
+-+    <path id="classpath-j">
+-+        <fileset dir="${solar.bin}">
+-+            <include name="jsr173_1.0_api.jar"/>
+-+        </fileset>
+-+    </path>
+-+        
+-+    <path id="classpath-n">
+-+        <fileset dir="${lib.dir}">
+-+            <include name="*.jar"/>
+-+        </fileset>
+-+        <fileset dir="${ikvm.dir}">
+-+        	 <include name="classpath/mscorlib.jar"/>
+-+        	 <include name="classpath/System.jar"/>
+-+        	 <include name="bin/IKVM.GNU.Classpath.jar"/>
+-+        	 <include name="bin/IKVM.Runtime.jar"/>
+-+        </fileset>
+-+        <fileset dir="${generated.stubs.dir}">	 
+-+        	 <include name="System.Xml.jar"/>
+-+        	 <include name="System.Security.jar"/>
+-+        </fileset>	 
+-+    </path>
+-+    
+-+    <path id="classpath-samples">
+-+        <fileset dir="${lib.dir}">
+-+            <include name="*.jar"/>
+-+        </fileset>
+-+        <fileset dir="${build-saj.dir}">
+-+            <include name="*.jar"/>
+-+        </fileset>
+-+        <!-- Substitute build-bj.dir if there is no requirement to compile the sample applications
+-+             that depend on Saxon-SA -->
+-+    </path> 
+-+    
+-+    <target name="clean" description="Clean all files other than source code and downloaded jars.">
+-+        <delete dir="${temp.dir}"/>
+-+        <delete dir="${product.dir}"/>
+-+        <mkdir dir="${product.dir}"/>
+-+    </target>
+-+    
+-+    <target name="download" description="Download third-party jar files.">
+-+        <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"
+-+            dest="${lib.dir}/dom4j-1.6.1.jar" verbose="true"/>
+-+
+-+        <get src="http://www.ibiblio.org/maven/jdom/jars/jdom-1.0.jar"
+-+            dest="${lib.dir}/jdom-1.0.jar" verbose="true"/>
+-+
+-+        <get src="http://www.cafeconleche.org/XOM/xom-1.1.jar" dest="${lib.dir}/xom-1.1.jar"
+-+            verbose="true"/>
+-+            
+-+        <get src="http://dist.codehaus.org/stax/jars/stax-api-1.0.1.jar" dest="${lib.dir}/stax-api-1.0.1.jar"
+-+            verbose="true"/> 
+-+            
+-+            <!-- TODO: add servlet.jar, ant.jar -->   
+-+            
+-+    </target>               
+-+    
+-+    
+-+    <target name="copysource-development" description="Copy relevant source files from development directory">
+-+        <copy todir="${temp-src-j.dir}">
+-+          <fileset dir="${source-bj.dir}">
+-+            <include name="net/sf/saxon/**/*.java"/>
+-+            <exclude name="**/dotnet/**"/>
+-+            <!--<exclude name="**/s9api/**"/>		 s9api needs Java 5 -->
+-+            <include name="net/sf/saxon/**/package.html"/>
+-+          </fileset>
+-+ <!--       
+-+          <fileset dir="${source-saj.dir}">
+-+            <include name="com/saxonica/**/*.java"/>
+-+            <exclude name="com/saxonica/validate/DotNetVerifier.java"/>
+-+            <include name="com/saxonica/**/package.html"/>
+-+          </fileset>    
+-+ -->             
+-+        </copy>
+-+        <!--
+-+        <replace file="${temp-src-j.dir}/com/saxonica/validate/SchemaAwareConfiguration.java"
+-+                 token="/*DOTNETONLY*/"
+-+                 value="//"
+-+                 summary="yes"/>
+-+                 -->  
+-+        <replace file="${temp-src-j.dir}/net/sf/saxon/Configuration.java"
+-+                 token="/*DOTNETONLY*/"
+-+                 value="//"
+-+                 summary="yes"/>                
+-+        <copy todir="${temp-src-nj.dir}">
+-+          <fileset dir="${source-bj.dir}">
+-+            <include name="net/sf/saxon/**/*.java"/>
+-+            <exclude name="**/ant/**"/>
+-+            <exclude name="**/dom/**"/>
+-+            <exclude name="**/dom4j/**"/>
+-+            <exclude name="**/java/**"/>
+-+            <exclude name="**/javax/**"/>
+-+            <exclude name="**/jdom/**"/>
+-+            <exclude name="**/pull/PullToStax.java"/>
+-+            <exclude name="**/pull/StaxBridge.java"/>
+-+            <!-- <exclude name="**/s9api/**"/>		s9api needs Java 5 -->
+-+            <exclude name="**/xom/**"/>
+-+            <exclude name="**/xpath/**"/>
+-+            <exclude name="**/xqj/**"/>
+-+          </fileset>
+-+          <!--
+-+					<fileset dir="${source-saj.dir}">
+-+            <include name="com/saxonica/extra/*.java"/>
+-+            <include name="com/saxonica/fsa/*.java"/>
+-+            <include name="com/saxonica/ptree/*.java"/>
+-+            <include name="com/saxonica/schema/*.java"/>
+-+            <include name="com/saxonica/sdoc/*.java"/>
+-+            <include name="com/saxonica/validate/*.java"/>
+-+            <include name="com/saxonica/Validate.java"/>
+-+          </fileset>-->          
+-+        </copy>
+-+        <!--
+-+        <replace file="${temp-src-nj.dir}/com/saxonica/validate/SchemaAwareConfiguration.java"
+-+                 token="/*JAVAONLY*/"
+-+                 value="//"
+-+                 summary="yes"/> 
+-+                 --> 
+-+        <replace file="${temp-src-nj.dir}/net/sf/saxon/Configuration.java"
+-+                 token="/*JAVAONLY*/"
+-+                 value="//"
+-+                 summary="yes"/>
+-+        <!-- when building from development source
+-+        <copy todir="${temp-src-nc.dir}/api">
+-+          <fileset dir="${source-api-n.dir}">
+-+            <include name="Saxon.Api/*.cs"/>
+-+          </fileset>
+-+        </copy>
+-+        
+-+        <copy todir="${temp-src-nc.dir}/cmd">
+-+          <fileset dir="${source-cmd-n.dir}/Transform">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-cmd-n.dir}/Query">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-cmd-n.dir}/Validate">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+        </copy>
+-+        <copy todir="${temp-src-nc.dir}/samples">
+-+          <fileset dir="${source-samples-n.dir}/XQueryExamples">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-samples-n.dir}/XPathExample">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-samples-n.dir}/XsltExamples">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-samples-n.dir}/SchemaExamples">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-samples-n.dir}/XsltTestSuiteDriver">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+          <fileset dir="${source-samples-n.dir}/XQueryTestSuiteDriver">
+-+            <include name="*.cs"/>
+-+          </fileset> 
+-+          <fileset dir="${source-samples-n.dir}/SampleExtensions">
+-+            <include name="*.cs"/>
+-+          </fileset>       
+-+        </copy>
+-+        -->
+-+        <!-- when building from patch source 
+-+        <copy todir="${temp-src-nc.dir}/api/Saxon.Api">
+-+          <fileset dir="${source-api-n.dir}">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+        </copy>
+-+        <copy todir="${temp-src-nc.dir}/cmd" >
+-+          <fileset dir="${source-cmd-n.dir}">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+        </copy>
+-+        <copy todir="${temp-src-nc.dir}/samples">
+-+          <fileset dir="${source-samples-n.dir}">
+-+            <include name="*.cs"/>
+-+          </fileset>
+-+        </copy>    
+-+        -->
+-+        <!-- -->
+-+        
+-+    </target>    
+-+    
+-+    <target name="create-meta-inf" description="Create contents of META-INF/services files">    
+-+        
+-+        <!-- given the Ant 1.7.0 bug, create the services files here for copying into the JARS -->
+-+        <mkdir dir="${services.dir}/saxon9/META-INF/services"/>
+-+        <echo file="${services.dir}/saxon9/META-INF/services/javax.xml.transform.TransformerFactory"
+-+              message="net.sf.saxon.TransformerFactoryImpl"/>
+-+        <mkdir dir="${services.dir}/saxon9-xpath/META-INF/services"/>
+-+        <echo file="${services.dir}/saxon9-xpath/META-INF/services/javax.xml.xpath.XPathFactory"
+-+>net.sf.saxon.xpath.XPathFactoryImpl
+-+http\://java.sun.com/jaxp/xpath/dom:    net.sf.saxon.xpath.XPathFactoryImpl
+-+http\://saxon.sf.net/jaxp/xpath/om:     net.sf.saxon.xpath.XPathFactoryImpl
+-+http\://www.xom.nu/jaxp/xpath/xom:      net.sf.saxon.xpath.XPathFactoryImpl
+-+http\://jdom.org/jaxp/xpath/jdom:       net.sf.saxon.xpath.XPathFactoryImpl
+-+http\://www.dom4j.org/jaxp/xpath/dom4j: net.sf.saxon.xpath.XPathFactoryImpl
+-+</echo> 
+-+        <mkdir dir="${services.dir}/saxon9sa/META-INF/services"/>
+-+        <echo file="${services.dir}/saxon9sa/META-INF/services/javax.xml.transform.TransformerFactory"
+-+              message="com.saxonica.SchemaAwareTransformerFactory"/>     
+-+        <mkdir dir="${services.dir}/saxon9sa-jaxp/META-INF/services"/>
+-+        <echo file="${services.dir}/saxon9sa-jaxp/META-INF/services/javax.xml.validation.SchemaFactory"
+-+>com.saxonica.jaxp.SchemaFactoryImpl
+-+http\://www.w3.org/2001/XMLSchema: com.saxonica.jaxp.SchemaFactoryImpl
+-+</echo>         
+-+                                      
+-+
+-+    </target>
+-+    
+-+    <target name="compile-bj" description="Compile Saxon-B classes for Java." depends="copysource-development">
+-+        <mkdir dir="${classes-j.dir}"/>
+-+        <javac encoding="ISO-8859-1" debug="${build.debug}" debuglevel="${build.debuglevel}" 
+-+            deprecation="${build.deprecation}" destdir="${classes-j.dir}"
+-+            optimize="${build.optimize}" srcdir="${temp-src-j.dir}" source="${build.compiler.source}"
+-+            target="${build.compiler.target}">
+-+
+-+            <include name="net/**"/>
+-+            <exclude name="**/dom/**"/>
+-+            <exclude name="**/dom4j/**"/>
+-+            <exclude name="**/javax/**"/>
+-+            <exclude name="**/jdom/**"/>
+-+            <exclude name="**/sql/**"/>
+-+            <exclude name="**/xom/**"/>
+-+            <exclude name="**/xpath/**"/>
+-+            <exclude name="**/xqj/**"/>
+-+            <exclude name="**/dotnet/**"/>
+-+            <exclude name="**/s9api/**"/>            
+-+            
+-+            <exclude name="**/ant/**"/>
+-+            <exclude name="**/dotnet/**"/>
+-+            <exclude name="**/s9api/**"/>
+-+            <classpath>
+-+                <path refid="classpath-j"/>
+-+            </classpath>
+-+        </javac>
+-+    </target>
+-+    
+-+    <target name="compile-saj" description="Compile Saxon-SA classes for Java." depends="copysource-development">
+-+        <mkdir dir="${classes-j.dir}"/>
+-+        <javac debug="${build.debug}"  debuglevel="${build.debuglevel}" 
+-+            deprecation="${build.deprecation}" destdir="${classes-j.dir}"
+-+            optimize="${build.optimize}" srcdir="${temp-src-j.dir}" source="${build.compiler.source}"
+-+            target="${build.compiler.target}">
+-+
+-+            <include name="com/saxonica/**"/>
+-+            <include name="net/sf/saxon/ant/**"/>
+-+            <exclude name="com/saxonica/validate/DotNetVerifier.java"/>
+-+            <classpath>
+-+                <path refid="classpath-j"/>
+-+            </classpath>
+-+        </javac>
+-+    </target>
+-+    
+-+    <target name="compile-s9api" description="Compile s9api classes for Java." 
+-+                                 depends="compile-bj, compile-saj, copysource-development">
+-+        <!-- Compiling the s9api package requires JDK 1.5 -->
+-+        <!-- The bj and saj source must be compiled first to ensure that it is done using 1.4, otherwise
+-+             it will be compiled in 1.5 mode because the classes are referenced from the s9api package -->
+-+        <javac debug="${build.debug}" debuglevel="${build.debuglevel}" 
+-+            deprecation="${build.deprecation}" destdir="${classes-j.dir}"
+-+            optimize="${build.optimize}" srcdir="${temp-src-j.dir}" source="${build.s9api.compiler.source}"
+-+            target="${build.s9api.compiler.target}">
+-+
+-+            <include name="**/s9api/**"/>
+-+            <classpath>
+-+                <path refid="classpath-j"/>
+-+            </classpath>
+-+        </javac>
+-+    </target>
+-+        
+-+    <target name="compile-bn" description="Compile Saxon-B classes for .NET" depends="copysource-development">
+-+        <mkdir dir="${classes-n.dir}"/>
+-+        <javac debug="${build.debug}" debuglevel="${build.debuglevel}" 
+-+            deprecation="${build.deprecation}" destdir="${classes-n.dir}"
+-+            optimize="${build.optimize}" srcdir="${temp-src-nj.dir}" source="${build.compiler.source}"
+-+            target="${build.compiler.target}">
+-+
+-+            <include name="net/**"/>
+-+            <exclude name="**/s9api/**"/>
+-+            <classpath>
+-+                <path refid="classpath-n"/>
+-+            </classpath>
+-+        </javac>
+-+    </target>
+-+    
+-+    <target name="compile-san" description="Compile Saxon-SA classes for .NET" depends="copysource-development">
+-+        <mkdir dir="${classes-n.dir}"/>
+-+        <javac debug="${build.debug}"  debuglevel="${build.debuglevel}" 
+-+            deprecation="${build.deprecation}" destdir="${classes-n.dir}"
+-+            optimize="${build.optimize}" srcdir="${temp-src-nj.dir}" source="${build.compiler.source}"
+-+            target="${build.compiler.target}">
+-+
+-+            <include name="com/saxonica/**"/>
+-+            <exclude name="com/saxonica/validate/JavaVerifier.java"/>
+-+            <classpath>
+-+                <path refid="classpath-n"/>
+-+            </classpath>
+-+        </javac>
+-+    </target>        
+-+
+-+    <target name="jar-bj" description="Create Saxon-B jar files for Java" depends="create-meta-inf, compile-bj">
+-+        <mkdir dir="${product.dir}/bj"/>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9.jar">
+-+            <include name="net/**/*.class"/>
+-+            <exclude name="**/ant/**/*.class"/>
+-+            <exclude name="**/dom/**/*.class"/>
+-+            <exclude name="**/dom4j/**/*.class"/>
+-+            <exclude name="**/javax/**/*.class"/>
+-+            <exclude name="**/jdom/**/*.class"/>
+-+            <exclude name="**/sql/**/*.class"/>
+-+            <exclude name="**/xom/**/*.class"/>
+-+            <exclude name="**/xpath/**/*.class"/>
+-+            <exclude name="**/xqj/**/*.class"/>
+-+            <exclude name="**/s9api/**/*.class"/>
+-+            <include name="META-INF/**"/>
+-+            <manifest>
+-+                <attribute name="Project-Name" value="Saxon-B"/>
+-+                <attribute name="Main-Class" value="net.sf.saxon.Transform"/>
+-+            </manifest>
+-+            <metainf dir="${services.dir}/saxon9/META-INF"/>
+-+            <!--
+-+            <service type="javax.xml.transform.TransformerFactory"
+-+                provider="net.sf.saxon.TransformerFactoryImpl"/>
+-+            -->    
+-+        </jar>
+-+        <!--
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-dom.jar">
+-+            <include name="net/sf/saxon/dom/*.class"/>
+-+        </jar>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-dom4j.jar">
+-+            <include name="net/sf/saxon/dom4j/*.class"/>
+-+        </jar>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-jdom.jar">
+-+            <include name="net/sf/saxon/jdom/*.class"/>
+-+        </jar>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-s9api.jar">
+-+            <include name="net/sf/saxon/s9api/*.class"/>
+-+        </jar>         
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-sql.jar">
+-+            <include name="net/sf/saxon/sql/*.class"/>
+-+        </jar> 
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-xom.jar">
+-+            <include name="net/sf/saxon/xom/*.class"/>
+-+        </jar> 
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-xpath.jar">
+-+            <include name="net/sf/saxon/xpath/*.class"/>
+-+            <metainf dir="${services.dir}/saxon9-xpath/META-INF"/>
+-+            <!==
+-+            <service type="javax.xml.xpath.XPathFactory">
+-+                <provider classname="net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+                <provider classname="http\://java.sun.com/jaxp/xpath/dom:    net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+                <provider classname="http\://saxon.sf.net/jaxp/xpath/om:     net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+                <provider classname="http\://www.xom.nu/jaxp/xpath/xom:      net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+                <provider classname="http\://jdom.org/jaxp/xpath/jdom:       net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+                <provider classname="http\://www.dom4j.org/jaxp/xpath/dom4j: net.sf.saxon.xpath.XPathFactoryImpl"/>
+-+            </service> ==>
+-+        </jar>  
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-xqj.jar">
+-+            <include name="net/sf/saxon/xqj/*.class"/>
+-+            <include name="net/sf/saxon/javax/xml/namespace/*.class"/>
+-+            <include name="net/sf/saxon/javax/xml/xquery/*.class"/>
+-+        </jar>
+-+        -->                 
+-+    </target>
+-+    
+-+    <target name="jar-saj" description="Create Saxon-SA jar files for Java" depends="compile-s9api, jar-bj">
+-+        <mkdir dir="${product.dir}/saj"/>
+-+        <copy todir="${product.dir}/saj">
+-+          <fileset dir="${product.dir}/bj">
+-+            <include name="*.jar"/>
+-+          </fileset>
+-+        </copy>          
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/saj/saxon9sa.jar">
+-+            <include name="net/**/*.class"/>
+-+            <exclude name="**/dom/**/*.class"/>
+-+            <exclude name="**/dom4j/**/*.class"/>
+-+            <exclude name="**/javax/**/*.class"/>
+-+            <exclude name="**/jdom/**/*.class"/>
+-+            <exclude name="**/s9api/**/*.class"/>
+-+            <exclude name="**/sql/**/*.class"/>
+-+            <exclude name="**/xom/**/*.class"/>
+-+            <exclude name="**/xpath/**/*.class"/>
+-+            <exclude name="**/xqj/**/*.class"/>
+-+            <include name="com/saxonica/**/*.class"/>
+-+            <exclude name="com/saxonica/jaxp/*.class"/>
+-+            <exclude name="com.saxonica.CompileQuery.class"/>
+-+            <manifest>
+-+                <attribute name="Project-Name" value="Saxon-SA"/>
+-+            </manifest>
+-+            <metainf dir="${services.dir}/saxon9sa/META-INF"/>
+-+            <!--
+-+            <service type="javax.xml.transform.TransformerFactory"
+-+                provider="com.saxonica.SchemaAwareTransformerFactory"/>
+-+            -->    
+-+        </jar>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/saj/saxon9sa-jaxp.jar">
+-+            <include name="com/saxonica/jaxp/*.class"/>
+-+            <include name="net/sf/saxon/dom/TypeInfoImpl.class"/>
+-+            <metainf dir="${services.dir}/saxon9sa-jaxp/META-INF"/>
+-+            <!--
+-+            <service type="javax.xml.validation.SchemaFactory">
+-+                <provider classname="com.saxonica.jaxp.SchemaFactoryImpl"/>
+-+                <provider classname="http\://www.w3.org/2001/XMLSchema: com.saxonica.jaxp.SchemaFactoryImpl"/>
+-+            </service>
+-+            -->
+-+        </jar>
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/saj/saxon9sa-qc.jar">
+-+            <include name="com/saxonica/codegen/*.class"/>
+-+            <include name="com.saxonica.CompileQuery.class"/>
+-+        </jar>
+-+        <!-- The Saxon-Ant task is delivered with Saxon-B but it won't compile without Saxon-SA present,
+-+             unless modified -->
+-+        <jar basedir="${classes-j.dir}" compress="${build.compress}" jarfile="${product.dir}/bj/saxon9-ant.jar">
+-+            <include name="net/sf/saxon/ant/*.class"/>
+-+        </jar>
+-+    </target>
+-+    
+-+    <target name="jar-bn" description="Create Saxon-B jar files for .NET" depends="compile-bn">
+-+        <mkdir dir="${jar-n.dir}"/>
+-+        <jar basedir="${classes-n.dir}" compress="${build.compress}" jarfile="${jar-n.dir}/saxon9.jar">
+-+            <include name="net/**/*.class"/>
+-+        </jar>
+-+    </target> 
+-+    
+-+    <target name="jar-san" description="Create Saxon-SA jar files for .NET" depends="compile-san">
+-+        <mkdir dir="${jar-n.dir}"/>
+-+        <jar basedir="${classes-n.dir}" compress="${build.compress}" jarfile="${jar-n.dir}/saxon9sa.jar">
+-+            <include name="com/saxonica/**/*.class"/>
+-+        </jar>
+-+    </target>
+-+    
+-+    <target name="dll-n" description="Create DLLs for .NET" depends="jar-bn, jar-san">
+-+        <mkdir dir="${dll-n.dir}"/>
+-+        <copy todir="${dll-n.dir}">
+-+          <fileset dir="${ikvm.dir}/bin">
+-+            <include name="IKVM.GNU.Classpath.dll"/>
+-+            <include name="IKVM.Runtime.dll"/>
+-+          </fileset>
+-+        </copy>
+-+        <copy file="${saxondotnet.snk}" todir="${basedir}"/> 
+-+        <!--
+-+            Invoke IKVMC to cross-compile the JAR files into DLLs
+-+        -->           
+-+        <exec dir="." executable="ikvmc.cmd" >
+-+          <arg line="live"/>  <!-- set to 'debug' for testing, 'live' for final build -->
+-+          <arg line="${basedir}/${jar-n.dir}"/>
+-+          <arg line="${basedir}/${dll-n.dir}"/>
+-+          <arg line="${version}"/>
+-+        </exec>
+-+    </target>
+-+    
+-+    <target name="csharp-n" description="Compile C# source for .NET commands and API library"
+-+        depends="dll-n"> 
+-+
+-+				<mkdir dir="${dll-n.dir}/samples"/>
+-+				<mkdir dir="${dll-n.dir}/tests"/>
+-+				
+-+				<exec dir="." executable="csharp-compile.cmd" >
+-+          <arg line="${basedir}/${temp-src-nc.dir}"/>
+-+          <arg line="${basedir}/${dll-n.dir}"/>
+-+          <arg line="${version}"/>
+-+        </exec>
+-+
+-+        
+-+<!--        <taskdef 
+-+            uri="antlib:org.apache.ant.dotnet">
+-+            <classpath>
+-+              <pathelement location="c:/javalib/ant-dotnet-1.0/ant-dotnet-1.0.jar"/>
+-+            </classpath>
+-+          </taskdef>
+-+    		<dn:csc xmlns:dn="antlib:org.apache.ant.dotnet"
+-+    		          executable="${csharp.compiler}"
+-+    	     				srcdir="${temp-src-nc.dir}/cmd"
+-+    	     				targettype="exe"
+-+    	     				win32icon="c:\MyDotNet\icons\gyfu.ico"
+-+    	     				destdir="${dll-n.dir}">
+-+    	     	<reference file="${dll-n.dir}/IKVM.GNU.Classpath.dll"/>
+-+    	     	<reference file="${dll-n.dir}/IKVM.Runtime.dll"/>
+-+    	     	<reference file="${dll-n.dir}/saxon9.dll"/>
+-+    	     	<reference file="${dll-n.dir}/saxon9sa.dll"/>
+-+    	  </dn:csc>   	
+-+    		<dn:csc xmlns:dn="antlib:org.apache.ant.dotnet"
+-+    		          executable="${csharp.compiler}"
+-+    	     				srcdir="${temp-src-nc.dir}/api"
+-+    	     				targettype="module"
+-+    	     				win32icon="c:\MyDotNet\icons\gyfu.ico"
+-+    	     				destdir="${dll-n.dir}">
+-+    	     	<reference file="${dll-n.dir}/IKVM.GNU.Classpath.dll"/>
+-+    	     	<reference file="${dll-n.dir}/IKVM.Runtime.dll"/>
+-+    	     	<reference file="${dll-n.dir}/saxon9.dll"/>
+-+    	     	<reference file="${dll-n.dir}/saxon9sa.dll"/> 
+-+    	  </dn:csc> 
+-+-->    	    	   	     
+-+    </target>
+-+    
+-+    <target name="basic-userdoc" description="Generate Basic Documentation for release with executable">
+-+	  <mkdir dir="${product.dir}/bj"/>
+-+	  <copy todir="${product.dir}/bj">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <mkdir dir="${product.dir}/saj"/>
+-+      <copy todir="${product.dir}/saj">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <mkdir dir="${product.dir}/bn"/>
+-+      <copy todir="${product.dir}/bn">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <mkdir dir="${product.dir}/san"/>
+-+      <copy todir="${product.dir}/san">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>       		     
+-+    </target>    
+-+    
+-+    <target name="product-bn" description="Assemble product.directory for Saxon-B on .NET"
+-+       										    depends="csharp-n, dll-n, basic-userdoc">
+-+      <mkdir dir="${build-bn.dir}/bin"/> 										    
+-+      <copy todir="${build-bn.dir}/bin">
+-+        <fileset dir="${dll-n.dir}">
+-+     	  	<include name="IKVM.GNU.Classpath.dll"/>
+-+          <include name="IKVM.Runtime.dll"/>
+-+          <include name="saxon9.dll"/>
+-+          <include name="saxon9api.dll"/>
+-+          <include name="saxon9api.netmodule"/>
+-+          <include name="Query.exe"/>
+-+          <include name="Transform.exe"/>
+-+        </fileset>
+-+      </copy>
+-+			<echo file="${build-bn.dir}/bin/install-gac.cmd">
+-+				set NET="%PROGRAMFILES%\Microsoft.NET\SDK\v1.1\Bin"
+-+				%NET%\gacutil /if IKVM.Runtime.dll
+-+				%NET%\gacutil /if IKVM.GNU.Classpath.dll
+-+				%NET%\gacutil /if saxon9.dll 
+-+				%NET%\gacutil /if saxon9api.dll                
+-+      </echo> 
+-+    </target>  
+-+    
+-+    <target name="product-san" description="Assemble product.directory for Saxon-SA on .NET"
+-+       										    depends="csharp-n, dll-n, basic-userdoc">
+-+      <copy todir="${build-san.dir}/bin">
+-+        <fileset dir="${dll-n.dir}">
+-+     	  	<include name="IKVM.GNU.Classpath.dll"/>
+-+          <include name="IKVM.Runtime.dll"/>
+-+          <include name="saxon9.dll"/>
+-+          <include name="saxon9sa.dll"/>
+-+          <include name="saxon9api.dll"/>
+-+          <include name="saxon9api.netmodule"/>
+-+          <include name="Query.exe"/>
+-+          <include name="Transform.exe"/>
+-+          <include name="Validate.exe"/>
+-+        </fileset> 
+-+      </copy> 
+-+      <echo file="${build-san.dir}/bin/install-gac.cmd">
+-+				set NET="%PROGRAMFILES%\Microsoft.NET\SDK\v1.1\Bin"
+-+				%NET%\gacutil /if IKVM.Runtime.dll
+-+				%NET%\gacutil /if IKVM.GNU.Classpath.dll
+-+				%NET%\gacutil /if saxon9.dll 
+-+				%NET%\gacutil /if saxon9sa.dll 
+-+				%NET%\gacutil /if saxon9api.dll             
+-+      </echo>             
+-+    </target>
+-+    
+-+    <target name="samples" description="Assemble Cross-Platform Samples and Use-Cases">
+-+    	<mkdir dir="${build-resources.dir}/samples"/>
+-+      <copy todir="${product.dir}/resources/use-cases">
+-+        <fileset dir="${usercases.dir}"/>
+-+      </copy>
+-+      <copy todir="${product.dir}/resources/samples">
+-+        <fileset dir="${samples.dir}">
+-+          <include name="analysis/timing-profile.xsl"/>
+-+          <include name="data/*.xml"/>
+-+          <include name="data/*.xsd"/>
+-+          <include name="data/*.dtd"/>
+-+          <include name="query/*.xq"/>
+-+          <include name="styles/*.xsl"/>
+-+          <include name="trax/xml/**/*.xml"/>
+-+          <include name="trax/xsl/**/*.xsl"/>
+-+          <include name="trax/xsl/**/preamble.txt"/>
+-+        </fileset>
+-+      </copy>
+-+    </target>
+-+    
+-+    <target name="samples-j" description="Copy and Compile Java Samples"
+-+    				depends="jar-saj">
+-+      <mkdir dir="${product.dir}/resources/samples/java"/>
+-+      <mkdir dir="${product.dir}/resources/samples/java/classes"/>
+-+      <copy todir="${product.dir}/resources/samples/java">
+-+        <fileset dir="${samples.dir}/java">
+-+          <include name="ApplyXPathJAXP.java"/>
+-+          <include name="ExampleContentHandler.java"/>
+-+          <include name="JDOMExample.java"/>
+-+          <include name="PullExamples.java"/>
+-+          <include name="QueryAPIExamples.java"/>
+-+          <include name="QuickValidator.java"/>
+-+          <include name="SaxonServlet.java"/>
+-+          <include name="SaxonSAServlet.java"/>
+-+          <include name="SchemaValidatorExample.java"/>
+-+          <include name="SchemaValidatorHandlerExample.java"/>
+-+          <include name="TraxExamples.java"/>
+-+          <include name="XMarkBenchmark.java"/>
+-+          <include name="XPathExample.java"/>
+-+          <include name="XPathExampleDOM.java"/>
+-+          <include name="XPathExampleSA.java"/>
+-+          <include name="XPathExampleServlet.java"/>
+-+          <include name="XQJExamples.java"/>
+-+        </fileset>
+-+      </copy>
+-+			<javac debug="true" debuglevel="source, lines" 
+-+			      destdir="${product.dir}/resources/samples/java/classes"
+-+            srcdir="${product.dir}/resources/samples/java" 
+-+            source="${build.compiler.source}"
+-+            target="${build.compiler.target}">
+-+        <include name="*.java"/>    
+-+        <classpath>
+-+            <path refid="classpath-samples"/>
+-+        </classpath>
+-+     </javac>            
+-+    </target>
+-+    
+-+    <target name="testdrivers-j" description="Copy Java Test Drivers">
+-+			<mkdir dir="${product.dir}/resources/drivers/java/test"/>
+-+			<copy todir="${product.dir}/resources/drivers/java/test">
+-+			  <fileset dir="${drivers-j.dir}">
+-+			    <include name="XQueryTestSuiteDriver.java"/> 
+-+			    <include name="XsltTestSuiteDriver.java"/> 
+-+			    <include name="CanonicalXML.java"/> 
+-+			    <include name="XQTSModuleURIResolver.java"/> 
+-+			    <include name="XQTSCollectionURIResolver.java"/> 
+-+			    <include name="SchemaTestSuiteDriver.java"/> 
+-+        </fileset>
+-+      </copy>
+-+    </target>           
+-+    
+-+    <target name="samples-n" description="Assemble release samples for .NET"
+-+                  depends="csharp-n">
+-+      <mkdir dir="${build-resources.dir}/samples/cs"/>
+-+      <copy todir="${build-resources.dir}/samples/cs"> 
+-+        <fileset dir="${temp-src-nc.dir}/samples">
+-+          <include name="*.cs"/>
+-+        </fileset>
+-+      </copy>
+-+      <mkdir dir="${build-resources.dir}/samples/cs/bin"/>
+-+      <copy todir="${build-resources.dir}/samples/cs/bin"> 
+-+        <fileset dir="${dll-n.dir}/samples">
+-+          <include name="*.exe"/>
+-+          <include name="*.dll"/>
+-+          <include name="*.pdb"/>
+-+        </fileset>
+-+      </copy>
+-+      <copy todir="${build-resources.dir}/samples/cs/bin"> 
+-+        <fileset dir="${dll-n.dir}/tests">
+-+          <include name="*.exe"/>
+-+          <include name="*.dll"/>
+-+          <include name="*.pdb"/>
+-+        </fileset>
+-+      </copy>      
+-+    </target>               
+-+                  
+-+    <target name="product-javadoc" description="Generate Javadoc.">
+-+        <javadoc bottom="Copyright (C) Michael H. Kay. All rights reserved."
+-+            destdir="${javadoc.dir}" doctitle="saxon9 Javadocs"
+-+            noindex="true" notree="true" access="public"
+-+            maxmemory="512M" source="1.5">
+-+            <packageset dir="${temp-src-j.dir}">
+-+                <include name="net/**"/>
+-+                <include name="com/**"/>
+-+                <exclude name="**/dotnet/**"/>
+-+                <exclude name="**/DotNetVerifier.java"/>
+-+            </packageset>
+-+            <classpath>
+-+                <path refid="classpath-j"/>
+-+            </classpath>
+-+            
+-+            <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
+-+            <link href="http://www.xom.nu/apidocs/"/>
+-+            
+-+        </javadoc>
+-+        <copy file="${userdoc.dir}/fixed/javadoc/stylesheet.css"
+-+              tofile="${javadoc.dir}/stylesheet.css"
+-+              overwrite="true"/>
+-+    </target>
+-+    
+-+    <target name="product-dotnetdoc" description="Copy .NET API documentation">
+-+      <mkdir dir="${build-resources.dir}/doc/dotnetdoc"/>
+-+      <copy todir="${build-resources.dir}/doc/dotnetdoc">
+-+        <fileset dir="${dotnetdoc.dir}"/>
+-+      </copy>
+-+    </target>  
+-+    
+-+    
+-+    <target name="release-userdoc" description="Generate User Documentation">
+-+			<taskdef name="saxon-xslt" 
+-+			         classname="net.sf.saxon.ant.AntTransform" 
+-+			         classpath="c:\saxon-build\9.0.0.1\saj\saxon9sa.jar;c:\saxon-licenses"/>
+-+			<copy todir="${build-resources.dir}/doc">
+-+        <fileset dir="${userdoc.dir}/fixed"/>
+-+      </copy> 
+-+	  <copy todir="${product.dir}/bj">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <copy todir="${product.dir}/saj">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <copy todir="${product.dir}/bn">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+      <copy todir="${product.dir}/san">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="doc/**"/>
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>       
+-+			<saxon-xslt in="${userdoc.dir}/catalog.xml" 
+-+			            style="${userdoc.dir}/render-page2.xsl"
+-+			            schemaAware="true"
+-+			            xmlVersion="1.0"
+-+			            schemaValidation="strict"
+-+			            out="${product.dir}/resources/doc/dummy.html"><!--validation="strict" -->
+-+			  <param name="destination" expression="offline"/>
+-+			</saxon-xslt> 
+-+			<zip zipfile="${build-resources.dir}/source-userdoc.zip">
+-+			  <fileset dir="${userdoc.dir}">
+-+			    <include name="**/*.xml"/>
+-+			    <include name="**/*.xsl"/>
+-+			    <include name="**/*.xsd"/>
+-+			    <include name="**/*.css"/>
+-+			    <include name="fixed/**"/>
+-+			    <include name="welcome/**"/>
+-+			  </fileset>
+-+			</zip>  			     
+-+    </target>
+-+    
+-+    <target name="release-source" description="Generate Zip file containing issued Source Code">
+-+      <mkdir dir="${build-resources.dir}"/>
+-+      <zip zipfile="${build-resources.dir}/source.zip">
+-+        <fileset dir="${source-bj.dir}">
+-+           <include name="net/**/*.java"/>
+-+           <include name="net/**/package.html"/>
+-+        </fileset>
+-+        <fileset dir="${source-bj.dir}">
+-+           <include name="net/sf/saxon/dotnet/*.java"/>
+-+           <include name="net/sf/saxon/dotnet/package.html"/>
+-+        </fileset>        
+-+        <fileset dir="${temp-src-nc.dir}">
+-+           <include name="api/**/*.cs"/>
+-+           <include name="cmd/**/*.cs"/>
+-+        </fileset>   
+-+      </zip>
+-+      <zip zipfile="${build-resources.dir}/sa-source.zip">
+-+        <fileset dir="${source-saj.dir}">
+-+           <include name="com/saxonica/**/*.java"/>
+-+           <include name="com/saxonica/**/package.html"/>
+-+        </fileset>
+-+      </zip>
+-+    </target>
+-+    
+-+    <target name="resources" description="Generate contents of released resources file"
+-+      	depends="release-userdoc, product-javadoc, product-dotnetdoc,
+-+      	         samples, samples-j, testdrivers-j, samples-n, release-source">
+-+      <mkdir dir="${product.dir}/resources/build"/>
+-+      <copy todir="${product.dir}/resources/build">
+-+        <fileset dir="${basedir}">
+-+          <include name="build.xml"/>
+-+          <include name="ikvmc.cmd"/>
+-+          <include name="csharp-compile.cmd"/>
+-+        </fileset>  
+-+      </copy>
+-+      <copy todir="${product.dir}/resources">
+-+        <fileset dir="${userdoc.dir}/welcome">
+-+          <include name="notices/**"/>
+-+        </fileset>
+-+      </copy>
+-+    </target>  
+-+      
+-+    <target name="bj" depends="compile-bj, jar-bj, basic-userdoc"
+-+        description="Generate Saxon-B for the Java platform"/>
+-+
+-+    <target name="saj" depends="bj, jar-saj, basic-userdoc"
+-+        description="Generate Saxon-SA for the Java platform"/>
+-+               
+-+    <target name="n" depends="product-bn, product-san"
+-+    		description="Generate Saxon for the .NET platform"/>    
+-+
+-+    <target name="build" description="Complete Saxon product build"
+-+      	depends="bj, saj, n"/> <!-- add resources -->
+-+      
+-+    <target name="release" description="Create .ZIP files for release" depends="build"
+-+        >  <!--depends="build, resources"-->
+-+      <mkdir dir="${issue.dir}"/> 
+-+      <zip zipfile="${issue.dir}/saxonb${versionh}j.zip">
+-+        <fileset dir="${product.dir}/bj"/>
+-+      </zip>
+-+      <zip zipfile="${issue.dir}/saxonb${versionh}n.zip">
+-+        <fileset dir="${product.dir}/bn"/>
+-+      </zip>
+-+			<zip zipfile="${issue.dir}/saxonsa${versionh}j.zip">
+-+        <fileset dir="${product.dir}/saj"/>
+-+      </zip>                     
+-+      <zip zipfile="${issue.dir}/saxonsa${versionh}n.zip">
+-+        <fileset dir="${product.dir}/san"/>
+-+      </zip>
+-+      <!--
+-+      <zip zipfile="${issue.dir}/saxon-resources${versionh}.zip">
+-+        <fileset dir="${product.dir}/resources"/>
+-+      </zip>
+-+      -->
+-+    </target>
+-+    
+-+    <target name="archive" description="Archive everything needed for backup"> 
+-+      <mkdir dir="${archive.dir}"/>
+-+      <copy todir="${archive.dir}">
+-+       <fileset dir="${issue.dir}"/>
+-+       <fileset dir="${development-j.dir}" includes="sa-source.zip"/>
+-+       <fileset dir="${build-resources.dir}" includes="source.zip"/>
+-+      </copy>
+-+      <zip zipfile="${archive.dir}/saxontests.zip">
+-+        <fileset dir="e:/tests">
+-+          <include name="testsuite/*.*"/>
+-+          <include name="java/**/*.java"/>
+-+          <include name="xqts-current/SaxonDriver/**"/>
+-+          <include name="xqts-extra/**"/>
+-+          <include name="xslts_1_0_4/**/SaxonDriver/**"/>
+-+        </fileset>  
+-+        <fileset dir="e:/tests/java" includes ="**/*.java"/>
+-+      </zip>
+-+      <zip zipfile="${archive.dir}/licensetool.zip">
+-+        <fileset dir="c:/MyJava/licensetool"/>
+-+      </zip>
+-+      <zip zipfile="${archive.dir}/licenses.zip">
+-+        <fileset dir="c:/saxon-licenses"/>
+-+      </zip>
+-+    </target>  
+-+      
+-+       
+-+    
+-+</project>
+diff --git a/stax/README b/stax/README
+deleted file mode 100644
+index 13e69fb..0000000
+--- a/stax/README
++++ /dev/null
+@@ -1 +0,0 @@
+-Library implementing the Streaming API for XML. (CH: Which one, probably the one by Sun???)
+diff --git a/stax/makefile.mk b/stax/makefile.mk
+deleted file mode 100644
+index ff3238b..0000000
+--- a/stax/makefile.mk
++++ /dev/null
+@@ -1,78 +0,0 @@
+-#*************************************************************************
+-#
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-# 
+-# Copyright 2000, 2010 Oracle and/or its affiliates.
+-#
+-# OpenOffice.org - a multi-platform office productivity suite
+-#
+-# This file is part of OpenOffice.org.
+-#
+-# OpenOffice.org is free software: you can redistribute it and/or modify
+-# it under the terms of the GNU Lesser General Public License version 3
+-# only, as published by the Free Software Foundation.
+-#
+-# OpenOffice.org is distributed in the hope that 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 version 3 for more details
+-# (a copy is included in the LICENSE file that accompanied this code).
+-#
+-# You should have received a copy of the GNU Lesser General Public License
+-# version 3 along with OpenOffice.org.  If not, see
+-# <http://www.openoffice.org/license.html>
+-# for a copy of the LGPLv3 License.
+-#
+-#*************************************************************************
+-
+-PRJ=.
+-
+-PRJNAME=stax
+-TARGET=stax
+-USE_JAVAVER=TRUE
+-
+-# --- Settings -----------------------------------------------------
+-
+-.INCLUDE :	settings.mk
+-.INCLUDE : antsettings.mk
+-
+-.IF "$(SOLAR_JAVA)" != ""
+-.IF "$(JAVANUMVER:s/.//)" >= "000100060000" || "$(JDK)"=="gcj"
+-all:
+-    @echo "Your java version already contains StAX"
+-.ENDIF			# "$(JAVANUMVER:s/.//)" >= "000100060000" 
+-.IF "$(SYSTEM_SAXON)" == "YES"
+-all:
+-    @echo "An already available installation of saxon should exist on your system."
+-    @echo "Therefore the files provided here does not need to be built in addition."
+-.ENDIF
+-
+-.IF "$(BUILD_STAX)" != "YES"
+-
+-$(OUT)$/class$/jsr173_1.0_api.jar : $(PRJ)$/download$/jsr173_1.0_api.jar
+-    +$(COPY) $< $@
+-
+-.ELSE 			#  "$(BUILD_STAX)" != "YES"
+-
+-# --- Files --------------------------------------------------------
+-TARFILE_NAME=stax-api-1.0-2-sources
+-TARFILE_MD5=8294d6c42e3553229af9934c5c0ed997
+-TARFILE_ROOTDIR=src
+-
+-BUILD_ACTION=$(JAVAC) javax$/xml$/stream$/*.java && jar -cf jsr173_1.0_api.jar javax$/xml$/stream$/*.class javax$/xml$/stream$/events$/*.class javax$/xml$/stream$/util$/*.class
+-
+-OUT2CLASS=jsr173_1.0_api.jar
+-.ENDIF			#  "$(BUILD_STAX)" != "YES"
+-
+-.ELSE			# $(SOLAR_JAVA)!= ""
+-nojava:
+-    @echo "Not building $(PRJNAME) because Java is disabled"
+-.ENDIF			# $(SOLAR_JAVA)!= ""
+-# --- Targets ------------------------------------------------------
+-
+-.INCLUDE : set_ext.mk
+-.INCLUDE : target.mk
+-.IF "$(SOLAR_JAVA)" != ""
+-.INCLUDE : tg_ext.mk
+-.ENDIF
+-
+diff --git a/stax/prj/build.lst b/stax/prj/build.lst
+deleted file mode 100644
+index cbfc6ea..0000000
+--- a/stax/prj/build.lst
++++ /dev/null
+@@ -1,2 +0,0 @@
+-tx stax : solenv NULL
+-tx stax nmake - all tx_stax NULL
+diff --git a/stax/prj/d.lst b/stax/prj/d.lst
+deleted file mode 100644
+index a4fd204..0000000
+--- a/stax/prj/d.lst
++++ /dev/null
+@@ -1 +0,0 @@
+-..\%__SRC%\class\jsr*.jar %_DEST%\bin
+diff --git a/stax/prj/dmake b/stax/prj/dmake
+deleted file mode 100644
+index e69de29..0000000
+diff --git a/tail_build/prj/build.lst b/tail_build/prj/build.lst
+index c96ae74..0dced2b 100644
+--- a/tail_build/prj/build.lst
++++ b/tail_build/prj/build.lst
+@@ -1,2 +1,2 @@
+-tb      tail_build : AFMS:afms APACHE_COMMONS:apache-commons BSH:beanshell BERKELEYDB:berkeleydb BOOST:boost CAIRO:cairo CPPUNIT:cppunit DESKTOP:codemaker CURL:curl EXPAT:expat FONTCONFIG:fontconfig FREETYPE:freetype GRAPHITE:graphite HSQLDB:hsqldb HUNSPELL:hunspell HYPHEN:hyphen ICU:icu DESKTOP:l10ntools JFREEREPORT:jfreereport JPEG:jpeg LCMS2:lcms2 LIBCDR:libcdr LIBCMIS:libcmis LIBEXTTEXTCAT:libexttextcat LIBXML2:libxml2 LIBXMLSEC:libxmlsec LIBXSLT:libxslt LIBWPG:libwpg LIBWPS:libwps LIBWPD:libwpd LIBVISIO:libvisio LPSOLVE:lpsolve MDDS:mdds MOZ:moz MYTHES:mythes NEON:neon NSS:nss OPENSSL:openssl POSTGRESQL:postgresql PYTHON:python REDLAND:redland SAXON:saxon DESKTOP:setup_native TRANSLATIONS:translations VIGRA:vigra XPDF:xpdf ZLIB:zlib bridges cli_ure comphelper cppu cppuhelper external jurt jvmaccess jvmfwk offapi officecfg DESKTOP:rdbmaker readlicense_oo remotebridges RHINO:rhino ridljar sal salhelper solenv soltools stoc sysui ucbhelper udkapi xmlreader xsltml NULL
++tb      tail_build : AFMS:afms APACHE_COMMONS:apache-commons BSH:beanshell BERKELEYDB:berkeleydb BOOST:boost CAIRO:cairo CPPUNIT:cppunit DESKTOP:codemaker CURL:curl EXPAT:expat FONTCONFIG:fontconfig FREETYPE:freetype GRAPHITE:graphite HSQLDB:hsqldb HUNSPELL:hunspell HYPHEN:hyphen ICU:icu DESKTOP:l10ntools JFREEREPORT:jfreereport JPEG:jpeg LCMS2:lcms2 LIBCDR:libcdr LIBCMIS:libcmis LIBEXTTEXTCAT:libexttextcat LIBXML2:libxml2 LIBXMLSEC:libxmlsec LIBXSLT:libxslt LIBWPG:libwpg LIBWPS:libwps LIBWPD:libwpd LIBVISIO:libvisio LPSOLVE:lpsolve MDDS:mdds MOZ:moz MYTHES:mythes NEON:neon NSS:nss OPENSSL:openssl POSTGRESQL:postgresql PYTHON:python REDLAND:redland DESKTOP:setup_native TRANSLATIONS:translations VIGRA:vigra XPDF:xpdf ZLIB:zlib bridges cli_ure comphelper cppu cppuhelper external jurt jvmaccess jvmfwk offapi officecfg DESKTOP:rdbmaker readlicense_oo remotebridges RHINO:rhino ridljar sal salhelper solenv soltools stoc sysui ucbhelper udkapi xmlreader xsltml NULL
+ tb tail_build\prj nmake - all tb_prj   NULL
+-- 
+1.7.11.7
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 59d9d86..7a900d3 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -34,8 +34,8 @@ Summary:        Free Software Productivity Suite
 Name:           libreoffice
 Epoch:          1
 Version:        %{libo_version}.2
-Release:        1%{?libo_prerelease}%{?dist}
-License:        (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic
+Release:        2%{?libo_prerelease}%{?dist}
+License:        (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0
 Group:          Applications/Productivity
 URL:            http://www.documentfoundation.org/develop
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -52,11 +52,10 @@ Source8:        http://hg.services.openoffice.org/binaries/a7983f859eafb2677d7ff
 Source9:        http://hg.services.openoffice.org/binaries/1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz
 Source10:       http://hg.services.openoffice.org/binaries/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
 Source11:       http://hg.services.openoffice.org/binaries/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
-Source12:       http://hg.services.openoffice.org/binaries/ada24d37d8d638b3d8a9985e80bc2978-source-9.0.0.7-bj.zip
-Source13:       http://hg.services.openoffice.org/binaries/18f577b374d60b3c760a3a3350407632-STLport-4.5.tar.gz
+Source12:       http://hg.services.openoffice.org/binaries/18f577b374d60b3c760a3a3350407632-STLport-4.5.tar.gz
 #Unfortunately later versions of hsqldb changed the file format, so if we use a later version we loose
 #backwards compatability.
-Source14:       http://hg.services.openoffice.org/binaries/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
+Source13:       http://hg.services.openoffice.org/binaries/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
 
 # build tools
 BuildRequires: autoconf
@@ -178,6 +177,10 @@ Patch18: 0004-tweak-old-school-gstreamer-link-line.patch
 Patch19: 0005-Don-t-fail-configure-with-older-gstreamer-plugins-ba.patch
 Patch20: 0006-gstreamer-various-fixes-for-1.0-and-cleanups.patch
 Patch21: 0007-gstreamer-fix-leaking-pads.patch
+Patch22: 0001-convert-java-XSL-transformer-into-extension.patch
+Patch23: 0002-rework-selection-of-transformer-for-an-XSLT-filter.patch
+Patch24: 0003-drop-saxon-based-XSLT-transformer.patch
+Patch25: 0004-remove-all-traces-of-saxon.patch
 
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %define instdir %{_libdir}
@@ -795,6 +798,10 @@ mv -f redhat.soc extras/source/palettes/standard.soc
 %patch19 -p1 -b .Don-t-fail-configure-with-older-gstreamer-plugins-ba.patch
 %patch20 -p1 -b .gstreamer-various-fixes-for-1.0-and-cleanups.patch
 %patch21 -p1 -b .gstreamer-fix-leaking-pads.patch
+%patch22 -p1 -b .convert-java-XSL-transformer-into-extension.patch
+%patch23 -p1 -b .rework-selection-of-transformer-for-an-XSLT-filter.patch
+%patch24 -p1 -b .drop-saxon-based-XSLT-transformer.patch
+%patch25 -p1 -b .remove-all-traces-of-saxon.patch
 
 # TODO: check this
 # these are horribly incomplete--empty translations and copied english
@@ -868,7 +875,6 @@ cp %{SOURCE10} ext_sources
 cp %{SOURCE11} ext_sources
 cp %{SOURCE12} ext_sources
 cp %{SOURCE13} ext_sources
-cp %{SOURCE14} ext_sources
 
 if ! make VERBOSE=true; then
     # TODO Do we still need this? I think parallel build is reliable
@@ -2026,6 +2032,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
 %endif
 
 %changelog
+* Fri Oct 26 2012 David Tardon <dtardon at redhat.com> - 1:3.6.3.2-2
+- Resolves: rhbz#824035 do not bundle saxon
+
 * Wed Oct 24 2012 David Tardon <dtardon at redhat.com> - 1:3.6.3.2-1
 - 3.6.3 rc2
 - drop integrated 0001-Resolves-rhbz-868479-fdo-56281-doubled-in-German-ok-.patch
diff --git a/sources b/sources
index d3e1c76..4384dba 100644
--- a/sources
+++ b/sources
@@ -1,6 +1,5 @@
 798b2ffdc8bcfe7bca2cf92b62caf685  798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
 35c94d2df8893241173de1d16b6034c0  35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
-ada24d37d8d638b3d8a9985e80bc2978  ada24d37d8d638b3d8a9985e80bc2978-source-9.0.0.7-bj.zip
 18f577b374d60b3c760a3a3350407632  18f577b374d60b3c760a3a3350407632-STLport-4.5.tar.gz
 17410483b5b5f267aa18b7e00b65e6e0  17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
 185d60944ea767075d27247c3162b3bc  185d60944ea767075d27247c3162b3bc-unowinreg.dll


More information about the scm-commits mailing list