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>
955 lines
30 KiB
C++
955 lines
30 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: txmsrt.cxx,v $
|
|
* $Revision: 1.31 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
#include "precompiled_sw.hxx"
|
|
|
|
|
|
#include <tools/resid.hxx>
|
|
#include <unotools/charclass.hxx>
|
|
#include <com/sun/star/i18n/CollatorOptions.hpp>
|
|
#include <svx/unolingu.hxx>
|
|
#include <txtfld.hxx>
|
|
#include <doc.hxx>
|
|
#include <docary.hxx>
|
|
#include <cntfrm.hxx>
|
|
#include <node.hxx>
|
|
#include <frmatr.hxx>
|
|
#include <pam.hxx>
|
|
#include <txttxmrk.hxx>
|
|
#include <frmfmt.hxx>
|
|
#include <fmtfld.hxx>
|
|
#include <txmsrt.hxx>
|
|
#include <ndtxt.hxx>
|
|
#include <txtatr.hxx>
|
|
#include <swtable.hxx>
|
|
#include <expfld.hxx>
|
|
#include <authfld.hxx>
|
|
#include <toxwrap.hxx>
|
|
|
|
#ifndef _COMCORE_HRC
|
|
#include <comcore.hrc>
|
|
#endif
|
|
#include <numrule.hxx>
|
|
|
|
extern BOOL IsFrameBehind( const SwTxtNode& rMyNd, xub_StrLen nMySttPos,
|
|
const SwTxtNode& rBehindNd, xub_StrLen nSttPos );
|
|
|
|
using namespace ::com::sun::star;
|
|
using namespace ::com::sun::star::uno;
|
|
using ::rtl::OUString;
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: Strings initialisieren
|
|
--------------------------------------------------------------------*/
|
|
|
|
USHORT SwTOXSortTabBase::nOpt = 0;
|
|
|
|
SV_IMPL_VARARR( SwTOXSources, SwTOXSource )
|
|
|
|
|
|
SwTOXInternational::SwTOXInternational( LanguageType nLang, USHORT nOpt,
|
|
const String& rSortAlgorithm ) :
|
|
eLang( nLang ),
|
|
sSortAlgorithm(rSortAlgorithm),
|
|
nOptions( nOpt )
|
|
{
|
|
Init();
|
|
}
|
|
|
|
SwTOXInternational::SwTOXInternational( const SwTOXInternational& rIntl ) :
|
|
eLang( rIntl.eLang ),
|
|
sSortAlgorithm(rIntl.sSortAlgorithm),
|
|
nOptions( rIntl.nOptions )
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void SwTOXInternational::Init()
|
|
{
|
|
pIndexWrapper = new IndexEntrySupplierWrapper();
|
|
|
|
const lang::Locale aLcl( SvxCreateLocale( eLang ) );
|
|
pIndexWrapper->SetLocale( aLcl );
|
|
|
|
if(!sSortAlgorithm.Len())
|
|
{
|
|
Sequence < OUString > aSeq( pIndexWrapper->GetAlgorithmList( aLcl ));
|
|
if(aSeq.getLength())
|
|
sSortAlgorithm = aSeq.getConstArray()[0];
|
|
}
|
|
|
|
if ( nOptions & nsSwTOIOptions::TOI_CASE_SENSITIVE )
|
|
pIndexWrapper->LoadAlgorithm( aLcl, sSortAlgorithm, 0 );
|
|
else
|
|
pIndexWrapper->LoadAlgorithm( aLcl, sSortAlgorithm, SW_COLLATOR_IGNORES );
|
|
|
|
pCharClass = new CharClass( aLcl );
|
|
|
|
}
|
|
|
|
SwTOXInternational::~SwTOXInternational()
|
|
{
|
|
delete pCharClass;
|
|
delete pIndexWrapper;
|
|
}
|
|
|
|
String SwTOXInternational::ToUpper( const String& rStr, xub_StrLen nPos ) const
|
|
{
|
|
return pCharClass->toUpper( rStr, nPos, 1 );
|
|
}
|
|
inline BOOL SwTOXInternational::IsNumeric( const String& rStr ) const
|
|
{
|
|
return pCharClass->isNumeric( rStr );
|
|
}
|
|
|
|
sal_Int32 SwTOXInternational::Compare( const String& rTxt1, const String& rTxtReading1,
|
|
const lang::Locale& rLocale1,
|
|
const String& rTxt2, const String& rTxtReading2,
|
|
const lang::Locale& rLocale2 ) const
|
|
{
|
|
return pIndexWrapper->CompareIndexEntry( rTxt1, rTxtReading1, rLocale1,
|
|
rTxt2, rTxtReading2, rLocale2 );
|
|
}
|
|
|
|
String SwTOXInternational::GetIndexKey( const String& rTxt, const String& rTxtReading,
|
|
const lang::Locale& rLocale ) const
|
|
{
|
|
return pIndexWrapper->GetIndexKey( rTxt, rTxtReading, rLocale );
|
|
}
|
|
|
|
String SwTOXInternational::GetFollowingText( BOOL bMorePages ) const
|
|
{
|
|
return pIndexWrapper->GetFollowingText( bMorePages );
|
|
}
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: SortierElement fuer Verzeichniseintraege
|
|
--------------------------------------------------------------------*/
|
|
|
|
|
|
SwTOXSortTabBase::SwTOXSortTabBase( TOXSortType nTyp, const SwCntntNode* pNd,
|
|
const SwTxtTOXMark* pMark,
|
|
const SwTOXInternational* pInter,
|
|
const lang::Locale* pLocale )
|
|
: pTOXNd( 0 ), pTxtMark( pMark ), pTOXIntl( pInter ),
|
|
nPos( 0 ), nCntPos( 0 ), nType( static_cast<USHORT>(nTyp) ), bValidTxt( FALSE )
|
|
{
|
|
if ( pLocale )
|
|
aLocale = *pLocale;
|
|
|
|
if( pNd )
|
|
{
|
|
xub_StrLen n = 0;
|
|
if( pTxtMark )
|
|
n = *pTxtMark->GetStart();
|
|
SwTOXSource aTmp( pNd, n,
|
|
pTxtMark ? pTxtMark->GetTOXMark().IsMainEntry() : FALSE );
|
|
aTOXSources.Insert( aTmp, aTOXSources.Count() );
|
|
|
|
nPos = pNd->GetIndex();
|
|
|
|
switch( nTyp )
|
|
{
|
|
case TOX_SORT_CONTENT:
|
|
case TOX_SORT_PARA:
|
|
case TOX_SORT_TABLE:
|
|
// falls sie in Sonderbereichen stehen, sollte man die
|
|
// Position im Body besorgen
|
|
if( nPos < pNd->GetNodes().GetEndOfExtras().GetIndex() )
|
|
{
|
|
// dann die "Anker" (Body) Position holen.
|
|
Point aPt;
|
|
const SwCntntFrm* pFrm = pNd->GetFrm( &aPt, 0, FALSE );
|
|
if( pFrm )
|
|
{
|
|
SwPosition aPos( *pNd );
|
|
const SwDoc& rDoc = *pNd->GetDoc();
|
|
#ifndef PRODUCT
|
|
ASSERT( GetBodyTxtNode( rDoc, aPos, *pFrm ),
|
|
"wo steht der Absatz" );
|
|
#else
|
|
GetBodyTxtNode( rDoc, aPos, *pFrm );
|
|
#endif
|
|
nPos = aPos.nNode.GetIndex();
|
|
nCntPos = aPos.nContent.GetIndex();
|
|
}
|
|
}
|
|
else
|
|
nCntPos = n;
|
|
break;
|
|
default: break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
String SwTOXSortTabBase::GetURL() const
|
|
{
|
|
return aEmptyStr;
|
|
}
|
|
|
|
void SwTOXSortTabBase::FillText( SwTxtNode& rNd, const SwIndex& rInsPos,
|
|
USHORT ) const
|
|
{
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
rNd.InsertText( sMyTxt, rInsPos );
|
|
}
|
|
|
|
BOOL SwTOXSortTabBase::operator==( const SwTOXSortTabBase& rCmp )
|
|
{
|
|
BOOL bRet = nPos == rCmp.nPos && nCntPos == rCmp.nCntPos &&
|
|
(!aTOXSources[0].pNd || !rCmp.aTOXSources[0].pNd ||
|
|
aTOXSources[0].pNd == rCmp.aTOXSources[0].pNd );
|
|
|
|
if( TOX_SORT_CONTENT == nType )
|
|
{
|
|
bRet = bRet && pTxtMark && rCmp.pTxtMark &&
|
|
*pTxtMark->GetStart() == *rCmp.pTxtMark->GetStart();
|
|
|
|
if( bRet )
|
|
{
|
|
// beide Pointer vorhanden -> vergleiche Text
|
|
// beide Pointer nicht vorhanden -> vergleiche AlternativText
|
|
const xub_StrLen *pEnd = pTxtMark->GetEnd(),
|
|
*pEndCmp = rCmp.pTxtMark->GetEnd();
|
|
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmp.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
bRet = ( ( pEnd && pEndCmp ) || ( !pEnd && !pEndCmp ) ) &&
|
|
pTOXIntl->IsEqual( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmp.GetLocale() );
|
|
}
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
BOOL SwTOXSortTabBase::operator<( const SwTOXSortTabBase& rCmp )
|
|
{
|
|
if( nPos < rCmp.nPos )
|
|
return TRUE;
|
|
|
|
if( nPos == rCmp.nPos )
|
|
{
|
|
if( nCntPos < rCmp.nCntPos )
|
|
return TRUE;
|
|
|
|
if( nCntPos == rCmp.nCntPos )
|
|
{
|
|
const SwNode* pFirst = aTOXSources[0].pNd;
|
|
const SwNode* pNext = rCmp.aTOXSources[0].pNd;
|
|
|
|
if( pFirst && pFirst == pNext )
|
|
{
|
|
if( TOX_SORT_CONTENT == nType && pTxtMark && rCmp.pTxtMark )
|
|
{
|
|
if( *pTxtMark->GetStart() < *rCmp.pTxtMark->GetStart() )
|
|
return TRUE;
|
|
|
|
if( *pTxtMark->GetStart() == *rCmp.pTxtMark->GetStart() )
|
|
{
|
|
const xub_StrLen *pEnd = pTxtMark->GetEnd(),
|
|
*pEndCmp = rCmp.pTxtMark->GetEnd();
|
|
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmp.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
// beide Pointer vorhanden -> vergleiche Text
|
|
// beide Pointer nicht vorhanden -> vergleiche AlternativText
|
|
if( ( pEnd && pEndCmp ) || ( !pEnd && !pEndCmp ) )
|
|
pTOXIntl->IsEqual( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmp.GetLocale() );
|
|
|
|
if( pEnd && !pEndCmp )
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
else if( pFirst && pFirst->IsTxtNode() &&
|
|
pNext && pNext->IsTxtNode() )
|
|
return ::IsFrameBehind( *(SwTxtNode*)pNext, nCntPos,
|
|
*(SwTxtNode*)pFirst, nCntPos );
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: sortierter Stichworteintrag
|
|
--------------------------------------------------------------------*/
|
|
|
|
|
|
SwTOXIndex::SwTOXIndex( const SwTxtNode& rNd,
|
|
const SwTxtTOXMark* pMark, USHORT nOptions,
|
|
BYTE nKyLevel,
|
|
const SwTOXInternational& rIntl,
|
|
const lang::Locale& rLocale )
|
|
: SwTOXSortTabBase( TOX_SORT_INDEX, &rNd, pMark, &rIntl, &rLocale ),
|
|
nKeyLevel(nKyLevel)
|
|
{
|
|
nPos = rNd.GetIndex();
|
|
nOpt = nOptions;
|
|
}
|
|
|
|
//
|
|
// Stichworte vergleichen. Bezieht sich nur auf den Text
|
|
//
|
|
|
|
|
|
BOOL SwTOXIndex::operator==( const SwTOXSortTabBase& rCmpBase )
|
|
{
|
|
SwTOXIndex& rCmp = (SwTOXIndex&)rCmpBase;
|
|
|
|
// In Abhaengigkeit von den Optionen Grosskleinschreibung beachten
|
|
if(GetLevel() != rCmp.GetLevel() || nKeyLevel != rCmp.nKeyLevel)
|
|
return FALSE;
|
|
|
|
ASSERT(pTxtMark, "pTxtMark == 0, Kein Stichwort");
|
|
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmp.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
BOOL bRet = pTOXIntl->IsEqual( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmp.GetLocale() );
|
|
|
|
// Wenn nicht zusammengefasst wird muss die Pos aus gewertet werden
|
|
if(bRet && !(GetOptions() & nsSwTOIOptions::TOI_SAME_ENTRY))
|
|
bRet = nPos == rCmp.nPos;
|
|
|
|
return bRet;
|
|
}
|
|
|
|
//
|
|
// kleiner haengt nur vom Text ab
|
|
|
|
|
|
//
|
|
|
|
BOOL SwTOXIndex::operator<( const SwTOXSortTabBase& rCmpBase )
|
|
{
|
|
SwTOXIndex& rCmp = (SwTOXIndex&)rCmpBase;
|
|
|
|
ASSERT(pTxtMark, "pTxtMark == 0, Kein Stichwort");
|
|
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmp.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
BOOL bRet = GetLevel() == rCmp.GetLevel() &&
|
|
pTOXIntl->IsLess( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmp.GetLocale() );
|
|
|
|
// Wenn nicht zusammengefasst wird muss die Pos aus gewertet werden
|
|
if( !bRet && !(GetOptions() & nsSwTOIOptions::TOI_SAME_ENTRY) )
|
|
{
|
|
bRet = pTOXIntl->IsEqual( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmp.GetLocale() ) &&
|
|
nPos < rCmp.nPos;
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
//
|
|
// Das Stichwort selbst
|
|
|
|
|
|
//
|
|
|
|
void SwTOXIndex::_GetText( String& rTxt, String& rTxtReading )
|
|
{
|
|
ASSERT(pTxtMark, "pTxtMark == 0, Kein Stichwort");
|
|
const SwTOXMark& rTOXMark = pTxtMark->GetTOXMark();
|
|
switch(nKeyLevel)
|
|
{
|
|
case FORM_PRIMARY_KEY :
|
|
{
|
|
rTxt = rTOXMark.GetPrimaryKey();
|
|
rTxtReading = rTOXMark.GetPrimaryKeyReading();
|
|
}
|
|
break;
|
|
case FORM_SECONDARY_KEY :
|
|
{
|
|
rTxt = rTOXMark.GetSecondaryKey();
|
|
rTxtReading = rTOXMark.GetSecondaryKeyReading();
|
|
}
|
|
break;
|
|
case FORM_ENTRY :
|
|
{
|
|
rTxt = rTOXMark.GetText();
|
|
rTxtReading = rTOXMark.GetTextReading();
|
|
}
|
|
break;
|
|
}
|
|
// if TOI_INITIAL_CAPS is set, first character is to be capitalized
|
|
if( nsSwTOIOptions::TOI_INITIAL_CAPS & nOpt && pTOXIntl )
|
|
{
|
|
String sUpper( pTOXIntl->ToUpper( rTxt, 0 ));
|
|
rTxt.Erase( 0, 1 ).Insert( sUpper, 0 );
|
|
}
|
|
}
|
|
|
|
void SwTOXIndex::FillText( SwTxtNode& rNd, const SwIndex& rInsPos, USHORT ) const
|
|
{
|
|
const xub_StrLen* pEnd = pTxtMark->GetEnd();
|
|
String sTmp;
|
|
String sTmpReading;
|
|
if( pEnd && !pTxtMark->GetTOXMark().IsAlternativeText() &&
|
|
0 == (GetOptions() & nsSwTOIOptions::TOI_KEY_AS_ENTRY))
|
|
{
|
|
sTmp = ((SwTxtNode*)aTOXSources[0].pNd)->GetExpandTxt(
|
|
*pTxtMark->GetStart(),
|
|
*pEnd - *pTxtMark->GetStart());
|
|
if(nsSwTOIOptions::TOI_INITIAL_CAPS&nOpt && pTOXIntl)
|
|
{
|
|
String sUpper( pTOXIntl->ToUpper( sTmp, 0 ));
|
|
sTmp.Erase( 0, 1 ).Insert( sUpper, 0 );
|
|
}
|
|
}
|
|
else
|
|
GetTxt( sTmp, sTmpReading );
|
|
|
|
rNd.InsertText( sTmp, rInsPos );
|
|
}
|
|
|
|
|
|
|
|
USHORT SwTOXIndex::GetLevel() const
|
|
{
|
|
ASSERT(pTxtMark, "pTxtMark == 0, Kein Stichwort");
|
|
|
|
USHORT nForm = FORM_PRIMARY_KEY;
|
|
|
|
if( 0 == (GetOptions() & nsSwTOIOptions::TOI_KEY_AS_ENTRY)&&
|
|
pTxtMark->GetTOXMark().GetPrimaryKey().Len() )
|
|
{
|
|
nForm = FORM_SECONDARY_KEY;
|
|
if( pTxtMark->GetTOXMark().GetSecondaryKey().Len() )
|
|
nForm = FORM_ENTRY;
|
|
}
|
|
return nForm;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: Schluessel und Trennzeichen
|
|
--------------------------------------------------------------------*/
|
|
|
|
|
|
SwTOXCustom::SwTOXCustom(const String& rStr, const String& rReading,
|
|
USHORT nLevel,
|
|
const SwTOXInternational& rIntl,
|
|
const lang::Locale& rLocale )
|
|
: SwTOXSortTabBase( TOX_SORT_CUSTOM, 0, 0, &rIntl, &rLocale ),
|
|
aKey(rStr), sReading(rReading), nLev(nLevel)
|
|
{
|
|
}
|
|
|
|
|
|
BOOL SwTOXCustom::operator==(const SwTOXSortTabBase& rCmpBase)
|
|
{
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmpBase.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
return GetLevel() == rCmpBase.GetLevel() &&
|
|
pTOXIntl->IsEqual( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmpBase.GetLocale() );
|
|
}
|
|
|
|
|
|
BOOL SwTOXCustom::operator < (const SwTOXSortTabBase& rCmpBase)
|
|
{
|
|
String sMyTxt;
|
|
String sMyTxtReading;
|
|
GetTxt( sMyTxt, sMyTxtReading );
|
|
|
|
String sOtherTxt;
|
|
String sOtherTxtReading;
|
|
rCmpBase.GetTxt( sOtherTxt, sOtherTxtReading );
|
|
|
|
return GetLevel() <= rCmpBase.GetLevel() &&
|
|
pTOXIntl->IsLess( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rCmpBase.GetLocale() );
|
|
}
|
|
|
|
|
|
USHORT SwTOXCustom::GetLevel() const
|
|
{
|
|
return nLev;
|
|
}
|
|
|
|
|
|
void SwTOXCustom::_GetText( String& rTxt, String &rTxtReading )
|
|
{
|
|
rTxt = aKey;
|
|
rTxtReading = sReading;
|
|
/// !!!!!!!!!!!!!!
|
|
}
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: sortierter Inhaltsverz. Eintrag
|
|
--------------------------------------------------------------------*/
|
|
|
|
|
|
SwTOXContent::SwTOXContent( const SwTxtNode& rNd, const SwTxtTOXMark* pMark,
|
|
const SwTOXInternational& rIntl)
|
|
: SwTOXSortTabBase( TOX_SORT_CONTENT, &rNd, pMark, &rIntl )
|
|
{
|
|
}
|
|
|
|
|
|
// Der Text des Inhalts
|
|
//
|
|
|
|
void SwTOXContent::_GetText( String& rTxt, String& rTxtReading )
|
|
{
|
|
const xub_StrLen* pEnd = pTxtMark->GetEnd();
|
|
if( pEnd && !pTxtMark->GetTOXMark().IsAlternativeText() )
|
|
{
|
|
rTxt = ((SwTxtNode*)aTOXSources[0].pNd)->GetExpandTxt(
|
|
*pTxtMark->GetStart(),
|
|
*pEnd - *pTxtMark->GetStart() );
|
|
|
|
rTxtReading = pTxtMark->GetTOXMark().GetTextReading();
|
|
}
|
|
else
|
|
rTxt = pTxtMark->GetTOXMark().GetAlternativeText();
|
|
}
|
|
|
|
void SwTOXContent::FillText( SwTxtNode& rNd, const SwIndex& rInsPos, USHORT ) const
|
|
{
|
|
const xub_StrLen* pEnd = pTxtMark->GetEnd();
|
|
if( pEnd && !pTxtMark->GetTOXMark().IsAlternativeText() )
|
|
((SwTxtNode*)aTOXSources[0].pNd)->GetExpandTxt( rNd, &rInsPos,
|
|
*pTxtMark->GetStart(),
|
|
*pEnd - *pTxtMark->GetStart() );
|
|
else
|
|
{
|
|
String sTmp, sTmpReading;
|
|
GetTxt( sTmp, sTmpReading );
|
|
rNd.InsertText( sTmp, rInsPos );
|
|
}
|
|
}
|
|
|
|
//
|
|
// Die Ebene fuer Anzeige
|
|
//
|
|
|
|
|
|
USHORT SwTOXContent::GetLevel() const
|
|
{
|
|
return pTxtMark->GetTOXMark().GetLevel();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: Verzeichnis aus Absaetzen zusammengesammelt
|
|
--------------------------------------------------------------------*/
|
|
|
|
// bei Sortierung von OLE/Grafiken aufpassen !!!
|
|
// Die Position darf nicht die im Dokument,
|
|
// sondern muss die vom "Henkel" sein !!
|
|
|
|
|
|
SwTOXPara::SwTOXPara( const SwCntntNode& rNd, SwTOXElement eT, USHORT nLevel )
|
|
: SwTOXSortTabBase( TOX_SORT_PARA, &rNd, 0, 0 ),
|
|
eType( eT ),
|
|
m_nLevel(nLevel),
|
|
nStartIndex(0),
|
|
nEndIndex(STRING_LEN)
|
|
{
|
|
}
|
|
|
|
|
|
void SwTOXPara::_GetText( String& rTxt, String& )
|
|
{
|
|
const SwCntntNode* pNd = aTOXSources[0].pNd;
|
|
switch( eType )
|
|
{
|
|
case nsSwTOXElement::TOX_SEQUENCE:
|
|
case nsSwTOXElement::TOX_TEMPLATE:
|
|
case nsSwTOXElement::TOX_OUTLINELEVEL:
|
|
{
|
|
xub_StrLen nStt = nStartIndex;
|
|
/* JP 22.01.98:
|
|
Tabs ueberspringen - macht aber keinen Sinn, solange in der TOX-Form
|
|
nicht die KapitelNummer eingestellt werden kann
|
|
const String& rTmp = ((SwTxtNode*)pNd)->GetTxt();
|
|
while( '\t' == rTmp.GetChar( nStt ) && nStt < rTmp.Len() )
|
|
++nStt;
|
|
*/
|
|
rTxt = ((SwTxtNode*)pNd)->GetExpandTxt(
|
|
nStt,
|
|
STRING_NOTFOUND == nEndIndex ? STRING_LEN : nEndIndex - nStt);
|
|
}
|
|
break;
|
|
|
|
case nsSwTOXElement::TOX_OLE:
|
|
case nsSwTOXElement::TOX_GRAPHIC:
|
|
case nsSwTOXElement::TOX_FRAME:
|
|
{
|
|
// suche das FlyFormat, dort steht der Object/Grafik-Name
|
|
SwFrmFmt* pFly = pNd->GetFlyFmt();
|
|
if( pFly )
|
|
rTxt = pFly->GetName();
|
|
else
|
|
{
|
|
ASSERT( !this, "Grafik/Object ohne Namen" )
|
|
USHORT nId = nsSwTOXElement::TOX_OLE == eType
|
|
? STR_OBJECT_DEFNAME
|
|
: nsSwTOXElement::TOX_GRAPHIC == eType
|
|
? STR_GRAPHIC_DEFNAME
|
|
: STR_FRAME_DEFNAME;
|
|
rTxt = SW_RESSTR( nId );
|
|
}
|
|
}
|
|
break;
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
void SwTOXPara::FillText( SwTxtNode& rNd, const SwIndex& rInsPos, USHORT ) const
|
|
{
|
|
if( nsSwTOXElement::TOX_TEMPLATE == eType || nsSwTOXElement::TOX_SEQUENCE == eType || nsSwTOXElement::TOX_OUTLINELEVEL == eType)
|
|
{
|
|
SwTxtNode* pSrc = (SwTxtNode*)aTOXSources[0].pNd;
|
|
xub_StrLen nStt = nStartIndex;
|
|
/* JP 22.01.98:
|
|
Tabs ueberspringen - macht aber keinen Sinn, solange in der TOX-Form
|
|
nicht die KapitelNummer eingestellt werden kann
|
|
const String& rTxt = pSrc->GetTxt();
|
|
while( '\t' == rTxt.GetChar( nStt ) && nStt < rTxt.Len() )
|
|
++nStt;
|
|
*/
|
|
pSrc->GetExpandTxt( rNd, &rInsPos, nStt,
|
|
nEndIndex == STRING_LEN ? STRING_LEN : nEndIndex - nStt,
|
|
FALSE, FALSE, TRUE );
|
|
}
|
|
else
|
|
{
|
|
String sTmp, sTmpReading;
|
|
GetTxt( sTmp, sTmpReading );
|
|
sTmp.SearchAndReplaceAll('\t', ' ');
|
|
rNd.InsertText( sTmp, rInsPos );
|
|
}
|
|
}
|
|
|
|
|
|
USHORT SwTOXPara::GetLevel() const
|
|
{
|
|
USHORT nRet = m_nLevel;
|
|
const SwCntntNode* pNd = aTOXSources[0].pNd;
|
|
|
|
if( nsSwTOXElement::TOX_OUTLINELEVEL == eType && pNd->GetTxtNode() )
|
|
{
|
|
//USHORT nTmp = ((SwTxtNode*)pNd)->GetTxtColl()->GetOutlineLevel();//#outline level,zhaojianwei
|
|
//if(nTmp < NO_NUMBERING)
|
|
// nRet = nTmp + 1;
|
|
const int nTmp = ((SwTxtNode*)pNd)->GetAttrOutlineLevel();//#outline level,zhaojianwei????
|
|
if(nTmp != 0 )
|
|
nRet = static_cast<USHORT>(nTmp);
|
|
}
|
|
return nRet;
|
|
}
|
|
|
|
|
|
String SwTOXPara::GetURL() const
|
|
{
|
|
String aTxt;
|
|
const SwCntntNode* pNd = aTOXSources[0].pNd;
|
|
switch( eType )
|
|
{
|
|
case nsSwTOXElement::TOX_TEMPLATE:
|
|
case nsSwTOXElement::TOX_OUTLINELEVEL:
|
|
{
|
|
const SwTxtNode * pTxtNd = static_cast<const SwTxtNode *>(pNd);
|
|
|
|
// --> OD 2009-08-05 #i103265#
|
|
// //if( MAXLEVEL >= pTxtNd->GetTxtColl()->GetOutlineLevel()) //#outline level,zhaojianwei
|
|
// if ( pTxtNd->GetAttrOutlineLevel() > 0) //<-end,zhaojianwei
|
|
// {
|
|
// aTxt = '#';
|
|
// const SwNumRule * pRule = pTxtNd->GetNumRule();
|
|
// if( pRule )
|
|
// {
|
|
// // dann noch die rel. Nummer davor setzen
|
|
// const USHORT nCurrLevel = static_cast<USHORT>(pTxtNd->GetActualListLevel());
|
|
// if(nCurrLevel <= MAXLEVEL)
|
|
// {
|
|
// // --> OD 2005-11-02 #i51089 - TUNING#
|
|
// if ( pTxtNd->GetNum() )
|
|
// {
|
|
// SwNumberTree::tNumberVector aNumVector =
|
|
// pTxtNd->GetNumberVector();
|
|
|
|
// for( USHORT n = 0; n <= nCurrLevel; ++n )
|
|
// {
|
|
// int nNum = aNumVector[ n ];
|
|
// nNum -= ( pRule->Get( n ).GetStart() - 1 );
|
|
// ( aTxt += String::CreateFromInt32( nNum )) += '.';
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// ASSERT( false,
|
|
// "<SwTOXPara::GetURL()> - text node with numbering rule, but without number. This is a serious defect -> inform OD" );
|
|
// }
|
|
// }
|
|
// }
|
|
// aTxt += pTxtNd->GetExpandTxt();
|
|
// ( aTxt += cMarkSeperator ).AppendAscii( pMarkToOutline );
|
|
// }
|
|
SwDoc* pDoc = const_cast<SwDoc*>( pTxtNd->GetDoc() );
|
|
::sw::mark::IMark const * const pMark = pDoc->getIDocumentMarkAccess()->getMarkForTxtNode(
|
|
*(pTxtNd),
|
|
IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK);
|
|
aTxt = '#';
|
|
const String aMarkName( pMark->GetName() );
|
|
aTxt += aMarkName;
|
|
// <--
|
|
}
|
|
break;
|
|
|
|
case nsSwTOXElement::TOX_OLE:
|
|
case nsSwTOXElement::TOX_GRAPHIC:
|
|
case nsSwTOXElement::TOX_FRAME:
|
|
{
|
|
// suche das FlyFormat, dort steht der Object/Grafik-Name
|
|
SwFrmFmt* pFly = pNd->GetFlyFmt();
|
|
if( pFly )
|
|
{
|
|
(( aTxt = '#' ) += pFly->GetName() ) += cMarkSeperator;
|
|
const sal_Char* pStr;
|
|
switch( eType )
|
|
{
|
|
case nsSwTOXElement::TOX_OLE: pStr = pMarkToOLE; break;
|
|
case nsSwTOXElement::TOX_GRAPHIC: pStr = pMarkToGraphic; break;
|
|
case nsSwTOXElement::TOX_FRAME: pStr = pMarkToFrame; break;
|
|
default: pStr = 0;
|
|
}
|
|
if( pStr )
|
|
aTxt.AppendAscii( pStr );
|
|
}
|
|
}
|
|
break;
|
|
default: break;
|
|
}
|
|
return aTxt;
|
|
}
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
Beschreibung: Tabelle
|
|
--------------------------------------------------------------------*/
|
|
|
|
|
|
SwTOXTable::SwTOXTable( const SwCntntNode& rNd )
|
|
: SwTOXSortTabBase( TOX_SORT_TABLE, &rNd, 0, 0 ),
|
|
nLevel(FORM_ALPHA_DELIMITTER)
|
|
{
|
|
}
|
|
|
|
|
|
void SwTOXTable::_GetText( String& rTxt, String& )
|
|
{
|
|
const SwNode* pNd = aTOXSources[0].pNd;
|
|
if( pNd && 0 != ( pNd = pNd->FindTableNode() ) )
|
|
{
|
|
rTxt = ((SwTableNode*)pNd)->GetTable().GetFrmFmt()->GetName();
|
|
}
|
|
else
|
|
{
|
|
ASSERT( !this, "Wo ist meine Tabelle geblieben?" )
|
|
rTxt = SW_RESSTR( STR_TABLE_DEFNAME );
|
|
}
|
|
}
|
|
|
|
USHORT SwTOXTable::GetLevel() const
|
|
{
|
|
return nLevel;
|
|
}
|
|
|
|
|
|
String SwTOXTable::GetURL() const
|
|
{
|
|
String aTxt;
|
|
const SwNode* pNd = aTOXSources[0].pNd;
|
|
if( pNd && 0 != ( pNd = pNd->FindTableNode() ) )
|
|
{
|
|
aTxt = ((SwTableNode*)pNd)->GetTable().GetFrmFmt()->GetName();
|
|
if( aTxt.Len() )
|
|
{
|
|
( aTxt.Insert( '#', 0 ) += cMarkSeperator ).
|
|
AppendAscii( pMarkToTable );
|
|
}
|
|
}
|
|
return aTxt;
|
|
}
|
|
/*-- 15.09.99 14:28:08---------------------------------------------------
|
|
|
|
-----------------------------------------------------------------------*/
|
|
|
|
SwTOXAuthority::SwTOXAuthority( const SwCntntNode& rNd,
|
|
SwFmtFld& rField, const SwTOXInternational& rIntl ) :
|
|
SwTOXSortTabBase( TOX_SORT_AUTHORITY, &rNd, 0, &rIntl ),
|
|
m_rField(rField)
|
|
{
|
|
if(rField.GetTxtFld())
|
|
nCntPos = *rField.GetTxtFld()->GetStart();
|
|
}
|
|
|
|
USHORT SwTOXAuthority::GetLevel() const
|
|
{
|
|
String sText(((SwAuthorityField*)m_rField.GetFld())->
|
|
GetFieldText(AUTH_FIELD_AUTHORITY_TYPE));
|
|
//#i18655# the level '0' is the heading level therefor the values are incremented here
|
|
USHORT nRet = 1;
|
|
if( pTOXIntl->IsNumeric( sText ) )
|
|
{
|
|
nRet = (USHORT)sText.ToInt32();
|
|
nRet++;
|
|
}
|
|
//illegal values are also set to 'ARTICLE' as non-numeric values are
|
|
if(nRet > AUTH_TYPE_END)
|
|
nRet = 1;
|
|
return nRet;
|
|
}
|
|
/*-- 15.09.99 14:28:08---------------------------------------------------
|
|
|
|
-----------------------------------------------------------------------*/
|
|
void SwTOXAuthority::_GetText( String& rTxt, String& )
|
|
{
|
|
//
|
|
rTxt = m_rField.GetFld()->Expand();
|
|
}
|
|
|
|
/* -----------------21.09.99 12:50-------------------
|
|
|
|
--------------------------------------------------*/
|
|
void SwTOXAuthority::FillText( SwTxtNode& rNd,
|
|
const SwIndex& rInsPos, USHORT nAuthField ) const
|
|
{
|
|
SwAuthorityField* pField = (SwAuthorityField*)m_rField.GetFld();
|
|
String sText;
|
|
if(AUTH_FIELD_IDENTIFIER == nAuthField)
|
|
{
|
|
sText = pField->Expand();
|
|
const SwAuthorityFieldType* pType = (const SwAuthorityFieldType*)pField->GetTyp();
|
|
sal_Unicode cChar = pType->GetPrefix();
|
|
if(cChar && cChar != ' ')
|
|
sText.Erase(0, 1);
|
|
cChar = pType->GetSuffix();
|
|
if(cChar && cChar != ' ')
|
|
sText.Erase(sText.Len() - 1, 1);
|
|
}
|
|
else if(AUTH_FIELD_AUTHORITY_TYPE == nAuthField)
|
|
{
|
|
USHORT nLevel = GetLevel();
|
|
if(nLevel)
|
|
sText = SwAuthorityFieldType::GetAuthTypeName((ToxAuthorityType) --nLevel);
|
|
}
|
|
else
|
|
sText = (pField->GetFieldText((ToxAuthorityField) nAuthField));
|
|
rNd.InsertText( sText, rInsPos );
|
|
}
|
|
/* -----------------14.10.99 09:35-------------------
|
|
|
|
--------------------------------------------------*/
|
|
BOOL SwTOXAuthority::operator==( const SwTOXSortTabBase& rCmp)
|
|
{
|
|
return nType == rCmp.nType &&
|
|
((SwAuthorityField*)m_rField.GetFld())->GetHandle() ==
|
|
((SwAuthorityField*)((SwTOXAuthority&)rCmp).m_rField.GetFld())->GetHandle();
|
|
}
|
|
/* -----------------21.10.99 09:52-------------------
|
|
|
|
--------------------------------------------------*/
|
|
BOOL SwTOXAuthority::operator<( const SwTOXSortTabBase& rBase)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
SwAuthorityField* pField = (SwAuthorityField*)m_rField.GetFld();
|
|
SwAuthorityFieldType* pType = (SwAuthorityFieldType*)
|
|
pField->GetTyp();
|
|
if(pType->IsSortByDocument())
|
|
bRet = SwTOXSortTabBase::operator<(rBase);
|
|
else
|
|
{
|
|
SwAuthorityField* pCmpField = (SwAuthorityField*)
|
|
((SwTOXAuthority&)rBase).m_rField.GetFld();
|
|
|
|
|
|
for(USHORT i = 0; i < pType->GetSortKeyCount(); i++)
|
|
{
|
|
const SwTOXSortKey* pKey = pType->GetSortKey(i);
|
|
String sMyTxt = pField->GetFieldText(pKey->eField);
|
|
String sMyTxtReading;
|
|
String sOtherTxt = pCmpField->GetFieldText(pKey->eField);
|
|
String sOtherTxtReading;
|
|
|
|
sal_Int32 nComp = pTOXIntl->Compare( sMyTxt, sMyTxtReading, GetLocale(),
|
|
sOtherTxt, sOtherTxtReading, rBase.GetLocale() );
|
|
|
|
if( nComp )
|
|
{
|
|
bRet = (-1 == nComp) == pKey->bSortAscending;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return bRet;
|
|
}
|