diff options
Diffstat (limited to 'sw/source/core/edit/autofmt.cxx')
-rw-r--r-- | sw/source/core/edit/autofmt.cxx | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/sw/source/core/edit/autofmt.cxx b/sw/source/core/edit/autofmt.cxx index 134fc88cd103..639bab3c10c5 100644 --- a/sw/source/core/edit/autofmt.cxx +++ b/sw/source/core/edit/autofmt.cxx @@ -2,13 +2,10 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2008 by Sun Microsystems, Inc. + * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * - * $RCSfile: autofmt.cxx,v $ - * $Revision: 1.42 $ - * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -40,17 +37,17 @@ #include <svl/svstdarr.hxx> #include <unotools/charclass.hxx> -#include <svx/boxitem.hxx> -#include <svx/lrspitem.hxx> -#include <svx/brkitem.hxx> -#include <svx/adjitem.hxx> -#include <svx/tstpitem.hxx> -#include <svx/fontitem.hxx> -#include <svx/langitem.hxx> -#include <svx/cscoitem.hxx> -#include <svx/unolingu.hxx> - -#include <svx/acorrcfg.hxx> +#include <editeng/boxitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/brkitem.hxx> +#include <editeng/adjitem.hxx> +#include <editeng/tstpitem.hxx> +#include <editeng/fontitem.hxx> +#include <editeng/langitem.hxx> +#include <editeng/cscoitem.hxx> +#include <editeng/unolingu.hxx> + +#include <editeng/acorrcfg.hxx> #include <swwait.hxx> #include <fmtpdsc.hxx> #include <fmtanchr.hxx> @@ -316,6 +313,7 @@ void SwAutoFormat::_SetRedlineTxt( USHORT nActionId ) case STR_AUTOFMTREDL_FRACTION: case STR_AUTOFMTREDL_DASH: case STR_AUTOFMTREDL_ORDINAL: + case STR_AUTOFMTREDL_NON_BREAK_SPACE: nSeqNo = ++nRedlAutoFmtSeqId; break; } @@ -1891,12 +1889,17 @@ void SwAutoFormat::BuildHeadLine( USHORT nLvl ) // dann lasse doch mal das AutoCorrect auf den akt. TextNode los void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) { + SvxAutoCorrect* pATst = SvxAutoCorrCfg::Get()->GetAutoCorrect(); + long aSvxFlags = pATst->GetFlags( ); + bool bReplaceQuote = ( aSvxFlags & ChgQuotes ) > 0; + bool bReplaceSglQuote = ( aSvxFlags & ChgSglQuotes ) > 0; + if( aFlags.bAFmtByInput || - (!aFlags.bAutoCorrect && !aFlags.bReplaceQuote && + (!aFlags.bAutoCorrect && !bReplaceQuote && !bReplaceSglQuote && !aFlags.bCptlSttSntnc && !aFlags.bCptlSttWrd && - !aFlags.bChgFracionSymbol && !aFlags.bChgOrdinalNumber && + !aFlags.bChgOrdinalNumber && !aFlags.bChgToEnEmDash && !aFlags.bSetINetAttr && - !aFlags.bChgWeightUnderl) ) + !aFlags.bChgWeightUnderl && !aFlags.bAddNonBrkSpace) ) return; const String* pTxt = &pAktTxtNd->GetTxt(); @@ -1905,7 +1908,8 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) BOOL bGetLanguage = aFlags.bChgOrdinalNumber || aFlags.bChgToEnEmDash || aFlags.bSetINetAttr || - aFlags.bCptlSttWrd || aFlags.bCptlSttSntnc; + aFlags.bCptlSttWrd || aFlags.bCptlSttSntnc || + aFlags.bAddNonBrkSpace; aDelPam.DeleteMark(); @@ -1913,7 +1917,6 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) aDelPam.GetPoint()->nContent.Assign( pAktTxtNd, 0 ); SwAutoCorrDoc aACorrDoc( *pEditShell, aDelPam ); - SvxAutoCorrect* pATst = SvxAutoCorrCfg::Get()->GetAutoCorrect(); SwTxtFrmInfo aFInfo( 0 ); @@ -1929,8 +1932,8 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) if( nPos == pTxt->Len() ) break; // das wars - if( aFlags.bReplaceQuote && - ( '\"' == cChar || '\'' == cChar ) && + if( ( ( bReplaceQuote && '\"' == cChar ) || + ( bReplaceSglQuote && '\'' == cChar ) ) && ( !nPos || ' ' == pTxt->GetChar( nPos-1 ) ) ) { // -------------------------------------- @@ -1983,7 +1986,7 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) { case '\"': case '\'': - if( aFlags.bReplaceQuote ) + if( ( cChar == '\"' && bReplaceQuote ) || ( cChar == '\'' && bReplaceSglQuote ) ) { // -------------------------------------- // beachte: Sonderfall Symbolfonts !!! @@ -2068,6 +2071,18 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) } } break; + case '/': + if ( aFlags.bAddNonBrkSpace ) + { + LanguageType eLang = (bGetLanguage && pAktTxtNd) + ? pAktTxtNd->GetLang( nSttPos ) + : LANGUAGE_SYSTEM; + + SetRedlineTxt( STR_AUTOFMTREDL_NON_BREAK_SPACE ); + if ( pATst->FnAddNonBrkSpace( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) ) + --nPos; + } + break; case '.': case '!': @@ -2076,7 +2091,6 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) bFirstSent = TRUE; //alle Wortrenner loesen die Autokorrektur aus! // break; - default: //alle Wortrenner loesen die Autokorrektur aus! // case ' ': @@ -2125,10 +2139,13 @@ void SwAutoFormat::AutoCorrect( xub_StrLen nPos ) ? pAktTxtNd->GetLang( nSttPos ) : LANGUAGE_SYSTEM; - if( ( aFlags.bChgFracionSymbol && - SetRedlineTxt( STR_AUTOFMTREDL_FRACTION ) && - pATst->FnChgFractionSymbol( aACorrDoc, *pTxt, nSttPos, nPos ) ) || - ( aFlags.bChgOrdinalNumber && + if ( aFlags.bAddNonBrkSpace ) + { + SetRedlineTxt( STR_AUTOFMTREDL_NON_BREAK_SPACE ); + pATst->FnAddNonBrkSpace( aACorrDoc, *pTxt, nSttPos, nPos, eLang ); + } + + if( ( aFlags.bChgOrdinalNumber && SetRedlineTxt( STR_AUTOFMTREDL_ORDINAL ) && pATst->FnChgOrdinalNumber( aACorrDoc, *pTxt, nSttPos, nPos, eLang ) ) || ( aFlags.bChgToEnEmDash && |