summaryrefslogtreecommitdiff
path: root/sw/source/core/text/itratr.hxx
blob: 7fb9ada2e7ad6ad49a4a183cd9f6e955cdc9507a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * 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 .
 */
#ifndef INCLUDED_SW_SOURCE_CORE_TEXT_ITRATR_HXX
#define INCLUDED_SW_SOURCE_CORE_TEXT_ITRATR_HXX
#include <atrhndl.hxx>

#include "swtypes.hxx"
#include "swfont.hxx"
#include "porlay.hxx"

class OutputDevice;
class SwFont;
class SwpHints;
class SwTxtAttr;
class SwAttrSet;
class SwTxtNode;
class SwRedlineItr;
class SwViewShell;
class SwTxtFrm;

class SwAttrIter
{
    friend class SwFontSave;
protected:

    SwAttrHandler aAttrHandler;
    SwViewShell *pShell;
    SwFont *pFnt;
    SwpHints  *pHints;
    const SwAttrSet* pAttrSet;       // The char attribute set
    SwScriptInfo* pScriptInfo;

private:
    VclPtr<OutputDevice> pLastOut;
    short nChgCnt;
    SwRedlineItr *pRedln;
    size_t nStartIndex;
    size_t nEndIndex;
    sal_Int32 nPos;
    sal_uInt8 nPropFont;
    const void* aMagicNo[ SW_SCRIPTS ];
    sal_uInt16 aFntIdx[ SW_SCRIPTS ];
    const SwTxtNode* m_pTxtNode;

    void SeekFwd( const sal_Int32 nPos );
    void SetFnt( SwFont* pNew ) { pFnt = pNew; }

protected:
    void Chg( SwTxtAttr *pHt );
    void Rst( SwTxtAttr *pHt );
    void CtorInitAttrIter( SwTxtNode& rTxtNode, SwScriptInfo& rScrInf, SwTxtFrm* pFrm = 0 );
    SwAttrIter(SwTxtNode* pTxtNode)
        : pShell(0)
        , pFnt(0)
        , pHints(0)
        , pAttrSet(0)
        , pScriptInfo(0)
        , pLastOut(0)
        , nChgCnt(0)
        , pRedln(0)
        , nStartIndex(0)
        , nEndIndex(0)
        , nPos(0)
        , nPropFont(0)
        , m_pTxtNode(pTxtNode)
        {
            aMagicNo[SW_LATIN] = aMagicNo[SW_CJK] = aMagicNo[SW_CTL] = NULL;
        }

public:
    // Constructor, destructor
    SwAttrIter( SwTxtNode& rTxtNode, SwScriptInfo& rScrInf )
        : pShell(0), pFnt(0), pHints(0), pScriptInfo(0), pLastOut(0), nChgCnt(0), pRedln(0),nPropFont(0), m_pTxtNode(&rTxtNode)
        { CtorInitAttrIter( rTxtNode, rScrInf ); }

    virtual ~SwAttrIter();

    SwRedlineItr *GetRedln() { return pRedln; }
    // The parameter returns the position of the next change before or at the
    // char position.
    sal_Int32 GetNextAttr( ) const;
    /// Enables the attributes used at char pos nPos in the logical font
    bool Seek( const sal_Int32 nPos );
    // Creates the font at the specified position via Seek() and checks
    // if it's a symbol font.
    bool IsSymbol( const sal_Int32 nPos );

    /** Executes ChgPhysFnt if Seek() returns true
     *  and change font to merge character border with neighbours.
    **/
    bool SeekAndChgAttrIter( const sal_Int32 nPos, OutputDevice* pOut );
    bool SeekStartAndChgAttrIter( OutputDevice* pOut, const bool bParaFont = false );

    // Do we have an attribute change at all?
    bool HasHints() const { return 0 != pHints; }

    // Returns the attribute for a position
    SwTxtAttr *GetAttr( const sal_Int32 nPos ) const;

    const SwAttrSet* GetAttrSet() const { return pAttrSet; }

    const SwpHints *GetHints() const { return pHints; }

    SwFont *GetFnt() { return pFnt; }
    const SwFont *GetFnt() const { return pFnt; }

    sal_uInt8 GetPropFont() const { return nPropFont; }
    void SetPropFont( const sal_uInt8 nNew ) { nPropFont = nNew; }

    SwAttrHandler& GetAttrHandler() { return aAttrHandler; }
};

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */