diff options
author | Andreas Bille <abi@openoffice.org> | 2001-10-31 12:08:14 +0000 |
---|---|---|
committer | Andreas Bille <abi@openoffice.org> | 2001-10-31 12:08:14 +0000 |
commit | c5718b941491ffaa937767c579627444c0957b86 (patch) | |
tree | cad76214c1d9c131b5a227ef6ae498f941dffc35 /xmlhelp | |
parent | f2ecdf1d78e9836cda5bdde9b4c709aeacf36292 (diff) |
#83054#
Now reading the necessary variables( provider.cxx ),
setting them at the xslt-processor and modifying titles( urlparameter.cxx ),
as well as defining the replacement and doing it for active help and keywordindex also( databases.cxx ).
Diffstat (limited to 'xmlhelp')
-rw-r--r-- | xmlhelp/source/cxxhelp/provider/databases.cxx | 328 | ||||
-rw-r--r-- | xmlhelp/source/cxxhelp/provider/provider.cxx | 258 | ||||
-rw-r--r-- | xmlhelp/source/cxxhelp/provider/urlparameter.cxx | 77 |
3 files changed, 421 insertions, 242 deletions
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx index 8255a92e8bd2..a97cc4ccc743 100644 --- a/xmlhelp/source/cxxhelp/provider/databases.cxx +++ b/xmlhelp/source/cxxhelp/provider/databases.cxx @@ -2,9 +2,9 @@ * * $RCSfile: databases.cxx,v $ * - * $Revision: 1.24 $ + * $Revision: 1.25 $ * - * last change: $Author: hr $ $Date: 2001-10-24 10:55:13 $ + * last change: $Author: abi $ $Date: 2001-10-31 13:08:14 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -84,10 +84,11 @@ #ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_ #include <com/sun/star/lang/Locale.hpp> #endif +#ifndef _RTL_USTRBUF_HXX_ +#include <rtl/ustrbuf.hxx> +#endif #include "inputstream.hxx" -#include <algorithm> - using namespace chelp; using namespace com::sun::star::uno; @@ -98,6 +99,11 @@ using namespace com::sun::star::lang; Databases::Databases( const rtl::OUString& instPath, + const rtl::OUString& productName, + const rtl::OUString& productVersion, + const rtl::OUString& vendorName, + const rtl::OUString& vendorVersion, + const rtl::OUString& vendorShort, com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > xSMgr ) : m_xSMgr( xSMgr ), m_nErrorDocLength( 0 ), @@ -105,6 +111,12 @@ Databases::Databases( const rtl::OUString& instPath, m_nCustomCSSDocLength( 0 ), m_pCustomCSSDoc( 0 ) { + m_vReplacement[0] = productName; + m_vReplacement[1] = productVersion; + m_vReplacement[2] = vendorName; + m_vReplacement[3] = vendorVersion; + m_vReplacement[4] = vendorShort; + setInstallPath( instPath ); } @@ -159,6 +171,72 @@ Databases::~Databases() +void Databases::replaceName( rtl::OUString& oustring ) const +{ + sal_Int32 idx = -1,k = 0,add,off; + bool cap = false; + rtl::OUStringBuffer aStrBuf( 0 ); + + while( ( idx = oustring.indexOf( sal_Unicode('%'),++idx ) ) != -1 ) + { + if( oustring.indexOf( rtl::OUString::createFromAscii( "%PRODUCTNAME" ), + idx ) == idx ) + { + add = 12; + off = PRODUCTNAME; + } + else if( oustring.indexOf( rtl::OUString::createFromAscii( "%PRODUCTVERSION" ), + idx ) == idx ) + { + add = 15; + off = PRODUCTVERSION; + } + else if( oustring.indexOf( rtl::OUString::createFromAscii( "%VENDORNAME" ), + idx ) == idx ) + { + add = 11; + off = VENDORNAME; + } + else if( oustring.indexOf( rtl::OUString::createFromAscii( "%VENDORVERSION" ), + idx ) == idx ) + { + add = 14; + off = VENDORVERSION; + } + else if( oustring.indexOf( rtl::OUString::createFromAscii( "%VENDORSHORT" ), + idx ) == idx ) + { + add = 12; + off = VENDORSHORT; + } + else + add = 0; + + if( add ) + { + if( ! cap ) + { + cap = true; + aStrBuf.ensureCapacity( 256 ); + } + + aStrBuf.append( &oustring.getStr()[k],idx - k ); + aStrBuf.append( m_vReplacement[off] ); + k = idx + add; + } + } + + if( cap ) + { + if( k < oustring.getLength() ) + aStrBuf.append( &oustring.getStr()[k],oustring.getLength()-k ); + oustring = aStrBuf.makeStringAndClear(); + } +} + + + + rtl::OUString Databases::getInstallPathAsSystemPath() { osl::MutexGuard aGuard( m_aMutex ); @@ -322,7 +400,13 @@ StaticModuleInformation* Databases::getStaticInformationForModule( const rtl::OU else lineBuffer[ pos++ ] = ch; } - it->second = new StaticModuleInformation( title,startid,program,heading,fulltext,order ); + replaceName( title ); + it->second = new StaticModuleInformation( title, + startid, + program, + heading, + fulltext, + order ); } } @@ -462,59 +546,27 @@ Databases::getCollator( const rtl::OUString& Language, } - - -KeywordInfo::KeywordInfo() - : pos( 0 ), - listKey( 100 ) +KeywordInfo::KeywordElement::KeywordElement( Databases *pDatabases, + Db* pDb, + Reference< XCollator > xCollator, + rtl::OUString& ky, + rtl::OUString& data ) + : m_xCollator( xCollator ), + key( ky ) { -} - - - -Sequence< rtl::OUString >& KeywordInfo::insertId( sal_Int32 index,rtl::OUString ids ) -{ - std::vector< rtl::OUString > test; - while( ids.getLength() ) - { - sal_Int32 idx = ids.indexOf( ';' ); - test.push_back( ids.copy(0,idx) ); - ids = ids.copy( 1+idx ); - } - - listId[index].realloc( test.size() ); - for( sal_uInt32 i = 0; i < test.size(); ++i ) - listId[index][i] = test[i]; - - listAnchor[index].realloc( test.size() ); - - for( sal_Int32 k = 0; k < listId[index].getLength(); ++k ) - { - if( listId[index][k].getLength() ) - { - sal_Int32 idx = listId[index][k].indexOf( sal_Unicode( '#' ) ); - if( idx != -1 ) - { - listAnchor[index][k] = listId[index][k].copy(1+idx).trim(); - listId[index][k] = listId[index][k].copy(0,idx).trim(); - } - } - } + if( key.indexOf( rtl::OUString::createFromAscii( "%PRODUCTNAME" ) ) != -1 ) + while( false ); - listTitle[index].realloc( test.size() ); - return listId[index]; + pDatabases->replaceName( key ); + init( pDatabases,pDb,data ); } - -KeywordInfo::Compare::Compare( const Reference< XCollator >& xCollator ) - : m_xCollator( xCollator ) +bool KeywordInfo::KeywordElement::operator<( const KeywordElement& ra ) const { -} + const rtl::OUString& l = key; + const rtl::OUString& r = ra.key; - -int KeywordInfo::Compare::operator()( const rtl::OUString& l,const rtl::OUString& r ) const -{ if( m_xCollator.is() ) { sal_Int32 l1 = l.indexOf( sal_Unicode( ';' ) ); @@ -541,31 +593,84 @@ int KeywordInfo::Compare::operator()( const rtl::OUString& l,const rtl::OUString sal_Int32 c1 = m_xCollator->compareSubstring( l,0,l3,r,0,r3 ); if( c1 == +1 ) - return 0; + return false; else { if( c1 == 0 ) - return ( m_xCollator->compareSubstring( l,1+l1,l2,r,1+r1,r2 ) < 0 ) ? 1 : 0; + return ( m_xCollator->compareSubstring( l,1+l1,l2,r,1+r1,r2 ) < 0 ) ? true : false; else - return 1; + return true; } } else - return ( l <= r ) ? 1 : 0; + return ( l <= r ) ? true : false; } -void KeywordInfo::sort( std::vector< rtl::OUString >& listKey_, const Compare& comp ) +void KeywordInfo::KeywordElement::init( Databases *pDatabases,Db* pDb,const rtl::OUString& ids ) { - std::sort( listKey_.begin(),listKey_.end(),comp ); - listKey.realloc( listKey_.size() ); - listId.realloc( listKey_.size() ); - listAnchor.realloc( listKey_.size() ); - listTitle.realloc( listKey_.size() ); - - for( sal_uInt32 i = 0; i < listKey_.size(); ++i ) - listKey[i] = listKey_[i]; + const sal_Unicode* idstr = ids.getStr(); + std::vector< rtl::OUString > id,anchor; + int idx = -1,k; + while( ( idx = ids.indexOf( ';',k = ++idx ) ) != -1 ) + { + int h = ids.indexOf( sal_Unicode( '#' ),k ); + if( h < idx ) + { + // found an anchor + id.push_back( rtl::OUString( &idstr[k],h-k ) ); + anchor.push_back( rtl::OUString( &idstr[h+1],idx-h-1 ) ); + } + else + { + id.push_back( rtl::OUString( &idstr[k],idx-k ) ); + anchor.push_back( rtl::OUString() ); + } + } + + listId.realloc( id.size() ); + listAnchor.realloc( id.size() ); + listTitle.realloc( id.size() ); + for( sal_uInt32 i = 0; i < id.size(); ++i ) + { + listId[i] = id[i]; + listAnchor[i] = anchor[i]; + + rtl::OString idi( id[i].getStr(),id[i].getLength(),RTL_TEXTENCODING_UTF8 ); + Dbt key( static_cast< void* >( const_cast< sal_Char* >( idi.getStr() ) ), + idi.getLength() ); + Dbt data; + if( pDb ) + pDb->get( 0,&key,&data,0 ); + + DbtToStringConverter converter( static_cast< sal_Char* >( data.get_data() ), + data.get_size() ); + + rtl::OUString title = converter.getTitle(); + pDatabases->replaceName( title ); + listTitle[i] = title; + } +} + + +KeywordInfo::KeywordInfo( const std::set< KeywordElement >& aSet ) + : listKey( aSet.size() ), + listId( aSet.size() ), + listAnchor( aSet.size() ), + listTitle( aSet.size() ) +{ + int idx = 0; + std::set< KeywordElement >::iterator it = aSet.begin(); + while( it != aSet.end() ) + { + listKey[idx] = it->key; + listId[idx] = it->listId; + listAnchor[idx] = it->listAnchor; + listTitle[idx] = it->listTitle; + ++idx; + ++it; + } } @@ -584,40 +689,42 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, if( aPair.second && ! it->second ) { - std::vector< rtl::OUString > listKey_; - std::hash_map< rtl::OUString,rtl::OUString,ha,eq > internalHash; - rtl::OUString fileNameOU = getInstallPathAsSystemPath() + key + rtl::OUString::createFromAscii( ".key" ); rtl::OString fileName( fileNameOU.getStr(),fileNameOU.getLength(),osl_getThreadTextEncoding() ); - Db table( 0,DB_CXX_NO_EXCEPTIONS ); if( 0 == table.open( fileName.getStr(),0,DB_BTREE,DB_RDONLY,0644 ) ) - { // success opening the database - Dbc* cursor = 0; - table.cursor( 0,&cursor,0 ); - Dbt key,data; + { + std::set<KeywordInfo::KeywordElement> aSet; + Db* idmap = getBerkeley( Database,Language ); + Reference< XCollator > xCollator = getCollator( Language,rtl::OUString() ); bool first = true; + Dbt key,data; key.set_flags( DB_DBT_MALLOC ); // Initially the cursor must allocate the necessary memory data.set_flags( DB_DBT_MALLOC ); - KeywordInfo* info = it->second = new KeywordInfo(); - rtl::OUString keyStri; + Dbc* cursor = 0; + table.cursor( 0,&cursor,0 ); while( cursor && DB_NOTFOUND != cursor->get( &key,&data,DB_NEXT ) ) { - keyStri = rtl::OUString( static_cast<sal_Char*>(key.get_data()), - key.get_size(), - RTL_TEXTENCODING_UTF8 ); - info->insert( listKey_,keyStri ); - internalHash[ keyStri ] = rtl::OUString( static_cast<sal_Char*>(data.get_data()), - data.get_size(), - RTL_TEXTENCODING_UTF8 ); - + rtl::OUString keyword( static_cast<sal_Char*>(key.get_data()), + key.get_size(), + RTL_TEXTENCODING_UTF8 ); + rtl::OUString doclist( static_cast<sal_Char*>(data.get_data()), + data.get_size(), + RTL_TEXTENCODING_UTF8 ); + + aSet.insert( + KeywordInfo::KeywordElement( this, + idmap, + xCollator, + keyword, + doclist ) ); if( first ) { key.set_flags( DB_DBT_REALLOC ); @@ -625,35 +732,9 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, first = false; } } - - info->sort( listKey_,KeywordInfo::Compare( getCollator( Language, - rtl::OUString() ) ) ); cursor->close(); - - Sequence< rtl::OUString >& keywords = info->getKeywordList(); - Db *table2 = getBerkeley( Database,Language ); - for( sal_Int32 i = 0; i < keywords.getLength(); ++i ) - { - Sequence< rtl::OUString >& id = info->insertId( i,internalHash[ keywords[i] ] ); - Sequence< rtl::OUString >& title = info->getTitleForIndex( i ); - - for( sal_Int32 j = 0; j < id.getLength(); ++j ) - { - rtl::OString idj( id[j].getStr(),id[j].getLength(),RTL_TEXTENCODING_UTF8 ); - Dbt key1( static_cast< void* >( const_cast< sal_Char* >( idj.getStr() ) ), - idj.getLength() ); - Dbt data1; - if( table2 ) - table2->get( 0,&key1,&data1,0 ); - - DbtToStringConverter converter( static_cast< sal_Char* >( data1.get_data() ), - data1.get_size() ); - - title[j] = converter.getTitle(); - } - } + KeywordInfo* info = it->second = new KeywordInfo( aSet ); } - table.close( 0 ); } @@ -662,6 +743,8 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, + + Reference< XHierarchicalNameAccess > Databases::jarFile( const rtl::OUString& jar, const rtl::OUString& Language ) { @@ -889,10 +972,29 @@ void Databases::setActiveText( const rtl::OUString& Module, Dbt key( static_cast< void* >( const_cast< sal_Char* >( id.getStr() ) ),id.getLength() ); Dbt data; db->get( 0,&key,&data,0 ); - *byteCount = data.get_size(); - *buffer = new char[ 1 + *byteCount ]; - (*buffer)[*byteCount] = 0; - rtl_copyMemory( *buffer,data.get_data(),*byteCount ); + int len = data.get_size(); + const sal_Char* ptr = static_cast<sal_Char*>( data.get_data() ); + + // ensure existence of tmp after for + rtl::OString tmp; + for( int i = 0; i < len; ++i ) + if( ptr[i] == '%' ) + { + // need to replace + rtl::OUString temp = rtl::OUString( ptr,len,RTL_TEXTENCODING_UTF8 ); + replaceName( temp ); + tmp = rtl::OString( temp.getStr(), + temp.getLength(), + RTL_TEXTENCODING_UTF8 ); + len = tmp.getLength(); + ptr = tmp.getStr(); + break; + } + + *byteCount = len; + *buffer = new char[ 1 + len ]; + (*buffer)[len] = 0; + rtl_copyMemory( *buffer,ptr,len ); } else { diff --git a/xmlhelp/source/cxxhelp/provider/provider.cxx b/xmlhelp/source/cxxhelp/provider/provider.cxx index 26a109658152..d302fbf87af7 100644 --- a/xmlhelp/source/cxxhelp/provider/provider.cxx +++ b/xmlhelp/source/cxxhelp/provider/provider.cxx @@ -2,9 +2,9 @@ * * $RCSfile: provider.cxx,v $ * - * $Revision: 1.9 $ + * $Revision: 1.10 $ * - * last change: $Author: mh $ $Date: 2001-10-04 08:35:51 $ + * last change: $Author: abi $ $Date: 2001-10-31 13:08:14 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -85,9 +85,6 @@ #ifndef _DATABASES_HXX_ #include <provider/databases.hxx> #endif -#ifndef COM_SUN_STAR_CONTAINER_XHIERARCHICALNAMEACCESS_HPP_ -#include <com/sun/star/container/XHierarchicalNameAccess.hpp> -#endif #ifndef _COM_SUN_STAR_FRAME_XCONFIGMANAGER_HPP_ #include <com/sun/star/frame/XConfigManager.hpp> #endif @@ -222,116 +219,175 @@ Reference< XContent > SAL_CALL ContentProvider::queryContent( const Reference< X } -#include <provider/debughelper.hxx> - void ContentProvider::init() { + osl::MutexGuard aGuard( m_aMutex ); + isInitialized = true; + Reference< XMultiServiceFactory > sProvider( getConfiguration() ); + Reference< XHierarchicalNameAccess > xHierAccess( getHierAccess( sProvider, + "org.openoffice.Office.Common" ) ); + + rtl::OUString instPath( getKey( xHierAccess,"Path/Current/Help" ) ); + if( ! instPath.getLength() ) + // try to determine path from default + instPath = rtl::OUString::createFromAscii( "$(instpath)/help" ); + + // replace anything like $(instpath); + subst( instPath ); + + /** + * now determing + * productname, + * productversion, + * vendorname, + * vendorversion, + * vendorshort + */ + + xHierAccess = getHierAccess( sProvider, + "org.openoffice.Setup" ); + rtl::OUString productname( getKey( xHierAccess,"Product/ooName" ) ); + + rtl::OUString setupversion( getKey( xHierAccess,"Product/ooSetupVersion" ) ); + rtl::OUString setupextension( getKey( xHierAccess,"Product/ooSetupExtension") ); + rtl::OUString productversion( setupversion + + rtl::OUString::createFromAscii( " " ) + + setupextension ); + + + xHierAccess = getHierAccess( sProvider, + "org.openoffice.Webtop.Common" ); + rtl::OUString vendorname( getKey( xHierAccess,"Product/ooName" ) ); + + setupversion = rtl::OUString( getKey( xHierAccess,"Product/ooSetupVersion" ) ); + setupextension = rtl::OUString ( getKey( xHierAccess,"Product/ooSetupExtension") ); + rtl::OUString vendorversion( setupversion + + rtl::OUString::createFromAscii( " " ) + + setupextension ); + rtl::OUString vendorshort = vendorname; + + m_pDatabases = new Databases( instPath, + productname, + productversion, + vendorname, + vendorversion, + vendorshort, + m_xSMgr ); +} -// rtl::OUString sProviderService = -// rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ); - - -// Any aAny; -// aAny <<= rtl::OUString::createFromAscii( "local" ); -// PropertyValue aProp( rtl::OUString::createFromAscii( "servertype" ), -// -1, -// aAny, -// PropertyState_DIRECT_VALUE ); - -// Sequence< Any > seq(1); -// seq[0] <<= aProp; - -// Reference< XMultiServiceFactory > sProvider; -// try -// { -// sProvider = -// Reference< XMultiServiceFactory >( -// m_xSMgr->createInstanceWithArguments( sProviderService,seq ), -// UNO_QUERY ); -// } -// catch( const com::sun::star::uno::Exception& e ) -// { -// VOS_ENSHURE( sProvider.is()," cant instantiate the multiservicefactory " ); -// } - - -// if( ! sProvider.is() ) -// { -// return; -// } - -// rtl::OUString sReaderService = -// rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationAccess" ); - -// seq[0] <<= rtl::OUString::createFromAscii( "org.openoffice.Office.Common" ); - - -// Reference< XHierarchicalNameAccess > xHierAccess; -// try -// { -// xHierAccess = -// Reference< XHierarchicalNameAccess > -// ( sProvider->createInstanceWithArguments( sReaderService,seq ), -// UNO_QUERY ); -// } -// catch( const com::sun::star::uno::Exception& e ) -// { -// VOS_ENSHURE( xHierAccess.is()," cant instantiate the reader service " ); -// } - -// if( ! xHierAccess.is() ) -// return; - -// try -// { -// aAny = -// xHierAccess->getByHierarchicalName( rtl::OUString::createFromAscii("Path/Current/Help") ); -// } -// catch( const com::sun::star::container::NoSuchElementException& e ) -// { -// VOS_ENSHURE( false," path to help files could not be determined " ); -// return; -// } - - -// rtl::OUString instPath; -// bool err = ! ( aAny >>= instPath ); - -// if( err ) -// { -// VOS_ENSHURE( false," path to help files could not be determined " ); -// return; -// } - - rtl::OUString instPath( rtl::OUString::createFromAscii( "$(instpath)/help/" ) ); - Reference< XConfigManager > xCfgMgr; - try + + +Reference< XMultiServiceFactory > ContentProvider::getConfiguration() const +{ + Reference< XMultiServiceFactory > sProvider; + if( m_xSMgr.is() ) { - xCfgMgr = - Reference< XConfigManager >( - m_xSMgr->createInstance( rtl::OUString::createFromAscii( "com.sun.star.config.SpecialConfigManager" ) ), - UNO_QUERY ); + Any aAny; + aAny <<= rtl::OUString::createFromAscii( "plugin" ); + PropertyValue aProp( rtl::OUString::createFromAscii( "servertype" ), + -1, + aAny, + PropertyState_DIRECT_VALUE ); + + Sequence< Any > seq(1); + seq[0] <<= aProp; + + try + { + rtl::OUString sProviderService = + rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ); + sProvider = + Reference< XMultiServiceFactory >( + m_xSMgr->createInstanceWithArguments( sProviderService,seq ), + UNO_QUERY ); + } + catch( const com::sun::star::uno::Exception& ) + { + OSL_ENSURE( sProvider.is(),"cant instantiate configuration" ); + } } - catch( const com::sun::star::uno::Exception& e ) + + return sProvider; +} + + + +Reference< XHierarchicalNameAccess > +ContentProvider::getHierAccess( const Reference< XMultiServiceFactory >& sProvider, + const char* file ) const +{ + Reference< XHierarchicalNameAccess > xHierAccess; + + if( sProvider.is() ) { - VOS_ENSHURE( xCfgMgr.is()," cant instantiate the special config manager " ); + Sequence< Any > seq(1); + rtl::OUString sReaderService = + rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationAccess" ); + + seq[0] <<= rtl::OUString::createFromAscii( file ); + + try + { + xHierAccess = + Reference< XHierarchicalNameAccess > + ( sProvider->createInstanceWithArguments( sReaderService,seq ), + UNO_QUERY ); + } + catch( const com::sun::star::uno::Exception& ) + { + } } + return xHierAccess; +} + - if( ! xCfgMgr.is() ) + +rtl::OUString +ContentProvider::getKey( const Reference< XHierarchicalNameAccess >& xHierAccess, + const char* key ) const +{ + rtl::OUString instPath; + if( xHierAccess.is() ) { - fprintf( stderr,"specialconfigmanager not found\n" ); + Any aAny; + try + { + aAny = + xHierAccess->getByHierarchicalName( rtl::OUString::createFromAscii( key ) ); + } + catch( const com::sun::star::container::NoSuchElementException& ) + { + } + aAny >>= instPath; } - else - instPath = xCfgMgr->substituteVariables( instPath ); + return instPath; +} -// err_msg( "installpath as given by substituteVariables ", -// instPath ); -// instPath = rtl::OUString::createFromAscii( "/export/home/abi/src38b11/help" ); - m_pDatabases = new Databases( instPath, - m_xSMgr ); +void ContentProvider::subst( rtl::OUString& instpath ) const +{ + Reference< XConfigManager > xCfgMgr; + if( m_xSMgr.is() ) + { + try + { + xCfgMgr = + Reference< XConfigManager >( + m_xSMgr->createInstance( rtl::OUString::createFromAscii( "com.sun.star.config.SpecialConfigManager" ) ), + UNO_QUERY ); + } + catch( const com::sun::star::uno::Exception& e ) + { + OSL_ENSURE( xCfgMgr.is()," cant instantiate the special config manager " ); + } + } + + OSL_ENSURE( xCfgMgr.is(), "specialconfigmanager not found\n" ); + + if( xCfgMgr.is() ) + instpath = xCfgMgr->substituteVariables( instpath ); } diff --git a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx index 600e99e145a2..a6725a9ca648 100644 --- a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx +++ b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx @@ -2,9 +2,9 @@ * * $RCSfile: urlparameter.cxx,v $ * - * $Revision: 1.24 $ + * $Revision: 1.25 $ * - * last change: $Author: hr $ $Date: 2001-10-24 11:17:19 $ + * last change: $Author: abi $ $Date: 2001-10-31 13:08:14 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -365,6 +365,7 @@ void URLParameter::readBerkeley() DbtToStringConverter converter( static_cast< sal_Char* >( data.get_data() ), data.get_size() ); m_aTitle = converter.getTitle(); + m_pDatabases->replaceName( m_aTitle ); m_aPath = converter.getFile(); m_aJar = converter.getDatabase(); m_aTag = converter.getHash(); @@ -793,8 +794,8 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam, // Uses the implementation detail, that rtl::OString::getStr returns a zero terminated character-array - const char* parameter[31]; - rtl::OString parString[30]; + const char* parameter[41]; + rtl::OString parString[40]; int last; parString[ 0] = "Program"; @@ -809,29 +810,51 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam, parString[ 9] = urlParam->getByName( "Language" ); parString[10] = "System"; parString[11] = urlParam->getByName( "System" ); - parString[12] = "hp"; - parString[13] = urlParam->getByName( "HelpPrefix" ); - last = 14; - - if( parString[13].getLength() ) + parString[12] = "productname"; + parString[13] = rtl::OString( pDatabases->getProductName().getStr(), + pDatabases->getProductName().getLength(), + RTL_TEXTENCODING_UTF8 ); + parString[14] = "productversion"; + parString[15] = rtl::OString( pDatabases->getProductVersion().getStr(), + pDatabases->getProductVersion().getLength(), + RTL_TEXTENCODING_UTF8 ); + + parString[16] = "hp"; + parString[17] = urlParam->getByName( "HelpPrefix" ); + last = 18; + + if( parString[17].getLength() ) { - parString[14] = "sm"; - parString[15] = "vnd.sun.star.help%3A%2F%2F"; - parString[16] = "qm"; - parString[17] = "%3F"; - parString[18] = "es"; - parString[19] = "%3D"; - parString[20] = "am"; - parString[21] = "%26"; - parString[22] = "cl"; - parString[23] = "%3A"; - parString[24] = "sl"; - parString[25] = "%2F"; - parString[26] = "hm"; - parString[27] = "%23"; - parString[28] = "cs"; - parString[29] = "css"; - last = 30; + parString[18] = "sm"; + parString[19] = "vnd.sun.star.help%3A%2F%2F"; + parString[20] = "qm"; + parString[21] = "%3F"; + parString[22] = "es"; + parString[23] = "%3D"; + parString[24] = "am"; + parString[25] = "%26"; + parString[26] = "cl"; + parString[27] = "%3A"; + parString[28] = "sl"; + parString[29] = "%2F"; + parString[30] = "hm"; + parString[31] = "%23"; + parString[32] = "cs"; + parString[33] = "css"; + + parString[34] = "vendorname"; + parString[35] = rtl::OString( pDatabases->getVendorName().getStr(), + pDatabases->getVendorName().getLength(), + RTL_TEXTENCODING_UTF8 ); + parString[36] = "vendorversion"; + parString[37] = rtl::OString( pDatabases->getVendorVersion().getStr(), + pDatabases->getVendorVersion().getLength(), + RTL_TEXTENCODING_UTF8 ); + parString[38] = "vendorshort"; + parString[39] = rtl::OString( pDatabases->getVendorShort().getStr(), + pDatabases->getVendorShort().getLength(), + RTL_TEXTENCODING_UTF8 ); + last = 40; } for( int i = 0; i < last; ++i ) @@ -842,8 +865,6 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam, SablotHandle p; SablotCreateProcessor(&p); SablotRegHandler( p,HLR_SCHEME,&schemeHandler,(void*)(&userData) ); - - // rtl::OUString xslURL = pDatabases->getInstallPathAsURL(); rtl::OUString xslURL = pDatabases->getInstallPathAsURLWithOutEncoding(); rtl::OString xslURLascii = "file:"; |