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 _RTFATTRIBUTEOUTPUT_HXX_ 25 #define _RTFATTRIBUTEOUTPUT_HXX_ 26 27 #include <set> 28 #include "attributeoutputbase.hxx" 29 #include "fields.hxx" 30 31 #include <vcl/vclenum.hxx> 32 33 #include <fldbas.hxx> 34 #include <rtl/strbuf.hxx> 35 36 #include <vector> 37 38 class RtfExport; 39 40 class SwGrfNode; 41 class SwOLENode; 42 class SdrObject; 43 class SwFlyFrmFmt; 44 45 ////////////////////////////////////////////////////////////////////////////// 46 class MultiBufferEntry; 47 48 class MultiBuffer 49 { 50 private: 51 rtl::OStringBuffer maBuffer; 52 std::vector< MultiBufferEntry* > maContent; 53 54 void clearContentVector(); 55 56 public: 57 MultiBuffer(); 58 virtual ~MultiBuffer(); 59 getOStringBuffer()60 rtl::OStringBuffer& getOStringBuffer() { return maBuffer; } 61 62 bool empty() const; 63 void writeAndClear(SvStream& rTarget); 64 void appendAndClear(MultiBuffer& rSource); 65 void clear(); 66 void appendHexData(const sal_uInt8 *pGraphicAry, sal_uInt32 nSize, sal_uInt32 nLimit = 64); 67 }; 68 69 ////////////////////////////////////////////////////////////////////////////// 70 71 class RtfAttributeOutput : public AttributeOutputBase 72 { 73 public: 74 /// Export the state of RTL/CJK. 75 virtual void RTLAndCJKState( bool bIsRTL, sal_uInt16 nScript ); 76 77 /// Start of the paragraph. 78 virtual void StartParagraph( ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo ); 79 80 /// End of the paragraph. 81 virtual void EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ); 82 83 /// Empty paragraph. 84 virtual void EmptyParagraph(); 85 86 /// Called before we start outputting the attributes. 87 virtual void StartParagraphProperties( const SwTxtNode& rNode ); 88 89 /// Called after we end outputting the attributes. 90 virtual void EndParagraphProperties(); 91 92 /// Start of the text run. 93 virtual void StartRun( const SwRedlineData* pRedlineData ); 94 95 /// End of the text run. 96 virtual void EndRun(); 97 98 /// Called before we start outputting the attributes. 99 virtual void StartRunProperties(); 100 101 /// Called after we end outputting the attributes. 102 virtual void EndRunProperties( const SwRedlineData* pRedlineData ); 103 104 /// Output text (inside a run). 105 virtual void RunText( const String& rText, rtl_TextEncoding eCharSet = RTL_TEXTENCODING_UTF8 ); 106 107 // Access to (anyway) private buffers, used by the sdr exporter 108 rtl::OStringBuffer& RunText(); 109 rtl::OStringBuffer& Styles(); 110 111 /// Output text (without markup). 112 virtual void RawText( const String& rText, bool bForceUnicode, rtl_TextEncoding eCharSet ); 113 114 /// Output ruby start. 115 virtual void StartRuby( const SwTxtNode& rNode, const SwFmtRuby& rRuby ); 116 117 /// Output ruby end. 118 virtual void EndRuby(); 119 120 /// Output URL start. 121 virtual bool StartURL( const String& rUrl, const String& rTarget ); 122 123 /// Output URL end. 124 virtual bool EndURL(); 125 126 virtual void FieldVanish( const String& rTxt, ww::eField eType ); 127 128 /// Output redlining. 129 /// 130 /// The common attribute that can be among the run properties. 131 virtual void Redline( const SwRedlineData* pRedline ); 132 133 virtual void FormatDrop( const SwTxtNode& rNode, const SwFmtDrop& rSwFmtDrop, sal_uInt16 nStyle, ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo, ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner ); 134 135 /// Output style. 136 virtual void ParagraphStyle( sal_uInt16 nStyle ); 137 138 virtual void TableInfoCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 139 140 virtual void TableInfoRow( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 141 142 virtual void TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 143 144 virtual void TableDefaultBorders( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 145 146 virtual void TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 147 148 virtual void TableHeight( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 149 150 virtual void TableCanSplit( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 151 152 virtual void TableBidi( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 153 154 virtual void TableVerticalCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 155 156 virtual void TableNodeInfo( ww8::WW8TableNodeInfo::Pointer_t pNodeInfo ); 157 158 virtual void TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner ); 159 160 virtual void TableOrientation( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 161 162 virtual void TableSpacing( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 163 164 virtual void TableRowEnd( sal_uInt32 nDepth ); 165 166 /// Start of the styles table. 167 virtual void StartStyles(); 168 169 /// End of the styles table. 170 virtual void EndStyles( sal_uInt16 nNumberOfStyles ); 171 172 /// Write default style. 173 virtual void DefaultStyle( sal_uInt16 nStyle ); 174 175 /// Start of a style in the styles table. 176 virtual void StartStyle( const String& rName, bool bPapFmt, 177 sal_uInt16 nBase, sal_uInt16 nNext, sal_uInt16 nWwId, sal_uInt16 nId ); 178 179 /// End of a style in the styles table. 180 virtual void EndStyle(); 181 182 /// Start of (paragraph or run) properties of a style. 183 virtual void StartStyleProperties( bool bParProp, sal_uInt16 nStyle ); 184 185 /// End of (paragraph or run) properties of a style. 186 virtual void EndStyleProperties( bool bParProp ); 187 188 /// Numbering rule and Id. 189 virtual void OutlineNumbering( sal_uInt8 nLvl, const SwNumFmt &rNFmt, const SwFmt &rFmt ); 190 191 /// Page break 192 /// As a paragraph property - the paragraph should be on the next page. 193 virtual void PageBreakBefore( bool bBreak ); 194 195 /// Write a section break 196 /// msword::ColumnBreak or msword::PageBreak 197 virtual void SectionBreak( sal_uInt8 nC, const WW8_SepInfo* pSectionInfo = NULL ); 198 199 /// Start of the section properties. 200 virtual void StartSection(); 201 202 /// End of the section properties. 203 virtual void EndSection(); 204 205 /// Protection of forms. 206 virtual void SectionFormProtection( bool bProtected ); 207 208 /// Numbering of the lines in the document. 209 virtual void SectionLineNumbering( sal_uLong nRestartNo, const SwLineNumberInfo& rLnNumInfo ); 210 211 /// Has different headers/footers for the title page. 212 virtual void SectionTitlePage(); 213 214 /// Description of the page borders. 215 virtual void SectionPageBorders( const SwFrmFmt* pFmt, const SwFrmFmt* pFirstPageFmt ); 216 217 /// Columns populated from right/numbers on the right side? 218 virtual void SectionBiDi( bool bBiDi ); 219 220 /// The style of the page numbers. 221 /// 222 /// nPageRestartNumberr being 0 means no restart. 223 virtual void SectionPageNumbering( sal_uInt16 nNumType, sal_uInt16 nPageRestartNumber ); 224 225 /// The type of breaking. 226 virtual void SectionType( sal_uInt8 nBreakCode ); 227 228 /// Definition of a numbering instance. 229 virtual void NumberingDefinition( sal_uInt16 nId, const SwNumRule &rRule ); 230 231 /// Start of the abstract numbering definition instance. 232 virtual void StartAbstractNumbering( sal_uInt16 nId ); 233 234 /// End of the abstract numbering definition instance. 235 virtual void EndAbstractNumbering(); 236 237 /// All the numbering level information. 238 virtual void NumberingLevel( sal_uInt8 nLevel, 239 sal_uInt16 nStart, 240 sal_uInt16 nNumberingType, 241 SvxAdjust eAdjust, 242 const sal_uInt8 *pNumLvlPos, 243 sal_uInt8 nFollow, 244 const wwFont *pFont, 245 const SfxItemSet *pOutSet, 246 sal_Int16 nIndentAt, 247 sal_Int16 nFirstLineIndex, 248 sal_Int16 nListTabPos, 249 const String &rNumberingString, 250 const SvxBrushItem* pBrush = 0);//For i120928,to export graphic of bullet 251 252 void WriteField_Impl( const SwField* pFld, ww::eField eType, const String& rFldCmd, sal_uInt8 nMode ); 253 void WriteBookmarks_Impl( std::vector< rtl::OUString >& rStarts, std::vector< rtl::OUString >& rEnds ); 254 void WriteHeaderFooter_Impl( const SwFrmFmt& rFmt, bool bHeader, const sal_Char* pStr ); 255 256 protected: 257 /// Output frames - the implementation. 258 virtual void OutputFlyFrame_Impl( const sw::Frame& rFmt, const Point& rNdTopLeft ); 259 260 /// Sfx item Sfx item RES_CHRATR_CASEMAP 261 virtual void CharCaseMap( const SvxCaseMapItem& rCaseMap ); 262 263 /// Sfx item Sfx item RES_CHRATR_COLOR 264 virtual void CharColor( const SvxColorItem& rColor); 265 266 /// Sfx item Sfx item RES_CHRATR_CONTOUR 267 virtual void CharContour( const SvxContourItem& rContour ); 268 269 /// Sfx item RES_CHRATR_CROSSEDOUT 270 virtual void CharCrossedOut( const SvxCrossedOutItem& rCrossedOut ); 271 272 /// Sfx item RES_CHRATR_ESCAPEMENT 273 virtual void CharEscapement( const SvxEscapementItem& rEscapement ); 274 275 /// Sfx item RES_CHRATR_FONT 276 virtual void CharFont( const SvxFontItem& rFont ); 277 278 /// Sfx item RES_CHRATR_FONTSIZE 279 virtual void CharFontSize( const SvxFontHeightItem& rFontSize ); 280 281 /// Sfx item RES_CHRATR_KERNING 282 virtual void CharKerning( const SvxKerningItem& rKerning ); 283 284 /// Sfx item RES_CHRATR_LANGUAGE 285 virtual void CharLanguage( const SvxLanguageItem& rLanguage ); 286 287 /// Sfx item RES_CHRATR_POSTURE 288 virtual void CharPosture( const SvxPostureItem& rPosture ); 289 290 /// Sfx item RES_CHRATR_SHADOWED 291 virtual void CharShadow( const SvxShadowedItem& rShadow ); 292 293 /// Sfx item RES_CHRATR_UNDERLINE 294 virtual void CharUnderline( const SvxUnderlineItem& rUnderline ); 295 296 /// Sfx item RES_CHRATR_WEIGHT 297 virtual void CharWeight( const SvxWeightItem& rWeight ); 298 299 /// Sfx item RES_CHRATR_AUTOKERN 300 virtual void CharAutoKern( const SvxAutoKernItem& ); 301 302 /// Sfx item RES_CHRATR_BLINK 303 virtual void CharAnimatedText( const SvxBlinkItem& rBlink ); 304 305 /// Sfx item RES_CHRATR_BACKGROUND 306 virtual void CharBackground( const SvxBrushItem& rBrush ); 307 308 /// Sfx item RES_CHRATR_CJK_FONT 309 virtual void CharFontCJK( const SvxFontItem& rFont ); 310 311 /// Sfx item RES_CHRATR_CJK_FONTSIZE 312 virtual void CharFontSizeCJK( const SvxFontHeightItem& rFontSize ); 313 314 /// Sfx item RES_CHRATR_CJK_LANGUAGE 315 virtual void CharLanguageCJK( const SvxLanguageItem& rLanguageItem ); 316 317 /// Sfx item RES_CHRATR_CJK_POSTURE 318 virtual void CharPostureCJK( const SvxPostureItem& rPosture ); 319 320 /// Sfx item RES_CHRATR_CJK_WEIGHT 321 virtual void CharWeightCJK( const SvxWeightItem& rWeight ); 322 323 /// Sfx item RES_CHRATR_CTL_FONT 324 virtual void CharFontCTL( const SvxFontItem& rFont ); 325 326 /// Sfx item RES_CHRATR_CTL_FONTSIZE 327 virtual void CharFontSizeCTL( const SvxFontHeightItem& rFontSize ); 328 329 /// Sfx item RES_CHRATR_CTL_LANGUAGE 330 virtual void CharLanguageCTL( const SvxLanguageItem& rLanguageItem ); 331 332 /// Sfx item RES_CHRATR_CTL_POSTURE 333 virtual void CharPostureCTL( const SvxPostureItem& rWeight ); 334 335 /// Sfx item RES_CHRATR_CTL_WEIGHT 336 virtual void CharWeightCTL( const SvxWeightItem& rWeight ); 337 338 /// Sfx item RES_CHRATR_BidiRTL 339 virtual void CharBidiRTL( const SfxPoolItem& ); 340 341 /// Sfx item RES_CHRATR_IdctHint 342 virtual void CharIdctHint( const SfxPoolItem& ); 343 344 /// Sfx item RES_CHRATR_ROTATE 345 virtual void CharRotate( const SvxCharRotateItem& rRotate ); 346 347 /// Sfx item RES_CHRATR_EMPHASIS_MARK 348 virtual void CharEmphasisMark( const SvxEmphasisMarkItem& rEmphasisMark ); 349 350 /// Sfx item RES_CHRATR_TWO_LINES 351 virtual void CharTwoLines( const SvxTwoLinesItem& rTwoLines ); 352 353 /// Sfx item RES_CHRATR_SCALEW 354 virtual void CharScaleWidth( const SvxCharScaleWidthItem& rScaleWidth ); 355 356 /// Sfx item RES_CHRATR_RELIEF 357 virtual void CharRelief( const SvxCharReliefItem& rRelief); 358 359 /// Sfx item RES_CHRATR_HIDDEN 360 virtual void CharHidden( const SvxCharHiddenItem& rHidden ); 361 362 /// Sfx item RES_TXTATR_INETFMT 363 virtual void TextINetFormat( const SwFmtINetFmt& ); 364 365 /// Sfx item RES_TXTATR_CHARFMT 366 virtual void TextCharFormat( const SwFmtCharFmt& ); 367 368 /// Sfx item RES_TXTATR_FTN 369 virtual void TextFootnote_Impl( const SwFmtFtn& ); 370 371 /// Sfx item RES_PARATR_LINESPACING 372 virtual void ParaLineSpacing_Impl( short nSpace, short nMulti ); 373 374 /// Sfx item RES_PARATR_ADJUST 375 virtual void ParaAdjust( const SvxAdjustItem& rAdjust ); 376 377 /// Sfx item RES_PARATR_SPLIT 378 virtual void ParaSplit( const SvxFmtSplitItem& rSplit ); 379 380 /// Sfx item RES_PARATR_WIDOWS 381 virtual void ParaWidows( const SvxWidowsItem& rWidows ); 382 383 /// Sfx item RES_PARATR_TABSTOP 384 virtual void ParaTabStop( const SvxTabStopItem& rTabStop ); 385 386 /// Sfx item RES_PARATR_HYPHENZONE 387 virtual void ParaHyphenZone( const SvxHyphenZoneItem& ); 388 389 /// Sfx item RES_PARATR_NUMRULE 390 virtual void ParaNumRule_Impl( const SwTxtNode *pTxtNd, sal_Int32 nLvl, sal_Int32 nNumId ); 391 392 /// Sfx item RES_PARATR_SCRIPTSPACE 393 virtual void ParaScriptSpace( const SfxBoolItem& ); 394 395 /// Sfx item RES_PARATR_VERTALIGN 396 virtual void ParaVerticalAlign( const SvxParaVertAlignItem& rAlign ); 397 398 /// Sfx item RES_PARATR_SNAPTOGRID 399 virtual void ParaSnapToGrid( const SvxParaGridItem& ); 400 401 /// Sfx item RES_FRM_SIZE 402 virtual void FormatFrameSize( const SwFmtFrmSize& ); 403 404 /// Sfx item RES_PAPER_BIN 405 virtual void FormatPaperBin( const SvxPaperBinItem& ); 406 407 /// Sfx item RES_LR_SPACE 408 virtual void FormatLRSpace( const SvxLRSpaceItem& rLRSpace ); 409 410 /// Sfx item RES_UL_SPACE 411 virtual void FormatULSpace( const SvxULSpaceItem& rULSpace ); 412 413 /// Sfx item RES_SURROUND 414 virtual void FormatSurround( const SwFmtSurround& ); 415 416 /// Sfx item RES_VERT_ORIENT 417 virtual void FormatVertOrientation( const SwFmtVertOrient& ); 418 419 /// Sfx item RES_HORI_ORIENT 420 virtual void FormatHorizOrientation( const SwFmtHoriOrient& ); 421 422 /// Sfx item RES_ANCHOR 423 virtual void FormatAnchor( const SwFmtAnchor& ); 424 425 /// Sfx item RES_BACKGROUND 426 virtual void FormatBackground( const SvxBrushItem& ); 427 428 /// Sfx item RES_BOX 429 virtual void FormatBox( const SvxBoxItem& ); 430 431 /// Sfx item RES_COL 432 virtual void FormatColumns_Impl( sal_uInt16 nCols, const SwFmtCol & rCol, bool bEven, SwTwips nPageSize ); 433 434 /// Sfx item RES_KEEP 435 virtual void FormatKeep( const SvxFmtKeepItem& ); 436 437 /// Sfx item RES_TEXTGRID 438 virtual void FormatTextGrid( const SwTextGridItem& ); 439 440 /// Sfx item RES_LINENUMBER 441 virtual void FormatLineNumbering( const SwFmtLineNumber& ); 442 443 /// Sfx item RES_FRAMEDIR 444 virtual void FormatFrameDirection( const SvxFrameDirectionItem& ); 445 446 /// Write the expanded field 447 virtual void WriteExpand( const SwField* pFld ); 448 449 virtual void RefField( const SwField& rFld, const String& rRef ); 450 virtual void HiddenField( const SwField& rFld ); 451 virtual void SetField( const SwField& rFld, ww::eField eType, const String& rCmd ); 452 virtual void PostitField( const SwField* pFld ); 453 virtual bool DropdownField( const SwField* pFld ); 454 455 /// Reference to the export, where to get the data from 456 RtfExport &m_rExport; 457 458 private: 459 460 /// Output graphic fly frames. 461 void FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const SwGrfNode& rGrfNode, const Size& rSize ); 462 void FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize ); 463 void FlyFrameOLEData( SwOLENode& rOLENode ); 464 465 /* 466 * Table methods. 467 */ 468 469 void InitTableHelper( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 470 471 void StartTable( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 472 473 void StartTableRow( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 474 475 void StartTableCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 476 477 void TableCellProperties( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner ); 478 479 void EndTableCell( ); 480 481 void EndTableRow( ); 482 483 void EndTable(); 484 485 /// End cell, row, and even the entire table if necessary. 486 void FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointer_t pInner, bool bForceEmptyParagraph = false ); 487 488 void WriteTextFootnoteNumStr(const SwFmtFtn& rFootnote); 489 490 /* 491 * Current style name and its ID. 492 */ 493 String m_rStyleName; 494 sal_uInt16 m_nStyleId; 495 /* 496 * Current list ID. 497 */ 498 sal_uInt16 m_nListId; 499 /* 500 * This is needed because the call order is: run text, run properties, paragraph properties. 501 * What we need is the opposite. 502 */ 503 MultiBuffer m_aRun; 504 MultiBuffer m_aRunText; 505 /* 506 * This is written after runs. 507 */ 508 rtl::OStringBuffer m_aAfterRuns; 509 /* 510 * Same for colors and stylesheets: first we just want to output colors, 511 * need to buffer the stylesheet table to output it after the color one. 512 */ 513 rtl::OStringBuffer m_aStylesheet; 514 /* 515 * This one just holds the style commands in the current style. 516 */ 517 rtl::OStringBuffer m_aStyles; 518 /* 519 * This is the same as m_aStyles but the conents of it is written last. 520 */ 521 rtl::OStringBuffer m_aStylesEnd; 522 523 /* 524 * We just get a "end of strike" mark at the end of strike, store here what to finish: single or double strike. 525 */ 526 bool m_bStrikeDouble; 527 528 /* 529 * The current table helper. 530 */ 531 SwWriteTable *m_pTableWrt; 532 533 /* 534 * Remember if we are in an open cell, or not. 535 */ 536 bool m_bTableCellOpen; 537 538 /* 539 * Remember the current table depth. 540 */ 541 sal_uInt32 m_nTableDepth; 542 543 /* 544 * Remember if we wrote a \cell or not. 545 */ 546 bool m_bTblAfterCell; 547 548 /* 549 * For late output of row definitions. 550 */ 551 rtl::OStringBuffer m_aRowDefs; 552 553 /* 554 * Is a column break needed after the next \par? 555 */ 556 bool m_nColBreakNeeded; 557 558 /* 559 * If section breaks should be buffered to m_aSectionBreaks 560 */ 561 bool m_bBufferSectionBreaks; 562 rtl::OStringBuffer m_aSectionBreaks; 563 564 /* 565 * If section headers (and footers) should be buffered to 566 * m_aSectionHeaders. 567 */ 568 bool m_bBufferSectionHeaders; 569 MultiBuffer m_aSectionHeaders; 570 571 /* 572 * Support for starting multiple tables at the same cell. 573 * If the current table is the last started one. 574 */ 575 bool m_bLastTable; 576 /* 577 * List of already started but not yet defined tables (need to be defined 578 * after the nested tables). 579 */ 580 std::vector< rtl::OString > m_aTables; 581 /* 582 * If cell info is already output. 583 */ 584 bool m_bWroteCellInfo; 585 586 public: 587 RtfAttributeOutput( RtfExport &rExport ); 588 589 virtual ~RtfAttributeOutput(); 590 591 /// Return the right export class. 592 virtual MSWordExportBase& GetExport(); 593 594 rtl::OStringBuffer m_aTabStop; 595 596 // These are used by wwFont::WriteRtf() 597 /// Start the font. 598 void StartFont( const String& rFamilyName ) const; 599 600 /// End the font. 601 void EndFont() const; 602 603 /// Alternate name for the font. 604 void FontAlternateName( const String& rName ) const; 605 606 /// Font charset. 607 void FontCharset( sal_uInt8 nCharSet ) const; 608 609 /// Font family. 610 void FontFamilyType( FontFamily eFamily, const wwFont &rFont ) const; 611 612 /// Font pitch. 613 void FontPitchType( FontPitch ePitch ) const; 614 }; 615 616 #endif // _RTFATTRIBUTEOUTPUT_HXX_ 617 618 /* vi:set shiftwidth=4 expandtab: */ 619