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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbui.hxx"
26 #include "HtmlReader.hxx"
27 #include <connectivity/dbconversion.hxx>
28 #include <connectivity/dbtools.hxx>
29 #include <tools/tenccvt.hxx>
30 #include <comphelper/extract.hxx>
31 #include "dbu_misc.hrc"
32 #include "dbustrings.hrc"
33 #include <sfx2/sfxhtml.hxx>
34 #include <tools/debug.hxx>
35 #include <tools/tenccvt.hxx>
36 #include "moduledbu.hxx"
37 #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
38 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
39 #include <com/sun/star/sdbcx/XAppend.hpp>
40 #include <com/sun/star/sdbc/DataType.hpp>
41 #include <com/sun/star/sdbc/ColumnValue.hpp>
42 #include <com/sun/star/awt/FontDescriptor.hpp>
43 #include <com/sun/star/awt/FontWeight.hpp>
44 #include <com/sun/star/awt/FontStrikeout.hpp>
45 #include <com/sun/star/awt/FontSlant.hpp>
46 #include <com/sun/star/awt/FontUnderline.hpp>
47 #include <com/sun/star/util/NumberFormat.hpp>
48 #include <com/sun/star/util/XNumberFormatTypes.hpp>
49 #include <svtools/htmltokn.h>
50 #include <svtools/htmlkywd.hxx>
51 #include <tools/color.hxx>
52 #include "WCopyTable.hxx"
53 #include "WExtendPages.hxx"
54 #include "WNameMatch.hxx"
55 #include "WColumnSelect.hxx"
56 #include "QEnumTypes.hxx"
57 #include "WCPage.hxx"
58 #include <tools/inetmime.hxx>
59 #include <svl/inettype.hxx>
60 #include <rtl/tencinfo.h>
61 #include "UITools.hxx"
62 #include <vcl/svapp.hxx>
63 #include <rtl/logfile.hxx>
64
65 using namespace dbaui;
66 using namespace ::com::sun::star::uno;
67 using namespace ::com::sun::star::beans;
68 using namespace ::com::sun::star::container;
69 using namespace ::com::sun::star::sdbc;
70 using namespace ::com::sun::star::sdbcx;
71 using namespace ::com::sun::star::awt;
72
73 #define DBAUI_HTML_FONTSIZES 8 // wie Export, HTML-Options
74 #define HTML_META_NONE 0
75 #define HTML_META_AUTHOR 1
76 #define HTML_META_DESCRIPTION 2
77 #define HTML_META_KEYWORDS 3
78 #define HTML_META_REFRESH 4
79 #define HTML_META_CLASSIFICATION 5
80 #define HTML_META_CREATED 6
81 #define HTML_META_CHANGEDBY 7
82 #define HTML_META_CHANGED 8
83 #define HTML_META_GENERATOR 9
84 #define HTML_META_SDFOOTNOTE 10
85 #define HTML_META_SDENDNOTE 11
86 #define HTML_META_CONTENT_TYPE 12
87
88 // ==========================================================================
DBG_NAME(OHTMLReader)89 DBG_NAME(OHTMLReader)
90 // ==========================================================================
91 // OHTMLReader
92 // ==========================================================================
93 OHTMLReader::OHTMLReader(SvStream& rIn,const SharedConnection& _rxConnection,
94 const Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
95 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
96 const TColumnVector* pList,
97 const OTypeInfoMap* _pInfoMap)
98 :HTMLParser(rIn)
99 ,ODatabaseExport( _rxConnection, _rxNumberF, _rM, pList, _pInfoMap, rIn )
100 ,m_nTableCount(0)
101 ,m_nColumnWidth(87)
102 ,m_bMetaOptions(sal_False)
103 ,m_bSDNum(sal_False)
104 {
105 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::OHTMLReader" );
106 DBG_CTOR(OHTMLReader,NULL);
107 SetSrcEncoding( GetExtendedCompatibilityTextEncoding( RTL_TEXTENCODING_ISO_8859_1 ) );
108 // If the file starts with a BOM, switch to UCS2.
109 SetSwitchToUCS2( sal_True );
110 }
111 // ---------------------------------------------------------------------------
OHTMLReader(SvStream & rIn,sal_Int32 nRows,const TPositions & _rColumnPositions,const Reference<::com::sun::star::util::XNumberFormatter> & _rxNumberF,const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & _rM,const TColumnVector * pList,const OTypeInfoMap * _pInfoMap,sal_Bool _bAutoIncrementEnabled)112 OHTMLReader::OHTMLReader(SvStream& rIn,
113 sal_Int32 nRows,
114 const TPositions &_rColumnPositions,
115 const Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
116 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
117 const TColumnVector* pList,
118 const OTypeInfoMap* _pInfoMap,
119 sal_Bool _bAutoIncrementEnabled)
120 :HTMLParser(rIn)
121 ,ODatabaseExport( nRows, _rColumnPositions, _rxNumberF, _rM, pList, _pInfoMap, _bAutoIncrementEnabled, rIn )
122 ,m_nTableCount(0)
123 ,m_nColumnWidth(87)
124 ,m_bMetaOptions(sal_False)
125 ,m_bSDNum(sal_False)
126 {
127 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::OHTMLReader" );
128 DBG_CTOR(OHTMLReader,NULL);
129 SetSrcEncoding( GetExtendedCompatibilityTextEncoding( RTL_TEXTENCODING_ISO_8859_1 ) );
130 // If the file starts with a BOM, switch to UCS2.
131 SetSwitchToUCS2( sal_True );
132 }
133 // ---------------------------------------------------------------------------
~OHTMLReader()134 OHTMLReader::~OHTMLReader()
135 {
136 DBG_DTOR(OHTMLReader,NULL);
137 }
138 // ---------------------------------------------------------------------------
CallParser()139 SvParserState OHTMLReader::CallParser()
140 {
141 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::CallParser" );
142 DBG_CHKTHIS(OHTMLReader,NULL);
143 rInput.Seek(STREAM_SEEK_TO_BEGIN);
144 rInput.ResetError();
145 SvParserState eParseState = HTMLParser::CallParser();
146 SetColumnTypes(m_pColumnList,m_pInfoMap);
147 return m_bFoundTable ? eParseState : SVPAR_ERROR;
148 }
149 // -----------------------------------------------------------------------------
NextToken(int nToken)150 void OHTMLReader::NextToken( int nToken )
151 {
152 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::NextToken" );
153 DBG_CHKTHIS(OHTMLReader,NULL);
154 if(m_bError || !m_nRows) // falls Fehler oder keine Rows mehr zur "Uberpr"ufung dann gleich zur"uck
155 return;
156 if ( nToken == HTML_META )
157 setTextEncoding();
158
159 if(m_xConnection.is()) // gibt an welcher CTOR gerufen wurde und damit, ob eine Tabelle erstellt werden soll
160 {
161 switch(nToken)
162 {
163 case HTML_TABLE_ON:
164 ++m_nTableCount;
165 { // es kann auch TD oder TH sein, wenn es vorher kein TABLE gab
166 const HTMLOptions* pHtmlOptions = GetOptions();
167 sal_Int16 nArrLen = pHtmlOptions->Count();
168 for ( sal_Int16 i = 0; i < nArrLen; i++ )
169 {
170 const HTMLOption* pOption = (*pHtmlOptions)[i];
171 switch( pOption->GetToken() )
172 {
173 case HTML_O_WIDTH:
174 { // Prozent: von Dokumentbreite bzw. aeusserer Zelle
175 m_nColumnWidth = GetWidthPixel( pOption );
176 }
177 break;
178 }
179 }
180 }
181 case HTML_THEAD_ON:
182 case HTML_TBODY_ON:
183 {
184 sal_uInt32 nTell = rInput.Tell(); // ver�ndert vielleicht die Position des Streams
185 if ( !m_xTable.is() )
186 {// erste Zeile als Header verwenden
187 m_bError = !CreateTable(nToken);
188 if ( m_bAppendFirstLine )
189 rInput.Seek(nTell);
190 }
191 }
192 break;
193 case HTML_TABLE_OFF:
194 if(!--m_nTableCount)
195 {
196 m_xTable = NULL;
197 }
198 break;
199 case HTML_TABLEROW_ON:
200 if ( m_pUpdateHelper.get() )
201 {
202 try
203 {
204 m_pUpdateHelper->moveToInsertRow(); // sonst neue Zeile anh"angen
205 }
206 catch(SQLException& e)
207 // UpdateFehlerbehandlung
208 {
209 showErrorDialog(e);
210 }
211 }
212 else
213 m_bError = sal_True;
214 break;
215 case HTML_TEXTTOKEN:
216 case HTML_SINGLECHAR:
217 if ( m_bInTbl ) //&& !m_bSDNum ) // wichtig, da wir sonst auch die Namen der Fonts bekommen
218 m_sTextToken += aToken;
219 break;
220 case HTML_PARABREAK_OFF:
221 m_sCurrent += m_sTextToken;
222 break;
223 case HTML_PARABREAK_ON:
224 m_sTextToken.Erase();
225 break;
226 case HTML_TABLEDATA_ON:
227 fetchOptions();
228 break;
229 case HTML_TABLEDATA_OFF:
230 {
231 if ( m_sCurrent.Len() )
232 m_sTextToken = m_sCurrent;
233 try
234 {
235 insertValueIntoColumn();
236 }
237 catch(SQLException& e)
238 // UpdateFehlerbehandlung
239 {
240 showErrorDialog(e);
241 }
242 m_sCurrent.Erase();
243 m_nColumnPos++;
244 eraseTokens();
245 m_bSDNum = m_bInTbl = sal_False;
246 }
247 break;
248 case HTML_TABLEROW_OFF:
249 if ( !m_pUpdateHelper.get() )
250 {
251 m_bError = sal_True;
252 break;
253 }
254 try
255 {
256 m_nRowCount++;
257 if (m_bIsAutoIncrement) // if bSetAutoIncrement then I have to set the autoincrement
258 m_pUpdateHelper->updateInt(1,m_nRowCount);
259 m_pUpdateHelper->insertRow();
260 }
261 catch(SQLException& e)
262 //////////////////////////////////////////////////////////////////////
263 // UpdateFehlerbehandlung
264 {
265 showErrorDialog(e);
266 }
267 m_nColumnPos = 0;
268 break;
269 }
270 }
271 else // Zweig nur f"ur Typpr"ufung g"ultig
272 {
273 switch(nToken)
274 {
275 case HTML_THEAD_ON:
276 case HTML_TBODY_ON:
277 // Der Spalten Kopf z"ahlt nicht mit
278 if(m_bHead)
279 {
280 do
281 {}
282 while(GetNextToken() != HTML_TABLEROW_OFF);
283 m_bHead = sal_False;
284 }
285 break;
286 case HTML_TABLEDATA_ON:
287 case HTML_TABLEHEADER_ON:
288 fetchOptions();
289 break;
290 case HTML_TEXTTOKEN:
291 case HTML_SINGLECHAR:
292 if ( m_bInTbl ) // && !m_bSDNum ) // wichtig, da wir sonst auch die Namen der Fonts bekommen
293 m_sTextToken += aToken;
294 break;
295 case HTML_PARABREAK_OFF:
296 m_sCurrent += m_sTextToken;
297 break;
298 case HTML_PARABREAK_ON:
299 m_sTextToken.Erase();
300 break;
301 case HTML_TABLEDATA_OFF:
302 if ( m_sCurrent.Len() )
303 m_sTextToken = m_sCurrent;
304 adjustFormat();
305 m_nColumnPos++;
306 m_bSDNum = m_bInTbl = sal_False;
307 m_sCurrent.Erase();
308 break;
309 case HTML_TABLEROW_OFF:
310 if ( m_sCurrent.Len() )
311 m_sTextToken = m_sCurrent;
312 adjustFormat();
313 m_nColumnPos = 0;
314 m_nRows--;
315 m_sCurrent.Erase();
316 break;
317 }
318 }
319 }
320 // -----------------------------------------------------------------------------
fetchOptions()321 void OHTMLReader::fetchOptions()
322 {
323 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::fetchOptions" );
324 m_bInTbl = sal_True;
325 const HTMLOptions* options = GetOptions();
326 sal_Int16 nArrLen = options->Count();
327 for ( sal_Int16 i = 0; i < nArrLen; i++ )
328 {
329 const HTMLOption* pOption = (*options)[i];
330 switch( pOption->GetToken() )
331 {
332 case HTML_O_SDVAL:
333 {
334 m_sValToken = pOption->GetString();
335 //m_sTextToken = pOption->GetString();
336 m_bSDNum = sal_True;
337 }
338 break;
339 case HTML_O_SDNUM:
340 m_sNumToken = pOption->GetString();
341 break;
342 }
343 }
344 }
345 //---------------------------------------------------------------------------------
TableDataOn(SvxCellHorJustify & eVal,int nToken)346 void OHTMLReader::TableDataOn(SvxCellHorJustify& eVal,int nToken)
347 {
348 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::TableDataOn" );
349 DBG_CHKTHIS(OHTMLReader,NULL);
350 sal_Bool bHorJustifyCenterTH = (nToken == HTML_TABLEHEADER_ON);
351 const HTMLOptions* pHtmlOptions = GetOptions();
352 sal_Int16 nArrLen = pHtmlOptions->Count();
353 for ( sal_Int16 i = 0; i < nArrLen; i++ )
354 {
355 const HTMLOption* pOption = (*pHtmlOptions)[i];
356 switch( pOption->GetToken() )
357 {
358 case HTML_O_ALIGN:
359 {
360 bHorJustifyCenterTH = sal_False;
361 const String& rOptVal = pOption->GetString();
362 if (rOptVal.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_AL_right ))
363 eVal = SVX_HOR_JUSTIFY_RIGHT;
364 else if (rOptVal.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_AL_center ))
365 eVal = SVX_HOR_JUSTIFY_CENTER;
366 else if (rOptVal.EqualsIgnoreCaseAscii( OOO_STRING_SVTOOLS_HTML_AL_left ))
367 eVal = SVX_HOR_JUSTIFY_LEFT;
368 else
369 eVal = SVX_HOR_JUSTIFY_STANDARD;
370 }
371 break;
372 case HTML_O_WIDTH:
373 m_nWidth = GetWidthPixel( pOption );
374 break;
375 }
376 }
377 }
378
379 //---------------------------------------------------------------------------------
TableFontOn(FontDescriptor & _rFont,sal_Int32 & _rTextColor)380 void OHTMLReader::TableFontOn(FontDescriptor& _rFont,sal_Int32 &_rTextColor)
381 {
382 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::TableFontOn" );
383 DBG_CHKTHIS(OHTMLReader,NULL);
384 const HTMLOptions* pHtmlOptions = GetOptions();
385 sal_Int16 nArrLen = pHtmlOptions->Count();
386 for ( sal_Int16 i = 0; i < nArrLen; i++ )
387 {
388 const HTMLOption* pOption = (*pHtmlOptions)[i];
389 switch( pOption->GetToken() )
390 {
391 case HTML_O_COLOR:
392 {
393 Color aColor;
394 pOption->GetColor( aColor );
395 _rTextColor = aColor.GetRGBColor();
396 }
397 break;
398 case HTML_O_FACE :
399 {
400 const String& rFace = pOption->GetString();
401 String aFontName;
402 xub_StrLen nPos = 0;
403 while( nPos != STRING_NOTFOUND )
404 { // Fontliste, VCL: Semikolon als Separator, HTML: Komma
405 String aFName = rFace.GetToken( 0, ',', nPos );
406 aFName.EraseTrailingChars().EraseLeadingChars();
407 if( aFontName.Len() )
408 aFontName += ';';
409 aFontName += aFName;
410 }
411 if ( aFontName.Len() )
412 _rFont.Name = ::rtl::OUString(aFontName);
413 }
414 break;
415 case HTML_O_SIZE :
416 {
417 sal_Int16 nSize = (sal_Int16) pOption->GetNumber();
418 if ( nSize == 0 )
419 nSize = 1;
420 else if ( nSize < DBAUI_HTML_FONTSIZES )
421 nSize = DBAUI_HTML_FONTSIZES;
422
423 _rFont.Height = nSize;
424 }
425 break;
426 }
427 }
428 }
429 // ---------------------------------------------------------------------------
GetWidthPixel(const HTMLOption * pOption)430 sal_Int16 OHTMLReader::GetWidthPixel( const HTMLOption* pOption )
431 {
432 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::GetWidthPixel" );
433 DBG_CHKTHIS(OHTMLReader,NULL);
434 const String& rOptVal = pOption->GetString();
435 if ( rOptVal.Search('%') != STRING_NOTFOUND )
436 { // Prozent
437 DBG_ASSERT( m_nColumnWidth, "WIDTH Option: m_nColumnWidth==0 und Width%" );
438 return (sal_Int16)((pOption->GetNumber() * m_nColumnWidth) / 100);
439 }
440 else
441 {
442 if ( rOptVal.Search('*') != STRING_NOTFOUND )
443 { // relativ zu was?!?
444 //2do: ColArray aller relativen Werte sammeln und dann MakeCol
445 return 0;
446 }
447 else
448 return (sal_Int16)pOption->GetNumber(); // Pixel
449 }
450 }
451 // ---------------------------------------------------------------------------
CreateTable(int nToken)452 sal_Bool OHTMLReader::CreateTable(int nToken)
453 {
454 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::CreateTable" );
455 DBG_CHKTHIS(OHTMLReader,NULL);
456 String aTempName(ModuleRes(STR_TBL_TITLE));
457 aTempName = aTempName.GetToken(0,' ');
458 aTempName = String(::dbtools::createUniqueName(m_xTables,::rtl::OUString(aTempName )));
459
460 int nTmpToken2 = nToken;
461 sal_Bool bCaption = sal_False;
462 sal_Bool bTableHeader = sal_False;
463 String aColumnName;
464 SvxCellHorJustify eVal;
465
466 String aTableName;
467 FontDescriptor aFont = ::dbaui::CreateFontDescriptor(Application::GetSettings().GetStyleSettings().GetAppFont());
468 sal_Int32 nTextColor = 0;
469 do
470 {
471 switch(nTmpToken2)
472 {
473 case HTML_TEXTTOKEN:
474 case HTML_SINGLECHAR:
475 if(bTableHeader)
476 aColumnName += aToken;
477 if(bCaption)
478 aTableName += aToken;
479 break;
480 case HTML_PARABREAK_OFF:
481 m_sCurrent += aColumnName;
482 break;
483 case HTML_PARABREAK_ON:
484 m_sTextToken.Erase();
485 break;
486 case HTML_TABLEDATA_ON:
487 // m_bAppendFirstLine = true;
488 // run through
489 case HTML_TABLEHEADER_ON:
490 TableDataOn(eVal,nTmpToken2);
491 bTableHeader = sal_True;
492 break;
493 case HTML_TABLEDATA_OFF:
494 // m_bAppendFirstLine = true;
495 // run through
496 case HTML_TABLEHEADER_OFF:
497 {
498 aColumnName.EraseLeadingChars();
499 aColumnName.EraseTrailingChars();
500 if (!aColumnName.Len() || m_bAppendFirstLine )
501 aColumnName = String(ModuleRes(STR_COLUMN_NAME));
502 else if ( m_sCurrent.Len() )
503 aColumnName = m_sCurrent;
504
505 aColumnName.EraseLeadingChars();
506 aColumnName.EraseTrailingChars();
507 CreateDefaultColumn(aColumnName);
508 aColumnName.Erase();
509 m_sCurrent.Erase();
510
511 eVal = SVX_HOR_JUSTIFY_STANDARD;
512 bTableHeader = sal_False;
513 }
514 break;
515
516 case HTML_TITLE_ON:
517 case HTML_CAPTION_ON:
518 bCaption = sal_True;
519 break;
520 case HTML_TITLE_OFF:
521 case HTML_CAPTION_OFF:
522 aTableName.EraseLeadingChars();
523 aTableName.EraseTrailingChars();
524 if(!aTableName.Len())
525 aTableName = String(::dbtools::createUniqueName(m_xTables,::rtl::OUString(aTableName)));
526 else
527 aTableName = aTempName;
528 bCaption = sal_False;
529 break;
530 case HTML_FONT_ON:
531 TableFontOn(aFont,nTextColor);
532 break;
533 case HTML_BOLD_ON:
534 aFont.Weight = ::com::sun::star::awt::FontWeight::BOLD;
535 break;
536 case HTML_ITALIC_ON:
537 aFont.Slant = ::com::sun::star::awt::FontSlant_ITALIC;
538 break;
539 case HTML_UNDERLINE_ON:
540 aFont.Underline = ::com::sun::star::awt::FontUnderline::SINGLE;
541 break;
542 case HTML_STRIKE_ON:
543 aFont.Strikeout = ::com::sun::star::awt::FontStrikeout::SINGLE;
544 break;
545 }
546 }
547 while((nTmpToken2 = GetNextToken()) != HTML_TABLEROW_OFF);
548
549 if ( m_sCurrent.Len() )
550 aColumnName = m_sCurrent;
551 aColumnName.EraseLeadingChars();
552 aColumnName.EraseTrailingChars();
553 if(aColumnName.Len())
554 CreateDefaultColumn(aColumnName);
555
556 if ( m_vDestVector.empty() )
557 return sal_False;
558
559 if(!aTableName.Len())
560 aTableName = aTempName;
561
562 m_bInTbl = sal_False;
563 m_bFoundTable = sal_True;
564
565 if ( isCheckEnabled() )
566 return sal_True;
567
568 return !executeWizard(aTableName,makeAny(nTextColor),aFont) && m_xTable.is();
569 }
570 // -----------------------------------------------------------------------------
setTextEncoding()571 void OHTMLReader::setTextEncoding()
572 {
573 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::setTextEncoding" );
574 DBG_CHKTHIS(OHTMLReader,NULL);
575 m_bMetaOptions = sal_True;
576 ParseMetaOptions(NULL, NULL);
577 }
578
579 // -----------------------------------------------------------------------------
release()580 void OHTMLReader::release()
581 {
582 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::release" );
583 DBG_CHKTHIS(OHTMLReader,NULL);
584 ReleaseRef();
585 }
586 // -----------------------------------------------------------------------------
getTypeSelectionPageFactory()587 TypeSelectionPageFactory OHTMLReader::getTypeSelectionPageFactory()
588 {
589 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "misc", "Ocke.Janssen@sun.com", "OHTMLReader::getTypeSelectionPageFactory" );
590 DBG_CHKTHIS(OHTMLReader,NULL);
591 return &OWizHTMLExtend::Create;
592 }
593 // -----------------------------------------------------------------------------
594
595