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