17b6bd0c4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 37b6bd0c4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 47b6bd0c4SAndrew Rist * or more contributor license agreements. See the NOTICE file 57b6bd0c4SAndrew Rist * distributed with this work for additional information 67b6bd0c4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 77b6bd0c4SAndrew Rist * to you under the Apache License, Version 2.0 (the 87b6bd0c4SAndrew Rist * "License"); you may not use this file except in compliance 97b6bd0c4SAndrew Rist * with the License. You may obtain a copy of the License at 107b6bd0c4SAndrew Rist * 117b6bd0c4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 127b6bd0c4SAndrew Rist * 137b6bd0c4SAndrew Rist * Unless required by applicable law or agreed to in writing, 147b6bd0c4SAndrew Rist * software distributed under the License is distributed on an 157b6bd0c4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 167b6bd0c4SAndrew Rist * KIND, either express or implied. See the License for the 177b6bd0c4SAndrew Rist * specific language governing permissions and limitations 187b6bd0c4SAndrew Rist * under the License. 197b6bd0c4SAndrew Rist * 207b6bd0c4SAndrew Rist *************************************************************/ 217b6bd0c4SAndrew Rist 227b6bd0c4SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef _URLPARAMETER_HXX_ 25cdf0e10cSrcweir #define _URLPARAMETER_HXX_ 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <rtl/ustring.hxx> 28cdf0e10cSrcweir #include <rtl/string.hxx> 29cdf0e10cSrcweir #include <com/sun/star/ucb/IllegalIdentifierException.hpp> 30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 31cdf0e10cSrcweir #include <com/sun/star/ucb/XCommandEnvironment.hpp> 32cdf0e10cSrcweir #include <com/sun/star/io/XActiveDataSink.hpp> 33cdf0e10cSrcweir #include <com/sun/star/io/XOutputStream.hpp> 34cdf0e10cSrcweir #include <com/sun/star/ucb/Command.hpp> 35cdf0e10cSrcweir 36cdf0e10cSrcweir namespace chelp { 37cdf0e10cSrcweir 38cdf0e10cSrcweir 39cdf0e10cSrcweir class Databases; 40cdf0e10cSrcweir 41cdf0e10cSrcweir 42cdf0e10cSrcweir class DbtToStringConverter 43cdf0e10cSrcweir { 44cdf0e10cSrcweir public: 45cdf0e10cSrcweir DbtToStringConverter(const sal_Char * ptr,sal_Int32 len)46cdf0e10cSrcweir DbtToStringConverter( const sal_Char* ptr,sal_Int32 len ) 47cdf0e10cSrcweir : m_len( len ), 48cdf0e10cSrcweir m_ptr( ptr ) 49cdf0e10cSrcweir { 50cdf0e10cSrcweir } 51cdf0e10cSrcweir 52cdf0e10cSrcweir getHash()53cdf0e10cSrcweir rtl::OUString getHash() 54cdf0e10cSrcweir { 55cdf0e10cSrcweir if( m_ptr ) 56cdf0e10cSrcweir { 57cdf0e10cSrcweir sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0]; 58cdf0e10cSrcweir rtl::OUString Hash( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 ); 59cdf0e10cSrcweir sal_Int32 idx; 60cdf0e10cSrcweir if( ( idx = Hash.indexOf( sal_Unicode( '#' ) ) ) != -1 ) 61cdf0e10cSrcweir return Hash.copy( 1+idx ); 62cdf0e10cSrcweir } 63cdf0e10cSrcweir return rtl::OUString(); 64cdf0e10cSrcweir } 65cdf0e10cSrcweir 66cdf0e10cSrcweir getFile()67cdf0e10cSrcweir rtl::OUString getFile() 68cdf0e10cSrcweir { 69cdf0e10cSrcweir if( ! m_ptr ) 70cdf0e10cSrcweir return rtl::OUString(); 71cdf0e10cSrcweir 72cdf0e10cSrcweir sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0]; 73cdf0e10cSrcweir rtl::OUString File( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 ); 74cdf0e10cSrcweir sal_Int32 idx; 75cdf0e10cSrcweir if( ( idx = File.indexOf( sal_Unicode( '#' ) ) ) != -1 ) 76cdf0e10cSrcweir return File.copy( 0,idx ); 77cdf0e10cSrcweir else 78cdf0e10cSrcweir return File; 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir getDatabase()82cdf0e10cSrcweir rtl::OUString getDatabase() 83cdf0e10cSrcweir { 84cdf0e10cSrcweir if( ! m_ptr ) 85cdf0e10cSrcweir return rtl::OUString(); 86cdf0e10cSrcweir 87cdf0e10cSrcweir sal_Int32 sizeOfDatabase = ( int ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ]; 88cdf0e10cSrcweir return rtl::OUString( m_ptr + 2 + ( sal_Int32 ) m_ptr[0],sizeOfDatabase,RTL_TEXTENCODING_UTF8 ); 89cdf0e10cSrcweir } 90cdf0e10cSrcweir 91cdf0e10cSrcweir getTitle()92cdf0e10cSrcweir rtl::OUString getTitle() 93cdf0e10cSrcweir { 94cdf0e10cSrcweir if( ! m_ptr ) // || getHash().getLength() ) 95cdf0e10cSrcweir return rtl::OUString(); 96cdf0e10cSrcweir 97cdf0e10cSrcweir sal_Int32 sizeOfTitle = 98cdf0e10cSrcweir ( sal_Int32 ) m_ptr[ 2 + m_ptr[0] + ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ] ]; 99cdf0e10cSrcweir return rtl::OUString( m_ptr + 3 + m_ptr[0] + ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ], 100cdf0e10cSrcweir sizeOfTitle, 101cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 ); 102cdf0e10cSrcweir } 103cdf0e10cSrcweir 104cdf0e10cSrcweir 105cdf0e10cSrcweir private: 106cdf0e10cSrcweir 107cdf0e10cSrcweir sal_Int32 m_len; 108cdf0e10cSrcweir 109cdf0e10cSrcweir const sal_Char* m_ptr; 110cdf0e10cSrcweir 111cdf0e10cSrcweir }; 112cdf0e10cSrcweir 113cdf0e10cSrcweir 114cdf0e10cSrcweir 115cdf0e10cSrcweir 116cdf0e10cSrcweir class URLParameter 117cdf0e10cSrcweir { 118cdf0e10cSrcweir public: 119cdf0e10cSrcweir 120cdf0e10cSrcweir URLParameter( const rtl::OUString& aURL, 121cdf0e10cSrcweir Databases* pDatabases ) 122cdf0e10cSrcweir throw( com::sun::star::ucb::IllegalIdentifierException ); 123cdf0e10cSrcweir isPicture()124cdf0e10cSrcweir bool isPicture() { return m_aModule.compareToAscii("picture") == 0; } isActive()125cdf0e10cSrcweir bool isActive() { return m_aActive.getLength() > 0 && m_aActive.compareToAscii( "true" ) == 0; } isQuery()126cdf0e10cSrcweir bool isQuery() { return m_aId.compareToAscii("") == 0 && m_aQuery.compareToAscii("") != 0; } isEntryForModule()127cdf0e10cSrcweir bool isEntryForModule() { return m_aId.compareToAscii("start") == 0 || m_bStart; } isFile()128cdf0e10cSrcweir bool isFile() { return m_aId.compareToAscii( "" ) != 0; } isModule()129cdf0e10cSrcweir bool isModule() { return m_aId.compareToAscii("") == 0 && m_aModule.compareToAscii("") != 0; } isRoot()130cdf0e10cSrcweir bool isRoot() { return m_aModule.compareToAscii("") == 0; } 131cdf0e10cSrcweir bool isErrorDocument(); 132cdf0e10cSrcweir get_url()133cdf0e10cSrcweir rtl::OUString get_url() { return m_aURL; } 134cdf0e10cSrcweir 135cdf0e10cSrcweir rtl::OUString get_id(); 136cdf0e10cSrcweir 137cdf0e10cSrcweir rtl::OUString get_tag(); 138cdf0e10cSrcweir 139cdf0e10cSrcweir // Not called for an directory 140cdf0e10cSrcweir get_path()141cdf0e10cSrcweir rtl::OUString get_path() { return get_the_path(); } 142cdf0e10cSrcweir get_eid()143cdf0e10cSrcweir rtl::OUString get_eid() { return m_aEid; } 144cdf0e10cSrcweir 145cdf0e10cSrcweir rtl::OUString get_title(); 146cdf0e10cSrcweir get_jar()147*70e197d9SHerbert Dürr rtl::OUString get_jar() { return get_the_jar(); } 148cdf0e10cSrcweir get_ExtensionRegistryPath()149cdf0e10cSrcweir rtl::OUString get_ExtensionRegistryPath() { return m_aExtensionRegistryPath; } 150cdf0e10cSrcweir get_module()151cdf0e10cSrcweir rtl::OUString get_module() { return m_aModule; } 152cdf0e10cSrcweir get_dbpar()153cdf0e10cSrcweir rtl::OUString get_dbpar() { 154cdf0e10cSrcweir if( m_aDbPar.getLength() ) return m_aDbPar; 155cdf0e10cSrcweir else return m_aModule; 156cdf0e10cSrcweir } 157cdf0e10cSrcweir get_prefix()158cdf0e10cSrcweir rtl::OUString get_prefix() { return m_aPrefix; } 159cdf0e10cSrcweir 160cdf0e10cSrcweir rtl::OUString get_language(); 161cdf0e10cSrcweir get_device()162cdf0e10cSrcweir rtl::OUString get_device() { return m_aDevice; } 163cdf0e10cSrcweir 164cdf0e10cSrcweir rtl::OUString get_program(); 165cdf0e10cSrcweir get_query()166cdf0e10cSrcweir rtl::OUString get_query() { return m_aQuery; } 167cdf0e10cSrcweir get_scope()168cdf0e10cSrcweir rtl::OUString get_scope() { return m_aScope; } 169cdf0e10cSrcweir get_system()170cdf0e10cSrcweir rtl::OUString get_system() { return m_aSystem; } 171cdf0e10cSrcweir get_hitCount()172cdf0e10cSrcweir sal_Int32 get_hitCount() { return m_nHitCount; } 173cdf0e10cSrcweir 174cdf0e10cSrcweir rtl::OString getByName( const char* par ); 175cdf0e10cSrcweir 176cdf0e10cSrcweir void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 177cdf0e10cSrcweir const com::sun::star::ucb::Command& aCommand, 178cdf0e10cSrcweir sal_Int32 CommandId, 179cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment, 180cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::io::XActiveDataSink >& xDataSink ); 181cdf0e10cSrcweir 182cdf0e10cSrcweir void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr, 183cdf0e10cSrcweir const com::sun::star::ucb::Command& aCommand, 184cdf0e10cSrcweir sal_Int32 CommandId, 185cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment, 186cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xDataSink ); 187cdf0e10cSrcweir 188cdf0e10cSrcweir private: 189cdf0e10cSrcweir 190cdf0e10cSrcweir Databases* m_pDatabases; 191cdf0e10cSrcweir 192*70e197d9SHerbert Dürr bool m_bHelpDataFileRead; 193cdf0e10cSrcweir bool m_bStart; 194cdf0e10cSrcweir bool m_bUseDB; 195cdf0e10cSrcweir 196cdf0e10cSrcweir rtl::OUString m_aURL; 197cdf0e10cSrcweir 198cdf0e10cSrcweir rtl::OUString m_aTag; 199cdf0e10cSrcweir rtl::OUString m_aId; 200cdf0e10cSrcweir rtl::OUString m_aPath; 201cdf0e10cSrcweir rtl::OUString m_aModule; 202cdf0e10cSrcweir rtl::OUString m_aTitle; 203cdf0e10cSrcweir rtl::OUString m_aJar; 204cdf0e10cSrcweir rtl::OUString m_aExtensionRegistryPath; 205cdf0e10cSrcweir rtl::OUString m_aEid; 206cdf0e10cSrcweir rtl::OUString m_aDbPar; 207cdf0e10cSrcweir 208cdf0e10cSrcweir rtl::OUString m_aDefaultLanguage; 209cdf0e10cSrcweir rtl::OUString m_aLanguage; 210cdf0e10cSrcweir 211cdf0e10cSrcweir rtl::OUString m_aPrefix; 212cdf0e10cSrcweir rtl::OUString m_aDevice; 213cdf0e10cSrcweir rtl::OUString m_aProgram; 214cdf0e10cSrcweir rtl::OUString m_aSystem; 215cdf0e10cSrcweir rtl::OUString m_aActive; 216cdf0e10cSrcweir 217cdf0e10cSrcweir rtl::OUString m_aQuery; 218cdf0e10cSrcweir rtl::OUString m_aScope; 219cdf0e10cSrcweir 220cdf0e10cSrcweir rtl::OUString m_aExpr; 221cdf0e10cSrcweir 222cdf0e10cSrcweir sal_Int32 m_nHitCount; // The default maximum hitcount 223cdf0e10cSrcweir 224cdf0e10cSrcweir 225cdf0e10cSrcweir // private methods 226cdf0e10cSrcweir 227cdf0e10cSrcweir void init( bool bDefaultLanguageIsInitialized ); 228cdf0e10cSrcweir 229cdf0e10cSrcweir rtl::OUString get_the_tag(); 230cdf0e10cSrcweir 231cdf0e10cSrcweir rtl::OUString get_the_path(); 232cdf0e10cSrcweir 233cdf0e10cSrcweir rtl::OUString get_the_title(); 234cdf0e10cSrcweir 235cdf0e10cSrcweir rtl::OUString get_the_jar(); 236cdf0e10cSrcweir 237*70e197d9SHerbert Dürr void readHelpDataFile(); 238cdf0e10cSrcweir 239cdf0e10cSrcweir void parse() throw( com::sun::star::ucb::IllegalIdentifierException ); 240cdf0e10cSrcweir 241cdf0e10cSrcweir bool scheme(); 242cdf0e10cSrcweir 243cdf0e10cSrcweir bool module(); 244cdf0e10cSrcweir 245cdf0e10cSrcweir bool name( bool modulePresent ); 246cdf0e10cSrcweir 247cdf0e10cSrcweir bool query(); 248cdf0e10cSrcweir 249cdf0e10cSrcweir }; // end class URLParameter 250cdf0e10cSrcweir 251cdf0e10cSrcweir 252cdf0e10cSrcweir } // end namespace chelp 253cdf0e10cSrcweir 254cdf0e10cSrcweir #endif 255