Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <doc.hxx>
30 : : #include <pamtyp.hxx>
31 : :
32 : :
33 : 0 : sal_Bool SwPaM::Find( const SwFmt& rFmt, SwMoveFn fnMove,
34 : : const SwPaM *pRegion, sal_Bool bInReadOnly )
35 : : {
36 : 0 : sal_Bool bFound = sal_False;
37 : 0 : const bool bSrchForward = (fnMove == fnMoveForward);
38 [ # # ]: 0 : SwPaM* pPam = MakeRegion( fnMove, pRegion );
39 : :
40 : : // if at beginning/end then move it out of the node
41 [ # # ][ # # ]: 0 : if( bSrchForward
42 [ # # ]: 0 : ? pPam->GetPoint()->nContent.GetIndex() == pPam->GetCntntNode()->Len()
43 : 0 : : !pPam->GetPoint()->nContent.GetIndex() )
44 : : {
45 [ # # ][ # # ]: 0 : if( !(*fnMove->fnNds)( &pPam->GetPoint()->nNode, sal_False ))
46 : : {
47 [ # # ][ # # ]: 0 : delete pPam;
48 : 0 : return sal_False;
49 : : }
50 : 0 : SwCntntNode *pNd = pPam->GetPoint()->nNode.GetNode().GetCntntNode();
51 [ # # ][ # # ]: 0 : xub_StrLen nTmpPos = bSrchForward ? 0 : pNd->Len();
52 [ # # ][ # # ]: 0 : pPam->GetPoint()->nContent.Assign( pNd, nTmpPos );
53 : : }
54 : :
55 : 0 : sal_Bool bFirst = sal_True;
56 : : SwCntntNode* pNode;
57 [ # # ][ # # ]: 0 : while( !bFound &&
[ # # ][ # # ]
58 : 0 : 0 != ( pNode = ::GetNode( *pPam, bFirst, fnMove, bInReadOnly )))
59 : : {
60 [ # # ]: 0 : if( 0 != ( bFound = (pNode->GetFmtColl() == &rFmt) ))
61 : : {
62 : : // if a FormatCollection is found then it is definitely a SwCntntNode
63 : :
64 : : // FORWARD: SPoint at the end, GetMark at the beginning of the node
65 : : // BACKWARD: SPoint at the beginning, GetMark at the end of the node
66 : : // always: incl. start and incl. end
67 [ # # ]: 0 : *GetPoint() = *pPam->GetPoint();
68 [ # # ]: 0 : SetMark();
69 [ # # ]: 0 : pNode->MakeEndIndex( &GetPoint()->nContent );
70 [ # # ]: 0 : GetMark()->nContent = 0;
71 : :
72 : : // if backward search, switch point and mark
73 [ # # ]: 0 : if( !bSrchForward )
74 : 0 : Exchange();
75 : 0 : break;
76 : : }
77 : : }
78 [ # # ][ # # ]: 0 : delete pPam;
79 : 0 : return bFound;
80 : : }
81 : :
82 : :
83 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|