summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-12-29 17:01:03 +0900
committerTomaž Vajngerl <quikee@gmail.com>2024-01-01 04:34:06 +0100
commit0020f05df2e7fc739e5e017e035efbe3c9bc8b35 (patch)
treea143af24ab91944c68db70f863b3fb4d2b93e674 /editeng
parente3267cadcaa8cfc64705e24bd484815469b8814f (diff)
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 <quikee@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'editeng')
-rw-r--r--editeng/Library_editeng.mk1
-rw-r--r--editeng/inc/TextPortionList.hxx32
-rw-r--r--editeng/source/editeng/TextPortionList.cxx95
-rw-r--r--editeng/source/editeng/editdoc.cxx113
4 files changed, 119 insertions, 122 deletions
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),