Kaydet (Commit) a5dece8c authored tarafından Miklos Vajna's avatar Miklos Vajna Kaydeden (comit) Miklos Vajna

writerfilter: remove dead WW8PieceTableImpl

Change-Id: Id100e3cc13b1d694af40b1b5d789cf90736593fa
üst 8b702a73
...@@ -132,7 +132,6 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\ ...@@ -132,7 +132,6 @@ $(eval $(call gb_Library_add_exception_objects,writerfilter,\
writerfilter/source/doctok/WW8ListTable \ writerfilter/source/doctok/WW8ListTable \
writerfilter/source/doctok/WW8OutputWithDepth \ writerfilter/source/doctok/WW8OutputWithDepth \
writerfilter/source/doctok/WW8Picture \ writerfilter/source/doctok/WW8Picture \
writerfilter/source/doctok/WW8PieceTableImpl \
writerfilter/source/doctok/WW8PropertySetImpl \ writerfilter/source/doctok/WW8PropertySetImpl \
writerfilter/source/doctok/WW8ResourceModelImpl \ writerfilter/source/doctok/WW8ResourceModelImpl \
writerfilter/source/doctok/WW8StructBase \ writerfilter/source/doctok/WW8StructBase \
......
/* -*- 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 .
*/
#ifndef INCLUDED_WW8_PIECE_TABLE_HXX
#define INCLUDED_WW8_PIECE_TABLE_HXX
#include <sal/types.h>
#include <doctok/WW8Document.hxx>
#include <boost/shared_ptr.hpp>
#include <iostream>
namespace writerfilter {
namespace doctok {
using namespace ::std;
struct Cp;
struct Fc;
class CpAndFc;
/**
The piece table of a Word document.
The piece table associates character positions (CP) and File
character positions (FC). In a FC based view the piece table
defines intervals of FCs that contain consecutive text.
CPs and FCs can be complex, i.e. the associated text is stored in
bytes. Otherwise the text encoding is UTF-16.
*/
class WW8PieceTable
{
public:
virtual ~WW8PieceTable() {}
/**
Shared pointer to piece table
*/
typedef boost::shared_ptr<WW8PieceTable> Pointer_t;
/**
Convert CP to FC.
@param aCpIn CP to convert
@return FC associated with CP
*/
virtual Fc cp2fc(const Cp & aCpIn) const = 0;
/**
Convert FC to CP.
@param aFcIn FC to convert
@return CP associated with FC
*/
virtual Cp fc2cp(const Fc & aFcIn) const = 0;
/**
Check if CP is complex.
@param aCp CP to check
@retval true CP is complex
@retval false else
*/
virtual bool isComplex(const Cp & aCp) const = 0;
/**
Check if FC is complex.
@param aFc FC to check
@retval true FC is complex
@retval false else
*/
virtual bool isComplex(const Fc & aFc) const = 0;
/**
Return number of entries.
*/
virtual sal_uInt32 getCount() const = 0;
/**
Return first CP.
*/
virtual Cp getFirstCp() const = 0;
/**
Return first FC.
*/
virtual Fc getFirstFc() const = 0;
/**
Return last CP.
*/
virtual Cp getLastCp() const = 0;
/**
Return last FC.
*/
virtual Fc getLastFc() const = 0;
/**
Return CP at index.
@param nIndex index of CP to return
*/
virtual Cp getCp(sal_uInt32 nIndex) const = 0;
/**
Return FC at index.
@param nIndex index of FC to return
*/
virtual Fc getFc(sal_uInt32 nIndex) const = 0;
/**
Create CpAndFc from Cp.
@param rCp the Cp
@return CpAndFc containing rCp and corresponding Fc
*/
virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const = 0;
/**
Create CpAndFc from Fc.
@param rFc the Fc
@return CpAndFc containing rFc and corresponding Cp
*/
virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const = 0;
/**
Dump piece table.
@param o stream to dump to
*/
virtual void dump(ostream & o) const = 0;
};
/**
Dump piece table.
@param o stream to dump to
@param rPieceTable piece table to dump
*/
ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable);
}}
#endif // INCLUDED_WW8_PIECE_TABLE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- 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 <algorithm>
#include <iterator>
#include <resourcemodel/exceptions.hxx>
#include <WW8PieceTableImpl.hxx>
#include <WW8Clx.hxx>
namespace writerfilter {
namespace doctok
{
using namespace ::std;
ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable)
{
rPieceTable.dump(o);
return o;
}
WW8PieceTableImpl::WW8PieceTableImpl(WW8Stream & rStream,
sal_uInt32 nOffset,
sal_uInt32 nCount)
{
WW8Clx aClx(rStream, nOffset, nCount);
sal_uInt32 nPieceCount = aClx.getPieceCount();
if (nPieceCount > 0)
{
for (sal_uInt32 n = 0; n < nPieceCount; n++)
{
Cp aCp(aClx.getCp(n));
Fc aFc(aClx.getFc(n), aClx.isComplexFc(n));
CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
mEntries.push_back(aCpAndFc);
}
CpAndFc aBack = mEntries.back();
Cp aCp(aClx.getCp(aClx.getPieceCount()));
Fc aFc(aBack.getFc() + (aCp - aBack.getCp()));
CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
mEntries.push_back(aCpAndFc);
}
}
sal_uInt32 WW8PieceTableImpl::getCount() const
{
return mEntries.size();
}
WW8PieceTableImpl::tEntries::const_iterator
WW8PieceTableImpl::findCp(const Cp & rCp) const
{
tEntries::const_iterator aResult = mEntries.end();
tEntries::const_iterator aEnd = mEntries.end();
for (tEntries::const_iterator aIt = mEntries.begin(); aIt != aEnd;
++aIt)
{
if (aIt->getCp() <= rCp)
{
aResult = aIt;
//break;
}
}
return aResult;
}
WW8PieceTableImpl::tEntries::const_iterator
WW8PieceTableImpl::findFc(const Fc & rFc) const
{
tEntries::const_iterator aResult = mEntries.end();
tEntries::const_iterator aEnd = mEntries.end();
if (mEntries.size() > 0)
{
if (rFc < mEntries.begin()->getFc())
aResult = mEntries.begin();
else
{
for (tEntries::const_iterator aIt = mEntries.begin();
aIt != aEnd; ++aIt)
{
if (aIt->getFc() <= rFc)
{
tEntries::const_iterator aItNext = aIt;
++aItNext;
if (aItNext != aEnd)
{
sal_uInt32 nOffset = rFc.get() - aIt->getFc().get();
sal_uInt32 nLength = aItNext->getCp() - aIt->getCp();
if (! aIt->isComplex())
nLength *= 2;
if (nOffset < nLength)
{
aResult = aIt;
break;
}
}
}
}
}
}
return aResult;
}
Cp WW8PieceTableImpl::getFirstCp() const
{
Cp aResult;
if (getCount() > 0)
aResult = getCp(0);
else
throw ExceptionNotFound("WW8PieceTableImpl::getFirstCp");
return aResult;
}
Fc WW8PieceTableImpl::getFirstFc() const
{
Fc aResult;
if (getCount() > 0)
aResult = getFc(0);
else
throw ExceptionNotFound(" WW8PieceTableImpl::getFirstFc");
return aResult;
}
Cp WW8PieceTableImpl::getLastCp() const
{
Cp aResult;
if (getCount() > 0)
aResult = getCp(getCount() - 1);
else
throw ExceptionNotFound("WW8PieceTableImpl::getLastCp");
return aResult;
}
Fc WW8PieceTableImpl::getLastFc() const
{
Fc aResult;
if (getCount() > 0)
aResult = getFc(getCount() - 1);
else
throw ExceptionNotFound("WW8PieceTableImpl::getLastFc");
return aResult;
}
Cp WW8PieceTableImpl::getCp(sal_uInt32 nIndex) const
{
return mEntries[nIndex].getCp();
}
Fc WW8PieceTableImpl::getFc(sal_uInt32 nIndex) const
{
return mEntries[nIndex].getFc();
}
Cp WW8PieceTableImpl::fc2cp(const Fc & rFc) const
{
Cp cpResult;
if (mEntries.size() > 0)
{
Fc aFc;
if (rFc < mEntries.begin()->getFc())
aFc = mEntries.begin()->getFc();
else
aFc = rFc;
tEntries::const_iterator aIt = findFc(aFc);
if (aIt != mEntries.end())
{
cpResult = aIt->getCp() + (aFc - aIt->getFc());
}
else
throw ExceptionNotFound("WW8PieceTableImpl::fc2cp: " + aFc.toString());
}
return cpResult;
}
Fc WW8PieceTableImpl::cp2fc(const Cp & rCp) const
{
Fc aResult;
Cp2FcHashMap_t::iterator aItCp = mCp2FcCache.find(rCp);
if (aItCp == mCp2FcCache.end())
{
tEntries::const_iterator aIt = findCp(rCp);
if (aIt != mEntries.end())
{
aResult = aIt->getFc() + (rCp - aIt->getCp());
mCp2FcCache[rCp] = aResult;
}
else
throw ExceptionNotFound
("WW8PieceTableImpl::cp2fc: " + rCp.toString());
}
else
aResult = mCp2FcCache[rCp];
return aResult;
}
bool WW8PieceTableImpl::isComplex(const Cp & rCp) const
{
bool bResult = false;
tEntries::const_iterator aIt = findCp(rCp);
if (aIt != mEntries.end())
bResult = aIt->isComplex();
return bResult;
}
bool WW8PieceTableImpl::isComplex(const Fc & rFc) const
{
bool bResult = false;
tEntries::const_iterator aIt = findFc(rFc);
if (aIt != mEntries.end())
bResult = aIt->isComplex();
return bResult;
}
CpAndFc WW8PieceTableImpl::createCpAndFc
(const Cp & rCp, PropertyType eType) const
{
return CpAndFc(rCp, cp2fc(rCp), eType);
}
CpAndFc WW8PieceTableImpl::createCpAndFc
(const Fc & rFc, PropertyType eType) const
{
return CpAndFc(fc2cp(rFc), rFc, eType);
}
void WW8PieceTableImpl::dump(ostream & o) const
{
o << "<piecetable>" << endl;
copy(mEntries.begin(), mEntries.end(), ostream_iterator<CpAndFc>(o, "\n"));
o << "</piecetable>" << endl;
}
}}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- 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 .
*/
#ifndef INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
#define INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
#include <vector>
#include <WW8CpAndFc.hxx>
#include <WW8PieceTable.hxx>
namespace writerfilter {
namespace doctok
{
using namespace ::std;
class WW8PieceTableImpl : public WW8PieceTable
{
typedef std::vector<CpAndFc> tEntries;
tEntries mEntries;
tEntries::const_iterator findCp(const Cp & rCp) const;
tEntries::const_iterator findFc(const Fc & rFc) const;
mutable Cp2FcHashMap_t mCp2FcCache;
public:
WW8PieceTableImpl(WW8Stream & rStream, sal_uInt32 nOffset,
sal_uInt32 nCount);
virtual Fc cp2fc(const Cp & aCpIn) const;
virtual Cp fc2cp(const Fc & aFcIn) const;
virtual bool isComplex(const Cp & aCp) const;
virtual bool isComplex(const Fc & aFc) const;
virtual sal_uInt32 getCount() const;
virtual Cp getFirstCp() const;
virtual Fc getFirstFc() const;
virtual Cp getLastCp() const;
virtual Fc getLastFc() const;
virtual Cp getCp(sal_uInt32 nIndex) const;
virtual Fc getFc(sal_uInt32 nIndex) const;
virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const;
virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const;
virtual void dump(ostream & o) const;
};
}}
#endif // INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment