2010-10-14 08:30:41 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2011-03-31 10:05:04 +02:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2013-11-05 02:17:53 +01:00
|
|
|
#ifndef INCLUDED_SW_INC_INDEX_HXX
|
|
|
|
#define INCLUDED_SW_INC_INDEX_HXX
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2014-03-04 00:23:14 +01:00
|
|
|
#include <sal/types.h>
|
2013-10-22 15:58:57 +03:00
|
|
|
#include <tools/rtti.hxx>
|
2009-01-05 14:06:42 +00:00
|
|
|
#include <swdllapi.h>
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2014-10-16 16:02:23 +02:00
|
|
|
#include <iostream>
|
|
|
|
|
2000-09-18 16:15:01 +00:00
|
|
|
class SwIndexReg;
|
2006-02-01 12:47:58 +00:00
|
|
|
struct SwPosition;
|
2000-09-18 16:15:01 +00:00
|
|
|
|
sw: add API that provides fast access to marks of a text node
sw::mark::MarkManager already provides two methods to provide not so slow mark
access:
- some marks (bookmarks, annotation marks) have their own container, so it's
possible to iterate over only those types, not all of them
- the containers are sorted by the start position of the marks, so it's easy to
ignore marks that are after the current text node
However, it's not possible to ignore marks ending before the current text node.
This is a problem, as e.g. during ODF export, we have to iterate over every
bookmark for each paragraph, so the operation is not linear.
On the other hand, the start and end position of bookmarks are stored using
SwPosition, and the SwIndex of the SwPosition is already registered in the
SwIndexReg of the SwTxtNode, so the text node sort of already knows what
bookmarks start/end at the current paragraph, it just doesn't known which
position belongs to what mark (if it belongs to a mark).
Fix the problem by adding a pointer to SwIndex that can optionally point back
to the mark that owns it. Also, in the sw::mark::MarkBase methods (which are
the only ones allowed to touch those positions) always set that pointer. With
this, it's possible to get the bookmarks of a node (list of bookmarks which
start or end in the current node) in a much faster way for text nodes.
Change-Id: I7ceeff4dce852b4d72f2a73ae6a2423c7a781e41
2014-10-30 11:06:52 +01:00
|
|
|
namespace sw {
|
|
|
|
namespace mark {
|
|
|
|
class IMark;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-02-15 11:36:56 +01:00
|
|
|
/// Marks a character position inside a document model node.
|
2009-01-05 14:06:42 +00:00
|
|
|
class SW_DLLPUBLIC SwIndex
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
private:
|
2000-09-18 16:15:01 +00:00
|
|
|
friend class SwIndexReg;
|
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
sal_Int32 m_nIndex;
|
2011-11-24 00:52:10 +01:00
|
|
|
SwIndexReg * m_pIndexReg;
|
|
|
|
// doubly linked list of Indexes registered at m_pIndexReg
|
|
|
|
SwIndex * m_pNext;
|
|
|
|
SwIndex * m_pPrev;
|
2000-09-18 16:15:01 +00:00
|
|
|
|
sw: add API that provides fast access to marks of a text node
sw::mark::MarkManager already provides two methods to provide not so slow mark
access:
- some marks (bookmarks, annotation marks) have their own container, so it's
possible to iterate over only those types, not all of them
- the containers are sorted by the start position of the marks, so it's easy to
ignore marks that are after the current text node
However, it's not possible to ignore marks ending before the current text node.
This is a problem, as e.g. during ODF export, we have to iterate over every
bookmark for each paragraph, so the operation is not linear.
On the other hand, the start and end position of bookmarks are stored using
SwPosition, and the SwIndex of the SwPosition is already registered in the
SwIndexReg of the SwTxtNode, so the text node sort of already knows what
bookmarks start/end at the current paragraph, it just doesn't known which
position belongs to what mark (if it belongs to a mark).
Fix the problem by adding a pointer to SwIndex that can optionally point back
to the mark that owns it. Also, in the sw::mark::MarkBase methods (which are
the only ones allowed to touch those positions) always set that pointer. With
this, it's possible to get the bookmarks of a node (list of bookmarks which
start or end in the current node) in a much faster way for text nodes.
Change-Id: I7ceeff4dce852b4d72f2a73ae6a2423c7a781e41
2014-10-30 11:06:52 +01:00
|
|
|
/// Pointer to a mark that owns this position to allow fast lookup of marks of an SwIndexReg.
|
|
|
|
const sw::mark::IMark* m_pMark;
|
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
SwIndex& ChgValue( const SwIndex& rIdx, sal_Int32 nNewValue );
|
|
|
|
void Init(sal_Int32 const nIdx);
|
2011-01-24 18:48:46 +01:00
|
|
|
void Remove();
|
2000-09-18 16:15:01 +00:00
|
|
|
|
|
|
|
public:
|
2013-11-12 00:46:22 +01:00
|
|
|
explicit SwIndex(SwIndexReg *const pReg, sal_Int32 const nIdx = 0);
|
2000-09-18 16:15:01 +00:00
|
|
|
SwIndex( const SwIndex & );
|
2011-11-28 10:13:57 +01:00
|
|
|
SwIndex( const SwIndex &, short nDiff );
|
2000-09-18 16:15:01 +00:00
|
|
|
~SwIndex() { Remove(); }
|
|
|
|
|
2014-03-04 08:51:48 +01:00
|
|
|
SwIndex& operator=( sal_Int32 const );
|
2011-11-24 00:52:10 +01:00
|
|
|
SwIndex& operator=( const SwIndex & );
|
|
|
|
|
2014-03-04 08:51:48 +01:00
|
|
|
sal_Int32 operator++();
|
|
|
|
sal_Int32 operator--();
|
|
|
|
sal_Int32 operator++(int);
|
|
|
|
sal_Int32 operator--(int);
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2014-03-04 08:51:48 +01:00
|
|
|
sal_Int32 operator+=( sal_Int32 const );
|
|
|
|
sal_Int32 operator-=( sal_Int32 const );
|
|
|
|
sal_Int32 operator+=( const SwIndex& );
|
|
|
|
sal_Int32 operator-=( const SwIndex& );
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2014-03-04 08:51:48 +01:00
|
|
|
bool operator< ( const SwIndex& ) const;
|
|
|
|
bool operator<=( const SwIndex& ) const;
|
|
|
|
bool operator> ( const SwIndex& ) const;
|
|
|
|
bool operator>=( const SwIndex& ) const;
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
bool operator< ( sal_Int32 const nVal ) const { return m_nIndex < nVal; }
|
|
|
|
bool operator<=( sal_Int32 const nVal ) const { return m_nIndex <= nVal; }
|
|
|
|
bool operator> ( sal_Int32 const nVal ) const { return m_nIndex > nVal; }
|
|
|
|
bool operator>=( sal_Int32 const nVal ) const { return m_nIndex >= nVal; }
|
|
|
|
bool operator==( sal_Int32 const nVal ) const { return m_nIndex == nVal; }
|
|
|
|
bool operator!=( sal_Int32 const nVal ) const { return m_nIndex != nVal; }
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
bool operator==( const SwIndex& rSwIndex ) const
|
|
|
|
{
|
|
|
|
return (m_nIndex == rSwIndex.m_nIndex)
|
|
|
|
&& (m_pIndexReg == rSwIndex.m_pIndexReg);
|
|
|
|
}
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
bool operator!=( const SwIndex& rSwIndex ) const
|
|
|
|
{
|
|
|
|
return (m_nIndex != rSwIndex.m_nIndex)
|
|
|
|
|| (m_pIndexReg != rSwIndex.m_pIndexReg);
|
|
|
|
}
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
sal_Int32 GetIndex() const { return m_nIndex; }
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2011-01-24 18:48:46 +01:00
|
|
|
// Assignments without creating a temporary object.
|
2013-11-12 00:46:22 +01:00
|
|
|
SwIndex &Assign(SwIndexReg *, sal_Int32);
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2011-01-24 18:48:46 +01:00
|
|
|
// Returns pointer to IndexArray (for RTTI at SwIndexReg).
|
2011-11-24 00:52:10 +01:00
|
|
|
const SwIndexReg* GetIdxReg() const { return m_pIndexReg; }
|
sw: add API that provides fast access to marks of a text node
sw::mark::MarkManager already provides two methods to provide not so slow mark
access:
- some marks (bookmarks, annotation marks) have their own container, so it's
possible to iterate over only those types, not all of them
- the containers are sorted by the start position of the marks, so it's easy to
ignore marks that are after the current text node
However, it's not possible to ignore marks ending before the current text node.
This is a problem, as e.g. during ODF export, we have to iterate over every
bookmark for each paragraph, so the operation is not linear.
On the other hand, the start and end position of bookmarks are stored using
SwPosition, and the SwIndex of the SwPosition is already registered in the
SwIndexReg of the SwTxtNode, so the text node sort of already knows what
bookmarks start/end at the current paragraph, it just doesn't known which
position belongs to what mark (if it belongs to a mark).
Fix the problem by adding a pointer to SwIndex that can optionally point back
to the mark that owns it. Also, in the sw::mark::MarkBase methods (which are
the only ones allowed to touch those positions) always set that pointer. With
this, it's possible to get the bookmarks of a node (list of bookmarks which
start or end in the current node) in a much faster way for text nodes.
Change-Id: I7ceeff4dce852b4d72f2a73ae6a2423c7a781e41
2014-10-30 11:06:52 +01:00
|
|
|
const SwIndex* GetNext() const { return m_pNext; }
|
|
|
|
|
|
|
|
const sw::mark::IMark* GetMark() const { return m_pMark; }
|
|
|
|
void SetMark(const sw::mark::IMark* pMark);
|
2000-09-18 16:15:01 +00:00
|
|
|
};
|
|
|
|
|
2015-06-05 14:41:08 +02:00
|
|
|
SW_DLLPUBLIC std::ostream& operator <<(std::ostream& s, const SwIndex& index);
|
2014-10-16 16:02:23 +02:00
|
|
|
|
2000-09-18 16:15:01 +00:00
|
|
|
class SwIndexReg
|
|
|
|
{
|
|
|
|
friend class SwIndex;
|
2012-10-12 16:49:40 +02:00
|
|
|
friend bool sw_PosOk(const SwPosition & aPos);
|
2006-01-20 12:47:01 +00:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
const SwIndex * m_pFirst;
|
|
|
|
const SwIndex * m_pLast;
|
2000-09-18 16:15:01 +00:00
|
|
|
|
|
|
|
protected:
|
2013-11-12 00:46:22 +01:00
|
|
|
virtual void Update( SwIndex const & rPos, const sal_Int32 nChangeLen,
|
CWS-TOOLING: integrate CWS odfmetadata3
2009-09-11 Michael Stahl merge DEV300_m58
2009-09-07 Michael Stahl SwFmtFld::Modify(): do nothing on RES_OBJECTDYING
2009-08-27 Michael Stahl #i91565#, #i91566#: TextPortionEnumerationTest.java: add test document
2009-08-27 Michael Stahl #i91565#, #i91566#: add complex test: TextPortionEnumerationTest.java
2009-08-27 Michael Stahl CLiteral::initialize(): zero-length literals probably not an error
2009-08-27 Michael Stahl #i91565#, #i91566#: offapi: new InContentMetadata and MetadataField services
adapt TextPortion for InContentMetadata
2009-08-27 Michael Stahl #i91564#: xmloff: load/store xml:id and RDFa for text:bookmark(-start).
2009-08-27 Michael Stahl #i91564#: sw core: add support for xml:id at bookmarks:
sw::mark::Bookmark: derive from Metadatable.
SwHistoryBookmark, SaveBookmark: store a MetadatableUndo.
ndcopy.cxx: lcl_CopyBookmarks(): copy the xml:id.
SwXBookmark: derive from MetadatableMixin.
2009-08-27 Michael Stahl #i91565#, #i91566#: xmloff: refactor ruby import so nested meta(-field) works:
remove XMLRubyHint_Impl.
XMLImpRubyContext_Impl::~XMLImpRubyContext_Impl(): insert ruby directly.
2009-08-27 Michael Stahl #i91565#, #i91566#: xmloff: fix text:meta(-field) import/export:
new XMLTextParagraphExport::exportTextField() overload for XTextField.
CreateAndInsertMark(): set xml:id after insertion.
fix meta(-field) service names, bugs etc.
2009-08-27 Michael Stahl #i91565#, #i91566#: sw text formatting: paint background of meta(-field) body:
SwFont: add member m_nMetaCount.
txttypes.hxx: add POR_META.
atrstck.cxx: handle RES_TXTATR_META(FIELD).
itrform2.cxx: SwTxtFormatter::WhichTxtPor(): create new class SwMetaPortion.
2009-08-27 Michael Stahl #i91566#: sw text formatting: display meta-field prefix and suffix:
SwAttrIter::GetAttr(): replace with call to GetTxtAttrForCharAt().
SwTxtFormatter::NewExtraPortion(): handle meta-field prefix.
SwTxtFormatter: new member m_nHintEndIndex.
SwTxtFormatter::WhichFirstPortion(): call TryNewNoLengthPortion().
SwTxtFormatter::TryNewNoLengthPortion(): new; handle suffix of meta-field.
SwTxtFormatter::UnderFlow(): UGLY HACK: decrement m_nHintEndIndex.
SwFldPortion: add flag m_bNoLength: portion has zero length (for suffix).
2009-08-27 Michael Stahl #i91565#, #i91566#: extend text:meta(-field) uno wrapper with XText interface:
unoobj.hxx: new CursorType CURSOR_META.
unoobj2.cxx: refactor SwXText implementation to ensure that when the SwXText
belongs to a SwXMeta, content is always inserted inside the meta(-field).
unoobj.cxx: new SwXTextCursor::ForceIntoMeta(): cursor stays in meta(-field).
unometa.hxx: SwXMeta implements XText, forwarding to a member SwXMetaText.
DocInsertStringSplitCR(), SwX*::attachToRange(), SwX*::DeleteAndInsert():
use FORCEHINTEXPAND hack to ensure insert into the meta(-field) at the end.
2009-08-27 Michael Stahl #i91565#, #i91566#: add text:meta(-field) uno wrapper to sw:
fmtmeta.hxx, fmtatr2.cxx: new class sw::MetaField, new sw::MetaFieldManager.
doc.hxx, docnew.cxx: new SwDoc::GetMetaFieldManager().
unocoll.hxx,.cxx: new SW_SERVICE_FIELDTYPE_METAFIELD, SW_SERVICE_TYPE_META.
unomap.hxx,.cxx: new PROPERTY_MAP_METAFIELD.
unoprnms.hxx: new UNO_NAME_META.
unoport.hxx: new PORTION_META; add "InContentMetadata" prop to SwXTextPortion.
new unometa.hxx: new class SwXMeta and SwXMetaField.
unofield.cxx: SwXFieldEnumeration: include meta-fields.
unoportenum.cxx: handle RES_TXTATR_META(FIELD) by using a portion list stack.
unotext.cxx: SwXText::insertTextContent(): handle meta(-field) as attribute.
2009-08-27 Michael Stahl #i91565#, #i91566#: ndhints.cxx: remove sort number from SwTxtAttrNesting
2009-08-27 Michael Stahl #i91565#, #i91566#: add support for hints with end and CH_TXTATR to sw core:
doc.hxx, docedt.cxx: replace SwDoc::Delete(), DeleteAndJoin(), ReplaceRange()
with wrappers that split at left-overlapped end+CH_TXTATR hints.
txatbase.hxx: new member SwTxtAttr::m_bHasDummyChar.
ndtxt.hxx: rename SwTxtNode::GetTxtAttr() to GetTxtAttrForCharAt().
ndtxt.cxx: SwTxtNode::CopyText(): copy end+CH_TXTATR hints iff copy CH_TXTATR.
txtatr2.cxx, thints.cxx: SwTxtMeta gets a CH_TXTATR.
2009-08-27 Michael Stahl #i91565#, #i91566#: add text:meta(-field) to sw core:
txatbase.hxx: new member SwTxtAttr::m_bNesting.
hintids.hxx: new ids RES_TXTATR_META, RES_TXTATR_METAFIELD.
txtatr.hxx: new base class SwTxtAttrNesting.
new hint SwTxtMeta.
SwTxtRuby derives from SwTxtAttrNesting.
txtinet.hxx: SwTxtINetFmt derives from SwTxtAttrNesting.
new header fmtmeta.hxx: new pool item SwFmtMeta. new class sw::Meta.
ndhints.hxx, thints.cxx: new method SwpHints::TryInsertNesting().
thints.cxx: refactoring: BuildPortions() no longer handles Ruby/Hyperlink,
but TryInsertNesting(), which also handles meta(-field).
SwTxtNode::InsertItem(): check if the hint is actually inserted.
ndhints.cxx: sort nesting hints based on sort number.
ndtxt.cxx: lcl_CopyHint(): handle copy of meta/meta-field.
2009-08-27 Michael Stahl enable expanding hints with m_bLockExpandFlag set:
add new InsertFlag: INS_FORCEHINTEXPAND.
add new SetAttrMode: SETATTR_FORCEHINTEXPAND.
rename SwEditShell::Insert() to Insert2() because changed signature fails
to compile when SwWrtShell tries to overwrite these non-virtual members...
SwWrtShell::Insert() sets FOCEHINTEXPAND if range was selected/deleted.
adapt SwUndoInsert to store flags.
2009-08-27 Michael Stahl change formal parameters of item insertion methods to type SetAttrMode
2009-08-27 Michael Stahl fix incorrect resetting of text attributes in SwUndoInsSection, SwUndoInserts
2009-08-27 Michael Stahl clean up SwTxtNode::CutImpl() and lcl_CopyHint()
2009-08-27 Michael Stahl rename SwDoc::Copy() to CopyRange(), and _Copy() to CopyImpl()
2009-08-27 Michael Stahl rename SwNodes::Move() to MoveRange(), and remove unused parameter
2009-08-27 Michael Stahl rename SwDoc::Move() to MoveRange()/MoveNodeRange()
2009-08-27 Michael Stahl rename SwDoc::Insert() to InsertString(), and remove sal_Unicode variant
2009-08-27 Michael Stahl rename SwDoc::Insert() to InsertPoolItem()/InsertItemSet()/InsertSwSection()
2009-08-27 Michael Stahl rename SwDoc::Replace() to ReplaceRange()
2009-08-27 Michael Stahl remove SwDoc::Overwrite() sal_Unicode variant
2009-08-27 Michael Stahl split up SwDoc::DeleteAndJoin(): factor out DeleteAndJoinWithRedline()
2009-08-27 Michael Stahl rename overloaded SwDoc::Delete() to DeleteRange()/DeleteTOXMark()
2009-08-27 Michael Stahl rename SwTxtNode::Copy() to CopyText()
2009-08-27 Michael Stahl rename SwTxtNode::Cut() to CutText(), and _Cut() to CutImpl()
2009-08-27 Michael Stahl rename SwTxtNode::Delete() to DeleteAttribute()/DeleteAttributes()
2009-08-27 Michael Stahl rename SwTxtNode::Replace() to ReplaceText(), and remove the xub_Unicode variant
2009-08-27 Michael Stahl rename SwTxtNode::Erase() to EraseText()
2009-08-27 Michael Stahl rename SwTxtNode::Insert() to InsertText(), and remove the xub_Unicode variant
2009-08-27 Michael Stahl clean up SwTxtNode::Update()
2009-08-27 Michael Stahl remove SwTxtAttr::RemoveFromPool() and make destructor non-public,
to be invoked by new method SwTxtAttr::Destroy()
2009-08-27 Michael Stahl ensure that SwDoc::Insert() for item (set) returns success indicator:
replace SwRegHistory constructor with method InsertItems(), returning bool.
refactor InsAttr() so that it checks if InsertItems() succeeds.
2009-08-27 Michael Stahl move SwXTextPortionEnumeration from unoobj.hxx to unoport.hxx
2009-08-27 Michael Stahl add missing SolarMutex in SwXTextPortion methods
2009-08-27 Michael Stahl SwXTextPortion: new member m_xTextField (so the TextField property need not
be returned indirectly via SwUnoCursorHelper).
factor out function CreateSwXTextField().
2009-08-27 Michael Stahl SwXTextPortion: remove PORTION_CONTROL_CHAR and implementation of XTextField
2009-08-27 Michael Stahl remove obsolete hint SwTxtHardBlank and formats SwFmtHardBlank/SwFmtSoftHyph
2009-08-27 Michael Stahl clean up SwTxtAttr and friends:
remove many accessor methods for obsolete (due to autofmt) char format items.
remove unused flag SwTxtAttr::m_bDontMergeAttr.
MakeRedlineTxtAttr() now dedicated function, no longer calls MakeTxtAttr().
2009-08-27 Michael Stahl remove obsolete attribute SwTxt2Lines
2009-08-27 Michael Stahl SwXTextPortionEnumeration: finish refactoring CreatePortions
change ExportHints so it always returns a text portion for hint w/ CH_TXTATR.
remove special case for handling end of paragraph.
unfortunately had to refactor the fieldmarks export as well (got in the way).
2009-08-27 Michael Stahl SwXTextPortionEnumeration: refactor CreatePortions: frames export
extract function ExportFrames() from CreatePortions().
remove (un)dead code that calls evil MovePara(fnParaCurr, fnParaEnd)
2009-08-27 Michael Stahl clean up SwXParaFrameEnumeration
2009-08-27 Michael Stahl CollectFrameAtNode: replace SwDependArr with STL based FrameDependList_t
2009-08-27 Michael Stahl SwXTextPortionEnumeration: tweak refmark/toxmark export
so ExportHints returns the portion for point marks
2009-08-27 Michael Stahl clean up SwXTextPortionEnumeration:
prefix members, remove casts, replace SvWeirdArray with STL, etc.
make CreatePortions() method a function, and remove lots of members.
extract fieldmarks function from CreatePortions.
2009-08-27 Michael Stahl remove FOREACHUNOPAM_START/END macros
2009-08-27 Michael Stahl clean up SwXTextPortion:
prefix members, remove casts, etc.
remove SwXRubyPortion: replace it with another SwXTextPortion constructor
2009-08-27 Michael Stahl #i102541# SwXReferenceMark::InsertRefMark(): use flag SETATTR_DONTEXPAND
2009-08-27 Michael Stahl rename SwTxtNode::Insert to SwTxtNode::InsertHint, and
fix constness in SwTxtNode::InsertItem
2009-08-27 Michael Stahl turn SwTxtNode::MakeTxtAttr() methods into global functions in ndhints.hxx
2009-08-27 Michael Stahl remove obsolete sw/inc/bookmrk.hxx
2009-08-27 Michael Stahl pam.cxx: fix ComparePosition functions (returned wrong result in one case)
2009-08-27 Michael Stahl #i103613# only import RDF metadata on normal open of a document
2009-09-11 kz CWS-TOOLING: integrate CWS impress176
2009-09-08 20:18:24 +0200 sj r275957 : fixed warning (shadowed variable)
2009-09-08 18:02:05 +0200 cl r275948 : #i104315# added missing tab pages
2009-09-08 17:35:18 +0200 cl r275947 : #i104866# fixed angle import
2009-09-08 17:32:53 +0200 cl r275946 : #i104841# fixed angle import
2009-09-08 17:01:25 +0200 cl r275943 : #i103935# fixed the SID_EVENTCONFIG mess
2009-09-08 14:32:57 +0200 sj r275928 : #i104685# only comments
2009-09-07 12:37:36 +0200 sj r275886 : #i104683# fixed import of bold/italic attributes for normal text shapes
2009-09-04 15:07:46 +0200 sj r275808 : #104689# fixed bullet color problem
2009-09-03 15:25:07 +0200 sj r275753 : #160200# added vertical alignment of table cells
2009-09-11 kz CWS-TOOLING: integrate CWS dv14
2009-09-10 15:16:32 +0200 sg r276035 : #160513# updated wfs scheme to accept ports
2009-09-10 07:41:47 +0200 dv r276019 : #i104942# Better renaming algorithmen
2009-08-31 13:41:11 +0200 dv r275604 : #160505# Setting APP1PRODUCTNAME must not overwrite APP1PRODUCTDEF
2009-09-11 kz CWS-TOOLING: integrate CWS jl131
2009-09-02 16:42:40 +0200 jl r275720 : #i97896#
2009-08-31 13:01:53 +0200 jl r275599 : CWS-TOOLING: rebase CWS jl131 to trunk@275331 (milestone: DEV300:m56)
2009-07-31 14:35:30 +0200 jl r274531 : CWS-TOOLING: rebase CWS jl131 to trunk@274203 (milestone: DEV300:m53)
2009-07-23 14:20:32 +0200 jl r274272 : #i79839# better error text when trying to modify shared layer without having write permission, eg. unopkg add --shared, unopkg remove --shared, unopkg reinstall --shared
2009-07-22 16:38:02 +0200 jl r274252 : #i97896# localize error message for lock file
2009-07-22 16:37:22 +0200 jl r274251 : #i80462# unprecise wording in updatedialog
2009-07-22 16:36:06 +0200 jl r274250 : #i97896# localize error message for lock file
2009-07-22 16:35:20 +0200 jl r274249 : #i97896# localize error message for lock file
2009-07-22 15:07:30 +0200 jl r274242 : #i98873# minimum java version is 1.5 since OOo 3.0
2009-09-11 kz CWS-TOOLING: integrate CWS changehc
2009-08-31 19:38:50 +0200 pl r275633 : remove dbug printf
2009-08-31 17:41:50 +0200 pl r275623 : CWS-TOOLING: rebase CWS changehc to trunk@275331 (milestone: DEV300:m56)
2009-07-15 19:45:46 +0200 pl r274028 : #i35482# use HC flag to decide high contrast mode
2009-07-15 17:40:52 +0200 pl r274020 : #i35482# use HC flag to decide high contrast mode
2009-07-15 17:39:50 +0200 pl r274019 : #i35482# update autohc correctly in MergeSystemSettings
2009-07-15 17:38:57 +0200 pl r274018 : #i35482# update autohc correctly in MergeSystemSettings
2009-09-11 kz CWS-TOOLING: integrate CWS notes10
2009-08-24 07:25:57 +0200 mod r275287 : 2009-07-26 02:38:32 +0200 mod r274343 : #i#i103645#
2009-07-26 02:01:53 +0200 mod r274342 : #i103645#
2009-07-26 01:52:42 +0200 mod r274341 : #i103490#
2009-07-22 08:31:48 +0200 mod r274215 : #i103373#
2009-07-15 00:55:11 +0200 mod r273987 : #i101419#
2009-07-14 07:07:55 +0200 mod r273956 : #i101419#
2009-07-14 07:07:43 +0200 mod r273955 : #i101419#
2009-07-14 07:02:10 +0200 mod r273954 : changes from notes9
2009-07-14 06:14:25 +0200 mod r273953 : #i103476#
2009-09-11 kz CWS-TOOLING: integrate CWS ab70
2009-09-10 15:12:54 +0200 jsk r276034 : #i85434# - mandatory automatic update test
2009-09-10 15:11:06 +0200 jsk r276033 : #i85434# - mandatory automatic update test
2009-09-02 09:49:24 +0200 ab r275698 : #i85434# Dialog Import
2009-09-11 kz CWS-TOOLING: integrate CWS hb32bugs02
2009-09-02 Henning Brinkmann #i102420# revert changes
2009-08-26 Henning Brinkmann merged DEV300_m56
2009-08-19 Henning Brinkmann merged DEV300_m55
2009-08-14 Henning Brinkmann merged changes from wntmsci12
2009-08-12 Henning Brinkmann Implemented NoSpaceEdit constructor and destructor in .cxx to allow compile with debug on wntmsci12.
2009-08-12 Henning Brinkmann Added some SW_DLLPUBLIC to make compilable on wntmsci12.
2009-08-11 Henning Brinkmann #i102420# dbg_out: surround output for SwNodes with <nodes-array>.
2009-08-10 Henning Brinkmann #i102420# rewritten debug output for SwNodes.
2009-08-07 Henning Brinkmann #i102420# debug _MoveNodes: output the destination, too. Break after two iterations.
2009-08-07 Henning Brinkmann #i102420# _MoveNodes: Additionally check if destination index is inside source => false
Check if current range was already handled => loop
Debug output current range
2009-08-06 Henning Brinkmann merged DEV300_m54
2009-08-06 Henning Brinkmann added master fix
2009-08-06 Henning Brinkmann debug output for SwNodeRange
2009-08-04 Henning Brinkmann #i102844# robustness: check for NULL pointer to prevent crash
2009-08-03 Henning Brinkmann #i103475# applied patch and verified
2009-08-03 Henning Brinkmann Removed code preventing build of sw with DEBUG.
2009-09-11 convert-repo update tags
2009-09-10 kz CWS-TOOLING: integrate CWS os2port06dev300
2009-09-05 22:49:00 +0200 ydario r275858 : #i99588# applied os2port06 diff to DEV300 tree.
2009-09-10 kz CWS-TOOLING: integrate CWS mingwport23
2009-08-29 07:07:53 +0200 tono r275555 : i#104522: mingw port graphite
2009-08-29 07:07:26 +0200 tono r275554 : i#104522: mingw port printf format fix
2009-09-10 kz CWS-TOOLING: integrate CWS mh232
2009-08-26 03:52:57 +0200 mh r275385 : #i102182# FreeBSD patch
2009-08-26 03:43:20 +0200 mh r275384 : #i101333# patch for FreeBSD
2009-08-26 03:11:20 +0200 mh r275383 : #i39230
2009-08-26 03:07:51 +0200 mh r275382 : #i39230# more space for initials field
2009-08-26 02:41:19 +0200 mh r275380 : #i39230# use vos::osecurity for reading the user name
2009-08-18 22:06:00 +0200 mh r275130 : #i104243#, line ending problem with newer perl
2009-08-18 21:53:21 +0200 mh r275129 : #i39230# read initials via getpwnam
2009-08-18 21:34:05 +0200 mh r275128 : enable CAIROCANVAS for Linux and Mac, #i88613#
2009-08-17 18:02:59 +0200 mh r275067 : #i95498# make compile with gcc3
2009-09-10 kz CWS-TOOLING: integrate CWS tkr24
2009-09-07 14:31:06 +0200 is r275898 : #160081# adding NO_LICENSE_INTO_COPYRIGHT
2009-09-10 releng #i10000# change KeyMapping to SingletonRef<framework::KeyMapping>
2009-09-11 convert-repo update tags
2009-09-10 kz CWS-TOOLING: integrate CWS os2port06dev300
2009-09-05 22:49:00 +0200 ydario r275858 : #i99588# applied os2port06 diff to DEV300 tree.
2009-09-10 kz CWS-TOOLING: integrate CWS mingwport23
2009-08-29 07:07:53 +0200 tono r275555 : i#104522: mingw port graphite
2009-08-29 07:07:26 +0200 tono r275554 : i#104522: mingw port printf format fix
2009-09-10 kz CWS-TOOLING: integrate CWS mh232
2009-08-26 03:52:57 +0200 mh r275385 : #i102182# FreeBSD patch
2009-08-26 03:43:20 +0200 mh r275384 : #i101333# patch for FreeBSD
2009-08-26 03:11:20 +0200 mh r275383 : #i39230
2009-08-26 03:07:51 +0200 mh r275382 : #i39230# more space for initials field
2009-08-26 02:41:19 +0200 mh r275380 : #i39230# use vos::osecurity for reading the user name
2009-08-18 22:06:00 +0200 mh r275130 : #i104243#, line ending problem with newer perl
2009-08-18 21:53:21 +0200 mh r275129 : #i39230# read initials via getpwnam
2009-08-18 21:34:05 +0200 mh r275128 : enable CAIROCANVAS for Linux and Mac, #i88613#
2009-08-17 18:02:59 +0200 mh r275067 : #i95498# make compile with gcc3
2009-09-10 kz CWS-TOOLING: integrate CWS tkr24
2009-09-07 14:31:06 +0200 is r275898 : #160081# adding NO_LICENSE_INTO_COPYRIGHT
2009-09-10 releng #i10000# change KeyMapping to SingletonRef<framework::KeyMapping>
2009-09-11 14:29:45 +00:00
|
|
|
const bool bNegative = false, const bool bDelete = false );
|
2000-09-18 16:15:01 +00:00
|
|
|
|
|
|
|
void ChkArr();
|
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
bool HasAnyIndex() const { return 0 != m_pFirst; }
|
2000-09-18 16:15:01 +00:00
|
|
|
|
|
|
|
public:
|
2014-03-04 08:58:06 +01:00
|
|
|
SwIndexReg();
|
2007-09-27 07:05:13 +00:00
|
|
|
virtual ~SwIndexReg();
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2012-12-26 12:14:11 +01:00
|
|
|
/// rtti, derived classes might do the same. If so, one can cast typesavely
|
|
|
|
/// via SwIndexReg.
|
2000-09-18 16:15:01 +00:00
|
|
|
TYPEINFO();
|
|
|
|
|
|
|
|
void MoveTo( SwIndexReg& rArr );
|
sw: add API that provides fast access to marks of a text node
sw::mark::MarkManager already provides two methods to provide not so slow mark
access:
- some marks (bookmarks, annotation marks) have their own container, so it's
possible to iterate over only those types, not all of them
- the containers are sorted by the start position of the marks, so it's easy to
ignore marks that are after the current text node
However, it's not possible to ignore marks ending before the current text node.
This is a problem, as e.g. during ODF export, we have to iterate over every
bookmark for each paragraph, so the operation is not linear.
On the other hand, the start and end position of bookmarks are stored using
SwPosition, and the SwIndex of the SwPosition is already registered in the
SwIndexReg of the SwTxtNode, so the text node sort of already knows what
bookmarks start/end at the current paragraph, it just doesn't known which
position belongs to what mark (if it belongs to a mark).
Fix the problem by adding a pointer to SwIndex that can optionally point back
to the mark that owns it. Also, in the sw::mark::MarkBase methods (which are
the only ones allowed to touch those positions) always set that pointer. With
this, it's possible to get the bookmarks of a node (list of bookmarks which
start or end in the current node) in a much faster way for text nodes.
Change-Id: I7ceeff4dce852b4d72f2a73ae6a2423c7a781e41
2014-10-30 11:06:52 +01:00
|
|
|
const SwIndex* GetFirstIndex() const { return m_pFirst; }
|
2000-09-18 16:15:01 +00:00
|
|
|
};
|
|
|
|
|
2011-11-24 00:52:00 +01:00
|
|
|
#ifndef DBG_UTIL
|
2000-09-18 16:15:01 +00:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator++()
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex+1 ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator--()
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex-1 ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator++(int)
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2013-11-12 00:46:22 +01:00
|
|
|
sal_Int32 const nOldIndex = m_nIndex;
|
2011-11-24 00:52:10 +01:00
|
|
|
ChgValue( *this, m_nIndex+1 );
|
2000-09-18 16:15:01 +00:00
|
|
|
return nOldIndex;
|
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator--(int)
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2013-11-12 00:46:22 +01:00
|
|
|
sal_Int32 const nOldIndex = m_nIndex;
|
2011-11-24 00:52:10 +01:00
|
|
|
ChgValue( *this, m_nIndex-1 );
|
2000-09-18 16:15:01 +00:00
|
|
|
return nOldIndex;
|
|
|
|
}
|
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator+=( sal_Int32 const nVal )
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex + nVal ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator-=( sal_Int32 const nVal )
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex - nVal ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator+=( const SwIndex& rIndex )
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex + rIndex.m_nIndex ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline sal_Int32 SwIndex::operator-=( const SwIndex& rIndex )
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return ChgValue( *this, m_nIndex - rIndex.m_nIndex ).m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
inline bool SwIndex::operator< ( const SwIndex& rIndex ) const
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return m_nIndex < rIndex.m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
inline bool SwIndex::operator<=( const SwIndex& rIndex ) const
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return m_nIndex <= rIndex.m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
inline bool SwIndex::operator> ( const SwIndex& rIndex ) const
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return m_nIndex > rIndex.m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2011-11-24 00:52:10 +01:00
|
|
|
inline bool SwIndex::operator>=( const SwIndex& rIndex ) const
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
return m_nIndex >= rIndex.m_nIndex;
|
2000-09-18 16:15:01 +00:00
|
|
|
}
|
2014-03-04 00:23:14 +01:00
|
|
|
|
2013-11-12 00:46:22 +01:00
|
|
|
inline SwIndex& SwIndex::operator= ( sal_Int32 const nVal )
|
2000-09-18 16:15:01 +00:00
|
|
|
{
|
2011-11-24 00:52:10 +01:00
|
|
|
if (m_nIndex != nVal)
|
|
|
|
{
|
|
|
|
ChgValue( *this, nVal );
|
|
|
|
}
|
2000-09-18 16:15:01 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2012-02-14 22:39:47 +01:00
|
|
|
#endif // ifndef DBG_UTIL
|
2000-09-18 16:15:01 +00:00
|
|
|
|
|
|
|
#endif
|
2010-10-14 08:30:41 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|