/************************************************************** * * 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 #include #include 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