20#include "texthandler.h"
21#include "conversion.h"
23#include <wv2/styles.h>
25#include <wv2/paragraphproperties.h>
26#include <wv2/functor.h>
27#include <wv2/functordata.h>
28#include <wv2/ustring.h>
29#include <wv2/parser.h>
30#include <wv2/fields.h>
33#include <tqfontinfo.h>
38wvWare::U8 KWordReplacementHandler::hardLineBreak()
43wvWare::U8 KWordReplacementHandler::nonBreakingHyphen()
48wvWare::U8 KWordReplacementHandler::nonRequiredHyphen()
54KWordTextHandler::KWordTextHandler( wvWare::SharedPtr<wvWare::Parser> parser )
55 : m_parser( parser ), m_sectionNumber( 0 ), m_footNoteNumber( 0 ), m_endNoteNumber( 0 ),
56 m_previousOutlineLSID( 0 ), m_previousEnumLSID( 0 ),
57 m_currentStyle( 0L ), m_index( 0 ),
59 m_bInParagraph( false ),
60 m_insideField( false ), m_fieldAfterSeparator( false ), m_fieldType( 0 )
64void KWordTextHandler::sectionStart( wvWare::SharedPtr<const wvWare::Word97::SEP> sep )
68 if ( m_sectionNumber == 1 )
73 emit firstSectionFound( sep );
85void KWordTextHandler::sectionEnd()
90void KWordTextHandler::pageBreak()
93 TQDomElement pageBreak = m_oldLayout.namedItem(
"PAGEBREAKING" ).toElement();
94 if ( pageBreak.isNull() )
96 pageBreak = mainDocument().createElement(
"PAGEBREAKING" );
97 m_oldLayout.appendChild( pageBreak );
99 pageBreak.setAttribute(
"hardFrameBreakAfter",
"true" );
102void KWordTextHandler::headersFound(
const wvWare::HeaderFunctor& parseHeaders )
105 if ( m_sectionNumber == 1 )
107 emit subDocFound(
new wvWare::HeaderFunctor( parseHeaders ), 0 );
111void KWordTextHandler::footnoteFound( wvWare::FootnoteData::Type type,
112 wvWare::UChar character, wvWare::SharedPtr<const wvWare::Word97::CHP> chp,
113 const wvWare::FootnoteFunctor& parseFootnote )
115 bool autoNumbered = (character.unicode() == 2);
116 TQDomElement varElem = insertVariable( 11 , chp,
"STRI" );
117 TQDomElement footnoteElem = varElem.ownerDocument().createElement(
"FOOTNOTE" );
119 footnoteElem.setAttribute(
"value", 1 );
121 footnoteElem.setAttribute(
"value", TQString(TQChar(character.unicode())) );
122 footnoteElem.setAttribute(
"notetype", type == wvWare::FootnoteData::Endnote ?
"endnote" :
"footnote" );
123 footnoteElem.setAttribute(
"numberingtype", autoNumbered ?
"auto" :
"manual" );
124 if ( type == wvWare::FootnoteData::Endnote )
126 footnoteElem.setAttribute(
"frameset", i18n(
"Endnote %1").arg( ++m_endNoteNumber ) );
129 footnoteElem.setAttribute(
"frameset", i18n(
"Footnote %1").arg( ++m_footNoteNumber ) );
130 varElem.appendChild( footnoteElem );
133 emit subDocFound(
new wvWare::FootnoteFunctor( parseFootnote ), type );
136TQDomElement KWordTextHandler::insertVariable(
int type, wvWare::SharedPtr<const wvWare::Word97::CHP> chp,
const TQString& format )
140 TQDomElement formatElem;
141 writeFormat( m_formats, chp, m_currentStyle ? &m_currentStyle->chp() : 0, m_index, 1, 4 , &formatElem );
145 TQDomElement varElem = m_formats.ownerDocument().createElement(
"VARIABLE" );
146 TQDomElement typeElem = m_formats.ownerDocument().createElement(
"TYPE" );
147 typeElem.setAttribute(
"type", type );
148 typeElem.setAttribute(
"key", format );
149 varElem.appendChild( typeElem );
150 formatElem.appendChild( varElem );
154void KWordTextHandler::tableRowFound(
const wvWare::TableRowFunctor& functor, wvWare::SharedPtr<const wvWare::Word97::TAP> tap )
156 if ( !m_currentTable )
159 Q_ASSERT( !m_bInParagraph );
160 paragraphStart( 0L );
161 static int s_tableNumber = 0;
162 m_currentTable =
new KWord::Table();
163 m_currentTable->name = i18n(
"Table %1").arg( ++s_tableNumber );
164 insertAnchor( m_currentTable->name );
168 for (
int i = 0; i <= tap->itcMac; i++)
169 m_currentTable->cacheCellEdge( tap->rgdxaCenter[ i ] );
171 KWord::Row row(
new wvWare::TableRowFunctor( functor ), tap );
172 m_currentTable->rows.append( row );
176void KWordTextHandler::pictureFound(
const wvWare::PictureFunctor& pictureFunctor,
177 wvWare::SharedPtr<const wvWare::Word97::PICF> picf,
178 wvWare::SharedPtr<const wvWare::Word97::CHP> )
180 static unsigned int s_pictureNumber = 0;
181 TQString pictureName =
"pictures/picture";
182 pictureName += TQString::number( s_pictureNumber );
184 TQString frameName = i18n(
"Picture %1").arg( ++s_pictureNumber );
185 insertAnchor( frameName );
187 switch ( picf->mfp.mm ) {
189 pictureName +=
".tif";
192 pictureName +=
".bmp";
195 pictureName +=
".wmf";
199 emit pictureFound( frameName, pictureName,
new wvWare::PictureFunctor( pictureFunctor ) );
203TQDomElement KWordTextHandler::insertAnchor(
const TQString& fsname )
208 TQDomElement format( mainDocument().createElement(
"FORMAT" ) );
209 format.setAttribute(
"id", 6 );
210 format.setAttribute(
"pos", m_index );
211 format.setAttribute(
"len", 1 );
212 m_formats.appendChild( format );
213 TQDomElement formatElem = format;
217 TQDomElement anchorElem = m_formats.ownerDocument().createElement(
"ANCHOR" );
218 anchorElem.setAttribute(
"type",
"frameset" );
219 anchorElem.setAttribute(
"instance", fsname );
220 formatElem.appendChild( anchorElem );
224void KWordTextHandler::paragLayoutBegin()
228void KWordTextHandler::paragraphStart( wvWare::SharedPtr<const wvWare::ParagraphProperties> paragraphProperties )
230 if ( m_bInParagraph )
232 m_bInParagraph =
true;
234 m_formats = mainDocument().createElement(
"FORMATS" );
235 m_paragraphProperties = paragraphProperties;
236 const wvWare::StyleSheet& styles = m_parser->styleSheet();
238 if ( paragraphProperties )
240 m_currentStyle = styles.styleByIndex( paragraphProperties->pap().istd );
241 Q_ASSERT( m_currentStyle );
246void KWordTextHandler::paragraphEnd()
248 Q_ASSERT( m_bInParagraph );
249 if ( m_currentTable )
251 emit tableFound( *m_currentTable );
252 delete m_currentTable;
255 if ( m_currentStyle ) {
256 TQConstString styleName = Conversion::string( m_currentStyle->name() );
257 writeOutParagraph( styleName.string(), m_paragraph );
259 writeOutParagraph(
"Standard", m_paragraph );
260 m_bInParagraph =
false;
263void KWordTextHandler::fieldStart(
const wvWare::FLD* fld, wvWare::SharedPtr<const wvWare::Word97::CHP> )
265 m_fieldType = Conversion::fldToFieldType( fld );
266 m_insideField =
true;
267 m_fieldAfterSeparator =
false;
271void KWordTextHandler::fieldSeparator(
const wvWare::FLD* , wvWare::SharedPtr<const wvWare::Word97::CHP> )
273 m_fieldAfterSeparator =
true;
276void KWordTextHandler::fieldEnd(
const wvWare::FLD* , wvWare::SharedPtr<const wvWare::Word97::CHP> chp )
279 if( m_fieldType >= 0 )
281 TQDomElement varElem = insertVariable( 8, chp,
"STRING" );
282 TQDomElement fieldElem = varElem.ownerDocument().createElement(
"FIELD" );
283 fieldElem.setAttribute(
"subtype", m_fieldType );
284 fieldElem.setAttribute(
"value", m_fieldValue );
285 varElem.appendChild( fieldElem );
291 m_insideField =
false;
292 m_fieldAfterSeparator =
false;
295void KWordTextHandler::runOfText(
const wvWare::UString& text, wvWare::SharedPtr<const wvWare::Word97::CHP> chp )
297 TQConstString newText( Conversion::string( text ) );
301 if( m_insideField && !m_fieldAfterSeparator )
return;
304 if( m_insideField && m_fieldAfterSeparator && ( m_fieldType >= 0 ) )
306 m_fieldValue.append( newText.string() );
310 m_paragraph += newText.string();
312 writeFormat( m_formats, chp, m_currentStyle ? &m_currentStyle->chp() : 0, m_index, text.length(), 1, 0L );
314 m_index += text.length();
318void KWordTextHandler::writeFormat( TQDomElement& parentElement,
const wvWare::Word97::CHP* chp,
const wvWare::Word97::CHP* refChp,
int pos,
int len,
int formatId, TQDomElement* pChildElement )
320 TQDomElement format( mainDocument().createElement(
"FORMAT" ) );
321 format.setAttribute(
"id", formatId );
322 format.setAttribute(
"pos", pos );
323 format.setAttribute(
"len", len );
325 if ( !refChp || refChp->cv != chp->cv )
327 TQColor color = Conversion::color( chp->cv, -1 );
328 TQDomElement colorElem( mainDocument().createElement(
"COLOR" ) );
329 colorElem.setAttribute(
"red", color.red() );
330 colorElem.setAttribute(
"blue", color.blue() );
331 colorElem.setAttribute(
"green", color.green() );
332 format.appendChild( colorElem );
337 if ( !refChp || refChp->ftcAscii != chp->ftcAscii )
339 TQString fontName = getFont( chp->ftcAscii );
341 if ( !fontName.isEmpty() )
343 TQDomElement fontElem( mainDocument().createElement(
"FONT" ) );
344 fontElem.setAttribute(
"name", fontName );
345 format.appendChild( fontElem );
349 if ( !refChp || refChp->hps != chp->hps )
352 TQDomElement fontSize( mainDocument().createElement(
"SIZE" ) );
353 fontSize.setAttribute(
"value", (
int)(chp->hps / 2) );
354 format.appendChild( fontSize );
357 if ( !refChp || refChp->fBold != chp->fBold ) {
358 TQDomElement weight( mainDocument().createElement(
"WEIGHT" ) );
359 weight.setAttribute(
"value", chp->fBold ? 75 : 50 );
360 format.appendChild( weight );
362 if ( !refChp || refChp->fItalic != chp->fItalic ) {
363 TQDomElement italic( mainDocument().createElement(
"ITALIC" ) );
364 italic.setAttribute(
"value", chp->fItalic ? 1 : 0 );
365 format.appendChild( italic );
367 if ( !refChp || refChp->kul != chp->kul ) {
368 TQDomElement underline( mainDocument().createElement(
"UNDERLINE" ) );
369 TQString val = (chp->kul == 0) ?
"0" :
"1";
370 switch ( chp->kul ) {
372 underline.setAttribute(
"styleline",
"solid" );
376 underline.setAttribute(
"styleline",
"solid" );
380 underline.setAttribute(
"styleline",
"dash" );
384 underline.setAttribute(
"styleline",
"dot" );
387 underline.setAttribute(
"styleline",
"dashdot" );
390 underline.setAttribute(
"styleline",
"dashdotdot" );
393 underline.setAttribute(
"styleline",
"wave" );
401 underline.setAttribute(
"styleline",
"solid" );
403 underline.setAttribute(
"value", val );
404 format.appendChild( underline );
406 if ( !refChp || refChp->fStrike != chp->fStrike || refChp->fDStrike != chp->fDStrike ) {
407 TQDomElement strikeout( mainDocument().createElement(
"STRIKEOUT" ) );
410 strikeout.setAttribute(
"value",
"double" );
411 strikeout.setAttribute(
"styleline",
"solid" );
413 else if ( chp->fStrike )
415 strikeout.setAttribute(
"value",
"single" );
416 strikeout.setAttribute(
"styleline",
"solid" );
419 strikeout.setAttribute(
"value",
"0" );
420 format.appendChild( strikeout );
424 if ( !refChp || refChp->fCaps != chp->fCaps || refChp->fSmallCaps != chp->fSmallCaps )
426 TQDomElement fontAttrib( mainDocument().createElement(
"FONTATTRIBUTE" ) );
427 fontAttrib.setAttribute(
"value", chp->fSmallCaps ?
"smallcaps" : chp->fCaps ?
"uppercase" :
"none" );
428 format.appendChild( fontAttrib );
430 if ( !refChp || refChp->iss != chp->iss ) {
431 TQDomElement vertAlign( mainDocument().createElement(
"VERTALIGN" ) );
433 int kwordVAlign = (chp->iss==1 ? 2 : chp->iss==2 ? 1 : 0);
434 vertAlign.setAttribute(
"value", kwordVAlign );
435 format.appendChild( vertAlign );
439 if ( !refChp || refChp->fHighlight != chp->fHighlight || refChp->icoHighlight != chp->icoHighlight ) {
440 TQDomElement bgcolElem( mainDocument().createElement(
"TEXTBACKGROUNDCOLOR" ) );
441 if ( chp->fHighlight )
443 TQColor color = Conversion::color( chp->icoHighlight, -1 );
444 bgcolElem.setAttribute(
"red", color.red() );
445 bgcolElem.setAttribute(
"blue", color.blue() );
446 bgcolElem.setAttribute(
"green", color.green() );
448 bgcolElem.setAttribute(
"red", -1 );
449 bgcolElem.setAttribute(
"blue", -1 );
450 bgcolElem.setAttribute(
"green", -1 );
452 format.appendChild( bgcolElem );
456 if ( !refChp || refChp->fShadow != chp->fShadow || refChp->fImprint != chp->fImprint ) {
457 TQDomElement shadowElem( mainDocument().createElement(
"SHADOW" ) );
458 TQString css =
"none";
461 if (chp->fShadow || chp->fImprint)
463 int fontSize = (int)(chp->hps / 2);
464 int dist = fontSize > 20 ? 2 : 1;
467 css = TQString::fromLatin1(
"#bebebe %1pt %1pt").arg(dist).arg(dist);
469 shadowElem.setAttribute(
"text-shadow", css );
470 format.appendChild( shadowElem );
473 if ( pChildElement || !format.firstChild().isNull() )
474 parentElement.appendChild( format );
476 *pChildElement = format;
483TQString KWordTextHandler::getFont(
unsigned fc)
const
485 Q_ASSERT( m_parser );
488 const wvWare::Word97::FFN& ffn ( m_parser->font( fc ) );
490 TQConstString fontName( Conversion::string( ffn.xszFfn ) );
491 TQString font = fontName.string();
494 kdDebug(30513) <<
" MS-FONT: " << font << endl;
497 static const unsigned ENTRIES = 6;
498 static const char*
const fuzzyLookup[ENTRIES][2] =
502 {
"times",
"times" },
503 {
"courier",
"courier" },
504 {
"andale",
"monotype" },
505 {
"monotype.com",
"monotype" },
506 {
"georgia",
"times" },
507 {
"helvetica",
"helvetica" }
515 for (i = 0; i < ENTRIES; i++)
518 if (font.find(fuzzyLookup[i][0], 0,
false) != -1)
520 font = fuzzyLookup[i][1];
526 kdDebug(30513) <<
" FUZZY-FONT: " << font << endl;
530 TQFont xFont( font );
531 TQFontInfo info( xFont );
534 kdDebug(30513) <<
" TQt-FONT: " << info.family() << endl;
537 return info.family();
540void KWordTextHandler::writeOutParagraph(
const TQString& styleName,
const TQString& text )
542 if ( m_framesetElement.isNull() )
544 if ( !text.isEmpty() )
545 kdWarning(30513) <<
"KWordTextHandler: no frameset element to write to! text=" << text << endl;
548 TQDomElement paragraphElementOut=mainDocument().createElement(
"PARAGRAPH");
549 m_framesetElement.appendChild(paragraphElementOut);
550 TQDomElement textElement=mainDocument().createElement(
"TEXT");
551 textElement.setAttribute(
"xml:space",
"preserve" );
552 paragraphElementOut.appendChild(textElement);
553 paragraphElementOut.appendChild( m_formats );
554 TQDomElement layoutElement=mainDocument().createElement(
"LAYOUT");
555 paragraphElementOut.appendChild(layoutElement);
557 TQDomElement nameElement = mainDocument().createElement(
"NAME");
558 nameElement.setAttribute(
"value", styleName);
559 layoutElement.appendChild(nameElement);
561 if ( m_paragraphProperties )
564 writeLayout( layoutElement, *m_paragraphProperties, m_currentStyle );
567 textElement.appendChild(mainDocument().createTextNode(text));
569 m_paragraph = TQString(
"" );
571 m_oldLayout = layoutElement;
574void KWordTextHandler::writeLayout( TQDomElement& parentElement,
const wvWare::ParagraphProperties& paragraphProperties,
const wvWare::Style* style )
576 const wvWare::Word97::PAP& pap = paragraphProperties.pap();
578 TQDomElement flowElement = mainDocument().createElement(
"FLOW");
579 TQString alignment = Conversion::alignment( pap.jc );
580 flowElement.setAttribute(
"align", alignment );
581 parentElement.appendChild( flowElement );
585 if ( pap.dxaLeft1 || pap.dxaLeft || pap.dxaRight )
587 TQDomElement indentsElement = mainDocument().createElement(
"INDENTS");
589 indentsElement.setAttribute(
"first", (
double)pap.dxaLeft1 / 20.0 );
590 indentsElement.setAttribute(
"left", (
double)pap.dxaLeft / 20.0 );
591 indentsElement.setAttribute(
"right", (
double)pap.dxaRight / 20.0 );
592 parentElement.appendChild( indentsElement );
594 if ( pap.dyaBefore || pap.dyaAfter )
596 TQDomElement offsetsElement = mainDocument().createElement(
"OFFSETS");
597 offsetsElement.setAttribute(
"before", (
double)pap.dyaBefore / 20.0 );
598 offsetsElement.setAttribute(
"after", (
double)pap.dyaAfter / 20.0 );
599 parentElement.appendChild( offsetsElement );
603 TQString lineSpacing = Conversion::lineSpacing( pap.lspd );
604 if ( lineSpacing !=
"0" )
606 TQDomElement lineSpacingElem = mainDocument().createElement(
"LINESPACING" );
607 lineSpacingElem.setAttribute(
"value", lineSpacing );
608 parentElement.appendChild( lineSpacingElem );
611 if ( pap.fKeep || pap.fKeepFollow || pap.fPageBreakBefore )
613 TQDomElement pageBreak = mainDocument().createElement(
"PAGEBREAKING" );
615 pageBreak.setAttribute(
"linesTogether",
"true");
616 if ( pap.fPageBreakBefore )
617 pageBreak.setAttribute(
"hardFrameBreak",
"true" );
618 if ( pap.fKeepFollow )
619 pageBreak.setAttribute(
"keepWithNext",
"true" );
620 parentElement.appendChild( pageBreak );
624 if ( pap.brcTop.brcType )
626 TQDomElement borderElement = mainDocument().createElement(
"TOPBORDER" );
627 Conversion::setBorderAttributes( borderElement, pap.brcTop );
628 parentElement.appendChild( borderElement );
630 if ( pap.brcBottom.brcType )
632 TQDomElement borderElement = mainDocument().createElement(
"BOTTOMBORDER" );
633 Conversion::setBorderAttributes( borderElement, pap.brcBottom );
634 parentElement.appendChild( borderElement );
636 if ( pap.brcLeft.brcType )
638 TQDomElement borderElement = mainDocument().createElement(
"LEFTBORDER" );
639 Conversion::setBorderAttributes( borderElement, pap.brcLeft );
640 parentElement.appendChild( borderElement );
642 if ( pap.brcRight.brcType )
644 TQDomElement borderElement = mainDocument().createElement(
"RIGHTBORDER" );
645 Conversion::setBorderAttributes( borderElement, pap.brcRight );
646 parentElement.appendChild( borderElement );
652 for (
int i = 0 ; i < pap.itbdMac ; ++i )
654 const wvWare::Word97::TabDescriptor &td = pap.rgdxaTab[i];
655 TQDomElement tabElement = mainDocument().createElement(
"TABULATOR" );
656 tabElement.setAttribute(
"ptpos", (
double)td.dxaTab / 20.0 );
660 tabElement.setAttribute(
"type", td.tbd.jc % 4 );
663 switch ( td.tbd.tlc ) {
675 tabElement.setAttribute(
"filling", filling );
676 tabElement.setAttribute(
"width", width );
677 parentElement.appendChild( tabElement );
683 writeCounter( parentElement, paragraphProperties, style );
687void KWordTextHandler::writeCounter( TQDomElement& parentElement,
const wvWare::ParagraphProperties& paragraphProperties,
const wvWare::Style* style )
689 const wvWare::ListInfo* listInfo = paragraphProperties.listInfo();
697 TQDomElement counterElement = mainDocument().createElement(
"COUNTER" );
700 int numberingType = listInfo->isWord6() && listInfo->prev() ? 1 : 0;
701 wvWare::UString text = listInfo->text().text;
702 int nfc = listInfo->numberFormat();
705 if ( text.length() == 1 )
707 unsigned int code = text[0].unicode();
708 if ( (code & 0xFF00) == 0xF000 )
714 counterElement.setAttribute(
"type", 10 );
715 }
else if ( code == 0xD8 )
717 counterElement.setAttribute(
"type", 11 );
720 kdDebug(30513) <<
"custom bullet, code=" << TQString::number(code,16) << endl;
721 counterElement.setAttribute(
"type", 6 );
722 counterElement.setAttribute(
"bullet", code );
723 TQString paragFont = getFont( style->chp().ftcAscii );
724 counterElement.setAttribute(
"bulletfont", paragFont );
727 kdWarning(30513) <<
"Bullet with more than one character, not supported" << endl;
731 const wvWare::Word97::PAP& pap = paragraphProperties.pap();
732 counterElement.setAttribute(
"start", listInfo->startAt() );
734 int depth = pap.ilvl;
737 bool isHeading = style->sti() >= 1 && style->sti() <= 9;
738 if ( depth == 0 && isHeading )
740 depth = style->sti() - 1;
742 kdDebug(30513) <<
" ilfo=" << pap.ilfo <<
" ilvl=" << pap.ilvl <<
" sti=" << style->sti() <<
" depth=" << depth <<
" numberingType=" << numberingType << endl;
743 counterElement.setAttribute(
"depth", depth );
747 TQString prefix, suffix;
748 bool depthFound =
false;
749 int displayLevels = 1;
753 for (
int i = 0 ; i < text.length() ; ++i )
755 short ch = text[i].unicode();
758 if ( ch == pap.ilvl ) {
760 kdWarning(30513) <<
"ilvl " << pap.ilvl <<
" found twice in listInfo text..." << endl;
765 Q_ASSERT( ch < pap.ilvl );
772 suffix += TQChar(ch);
774 prefix += TQChar(ch);
777 if ( displayLevels > 1 )
783 if ( depth > 0 && !prefix.isEmpty() && m_listSuffixes[ depth - 1 ] == prefix ) {
785 kdDebug(30513) <<
"depth=" << depth <<
" parent suffix is " << prefix <<
" -> clearing" << endl;
793 if ( nfc == 5 && suffix.isEmpty() )
795 kdDebug(30513) <<
" prefix=" << prefix <<
" suffix=" << suffix << endl;
796 counterElement.setAttribute(
"type", Conversion::numberFormatCode( nfc ) );
797 counterElement.setAttribute(
"lefttext", prefix );
798 counterElement.setAttribute(
"righttext", suffix );
799 counterElement.setAttribute(
"display-levels", displayLevels );
800 kdDebug(30513) <<
"storing suffix " << suffix <<
" for depth " << depth << endl;
801 m_listSuffixes[ depth ] = suffix;
805 kdWarning(30513) <<
"Not supported: counter text without the depth in it:" << Conversion::string(text).string() << endl;
808 if ( listInfo->startAtOverridden() ||
809 ( numberingType == 1 && m_previousOutlineLSID != 0 && m_previousOutlineLSID != listInfo->lsid() ) ||
810 ( numberingType == 0 &&m_previousEnumLSID != 0 && m_previousEnumLSID != listInfo->lsid() ) )
811 counterElement.setAttribute(
"restart",
"true" );
818 if ( numberingType == 1 )
819 m_previousOutlineLSID = listInfo->lsid();
821 m_previousEnumLSID = listInfo->lsid();
822 counterElement.setAttribute(
"numberingtype", numberingType );
823 parentElement.appendChild( counterElement );
826void KWordTextHandler::setFrameSetElement(
const TQDomElement& frameset )
828 m_framesetElement = frameset;
829 for ( uint i = 0 ; i < 9 ; ++i )
830 m_listSuffixes[i] = TQString();
833TQDomDocument KWordTextHandler::mainDocument()
const
835 return m_framesetElement.ownerDocument();
838#include "texthandler.moc"