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