| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _TEXTDOC_HXX |
| #define _TEXTDOC_HXX |
| |
| #include <svl/svarray.hxx> |
| #include <svtools/textdata.hxx> |
| #include <svtools/txtattr.hxx> |
| |
| #include <tools/debug.hxx> |
| #include <tools/string.hxx> |
| #include <tools/list.hxx> |
| |
| typedef TextCharAttrib* TextCharAttribPtr; |
| SV_DECL_PTRARR_DEL( TextCharAttribs, TextCharAttribPtr, 0, 4 ) |
| |
| class TextCharAttribList : private TextCharAttribs |
| { |
| private: |
| sal_Bool mbHasEmptyAttribs; |
| |
| TextCharAttribList( const TextCharAttribList& ) : TextCharAttribs() {} |
| |
| public: |
| TextCharAttribList(); |
| ~TextCharAttribList(); |
| |
| void Clear( sal_Bool bDestroyAttribs ); |
| sal_uInt16 Count() const { return TextCharAttribs::Count(); } |
| |
| TextCharAttrib* GetAttrib( sal_uInt16 n ) const { return TextCharAttribs::GetObject( n ); } |
| void RemoveAttrib( sal_uInt16 n ) { TextCharAttribs::Remove( n, 1 ); } |
| |
| void InsertAttrib( TextCharAttrib* pAttrib ); |
| |
| void DeleteEmptyAttribs(); |
| void ResortAttribs(); |
| |
| sal_Bool HasEmptyAttribs() const { return mbHasEmptyAttribs; } |
| sal_Bool& HasEmptyAttribs() { return mbHasEmptyAttribs; } |
| |
| TextCharAttrib* FindAttrib( sal_uInt16 nWhich, sal_uInt16 nPos ); |
| TextCharAttrib* FindNextAttrib( sal_uInt16 nWhich, sal_uInt16 nFromPos, sal_uInt16 nMaxPos = 0xFFFF ) const; |
| TextCharAttrib* FindEmptyAttrib( sal_uInt16 nWhich, sal_uInt16 nPos ); |
| sal_Bool HasAttrib( sal_uInt16 nWhich ) const; |
| sal_Bool HasBoundingAttrib( sal_uInt16 nBound ); |
| |
| #ifdef DBG_UTIL |
| sal_Bool DbgCheckAttribs(); |
| #endif |
| }; |
| |
| |
| class TextNode |
| { |
| private: |
| String maText; |
| TextCharAttribList maCharAttribs; |
| |
| TextNode( const TextNode& ) {;} |
| protected: |
| void ExpandAttribs( sal_uInt16 nIndex, sal_uInt16 nNewChars ); |
| void CollapsAttribs( sal_uInt16 nIndex, sal_uInt16 nDelChars ); |
| |
| public: |
| TextNode( const String& rText ); |
| |
| |
| const String& GetText() const { return maText; } |
| |
| const TextCharAttribList& GetCharAttribs() const { return maCharAttribs; } |
| TextCharAttribList& GetCharAttribs() { return maCharAttribs; } |
| |
| void InsertText( sal_uInt16 nPos, const String& rText ); |
| void InsertText( sal_uInt16 nPos, sal_Unicode c ); |
| void RemoveText( sal_uInt16 nPos, sal_uInt16 nChars ); |
| |
| TextNode* Split( sal_uInt16 nPos, sal_Bool bKeepEndigAttribs ); |
| void Append( const TextNode& rNode ); |
| }; |
| |
| class TextDoc |
| { |
| private: |
| ToolsList<TextNode*> maTextNodes; |
| sal_uInt16 mnLeftMargin; |
| |
| protected: |
| void DestroyTextNodes(); |
| |
| public: |
| TextDoc(); |
| ~TextDoc(); |
| |
| void Clear(); |
| |
| ToolsList<TextNode*>& GetNodes() { return maTextNodes; } |
| const ToolsList<TextNode*>& GetNodes() const { return maTextNodes; } |
| |
| TextPaM RemoveChars( const TextPaM& rPaM, sal_uInt16 nChars ); |
| TextPaM InsertText( const TextPaM& rPaM, sal_Unicode c ); |
| TextPaM InsertText( const TextPaM& rPaM, const String& rStr ); |
| |
| TextPaM InsertParaBreak( const TextPaM& rPaM, sal_Bool bKeepEndingAttribs ); |
| TextPaM ConnectParagraphs( TextNode* pLeft, TextNode* pRight ); |
| |
| sal_uLong GetTextLen( const sal_Unicode* pSep, const TextSelection* pSel = NULL ) const; |
| String GetText( const sal_Unicode* pSep ) const; |
| String GetText( sal_uLong nPara ) const; |
| |
| void SetLeftMargin( sal_uInt16 n ) { mnLeftMargin = n; } |
| sal_uInt16 GetLeftMargin() const { return mnLeftMargin; } |
| |
| // sal_Bool RemoveAttribs( TextNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd ), sal_uInt16 nWhich = 0 ); |
| // sal_Bool RemoveAttribs( TextNode* pNode, sal_uInt16 nStart, sal_uInt16 nEnd, TextCharAttrib*& rpStarting, TextCharAttrib*& rpEnding, sal_uInt16 nWhich = 0 ); |
| // void InsertAttrib( const EditCharAttrib* pAttr ); |
| // void InsertAttribInSelection( const EditCharAttrib* pAttr ); |
| // void FindAttribs( TextNode* pNode, sal_uInt16 nStartPos, sal_uInt16 nEndPos, SfxItemSet& rCurSet ); |
| |
| sal_Bool IsValidPaM( const TextPaM& rPaM ); |
| }; |
| |
| #endif // _TEXTDOC_HXX |