summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorAndreas Schlüns <as@openoffice.org>2001-07-06 12:22:20 +0000
committerAndreas Schlüns <as@openoffice.org>2001-07-06 12:22:20 +0000
commit71e9c645e001637279acf44163b0b02321ddac9b (patch)
tree3c3104696ba582b3a74fa4418044d65693ee3f0b /framework
parenta5cbbea42cd9489acb3ffed8d5747efbfd043614 (diff)
#85437# enable old filter names
Diffstat (limited to 'framework')
-rw-r--r--framework/inc/classes/filtercache.hxx8
-rw-r--r--framework/inc/classes/filtercachedata.hxx34
-rw-r--r--framework/test/typecfg/xml2xcd.cxx563
3 files changed, 467 insertions, 138 deletions
diff --git a/framework/inc/classes/filtercache.hxx b/framework/inc/classes/filtercache.hxx
index d365b3d5c190..8ad5fc234c48 100644
--- a/framework/inc/classes/filtercache.hxx
+++ b/framework/inc/classes/filtercache.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: filtercache.hxx,v $
*
- * $Revision: 1.21 $
+ * $Revision: 1.22 $
*
- * last change: $Author: as $ $Date: 2001-07-02 13:37:29 $
+ * last change: $Author: as $ $Date: 2001-07-06 13:21:46 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -175,7 +175,8 @@ class FilterCache : private ThreadHelpBase
// constructor / destructor
//---------------------------------------------------------------------------------------------------------
- FilterCache( sal_Int32 nVersion = DEFAULT_FILTERCACHE_VERSION );
+ FilterCache( sal_Int32 nVersion = DEFAULT_FILTERCACHE_VERSION,
+ sal_Int16 nMode = DEFAULT_FILTERCACHE_MODE );
/*-****************************************************************************************************//**
@short standard destructor to delete instance
@@ -493,6 +494,7 @@ class FilterCache : private ThreadHelpBase
static sal_Int32 m_nRefCount ;
static DataContainer* m_pData ;
static sal_Int32 m_nVersion ;
+ static sal_Int16 m_nMode ;
}; // class FilterCache
diff --git a/framework/inc/classes/filtercachedata.hxx b/framework/inc/classes/filtercachedata.hxx
index d6beb601e578..c398330ebe3c 100644
--- a/framework/inc/classes/filtercachedata.hxx
+++ b/framework/inc/classes/filtercachedata.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: filtercachedata.hxx,v $
*
- * $Revision: 1.6 $
+ * $Revision: 1.7 $
*
- * last change: $Author: as $ $Date: 2001-07-02 13:37:55 $
+ * last change: $Author: as $ $Date: 2001-07-06 13:21:50 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -144,7 +144,8 @@ namespace framework{
#define PROPERTY_SEPERATOR sal_Unicode(',') /// seperator for own formated property strings of types and filters
#define LIST_SEPERATOR sal_Unicode(';') /// seperator for own formated lists as part of our own formated type- or filter-string
#define LOCALE_FALLBACK DECLARE_ASCII("en-US" ) /// fallback, if configuration can't give us current set locale ...
-#define DEFAULT_FILTERCACHE_VERSION 5 /// these implmentation of FilterCache support different version of TypeDetection.xml! This define the current set default one.
+#define DEFAULT_FILTERCACHE_VERSION 6 /// these implmentation of FilterCache support different version of TypeDetection.xml! This define the current set default one.
+#define DEFAULT_FILTERCACHE_MODE CONFIG_MODE_DELAYED_UPDATE /// ConfigItems could run in different modes: supported values are ... { CONFIG_MODE_IMMEDIATE_UPDATE, CONFIG_MODE_DELAYED_UPDATE, CONFIG_MODE_ALL_LOCALES }
//*****************************************************************************************************************
// We know some default values ...
@@ -165,6 +166,12 @@ namespace framework{
#define SUBLIST_CONTENTHANDLERS DECLARE_ASCII("ContentHandlers" )
#define SUBLIST_DEFAULTS DECLARE_ASCII("Defaults" )
+#define TEMPLATE_TYPE DECLARE_ASCII("Type" )
+#define TEMPLATE_FILTER DECLARE_ASCII("Filter" )
+#define TEMPLATE_DETECTSERVICE DECLARE_ASCII("DetectService" )
+#define TEMPLATE_FRAMELOADER DECLARE_ASCII("FrameLoader" )
+#define TEMPLATE_CONTENTHANDLER DECLARE_ASCII("ContentHandler" )
+
//*****************************************************************************************************************
// These defines declare all supported names of configuration key names.
// They are not sorted and could be shared by different base configuration items.
@@ -235,11 +242,13 @@ namespace framework{
#define SUBKEYCOUNT_TYPE_VERSION_3 2
#define SUBKEYCOUNT_TYPE_VERSION_4 SUBKEYCOUNT_TYPE_VERSION_3
#define SUBKEYCOUNT_TYPE_VERSION_5 SUBKEYCOUNT_TYPE_VERSION_3
+#define SUBKEYCOUNT_TYPE_VERSION_6 SUBKEYCOUNT_TYPE_VERSION_3
#define SUBKEYCOUNT_FILTER_VERSION_1 9
#define SUBKEYCOUNT_FILTER_VERSION_2 10
#define SUBKEYCOUNT_FILTER_VERSION_3 3
#define SUBKEYCOUNT_FILTER_VERSION_4 SUBKEYCOUNT_FILTER_VERSION_3
#define SUBKEYCOUNT_FILTER_VERSION_5 SUBKEYCOUNT_FILTER_VERSION_3
+#define SUBKEYCOUNT_FILTER_VERSION_6 SUBKEYCOUNT_FILTER_VERSION_3
#define SUBKEYCOUNT_DETECTOR 1
#define SUBKEYCOUNT_LOADER 2
#define SUBKEYCOUNT_CONTENTHANDLER 1
@@ -830,6 +839,16 @@ class DataContainer
// After successfuly calling of read(), we can use filled container directly or merge it with an existing one.
// After successfuly calling of write() all values of given data container are flushed to our configuration.
//*****************************************************************************************************************
+
+enum ETemplateType
+{
+ E_TEMPLATE_TYPE ,
+ E_TEMPLATE_FILTER ,
+ E_TEMPLATE_DETECTSERVICE ,
+ E_TEMPLATE_FRAMELOADER ,
+ E_TEMPLATE_CONTENTHANDLER
+};
+
#ifdef ENABLE_TIMEMEASURE
//_________________________________________________________________________________________________________________
class FilterCFGAccess : private DBGTimeMeasureBase // We need some informations about calling of baseclass "ConfigItem"! :-)
@@ -841,12 +860,15 @@ class FilterCFGAccess : public ::utl::ConfigItem
{
public:
FilterCFGAccess ( const ::rtl::OUString& sPath ,
- sal_Int32 nVersion = DEFAULT_FILTERCACHE_VERSION ); // open configuration
+ sal_Int32 nVersion = DEFAULT_FILTERCACHE_VERSION ,
+ sal_Int16 nMode = DEFAULT_FILTERCACHE_MODE ); // open configuration
virtual ~FilterCFGAccess( );
void read ( DataContainer& rData ); // read values from configuration into given struct
void write ( DataContainer& rData ); // write values from given struct to configuration
- static ::rtl::OUString encodeFilterName( const ::rtl::OUString& sName ); // encode "/" of filter names ... configuration couldn't handle it otherwise
- static ::rtl::OUString decodeFilterName( const ::rtl::OUString& sName ); // decode "/" of filter names ...
+ static ::rtl::OUString encodeSetName ( const ::rtl::OUString& sName ,
+ ETemplateType eType ); // <name> => <entry>["<name>"]
+ static ::rtl::OUString decodeSetName ( const ::rtl::OUString& sName ,
+ ETemplateType eType ); // <entry>["<name>"] => <name>
static ::rtl::OUString encodeTypeData ( const FileType& aType ); // build own formated string of type properties
static void decodeTypeData ( const ::rtl::OUString& sData ,
FileType& aType );
diff --git a/framework/test/typecfg/xml2xcd.cxx b/framework/test/typecfg/xml2xcd.cxx
index 1f3fd4b5dea3..2238ca9890c2 100644
--- a/framework/test/typecfg/xml2xcd.cxx
+++ b/framework/test/typecfg/xml2xcd.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xml2xcd.cxx,v $
*
- * $Revision: 1.5 $
+ * $Revision: 1.6 $
*
- * last change: $Author: as $ $Date: 2001-07-02 13:40:14 $
+ * last change: $Author: as $ $Date: 2001-07-06 13:22:20 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -108,6 +108,10 @@
#include <comphelper/processfactory.hxx>
#endif
+#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_
+#include <unotools/processfactory.hxx>
+#endif
+
#ifndef _VOS_PROCESS_HXX_
#include <vos/process.hxx>
#endif
@@ -150,13 +154,12 @@ using namespace ::framework ;
- use own formated string for all non localized values
- seperate "Installed" flag for filters
4) set right values for "Order" property of filters
-
- draft) i ) - support "HANDLER" => #ifdef DRAFT_I
- ii) - recover old filter names => #ifdef DRAFT_II
+ 5) support for ContentHandler
+ draft 6) reactivate old filter names
+ ??? draft 7) split xml into standard/optional => use DRAFT_SPLIT_VERSION till this version is well known!
*/
+#define DRAFT_SPLIT_VERSION 7
-#define ARGUMENT_FILENAME_STANDARD DECLARE_ASCII("-fis=") // argument for file name of standard filters <filename in system notation>
-#define ARGUMENT_FILENAME_ADDITIONAL DECLARE_ASCII("-fia=") // argument for file name of additional filters <filename in system notation>
#define ARGUMENT_PACKAGE_STANDARD DECLARE_ASCII("-pas=") // argument for package name of standard filters
#define ARGUMENT_PACKAGE_ADDITIONAL DECLARE_ASCII("-paa=") // argument for package name of additional filters
#define ARGUMENT_WRITEABLE DECLARE_ASCII("-wri=") // argument for "writeable" [true|false]
@@ -169,12 +172,16 @@ using namespace ::framework ;
#define WRITEABLE_ON DECLARE_ASCII("true" )
#define WRITEABLE_OFF DECLARE_ASCII("false")
-#define MINARGUMENTCOUNT 7 // no optional arguments allowed yet!
+#define MINARGUMENTCOUNT 5 // no optional arguments allowed yet!
#define LISTFILE_STANDARDTYPES "typelist_standard.txt"
#define LISTFILE_ADDITIONALTYPES "typelist_additional.txt"
#define LISTFILE_STANDARDFILTER "filterlist_standard.txt"
#define LISTFILE_ADDITIONALFILTER "filterlist_additional.txt"
+#define SCPFILE_STANDARD "scp_standard.txt"
+#define SCPFILE_ADDITIONAL "scp_additional.txt"
+
+#define CFG_PATH_SEPERATOR DECLARE_ASCII("/")
//_________________________________________________________________________________________________________________
// declarations
@@ -186,12 +193,14 @@ struct AppMember
FilterCache* pFilterCache ; // pointer to configuration
StringHash aOldFilterNamesHash ; // converter tabel to restaurate old filter names
EFilterPackage ePackage ; // specify which package should be used => specify using of file name and buffer too!
- ::rtl::OUString sFileNameStandard ; // file name of our standard filter cfg
- ::rtl::OUString sFileNameAdditional ; // file name of our additional filter cfg
+// ::rtl::OUString sFileNameStandard ; // file name of our standard filter cfg
+// ::rtl::OUString sFileNameAdditional ; // file name of our additional filter cfg
::rtl::OUString sPackageStandard ; // package name of our standard filter cfg
::rtl::OUString sPackageAdditional ; // package name of our additional filter cfg
::rtl::OUStringBuffer sBufferStandard ; // buffer of our standard filter cfg
::rtl::OUStringBuffer sBufferAdditional ; // buffer of our standard filter cfg
+ ::rtl::OUStringBuffer sNew2OldSCPStandard ; // setup script to convert new to old filternames (standard filter)
+ ::rtl::OUStringBuffer sNew2OldSCPAdditional ; // setup script to convert new to old filternames (additional filter)
::rtl::OUStringBuffer sStandardFilterList ;
::rtl::OUStringBuffer sAdditionalFilterList ;
::rtl::OUStringBuffer sStandardTypeList ;
@@ -266,10 +275,13 @@ class XCDGenerator : public Application
const ::rtl::OUString& sFilterName ,
EFilterPackage& ePackage ,
sal_Int32& nOrder ); // classify filter as STANDARD or ADDITIONAL filter, set order of standard filter too
- static ::rtl::OUString impl_filterSpecialSigns ( const ::rtl::OUString& sValue ); // encode strings for xml
+ static ::rtl::OUString impl_encodeSpecialSigns ( const ::rtl::OUString& sValue ); // encode strings for xml
static sal_Unicode impl_defineSeperator ( const ::framework::StringList& lList ); // search seperator for lists
static void impl_initFilterHashNew2Old ( StringHash& aHash ); // initialize converter table to restaurate old filter names
static void impl_orderAlphabetical ( css::uno::Sequence< ::rtl::OUString >& lList ); // sort stringlist of internal type-, filter- ... names in alphabetical order to generate xcd files everytime in the same way
+ static sal_Bool impl_isUsAsciiAlphaDigit ( sal_Unicode c ,
+ sal_Bool bDigitAllowed = sal_True );
+ static ::rtl::OUString impl_encodeSetName ( const ::rtl::OUString& rSource );
//*************************************************************************************************************
private:
@@ -287,18 +299,21 @@ XCDGenerator gGenerator;
void XCDGenerator::Main()
{
// Must be :-)
- impl_printCopyright();
+// impl_printCopyright();
// Init global servicemanager and set it.
// It's neccessary for other services ... e.g. configuration.
ServiceManager aManager;
::comphelper::setProcessServiceFactory( aManager.getGlobalUNOServiceManager() );
+ ::utl::setProcessServiceFactory ( aManager.getGlobalUNOServiceManager() );
+
+ ::rtl::OUString _s = impl_encodeSetName( DECLARE_ASCII("Q&A") );
// Get optional commands from command line.
impl_parseCommandLine( m_aData );
// initialize converter table to match new to old filter names!
- if( m_aData.nVersionOutput >= 3 )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
XCDGenerator::impl_initFilterHashNew2Old( m_aData.aOldFilterNamesHash );
}
@@ -307,7 +322,7 @@ void XCDGenerator::Main()
// Attention: Please use it for a full fat office installation only!!
// We need an installation with ALL filters.
// Member m_pData is used in some impl-methods directly ...
- m_aData.pFilterCache = new FilterCache( m_aData.nVersionInput );
+ m_aData.pFilterCache = new FilterCache( m_aData.nVersionInput, CONFIG_MODE_ALL_LOCALES );
// Get some statistic informations of current filled filter cache ... (e.g. count of current activae filters)
// because we need it to check if all filters are converted and written to disk.
@@ -399,7 +414,7 @@ void XCDGenerator::impl_parseCommandLine( AppMember& rMember )
while( nArgument<nCount )
{
aInfo.getCommandArg( nArgument, sArgument );
-
+/*OBSOLETE
//_____________________________________________________________________________________________________
// look for "-fis=..."
if( sArgument.compareTo( ARGUMENT_FILENAME_STANDARD, ARGUMENTLENGTH ) == ARGUMENTFOUND )
@@ -416,6 +431,7 @@ void XCDGenerator::impl_parseCommandLine( AppMember& rMember )
++nMinCount;
}
else
+*/
//_____________________________________________________________________________________________________
// look for "-pas=..."
if( sArgument.compareTo( ARGUMENT_PACKAGE_STANDARD, ARGUMENTLENGTH ) == ARGUMENTFOUND )
@@ -501,7 +517,7 @@ void XCDGenerator::impl_generateXCD()
m_aData.sBufferStandard.appendAscii ( "\" cfg:package=\"org.openoffice.Office\" xml:lang=\"en-US\" xmlns:schema=\"http://openoffice.org/2000/registry/schema/description\" xmlns:default=\"http://openoffice.org/2000/registry/schema/default\" xmlns:cfg=\"http://openoffice.org/2000/registry/instance\">\n" );
m_aData.sBufferStandard.appendAscii ( "\t<schema:templates>\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii ( "\n<!-- PLEASE DON'T CHANGE TEMPLATES OR FILE FORMAT BY HAND! USE \"XML2XCD.EXE\" TO DO THAT. THANKS. -->\n\n" );
m_aData.sBufferAdditional.appendAscii ( "<!DOCTYPE schema:component SYSTEM \"../../../../schema/schema.description.dtd\">\n" );
@@ -525,7 +541,8 @@ void XCDGenerator::impl_generateXCD()
m_aData.sBufferStandard.appendAscii ( "\t</schema:templates>\n" );
m_aData.sBufferStandard.appendAscii ( "<schema:schema cfg:localized=\"false\">\n" );
- if( m_aData.nVersionOutput >= 4 )
+
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:schema cfg:localized=\"false\">\n" );
}
@@ -542,20 +559,31 @@ void XCDGenerator::impl_generateXCD()
m_aData.sBufferStandard.appendAscii ( "\t</schema:schema>\n" );
m_aData.sBufferStandard.appendAscii ( "</schema:component>\n" );
- if( m_aData.nVersionOutput >= 4 )
+
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii ( "\t</schema:schema>\n" );
m_aData.sBufferAdditional.appendAscii ( "</schema:component>\n" );
}
- WRITE_LOGFILE( U2B(m_aData.sFileNameStandard ), U2B(m_aData.sBufferStandard.makeStringAndClear() ))
- WRITE_LOGFILE( U2B(m_aData.sFileNameAdditional), U2B(m_aData.sBufferAdditional.makeStringAndClear() ))
+ ::rtl::OUString sFileName = m_aData.sPackageStandard ;
+ sFileName += DECLARE_ASCII(".xcd") ;
+
+ WRITE_LOGFILE( U2B( sFileName ) , U2B(m_aData.sBufferStandard.makeStringAndClear() ))
+ WRITE_LOGFILE( LISTFILE_STANDARDFILTER , U2B(m_aData.sStandardFilterList.makeStringAndClear() ))
+ WRITE_LOGFILE( LISTFILE_STANDARDTYPES , U2B(m_aData.sStandardTypeList.makeStringAndClear() ))
+ WRITE_LOGFILE( SCPFILE_STANDARD , U2B(m_aData.sNew2OldSCPStandard.makeStringAndClear() ))
- WRITE_LOGFILE( LISTFILE_STANDARDFILTER , U2B(m_aData.sStandardFilterList.makeStringAndClear() ))
- WRITE_LOGFILE( LISTFILE_ADDITIONALFILTER , U2B(m_aData.sAdditionalFilterList.makeStringAndClear() ))
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
+ {
+ sFileName = m_aData.sPackageAdditional ;
+ sFileName += DECLARE_ASCII(".xcd") ;
- WRITE_LOGFILE( LISTFILE_STANDARDTYPES , U2B(m_aData.sStandardTypeList.makeStringAndClear() ))
- WRITE_LOGFILE( LISTFILE_ADDITIONALTYPES , U2B(m_aData.sAdditionalTypeList.makeStringAndClear() ))
+ WRITE_LOGFILE( U2B(sFileName) , U2B(m_aData.sBufferAdditional.makeStringAndClear() ))
+ WRITE_LOGFILE( LISTFILE_ADDITIONALFILTER, U2B(m_aData.sAdditionalFilterList.makeStringAndClear() ))
+ WRITE_LOGFILE( LISTFILE_ADDITIONALTYPES , U2B(m_aData.sAdditionalTypeList.makeStringAndClear() ))
+ WRITE_LOGFILE( SCPFILE_ADDITIONAL , U2B(m_aData.sNew2OldSCPAdditional.makeStringAndClear() ))
+ }
}
//*****************************************************************************************************************
@@ -612,7 +640,7 @@ void XCDGenerator::impl_generateCopyright()
m_aData.sBufferStandard.appendAscii( " Contributor(s): _______________________________________\n" );
m_aData.sBufferStandard.appendAscii( "-->\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" );
m_aData.sBufferAdditional.appendAscii( "<!-- The Contents of this file are made available subject to the terms of\n" );
@@ -814,17 +842,17 @@ void XCDGenerator::impl_generateFilterTemplate()
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<schema:type-info>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:value-names>\n" );
- impl_generateFilterFlagTemplate( FILTERFLAGNAME_IMPORT , FILTERFLAG_IMPORT );
- impl_generateFilterFlagTemplate( FILTERFLAGNAME_EXPORT , FILTERFLAG_EXPORT );
+ impl_generateFilterFlagTemplate( FILTERFLAGNAME_IMPORT , FILTERFLAG_IMPORT , "mark filter for import" );
+ impl_generateFilterFlagTemplate( FILTERFLAGNAME_EXPORT , FILTERFLAG_EXPORT , "mark filter for export" );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_TEMPLATE , FILTERFLAG_TEMPLATE );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_INTERNAL , FILTERFLAG_INTERNAL );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_TEMPLATEPATH , FILTERFLAG_TEMPLATEPATH );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_OWN , FILTERFLAG_OWN );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_ALIEN , FILTERFLAG_ALIEN );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_USESOPTIONS , FILTERFLAG_USESOPTIONS );
- impl_generateFilterFlagTemplate( FILTERFLAGNAME_DEFAULT , FILTERFLAG_DEFAULT );
- impl_generateFilterFlagTemplate( FILTERFLAGNAME_NOTINFILEDIALOG , FILTERFLAG_NOTINFILEDIALOG );
- impl_generateFilterFlagTemplate( FILTERFLAGNAME_NOTINCHOOSER , FILTERFLAG_NOTINCHOOSER );
+ impl_generateFilterFlagTemplate( FILTERFLAGNAME_DEFAULT , FILTERFLAG_DEFAULT , "most important filter, if more then ones available" );
+ impl_generateFilterFlagTemplate( FILTERFLAGNAME_NOTINFILEDIALOG , FILTERFLAG_NOTINFILEDIALOG, "don't show it in file dialogs!" );
+ impl_generateFilterFlagTemplate( FILTERFLAGNAME_NOTINCHOOSER , FILTERFLAG_NOTINCHOOSER , "don't show it in chooser!" );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_ASYNCHRON , FILTERFLAG_ASYNCHRON );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_NOTINSTALLED , FILTERFLAG_NOTINSTALLED , "set, if the filter is not installed, but available on CD" );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_CONSULTSERVICE , FILTERFLAG_CONSULTSERVICE , "set, if the filter is not installed and not available an CD" );
@@ -951,6 +979,19 @@ void XCDGenerator::impl_generateLoaderTemplate()
}
//*****************************************************************************************************************
+void XCDGenerator::impl_generateContentHandlerTemplate()
+{
+ m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"ContentHandler\">\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Types\" cfg:type=\"string\" cfg:derivedBy=\"list\" cfg:writable=\"" );
+ m_aData.sBufferStandard.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t\t\t<schema:documentation>\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:description>List of types which could be handled by this service.</schema:description>\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
+ m_aData.sBufferStandard.appendAscii( "\t\t</schema:group>\n" );
+}
+
+//*****************************************************************************************************************
void XCDGenerator::impl_generateTypeSet()
{
if( m_aData.pFilterCache->hasTypes() == sal_False )
@@ -958,7 +999,7 @@ void XCDGenerator::impl_generateTypeSet()
// generate empty set!
m_aData.sBufferStandard.appendAscii ( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\"/>\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\" cfg:component=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageStandard );
@@ -971,19 +1012,33 @@ void XCDGenerator::impl_generateTypeSet()
// open set
m_aData.sBufferStandard.appendAscii ( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\">\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\" cfg:component=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageStandard );
m_aData.sBufferAdditional.appendAscii( "\">\n" );
}
- css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllTypeNames();
- sal_Int32 nCount = lNames.getLength() ;
+ css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllTypeNames();
+ css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
+ sal_Int32 nCount = lNames.getLength() ;
+ sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
- for( sal_Int32 nItem=0; nItem<nCount; ++nItem )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ ::rtl::OUString sName ;
+ ::rtl::OUString sEncName;
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ sName = lNames[nItem] ;
+ //sEncName = impl_encodeSpecialSigns( sName );
+ lEncNames[nItem] = impl_encodeSetName ( sName );
+ }
+ }
+
+ for( nItem=0; nItem<nCount; ++nItem )
{
::rtl::OUString sName = lNames[nItem] ;
FileType aItem = m_aData.pFilterCache->getType( sName );
@@ -1010,50 +1065,70 @@ void XCDGenerator::impl_generateTypeSet()
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
- else if( m_aData.nVersionOutput>=3 )
+ else if( m_aData.nVersionOutput >= 3 )
{
- ::rtl::OUStringBuffer* pBuffer;
+ ::rtl::OUString sPath = DECLARE_ASCII("org.openoffice.Office.");
+ ::rtl::OUStringBuffer* pXCDBuffer = &(m_aData.sBufferStandard );
+ ::rtl::OUStringBuffer* pSCPBuffer = &(m_aData.sNew2OldSCPStandard );
+ ::rtl::OUStringBuffer* pListBuffer = &(m_aData.sStandardTypeList );
- if( m_aData.nVersionOutput == 3 )
- {
- pBuffer = &(m_aData.sBufferStandard);
- }
- if( m_aData.nVersionOutput == 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
XCDGenerator::impl_classifyType( m_aData, sName, ePackage );
switch( ePackage )
{
- case E_STANDARD : {
- pBuffer = &(m_aData.sBufferStandard);
- m_aData.sStandardTypeList.append ( sName );
- m_aData.sStandardTypeList.appendAscii( "\n" );
- }
- break;
- case E_ADDITIONAL : {
- pBuffer = &(m_aData.sBufferAdditional);
- m_aData.sAdditionalTypeList.append ( sName );
- m_aData.sAdditionalTypeList.appendAscii( "\n" );
- }
- break;
+ case E_ADDITIONAL : {
+ sPath += m_aData.sPackageAdditional ;
+ pXCDBuffer = &(m_aData.sBufferAdditional );
+ pSCPBuffer = &(m_aData.sNew2OldSCPAdditional);
+ pListBuffer = &(m_aData.sAdditionalTypeList );
+ }
}
}
+ else
+ {
+ sPath += m_aData.sPackageStandard;
+ }
+
+ sPath += CFG_PATH_SEPERATOR ;
+ sPath += DECLARE_ASCII( "Types" );
+ sPath += CFG_PATH_SEPERATOR ;
+
+ pListBuffer->append ( sName );
+ pListBuffer->appendAscii( "\n" );
+
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ pSCPBuffer->appendAscii( "\"" );
+ pSCPBuffer->append ( sPath );
+ pSCPBuffer->append ( lNames[nItem] );
+ pSCPBuffer->appendAscii( "\"\t\"" );
+ pSCPBuffer->append ( sPath );
+ pSCPBuffer->appendAscii( "Type[\"" );
+ pSCPBuffer->append ( lNames[nItem] );
+ pSCPBuffer->appendAscii( "\"]\"\n" );
+
+ sName = lEncNames[nItem];
+ aItem.sName = sName;
+ }
+
// open set entry by using name
- pBuffer->appendAscii( "\t\t<default:group cfg:name=\"" );
- pBuffer->append ( sName );
- pBuffer->appendAscii( "\">\n" );
+ pXCDBuffer->appendAscii( "\t\t<default:group cfg:name=\"" );
+ pXCDBuffer->append ( sName );
+ pXCDBuffer->appendAscii( "\">\n" );
// write properties
- impl_generateUINamesProperty( *pBuffer, SUBKEY_UINAME, aItem.lUINames );
- impl_generateStringProperty ( *pBuffer, SUBKEY_DATA , FilterCFGAccess::encodeTypeData( aItem ) );
+ impl_generateUINamesProperty( *pXCDBuffer, SUBKEY_UINAME, aItem.lUINames );
+ impl_generateStringProperty ( *pXCDBuffer, SUBKEY_DATA , FilterCFGAccess::encodeTypeData( aItem ) );
// close set node
- pBuffer->appendAscii( "\t\t</default:group>\n" );
+ pXCDBuffer->appendAscii( "\t\t</default:group>\n" );
}
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t</schema:set>\n" );
}
@@ -1067,7 +1142,7 @@ void XCDGenerator::impl_generateFilterSet()
{
// write empty filter set.
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\"/>\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\" cfg:component=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageStandard );
@@ -1078,23 +1153,40 @@ void XCDGenerator::impl_generateFilterSet()
{
// open set
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\">\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\" cfg:component=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageStandard );
m_aData.sBufferAdditional.appendAscii( "\">\n" );
}
- css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllFilterNames();
- sal_Int32 nCount = lNames.getLength() ;
+ css::uno::Sequence< ::rtl::OUString > lNewNames = m_aData.pFilterCache->getAllFilterNames();
+ css::uno::Sequence< ::rtl::OUString > lOldNames ( lNewNames ) ;
+ css::uno::Sequence< ::rtl::OUString > lEncNames ( lNewNames ) ;
+ sal_Int32 nCount = lNewNames.getLength() ;
+ sal_Int32 nItem = 0 ;
- XCDGenerator::impl_orderAlphabetical( lNames );
+ XCDGenerator::impl_orderAlphabetical( lNewNames );
- for( sal_Int32 nItem=0; nItem<nCount; ++nItem )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
- ::rtl::OUString sName = lNames[nItem] ;
- Filter aItem = m_aData.pFilterCache->getFilter( lNames[nItem] );
- EFilterPackage ePackage ;
+ ::rtl::OUString sNewName;
+ ::rtl::OUString sOldName;
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ sNewName = lNewNames[nItem] ;
+ sOldName = impl_getOldFilterName ( sNewName );
+ lOldNames[nItem] = sOldName ;
+ //sOldName = impl_encodeSpecialSigns( sOldName );
+ lEncNames[nItem] = impl_encodeSetName ( sOldName );
+ }
+ }
+
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ ::rtl::OUString sName = lNewNames[nItem] ;
+ Filter aItem = m_aData.pFilterCache->getFilter( lNewNames[nItem] ) ;
+ EFilterPackage ePackage ;
++m_aData.nWrittenFilters;
@@ -1125,65 +1217,72 @@ void XCDGenerator::impl_generateFilterSet()
}
else if( m_aData.nVersionOutput>=3 )
{
- ::rtl::OUStringBuffer* pBuffer;
+ ::rtl::OUString sPath = DECLARE_ASCII("org.openoffice.Office.");
+ ::rtl::OUStringBuffer* pXCDBuffer = &(m_aData.sBufferStandard );
+ ::rtl::OUStringBuffer* pSCPBuffer = &(m_aData.sNew2OldSCPStandard );
+ ::rtl::OUStringBuffer* pListBuffer = &(m_aData.sStandardFilterList );
- if( m_aData.nVersionOutput == 3 )
- {
- pBuffer = &(m_aData.sBufferStandard);
- }
- if( m_aData.nVersionOutput == 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
XCDGenerator::impl_classifyFilter( m_aData, sName, ePackage, aItem.nOrder );
switch( ePackage )
{
- case E_STANDARD : {
- pBuffer = &(m_aData.sBufferStandard);
- m_aData.sStandardFilterList.append ( sName );
- m_aData.sStandardFilterList.appendAscii ( "\n" );
- }
- break;
- case E_ADDITIONAL : {
- pBuffer = &(m_aData.sBufferAdditional);
- m_aData.sAdditionalFilterList.append ( sName );
- m_aData.sAdditionalFilterList.appendAscii( "\n" );
- }
- break;
+ case E_ADDITIONAL : {
+ sPath += m_aData.sPackageAdditional ;
+ pXCDBuffer = &(m_aData.sBufferAdditional );
+ pSCPBuffer = &(m_aData.sNew2OldSCPAdditional);
+ pListBuffer = &(m_aData.sAdditionalFilterList);
+ }
}
}
+ else
+ {
+ sPath += m_aData.sPackageStandard;
+ }
- /*
- ::rtl::OUString sNewName;
- ::rtl::OUString sOldName;
+ sPath += CFG_PATH_SEPERATOR ;
+ sPath += DECLARE_ASCII( "Filters" );
+ sPath += CFG_PATH_SEPERATOR ;
- sNewName = sName;
- sOldName = impl_getOldFilterName ( sNewName );
- sOldName = impl_filterSpecialSigns( sOldName );
+ pListBuffer->append ( sName );
+ pListBuffer->appendAscii( "\n" );
- Filter aItem = m_aData.pFilterCache->getFilter( sNewName );
- //m_aData.sBufferStandard.append ( FilterCFGAccess::encodeFilterName( sOldName ) );
- */
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ pSCPBuffer->appendAscii( "\"" );
+ pSCPBuffer->append ( sPath );
+ pSCPBuffer->append ( lNewNames[nItem] );
+ pSCPBuffer->appendAscii( "\"\t\"" );
+ pSCPBuffer->append ( sPath );
+ pSCPBuffer->appendAscii( "Filter[\"" );
+ pSCPBuffer->append ( lOldNames[nItem] );
+ pSCPBuffer->appendAscii( "\"]\"\n" );
+
+ sName = lEncNames[nItem];
+ aItem.sName = sName;
+ }
// open set node by using name
- pBuffer->appendAscii( "\t\t<default:group cfg:name=\"" );
- pBuffer->append ( sName );
- pBuffer->appendAscii( "\">\n" );
+ pXCDBuffer->appendAscii( "\t\t<default:group cfg:name=\"" );
+ pXCDBuffer->append ( sName );
+ pXCDBuffer->appendAscii( "\">\n" );
// write properties
// Attention:
// We generate "Installed=false" for all entries ... because it's the default for all filters.
// You must work with a full office installation and change this to "true" in generated XML file!!!
- impl_generateBoolProperty ( *pBuffer, SUBKEY_INSTALLED, sal_False );
- impl_generateUINamesProperty( *pBuffer, SUBKEY_UINAME , aItem.lUINames );
- impl_generateStringProperty ( *pBuffer, SUBKEY_DATA , FilterCFGAccess::encodeFilterData( aItem ) );
+ impl_generateBoolProperty ( *pXCDBuffer, SUBKEY_INSTALLED, sal_False );
+ impl_generateUINamesProperty( *pXCDBuffer, SUBKEY_UINAME , aItem.lUINames );
+ impl_generateStringProperty ( *pXCDBuffer, SUBKEY_DATA , FilterCFGAccess::encodeFilterData( aItem ) );
// close set node
- pBuffer->appendAscii( "\t\t</default:group>\n" );
+ pXCDBuffer->appendAscii( "\t\t</default:group>\n" );
}
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
- if( m_aData.nVersionOutput >= 4 )
+ if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t</schema:set>\n" );
}
@@ -1203,16 +1302,46 @@ void XCDGenerator::impl_generateDetectorSet()
// open set
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"DetectServices\" cfg:element-type=\"DetectService\">\n" );
- css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllDetectorNames();
- sal_Int32 nCount = lNames.getLength() ;
+ css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllDetectorNames();
+ css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
+ sal_Int32 nCount = lNames.getLength() ;
+ sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
- for( sal_Int32 nItem=0; nItem<nCount; ++nItem )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ ::rtl::OUString sName ;
+ ::rtl::OUString sEncName;
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ sName = lNames[nItem] ;
+ //sEncName = impl_encodeSpecialSigns( sName );
+ lEncNames[nItem] = impl_encodeSetName ( sName );
+
+ m_aData.sNew2OldSCPStandard.appendAscii ( "org.openoffice.Office." );
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\torg.openoffice.Office.");
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "DetectService[\"" );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\"]\n" );
+ }
+ }
+
+ for( nItem=0; nItem<nCount; ++nItem )
{
::rtl::OUString sName = lNames[nItem] ;
Detector aItem = m_aData.pFilterCache->getDetector( sName );
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ sName = lEncNames[nItem];
+ }
+
++m_aData.nWrittenDetectors;
// open set node by using name
@@ -1246,15 +1375,45 @@ void XCDGenerator::impl_generateLoaderSet()
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"FrameLoaders\" cfg:element-type=\"FrameLoader\">\n" );
css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllLoaderNames();
+ css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
sal_Int32 nCount = lNames.getLength() ;
+ sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
- for( sal_Int32 nItem=0; nItem<nCount; ++nItem )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ ::rtl::OUString sName ;
+ ::rtl::OUString sEncName;
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ sName = lNames[nItem] ;
+ //sEncName = impl_encodeSpecialSigns( sName );
+ lEncNames[nItem] = impl_encodeSetName ( sName );
+
+ m_aData.sNew2OldSCPStandard.appendAscii ( "org.openoffice.Office." );
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\torg.openoffice.Office.");
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "FrameLoader[\"" );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\"]\n" );
+ }
+ }
+
+ for( nItem=0; nItem<nCount; ++nItem )
{
::rtl::OUString sName = lNames[nItem] ;
Loader aItem = m_aData.pFilterCache->getLoader( sName );
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ sName = lEncNames[nItem];
+ }
+
++m_aData.nWrittenLoaders;
// open set node by using name
@@ -1300,19 +1459,6 @@ void XCDGenerator::impl_generateDefaults()
}
//*****************************************************************************************************************
-void XCDGenerator::impl_generateContentHandlerTemplate()
-{
- m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"ContentHandler\">\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Types\" cfg:type=\"string\" cfg:derivedBy=\"list\" cfg:writable=\"" );
- m_aData.sBufferStandard.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t\t\t<schema:documentation>\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:description>List of types which could be handled by this service.</schema:description>\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
- m_aData.sBufferStandard.appendAscii( "\t\t</schema:group>\n" );
-}
-
-//*****************************************************************************************************************
void XCDGenerator::impl_generateContentHandlerSet()
{
if( m_aData.pFilterCache->hasContentHandlers() == sal_False )
@@ -1326,15 +1472,45 @@ void XCDGenerator::impl_generateContentHandlerSet()
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"ContentHandlers\" cfg:element-type=\"ContentHandler\">\n" );
css::uno::Sequence< ::rtl::OUString > lNames = m_aData.pFilterCache->getAllContentHandlerNames();
- sal_Int32 nCount = lNames.getLength() ;
+ css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
+ sal_Int32 nCount = lNames.getLength() ;
+ sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
- for( sal_Int32 nItem=0; nItem<nCount; ++nItem )
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ ::rtl::OUString sName ;
+ ::rtl::OUString sEncName;
+ for( nItem=0; nItem<nCount; ++nItem )
+ {
+ sName = lNames[nItem] ;
+ //sEncName = impl_encodeSpecialSigns( sName );
+ lEncNames[nItem] = impl_encodeSetName ( sName );
+
+ m_aData.sNew2OldSCPStandard.appendAscii ( "org.openoffice.Office." );
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\torg.openoffice.Office.");
+ m_aData.sNew2OldSCPStandard.append ( m_aData.sPackageStandard );
+ m_aData.sNew2OldSCPStandard.append ( CFG_PATH_SEPERATOR );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "ContentHandler[\"" );
+ m_aData.sNew2OldSCPStandard.append ( sName );
+ m_aData.sNew2OldSCPStandard.appendAscii ( "\"]\n" );
+ }
+ }
+
+ for( nItem=0; nItem<nCount; ++nItem )
{
::rtl::OUString sName = lNames[nItem] ;
ContentHandler aItem = m_aData.pFilterCache->getContentHandler( sName );
+ if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
+ {
+ sName = lEncNames[nItem];
+ }
+
++m_aData.nWrittenContentHandlers;
// open set node by using name
@@ -1394,7 +1570,7 @@ void XCDGenerator::impl_generateStringProperty( ::rtl::OUStringBuffer& s
if( sValue.getLength() > 0 )
{
sXCD.appendAscii( ">\n\t\t\t\t<default:data>" );
- sXCD.append ( XCDGenerator::impl_filterSpecialSigns( sValue ) );
+ sXCD.append ( XCDGenerator::impl_encodeSpecialSigns( sValue ) );
sXCD.appendAscii( "</default:data>\n\t\t\t</default:value>\n" );
}
else
@@ -1456,7 +1632,7 @@ void XCDGenerator::impl_generateUINamesProperty( ::rtl::OUStringBuffer&
sXCD.appendAscii( "\t\t\t<default:value cfg:name=\"" );
sXCD.append ( sName );
sXCD.appendAscii( "\" cfg:type=\"string\" cfg:localized=\"true\" cfg:writable=\"" );
- sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\"" : "false\"" );
+ sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\"" : "false\"" );
if( lUINames.size() > 0 )
{
@@ -1485,7 +1661,7 @@ void XCDGenerator::impl_generateUINamesProperty( ::rtl::OUStringBuffer&
sXCD.appendAscii( "\t\t\t\t<default:data xml:lang=\"" );
sXCD.append ( pUIName->first );
sXCD.appendAscii( "\">" );
- sXCD.append ( XCDGenerator::impl_filterSpecialSigns( pUIName->second ) );
+ sXCD.append ( XCDGenerator::impl_encodeSpecialSigns( pUIName->second ) );
sXCD.appendAscii( "</default:data>\n" );
}
}
@@ -1495,7 +1671,7 @@ void XCDGenerator::impl_generateUINamesProperty( ::rtl::OUStringBuffer&
sXCD.appendAscii( "\t\t\t\t<default:data xml:lang=\"" );
sXCD.appendAscii( "en-US" );
sXCD.appendAscii( "\">" );
- sXCD.append ( XCDGenerator::impl_filterSpecialSigns( lUINames.find(DECLARE_ASCII("en-US"))->second ));
+ sXCD.append ( XCDGenerator::impl_encodeSpecialSigns( lUINames.find(DECLARE_ASCII("en-US"))->second ));
sXCD.appendAscii( "</default:data>\n" );
}
sXCD.appendAscii( "\t\t\t</default:value>\n" );
@@ -1507,7 +1683,7 @@ void XCDGenerator::impl_generateUINamesProperty( ::rtl::OUStringBuffer&
}
//*****************************************************************************************************************
-::rtl::OUString XCDGenerator::impl_filterSpecialSigns( const ::rtl::OUString& sValue )
+::rtl::OUString XCDGenerator::impl_encodeSpecialSigns( const ::rtl::OUString& sValue )
{
::rtl::OUStringBuffer sSource ( sValue );
::rtl::OUStringBuffer sDestination( 10000 );
@@ -2169,3 +2345,132 @@ void XCDGenerator::impl_orderAlphabetical( css::uno::Sequence< ::rtl::OUString >
++nItem;
}
}
+
+//*****************************************************************************************************************
+class ModifiedUTF7Buffer
+{
+ rtl::OUStringBuffer & m_rBuffer;
+ sal_uInt32 m_nValue;
+ int m_nFilled;
+
+public:
+ ModifiedUTF7Buffer(rtl::OUStringBuffer * pTheBuffer):
+ m_rBuffer(*pTheBuffer), m_nFilled(0) {}
+
+ inline void write(sal_Unicode c);
+
+ void flush();
+};
+
+inline void ModifiedUTF7Buffer::write(sal_Unicode c)
+{
+ switch (m_nFilled)
+ {
+ case 0:
+ m_nValue = sal_uInt32(c) << 8;
+ m_nFilled = 2;
+ break;
+
+ case 1:
+ m_nValue |= sal_uInt32(c);
+ m_nFilled = 3;
+ flush();
+ break;
+
+ case 2:
+ m_nValue |= sal_uInt32(c) >> 8;
+ m_nFilled = 3;
+ flush();
+ m_nValue = (sal_uInt32(c) & 0xFF) << 16;
+ m_nFilled = 1;
+ break;
+ }
+}
+
+void ModifiedUTF7Buffer::flush()
+{
+ static sal_Unicode const aModifiedBase64[64]
+ = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.' };
+ switch (m_nFilled)
+ {
+ case 1:
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 18]);
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 12 & 63]);
+ break;
+
+ case 2:
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 18]);
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 12 & 63]);
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 6 & 63]);
+ break;
+
+ case 3:
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 18]);
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 12 & 63]);
+ m_rBuffer.append(aModifiedBase64[m_nValue >> 6 & 63]);
+ m_rBuffer.append(aModifiedBase64[m_nValue & 63]);
+ break;
+ }
+ m_nFilled = 0;
+ m_nValue = 0;
+}
+
+
+sal_Bool XCDGenerator::impl_isUsAsciiAlphaDigit(sal_Unicode c, sal_Bool bDigitAllowed)
+{
+ return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'
+ || bDigitAllowed && c >= '0' && c <= '9';
+}
+
+::rtl::OUString XCDGenerator::impl_encodeSetName( const ::rtl::OUString& rSource )
+{
+ rtl::OUStringBuffer aTarget;
+
+ sal_Unicode const * pBegin = rSource.getStr();
+ sal_Unicode const * pEnd = pBegin + rSource.getLength();
+ sal_Unicode const * pCopyEnd = pBegin;
+ sal_Unicode const * p = pBegin;
+ while (p != pEnd)
+ {
+ sal_Unicode c = *p;
+ if (!impl_isUsAsciiAlphaDigit(c,p != pBegin))
+ switch (c)
+ {
+ case '-':
+ case '.':
+ if (p != pBegin)
+ break;
+ default:
+ aTarget.append(pCopyEnd, p - pCopyEnd);
+ aTarget.append(sal_Unicode('_'));
+ ModifiedUTF7Buffer aBuffer(&aTarget);
+ for (;;)
+ {
+ aBuffer.write(c);
+ ++p;
+ if (p == pEnd)
+ break;
+ c = *p;
+ if (impl_isUsAsciiAlphaDigit(c) || c == '-' || c == '.')
+ break;
+ }
+ aBuffer.flush();
+ aTarget.append(sal_Unicode('_'));
+ pCopyEnd = p;
+ continue;
+ }
+ ++p;
+ }
+
+ if (pCopyEnd == pBegin)
+ return rSource;
+ else
+ {
+ aTarget.append(pCopyEnd, pEnd - pCopyEnd);
+ return aTarget.makeStringAndClear();
+ }
+}