summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-07-16 20:37:15 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-07-17 12:48:05 +0200
commit1b80998025e13fbf71017ac08fa607737e716429 (patch)
tree548642a43b8f8e5ddb0ed63df4d0f44ef2f03971
parent960ad8037275d86f15e0177f52a1d0dac25319e4 (diff)
move BuildWhichTable and simplify
move it to the only place using it, and simplify Change-Id: I4a46b5d01f042e7b2e99b7dd1d28f67feda037d0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119086 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--include/svtools/svparser.hxx6
-rw-r--r--svtools/source/svrtf/svparser.cxx55
-rw-r--r--sw/source/filter/html/svxcss1.cxx11
-rw-r--r--sw/source/filter/html/svxcss1.hxx4
4 files changed, 11 insertions, 65 deletions
diff --git a/include/svtools/svparser.hxx b/include/svtools/svparser.hxx
index 0941c4e6d99b..3233cf8000a7 100644
--- a/include/svtools/svparser.hxx
+++ b/include/svtools/svparser.hxx
@@ -141,12 +141,6 @@ public:
T GetSaveToken() const;
};
-// build a Which-Map 'rWhichMap' from an array of WhichIds
-// 'pWhichIds'. It has the length 'nWhichIds'.
-// The WhichMap is not deleted.
-SVT_DLLPUBLIC void BuildWhichTable( std::vector<sal_uInt16> &rWhichMap,
- sal_uInt16 const *pWhichIds,
- sal_uInt16 nWhichIds );
/*========================================================================
*
diff --git a/svtools/source/svrtf/svparser.cxx b/svtools/source/svrtf/svparser.cxx
index 301e2961d923..3da34404f517 100644
--- a/svtools/source/svrtf/svparser.cxx
+++ b/svtools/source/svrtf/svparser.cxx
@@ -595,61 +595,6 @@ void SvParser<T>::Continue( T )
{
}
-void BuildWhichTable( std::vector<sal_uInt16> &rWhichMap,
- sal_uInt16 const *pWhichIds,
- sal_uInt16 nWhichIds )
-{
- sal_uInt16 aNewRange[2];
-
- for( sal_uInt16 nCnt = 0; nCnt < nWhichIds; ++nCnt, ++pWhichIds )
- if( *pWhichIds )
- {
- aNewRange[0] = aNewRange[1] = *pWhichIds;
- bool bIns = true;
-
- // search position
- for ( sal_uInt16 nOfs = 0; rWhichMap[nOfs]; nOfs += 2 )
- {
- if( *pWhichIds < rWhichMap[nOfs] - 1 )
- {
- // new range before
- rWhichMap.insert( rWhichMap.begin() + nOfs, aNewRange, aNewRange + 2 );
- bIns = false;
- break;
- }
- else if( *pWhichIds == rWhichMap[nOfs] - 1 )
- {
- // extend range downwards
- rWhichMap[nOfs] = *pWhichIds;
- bIns = false;
- break;
- }
- else if( *pWhichIds == rWhichMap[nOfs+1] + 1 )
- {
- if( rWhichMap[nOfs+2] != 0 && rWhichMap[nOfs+2] == *pWhichIds + 1 )
- {
- // merge with next field
- rWhichMap[nOfs+1] = rWhichMap[nOfs+3];
- rWhichMap.erase( rWhichMap.begin() + nOfs + 2,
- rWhichMap.begin() + nOfs + 4 );
- }
- else
- // extend range upwards
- rWhichMap[nOfs+1] = *pWhichIds;
- bIns = false;
- break;
- }
- }
-
- // append range
- if( bIns )
- {
- rWhichMap.insert( rWhichMap.begin() + rWhichMap.size() - 1,
- aNewRange, aNewRange + 2 );
- }
- }
-}
-
// expanded out version of
// IMPL_LINK_NOARG( SvParser, NewDataRead, LinkParamNone*, void )
diff --git a/sw/source/filter/html/svxcss1.cxx b/sw/source/filter/html/svxcss1.cxx
index 280c927320d0..649163449d56 100644
--- a/sw/source/filter/html/svxcss1.cxx
+++ b/sw/source/filter/html/svxcss1.cxx
@@ -694,6 +694,14 @@ void SvxCSS1Parser::SelectorParsed( std::unique_ptr<CSS1Selector> pSelector, boo
m_Selectors.push_back(std::move(pSelector));
}
+static void BuildWhichTable( WhichRangesContainer& rWhichMap,
+ sal_uInt16 const *pWhichIds,
+ sal_uInt16 nWhichIds )
+{
+ for (sal_uInt16 i = 0; i < nWhichIds; ++i)
+ rWhichMap = rWhichMap.MergeRange(pWhichIds[i], pWhichIds[i]);
+}
+
SvxCSS1Parser::SvxCSS1Parser( SfxItemPool& rPool, const OUString& rBaseURL,
sal_uInt16 const *pWhichIds, sal_uInt16 nWhichIds ) :
CSS1Parser(),
@@ -740,13 +748,12 @@ SvxCSS1Parser::SvxCSS1Parser( SfxItemPool& rPool, const OUString& rBaseURL,
aItemIds.nLanguageCTL = rPool.GetTrueWhich( SID_ATTR_CHAR_CTL_LANGUAGE, false );
aItemIds.nDirection = rPool.GetTrueWhich( SID_ATTR_FRAMEDIRECTION, false );
- m_aWhichMap.insert( m_aWhichMap.begin(), 0 );
BuildWhichTable( m_aWhichMap, reinterpret_cast<sal_uInt16 *>(&aItemIds),
sizeof(aItemIds) / sizeof(sal_uInt16) );
if( pWhichIds && nWhichIds )
BuildWhichTable( m_aWhichMap, pWhichIds, nWhichIds );
- m_pSheetItemSet.reset( new SfxItemSet( rPool, m_aWhichMap.data() ) );
+ m_pSheetItemSet.reset( new SfxItemSet( rPool, m_aWhichMap ) );
m_pSheetPropInfo.reset( new SvxCSS1PropertyInfo );
}
diff --git a/sw/source/filter/html/svxcss1.hxx b/sw/source/filter/html/svxcss1.hxx
index 2e0e14fd254a..fd547a0e9d76 100644
--- a/sw/source/filter/html/svxcss1.hxx
+++ b/sw/source/filter/html/svxcss1.hxx
@@ -206,7 +206,7 @@ class SvxCSS1Parser : public CSS1Parser
rtl_TextEncoding m_eDefaultEnc;
bool m_bIgnoreFontFamily;
- std::vector<sal_uInt16> m_aWhichMap; // Which-Map of Parser
+ WhichRangesContainer m_aWhichMap; // Which-Map of Parser
using CSS1Parser::ParseStyleOption;
@@ -264,7 +264,7 @@ public:
virtual const FontList *GetFontList() const;
- const sal_uInt16 *GetWhichMap() const { return m_aWhichMap.data(); }
+ const WhichRangesContainer& GetWhichMap() const { return m_aWhichMap; }
static void InsertMapEntry( const OUString& rKey, const SfxItemSet& rItemSet,
const SvxCSS1PropertyInfo& rProp, CSS1Map& rMap );