blob: 2fadd4bfff36f5184ac1580dd17350271b384dda [file] [log] [blame]
/**************************************************************
*
* 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 INCLUDED_X_NOTE_HELPER_HXX
#define INCLUDED_X_NOTE_HELPER_HXX
#ifndef INLCUED_PLCF_HXX
#include <PLCF.hxx>
#endif
#include <WW8DocumentImpl.hxx>
namespace writerfilter {
namespace doctok
{
/**
A helper class for footnotes and endnotes and annotations(aka X-notes).
*/
template <class T>
class XNoteHelper
{
/// Character positions of X-notes in footnote document
WW8StructBase::Pointer_t mpCps;
/// Character positions of references to X-notes
typename PLCF<T>::Pointer_t mpRefs;
/// piece table for CP to FC conversion
WW8PieceTable::Pointer_t mpPieceTable;
/// the document
WW8DocumentImpl * mpDocument;
/// type of X-notes handled by this helper (PROP_FOOTNOTE, PROP_ENDNOTE)
PropertyType meType;
/// offset in document where X-note subdocument starts
CpAndFc mCpAndFcOffset;
/**
Return CpAndFc in document for X-note.
@param nPos index of X-note
*/
CpAndFc getCpAndFc(sal_uInt32 nPos);
/**
Return CpAndFc in document for reference to a certain X-note.
@param nPos index of the X-note
*/
CpAndFc getRefCpAndFc(sal_uInt32 nPos);
public:
typedef boost::shared_ptr<XNoteHelper> Pointer_t;
XNoteHelper(WW8StructBase::Pointer_t pCps,
typename PLCF<T>::Pointer_t pRefs,
WW8PieceTable::Pointer_t pPieceTable,
WW8DocumentImpl * pDocument,
PropertyType eType,
CpAndFc cpAndFcOffset)
: mpCps(pCps), mpRefs(pRefs), mpPieceTable(pPieceTable),
mpDocument(pDocument), meType(eType), mCpAndFcOffset(cpAndFcOffset)
{
}
/**
Initialize.
Generates CpAndFcs in document for X-notes.
*/
void init();
/**
Return number of X-notes.
*/
sal_uInt32 getCount() const;
/**
Return index of CpAndFc.
@param rCpAndFc the CpAndFc to search
@return the index of the rCpAndFc found or getCount() otherwise
*/
sal_uInt32 getIndexOfCpAndFc(const CpAndFc & rCpAndFc);
/**
Return subdocument containing X-note.
@param nIndex index of X-note.
*/
writerfilter::Reference<Stream>::Pointer_t get(sal_uInt32 nIndex);
/**
Return subdocument containing X-note.
@param rCpAndFc CpAndFc of the X-note's reference
*/
writerfilter::Reference<Stream>::Pointer_t get(const CpAndFc & rCpAndFc);
/**
Return reference data structure of X-note.
@param nIndex index of X-note
*/
T * getRef(sal_uInt32 nIndex);
/**
Return reference data structure of X-note.
@param rCpAndFc CpAndFc for the X-note's reference
*/
T * getRef(const CpAndFc & rCpAndFc);
};
}}
#endif // INCLUDED_X_NOTE_HELPER_HXX