editeng/Library_editeng.mk                 |    1 
 editeng/inc/ParagraphPortion.hxx           |  133 +++++++++++++++++++++++++++++
 editeng/inc/TextPortionList.hxx            |   32 +++++-
 editeng/inc/editdoc.hxx                    |  104 ----------------------
 editeng/source/editeng/TextPortionList.cxx |   95 ++++++++++++++++++++
 editeng/source/editeng/editdoc.cxx         |  113 ------------------------
 solenv/clang-format/excludelist            |    1 
 7 files changed, 254 insertions(+), 225 deletions(-)

New commits:
commit 916268c70a5673680c86eaac11c543fd45b90eb3
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Dec 29 20:54:43 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Jan 1 04:34:20 2024 +0100

    editeng: move ParaPortion into its own header file
    
    Change-Id: I3fefe4a9fc5d391b1c3af335893a084eaeddba4d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161475
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/editeng/inc/ParagraphPortion.hxx b/editeng/inc/ParagraphPortion.hxx
new file mode 100644
index 000000000000..93eb8356f611
--- /dev/null
+++ b/editeng/inc/ParagraphPortion.hxx
@@ -0,0 +1,133 @@
+/* -*- 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 .
+ */
+
+#pragma once
+
+#include "EditLineList.hxx"
+#include "TextPortionList.hxx"
+
+struct ScriptTypePosInfo
+{
+    short nScriptType;
+    sal_Int32 nStartPos;
+    sal_Int32 nEndPos;
+
+    ScriptTypePosInfo(short Type, sal_Int32 Start, sal_Int32 End)
+        : nScriptType(Type)
+        , nStartPos(Start)
+        , nEndPos(End)
+    {
+    }
+};
+
+typedef std::vector<ScriptTypePosInfo> ScriptTypePosInfos;
+
+struct WritingDirectionInfo
+{
+    sal_uInt8 nType;
+    sal_Int32 nStartPos;
+    sal_Int32 nEndPos;
+
+    WritingDirectionInfo(sal_uInt8 Type, sal_Int32 Start, sal_Int32 End)
+        : nType(Type)
+        , nStartPos(Start)
+        , nEndPos(End)
+    {
+    }
+};
+
+typedef std::vector<WritingDirectionInfo> WritingDirectionInfos;
+
+class ParaPortion
+{
+    friend class ImpEditEngine; // to adjust the height
+private:
+    EditLineList aLineList;
+    TextPortionList aTextPortionList;
+    ContentNode* pNode;
+    tools::Long nHeight;
+
+    ScriptTypePosInfos aScriptInfos;
+    WritingDirectionInfos aWritingDirectionInfos;
+
+    sal_Int32 nInvalidPosStart;
+    sal_Int32 nFirstLineOffset; // For Writer-LineSpacing-Interpretation
+    sal_Int32 nBulletX;
+    sal_Int32 nInvalidDiff;
+
+    bool bInvalid : 1;
+    bool bSimple : 1; // only linear Tap
+    bool bVisible : 1; // Belongs to the node!
+    bool bForceRepaint : 1;
+
+    ParaPortion(const ParaPortion&) = delete;
+
+public:
+    ParaPortion(ContentNode* pNode);
+    ~ParaPortion();
+
+    sal_Int32 GetLineNumber(sal_Int32 nIndex) const;
+
+    EditLineList& GetLines() { return aLineList; }
+    const EditLineList& GetLines() const { return aLineList; }
+
+    bool IsInvalid() const { return bInvalid; }
+    bool IsSimpleInvalid() const { return bSimple; }
+    void SetValid()
+    {
+        bInvalid = false;
+        bSimple = true;
+    }
+
+    bool MustRepaint() const { return bForceRepaint; }
+    void SetMustRepaint(bool bRP) { bForceRepaint = bRP; }
+
+    sal_Int32 GetBulletX() const { return nBulletX; }
+    void SetBulletX(sal_Int32 n) { nBulletX = n; }
+
+    void MarkInvalid(sal_Int32 nStart, sal_Int32 nDiff);
+    void MarkSelectionInvalid(sal_Int32 nStart);
+
+    void SetVisible(bool bVisible);
+    bool IsVisible() const { return bVisible; }
+
+    bool IsEmpty() { return GetTextPortions().Count() == 1 && 
GetTextPortions()[0].GetLen() == 0; }
+
+    tools::Long GetHeight() const { return (bVisible ? nHeight : 0); }
+    sal_Int32 GetFirstLineOffset() const { return (bVisible ? nFirstLineOffset 
: 0); }
+    void ResetHeight()
+    {
+        nHeight = 0;
+        nFirstLineOffset = 0;
+    }
+
+    ContentNode* GetNode() const { return pNode; }
+    TextPortionList& GetTextPortions() { return aTextPortionList; }
+    const TextPortionList& GetTextPortions() const { return aTextPortionList; }
+
+    sal_Int32 GetInvalidPosStart() const { return nInvalidPosStart; }
+    short GetInvalidDiff() const { return nInvalidDiff; }
+
+    void CorrectValuesBehindLastFormattedLine(sal_Int32 nLastFormattedLine);
+#if OSL_DEBUG_LEVEL > 0
+    static bool DbgCheckTextPortions(ParaPortion const&);
+#endif
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/inc/editdoc.hxx b/editeng/inc/editdoc.hxx
index f81eac050b76..1b93d52a6a88 100644
--- a/editeng/inc/editdoc.hxx
+++ b/editeng/inc/editdoc.hxx
@@ -37,6 +37,7 @@
 #include "EditLineList.hxx"
 #include "EditPaM.hxx"
 #include "EditSelection.hxx"
+#include "ParagraphPortion.hxx"
 
 #include <cstddef>
 #include <memory>
@@ -58,39 +59,6 @@ EditCharAttrib* MakeCharAttrib( SfxItemPool& rPool, const 
SfxPoolItem& rAttr, sa
 
 class EditDoc;
 
-struct ScriptTypePosInfo
-{
-    short   nScriptType;
-    sal_Int32  nStartPos;
-    sal_Int32  nEndPos;
-
-    ScriptTypePosInfo( short Type, sal_Int32 Start, sal_Int32 End )
-    : nScriptType(Type)
-    , nStartPos(Start)
-    , nEndPos(End)
-    {
-    }
-};
-
-typedef std::vector<ScriptTypePosInfo> ScriptTypePosInfos;
-
-struct WritingDirectionInfo
-{
-    sal_uInt8   nType;
-    sal_Int32  nStartPos;
-    sal_Int32  nEndPos;
-
-    WritingDirectionInfo( sal_uInt8 Type, sal_Int32 Start, sal_Int32 End )
-    : nType(Type)
-    , nStartPos(Start)
-    , nEndPos(End)
-    {
-    }
-};
-
-
-typedef std::vector<WritingDirectionInfo> WritingDirectionInfos;
-
 class ContentAttribsInfo
 {
 private:
@@ -114,76 +82,6 @@ enum class DeleteMode {
     Simple, RestOfWord, RestOfContent
 };
 
-class ParaPortion
-{
-    friend class ImpEditEngine; // to adjust the height
-private:
-    EditLineList        aLineList;
-    TextPortionList     aTextPortionList;
-    ContentNode*        pNode;
-    tools::Long                nHeight;
-
-    ScriptTypePosInfos      aScriptInfos;
-    WritingDirectionInfos   aWritingDirectionInfos;
-
-    sal_Int32              nInvalidPosStart;
-    sal_Int32              nFirstLineOffset;   // For 
Writer-LineSpacing-Interpretation
-    sal_Int32             nBulletX;
-    sal_Int32              nInvalidDiff;
-
-    bool                bInvalid            : 1;
-    bool                bSimple             : 1;    // only linear Tap
-    bool                bVisible            : 1;    // Belongs to the node!
-    bool                bForceRepaint       : 1;
-
-                        ParaPortion( const ParaPortion& ) = delete;
-
-public:
-                        ParaPortion( ContentNode* pNode );
-                        ~ParaPortion();
-
-    sal_Int32 GetLineNumber( sal_Int32 nIndex ) const;
-
-    EditLineList&       GetLines()                  { return aLineList; }
-    const EditLineList& GetLines() const { return aLineList; }
-
-    bool                IsInvalid() const           { return bInvalid; }
-    bool                IsSimpleInvalid()   const   { return bSimple; }
-    void                SetValid()                  { bInvalid = false; 
bSimple = true;}
-
-    bool                MustRepaint() const         { return bForceRepaint; }
-    void                SetMustRepaint( bool bRP )  { bForceRepaint = bRP; }
-
-    sal_Int32           GetBulletX() const          { return nBulletX; }
-    void                SetBulletX( sal_Int32 n )   { nBulletX = n; }
-
-    void                MarkInvalid( sal_Int32 nStart, sal_Int32 nDiff);
-    void                MarkSelectionInvalid( sal_Int32 nStart );
-
-    void                SetVisible( bool bVisible );
-    bool                IsVisible() const { return bVisible; }
-
-    bool                IsEmpty() { return GetTextPortions().Count() == 1 && 
GetTextPortions()[0].GetLen() == 0; }
-
-    tools::Long                GetHeight() const           { return ( bVisible 
? nHeight : 0 ); }
-    sal_Int32           GetFirstLineOffset() const  { return ( bVisible ? 
nFirstLineOffset : 0 ); }
-    void                ResetHeight()   { nHeight = 0; nFirstLineOffset = 0; }
-
-    ContentNode*        GetNode() const             { return pNode; }
-    TextPortionList&    GetTextPortions()           { return aTextPortionList; 
}
-    const TextPortionList& GetTextPortions() const { return aTextPortionList; }
-
-    sal_Int32           GetInvalidPosStart() const  { return nInvalidPosStart; 
}
-    short               GetInvalidDiff() const      { return nInvalidDiff; }
-
-    void                CorrectValuesBehindLastFormattedLine( sal_Int32 
nLastFormattedLine );
-#if OSL_DEBUG_LEVEL > 0
-    static bool DbgCheckTextPortions(ParaPortion const&);
-#endif
-};
-
-
-
 class ParaPortionList
 {
     mutable sal_Int32 nLastCache;
commit 0020f05df2e7fc739e5e017e035efbe3c9bc8b35
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Dec 29 17:01:03 2023 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Jan 1 04:34:06 2024 +0100

    editeng: move impl. of TextPortionList methods to own cxx file
    
    Also move some simple methods to header file and clean-up the
    constructors and destructors.
    
    Change-Id: I5113d785ecc71d36b4c6a480b15427ca68eb2e0b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161474
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/editeng/Library_editeng.mk b/editeng/Library_editeng.mk
index 49225b910d14..d9d1124bbb79 100644
--- a/editeng/Library_editeng.mk
+++ b/editeng/Library_editeng.mk
@@ -75,6 +75,7 @@ $(eval $(call gb_Library_add_exception_objects,editeng,\
     editeng/source/editeng/misspellrange \
     editeng/source/editeng/section \
     editeng/source/editeng/textconv \
+    editeng/source/editeng/TextPortionList \
     editeng/source/items/borderline \
     editeng/source/items/bulitem \
     editeng/source/items/CustomPropertyField \
diff --git a/editeng/inc/TextPortionList.hxx b/editeng/inc/TextPortionList.hxx
index 3e2272f4de9c..b25f4156155b 100644
--- a/editeng/inc/TextPortionList.hxx
+++ b/editeng/inc/TextPortionList.hxx
@@ -28,21 +28,35 @@ class TextPortionList
     PortionsType maPortions;
 
 public:
-    TextPortionList();
-    ~TextPortionList();
+    TextPortionList() = default;
+
+    void Reset() { maPortions.clear(); }
 
-    void Reset();
     sal_Int32 FindPortion(sal_Int32 nCharPos, sal_Int32& rPortionStart,
                           bool bPreferStartingPortion = false) const;
     sal_Int32 GetStartPos(sal_Int32 nPortion);
     void DeleteFromPortion(sal_Int32 nDelFrom);
-    sal_Int32 Count() const;
-    const TextPortion& operator[](sal_Int32 nPos) const;
-    TextPortion& operator[](sal_Int32 nPos);
 
-    void Append(TextPortion* p);
-    void Insert(sal_Int32 nPos, TextPortion* p);
-    void Remove(sal_Int32 nPos);
+    sal_Int32 Count() const { return sal_Int32(maPortions.size()); }
+
+    const TextPortion& operator[](sal_Int32 nPosition) const { return 
*maPortions[nPosition]; }
+
+    TextPortion& operator[](sal_Int32 nPosition) { return 
*maPortions[nPosition]; }
+
+    void Append(TextPortion* pTextPortion)
+    {
+        maPortions.push_back(std::unique_ptr<TextPortion>(pTextPortion));
+    }
+
+    void Insert(sal_Int32 nPosition, TextPortion* pTextPortion)
+    {
+        maPortions.insert(maPortions.begin() + nPosition,
+                          std::unique_ptr<TextPortion>(pTextPortion));
+    }
+
+    void Remove(sal_Int32 nPosition) { maPortions.erase(maPortions.begin() + 
nPosition); }
+
     sal_Int32 GetPos(const TextPortion* p) const;
 };
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/editeng/TextPortionList.cxx 
b/editeng/source/editeng/TextPortionList.cxx
new file mode 100644
index 000000000000..ca9d68159a5a
--- /dev/null
+++ b/editeng/source/editeng/TextPortionList.cxx
@@ -0,0 +1,95 @@
+/* -*- 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 .
+ */
+
+#include <TextPortionList.hxx>
+
+#include <EditLine.hxx>
+#include <osl/diagnose.h>
+
+
+void TextPortionList::DeleteFromPortion(sal_Int32 nDelFrom)
+{
+    assert((nDelFrom < static_cast<sal_Int32>(maPortions.size())) || 
((nDelFrom == 0) && maPortions.empty()));
+    PortionsType::iterator it = maPortions.begin();
+    std::advance(it, nDelFrom);
+    maPortions.erase(it, maPortions.end());
+}
+
+namespace {
+
+class FindTextPortionByAddress
+{
+    const TextPortion* mp;
+public:
+    explicit FindTextPortionByAddress(const TextPortion* p) : mp(p) {}
+    bool operator() (const std::unique_ptr<TextPortion>& v) const
+    {
+        return v.get() == mp;
+    }
+};
+
+}
+
+sal_Int32 TextPortionList::GetPos(const TextPortion* p) const
+{
+    PortionsType::const_iterator it =
+        std::find_if(maPortions.begin(), maPortions.end(), 
FindTextPortionByAddress(p));
+
+    if (it == maPortions.end())
+        return std::numeric_limits<sal_Int32>::max(); // not found.
+
+    return std::distance(maPortions.begin(), it);
+}
+
+sal_Int32 TextPortionList::FindPortion(
+    sal_Int32 nCharPos, sal_Int32& nPortionStart, bool bPreferStartingPortion) 
const
+{
+    // When nCharPos at portion limit, the left portion is found
+    sal_Int32 nTmpPos = 0;
+    sal_Int32 n = maPortions.size();
+    for (sal_Int32 i = 0; i < n; ++i)
+    {
+        const TextPortion& rPortion = *maPortions[i];
+        nTmpPos = nTmpPos + rPortion.GetLen();
+        if ( nTmpPos >= nCharPos )
+        {
+            // take this one if we don't prefer the starting portion, or if 
it's the last one
+            if ( ( nTmpPos != nCharPos ) || !bPreferStartingPortion || ( i == 
n-1 ) )
+            {
+                nPortionStart = nTmpPos - rPortion.GetLen();
+                return i;
+            }
+        }
+    }
+    OSL_FAIL( "FindPortion: Not found!" );
+    return n - 1;
+}
+
+sal_Int32 TextPortionList::GetStartPos(sal_Int32 nPortion)
+{
+    sal_Int32 nPos = 0;
+    for (sal_Int32 i = 0; i < nPortion; ++i)
+    {
+        const TextPortion& rPortion = *maPortions[i];
+        nPos = nPos + rPortion.GetLen();
+    }
+    return nPos;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/editeng/editdoc.cxx 
b/editeng/source/editeng/editdoc.cxx
index 1b10e1cfeb59..6091c78ede4c 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -367,119 +367,6 @@ EditCharAttrib* MakeCharAttrib( SfxItemPool& rPool, const 
SfxPoolItem& rAttr, sa
     return nullptr;
 }
 
-TextPortionList::TextPortionList()
-{
-}
-
-TextPortionList::~TextPortionList()
-{
-    Reset();
-}
-
-void TextPortionList::Reset()
-{
-    maPortions.clear();
-}
-
-void TextPortionList::DeleteFromPortion(sal_Int32 nDelFrom)
-{
-    assert((nDelFrom < static_cast<sal_Int32>(maPortions.size())) || 
((nDelFrom == 0) && maPortions.empty()));
-    PortionsType::iterator it = maPortions.begin();
-    std::advance(it, nDelFrom);
-    maPortions.erase(it, maPortions.end());
-}
-
-sal_Int32 TextPortionList::Count() const
-{
-    return static_cast<sal_Int32>(maPortions.size());
-}
-
-const TextPortion& TextPortionList::operator[](sal_Int32 nPos) const
-{
-    return *maPortions[nPos];
-}
-
-TextPortion& TextPortionList::operator[](sal_Int32 nPos)
-{
-    return *maPortions[nPos];
-}
-
-void TextPortionList::Append(TextPortion* p)
-{
-    maPortions.push_back(std::unique_ptr<TextPortion>(p));
-}
-
-void TextPortionList::Insert(sal_Int32 nPos, TextPortion* p)
-{
-    maPortions.insert(maPortions.begin()+nPos, 
std::unique_ptr<TextPortion>(p));
-}
-
-void TextPortionList::Remove(sal_Int32 nPos)
-{
-    maPortions.erase(maPortions.begin()+nPos);
-}
-
-namespace {
-
-class FindTextPortionByAddress
-{
-    const TextPortion* mp;
-public:
-    explicit FindTextPortionByAddress(const TextPortion* p) : mp(p) {}
-    bool operator() (const std::unique_ptr<TextPortion>& v) const
-    {
-        return v.get() == mp;
-    }
-};
-
-}
-
-sal_Int32 TextPortionList::GetPos(const TextPortion* p) const
-{
-    PortionsType::const_iterator it =
-        std::find_if(maPortions.begin(), maPortions.end(), 
FindTextPortionByAddress(p));
-
-    if (it == maPortions.end())
-        return std::numeric_limits<sal_Int32>::max(); // not found.
-
-    return std::distance(maPortions.begin(), it);
-}
-
-sal_Int32 TextPortionList::FindPortion(
-    sal_Int32 nCharPos, sal_Int32& nPortionStart, bool bPreferStartingPortion) 
const
-{
-    // When nCharPos at portion limit, the left portion is found
-    sal_Int32 nTmpPos = 0;
-    sal_Int32 n = maPortions.size();
-    for (sal_Int32 i = 0; i < n; ++i)
-    {
-        const TextPortion& rPortion = *maPortions[i];
-        nTmpPos = nTmpPos + rPortion.GetLen();
-        if ( nTmpPos >= nCharPos )
-        {
-            // take this one if we don't prefer the starting portion, or if 
it's the last one
-            if ( ( nTmpPos != nCharPos ) || !bPreferStartingPortion || ( i == 
n-1 ) )
-            {
-                nPortionStart = nTmpPos - rPortion.GetLen();
-                return i;
-            }
-        }
-    }
-    OSL_FAIL( "FindPortion: Not found!" );
-    return n - 1;
-}
-
-sal_Int32 TextPortionList::GetStartPos(sal_Int32 nPortion)
-{
-    sal_Int32 nPos = 0;
-    for (sal_Int32 i = 0; i < nPortion; ++i)
-    {
-        const TextPortion& rPortion = *maPortions[i];
-        nPos = nPos + rPortion.GetLen();
-    }
-    return nPos;
-}
-
 ParaPortion::ParaPortion( ContentNode* pN ) :
     pNode(pN),
     nHeight(0),
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 9b416bc3e0ce..6f472b55d07a 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -3419,6 +3419,7 @@ editeng/source/editeng/misspellrange.cxx
 editeng/source/editeng/section.cxx
 editeng/source/editeng/textconv.cxx
 editeng/source/editeng/textconv.hxx
+editeng/source/editeng/TextPortionList.cxx
 editeng/source/items/CustomPropertyField.cxx
 editeng/source/items/borderline.cxx
 editeng/source/items/bulitem.cxx

Reply via email to