blob: 5930407bd4173a399bdb3ffa1a00fc3393637f6b [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_framework.hxx"
//_________________________________________________________________________________________________________________
// my own includes
//_________________________________________________________________________________________________________________
#define VCL_NEED_BASETSD
#include <tools/presys.h>
#include <windows.h>
#include <tools/postsys.h>
#include <classes/servicemanager.hxx>
#include <classes/filtercache.hxx>
#include <macros/generic.hxx>
#include <macros/debug.hxx>
#include <services.h>
#include <filterflags.h>
//_________________________________________________________________________________________________________________
// interface includes
//_________________________________________________________________________________________________________________
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
//_________________________________________________________________________________________________________________
// other includes
//_________________________________________________________________________________________________________________
#include <comphelper/processfactory.hxx>
#include <unotools/processfactory.hxx>
#include <vos/process.hxx>
#include <rtl/ustring.hxx>
#include <rtl/ustrbuf.hxx>
#include <vcl/event.hxx>
#include <vcl/svapp.hxx>
#include <vcl/wrkwin.hxx>
#include <vcl/msgbox.hxx>
//_________________________________________________________________________________________________________________
// namespace
//_________________________________________________________________________________________________________________
using namespace ::framework ;
//_________________________________________________________________________________________________________________
// const
//_________________________________________________________________________________________________________________
//_________________________________________________________________________________________________________________
// defines
//_________________________________________________________________________________________________________________
/*
Versions: 1) first revision
- one entry for every property
- full loclized values
2) new property "Order" for filters ... but not right set!
all values are 0
3) decrease size of xml file
- don't write full localized values
- use own formated string for all non localized values
- seperate "Installed" flag for filters
4) set right values for "Order" property of filters
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_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]
#define ARGUMENT_VERSION_INPUT DECLARE_ASCII("-vin=") // argument for file version to read [1|2|3]
#define ARGUMENT_VERSION_OUTPUT DECLARE_ASCII("-vou=") // argument for file version to write [1|2|3]
#define ARGUMENTLENGTH 5 // All arguments should have the same lenght ... it's better to detect it!
#define ARGUMENTFOUND 0 // OUString::compareTo returns 0 if searched string match given one
#define WRITEABLE_ON DECLARE_ASCII("true" )
#define WRITEABLE_OFF DECLARE_ASCII("false")
#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"
//_________________________________________________________________________________________________________________
// declarations
//_________________________________________________________________________________________________________________
/*-***************************************************************************************************************/
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 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 ;
::rtl::OUStringBuffer sAdditionalTypeList ;
sal_Bool bWriteable ; // enable/disable writable configuration items
sal_Int32 nVersionInput ; // format version of input xml file
sal_Int32 nVersionOutput ; // format version of output xcd file
sal_Int32 nOriginalTypes ;
sal_Int32 nOriginalFilters ;
sal_Int32 nOriginalDetectors ;
sal_Int32 nOriginalLoaders ;
sal_Int32 nOriginalContentHandlers ;
sal_Int32 nWrittenTypes ;
sal_Int32 nWrittenFilters ;
sal_Int32 nWrittenDetectors ;
sal_Int32 nWrittenLoaders ;
sal_Int32 nWrittenContentHandlers ;
};
/*-***************************************************************************************************************/
class XCDGenerator : public Application
{
//*************************************************************************************************************
public:
void Main();
//*************************************************************************************************************
private:
void impl_printCopyright ( ); // print copyright to stdout :-)
void impl_printSyntax ( ); // print help to stout for user
void impl_parseCommandLine ( AppMember& rMember ); // parse command line arguments and fill given struct
void impl_generateXCD ( ); // generate all xcd files by using current configuration
void impl_generateCopyright ( ); // generate copyrights
void impl_generateTypeTemplate ( ); // generate templates ...
void impl_generateFilterTemplate ( );
void impl_generateDetectorTemplate ( );
void impl_generateLoaderTemplate ( );
void impl_generateTypeSet ( ); // generate sets
void impl_generateFilterSet ( );
void impl_generateDetectorSet ( );
void impl_generateLoaderSet ( );
void impl_generateDefaults ( ); // generate defaults
void impl_generateContentHandlerTemplate ( );
void impl_generateContentHandlerSet ( );
void impl_generateFilterFlagTemplate ( const ::rtl::OUString& sName , // helper to write atomic elements
sal_Int32 nValue ,
const ::rtl::OString& sDescription = ::rtl::OString() );
void impl_generateIntProperty ( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
sal_Int32 nValue );
void impl_generateBoolProperty ( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
sal_Bool bValue );
void impl_generateStringProperty ( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const ::rtl::OUString& sValue );
void impl_generateStringListProperty ( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const ::framework::StringList& lValue );
void impl_generateUINamesProperty ( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const StringHash& lUINames );
::rtl::OUString impl_getOldFilterName ( const ::rtl::OUString& sNewName ); // convert filter names to old format
static void impl_classifyType ( const AppMember& rData ,
const ::rtl::OUString& sTypeName ,
EFilterPackage& ePackage ); // classify type as STANDARD or ADDITIONAL one
static void impl_classifyFilter ( const AppMember& rData ,
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_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:
AppMember m_aData;
}; // class XCDGenerator
//_________________________________________________________________________________________________________________
// global variables
//_________________________________________________________________________________________________________________
XCDGenerator gGenerator;
//*****************************************************************************************************************
void XCDGenerator::Main()
{
// Must be :-)
// 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() );
// Get optional commands from command line.
impl_parseCommandLine( m_aData );
// initialize converter table to match new to old filter names!
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
XCDGenerator::impl_initFilterHashNew2Old( m_aData.aOldFilterNamesHash );
}
// Create access to current set filter configuration.
// 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, 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.
// May be it's possible to lose some of them during convertion!!!
m_aData.nOriginalTypes = m_aData.pFilterCache->getAllTypeNames().getLength() ;
m_aData.nOriginalFilters = m_aData.pFilterCache->getAllFilterNames().getLength() ;
m_aData.nOriginalDetectors = m_aData.pFilterCache->getAllDetectorNames().getLength() ;
m_aData.nOriginalLoaders = m_aData.pFilterCache->getAllLoaderNames().getLength() ;
if( m_aData.nVersionInput >= 5 )
{
m_aData.nOriginalContentHandlers = m_aData.pFilterCache->getAllContentHandlerNames().getLength() ;
}
// Start generation of xcd file(s).
impl_generateXCD();
// Warn programmer if some items couldn't written to file!
LOG_ASSERT2( m_aData.nOriginalTypes != m_aData.nWrittenTypes , "XCDGenerator::Main()", "Generated xcd file could be invalid ... because I miss some types!" )
LOG_ASSERT2( m_aData.nOriginalFilters != m_aData.nWrittenFilters , "XCDGenerator::Main()", "Generated xcd file could be invalid ... because I miss some filters!" )
LOG_ASSERT2( m_aData.nOriginalDetectors!= m_aData.nWrittenDetectors, "XCDGenerator::Main()", "Generated xcd file could be invalid ... because I miss some detectors!" )
LOG_ASSERT2( m_aData.nOriginalLoaders != m_aData.nWrittenLoaders , "XCDGenerator::Main()", "Generated xcd file could be invalid ... because I miss some loaders!" )
// Free memory.
delete m_aData.pFilterCache;
m_aData.pFilterCache = NULL;
}
/*-************************************************************************************************************//**
@short print some info messages to stderr
@descr We must show an copyright or help for using this file.
This two methods do that.
@seealso -
@param -
@return -
@onerror -
*//*-*************************************************************************************************************/
void XCDGenerator::impl_printCopyright()
{
fprintf( stderr, "\nLicensed to the Apache Software Foundation.\n" );
}
//*****************************************************************************************************************
void XCDGenerator::impl_printSyntax()
{
// It's not possible to print it out to stdout in a svdem binary :-(
// So we show an assert.
::rtl::OStringBuffer sBuffer( 500 );
sBuffer.append( "\nusing: xml2xcd -fis=<file standard filter> -fia=<file additional filter> -pas=<package standard filter> -paa=<package additional filter> -vin=<version input> -vou=<version output> [-wri=<true|false>]\n\n" );
sBuffer.append( "\tneccessary parameters:\n" );
sBuffer.append( "\t\t-fis\tname of output file in system notation\n" );
sBuffer.append( "\t\t-fia\tname of output file in system notation\n" );
sBuffer.append( "\t\t-pas\tpackage of standard filters\n" );
sBuffer.append( "\t\t-paa\tpackage of additional filters\n" );
sBuffer.append( "\t\t-vin\tformat version of input xml file\n" );
sBuffer.append( "\t\t-vou\tformat version of generated xcd file\n\n" );
sBuffer.append( "\toptional parameters:\n" );
sBuffer.append( "\t\t-wri\tconfig items should be writeable ... [true|false]\n" );
LOG_ERROR( "", sBuffer.makeStringAndClear() )
}
/*-************************************************************************************************************//**
@short analyze command line arguments
@descr Created binary accept different command line arguments. These parameters
regulate creation of xcd file. Follow arguments are supported:
"-fis=<filename of standard xcd>"
"-fia=<filename of additional xcd>"
"-wri=<writeable>[true|false]"
"-vin=<version of input file>[1|2|3]"
"-vou=<version of output file>[1|2|3]"
@seealso -
@param "rMember", reference to struct of global application member to fill arguments in it
@return right filled member struct or unchanged struct if an error occure!
@onerror We do nothing - or warn programmer!
*//*-*************************************************************************************************************/
void XCDGenerator::impl_parseCommandLine( AppMember& rMember )
{
::vos::OStartupInfo aInfo ;
::rtl::OUString sArgument ;
sal_Int32 nArgument = 0 ;
sal_Int32 nCount = aInfo.getCommandArgCount();
sal_Int32 nMinCount = 0 ;
while( nArgument<nCount )
{
aInfo.getCommandArg( nArgument, sArgument );
/*OBSOLETE
//_____________________________________________________________________________________________________
// look for "-fis=..."
if( sArgument.compareTo( ARGUMENT_FILENAME_STANDARD, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
rMember.sFileNameStandard = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
++nMinCount;
}
else
//_____________________________________________________________________________________________________
// look for "-fia=..."
if( sArgument.compareTo( ARGUMENT_FILENAME_ADDITIONAL, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
rMember.sFileNameAdditional = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
++nMinCount;
}
else
*/
//_____________________________________________________________________________________________________
// look for "-pas=..."
if( sArgument.compareTo( ARGUMENT_PACKAGE_STANDARD, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
rMember.sPackageStandard = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
++nMinCount;
}
else
//_____________________________________________________________________________________________________
// look for "-paa=..."
if( sArgument.compareTo( ARGUMENT_PACKAGE_ADDITIONAL, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
rMember.sPackageAdditional = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
++nMinCount;
}
else
//_____________________________________________________________________________________________________
// look for "-wri=..."
if( sArgument.compareTo( ARGUMENT_WRITEABLE, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
::rtl::OUString sWriteable = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
if( sWriteable == WRITEABLE_ON )
{
rMember.bWriteable = sal_True;
}
else
{
rMember.bWriteable = sal_False;
}
++nMinCount;
}
//_____________________________________________________________________________________________________
// look for "-vin=..."
if( sArgument.compareTo( ARGUMENT_VERSION_INPUT, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
::rtl::OUString sVersion = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
rMember.nVersionInput = sVersion.toInt32();
++nMinCount;
}
//_____________________________________________________________________________________________________
// look for "-vou=..."
if( sArgument.compareTo( ARGUMENT_VERSION_OUTPUT, ARGUMENTLENGTH ) == ARGUMENTFOUND )
{
::rtl::OUString sVersion = sArgument.copy( ARGUMENTLENGTH, sArgument.getLength()-ARGUMENTLENGTH );
rMember.nVersionOutput = sVersion.toInt32();
++nMinCount;
}
++nArgument;
}
// Show help if user don't call us right!
if( nMinCount != MINARGUMENTCOUNT )
{
impl_printSyntax();
exit(-1);
}
}
/*-************************************************************************************************************//**
@short regulate generation of complete xcd file(s)
@descr This method is the toppest one and implement the global structure of generated xcd file(s).
We create a unicode string buffer for complete xcd file in memory ...
use different helper methods to fill it ...
and write it to disk at the end of this method!
@seealso struct AppMember
@param -
@return -
@onerror -
*//*-*************************************************************************************************************/
void XCDGenerator::impl_generateXCD()
{
impl_generateCopyright();
// Write header
m_aData.sBufferStandard.appendAscii ( "\n<!-- PLEASE DON'T CHANGE TEMPLATES OR FILE FORMAT BY HAND! USE \"XML2XCD.EXE\" TO DO THAT. THANKS. -->\n\n" );
m_aData.sBufferStandard.appendAscii ( "<!DOCTYPE schema:component SYSTEM \"../../../../schema/schema.description.dtd\">\n" );
m_aData.sBufferStandard.appendAscii ( "<schema:component cfg:name=\"" );
m_aData.sBufferStandard.append ( m_aData.sPackageStandard );
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 >= 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" );
m_aData.sBufferAdditional.appendAscii ( "<schema:component cfg:name=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageAdditional );
m_aData.sBufferAdditional.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.sBufferAdditional.appendAscii ( "\t<schema:import cfg:name=\"" );
m_aData.sBufferAdditional.append ( m_aData.sPackageStandard );
m_aData.sBufferAdditional.appendAscii ( "\"/>\n" );
}
// Follow ...generate... methods to nothing for additional filters!
impl_generateTypeTemplate ();
impl_generateFilterTemplate ();
impl_generateDetectorTemplate();
if( m_aData.nVersionOutput >= 5 )
{
impl_generateContentHandlerTemplate ();
}
impl_generateLoaderTemplate ();
m_aData.sBufferStandard.appendAscii ( "\t</schema:templates>\n" );
m_aData.sBufferStandard.appendAscii ( "<schema:schema cfg:localized=\"false\">\n" );
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t<schema:schema cfg:localized=\"false\">\n" );
}
impl_generateTypeSet ();
impl_generateFilterSet ();
impl_generateDetectorSet ();
if( m_aData.nVersionInput >= 5 )
{
impl_generateContentHandlerSet ();
}
impl_generateLoaderSet ();
impl_generateDefaults ();
m_aData.sBufferStandard.appendAscii ( "\t</schema:schema>\n" );
m_aData.sBufferStandard.appendAscii ( "</schema:component>\n" );
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii ( "\t</schema:schema>\n" );
m_aData.sBufferAdditional.appendAscii ( "</schema:component>\n" );
}
::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() ))
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
sFileName = m_aData.sPackageAdditional ;
sFileName += DECLARE_ASCII(".xcd") ;
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() ))
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateCopyright()
{
m_aData.sBufferStandard.appendAscii( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" );
m_aData.sBufferStandard.appendAscii( "<!--***********************************************************\n");
m_aData.sBufferStandard.appendAscii( " *\n");
m_aData.sBufferStandard.appendAscii( " * Licensed to the Apache Software Foundation (ASF) under one\n");
m_aData.sBufferStandard.appendAscii( " * or more contributor license agreements. See the NOTICE file\n");
m_aData.sBufferStandard.appendAscii( " * distributed with this work for additional information\n");
m_aData.sBufferStandard.appendAscii( " * regarding copyright ownership. The ASF licenses this file\n");
m_aData.sBufferStandard.appendAscii( " * to you under the Apache License, Version 2.0 (the\n");
m_aData.sBufferStandard.appendAscii( " * \"License\"); you may not use this file except in compliance\n");
m_aData.sBufferStandard.appendAscii( " * with the License. You may obtain a copy of the License at\n");
m_aData.sBufferStandard.appendAscii( " *\n");
m_aData.sBufferStandard.appendAscii( " * http://www.apache.org/licenses/LICENSE-2.0\n");
m_aData.sBufferStandard.appendAscii( " * \n");
m_aData.sBufferStandard.appendAscii( " * Unless required by applicable law or agreed to in writing,\n");
m_aData.sBufferStandard.appendAscii( " * software distributed under the License is distributed on an\n");
m_aData.sBufferStandard.appendAscii( " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n");
m_aData.sBufferStandard.appendAscii( " * KIND, either express or implied. See the License for the\n");
m_aData.sBufferStandard.appendAscii( " * specific language governing permissions and limitations\n");
m_aData.sBufferStandard.appendAscii( " * under the License.\n");
m_aData.sBufferStandard.appendAscii( " * \n");
m_aData.sBufferStandard.appendAscii( " ***********************************************************-->\n");
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" );
m_aData.sBufferStandard.appendAscii( "<!--***********************************************************\n");
m_aData.sBufferStandard.appendAscii( " *\n");
m_aData.sBufferStandard.appendAscii( " * Licensed to the Apache Software Foundation (ASF) under one\n");
m_aData.sBufferStandard.appendAscii( " * or more contributor license agreements. See the NOTICE file\n");
m_aData.sBufferStandard.appendAscii( " * distributed with this work for additional information\n");
m_aData.sBufferStandard.appendAscii( " * regarding copyright ownership. The ASF licenses this file\n");
m_aData.sBufferStandard.appendAscii( " * to you under the Apache License, Version 2.0 (the\n");
m_aData.sBufferStandard.appendAscii( " * \"License\"); you may not use this file except in compliance\n");
m_aData.sBufferStandard.appendAscii( " * with the License. You may obtain a copy of the License at\n");
m_aData.sBufferStandard.appendAscii( " *\n");
m_aData.sBufferStandard.appendAscii( " * http://www.apache.org/licenses/LICENSE-2.0\n");
m_aData.sBufferStandard.appendAscii( " * \n");
m_aData.sBufferStandard.appendAscii( " * Unless required by applicable law or agreed to in writing,\n");
m_aData.sBufferStandard.appendAscii( " * software distributed under the License is distributed on an\n");
m_aData.sBufferStandard.appendAscii( " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n");
m_aData.sBufferStandard.appendAscii( " * KIND, either express or implied. See the License for the\n");
m_aData.sBufferStandard.appendAscii( " * specific language governing permissions and limitations\n");
m_aData.sBufferStandard.appendAscii( " * under the License.\n");
m_aData.sBufferStandard.appendAscii( " * \n");
m_aData.sBufferStandard.appendAscii( " ***********************************************************-->\n");
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateTypeTemplate()
{
//_________________________________________________________________________________________________________________
if( m_aData.nVersionOutput==1 || m_aData.nVersionOutput==2 )
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"Type\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Preferred\" cfg:type=\"boolean\" 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>Specifies the preferred type for an extension if more then one match given URL</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>false</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UIName\" cfg:type=\"string\" cfg:localized=\"true\" 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>Specifies the external name of this type</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\t<schema:value cfg:name=\"MediaType\" cfg:type=\"string\" 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>Specifies the mime type </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\t<schema:value cfg:name=\"ClipboardFormat\" cfg:type=\"string\" 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>Specifies the clipboard format name</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\t<schema:value cfg:name=\"URLPattern\" 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>Specifies the patterns used for URLs. This type is only relevant for HTTP, FTP etc. and is used for internal URL formats like private:factory etc.</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\t<schema:value cfg:name=\"Extensions\" 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>Specifies the possible file extensions.</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\t<schema:value cfg:name=\"DocumentIconID\" cfg:type=\"int\" 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>Specifies the document icon ID of this type</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>0</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t</schema:group>\n" );
}
//_________________________________________________________________________________________________________________
else if( m_aData.nVersionOutput>=3 )
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"Type\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UIName\" cfg:type=\"string\" cfg:localized=\"true\" 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>Specifies the external name of this type</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\t<schema:value cfg:name=\"Data\" cfg:type=\"string\" 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>Containes all data of a type as an own formated string.{Preferred, MediaType, ClipboardFormat, URLPattern, Extensions, DocumentIconID}</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>false</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t</schema:group>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateFilterTemplate()
{
//_________________________________________________________________________________________________________________
if( m_aData.nVersionOutput==1 || m_aData.nVersionOutput==2 )
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"Filter\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Installed\" cfg:type=\"boolean\" 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>Make it possible to enable or disable filter by setup!</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>false</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
if( m_aData.nVersionOutput==2 )
{
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Order\" cfg:type=\"int\" 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>Specifies order of filters for relevant module; don't used for default filter!</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>0</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
}
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UIName\" cfg:type=\"string\" cfg:localized=\"true\" 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>Specifies the external name of the filter which is displayed at the user interface (dialog).</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\t<schema:value cfg:name=\"Type\" cfg:type=\"string\" 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>Specifies the relative type key name of the filter, e.g. Type/T1</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\t<schema:value cfg:name=\"DocumentService\" cfg:type=\"string\" 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>Specifies the name of the UNO service to implement the document.</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\t<schema:value cfg:name=\"FilterService\" cfg:type=\"string\" 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>Specifies the name of the UNO service for importing the document.</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\t<schema:value cfg:name=\"Flags\" cfg:type=\"int\" 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>Specifies the properties of the filter</schema:description>\n" );
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 , "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 , "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" );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_3RDPARTYFILTER , FILTERFLAG_3RDPARTYFILTER , "must set, if the filter is an external one" );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_PACKED , FILTERFLAG_PACKED );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_SILENTEXPORT , FILTERFLAG_SILENTEXPORT );
impl_generateFilterFlagTemplate( FILTERFLAGNAME_PREFERED , FILTERFLAG_PREFERED );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t</schema:value-names>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:constraints xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\"/>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:type-info>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>0</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UserData\" 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>Specifies the user-defined data</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data/>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"FileFormatVersion\" cfg:type=\"int\" cfg:writable=\"" );
m_aData.sBufferStandard.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<!--This should be removed to UserData later-->\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:description>Specifies the file format version of the filter</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>0</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"TemplateName\" cfg:type=\"string\" cfg:writable=\"" );
m_aData.sBufferStandard.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<!--This should be removed to UserData later-->\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t<schema:description>Specifies the template used for importing the file with the specified filter.</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\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" );
//_________________________________________________________________________________________________________________
}
else if( m_aData.nVersionOutput>=3 )
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"Filter\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"Installed\" cfg:type=\"boolean\" 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>Make it possible to enable or disable filter by setup!</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t</schema:documentation>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t<default:data>false</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t</schema:value>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UIName\" cfg:type=\"string\" cfg:localized=\"true\" 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>Specifies the external name of the filter which is displayed at the user interface (dialog).</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\t<schema:value cfg:name=\"Data\" cfg:type=\"string\" 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>All data of filter written in own format. {Order, OldName, Type, DocumentService, FilterService, Flags, UserData, FilteFormatVersion, TemplateName}</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_generateFilterFlagTemplate( const ::rtl::OUString& sName, sal_Int32 nValue, const ::rtl::OString& sDescription )
{
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t\t<schema:named-value name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.appendAscii( "\" value=\"" );
m_aData.sBufferStandard.append ( nValue );
m_aData.sBufferStandard.appendAscii( "\"" );
if( sDescription.getLength() > 0 )
{
m_aData.sBufferStandard.appendAscii( ">\n\t\t\t\t\t\t\t<schema:description>" );
m_aData.sBufferStandard.appendAscii( sDescription );
m_aData.sBufferStandard.appendAscii( "</schema:description>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t\t\t\t</schema:named-value>\n" );
}
else
{
m_aData.sBufferStandard.appendAscii( "/>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateDetectorTemplate()
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"DetectService\">\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 the service has registered for.</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_generateLoaderTemplate()
{
m_aData.sBufferStandard.appendAscii( "\t\t<schema:group cfg:name=\"FrameLoader\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<schema:value cfg:name=\"UIName\" cfg:type=\"string\" cfg:localized=\"true\" 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>Specifies the external name of the filter which is displayed at the user interface (dialog).</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\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 the service has registered for.</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_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 )
{
// generate empty set!
m_aData.sBufferStandard.appendAscii ( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\"/>\n" );
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" );
}
}
else
{
// generate filled set
// open set
m_aData.sBufferStandard.appendAscii ( "\t<schema:set cfg:name=\"Types\" cfg:element-type=\"Type\">\n" );
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();
css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
sal_Int32 nCount = lNames.getLength() ;
sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
::rtl::OUString sName ;
::rtl::OUString sEncName;
for( nItem=0; nItem<nCount; ++nItem )
{
sName = lNames[nItem] ;
lEncNames[nItem] = impl_encodeSetName( sName );
}
}
for( nItem=0; nItem<nCount; ++nItem )
{
::rtl::OUString sName = lNames[nItem] ;
FileType aItem = m_aData.pFilterCache->getType( sName );
EFilterPackage ePackage ;
++m_aData.nWrittenTypes;
if( m_aData.nVersionOutput==1 || m_aData.nVersionOutput==2 )
{
// open set entry by using name
m_aData.sBufferStandard.appendAscii( "\t\t<default:group cfg:name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.appendAscii( "\">\n" );
// write properties
impl_generateBoolProperty ( m_aData.sBufferStandard, SUBKEY_PREFERRED , aItem.bPreferred );
impl_generateUINamesProperty ( m_aData.sBufferStandard, SUBKEY_UINAME , aItem.lUINames );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_MEDIATYPE , aItem.sMediaType );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_CLIPBOARDFORMAT , aItem.sClipboardFormat );
impl_generateStringListProperty ( m_aData.sBufferStandard, SUBKEY_URLPATTERN , aItem.lURLPattern );
impl_generateStringListProperty ( m_aData.sBufferStandard, SUBKEY_EXTENSIONS , aItem.lExtensions );
impl_generateIntProperty ( m_aData.sBufferStandard, SUBKEY_DOCUMENTICONID , aItem.nDocumentIconID );
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
else if( m_aData.nVersionOutput >= 3 )
{
::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 >= DRAFT_SPLIT_VERSION )
{
XCDGenerator::impl_classifyType( m_aData, sName, ePackage );
switch( ePackage )
{
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 ( CFG_ENCODING_OPEN );
pSCPBuffer->append ( lNames[nItem] );
pSCPBuffer->append ( CFG_ENCODING_CLOSE );
pSCPBuffer->appendAscii( "\"\n" );
sName = lEncNames[nItem];
aItem.sName = sName;
}
// open set entry by using name
pXCDBuffer->appendAscii( "\t\t<default:group cfg:name=\"" );
pXCDBuffer->append ( sName );
pXCDBuffer->appendAscii( "\">\n" );
// write properties
impl_generateUINamesProperty( *pXCDBuffer, SUBKEY_UINAME, aItem.lUINames );
impl_generateStringProperty ( *pXCDBuffer, SUBKEY_DATA , FilterCFGAccess::encodeTypeData( aItem ) );
// close set node
pXCDBuffer->appendAscii( "\t\t</default:group>\n" );
}
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t</schema:set>\n" );
}
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateFilterSet()
{
if( m_aData.pFilterCache->hasFilters() == sal_False )
{
// write empty filter set.
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\"/>\n" );
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" );
}
}
else
{
// open set
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"Filters\" cfg:element-type=\"Filter\">\n" );
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 > 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( lNewNames );
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
::rtl::OUString sNewName;
::rtl::OUString sOldName;
for( nItem=0; nItem<nCount; ++nItem )
{
sNewName = lNewNames[nItem] ;
sOldName = impl_getOldFilterName ( sNewName );
lOldNames[nItem] = 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;
if( m_aData.nVersionOutput==1 || m_aData.nVersionOutput==2 )
{
// open set node by using name
m_aData.sBufferStandard.appendAscii( "\t\t<default:group cfg:name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.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 ( m_aData.sBufferStandard, SUBKEY_INSTALLED , sal_False );
impl_generateIntProperty ( m_aData.sBufferStandard, SUBKEY_ORDER , aItem.nOrder );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_TYPE , aItem.sType );
impl_generateUINamesProperty ( m_aData.sBufferStandard, SUBKEY_UINAME , aItem.lUINames );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_DOCUMENTSERVICE , aItem.sDocumentService );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_FILTERSERVICE , aItem.sFilterService );
impl_generateIntProperty ( m_aData.sBufferStandard, SUBKEY_FLAGS , aItem.nFlags );
impl_generateStringListProperty ( m_aData.sBufferStandard, SUBKEY_USERDATA , aItem.lUserData );
impl_generateIntProperty ( m_aData.sBufferStandard, SUBKEY_FILEFORMATVERSION, aItem.nFileFormatVersion );
impl_generateStringProperty ( m_aData.sBufferStandard, SUBKEY_TEMPLATENAME , aItem.sTemplateName );
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
else if( m_aData.nVersionOutput>=3 )
{
::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 >= DRAFT_SPLIT_VERSION )
{
XCDGenerator::impl_classifyFilter( m_aData, sName, ePackage, aItem.nOrder );
switch( ePackage )
{
case E_ADDITIONAL : {
sPath += m_aData.sPackageAdditional ;
pXCDBuffer = &(m_aData.sBufferAdditional );
pSCPBuffer = &(m_aData.sNew2OldSCPAdditional);
pListBuffer = &(m_aData.sAdditionalFilterList);
}
}
}
else
{
sPath += m_aData.sPackageStandard;
}
sPath += CFG_PATH_SEPERATOR ;
sPath += DECLARE_ASCII( "Filters" );
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 ( lNewNames[nItem] );
pSCPBuffer->appendAscii( "\"\t\"" );
pSCPBuffer->append ( sPath );
pSCPBuffer->appendAscii( "Filter" );
pSCPBuffer->append ( CFG_ENCODING_OPEN );
pSCPBuffer->append ( lOldNames[nItem] );
pSCPBuffer->append ( CFG_ENCODING_CLOSE );
pSCPBuffer->appendAscii( "\"\n" );
sName = lEncNames[nItem];
aItem.sName = sName;
}
// open set node by using name
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 ( *pXCDBuffer, SUBKEY_INSTALLED, sal_False );
impl_generateUINamesProperty( *pXCDBuffer, SUBKEY_UINAME , aItem.lUINames );
impl_generateStringProperty ( *pXCDBuffer, SUBKEY_DATA , FilterCFGAccess::encodeFilterData( aItem ) );
// close set node
pXCDBuffer->appendAscii( "\t\t</default:group>\n" );
}
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
if( m_aData.nVersionOutput >= DRAFT_SPLIT_VERSION )
{
m_aData.sBufferAdditional.appendAscii( "\t</schema:set>\n" );
}
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateDetectorSet()
{
if( m_aData.pFilterCache->hasDetectors() == sal_False )
{
// write empty detector set!
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"DetectServices\" cfg:element-type=\"DetectService\"/>\n" );
}
else
{
// 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();
css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
sal_Int32 nCount = lNames.getLength() ;
sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
::rtl::OUString sName ;
::rtl::OUString sEncName;
for( nItem=0; nItem<nCount; ++nItem )
{
sName = lNames[nItem] ;
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 ( CFG_ENCODING_OPEN );
m_aData.sNew2OldSCPStandard.append ( sName );
m_aData.sNew2OldSCPStandard.append ( CFG_ENCODING_CLOSE );
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
m_aData.sBufferStandard.appendAscii( "\t\t<default:group cfg:name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.appendAscii( "\">\n" );
// write properties
impl_generateStringListProperty ( m_aData.sBufferStandard, SUBKEY_TYPES, aItem.lTypes );
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateLoaderSet()
{
if( m_aData.pFilterCache->hasLoaders() == sal_False )
{
// write empty loader set!
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"FrameLoaders\" cfg:element-type=\"FrameLoader\"/>\n" );
}
else
{
// open set
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 );
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
::rtl::OUString sName ;
::rtl::OUString sEncName;
for( nItem=0; nItem<nCount; ++nItem )
{
sName = lNames[nItem] ;
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 ( CFG_ENCODING_OPEN );
m_aData.sNew2OldSCPStandard.append ( sName );
m_aData.sNew2OldSCPStandard.append ( CFG_ENCODING_CLOSE );
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
m_aData.sBufferStandard.appendAscii( "\t\t<default:group cfg:name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.appendAscii( "\">\n" );
// write properties
impl_generateUINamesProperty ( m_aData.sBufferStandard, SUBKEY_UINAME, aItem.lUINames );
impl_generateStringListProperty ( m_aData.sBufferStandard, SUBKEY_TYPES , aItem.lTypes );
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateDefaults()
{
// open group
m_aData.sBufferStandard.appendAscii( "\t<schema:group cfg:name=\"Defaults\">\n" );
// write generic loader
m_aData.sBufferStandard.appendAscii( "\t\t<schema:value cfg:name=\"FrameLoader\" cfg:type=\"string\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<default:data>" );
m_aData.sBufferStandard.append ( m_aData.pFilterCache->getDefaultLoader() );
m_aData.sBufferStandard.appendAscii( "</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t</schema:value>\n" );
// write default detector
m_aData.sBufferStandard.appendAscii( "\t\t<schema:value cfg:name=\"DetectService\" cfg:type=\"string\">\n" );
m_aData.sBufferStandard.appendAscii( "\t\t\t<default:data>" );
m_aData.sBufferStandard.append ( m_aData.pFilterCache->getDefaultDetector() );
m_aData.sBufferStandard.appendAscii( "</default:data>\n" );
m_aData.sBufferStandard.appendAscii( "\t\t</schema:value>\n" );
// close group
m_aData.sBufferStandard.appendAscii( "\t</schema:group>\n" );
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateContentHandlerSet()
{
if( m_aData.pFilterCache->hasContentHandlers() == sal_False )
{
// write empty handler set!
m_aData.sBufferStandard.appendAscii( "\t<schema:set cfg:name=\"ContentHandlers\" cfg:element-type=\"ContentHandler\"/>\n" );
}
else
{
// open set
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();
css::uno::Sequence< ::rtl::OUString > lEncNames ( lNames ) ;
sal_Int32 nCount = lNames.getLength() ;
sal_Int32 nItem = 0 ;
XCDGenerator::impl_orderAlphabetical( lNames );
if( m_aData.nVersionOutput == 6 && m_aData.nVersionInput < 6 )
{
::rtl::OUString sName ;
::rtl::OUString sEncName;
for( nItem=0; nItem<nCount; ++nItem )
{
sName = lNames[nItem] ;
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 ( CFG_ENCODING_OPEN );
m_aData.sNew2OldSCPStandard.append ( sName );
m_aData.sNew2OldSCPStandard.append ( CFG_ENCODING_CLOSE );
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
m_aData.sBufferStandard.appendAscii( "\t\t<default:group cfg:name=\"" );
m_aData.sBufferStandard.append ( sName );
m_aData.sBufferStandard.appendAscii( "\">\n" );
// write properties
impl_generateStringListProperty( m_aData.sBufferStandard, SUBKEY_TYPES, aItem.lTypes );
// close set node
m_aData.sBufferStandard.appendAscii( "\t\t</default:group>\n" );
}
// close set
m_aData.sBufferStandard.appendAscii( "\t</schema:set>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateIntProperty( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
sal_Int32 nValue )
{
sXCD.appendAscii( "\t\t\t<default:value cfg:name=\"" );
sXCD.append ( sName );
sXCD.appendAscii( "\" cfg:type=\"int\" cfg:writable=\"" );
sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
sXCD.appendAscii( "\t\t\t\t<default:data>" );
sXCD.append ( (sal_Int32)(nValue) );
sXCD.appendAscii( "</default:data>\n\t\t\t</default:value>\n" );
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateBoolProperty( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
sal_Bool bValue )
{
sXCD.appendAscii( "\t\t\t<default:value cfg:name=\"" );
sXCD.append ( sName );
sXCD.appendAscii( "\" cfg:type=\"boolean\" cfg:writable=\"" );
sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\">\n" : "false\">\n" );
sXCD.appendAscii( "\t\t\t\t<default:data>" );
sXCD.appendAscii( bValue==sal_True ? "true" : "false" );
sXCD.appendAscii( "</default:data>\n\t\t\t</default:value>\n" );
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateStringProperty( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const ::rtl::OUString& sValue )
{
sXCD.appendAscii( "\t\t\t<default:value cfg:name=\"" );
sXCD.append ( sName );
sXCD.appendAscii( "\" cfg:type=\"string\" cfg:writable=\"" );
sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\"" : "false\"" );
if( sValue.getLength() > 0 )
{
sXCD.appendAscii( ">\n\t\t\t\t<default:data>" );
sXCD.append ( XCDGenerator::impl_encodeSpecialSigns( sValue ) );
sXCD.appendAscii( "</default:data>\n\t\t\t</default:value>\n" );
}
else
{
sXCD.appendAscii( "/>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateStringListProperty( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const ::framework::StringList& lValue )
{
sXCD.appendAscii( "\t\t\t<default:value cfg:name=\"" );
sXCD.append ( sName );
sXCD.appendAscii( "\" cfg:type=\"string\" cfg:derivedBy=\"list\"" );
sal_Unicode cSeperator = XCDGenerator::impl_defineSeperator( lValue );
if( cSeperator != ' ' )
{
sXCD.appendAscii( " cfg:separator=\"" );
sXCD.append ( cSeperator );
sXCD.appendAscii( "\"" );
}
sXCD.appendAscii( " cfg:writable=\"" );
sXCD.appendAscii( m_aData.bWriteable==sal_True ? "true\"" : "false\"" );
sal_Int32 nCount = (sal_Int32)(lValue.size());
sal_Int32 nPosition = 1;
if( nCount > 0 )
{
sXCD.appendAscii( ">\n\t\t\t\t<default:data>" );
for( ConstStringListIterator pEntry=lValue.begin(); pEntry!=lValue.end(); ++pEntry )
{
sXCD.append( *pEntry );
if( nPosition < nCount )
{
// Seperator for lists allowed only between two values!
// Don't write leading or leaving seperators ...
sXCD.append( cSeperator );
}
++nPosition;
}
sXCD.appendAscii( "</default:data>\n\t\t\t</default:value>\n" );
}
else
{
sXCD.appendAscii( "/>\n" );
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_generateUINamesProperty( ::rtl::OUStringBuffer& sXCD ,
const ::rtl::OUString& sName ,
const StringHash& lUINames )
{
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\"" );
if( lUINames.size() > 0 )
{
sXCD.appendAscii( ">\n" );
// Search for localized values, which doesn't need full localized set ...
// because all values for all locales are the same!
sal_Bool bDifferent = sal_False ;
ConstStringHashIterator pUIName = lUINames.begin();
::rtl::OUString sUIName = pUIName->second ;
while( pUIName!=lUINames.end() )
{
if( sUIName != pUIName->second )
{
bDifferent = sal_True;
break;
}
++pUIName;
}
// Generate full localized set, if some values are realy loclaized.
if( bDifferent == sal_True )
{
for( ConstStringHashIterator pUIName=lUINames.begin(); pUIName!=lUINames.end(); ++pUIName )
{
sXCD.appendAscii( "\t\t\t\t<default:data xml:lang=\"" );
sXCD.append ( pUIName->first );
sXCD.appendAscii( "\">" );
sXCD.append ( XCDGenerator::impl_encodeSpecialSigns( pUIName->second ) );
sXCD.appendAscii( "</default:data>\n" );
}
}
// Generate ONE entry as default for our configuration if all localized values are equal!
else
{
sXCD.appendAscii( "\t\t\t\t<default:data xml:lang=\"" );
sXCD.appendAscii( "en-US" );
sXCD.appendAscii( "\">" );
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" );
}
else
{
sXCD.appendAscii( "/>\n" );
}
}
//*****************************************************************************************************************
::rtl::OUString XCDGenerator::impl_encodeSpecialSigns( const ::rtl::OUString& sValue )
{
::rtl::OUStringBuffer sSource ( sValue );
::rtl::OUStringBuffer sDestination( 10000 );
sal_Int32 nCount = sValue.getLength();
sal_Int32 i = 0;
for( i=0; i<nCount; ++i )
{
sal_Unicode cSign = sSource.charAt(i);
switch( cSign )
{
// code &, ", ', <, > ...
case '&' : sDestination.appendAscii( "&amp;" );
break;
case '<' : sDestination.appendAscii( "&lt;" );
break;
case '>' : sDestination.appendAscii( "&gt;" );
break;
case '\'': sDestination.appendAscii( "&rsquo;" );
break;
case '\"': sDestination.appendAscii( "&quot;" );
break;
// copy all other letters
default : sDestination.append( cSign );
break;
}
}
return sDestination.makeStringAndClear();
}
//*****************************************************************************************************************
// Step over all elements of list to find one seperator, which isn't used for any value in list.
// We return an empty string if list contains no elements - because we must disable writing of
// "... cfg:seperator="<seperatorvalue> ..."
// => Otherwise we get a Sequence< OUString > with one empty element from configuration!!!
sal_Unicode XCDGenerator::impl_defineSeperator( const ::framework::StringList& lList )
{
static cSeperator1 = ' ';
static cSeperator2 = ';';
static cSeperator3 = '+';
static cSeperator4 = '-';
static cSeperator5 = '*';
// Start with first seperator.
// Step over all list items.
// If one item contains this seperator - try next one!
// If no new one avaliable (5 tests failed!) - show an error message for user.
// => File will be wrong then!
// If seperator was changed start search during list again ... because
// new seperator could exist at already compared elements!
sal_Unicode cSeperator = cSeperator1 ;
sal_Bool bOK = sal_False ;
ConstStringListIterator pItem = lList.begin();
while( bOK == sal_False )
{
if( pItem == lList.end() )
{
bOK = sal_True;
}
else
{
while( pItem!=lList.end() )
{
if( pItem->indexOf( cSeperator, 0 ) != -1 )
{
if( cSeperator == cSeperator1 )
{
cSeperator = cSeperator2;
pItem = lList.begin();
break;
}
else
if( cSeperator == cSeperator2 )
{
cSeperator = cSeperator3;
pItem = lList.begin();
break;
}
else
if( cSeperator == cSeperator3 )
{
cSeperator = cSeperator4;
pItem = lList.begin();
break;
}
else
if( cSeperator == cSeperator4 )
{
cSeperator = cSeperator5;
pItem = lList.begin();
break;
}
else
if( cSeperator == cSeperator5 )
{
LOG_ERROR( "XCDGenerator::impl_defineSeperator()", "Can't find seperator for given list! Generated XCD file will be wrong!" )
exit(-1);
}
}
else
{
++pItem;
}
}
}
}
return cSeperator;
}
//*****************************************************************************************************************
void XCDGenerator::impl_initFilterHashNew2Old( StringHash& aHash )
{
// key = new filter name, value = old name
aHash[DECLARE_ASCII("writer_StarOffice_XML_Writer" )] = DECLARE_ASCII("swriter: StarOffice XML (Writer)" );
aHash[DECLARE_ASCII("writer_StarWriter_50" )] = DECLARE_ASCII("swriter: StarWriter 5.0" );
aHash[DECLARE_ASCII("writer_StarWriter_50_VorlageTemplate" )] = DECLARE_ASCII("swriter: StarWriter 5.0 Vorlage/Template" );
aHash[DECLARE_ASCII("writer_StarWriter_40" )] = DECLARE_ASCII("swriter: StarWriter 4.0" );
aHash[DECLARE_ASCII("writer_StarWriter_40_VorlageTemplate" )] = DECLARE_ASCII("swriter: StarWriter 4.0 Vorlage/Template" );
aHash[DECLARE_ASCII("writer_StarWriter_30" )] = DECLARE_ASCII("swriter: StarWriter 3.0" );
aHash[DECLARE_ASCII("writer_StarWriter_30_VorlageTemplate" )] = DECLARE_ASCII("swriter: StarWriter 3.0 Vorlage/Template" );
aHash[DECLARE_ASCII("writer_StarWriter_20" )] = DECLARE_ASCII("swriter: StarWriter 2.0" );
aHash[DECLARE_ASCII("writer_StarWriter_10" )] = DECLARE_ASCII("swriter: StarWriter 1.0" );
aHash[DECLARE_ASCII("writer_StarWriter_DOS" )] = DECLARE_ASCII("swriter: StarWriter DOS" );
aHash[DECLARE_ASCII("writer_HTML_StarWriter" )] = DECLARE_ASCII("swriter: HTML (StarWriter)" );
aHash[DECLARE_ASCII("writer_Text" )] = DECLARE_ASCII("swriter: Text" );
aHash[DECLARE_ASCII("writer_Text_Unix" )] = DECLARE_ASCII("swriter: Text Unix" );
aHash[DECLARE_ASCII("writer_Text_Mac" )] = DECLARE_ASCII("swriter: Text Mac" );
aHash[DECLARE_ASCII("writer_Text_DOS" )] = DECLARE_ASCII("swriter: Text DOS" );
aHash[DECLARE_ASCII("writer_Rich_Text_Format" )] = DECLARE_ASCII("swriter: Rich Text Format" );
aHash[DECLARE_ASCII("writer_MS_Word_97" )] = DECLARE_ASCII("swriter: MS Word 97" );
aHash[DECLARE_ASCII("writer_MS_Word_95" )] = DECLARE_ASCII("swriter: MS Word 95" );
aHash[DECLARE_ASCII("writer_MS_Word_97_Vorlage" )] = DECLARE_ASCII("swriter: MS Word 97 Vorlage" );
aHash[DECLARE_ASCII("writer_MS_Word_95_Vorlage" )] = DECLARE_ASCII("swriter: MS Word 95 Vorlage" );
aHash[DECLARE_ASCII("writer_MS_WinWord_60" )] = DECLARE_ASCII("swriter: MS WinWord 6.0" );
aHash[DECLARE_ASCII("writer_MS_Word_6x_W4W" )] = DECLARE_ASCII("swriter: MS Word 6.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_WinWord_5" )] = DECLARE_ASCII("swriter: MS WinWord 5" );
aHash[DECLARE_ASCII("writer_MS_WinWord_2x_W4W" )] = DECLARE_ASCII("swriter: MS WinWord 2.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_MacWord_5x_W4W" )] = DECLARE_ASCII("swriter: MS MacWord 5.x (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Win_61_W4W" )] = DECLARE_ASCII("swriter: WordPerfect (Win) 6.1 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Win_70_W4W" )] = DECLARE_ASCII("swriter: WordPerfect (Win) 7.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_Win_1x_20_W4W" )] = DECLARE_ASCII("swriter: WordStar (Win) 1.x-2.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_70_W4W" )] = DECLARE_ASCII("swriter: WordStar 7.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Ami_Pro_11_12_W4W" )] = DECLARE_ASCII("swriter: Ami Pro 1.1-1.2 (W4W)" );
aHash[DECLARE_ASCII("writer_Ami_Pro_20_31_W4W" )] = DECLARE_ASCII("swriter: Ami Pro 2.0-3.1 (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Excel_40_StarWriter" )] = DECLARE_ASCII("swriter: MS Excel 4.0 (StarWriter)" );
aHash[DECLARE_ASCII("writer_MS_Excel_50_StarWriter" )] = DECLARE_ASCII("swriter: MS Excel 5.0 (StarWriter)" );
aHash[DECLARE_ASCII("writer_MS_Excel_95_StarWriter" )] = DECLARE_ASCII("swriter: MS Excel 95 (StarWriter)" );
aHash[DECLARE_ASCII("writer_MS_Works_20_DOS_W4W" )] = DECLARE_ASCII("swriter: MS Works 2.0 DOS (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Works_30_Win_W4W" )] = DECLARE_ASCII("swriter: MS Works 3.0 Win (W4W)" );
aHash[DECLARE_ASCII("writer_Lotus_1_2_3_10_DOS_StarWriter" )] = DECLARE_ASCII("swriter: Lotus 1-2-3 1.0 (DOS) (StarWriter)" );
aHash[DECLARE_ASCII("writer_Lotus_1_2_3_10_WIN_StarWriter" )] = DECLARE_ASCII("swriter: Lotus 1-2-3 1.0 (WIN) (StarWriter)" );
aHash[DECLARE_ASCII("writer_Frame_Maker_MIF_50_W4W" )] = DECLARE_ASCII("swriter: Frame Maker MIF 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Win_Write_3x_W4W" )] = DECLARE_ASCII("swriter: Win Write 3.x (W4W)" );
aHash[DECLARE_ASCII("writer_Text_encoded" )] = DECLARE_ASCII("swriter: Text (encoded)" );
aHash[DECLARE_ASCII("writer_MS_WinWord_1x_W4W" )] = DECLARE_ASCII("swriter: MS WinWord 1.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Word_5x_W4W" )] = DECLARE_ASCII("swriter: MS Word 5.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Word_4x_W4W" )] = DECLARE_ASCII("swriter: MS Word 4.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Word_3x_W4W" )] = DECLARE_ASCII("swriter: MS Word 3.x (W4W)" );
aHash[DECLARE_ASCII("writer_MS_MacWord_40_W4W" )] = DECLARE_ASCII("swriter: MS MacWord 4.0 (W4W)" );
aHash[DECLARE_ASCII("writer_MS_MacWord_30_W4W" )] = DECLARE_ASCII("swriter: MS MacWord 3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Mac_1_W4W" )] = DECLARE_ASCII("swriter: WordPerfect Mac 1 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Mac_2_W4W" )] = DECLARE_ASCII("swriter: WordPerfect Mac 2 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Mac_3_W4W" )] = DECLARE_ASCII("swriter: WordPerfect Mac 3 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Win_51_52_W4W" )] = DECLARE_ASCII("swriter: WordPerfect (Win) 5.1-5.2 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_Win_60_W4W" )] = DECLARE_ASCII("swriter: WordPerfect (Win) 6.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_41_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 4.1 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_42_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 4.2 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_50_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_51_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 5.1 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_60_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 6.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordPerfect_61_W4W" )] = DECLARE_ASCII("swriter: WordPerfect 6.1 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_2000_Rel_30_W4W" )] = DECLARE_ASCII("swriter: WordStar 2000 Rel. 3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_2000_Rel_35_W4W" )] = DECLARE_ASCII("swriter: WordStar 2000 Rel. 3.5 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_33x_W4W" )] = DECLARE_ASCII("swriter: WordStar 3.3x (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_345_W4W" )] = DECLARE_ASCII("swriter: WordStar 3.45 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_40_W4W" )] = DECLARE_ASCII("swriter: WordStar 4.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_50_W4W" )] = DECLARE_ASCII("swriter: WordStar 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_55_W4W" )] = DECLARE_ASCII("swriter: WordStar 5.5 (W4W)" );
aHash[DECLARE_ASCII("writer_WordStar_60_W4W" )] = DECLARE_ASCII("swriter: WordStar 6.0 (W4W)" );
aHash[DECLARE_ASCII("writer_MS_Works_40_Mac_W4W" )] = DECLARE_ASCII("swriter: MS Works 4.0 Mac (W4W)" );
aHash[DECLARE_ASCII("writer_Mac_Write_4x_50_W4W" )] = DECLARE_ASCII("swriter: Mac Write 4.x 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Mac_Write_II_W4W" )] = DECLARE_ASCII("swriter: Mac Write II (W4W)" );
aHash[DECLARE_ASCII("writer_Mac_Write_Pro_W4W" )] = DECLARE_ASCII("swriter: Mac Write Pro (W4W)" );
aHash[DECLARE_ASCII("writer_Lotus_Manuscript_W4W" )] = DECLARE_ASCII("swriter: Lotus Manuscript (W4W)" );
aHash[DECLARE_ASCII("writer_MASS_11_Rel_80_83_W4W" )] = DECLARE_ASCII("swriter: MASS 11 Rel. 8.0-8.3 (W4W)" );
aHash[DECLARE_ASCII("writer_MASS_11_Rel_85_90_W4W" )] = DECLARE_ASCII("swriter: MASS 11 Rel. 8.5-9.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Claris_Works_W4W" )] = DECLARE_ASCII("swriter: Claris Works (W4W)" );
aHash[DECLARE_ASCII("writer_CTOS_DEF_W4W" )] = DECLARE_ASCII("swriter: CTOS DEF (W4W)" );
aHash[DECLARE_ASCII("writer_OfficeWriter_40_W4W" )] = DECLARE_ASCII("swriter: OfficeWriter 4.0 (W4W)" );
aHash[DECLARE_ASCII("writer_OfficeWriter_50_W4W" )] = DECLARE_ASCII("swriter: OfficeWriter 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_OfficeWriter_6x_W4W" )] = DECLARE_ASCII("swriter: OfficeWriter 6.x (W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_III_W4W" )] = DECLARE_ASCII("swriter: XyWrite III ( W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_IIIP_W4W" )] = DECLARE_ASCII("swriter: XyWrite III+ ( W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_Signature_W4W" )] = DECLARE_ASCII("swriter: XyWrite Signature (W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_Sig_Win_W4W" )] = DECLARE_ASCII("swriter: XyWrite Sig. (Win) (W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_IV_W4W" )] = DECLARE_ASCII("swriter: XyWrite IV (W4W)" );
aHash[DECLARE_ASCII("writer_XyWrite_Win_10_W4W" )] = DECLARE_ASCII("swriter: XyWrite (Win) 1.0 (W4W)" );
aHash[DECLARE_ASCII("writer_XEROX_XIF_50_W4W" )] = DECLARE_ASCII("swriter: XEROX XIF 5.0 (W4W)" );
aHash[DECLARE_ASCII("writer_XEROX_XIF_50_Illustrator_W4W" )] = DECLARE_ASCII("swriter: XEROX XIF 5.0 (Illustrator) (W4W)" );
aHash[DECLARE_ASCII("writer_XEROX_XIF_60_Color_Bitmap_W4W" )] = DECLARE_ASCII("swriter: XEROX XIF 6.0 (Color Bitmap) (W4W)" );
aHash[DECLARE_ASCII("writer_XEROX_XIF_60_Res_Graphic_W4W" )] = DECLARE_ASCII("swriter: XEROX XIF 6.0 (Res Graphic) (W4W)" );
aHash[DECLARE_ASCII("writer_WriteNow_30_Macintosh_W4W" )] = DECLARE_ASCII("swriter: WriteNow 3.0 (Macintosh) (W4W)" );
aHash[DECLARE_ASCII("writer_Writing_Assistant_W4W" )] = DECLARE_ASCII("swriter: Writing Assistant (W4W)" );
aHash[DECLARE_ASCII("writer_VolksWriter_Deluxe_W4W" )] = DECLARE_ASCII("swriter: VolksWriter Deluxe (W4W)" );
aHash[DECLARE_ASCII("writer_VolksWriter_3_and_4_W4W" )] = DECLARE_ASCII("swriter: VolksWriter 3 and 4 (W4W)" );
aHash[DECLARE_ASCII("writer_MultiMate_33_W4W" )] = DECLARE_ASCII("swriter: MultiMate 3.3 (W4W)" );
aHash[DECLARE_ASCII("writer_MultiMate_Adv_36_W4W" )] = DECLARE_ASCII("swriter: MultiMate Adv. 3.6 (W4W)" );
aHash[DECLARE_ASCII("writer_MultiMate_Adv_II_37_W4W" )] = DECLARE_ASCII("swriter: MultiMate Adv. II 3.7 (W4W)" );
aHash[DECLARE_ASCII("writer_MultiMate_4_W4W" )] = DECLARE_ASCII("swriter: MultiMate 4 (W4W)" );
aHash[DECLARE_ASCII("writer_NAVY_DIF_W4W" )] = DECLARE_ASCII("swriter: NAVY DIF (W4W)" );
aHash[DECLARE_ASCII("writer_PFS_Write_W4W" )] = DECLARE_ASCII("swriter: PFS Write (W4W)" );
aHash[DECLARE_ASCII("writer_PFS_First_Choice_10_W4W" )] = DECLARE_ASCII("swriter: PFS First Choice 1.0 (W4W)" );
aHash[DECLARE_ASCII("writer_PFS_First_Choice_20_W4W" )] = DECLARE_ASCII("swriter: PFS First Choice 2.0 (W4W)" );
aHash[DECLARE_ASCII("writer_PFS_First_Choice_30_W4W" )] = DECLARE_ASCII("swriter: PFS First Choice 3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Professional_Write_10_W4W" )] = DECLARE_ASCII("swriter: Professional Write 1.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Professional_Write_2x_W4W" )] = DECLARE_ASCII("swriter: Professional Write 2.x (W4W)" );
aHash[DECLARE_ASCII("writer_Professional_Write_Plus_W4W" )] = DECLARE_ASCII("swriter: Professional Write Plus (W4W)" );
aHash[DECLARE_ASCII("writer_Peach_Text_W4W" )] = DECLARE_ASCII("swriter: Peach Text (W4W)" );
aHash[DECLARE_ASCII("writer_DCA_Revisable_Form_Text_W4W" )] = DECLARE_ASCII("swriter: DCA Revisable Form Text (W4W)" );
aHash[DECLARE_ASCII("writer_DCA_with_Display_Write_5_W4W" )] = DECLARE_ASCII("swriter: DCA with Display Write 5 (W4W)" );
aHash[DECLARE_ASCII("writer_DCAFFT_Final_Form_Text_W4W" )] = DECLARE_ASCII("swriter: DCA/FFT-Final Form Text (W4W)" );
aHash[DECLARE_ASCII("writer_DEC_DX_W4W" )] = DECLARE_ASCII("swriter: DEC DX (W4W)" );
aHash[DECLARE_ASCII("writer_DEC_WPS_PLUS_W4W" )] = DECLARE_ASCII("swriter: DEC WPS-PLUS (W4W)" );
aHash[DECLARE_ASCII("writer_DisplayWrite_20_4x_W4W" )] = DECLARE_ASCII("swriter: DisplayWrite 2.0-4.x (W4W)" );
aHash[DECLARE_ASCII("writer_DisplayWrite_5x_W4W" )] = DECLARE_ASCII("swriter: DisplayWrite 5.x (W4W)" );
aHash[DECLARE_ASCII("writer_DataGeneral_CEO_Write_W4W" )] = DECLARE_ASCII("swriter: DataGeneral CEO Write (W4W)" );
aHash[DECLARE_ASCII("writer_EBCDIC_W4W" )] = DECLARE_ASCII("swriter: EBCDIC (W4W)" );
aHash[DECLARE_ASCII("writer_Enable_W4W" )] = DECLARE_ASCII("swriter: Enable (W4W)" );
aHash[DECLARE_ASCII("writer_Frame_Maker_MIF_30_W4W" )] = DECLARE_ASCII("swriter: Frame Maker MIF 3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Frame_Maker_MIF_40_W4W" )] = DECLARE_ASCII("swriter: Frame Maker MIF 4.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Frame_Work_III_W4W" )] = DECLARE_ASCII("swriter: Frame Work III (W4W)" );
aHash[DECLARE_ASCII("writer_Frame_Work_IV_W4W" )] = DECLARE_ASCII("swriter: Frame Work IV (W4W)" );
aHash[DECLARE_ASCII("writer_HP_AdvanceWrite_Plus_W4W" )] = DECLARE_ASCII("swriter: HP AdvanceWrite Plus (W4W)" );
aHash[DECLARE_ASCII("writer_ICL_Office_Power_6_W4W" )] = DECLARE_ASCII("swriter: ICL Office Power 6 (W4W)" );
aHash[DECLARE_ASCII("writer_ICL_Office_Power_7_W4W" )] = DECLARE_ASCII("swriter: ICL Office Power 7 (W4W)" );
aHash[DECLARE_ASCII("writer_Interleaf_W4W" )] = DECLARE_ASCII("swriter: Interleaf (W4W)" );
aHash[DECLARE_ASCII("writer_Interleaf_5_6_W4W" )] = DECLARE_ASCII("swriter: Interleaf 5 - 6 (W4W)" );
aHash[DECLARE_ASCII("writer_Legacy_Winstar_onGO_W4W" )] = DECLARE_ASCII("swriter: Legacy Winstar onGO (W4W)" );
aHash[DECLARE_ASCII("writer_QA_Write_10_30_W4W" )] = DECLARE_ASCII("swriter: Q&A Write 1.0-3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_QA_Write_40_W4W" )] = DECLARE_ASCII("swriter: Q&A Write 4.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Rapid_File_10_W4W" )] = DECLARE_ASCII("swriter: Rapid File 1.0 (W4W)" );
aHash[DECLARE_ASCII("writer_Rapid_File_12_W4W" )] = DECLARE_ASCII("swriter: Rapid File 1.2 (W4W)" );
aHash[DECLARE_ASCII("writer_Samna_Word_IV_IV_Plus_W4W" )] = DECLARE_ASCII("swriter: Samna Word IV-IV Plus (W4W)" );
aHash[DECLARE_ASCII("writer_Total_Word_W4W" )] = DECLARE_ASCII("swriter: Total Word (W4W)" );
aHash[DECLARE_ASCII("writer_Uniplex_onGO_W4W" )] = DECLARE_ASCII("swriter: Uniplex onGO (W4W)" );
aHash[DECLARE_ASCII("writer_Uniplex_V7_V8_W4W" )] = DECLARE_ASCII("swriter: Uniplex V7-V8 (W4W)" );
aHash[DECLARE_ASCII("writer_Wang_PC_W4W" )] = DECLARE_ASCII("swriter: Wang PC (W4W)" );
aHash[DECLARE_ASCII("writer_Wang_II_SWP_W4W" )] = DECLARE_ASCII("swriter: Wang II SWP (W4W)" );
aHash[DECLARE_ASCII("writer_Wang_WP_Plus_W4W" )] = DECLARE_ASCII("swriter: Wang WP Plus (W4W)" );
aHash[DECLARE_ASCII("writer_WITA_W4W" )] = DECLARE_ASCII("swriter: WITA (W4W)" );
aHash[DECLARE_ASCII("writer_WiziWord_30_W4W" )] = DECLARE_ASCII("swriter: WiziWord 3.0 (W4W)" );
aHash[DECLARE_ASCII("writer_web_HTML" )] = DECLARE_ASCII("swriter/web: HTML" );
aHash[DECLARE_ASCII("writer_web_StarWriterWeb_50_VorlageTemplate" )] = DECLARE_ASCII("swriter/web: StarWriter/Web 5.0 Vorlage/Template" );
aHash[DECLARE_ASCII("writer_web_StarWriterWeb_40_VorlageTemplate" )] = DECLARE_ASCII("swriter/web: StarWriter/Web 4.0 Vorlage/Template" );
aHash[DECLARE_ASCII("writer_web_Text_StarWriterWeb" )] = DECLARE_ASCII("swriter/web: Text (StarWriter/Web)" );
aHash[DECLARE_ASCII("writer_web_Text_DOS_StarWriterWeb" )] = DECLARE_ASCII("swriter/web: Text DOS (StarWriter/Web)" );
aHash[DECLARE_ASCII("writer_web_Text_Mac_StarWriterWeb" )] = DECLARE_ASCII("swriter/web: Text Mac (StarWriter/Web)" );
aHash[DECLARE_ASCII("writer_web_Text_Unix_StarWriterWeb" )] = DECLARE_ASCII("swriter/web: Text Unix (StarWriter/Web)" );
aHash[DECLARE_ASCII("writer_web_StarWriter_50" )] = DECLARE_ASCII("swriter/web: StarWriter 5.0" );
aHash[DECLARE_ASCII("writer_web_StarWriter_40" )] = DECLARE_ASCII("swriter/web: StarWriter 4.0" );
aHash[DECLARE_ASCII("writer_web_StarWriter_30" )] = DECLARE_ASCII("swriter/web: StarWriter 3.0" );
aHash[DECLARE_ASCII("writer_web_Text_encoded" )] = DECLARE_ASCII("swriter/web: Text (encoded)" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_60GlobalDocument" )] = DECLARE_ASCII("swriter/GlobalDocument: StarOffice XML (GlobalDocument)" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_50GlobalDocument" )] = DECLARE_ASCII("swriter/GlobalDocument: StarWriter 5.0/GlobalDocument" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_40GlobalDocument" )] = DECLARE_ASCII("swriter/GlobalDocument: StarWriter 4.0/GlobalDocument" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_50" )] = DECLARE_ASCII("swriter/GlobalDocument: StarWriter 5.0" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_40" )] = DECLARE_ASCII("swriter/GlobalDocument: StarWriter 4.0" );
aHash[DECLARE_ASCII("writer_globaldocument_StarWriter_30" )] = DECLARE_ASCII("swriter/GlobalDocument: StarWriter 3.0" );
aHash[DECLARE_ASCII("writer_globaldocument_Text_encoded" )] = DECLARE_ASCII("swriter/GlobalDocument: Text (encoded)" );
aHash[DECLARE_ASCII("chart_StarOffice_XML_Chart" )] = DECLARE_ASCII("schart: StarOffice XML (Chart)" );
aHash[DECLARE_ASCII("chart_StarChart_50" )] = DECLARE_ASCII("schart: StarChart 5.0" );
aHash[DECLARE_ASCII("chart_StarChart_40" )] = DECLARE_ASCII("schart: StarChart 4.0" );
aHash[DECLARE_ASCII("chart_StarChart_30" )] = DECLARE_ASCII("schart: StarChart 3.0" );
aHash[DECLARE_ASCII("calc_StarOffice_XML_Calc" )] = DECLARE_ASCII("scalc: StarOffice XML (Calc)" );
aHash[DECLARE_ASCII("calc_StarCalc_50" )] = DECLARE_ASCII("scalc: StarCalc 5.0" );
aHash[DECLARE_ASCII("calc_StarCalc_50_VorlageTemplate" )] = DECLARE_ASCII("scalc: StarCalc 5.0 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_StarCalc_40" )] = DECLARE_ASCII("scalc: StarCalc 4.0" );
aHash[DECLARE_ASCII("calc_StarCalc_40_VorlageTemplate" )] = DECLARE_ASCII("scalc: StarCalc 4.0 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_StarCalc_30" )] = DECLARE_ASCII("scalc: StarCalc 3.0" );
aHash[DECLARE_ASCII("calc_StarCalc_30_VorlageTemplate" )] = DECLARE_ASCII("scalc: StarCalc 3.0 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_MS_Excel_97" )] = DECLARE_ASCII("scalc: MS Excel 97" );
aHash[DECLARE_ASCII("calc_MS_Excel_97_VorlageTemplate" )] = DECLARE_ASCII("scalc: MS Excel 97 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_MS_Excel_95" )] = DECLARE_ASCII("scalc: MS Excel 95" );
aHash[DECLARE_ASCII("calc_MS_Excel_95_VorlageTemplate" )] = DECLARE_ASCII("scalc: MS Excel 95 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_MS_Excel_5095" )] = DECLARE_ASCII("scalc: MS Excel 5.0/95" );
aHash[DECLARE_ASCII("calc_MS_Excel_5095_VorlageTemplate" )] = DECLARE_ASCII("scalc: MS Excel 5.0/95 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_MS_Excel_40" )] = DECLARE_ASCII("scalc: MS Excel 4.0" );
aHash[DECLARE_ASCII("calc_MS_Excel_40_VorlageTemplate" )] = DECLARE_ASCII("scalc: MS Excel 4.0 Vorlage/Template" );
aHash[DECLARE_ASCII("calc_Rich_Text_Format_StarCalc" )] = DECLARE_ASCII("scalc: Rich Text Format (StarCalc)" );
aHash[DECLARE_ASCII("calc_SYLK" )] = DECLARE_ASCII("scalc: SYLK" );
aHash[DECLARE_ASCII("calc_DIF" )] = DECLARE_ASCII("scalc: DIF" );
aHash[DECLARE_ASCII("calc_HTML_StarCalc" )] = DECLARE_ASCII("scalc: HTML (StarCalc)" );
aHash[DECLARE_ASCII("calc_dBase" )] = DECLARE_ASCII("scalc: dBase" );
aHash[DECLARE_ASCII("calc_Lotus" )] = DECLARE_ASCII("scalc: Lotus" );
aHash[DECLARE_ASCII("calc_StarCalc_10" )] = DECLARE_ASCII("scalc: StarCalc 1.0" );
aHash[DECLARE_ASCII("calc_Text_txt_csv_StarCalc" )] = DECLARE_ASCII("scalc: Text - txt - csv (StarCalc)" );
aHash[DECLARE_ASCII("impress_StarOffice_XML_Impress" )] = DECLARE_ASCII("simpress: StarOffice XML (Impress)" );
aHash[DECLARE_ASCII("impress_StarImpress_50" )] = DECLARE_ASCII("simpress: StarImpress 5.0" );
aHash[DECLARE_ASCII("impress_StarImpress_50_Vorlage" )] = DECLARE_ASCII("simpress: StarImpress 5.0 Vorlage" );
aHash[DECLARE_ASCII("impress_StarImpress_40" )] = DECLARE_ASCII("simpress: StarImpress 4.0" );
aHash[DECLARE_ASCII("impress_StarImpress_40_Vorlage" )] = DECLARE_ASCII("simpress: StarImpress 4.0 Vorlage" );
aHash[DECLARE_ASCII("impress_StarDraw_50_StarImpress" )] = DECLARE_ASCII("simpress: StarDraw 5.0 (StarImpress)" );
aHash[DECLARE_ASCII("impress_StarDraw_50_Vorlage_StarImpress" )] = DECLARE_ASCII("simpress: StarDraw 5.0 Vorlage (StarImpress)" );
aHash[DECLARE_ASCII("impress_StarDraw_30_StarImpress" )] = DECLARE_ASCII("simpress: StarDraw 3.0 (StarImpress)" );
aHash[DECLARE_ASCII("impress_StarDraw_30_Vorlage_StarImpress" )] = DECLARE_ASCII("simpress: StarDraw 3.0 Vorlage (StarImpress)" );
aHash[DECLARE_ASCII("impress_MS_PowerPoint_97" )] = DECLARE_ASCII("simpress: MS PowerPoint 97" );
aHash[DECLARE_ASCII("impress_MS_PowerPoint_97_Vorlage" )] = DECLARE_ASCII("simpress: MS PowerPoint 97 Vorlage" );
aHash[DECLARE_ASCII("impress_CGM_Computer_Graphics_Metafile" )] = DECLARE_ASCII("simpress: CGM - Computer Graphics Metafile" );
aHash[DECLARE_ASCII("impress_StarImpress_50_packed" )] = DECLARE_ASCII("simpress: StarImpress 5.0 (packed)" );
aHash[DECLARE_ASCII("draw_StarOffice_XML_Draw" )] = DECLARE_ASCII("sdraw: StarOffice XML (Draw)" );
aHash[DECLARE_ASCII("draw_GIF_Graphics_Interchange" )] = DECLARE_ASCII("sdraw: GIF - Graphics Interchange" );
aHash[DECLARE_ASCII("draw_PCD_Photo_CD" )] = DECLARE_ASCII("sdraw: PCD - Photo CD" );
aHash[DECLARE_ASCII("draw_PCX_Zsoft_Paintbrush" )] = DECLARE_ASCII("sdraw: PCX - Zsoft Paintbrush" );
aHash[DECLARE_ASCII("draw_PSD_Adobe_Photoshop" )] = DECLARE_ASCII("sdraw: PSD - Adobe Photoshop" );
aHash[DECLARE_ASCII("draw_PNG_Portable_Network_Graphic" )] = DECLARE_ASCII("sdraw: PNG - Portable Network Graphic" );
aHash[DECLARE_ASCII("draw_StarDraw_50" )] = DECLARE_ASCII("sdraw: StarDraw 5.0" );
aHash[DECLARE_ASCII("draw_PBM_Portable_Bitmap" )] = DECLARE_ASCII("sdraw: PBM - Portable Bitmap" );
aHash[DECLARE_ASCII("draw_PGM_Portable_Graymap" )] = DECLARE_ASCII("sdraw: PGM - Portable Graymap" );
aHash[DECLARE_ASCII("draw_PPM_Portable_Pixelmap" )] = DECLARE_ASCII("sdraw: PPM - Portable Pixelmap" );
aHash[DECLARE_ASCII("draw_RAS_Sun_Rasterfile" )] = DECLARE_ASCII("sdraw: RAS - Sun Rasterfile" );
aHash[DECLARE_ASCII("draw_TGA_Truevision_TARGA" )] = DECLARE_ASCII("sdraw: TGA - Truevision TARGA" );
aHash[DECLARE_ASCII("draw_SGV_StarDraw_20" )] = DECLARE_ASCII("sdraw: SGV - StarDraw 2.0" );
aHash[DECLARE_ASCII("draw_TIF_Tag_Image_File" )] = DECLARE_ASCII("sdraw: TIF - Tag Image File" );
aHash[DECLARE_ASCII("draw_SGF_StarOffice_Writer_SGF" )] = DECLARE_ASCII("sdraw: SGF - StarOffice Writer SGF" );
aHash[DECLARE_ASCII("draw_XPM" )] = DECLARE_ASCII("sdraw: XPM" );
aHash[DECLARE_ASCII("gif_Graphics_Interchange" )] = DECLARE_ASCII("sdraw: GIF - Graphics Interchange" );
aHash[DECLARE_ASCII("pcd_Photo_CD" )] = DECLARE_ASCII("sdraw: PCD - Photo CD" );
aHash[DECLARE_ASCII("pcx_Zsoft_Paintbrush" )] = DECLARE_ASCII("sdraw: PCX - Zsoft Paintbrush" );
aHash[DECLARE_ASCII("psd_Adobe_Photoshop" )] = DECLARE_ASCII("sdraw: PSD - Adobe Photoshop" );
aHash[DECLARE_ASCII("png_Portable_Network_Graphic" )] = DECLARE_ASCII("sdraw: PNG - Portable Network Graphic" );
aHash[DECLARE_ASCII("pbm_Portable_Bitmap" )] = DECLARE_ASCII("sdraw: PBM - Portable Bitmap" );
aHash[DECLARE_ASCII("pgm_Portable_Graymap" )] = DECLARE_ASCII("sdraw: PGM - Portable Graymap" );
aHash[DECLARE_ASCII("ppm_Portable_Pixelmap" )] = DECLARE_ASCII("sdraw: PPM - Portable Pixelmap" );
aHash[DECLARE_ASCII("ras_Sun_Rasterfile" )] = DECLARE_ASCII("sdraw: RAS - Sun Rasterfile" );
aHash[DECLARE_ASCII("tga_Truevision_TARGA" )] = DECLARE_ASCII("sdraw: TGA - Truevision TARGA" );
aHash[DECLARE_ASCII("sgv_StarDraw_20" )] = DECLARE_ASCII("sdraw: SGV - StarDraw 2.0" );
aHash[DECLARE_ASCII("tif_Tag_Image_File" )] = DECLARE_ASCII("sdraw: TIF - Tag Image File" );
aHash[DECLARE_ASCII("sgf_StarOffice_Writer_SGF" )] = DECLARE_ASCII("sdraw: SGF - StarOffice Writer SGF" );
aHash[DECLARE_ASCII("xpm_XPM" )] = DECLARE_ASCII("sdraw: XPM" );
aHash[DECLARE_ASCII("draw_StarDraw_50_Vorlage" )] = DECLARE_ASCII("sdraw: StarDraw 5.0 Vorlage" );
aHash[DECLARE_ASCII("draw_StarImpress_50_StarDraw" )] = DECLARE_ASCII("sdraw: StarImpress 5.0 (StarDraw)" );
aHash[DECLARE_ASCII("draw_StarImpress_50_Vorlage_StarDraw" )] = DECLARE_ASCII("sdraw: StarImpress 5.0 Vorlage (StarDraw)" );
aHash[DECLARE_ASCII("draw_StarImpress_40_StarDraw" )] = DECLARE_ASCII("sdraw: StarImpress 4.0 (StarDraw)" );
aHash[DECLARE_ASCII("draw_StarImpress_40_Vorlage_StarDraw" )] = DECLARE_ASCII("sdraw: StarImpress 4.0 Vorlage (StarDraw)" );
aHash[DECLARE_ASCII("draw_StarDraw_30" )] = DECLARE_ASCII("sdraw: StarDraw 3.0" );
aHash[DECLARE_ASCII("draw_StarDraw_30_Vorlage" )] = DECLARE_ASCII("sdraw: StarDraw 3.0 Vorlage" );
aHash[DECLARE_ASCII("draw_EMF_MS_Windows_Metafile" )] = DECLARE_ASCII("sdraw: EMF - MS Windows Metafile" );
aHash[DECLARE_ASCII("draw_MET_OS2_Metafile" )] = DECLARE_ASCII("sdraw: MET - OS/2 Metafile" );
aHash[DECLARE_ASCII("draw_DXF_AutoCAD_Interchange" )] = DECLARE_ASCII("sdraw: DXF - AutoCAD Interchange" );
aHash[DECLARE_ASCII("draw_EPS_Encapsulated_PostScript" )] = DECLARE_ASCII("sdraw: EPS - Encapsulated PostScript" );
aHash[DECLARE_ASCII("draw_WMF_MS_Windows_Metafile" )] = DECLARE_ASCII("sdraw: WMF - MS Windows Metafile" );
aHash[DECLARE_ASCII("draw_PCT_Mac_Pict" )] = DECLARE_ASCII("sdraw: PCT - Mac Pict" );
aHash[DECLARE_ASCII("draw_SVM_StarView_Metafile" )] = DECLARE_ASCII("sdraw: SVM - StarView Metafile" );
aHash[DECLARE_ASCII("draw_BMP_MS_Windows" )] = DECLARE_ASCII("sdraw: BMP - MS Windows" );
aHash[DECLARE_ASCII("draw_JPG_JPEG" )] = DECLARE_ASCII("sdraw: JPG - JPEG" );
aHash[DECLARE_ASCII("draw_XBM_X_Consortium" )] = DECLARE_ASCII("sdraw: XBM - X-Consortium" );
aHash[DECLARE_ASCII("emf_MS_Windows_Metafile" )] = DECLARE_ASCII("sdraw: EMF - MS Windows Metafile" );
aHash[DECLARE_ASCII("met_OS2_Metafile" )] = DECLARE_ASCII("sdraw: MET - OS/2 Metafile" );
aHash[DECLARE_ASCII("dxf_AutoCAD_Interchange" )] = DECLARE_ASCII("sdraw: DXF - AutoCAD Interchange" );
aHash[DECLARE_ASCII("eps_Encapsulated_PostScript" )] = DECLARE_ASCII("sdraw: EPS - Encapsulated PostScript" );
aHash[DECLARE_ASCII("wmf_MS_Windows_Metafile" )] = DECLARE_ASCII("sdraw: WMF - MS Windows Metafile" );
aHash[DECLARE_ASCII("pct_Mac_Pict" )] = DECLARE_ASCII("sdraw: PCT - Mac Pict" );
aHash[DECLARE_ASCII("svm_StarView_Metafile" )] = DECLARE_ASCII("sdraw: SVM - StarView Metafile" );
aHash[DECLARE_ASCII("bmp_MS_Windows" )] = DECLARE_ASCII("sdraw: BMP - MS Windows" );
aHash[DECLARE_ASCII("jpg_JPEG" )] = DECLARE_ASCII("sdraw: JPG - JPEG" );
aHash[DECLARE_ASCII("xbm_X_Consortium" )] = DECLARE_ASCII("sdraw: XBM - X-Consortium" );
aHash[DECLARE_ASCII("math_StarOffice_XML_Math" )] = DECLARE_ASCII("smath: StarOffice XML (Math)" );
aHash[DECLARE_ASCII("math_MathML_XML_Math" )] = DECLARE_ASCII("smath: MathML XML (Math)" );
aHash[DECLARE_ASCII("math_StarMath_50" )] = DECLARE_ASCII("smath: StarMath 5.0" );
aHash[DECLARE_ASCII("math_StarMath_40" )] = DECLARE_ASCII("smath: StarMath 4.0" );
aHash[DECLARE_ASCII("math_StarMath_30" )] = DECLARE_ASCII("smath: StarMath 3.0" );
aHash[DECLARE_ASCII("math_StarMath_20" )] = DECLARE_ASCII("smath: StarMath 2.0" );
aHash[DECLARE_ASCII("math_MathType_3x" )] = DECLARE_ASCII("smath: MathType 3.x" );
}
//*****************************************************************************************************************
::rtl::OUString XCDGenerator::impl_getOldFilterName( const ::rtl::OUString& sNewName )
{
::rtl::OUString sOldName;
ConstStringHashIterator pEntry = m_aData.aOldFilterNamesHash.find(sNewName);
if( pEntry==m_aData.aOldFilterNamesHash.end() )
{
sOldName = sNewName;
}
else
{
sOldName = m_aData.aOldFilterNamesHash[sNewName];
}
return sOldName;
}
//*****************************************************************************************************************
void XCDGenerator::impl_classifyType( const AppMember& rData, const ::rtl::OUString& sTypeName, EFilterPackage& ePackage )
{
ePackage = E_STANDARD;
// Step over all registered filters for this type ...
// Classify all of these filters. If one of them a standard filter ...
// type must be a standard type too - otherwise not!
CheckedStringListIterator pIterator ;
::rtl::OUString sFilterName ;
sal_Int32 nOrder ;
while( rData.pFilterCache->searchFilterForType( sTypeName, pIterator, sFilterName ) == sal_True )
{
EFilterPackage eFilterPackage;
XCDGenerator::impl_classifyFilter( rData, sFilterName, eFilterPackage, nOrder );
if( eFilterPackage == E_STANDARD )
{
ePackage = E_STANDARD;
break;
}
}
}
//*****************************************************************************************************************
void XCDGenerator::impl_classifyFilter( const AppMember& rData, const ::rtl::OUString& sFilterName, EFilterPackage& ePackage, sal_Int32& nOrder )
{
// a) For versions less then 4 => use hard coded list of filter names to differ between standard or additional filters.
// Why? This version don't support the order flag or hasn't set it right!
// b) For version greater then 3 => use order of currently cached types in FilterCache!
ePackage = E_STANDARD;
nOrder = 0;
// writer
if( sFilterName == DECLARE_ASCII("writer_StarOffice_XML_Writer" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("writer_StarOffice_XML_Writer_Template" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_50" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_50_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_40" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_40_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_30" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_30_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("writer_StarWriter_20" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_97" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_97_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_95" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_95_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 13; } else
if( sFilterName == DECLARE_ASCII("writer_MS_WinWord_2x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 14; } else
if( sFilterName == DECLARE_ASCII("writer_MS_WinWord_1x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 15; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_6x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 16; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_5x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 17; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_4x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 18; } else
if( sFilterName == DECLARE_ASCII("writer_MS_Word_3x_W4W" ) ) { ePackage = E_STANDARD; nOrder = 19; } else
if( sFilterName == DECLARE_ASCII("writer_WordPerfect_Win_70_W4W" ) ) { ePackage = E_STANDARD; nOrder = 20; } else
if( sFilterName == DECLARE_ASCII("writer_WordPerfect_Win_61_W4W" ) ) { ePackage = E_STANDARD; nOrder = 21; } else
if( sFilterName == DECLARE_ASCII("writer_WordPerfect_Win_60_W4W" ) ) { ePackage = E_STANDARD; nOrder = 22; } else
if( sFilterName == DECLARE_ASCII("writer_WordPerfect_Win_51_52_W4W" ) ) { ePackage = E_STANDARD; nOrder = 23; } else
if( sFilterName == DECLARE_ASCII("writer_HTML_StarWriter" ) ) { ePackage = E_STANDARD; nOrder = 24; } else
if( sFilterName == DECLARE_ASCII("writer_Text" ) ) { ePackage = E_STANDARD; nOrder = 25; } else
if( sFilterName == DECLARE_ASCII("writer_Text_encoded" ) ) { ePackage = E_STANDARD; nOrder = 26; } else
if( sFilterName == DECLARE_ASCII("writer_Text_DOS" ) ) { ePackage = E_STANDARD; nOrder = 27; } else
if( sFilterName == DECLARE_ASCII("writer_Text_Unix" ) ) { ePackage = E_STANDARD; nOrder = 28; } else
if( sFilterName == DECLARE_ASCII("writer_Text_Mac" ) ) { ePackage = E_STANDARD; nOrder = 29; } else
if( sFilterName == DECLARE_ASCII("writer_Rich_Text_Format" ) ) { ePackage = E_STANDARD; nOrder = 30; }
// writer web
if( sFilterName == DECLARE_ASCII("writer_web_HTML" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarOffice_XML_Writer" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarOffice_XML_Writer_Web_Template" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarWriter_50" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarWriterWeb_50_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarWriter_40" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarWriterWeb_40_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("writer_web_StarWriter_30" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("writer_web_Text_StarWriterWeb" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("writer_web_Text_encoded" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("writer_web_Text_DOS_StarWriterWeb" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("writer_web_Text_Unix_StarWriterWeb" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("writer_web_Text_Mac_StarWriterWeb" ) ) { ePackage = E_STANDARD; nOrder = 13; }
// global document
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarOffice_XML_Writer_GlobalDocument" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarOffice_XML_Writer" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarWriter_50" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarWriter_50GlobalDocument" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarWriter_40" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarWriter_40GlobalDocument" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_StarWriter_30" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("writer_globaldocument_Text_encoded" ) ) { ePackage = E_STANDARD; nOrder = 8; }
// calc
if( sFilterName == DECLARE_ASCII("calc_StarOffice_XML_Calc" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("calc_StarOffice_XML_Calc_Template" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_50" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_50_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_40" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_40_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_30" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_30_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("calc_StarCalc_10" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_97" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_97_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_95" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_95_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 13; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_5095" ) ) { ePackage = E_STANDARD; nOrder = 14; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_5095_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 15; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_40" ) ) { ePackage = E_STANDARD; nOrder = 16; } else
if( sFilterName == DECLARE_ASCII("calc_MS_Excel_40_VorlageTemplate" ) ) { ePackage = E_STANDARD; nOrder = 17; } else
if( sFilterName == DECLARE_ASCII("calc_HTML_StarCalc" ) ) { ePackage = E_STANDARD; nOrder = 18; } else
if( sFilterName == DECLARE_ASCII("calc_HTML_WebQuery" ) ) { ePackage = E_STANDARD; nOrder = 19; } else
if( sFilterName == DECLARE_ASCII("calc_Rich_Text_Format_StarCalc" ) ) { ePackage = E_STANDARD; nOrder = 20; } else
if( sFilterName == DECLARE_ASCII("calc_Text_txt_csv_StarCalc" ) ) { ePackage = E_STANDARD; nOrder = 21; } else
if( sFilterName == DECLARE_ASCII("calc_dBase" ) ) { ePackage = E_STANDARD; nOrder = 22; } else
if( sFilterName == DECLARE_ASCII("calc_Lotus" ) ) { ePackage = E_STANDARD; nOrder = 23; } else
if( sFilterName == DECLARE_ASCII("calc_SYLK" ) ) { ePackage = E_STANDARD; nOrder = 24; } else
if( sFilterName == DECLARE_ASCII("calc_DIF" ) ) { ePackage = E_STANDARD; nOrder = 25; }
// impress
if( sFilterName == DECLARE_ASCII("impress_StarOffice_XML_Impress" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("impress_StarOffice_XML_Impress_Template" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("impress_StarImpress_50" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("impress_StarImpress_50_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("impress_StarImpress_50_packed" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("impress_StarImpress_40" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("impress_StarImpress_40_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("impress_MS_PowerPoint_97" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("impress_MS_PowerPoint_97_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("impress_StarOffice_XML_Draw" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("impress_StarDraw_50_StarImpress" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("impress_StarDraw_50_Vorlage_StarImpress" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("impress_StarDraw_30_StarImpress" ) ) { ePackage = E_STANDARD; nOrder = 13; } else
if( sFilterName == DECLARE_ASCII("impress_StarDraw_30_Vorlage_StarImpress" ) ) { ePackage = E_STANDARD; nOrder = 14; } else
if( sFilterName == DECLARE_ASCII("impress_CGM_Computer_Graphics_Metafile" ) ) { ePackage = E_STANDARD; nOrder = 15; }
// draw
if( sFilterName == DECLARE_ASCII("draw_StarOffice_XML_Draw" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("draw_StarOffice_XML_Draw_Template" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("draw_StarDraw_50" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("draw_StarDraw_50_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("draw_StarDraw_30" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("draw_StarDraw_30_Vorlage" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("draw_StarOffice_XML_Impress" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("draw_StarImpress_50_StarDraw" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("draw_StarImpress_50_Vorlage_StarDraw" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("draw_StarImpress_40_StarDraw" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("draw_StarImpress_40_Vorlage_StarDraw" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("draw_SGV_StarDraw_20" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("draw_SGF_StarOffice_Writer_SGF" ) ) { ePackage = E_STANDARD; nOrder = 13; } else
if( sFilterName == DECLARE_ASCII("draw_SVM_StarView_Metafile" ) ) { ePackage = E_STANDARD; nOrder = 14; } else
if( sFilterName == DECLARE_ASCII("draw_WMF_MS_Windows_Metafile" ) ) { ePackage = E_STANDARD; nOrder = 15; } else
if( sFilterName == DECLARE_ASCII("draw_EMF_MS_Windows_Metafile" ) ) { ePackage = E_STANDARD; nOrder = 16; } else
if( sFilterName == DECLARE_ASCII("draw_EPS_Encapsulated_PostScript" ) ) { ePackage = E_STANDARD; nOrder = 17; } else
if( sFilterName == DECLARE_ASCII("draw_DXF_AutoCAD_Interchange" ) ) { ePackage = E_STANDARD; nOrder = 18; } else
if( sFilterName == DECLARE_ASCII("draw_BMP_MS_Windows" ) ) { ePackage = E_STANDARD; nOrder = 19; } else
if( sFilterName == DECLARE_ASCII("draw_GIF_Graphics_Interchange" ) ) { ePackage = E_STANDARD; nOrder = 20; } else
if( sFilterName == DECLARE_ASCII("draw_JPG_JPEG" ) ) { ePackage = E_STANDARD; nOrder = 21; } else
if( sFilterName == DECLARE_ASCII("draw_MET_OS2_Metafile" ) ) { ePackage = E_STANDARD; nOrder = 22; } else
if( sFilterName == DECLARE_ASCII("draw_PBM_Portable_Bitmap" ) ) { ePackage = E_STANDARD; nOrder = 23; } else
if( sFilterName == DECLARE_ASCII("draw_PCD_Photo_CD_Base" ) ) { ePackage = E_STANDARD; nOrder = 24; } else
if( sFilterName == DECLARE_ASCII("draw_PCD_Photo_CD_Base4" ) ) { ePackage = E_STANDARD; nOrder = 25; } else
if( sFilterName == DECLARE_ASCII("draw_PCD_Photo_CD_Base16" ) ) { ePackage = E_STANDARD; nOrder = 26; } else
if( sFilterName == DECLARE_ASCII("draw_PCT_Mac_Pict" ) ) { ePackage = E_STANDARD; nOrder = 27; } else
if( sFilterName == DECLARE_ASCII("draw_PCX_Zsoft_Paintbrush" ) ) { ePackage = E_STANDARD; nOrder = 28; } else
if( sFilterName == DECLARE_ASCII("draw_PGM_Portable_Graymap" ) ) { ePackage = E_STANDARD; nOrder = 29; } else
if( sFilterName == DECLARE_ASCII("draw_PNG_Portable_Network_Graphic" ) ) { ePackage = E_STANDARD; nOrder = 30; } else
if( sFilterName == DECLARE_ASCII("draw_PPM_Portable_Pixelmap" ) ) { ePackage = E_STANDARD; nOrder = 31; } else
if( sFilterName == DECLARE_ASCII("draw_PSD_Adobe_Photoshop" ) ) { ePackage = E_STANDARD; nOrder = 32; } else
if( sFilterName == DECLARE_ASCII("draw_RAS_Sun_Rasterfile" ) ) { ePackage = E_STANDARD; nOrder = 33; } else
if( sFilterName == DECLARE_ASCII("draw_TGA_Truevision_TARGA" ) ) { ePackage = E_STANDARD; nOrder = 34; } else
if( sFilterName == DECLARE_ASCII("draw_TIF_Tag_Image_File" ) ) { ePackage = E_STANDARD; nOrder = 35; } else
if( sFilterName == DECLARE_ASCII("draw_XBM_X_Consortium" ) ) { ePackage = E_STANDARD; nOrder = 36; } else
if( sFilterName == DECLARE_ASCII("draw_XPM" ) ) { ePackage = E_STANDARD; nOrder = 37; }
// chart
if( sFilterName == DECLARE_ASCII("chart_StarOffice_XML_Chart" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("chart_StarChart_50" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("chart_StarChart_40" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("chart_StarChart_30" ) ) { ePackage = E_STANDARD; nOrder = 4; }
// math
if( sFilterName == DECLARE_ASCII("math_StarOffice_XML_Math" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("math_StarMath_50" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("math_StarMath_40" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("math_StarMath_30" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("math_StarMath_20" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("math_MathML_XML_Math" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("math_MathType_3x" ) ) { ePackage = E_STANDARD; nOrder = 7; }
// graphics
if( sFilterName == DECLARE_ASCII("bmp_Import" ) ) { ePackage = E_STANDARD; nOrder = 1; } else
if( sFilterName == DECLARE_ASCII("bmp_Export" ) ) { ePackage = E_STANDARD; nOrder = 2; } else
if( sFilterName == DECLARE_ASCII("dxf_Import" ) ) { ePackage = E_STANDARD; nOrder = 3; } else
if( sFilterName == DECLARE_ASCII("emf_Import" ) ) { ePackage = E_STANDARD; nOrder = 4; } else
if( sFilterName == DECLARE_ASCII("emf_Export" ) ) { ePackage = E_STANDARD; nOrder = 5; } else
if( sFilterName == DECLARE_ASCII("eps_Import" ) ) { ePackage = E_STANDARD; nOrder = 6; } else
if( sFilterName == DECLARE_ASCII("eps_Export" ) ) { ePackage = E_STANDARD; nOrder = 7; } else
if( sFilterName == DECLARE_ASCII("gif_Import" ) ) { ePackage = E_STANDARD; nOrder = 8; } else
if( sFilterName == DECLARE_ASCII("gif_Export" ) ) { ePackage = E_STANDARD; nOrder = 9; } else
if( sFilterName == DECLARE_ASCII("jpg_Import" ) ) { ePackage = E_STANDARD; nOrder = 10; } else
if( sFilterName == DECLARE_ASCII("jpg_Export" ) ) { ePackage = E_STANDARD; nOrder = 11; } else
if( sFilterName == DECLARE_ASCII("met_Import" ) ) { ePackage = E_STANDARD; nOrder = 12; } else
if( sFilterName == DECLARE_ASCII("met_Export" ) ) { ePackage = E_STANDARD; nOrder = 13; } else
if( sFilterName == DECLARE_ASCII("pbm_Import" ) ) { ePackage = E_STANDARD; nOrder = 14; } else
if( sFilterName == DECLARE_ASCII("pbm_Export" ) ) { ePackage = E_STANDARD; nOrder = 15; } else
if( sFilterName == DECLARE_ASCII("pcd_Import_Base16" ) ) { ePackage = E_STANDARD; nOrder = 16; } else
if( sFilterName == DECLARE_ASCII("pcd_Import_Base4" ) ) { ePackage = E_STANDARD; nOrder = 17; } else
if( sFilterName == DECLARE_ASCII("pcd_Import_Base" ) ) { ePackage = E_STANDARD; nOrder = 18; } else
if( sFilterName == DECLARE_ASCII("pct_Import" ) ) { ePackage = E_STANDARD; nOrder = 19; } else
if( sFilterName == DECLARE_ASCII("pct_Export" ) ) { ePackage = E_STANDARD; nOrder = 20; } else
if( sFilterName == DECLARE_ASCII("pcx_Import" ) ) { ePackage = E_STANDARD; nOrder = 21; } else
if( sFilterName == DECLARE_ASCII("pgm_Import" ) ) { ePackage = E_STANDARD; nOrder = 22; } else
if( sFilterName == DECLARE_ASCII("pgm_Export" ) ) { ePackage = E_STANDARD; nOrder = 23; } else
if( sFilterName == DECLARE_ASCII("png_Import" ) ) { ePackage = E_STANDARD; nOrder = 24; } else
if( sFilterName == DECLARE_ASCII("png_Export" ) ) { ePackage = E_STANDARD; nOrder = 25; } else
if( sFilterName == DECLARE_ASCII("ppm_Import" ) ) { ePackage = E_STANDARD; nOrder = 26; } else
if( sFilterName == DECLARE_ASCII("ppm_Export" ) ) { ePackage = E_STANDARD; nOrder = 27; } else
if( sFilterName == DECLARE_ASCII("psd_Import" ) ) { ePackage = E_STANDARD; nOrder = 28; } else
if( sFilterName == DECLARE_ASCII("ras_Import" ) ) { ePackage = E_STANDARD; nOrder = 29; } else
if( sFilterName == DECLARE_ASCII("ras_Export" ) ) { ePackage = E_STANDARD; nOrder = 30; } else
if( sFilterName == DECLARE_ASCII("sgf_Import" ) ) { ePackage = E_STANDARD; nOrder = 31; } else
if( sFilterName == DECLARE_ASCII("sgv_Import" ) ) { ePackage = E_STANDARD; nOrder = 32; } else
if( sFilterName == DECLARE_ASCII("svg_Export" ) ) { ePackage = E_STANDARD; nOrder = 33; } else
if( sFilterName == DECLARE_ASCII("svm_Import" ) ) { ePackage = E_STANDARD; nOrder = 34; } else
if( sFilterName == DECLARE_ASCII("svm_Export" ) ) { ePackage = E_STANDARD; nOrder = 35; } else
if( sFilterName == DECLARE_ASCII("tga_Import" ) ) { ePackage = E_STANDARD; nOrder = 36; } else
if( sFilterName == DECLARE_ASCII("tif_Import" ) ) { ePackage = E_STANDARD; nOrder = 37; } else
if( sFilterName == DECLARE_ASCII("tif_Export" ) ) { ePackage = E_STANDARD; nOrder = 38; } else
if( sFilterName == DECLARE_ASCII("wmf_Import" ) ) { ePackage = E_STANDARD; nOrder = 39; } else
if( sFilterName == DECLARE_ASCII("wmf_Export" ) ) { ePackage = E_STANDARD; nOrder = 40; } else
if( sFilterName == DECLARE_ASCII("xbm_Import" ) ) { ePackage = E_STANDARD; nOrder = 41; } else
if( sFilterName == DECLARE_ASCII("xpm_Import" ) ) { ePackage = E_STANDARD; nOrder = 42; } else
if( sFilterName == DECLARE_ASCII("xpm_Export" ) ) { ePackage = E_STANDARD; nOrder = 43; }
}
//*****************************************************************************************************************
void XCDGenerator::impl_orderAlphabetical( css::uno::Sequence< ::rtl::OUString >& lList )
{
::std::vector< ::rtl::OUString > lSortedList;
sal_Int32 nCount ;
sal_Int32 nItem ;
// Copy sequence to vector
nCount = lList.getLength();
for( nItem=0; nItem<nCount; ++nItem )
{
lSortedList.push_back( lList[nItem] );
}
// sort in a alphabetical order
::std::sort( lSortedList.begin(), lSortedList.end() );
// copy sorted list back to sequence
nItem = 0;
for( ::std::vector< ::rtl::OUString >::iterator pIterator=lSortedList.begin(); pIterator!=lSortedList.end(); ++pIterator )
{
lList[nItem] = *pIterator;
++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 )
{
return impl_encodeSpecialSigns( 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();
}
*/
}