summaryrefslogtreecommitdiff
path: root/sw/source/core/doc/docruby.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/doc/docruby.cxx')
-rw-r--r--sw/source/core/doc/docruby.cxx343
1 files changed, 0 insertions, 343 deletions
diff --git a/sw/source/core/doc/docruby.cxx b/sw/source/core/doc/docruby.cxx
deleted file mode 100644
index abe9ab1d03..0000000000
--- a/sw/source/core/doc/docruby.cxx
+++ /dev/null
@@ -1,343 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sw.hxx"
-
-#include <string.h> // fuer strchr()
-
-#include <com/sun/star/i18n/UnicodeType.hdl>
-#include <com/sun/star/i18n/WordType.hdl>
-
-#include <unotools/charclass.hxx>
-
-#include <hintids.hxx>
-#include <doc.hxx>
-#include <IDocumentUndoRedo.hxx>
-#include <docary.hxx>
-#include <mvsave.hxx> // Strukturen zum Sichern beim Move/Delete
-#include <ndtxt.hxx>
-#include <txatbase.hxx>
-#include <rubylist.hxx>
-#include <pam.hxx>
-#include <swundo.hxx> // fuer die UndoIds
-#include <breakit.hxx>
-#include <crsskip.hxx>
-
-SV_IMPL_PTRARR( SwRubyList, SwRubyListEntryPtr )
-
-using namespace ::com::sun::star::i18n;
-
-
-/*
- * Members in the list:
- * - String - the orig text
- * - SwFmtRuby - the ruby attribut
- *
- *
- */
-sal_uInt16 SwDoc::FillRubyList( const SwPaM& rPam, SwRubyList& rList,
- sal_uInt16 nMode )
-{
- const SwPaM *_pStartCrsr = (SwPaM*)rPam.GetNext(),
- *__pStartCrsr = _pStartCrsr;
- sal_Bool bCheckEmpty = &rPam != _pStartCrsr;
- do {
- const SwPosition* pStt = _pStartCrsr->Start(),
- * pEnd = pStt == _pStartCrsr->GetPoint()
- ? _pStartCrsr->GetMark()
- : _pStartCrsr->GetPoint();
- if( !bCheckEmpty || ( pStt != pEnd && *pStt != *pEnd ))
- {
- SwPaM aPam( *pStt );
- do {
- SwRubyListEntry* pNew = new SwRubyListEntry;
- if( pEnd != pStt )
- {
- aPam.SetMark();
- *aPam.GetMark() = *pEnd;
- }
- if( _SelectNextRubyChars( aPam, *pNew, nMode ))
- {
- rList.Insert( pNew, rList.Count() );
- aPam.DeleteMark();
- }
- else
- {
- delete pNew;
- if( *aPam.GetPoint() < *pEnd )
- {
- // goto next paragraph
- aPam.DeleteMark();
- aPam.Move( fnMoveForward, fnGoNode );
- }
- else
- break;
- }
- } while( 30 > rList.Count() && *aPam.GetPoint() < *pEnd );
- }
- } while( 30 > rList.Count() &&
- (_pStartCrsr=(SwPaM *)_pStartCrsr->GetNext()) != __pStartCrsr );
-
- return rList.Count();
-}
-
-sal_uInt16 SwDoc::SetRubyList( const SwPaM& rPam, const SwRubyList& rList,
- sal_uInt16 nMode )
-{
- GetIDocumentUndoRedo().StartUndo( UNDO_SETRUBYATTR, NULL );
- std::set<sal_uInt16> aDelArr;
- aDelArr.insert( RES_TXTATR_CJK_RUBY );
-
- sal_uInt16 nListEntry = 0;
-
- const SwPaM *_pStartCrsr = (SwPaM*)rPam.GetNext(),
- *__pStartCrsr = _pStartCrsr;
- sal_Bool bCheckEmpty = &rPam != _pStartCrsr;
- do {
- const SwPosition* pStt = _pStartCrsr->Start(),
- * pEnd = pStt == _pStartCrsr->GetPoint()
- ? _pStartCrsr->GetMark()
- : _pStartCrsr->GetPoint();
- if( !bCheckEmpty || ( pStt != pEnd && *pStt != *pEnd ))
- {
-
- SwPaM aPam( *pStt );
- do {
- SwRubyListEntry aCheckEntry;
- if( pEnd != pStt )
- {
- aPam.SetMark();
- *aPam.GetMark() = *pEnd;
- }
- if( _SelectNextRubyChars( aPam, aCheckEntry, nMode ))
- {
- const SwRubyListEntry* pEntry = rList[ nListEntry++ ];
- if( aCheckEntry.GetRubyAttr() != pEntry->GetRubyAttr() )
- {
- // set/reset the attribut
- if( pEntry->GetRubyAttr().GetText().Len() )
- {
- InsertPoolItem( aPam, pEntry->GetRubyAttr(), 0 );
- }
- else
- {
- ResetAttrs( aPam, sal_True, aDelArr );
- }
- }
-
- if( aCheckEntry.GetText() != pEntry->GetText() &&
- pEntry->GetText().Len() )
- {
- // text is changed, so replace the original
- ReplaceRange( aPam, pEntry->GetText(), false );
- }
- aPam.DeleteMark();
- }
- else
- {
- if( *aPam.GetPoint() < *pEnd )
- {
- // goto next paragraph
- aPam.DeleteMark();
- aPam.Move( fnMoveForward, fnGoNode );
- }
- else
- {
- const SwRubyListEntry* pEntry = rList[ nListEntry++ ];
-
- // set/reset the attribut
- if( pEntry->GetRubyAttr().GetText().Len() &&
- pEntry->GetText().Len() )
- {
- InsertString( aPam, pEntry->GetText() );
- aPam.SetMark();
- aPam.GetMark()->nContent -= pEntry->GetText().Len();
- InsertPoolItem( aPam, pEntry->GetRubyAttr(),
- nsSetAttrMode::SETATTR_DONTEXPAND );
- }
- else
- break;
- aPam.DeleteMark();
- }
- }
- } while( nListEntry < rList.Count() && *aPam.GetPoint() < *pEnd );
- }
- } while( 30 > rList.Count() &&
- (_pStartCrsr=(SwPaM *)_pStartCrsr->GetNext()) != __pStartCrsr );
-
- GetIDocumentUndoRedo().EndUndo( UNDO_SETRUBYATTR, NULL );
-
- return nListEntry;
-}
-
-sal_Bool SwDoc::_SelectNextRubyChars( SwPaM& rPam, SwRubyListEntry& rEntry, sal_uInt16 )
-{
- // Point must be the startposition, Mark is optional the end position
- SwPosition* pPos = rPam.GetPoint();
- const SwTxtNode* pTNd = pPos->nNode.GetNode().GetTxtNode();
- const String* pTxt = &pTNd->GetTxt();
- xub_StrLen nStart = pPos->nContent.GetIndex(), nEnd = pTxt->Len();
-
- sal_Bool bHasMark = rPam.HasMark();
- if( bHasMark )
- {
- // in the same node?
- if( rPam.GetMark()->nNode == pPos->nNode )
- {
- // then use that end
- xub_StrLen nTEnd = rPam.GetMark()->nContent.GetIndex();
- if( nTEnd < nEnd )
- nEnd = nTEnd;
- }
- rPam.DeleteMark();
- }
-
- // ----- search the start
- // --- look where a ruby attribut starts
- sal_uInt16 nHtIdx = USHRT_MAX;
- const SwpHints* pHts = pTNd->GetpSwpHints();
- const SwTxtAttr* pAttr = 0;
- if( pHts )
- {
- const SwTxtAttr* pHt;
- for( nHtIdx = 0; nHtIdx < pHts->Count(); ++nHtIdx )
- if( RES_TXTATR_CJK_RUBY == ( pHt = (*pHts)[ nHtIdx ])->Which() &&
- *pHt->GetAnyEnd() > nStart )
- {
- if( *pHt->GetStart() < nEnd )
- {
- pAttr = pHt;
- if( !bHasMark && nStart > *pAttr->GetStart() )
- {
- nStart = *pAttr->GetStart();
- pPos->nContent = nStart;
- }
- }
- break;
- }
- }
-
- if( !bHasMark && nStart && ( !pAttr || nStart != *pAttr->GetStart()) )
- {
- // skip to the word begin!
- long nWordStt = pBreakIt->GetBreakIter()->getWordBoundary(
- *pTxt, nStart,
- pBreakIt->GetLocale( pTNd->GetLang( nStart )),
- WordType::ANYWORD_IGNOREWHITESPACES,
- sal_True ).startPos;
- if( nWordStt < nStart && -1 != nWordStt )
- {
- nStart = (xub_StrLen)nWordStt;
- pPos->nContent = nStart;
- }
- }
-
- sal_Bool bAlphaNum = sal_False;
- long nWordEnd = nEnd;
- CharClass& rCC = GetAppCharClass();
- while( nStart < nEnd )
- {
- if( pAttr && nStart == *pAttr->GetStart() )
- {
- pPos->nContent = nStart;
- if( !rPam.HasMark() )
- {
- rPam.SetMark();
- pPos->nContent = *pAttr->GetAnyEnd();
- if( pPos->nContent.GetIndex() > nEnd )
- pPos->nContent = nEnd;
- rEntry.SetRubyAttr( pAttr->GetRuby() );
- }
- break;
- }
-
- sal_Int32 nChType = rCC.getType( *pTxt, nStart );
- sal_Bool bIgnoreChar = sal_False, bIsAlphaNum = sal_False, bChkNxtWrd = sal_False;
- switch( nChType )
- {
- case UnicodeType::UPPERCASE_LETTER:
- case UnicodeType::LOWERCASE_LETTER:
- case UnicodeType::TITLECASE_LETTER:
- case UnicodeType::DECIMAL_DIGIT_NUMBER:
- bChkNxtWrd = bIsAlphaNum = sal_True;
- break;
-
- case UnicodeType::SPACE_SEPARATOR:
- case UnicodeType::CONTROL:
-/*??*/ case UnicodeType::PRIVATE_USE:
- case UnicodeType::START_PUNCTUATION:
- case UnicodeType::END_PUNCTUATION:
- bIgnoreChar = sal_True;
- break;
-
-
- case UnicodeType::OTHER_LETTER:
- bChkNxtWrd = sal_True;
-
- default:
- bIsAlphaNum = sal_False;
- break;
- }
-
- if( rPam.HasMark() )
- {
- if( bIgnoreChar || bIsAlphaNum != bAlphaNum || nStart >= nWordEnd )
- break;
- }
- else if( !bIgnoreChar )
- {
- rPam.SetMark();
- bAlphaNum = bIsAlphaNum;
- if( bChkNxtWrd && pBreakIt->GetBreakIter().is() )
- {
- // search the end of this word
- nWordEnd = pBreakIt->GetBreakIter()->getWordBoundary(
- *pTxt, nStart,
- pBreakIt->GetLocale( pTNd->GetLang( nStart )),
- WordType::ANYWORD_IGNOREWHITESPACES,
- sal_True ).endPos;
- if( 0 > nWordEnd || nWordEnd > nEnd || nWordEnd == nStart )
- nWordEnd = nEnd;
- }
- }
- pTNd->GoNext( &pPos->nContent, CRSR_SKIP_CHARS );
- nStart = pPos->nContent.GetIndex();
- }
-
- nStart = rPam.GetMark()->nContent.GetIndex();
- rEntry.SetText( pTxt->Copy( nStart,
- rPam.GetPoint()->nContent.GetIndex() - nStart ));
- return rPam.HasMark();
-}
-
-SwRubyListEntry::~SwRubyListEntry()
-{
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */