blob: 58caf9d711c53b3893c3f922e18ab806565bb5f3 [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 SW_TXMSRT_HXX
#define SW_TXMSRT_HXX
#include <i18npool/lang.h>
#include <tox.hxx>
#include <com/sun/star/lang/Locale.hpp>
class CharClass;
class SwCntntNode;
class SwTxtNode;
class SwTxtTOXMark;
class SwIndex;
class SwFmtFld;
class IndexEntrySupplierWrapper;
enum TOXSortType
{
TOX_SORT_INDEX,
TOX_SORT_CUSTOM,
TOX_SORT_CONTENT,
TOX_SORT_PARA,
TOX_SORT_TABLE,
TOX_SORT_AUTHORITY
};
struct SwTOXSource
{
const SwCntntNode* pNd;
xub_StrLen nPos;
sal_Bool bMainEntry;
SwTOXSource() : pNd(0), nPos(0), bMainEntry(sal_False) {}
SwTOXSource( const SwCntntNode* pNode, xub_StrLen n, sal_Bool bMain )
: pNd(pNode), nPos(n), bMainEntry(bMain)
{}
};
SV_DECL_VARARR( SwTOXSources, SwTOXSource, 0, 10 )
class SwTOXInternational
{
IndexEntrySupplierWrapper* pIndexWrapper;
CharClass* pCharClass;
LanguageType eLang;
String sSortAlgorithm;
sal_uInt16 nOptions;
void Init();
public:
SwTOXInternational( LanguageType nLang, sal_uInt16 nOptions,
const String& rSortAlgorithm );
SwTOXInternational( const SwTOXInternational& );
~SwTOXInternational();
sal_Int32 Compare( const String& rTxt1, const String& rTxtReading1,
const ::com::sun::star::lang::Locale& rLocale1,
const String& rTxt2, const String& rTxtReading2,
const ::com::sun::star::lang::Locale& rLocale2 ) const;
inline sal_Bool IsEqual( const String& rTxt1, const String& rTxtReading1,
const ::com::sun::star::lang::Locale& rLocale1,
const String& rTxt2, const String& rTxtReading2,
const ::com::sun::star::lang::Locale& rLocale2 ) const
{
return 0 == Compare( rTxt1, rTxtReading1, rLocale1,
rTxt2, rTxtReading2, rLocale2 );
}
inline sal_Bool IsLess( const String& rTxt1, const String& rTxtReading1,
const ::com::sun::star::lang::Locale& rLocale1,
const String& rTxt2, const String& rTxtReading2,
const ::com::sun::star::lang::Locale& rLocale2 ) const
{
return -1 == Compare( rTxt1, rTxtReading1, rLocale1,
rTxt2, rTxtReading2, rLocale2 );
}
String GetIndexKey( const String& rTxt, const String& rTxtReading,
const ::com::sun::star::lang::Locale& rLcl ) const;
String GetFollowingText( sal_Bool bMorePages ) const;
String ToUpper( const String& rStr, xub_StrLen nPos ) const;
inline sal_Bool IsNumeric( const String& rStr ) const;
};
/*--------------------------------------------------------------------
Beschreibung: Klassen fuer die Sortierung der Verzeichnisse
--------------------------------------------------------------------*/
struct SwTOXSortTabBase
{
SwTOXSources aTOXSources;
::com::sun::star::lang::Locale aLocale;
const SwTxtNode* pTOXNd;
const SwTxtTOXMark* pTxtMark;
const SwTOXInternational* pTOXIntl;
sal_uLong nPos;
xub_StrLen nCntPos;
sal_uInt16 nType;
static sal_uInt16 nOpt;
SwTOXSortTabBase( TOXSortType nType,
const SwCntntNode* pTOXSrc,
const SwTxtTOXMark* pTxtMark,
const SwTOXInternational* pIntl,
const ::com::sun::star::lang::Locale* pLocale = NULL );
virtual ~SwTOXSortTabBase() {}
sal_uInt16 GetType() const { return nType; }
sal_uInt16 GetOptions() const { return nOpt; }
virtual void FillText( SwTxtNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField = 0) const;
virtual sal_uInt16 GetLevel() const = 0;
virtual sal_Bool operator==( const SwTOXSortTabBase& );
virtual sal_Bool operator<( const SwTOXSortTabBase& );
virtual String GetURL() const;
inline void GetTxt( String&, String& ) const;
inline const ::com::sun::star::lang::Locale& GetLocale() const;
private:
sal_Bool bValidTxt;
String sSortTxt;
String sSortTxtReading;
virtual void GetText_Impl( String&, String& ) const = 0;
};
inline void SwTOXSortTabBase::GetTxt( String& rSortTxt,
String& rSortTxtReading ) const
{
if( !bValidTxt )
{
SwTOXSortTabBase* pThis = (SwTOXSortTabBase*)this;
pThis->GetText_Impl( pThis->sSortTxt, pThis->sSortTxtReading );
pThis->bValidTxt = sal_True;
}
rSortTxt = sSortTxt;
rSortTxtReading = sSortTxtReading;
}
inline const ::com::sun::star::lang::Locale& SwTOXSortTabBase::GetLocale() const
{
return aLocale;
}
/*--------------------------------------------------------------------
Beschreibung: fuer Sortierung nach Text
--------------------------------------------------------------------*/
struct SwTOXIndex : public SwTOXSortTabBase
{
SwTOXIndex( const SwTxtNode&, const SwTxtTOXMark*, sal_uInt16 nOptions, sal_uInt8 nKeyLevel,
const SwTOXInternational& rIntl,
const ::com::sun::star::lang::Locale& rLocale );
virtual ~SwTOXIndex() {}
virtual void FillText( SwTxtNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField = 0 ) const;
virtual sal_uInt16 GetLevel() const;
virtual sal_Bool operator==( const SwTOXSortTabBase& );
virtual sal_Bool operator<( const SwTOXSortTabBase& );
private:
virtual void GetText_Impl( String&, String& ) const;
sal_uInt8 nKeyLevel;
};
struct SwTOXCustom : public SwTOXSortTabBase
{
SwTOXCustom( const String& rKey, const String& rReading, sal_uInt16 nLevel,
const SwTOXInternational& rIntl,
const ::com::sun::star::lang::Locale& rLocale );
virtual ~SwTOXCustom() {}
virtual sal_uInt16 GetLevel() const;
virtual sal_Bool operator==( const SwTOXSortTabBase& );
virtual sal_Bool operator<( const SwTOXSortTabBase& );
private:
virtual void GetText_Impl( String&, String& ) const;
String aKey;
String sReading;
sal_uInt16 nLev;
};
/*--------------------------------------------------------------------
Beschreibung: fuer Sortierung nach Position
--------------------------------------------------------------------*/
struct SwTOXContent : public SwTOXSortTabBase
{
SwTOXContent( const SwTxtNode&, const SwTxtTOXMark*,
const SwTOXInternational& rIntl );
virtual ~SwTOXContent() {}
virtual void FillText( SwTxtNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField = 0 ) const;
virtual sal_uInt16 GetLevel() const;
private:
virtual void GetText_Impl( String&, String& ) const;
};
struct SwTOXPara : public SwTOXSortTabBase
{
SwTOXPara( const SwCntntNode&, SwTOXElement, sal_uInt16 nLevel = FORM_ALPHA_DELIMITTER );
virtual ~SwTOXPara() {}
void SetStartIndex( xub_StrLen nSet) { nStartIndex = nSet;}
void SetEndIndex( xub_StrLen nSet ) { nEndIndex = nSet;}
virtual void FillText( SwTxtNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField = 0 ) const;
virtual sal_uInt16 GetLevel() const;
virtual String GetURL() const;
private:
virtual void GetText_Impl( String&, String& ) const;
SwTOXElement eType;
sal_uInt16 m_nLevel;
xub_StrLen nStartIndex;
xub_StrLen nEndIndex;
};
struct SwTOXTable : public SwTOXSortTabBase
{
SwTOXTable( const SwCntntNode& rNd );
virtual ~SwTOXTable() {}
void SetLevel(sal_uInt16 nSet){nLevel = nSet;}
virtual sal_uInt16 GetLevel() const;
virtual String GetURL() const;
private:
virtual void GetText_Impl( String&, String& ) const;
sal_uInt16 nLevel;
};
struct SwTOXAuthority : public SwTOXSortTabBase
{
private:
SwFmtFld& m_rField;
virtual void FillText( SwTxtNode& rNd, const SwIndex& rInsPos, sal_uInt16 nAuthField = 0 ) const;
virtual void GetText_Impl( String&, String& ) const;
public:
SwTOXAuthority( const SwCntntNode& rNd, SwFmtFld& rField, const SwTOXInternational& rIntl );
virtual ~SwTOXAuthority() {}
SwFmtFld& GetFldFmt() {return m_rField;}
virtual sal_Bool operator==( const SwTOXSortTabBase& );
virtual sal_Bool operator<( const SwTOXSortTabBase& );
virtual sal_uInt16 GetLevel() const;
};
#endif // SW_TXMSRT_HXX