summaryrefslogtreecommitdiff
path: root/xmlhelp
diff options
context:
space:
mode:
authorAndreas Bille <abi@openoffice.org>2001-10-31 12:08:14 +0000
committerAndreas Bille <abi@openoffice.org>2001-10-31 12:08:14 +0000
commitc5718b941491ffaa937767c579627444c0957b86 (patch)
treecad76214c1d9c131b5a227ef6ae498f941dffc35 /xmlhelp
parentf2ecdf1d78e9836cda5bdde9b4c709aeacf36292 (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.cxx328
-rw-r--r--xmlhelp/source/cxxhelp/provider/provider.cxx258
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.cxx77
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:";