LibreOffice Module sw (master) 1
writer.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <memory>
21#include <hintids.hxx>
22
23#include <sot/storage.hxx>
24#include <sfx2/docfile.hxx>
26#include <editeng/fontitem.hxx>
27#include <editeng/eeitem.hxx>
28#include <osl/diagnose.h>
29#include <shellio.hxx>
30#include <doc.hxx>
31#include <docary.hxx>
32#include <IMark.hxx>
35#include <numrule.hxx>
36#include <swerror.h>
37#include <com/sun/star/ucb/ContentCreationException.hpp>
38
39using namespace css;
40
41namespace
42{
43 SvStream& lcl_OutLongExt( SvStream& rStrm, sal_uLong nVal, bool bNeg )
44 {
45 char aBuf[28];
46
47 int i = SAL_N_ELEMENTS(aBuf);
48 aBuf[--i] = 0;
49 do
50 {
51 aBuf[--i] = '0' + static_cast<char>(nVal % 10);
52 nVal /= 10;
53 } while (nVal);
54
55 if (bNeg)
56 aBuf[--i] = '-';
57
58 return rStrm.WriteCharPtr( &aBuf[i] );
59 }
60}
61
62typedef std::multimap<SwNodeOffset, const ::sw::mark::IMark*> SwBookmarkNodeTable;
63
65{
67
68 std::map<OUString, OUString> maFileNameMap;
69 std::vector<const SvxFontItem*> aFontRemoveLst;
71
73
74 void RemoveFontList( SwDoc& rDoc );
75 void InsertBkmk( const ::sw::mark::IMark& rBkmk );
76};
77
79 : m_pStream(nullptr)
80{
81}
82
84{
85 for( const auto& rpFontItem : aFontRemoveLst )
86 {
87 rDoc.GetAttrPool().Remove( *rpFontItem );
88 }
89}
90
91void Writer_Impl::InsertBkmk(const ::sw::mark::IMark& rBkmk)
92{
93 SwNodeOffset nNd = rBkmk.GetMarkPos().GetNodeIndex();
94
95 aBkmkNodePos.emplace( nNd, &rBkmk );
96
97 if(rBkmk.IsExpanded() && rBkmk.GetOtherMarkPos().GetNodeIndex() != nNd)
98 {
99 nNd = rBkmk.GetOtherMarkPos().GetNodeIndex();
100 aBkmkNodePos.emplace( nNd, &rBkmk );
101 }
102}
103
104/*
105 * This module is the central collection point for all writer-filters
106 * and is a DLL !
107 *
108 * So that the Writer can work with different writers, the output-functions
109 * of the content carrying objects have to be mapped to the various
110 * output-functions.
111 *
112 * For that, to inquire its output function, every object can be gripped
113 * via the which-value in a table.
114 * These functions are available in the corresponding Writer-DLL's.
115 */
116
118 : m_pImpl(std::make_unique<Writer_Impl>())
119 , m_pOrigFileName(nullptr), m_pDoc(nullptr), m_pOrigPam(nullptr)
120 , m_bHideDeleteRedlines(false)
121{
125 m_bOrganizerMode = false;
127}
128
130{
131}
132
133/*
134 * Document Interface Access
135 */
140
142{
143 m_pImpl->RemoveFontList( *m_pDoc );
144 m_pImpl.reset(new Writer_Impl);
145
146 if( m_pCurrentPam )
147 {
148 while (m_pCurrentPam->GetNext() != m_pCurrentPam.get())
149 delete m_pCurrentPam->GetNext();
150 m_pCurrentPam.reset();
151 }
152 m_pCurrentPam = nullptr;
153 m_pOrigFileName = nullptr;
154 m_pDoc = nullptr;
155
159 m_bOrganizerMode = false;
160}
161
163{
164 if( (*ppPam)->GetNext() == m_pOrigPam )
165 {
166 *ppPam = m_pOrigPam; // set back to the beginning pam
167 return false; // end of the ring
168 }
169
170 // otherwise copy the next value from the next Pam
171 *ppPam = (*ppPam)->GetNext();
172
173 *m_pCurrentPam->GetPoint() = *(*ppPam)->Start();
174 *m_pCurrentPam->GetMark() = *(*ppPam)->End();
175
176 return true;
177}
178
179// search the next Bookmark-Position from the Bookmark-Table
180
181sal_Int32 Writer::FindPos_Bkmk(const SwPosition& rPos) const
182{
183 const IDocumentMarkAccess* const pMarkAccess = m_pDoc->getIDocumentMarkAccess();
185 if(ppBkmk != pMarkAccess->getBookmarksEnd())
186 return ppBkmk - pMarkAccess->getBookmarksBegin();
187 return -1;
188}
189
190std::shared_ptr<SwUnoCursor>
191Writer::NewUnoCursor(SwDoc & rDoc, SwNodeOffset const nStartIdx, SwNodeOffset const nEndIdx)
192{
193 SwNodes *const pNds = &rDoc.GetNodes();
194
195 SwNodeIndex aStt( *pNds, nStartIdx );
196 SwContentNode* pCNode = aStt.GetNode().GetContentNode();
197 if( !pCNode && nullptr == pNds->GoNext( &aStt ) )
198 {
199 OSL_FAIL( "No more ContentNode at StartPos" );
200 }
201
202 auto const pNew = rDoc.CreateUnoCursor(SwPosition(aStt), false);
203 pNew->SetMark();
204 aStt = nEndIdx;
205 pCNode = aStt.GetNode().GetContentNode();
206 if (!pCNode)
207 pCNode = SwNodes::GoPrevious(&aStt);
208 assert(pCNode && "No more ContentNode at StartPos");
209 pNew->GetPoint()->AssignEndIndex( *pCNode );
210 return pNew;
211}
212
213// Stream-specific
215{
216 assert(m_pImpl->m_pStream && "Oh-oh. Writer with no Stream!");
217 return *m_pImpl->m_pStream;
218}
219
220void Writer::SetStream(SvStream *const pStream)
221{
222 m_pImpl->m_pStream = pStream;
223}
224
226{
227 const bool bNeg = nVal < 0;
228 if (bNeg)
229 nVal = -nVal;
230
231 return lcl_OutLongExt(rStrm, static_cast<sal_uLong>(nVal), bNeg);
232}
233
235{
236 return lcl_OutLongExt(rStrm, nVal, false);
237}
238
239ErrCode Writer::Write( SwPaM& rPaM, SvStream& rStrm, const OUString* pFName )
240{
241 if ( IsStgWriter() )
242 {
243 ErrCode nResult = ERRCODE_ABORT;
244 try
245 {
247 nResult = Write( rPaM, *aRef, pFName );
248 if ( nResult == ERRCODE_NONE )
249 aRef->Commit();
250 }
251 catch (const css::ucb::ContentCreationException &)
252 {
253 TOOLS_WARN_EXCEPTION("sw", "Writer::Write caught");
254 }
255 return nResult;
256 }
257
258 m_pDoc = &rPaM.GetDoc();
259 m_pOrigFileName = pFName;
260 m_pImpl->m_pStream = &rStrm;
261
262 // Copy PaM, so that it can be modified
263 m_pCurrentPam = m_pDoc->CreateUnoCursor(*rPaM.End(), false);
264 m_pCurrentPam->SetMark();
265 *m_pCurrentPam->GetPoint() = *rPaM.Start();
266 // for comparison secure to the current Pam
267 m_pOrigPam = &rPaM;
268
269 ErrCode nRet = WriteStream();
270
271 ResetWriter();
272
273 return nRet;
274}
275
277{}
278
279ErrCode Writer::Write( SwPaM& rPam, SfxMedium& rMedium, const OUString* pFileName )
280{
281 SetupFilterOptions(rMedium);
282 // This method must be overridden in SwXMLWriter a storage from medium will be used there.
283 // The microsoft format can write to storage but the storage will be based on the stream.
284 return Write( rPam, *rMedium.GetOutStream(), pFileName );
285}
286
287ErrCode Writer::Write( SwPaM& /*rPam*/, SotStorage&, const OUString* )
288{
289 OSL_ENSURE( false, "Write in Storages on a stream?" );
290 return ERR_SWG_WRITE_ERROR;
291}
292
293ErrCode Writer::Write( SwPaM&, const uno::Reference < embed::XStorage >&, const OUString*, SfxMedium* )
294{
295 OSL_ENSURE( false, "Write in Storages on a stream?" );
296 return ERR_SWG_WRITE_ERROR;
297}
298
299bool Writer::CopyLocalFileToINet( OUString& rFileNm )
300{
301 if( !m_pOrigFileName ) // can be happen, by example if we
302 return false; // write into the clipboard
303
304 bool bRet = false;
305 INetURLObject aFileUrl( rFileNm ), aTargetUrl( *m_pOrigFileName );
306
307// this is our old without the Mail-Export
308 if( ! ( INetProtocol::File == aFileUrl.GetProtocol() &&
309 INetProtocol::File != aTargetUrl.GetProtocol() &&
310 INetProtocol::Ftp <= aTargetUrl.GetProtocol() &&
311 INetProtocol::VndSunStarWebdav >= aTargetUrl.GetProtocol() ) )
312 return bRet;
313
314 // has the file been moved?
315 std::map<OUString, OUString>::iterator it = m_pImpl->maFileNameMap.find( rFileNm );
316 if ( it != m_pImpl->maFileNameMap.end() )
317 {
318 rFileNm = it->second;
319 return true;
320 }
321
322 OUString aSrc = rFileNm;
323 OUString aDest = aTargetUrl.GetPartBeforeLastName() + aFileUrl.GetLastName();
324
325 SfxMedium aSrcFile( aSrc, StreamMode::READ );
326 SfxMedium aDstFile( aDest, StreamMode::WRITE | StreamMode::SHARE_DENYNONE );
327
328 aDstFile.GetOutStream()->WriteStream( *aSrcFile.GetInStream() );
329
330 aSrcFile.Close();
331 aDstFile.Commit();
332
333 bRet = ERRCODE_NONE == aDstFile.GetError();
334
335 if( bRet )
336 {
337 m_pImpl->maFileNameMap.insert( std::make_pair( aSrc, aDest ) );
338 rFileNm = aDest;
339 }
340
341 return bRet;
342}
343
345{
346 // then there are a few fonts in the NumRules
347 // These put into the Pool. After this does they have a RefCount > 1
348 // it can be removed - it is already in the Pool
349 SfxItemPool& rPool = m_pDoc->GetAttrPool();
350 const SwNumRuleTable& rListTable = m_pDoc->GetNumRuleTable();
351 const SwNumFormat* pFormat;
352 const vcl::Font* pDefFont = &numfunc::GetDefBulletFont();
353 bool bCheck = false;
354
355 for( size_t nGet = rListTable.size(); nGet; )
356 {
357 SwNumRule const*const pRule = rListTable[ --nGet ];
358 if (m_pDoc->IsUsed(*pRule))
359 {
360 for( sal_uInt8 nLvl = 0; nLvl < MAXLEVEL; ++nLvl )
361 {
362 if( SVX_NUM_CHAR_SPECIAL == (pFormat = &pRule->Get( nLvl ))->GetNumberingType() ||
363 SVX_NUM_BITMAP == pFormat->GetNumberingType() )
364 {
365 std::optional<vcl::Font> pFont = pFormat->GetBulletFont();
366 if( !pFont )
367 pFont = *pDefFont;
368
369 if( bCheck )
370 {
371 if( *pFont == *pDefFont )
372 continue;
373 }
374 else if( *pFont == *pDefFont )
375 bCheck = true;
376
377 AddFontItem( rPool, SvxFontItem( pFont->GetFamilyType(),
378 pFont->GetFamilyName(), pFont->GetStyleName(),
379 pFont->GetPitch(), pFont->GetCharSet(), RES_CHRATR_FONT ));
380 }
381 }
382 }
383 }
384}
385
387{
388 SfxItemPool& rPool = m_pDoc->GetAttrPool();
389 if( rPool.GetSecondaryPool() )
390 {
394 }
395}
396
397void Writer::AddFontItems_( SfxItemPool& rPool, sal_uInt16 nW )
398{
399 const SvxFontItem* pFont = static_cast<const SvxFontItem*>(&rPool.GetDefaultItem( nW ));
400 AddFontItem( rPool, *pFont );
402 pFont = static_cast<const SvxFontItem*>(rPool.GetPoolDefaultItem( nW ));
403 if( nullptr != pFont )
404 AddFontItem( rPool, *pFont );
405
406 for (const SfxPoolItem* pItem : rPool.GetItemSurrogates(nW))
407 AddFontItem( rPool, *static_cast<const SvxFontItem*>(pItem) );
408}
409
410void Writer::AddFontItem( SfxItemPool& rPool, const SvxFontItem& rFont )
411{
412 const SvxFontItem* pItem;
413 if( RES_CHRATR_FONT != rFont.Which() )
414 {
415 SvxFontItem aFont( rFont );
416 aFont.SetWhich( RES_CHRATR_FONT );
417 pItem = &rPool.Put( aFont );
418 }
419 else
420 pItem = &rPool.Put( rFont );
421
422 if( 1 < pItem->GetRefCount() )
423 rPool.Remove( *pItem );
424 else
425 {
426 m_pImpl->aFontRemoveLst.push_back( pItem );
429
430// build a bookmark table, which is sort by the node position. The
431// OtherPos of the bookmarks also inserted.
433{
434 const IDocumentMarkAccess* const pMarkAccess = m_pDoc->getIDocumentMarkAccess();
436 ppBkmk != pMarkAccess->getBookmarksEnd();
437 ++ppBkmk)
438 {
439 m_pImpl->InsertBkmk(**ppBkmk);
440 }
441}
442
443// search all Bookmarks in the range and return it in the Array
444bool Writer::GetBookmarks(const SwContentNode& rNd, sal_Int32 nStt,
445 sal_Int32 nEnd, std::vector< const ::sw::mark::IMark* >& rArr)
446{
447 OSL_ENSURE( rArr.empty(), "there are still entries available" );
448
449 SwNodeOffset nNd = rNd.GetIndex();
450 std::pair<SwBookmarkNodeTable::const_iterator, SwBookmarkNodeTable::const_iterator> aIterPair
451 = m_pImpl->aBkmkNodePos.equal_range( nNd );
452 if( aIterPair.first != aIterPair.second )
453 {
454 // there exist some bookmarks, search now all which is in the range
455 if( !nStt && nEnd == rNd.Len() )
456 // all
457 for( SwBookmarkNodeTable::const_iterator it = aIterPair.first; it != aIterPair.second; ++it )
458 rArr.push_back( it->second );
459 else
460 {
461 for( SwBookmarkNodeTable::const_iterator it = aIterPair.first; it != aIterPair.second; ++it )
462 {
463 const ::sw::mark::IMark& rBkmk = *(it->second);
464 sal_Int32 nContent;
465 if( rBkmk.GetMarkPos().GetNode() == rNd &&
466 (nContent = rBkmk.GetMarkPos().GetContentIndex() ) >= nStt &&
467 nContent < nEnd )
468 {
469 rArr.push_back( &rBkmk );
470 }
471 else if( rBkmk.IsExpanded() &&
472 (rNd == rBkmk.GetOtherMarkPos().GetNode()) &&
473 (nContent = rBkmk.GetOtherMarkPos().GetContentIndex()) >= nStt &&
474 nContent < nEnd )
475 {
476 rArr.push_back( &rBkmk );
477 }
478 }
479 }
480 }
481 return !rArr.empty();
482}
483
484// Storage-specific
486{
487 OSL_ENSURE( false, "Write in Storages on a stream?" );
488 return ERR_SWG_WRITE_ERROR;
489}
490
491ErrCode StgWriter::Write( SwPaM& rPaM, SotStorage& rStg, const OUString* pFName )
492{
493 SetStream(nullptr);
494 m_pStg = &rStg;
495 m_pDoc = &rPaM.GetDoc();
497
498 // Copy PaM, so that it can be modified
499 m_pCurrentPam = m_pDoc->CreateUnoCursor(*rPaM.End(), false);
500 m_pCurrentPam->SetMark();
501 *m_pCurrentPam->GetPoint() = *rPaM.Start();
502 // for comparison secure to the current Pam
503 m_pOrigPam = &rPaM;
504
505 ErrCode nRet = WriteStorage();
506
507 m_pStg = nullptr;
508 ResetWriter();
509
510 return nRet;
511}
512
513ErrCode StgWriter::Write( SwPaM& rPaM, const uno::Reference < embed::XStorage >& rStg, const OUString* pFName, SfxMedium* pMedium )
514{
515 SetStream(nullptr);
516 m_pStg = nullptr;
517 m_xStg = rStg;
518 m_pDoc = &rPaM.GetDoc();
519 m_pOrigFileName = pFName;
520
521 // Copy PaM, so that it can be modified
522 m_pCurrentPam = m_pDoc->CreateUnoCursor(*rPaM.End(), false);
523 m_pCurrentPam->SetMark();
524 *m_pCurrentPam->GetPoint() = *rPaM.Start();
525 // for comparison secure to the current Pam
526 m_pOrigPam = &rPaM;
527
528 ErrCode nRet = pMedium ? WriteMedium( *pMedium ) : WriteStorage();
529
530 m_pStg = nullptr;
531 ResetWriter();
532
533 return nRet;
534}
535
536/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
::std::unique_ptr< XmlIdRegistry_Impl > m_pImpl
wrapper iterator: wraps iterator of implementation while hiding MarkBase class; only IMark instances ...
Provides access to the marks of a document.
virtual const_iterator_t findFirstBookmarkStartsAfter(const SwPosition &rPos) const =0
Finds the first mark that is starting after.
virtual const_iterator_t getBookmarksBegin() const =0
returns a STL-like random access iterator to the begin of the sequence the IBookmarks.
virtual const_iterator_t getBookmarksEnd() const =0
returns a STL-like random access iterator to the end of the sequence of IBookmarks.
Provides access to settings of a document.
Access to the style pool.
OUString GetPartBeforeLastName() const
INetProtocol GetProtocol() const
Item2Range GetItemSurrogates(sal_uInt16 nWhich) const
SfxItemPool * GetSecondaryPool() const
const SfxPoolItem & GetDefaultItem(sal_uInt16 nWhich) const
const SfxPoolItem * GetPoolDefaultItem(sal_uInt16 nWhich) const
const T & Put(std::unique_ptr< T > xItem, sal_uInt16 nWhich=0)
void Remove(const SfxPoolItem &)
void Close(bool bInDestruction=false)
ErrCode GetError() const
SvStream * GetOutStream()
SvStream * GetInStream()
bool Commit()
tools::SvRef< SotStorage > m_pStg
Definition: shellio.hxx:480
virtual ErrCode WriteMedium(SfxMedium &)=0
virtual ErrCode WriteStream() override
Definition: writer.cxx:485
css::uno::Reference< css::embed::XStorage > m_xStg
Definition: shellio.hxx:481
virtual ErrCode WriteStorage()=0
virtual ErrCode Write(SwPaM &, const css::uno::Reference< css::embed::XStorage > &, const OUString *, SfxMedium *=nullptr) override
SvStream & WriteCharPtr(const char *pBuf)
SvStream & WriteStream(SvStream &rStream)
const std::optional< vcl::Font > & GetBulletFont() const
SvxNumType GetNumberingType() const
virtual sal_Int32 Len() const
Definition: node.cxx:1258
Definition: doc.hxx:195
bool IsUsed(const sw::BroadcastingModify &) const
Definition: poolfmt.cxx:86
const SwNumRuleTable & GetNumRuleTable() const
Definition: doc.hxx:1077
SwNodes & GetNodes()
Definition: doc.hxx:420
IDocumentSettingAccess const & getIDocumentSettingAccess() const
Definition: doc.cxx:184
IDocumentMarkAccess * getIDocumentMarkAccess()
Definition: docbm.cxx:1877
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
Definition: doc.cxx:434
std::shared_ptr< SwUnoCursor > CreateUnoCursor(const SwPosition &rPos, bool bTableCursor=false)
Definition: doc.cxx:1803
const SwAttrPool & GetAttrPool() const
Definition: doc.hxx:1331
Marks a node in the document model.
Definition: ndindex.hxx:31
SwNode & GetNode() const
Definition: ndindex.hxx:123
SwNodeOffset GetIndex() const
Definition: node.hxx:312
SwContentNode * GetContentNode()
Definition: node.hxx:666
static SwContentNode * GoPrevious(SwNodeIndex *)
Definition: nodes.cxx:1333
SwContentNode * GoNext(SwNodeIndex *) const
Definition: nodes.cxx:1299
const SwNumFormat & Get(sal_uInt16 i) const
Definition: number.cxx:87
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:187
const SwPosition * End() const
Definition: pam.hxx:271
SwPaM * GetNext()
Definition: pam.hxx:320
SwDoc & GetDoc() const
Definition: pam.hxx:299
const SwPosition * Start() const
Definition: pam.hxx:266
size_t size() const
Definition: docary.hxx:87
bool m_bASCII_ParaAsCR
Definition: shellio.hxx:414
bool CopyNextPam(SwPaM **)
Definition: writer.cxx:162
SwPaM * m_pOrigPam
Definition: shellio.hxx:408
bool m_bShowProgress
Definition: shellio.hxx:411
static SvStream & OutLong(SvStream &rStrm, tools::Long nVal)
Definition: writer.cxx:225
bool m_bWriteOnlyFirstTable
Definition: shellio.hxx:413
virtual void SetupFilterOptions(SfxMedium &rMedium)
Definition: writer.cxx:276
sal_Int32 FindPos_Bkmk(const SwPosition &rPos) const
Definition: writer.cxx:181
void AddFontItem(SfxItemPool &rPool, const SvxFontItem &rFont)
Definition: writer.cxx:410
SvStream & Strm()
Definition: writer.cxx:214
virtual ErrCode WriteStream()=0
void SetStream(SvStream *const pStream)
Definition: writer.cxx:220
void PutEditEngFontsInAttrPool()
Definition: writer.cxx:386
bool GetBookmarks(const SwContentNode &rNd, sal_Int32 nStt, sal_Int32 nEnd, std::vector< const ::sw::mark::IMark * > &rArr)
Definition: writer.cxx:444
IDocumentSettingAccess & getIDocumentSettingAccess()
Definition: writer.cxx:136
bool m_bBlock
Definition: shellio.hxx:420
void CreateBookmarkTable()
Definition: writer.cxx:432
bool m_bUCS2_WithStartChar
Definition: shellio.hxx:417
bool m_bOrganizerMode
Definition: shellio.hxx:421
static std::shared_ptr< SwUnoCursor > NewUnoCursor(SwDoc &rDoc, SwNodeOffset const nStartIdx, SwNodeOffset const nEndIdx)
Definition: writer.cxx:191
void PutNumFormatFontsInAttrPool()
Definition: writer.cxx:344
static SvStream & OutULong(SvStream &rStrm, sal_uLong nVal)
Definition: writer.cxx:234
void AddFontItems_(SfxItemPool &rPool, sal_uInt16 nWhichId)
Definition: writer.cxx:397
SwDoc * m_pDoc
Definition: shellio.hxx:407
virtual ~Writer() override
Definition: writer.cxx:129
std::shared_ptr< SwUnoCursor > m_pCurrentPam
Definition: shellio.hxx:409
bool m_bWriteAll
Definition: shellio.hxx:410
bool m_bExportParagraphNumbering
Definition: shellio.hxx:418
const OUString * m_pOrigFileName
Definition: shellio.hxx:389
virtual ErrCode Write(SwPaM &, SfxMedium &, const OUString *)
Definition: writer.cxx:279
bool m_bASCII_NoLastLineEnd
Definition: shellio.hxx:416
virtual bool IsStgWriter() const
Definition: fltini.cxx:188
std::unique_ptr< Writer_Impl > m_pImpl
Definition: shellio.hxx:382
bool m_bWriteClipboardDoc
Definition: shellio.hxx:412
void ResetWriter()
Definition: writer.cxx:141
IDocumentStylePoolAccess & getIDocumentStylePoolAccess()
Definition: writer.cxx:138
bool CopyLocalFileToINet(OUString &rFileNm)
Definition: writer.cxx:299
Writer()
Definition: writer.cxx:117
bool m_bASCII_ParaAsBlank
Definition: shellio.hxx:415
#define TOOLS_WARN_EXCEPTION(area, stream)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CJK(EE_CHAR_START+17)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CTL(EE_CHAR_START+18)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
#define ERRCODE_ABORT
#define ERRCODE_NONE
GtkMediaStream * m_pStream
constexpr TypedWhichId< SvxFontItem > RES_CHRATR_FONT(7)
#define SAL_N_ELEMENTS(arr)
aBuf
int i
void SvStream & rStrm
const vcl::Font & GetDefBulletFont()
retrieve font used for the default bullet list characters
Definition: number.cxx:1395
long Long
sal_uIntPtr sal_uLong
Marks a position in the document model.
Definition: pam.hxx:37
SvStream * m_pStream
Definition: writer.cxx:66
SwBookmarkNodeTable aBkmkNodePos
Definition: writer.cxx:70
void InsertBkmk(const ::sw::mark::IMark &rBkmk)
Definition: writer.cxx:91
Writer_Impl()
Definition: writer.cxx:78
std::vector< const SvxFontItem * > aFontRemoveLst
Definition: writer.cxx:69
void RemoveFontList(SwDoc &rDoc)
Definition: writer.cxx:83
std::map< OUString, OUString > maFileNameMap
Definition: writer.cxx:68
SVX_NUM_BITMAP
SVX_NUM_CHAR_SPECIAL
#define ERR_SWG_WRITE_ERROR
Definition: swerror.h:30
constexpr sal_uInt8 MAXLEVEL
Definition: swtypes.hxx:92
unsigned char sal_uInt8
std::multimap< SwNodeOffset, const ::sw::mark::IMark * > SwBookmarkNodeTable
Definition: writer.cxx:62