20 #include <osl/diagnose.h>
29 #include <sfx2/sfxsids.hrc>
31 #include <tools/datetime.hxx>
44 #include <section.hxx>
49 #include <com/sun/star/uno/Reference.h>
50 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
51 #include <com/sun/star/document/XDocumentProperties.hpp>
52 #include <com/sun/star/frame/XModel.hpp>
60 SPLITDOC_TO_GLOBALDOC,
69 return SplitDoc( SPLITDOC_TO_GLOBALDOC, rPath,
false, pSplitColl );
74 return SplitDoc( SPLITDOC_TO_GLOBALDOC, rPath,
true,
nullptr, nOutlineLevel );
79 return SplitDoc( SPLITDOC_TO_HTML, rPath,
true,
nullptr, nOutlineLevel );
85 return SplitDoc( SPLITDOC_TO_HTML, rPath,
false, pSplitColl );
91 for( ; *nOutl < pOutlNds->
size(); ++(*nOutl) )
107 for( ++(*nOutl); (*nOutl) < pOutlNds->
size(); ++(*nOutl) )
109 pNd = (*pOutlNds)[ *nOutl ];
113 if( ( 0 < nLevel && nLevel <= nOutlineLevel ) &&
125 for( ; *nOutl < pOutlNds->
size(); ++(*nOutl) )
141 for( ++(*nOutl); *nOutl < pOutlNds->
size(); ++(*nOutl) )
143 pNd = (*pOutlNds)[ *nOutl ];
146 if( ( pTColl == pSplitColl ||
170 std::unique_ptr<SwOutlineNodes> xTmpOutlNds;
180 pOutlNds = xTmpOutlNds.get();
183 if( pTNd->GetNodes().IsDocNodes() )
186 if( pOutlNds->
empty() )
195 if ( rFormatColls[ --
n ]->GetAttrOutlineLevel() == 1 )
197 pSplitColl = rFormatColls[
n ];
206 std::shared_ptr<const SfxFilter> pFilter;
209 case SPLITDOC_TO_HTML:
215 eDocType = SPLITDOC_TO_GLOBALDOC;
226 OUString sExt = pFilter->GetSuffixes().getToken(0,
',');
233 if(
'.' != sExt[ 0 ] )
240 OUString sLeading(aEntry.
GetBase());
253 while( nOutl < pOutlNds->
size() &&
254 (*pOutlNds)[ nOutl ]->GetIndex() <
GetNodes().GetEndOfExtras().GetIndex() )
259 pStartNd =
GetStartNode( pOutlNds, nOutlineLevel, &nOutl );
261 pStartNd =
GetStartNode( pOutlNds, pSplitColl, &nOutl );
267 pEndNd =
GetEndNode( pOutlNds, nOutlineLevel, &nOutl );
269 pEndNd =
GetEndNode( pOutlNds, pSplitColl, &nOutl );
282 uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
283 static_cast<SwDocShell*>(&xDocSh)->GetModel(),
284 uno::UNO_QUERY_THROW);
285 uno::Reference<document::XDocumentProperties> xDocProps(
286 xDPS->getDocumentProperties());
287 OSL_ENSURE(xDocProps.is(),
"Doc has no DocumentProperties");
289 xDocProps->setTemplateName(OUString());
291 xDocProps->setTemplateDate(uDT);
292 xDocProps->setTemplateURL(rPath);
295 OUString sTitle( xDocProps->getTitle() );
296 if (!sTitle.isEmpty())
299 xDocProps->setTitle( sTitle );
314 if( aIdx.GetIndex() + 1 !=
325 sFileName = aTempFile2.
GetURL();
327 StreamMode::STD_READWRITE );
332 if( SPLITDOC_TO_HTML == eDocType &&
348 if( !sFileName.isEmpty() )
352 case SPLITDOC_TO_HTML:
362 aTmp.
GetMark()->nContent.Assign(
nullptr, 0 );
373 OSL_FAIL(
"no more Nodes!" );
377 CorrAbs( aSIdx, aEIdx, *aTmp.GetPoint(),
true);
387 ((RndStdIds::FLY_AT_PARA == pAnchor->
GetAnchorId()) ||
388 (RndStdIds::FLY_AT_CHAR == pAnchor->
GetAnchorId())) &&
389 aSIdx <= pAPos->
nNode &&
390 pAPos->
nNode < aEIdx )
407 if( !pOutlNds->
Seek_Entry( pStartNd, &nOutl ))
436 bool bMvIdx = aEndIdx == *pSectEnd;
451 while( pSectNd && pSectNd->
GetIndex() >
456 if( aEndIdx < pSectNd->EndOfSectionIndex() )
470 if (aEndIdx >= aStartIdx)
473 *pFormat, aSectData,
nullptr, &aEndIdx,
false);
478 *pFormat, aSectData,
nullptr, &aStartIdx,
false);
494 case SPLITDOC_TO_HTML:
502 pFilter = pFCntnr->
GetFilter4EA( pFilter->GetTypeName(), SfxFilterFlags::EXPORT );
const SfxPoolItem * ExecuteSlot(SfxRequest &rReq, const SfxInterface *pIF=nullptr)
SwSectionNode * FindSectionNode()
Search section node, in which it is.
const SwEndNode * EndOfSectionNode() const
sal_uLong GetIndex() const
virtual SfxObjectFactory & GetFactory() const =0
Represents the style of a paragraph.
Marks a position in the document model.
virtual bool DoSaveCompleted(SfxMedium *pNewStor=nullptr, bool bRegisterRecent=true)
SAL_DLLPRIVATE void SetProtectFlag(bool const bFlag)
void SetLinkFileName(OUString const &rNew)
const OUString & GetText() const
virtual bool get(DocumentSettingId id) const override
Return the specified document setting.
void DelSectionFormat(SwSectionFormat *pFormat, bool bDelNodes=false)
virtual void SetRedlineFlags_intern(RedlineFlags eMode)=0
Set a new redline mode.
std::shared_ptr< const SfxFilter > GetFilter4EA(const OUString &rEA, SfxFilterFlags nMust=SfxFilterFlags::IMPORT, SfxFilterFlags nDont=SFX_FILTER_NOTINSTALLED) const
bool GenerateHTMLDoc(const OUString &rPath, const SwTextFormatColl *pSplitColl)
void CreateLink(LinkCreateType eType)
OUString GetUniqueSectionName(const OUString *pChkStr=nullptr) const
virtual void set(DocumentSettingId id, bool value) override
Set the specified document setting.
SwSectionFormat * GetFormat()
IDocumentUndoRedo & GetIDocumentUndoRedo()
void Copy_(const SwNodeRange &rRg, const SwNodeIndex &rInsPos, bool bNewFrames=true) const
const SwFrameFormats * GetSpzFrameFormats() const
void ReplaceStyles(const SwDoc &rSource, bool bIncludePageStyles=true)
int GetAttrOutlineLevel() const
Returns outline level of this text node.
const SwSection & GetSection() const
void Delete(const SwNodeIndex &rPos, sal_uLong nNodes=1)
delete nodes
constexpr auto SFX_INTERFACE_NONE
sal_uLong GetIndex() const
virtual void DelLayoutFormat(SwFrameFormat *pFormat)=0
virtual void DoUndo(bool const bDoUndo)=0
Enable/Disable Undo.
SwTextAttr * InsertItem(SfxPoolItem &rAttr, const sal_Int32 nStart, const sal_Int32 nEnd, const SetAttrMode nMode=SetAttrMode::DEFAULT)
create new text attribute from rAttr and insert it
SwSectionFormat * MakeSectionFormat()
void CopyFlyInFlyImpl(const SwNodeRange &rRg, SwPaM const *const pCopiedPaM, const SwNodeIndex &rStartIdx, const bool bCopyFlyAtFly=false, SwCopyFlags flags=SwCopyFlags::Default) const
bool SplitDoc(sal_uInt16 eDocType, const OUString &rPath, bool bOutline, const SwTextFormatColl *pSplitColl, int nOutlineLevel=0)
Create sub-documents according to the given collection.
SwNode & GetEndOfContent() const
Regular ContentSection (i.e. the BodyText).
css::util::DateTime GetUNODateTime() const
PaM is Point and Mark: a selection of the document model.
static SwNodePtr GetStartNode(SwOutlineNodes const *pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type *nOutl)
static SW_DLLPUBLIC std::shared_ptr< const SfxFilter > GetFilterOfFormat(std::u16string_view rFormat, const SfxFilterContainer *pCnt=nullptr)
find for an internal format name the corresponding filter entry
bool GoInNode(SwPaM &rPam, SwMoveFnCollection const &fnMove)
const SwPosition * GetPoint() const
std::vector< SwTextFormatColl * >::size_type size_type
OUString const & GetURL() const
SwIndex & Assign(SwIndexReg *, sal_Int32)
::sw::DocumentContentOperationsManager const & GetDocumentContentOperationsManager() const
SwNumRule * mpOutlineRule
Marks a node in the document model.
const SwOutlineNodes & GetOutLineNds() const
Array of all OutlineNodes.
SwSectionNode * InsertTextSection(SwNodeIndex const &rNdIdx, SwSectionFormat &rSectionFormat, SwSectionData const &, SwTOXBase const *const pTOXBase, SwNodeIndex const *const pEnd, bool const bInsAtStart=true, bool const bCreateFrames=true)
Insert a new SwSection.
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
void SetOutlineNumRule(const SwNumRule &rRule)
bool GenerateGlobalDoc(const OUString &rPath, const SwTextFormatColl *pSplitColl)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
sal_uLong EndOfSectionIndex() const
SwTextNode is a paragraph in the document model.
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
bool DoSaveAs(SfxMedium &rNewStor)
OUString GetExpandText(SwRootFrame const *pLayout, const sal_Int32 nIdx=0, const sal_Int32 nLen=-1, const bool bWithNum=false, const bool bAddSpaceAfterListLabelStr=false, const bool bWithSpacesForLevel=false, const ExpandMode eAdditionalMode=ExpandMode::ExpandFootnote) const
add 4th optional parameter indicating, when that a spa...
void CorrAbs(const SwNodeIndex &rOldNode, const SwPosition &rNewPos, const sal_Int32 nOffset=0, bool bMoveCursor=false)
const SwTextFormatColls * GetTextFormatColls() const
static SfxViewFrame * LoadHiddenDocument(SfxObjectShell const &i_rDoc, SfxInterfaceId i_nViewId)
#define FILTER_XML
XML filter.
SwMoveFnCollection const & fnMoveForward
SwPam::Move()/Find() default argument.
bool DoInitNew(SfxMedium *pMedium=nullptr)
::sw::DocumentSettingManager & GetDocumentSettingManager()
SwMoveFnCollection const & fnMoveBackward
SwTableNode * FindTableNode()
Search table node, in which it is.
static SwNodePtr GetEndNode(SwOutlineNodes const *pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type *nOutl)
const sw::mark::IMark * GetMark() const
void AppendItem(const SfxPoolItem &)
bool Seek_Entry(SwNode *rP, size_type *pnPos) const
SfxFilterContainer * GetFilterContainer() const
std::pair< const_iterator, bool > insert(Value &&x)
int GetAttrOutlineLevel() const
std::vector< SwNode * >::size_type size_type
SwNode & GetEndOfExtras() const
This is the last EndNode of a special section.
SwSectionFormats & GetSections()
void SetFilter(const std::shared_ptr< const SfxFilter > &pFilter)
void EnableKillingFile(bool bEnable=true)
const SwAttrPool & GetAttrPool() const
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
bool MoveNodes(const SwNodeRange &, SwNodes &rNodes, const SwNodeIndex &, bool bNewFrames=true)
move the node pointer
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
Base class of the Writer document model elements.
SwTextFormatColl * GetTextColl() const
SfxMedium * GetMedium() const