1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
22 #include <rtl/ustring.hxx>
23 #include <vcl/textdata.hxx>
24 #include <vcl/txtattr.hxx>
28 class TextCharAttribList
31 TextCharAttribList(const TextCharAttribList
&) = delete;
32 TextCharAttribList
& operator=(const TextCharAttribList
&) = delete;
34 std::vector
<std::unique_ptr
<TextCharAttrib
> > maAttribs
;
35 bool mbHasEmptyAttribs
;
39 ~TextCharAttribList();
42 sal_uInt16
Count() const { return maAttribs
.size(); }
44 const TextCharAttrib
& GetAttrib( sal_uInt16 n
) const { return *maAttribs
[n
]; }
45 TextCharAttrib
& GetAttrib( sal_uInt16 n
) { return *maAttribs
[n
]; }
46 std::unique_ptr
<TextCharAttrib
> RemoveAttrib( sal_uInt16 n
)
48 std::unique_ptr
<TextCharAttrib
> pReleased
= std::move(maAttribs
[n
]);
49 maAttribs
.erase( maAttribs
.begin() + n
);
53 void InsertAttrib( std::unique_ptr
<TextCharAttrib
> pAttrib
);
55 void DeleteEmptyAttribs();
58 bool& HasEmptyAttribs() { return mbHasEmptyAttribs
; }
60 TextCharAttrib
* FindAttrib( sal_uInt16 nWhich
, sal_Int32 nPos
);
61 TextCharAttrib
* FindEmptyAttrib( sal_uInt16 nWhich
, sal_Int32 nPos
);
62 bool HasBoundingAttrib( sal_Int32 nBound
);
68 TextCharAttribList maCharAttribs
;
70 void ExpandAttribs( sal_Int32 nIndex
, sal_Int32 nNewChars
);
71 void CollapseAttribs( sal_Int32 nIndex
, sal_Int32 nDelChars
);
74 TextNode( OUString aText
);
76 TextNode( const TextNode
& ) = delete;
77 void operator=( const TextNode
& ) = delete;
79 const OUString
& GetText() const { return maText
; }
81 const TextCharAttrib
& GetCharAttrib(sal_uInt16 nPos
) const { return maCharAttribs
.GetAttrib(nPos
); }
82 const TextCharAttribList
& GetCharAttribs() const { return maCharAttribs
; }
83 TextCharAttribList
& GetCharAttribs() { return maCharAttribs
; }
85 void InsertText( sal_Int32 nPos
, std::u16string_view rText
);
86 void InsertText( sal_Int32 nPos
, sal_Unicode c
);
87 void RemoveText( sal_Int32 nPos
, sal_Int32 nChars
);
89 std::unique_ptr
<TextNode
> Split( sal_Int32 nPos
);
90 void Append( const TextNode
& rNode
);
95 std::vector
<std::unique_ptr
<TextNode
>> maTextNodes
;
96 sal_uInt16 mnLeftMargin
;
98 void DestroyTextNodes();
106 std::vector
<std::unique_ptr
<TextNode
>>& GetNodes() { return maTextNodes
; }
107 const std::vector
<std::unique_ptr
<TextNode
>>& GetNodes() const { return maTextNodes
; }
109 void RemoveChars( const TextPaM
& rPaM
, sal_Int32 nChars
);
110 TextPaM
InsertText( const TextPaM
& rPaM
, sal_Unicode c
);
111 TextPaM
InsertText( const TextPaM
& rPaM
, std::u16string_view rStr
);
113 TextPaM
InsertParaBreak( const TextPaM
& rPaM
);
114 TextPaM
ConnectParagraphs( TextNode
* pLeft
, const TextNode
* pRight
);
116 sal_Int32
GetTextLen( const sal_Unicode
* pSep
, const TextSelection
* pSel
= nullptr ) const;
117 OUString
GetText( const sal_Unicode
* pSep
) const;
118 OUString
GetText( sal_uInt32 nPara
) const;
120 void SetLeftMargin( sal_uInt16 n
) { mnLeftMargin
= n
; }
121 sal_uInt16
GetLeftMargin() const { return mnLeftMargin
; }
123 bool IsValidPaM( const TextPaM
& rPaM
);
126 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */