LCOV - code coverage report
Current view: top level - editeng/source/rtf - rtfitem.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 899 0.0 %
Date: 2012-08-25 Functions: 0 15 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 1236 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : 
      30                 :            : #include <editeng/flstitem.hxx>
      31                 :            : #include <editeng/fontitem.hxx>
      32                 :            : #include <editeng/postitem.hxx>
      33                 :            : #include <editeng/wghtitem.hxx>
      34                 :            : #include <editeng/fhgtitem.hxx>
      35                 :            : #include <editeng/fwdtitem.hxx>
      36                 :            : #include <editeng/udlnitem.hxx>
      37                 :            : #include <editeng/crsditem.hxx>
      38                 :            : #include <editeng/shdditem.hxx>
      39                 :            : #include <editeng/akrnitem.hxx>
      40                 :            : #include <editeng/wrlmitem.hxx>
      41                 :            : #include <editeng/cntritem.hxx>
      42                 :            : #include <editeng/prszitem.hxx>
      43                 :            : #include <editeng/colritem.hxx>
      44                 :            : #include <editeng/cscoitem.hxx>
      45                 :            : #include <editeng/kernitem.hxx>
      46                 :            : #include <editeng/cmapitem.hxx>
      47                 :            : #include <editeng/escpitem.hxx>
      48                 :            : #include <editeng/langitem.hxx>
      49                 :            : #include <editeng/nlbkitem.hxx>
      50                 :            : #include <editeng/nhypitem.hxx>
      51                 :            : #include <editeng/lcolitem.hxx>
      52                 :            : #include <editeng/blnkitem.hxx>
      53                 :            : #include <editeng/emphitem.hxx>
      54                 :            : #include <editeng/twolinesitem.hxx>
      55                 :            : #include <editeng/pbinitem.hxx>
      56                 :            : #include <editeng/sizeitem.hxx>
      57                 :            : #include <editeng/lrspitem.hxx>
      58                 :            : #include <editeng/ulspitem.hxx>
      59                 :            : #include <editeng/prntitem.hxx>
      60                 :            : #include <editeng/opaqitem.hxx>
      61                 :            : #include <editeng/protitem.hxx>
      62                 :            : #include <editeng/shaditem.hxx>
      63                 :            : #include <editeng/boxitem.hxx>
      64                 :            : #include <editeng/brkitem.hxx>
      65                 :            : #include <editeng/keepitem.hxx>
      66                 :            : #include <editeng/bolnitem.hxx>
      67                 :            : #include <editeng/brshitem.hxx>
      68                 :            : #include <editeng/lspcitem.hxx>
      69                 :            : #include <editeng/adjitem.hxx>
      70                 :            : #include <editeng/orphitem.hxx>
      71                 :            : #include <editeng/widwitem.hxx>
      72                 :            : #include <editeng/tstpitem.hxx>
      73                 :            : #include <editeng/pmdlitem.hxx>
      74                 :            : #include <editeng/spltitem.hxx>
      75                 :            : #include <editeng/hyznitem.hxx>
      76                 :            : #include <editeng/charscaleitem.hxx>
      77                 :            : #include <editeng/charrotateitem.hxx>
      78                 :            : #include <editeng/charreliefitem.hxx>
      79                 :            : #include <editeng/paravertalignitem.hxx>
      80                 :            : #include <editeng/forbiddenruleitem.hxx>
      81                 :            : #include <editeng/hngpnctitem.hxx>
      82                 :            : #include <editeng/scriptspaceitem.hxx>
      83                 :            : #include <editeng/frmdiritem.hxx>
      84                 :            : #include <editeng/charhiddenitem.hxx>
      85                 :            : 
      86                 :            : #include <svtools/rtftoken.h>
      87                 :            : #include <svl/itempool.hxx>
      88                 :            : #include <svl/itemiter.hxx>
      89                 :            : 
      90                 :            : #include <editeng/svxrtf.hxx>
      91                 :            : #include <editeng/editids.hrc>
      92                 :            : 
      93                 :            : #define BRACELEFT   '{'
      94                 :            : #define BRACERIGHT  '}'
      95                 :            : 
      96                 :            : using namespace ::com::sun::star;
      97                 :            : using namespace editeng;
      98                 :            : 
      99                 :            : // Some helper functions
     100                 :            : // char
     101                 :          0 : inline const SvxEscapementItem& GetEscapement(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True)
     102                 :          0 :     { return (const SvxEscapementItem&)rSet.Get( nId,bInP); }
     103                 :          0 : inline const SvxLineSpacingItem& GetLineSpacing(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True)
     104                 :          0 :     { return (const SvxLineSpacingItem&)rSet.Get( nId,bInP); }
     105                 :            : // frm
     106                 :          0 : inline const SvxLRSpaceItem& GetLRSpace(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True)
     107                 :          0 :     { return (const SvxLRSpaceItem&)rSet.Get( nId,bInP); }
     108                 :          0 : inline const SvxULSpaceItem& GetULSpace(const SfxItemSet& rSet,sal_uInt16 nId,sal_Bool bInP=sal_True)
     109                 :          0 :     { return (const SvxULSpaceItem&)rSet.Get( nId,bInP); }
     110                 :            : 
     111                 :            : #define PARDID      ((RTFPardAttrMapIds*)&aPardMap[0])
     112                 :            : #define PLAINID     ((RTFPlainAttrMapIds*)&aPlainMap[0])
     113                 :            : 
     114                 :          0 : void SvxRTFParser::SetScriptAttr( RTF_CharTypeDef eType, SfxItemSet& rSet,
     115                 :            :                                     SfxPoolItem& rItem )
     116                 :            : {
     117                 :          0 :     const sal_uInt16 *pNormal = 0, *pCJK = 0, *pCTL = 0;
     118                 :          0 :     const RTFPlainAttrMapIds* pIds = (RTFPlainAttrMapIds*)&aPlainMap[0];
     119   [ #  #  #  #  :          0 :     switch( rItem.Which() )
                #  #  # ]
     120                 :            :     {
     121                 :            :     case SID_ATTR_CHAR_FONT:
     122                 :          0 :         pNormal = &pIds->nFont;
     123                 :          0 :         pCJK = &pIds->nCJKFont;
     124                 :          0 :         pCTL = &pIds->nCTLFont;
     125                 :          0 :         break;
     126                 :            : 
     127                 :            :     case SID_ATTR_CHAR_FONTHEIGHT:
     128                 :          0 :         pNormal = &pIds->nFontHeight;
     129                 :          0 :         pCJK = &pIds->nCJKFontHeight;
     130                 :          0 :         pCTL = &pIds->nCTLFontHeight;
     131                 :          0 :         break;
     132                 :            : 
     133                 :            :     case SID_ATTR_CHAR_POSTURE:
     134                 :          0 :         pNormal = &pIds->nPosture;
     135                 :          0 :         pCJK = &pIds->nCJKPosture;
     136                 :          0 :         pCTL = &pIds->nCTLPosture;
     137                 :          0 :         break;
     138                 :            : 
     139                 :            :     case SID_ATTR_CHAR_WEIGHT:
     140                 :          0 :         pNormal = &pIds->nWeight;
     141                 :          0 :         pCJK = &pIds->nCJKWeight;
     142                 :          0 :         pCTL = &pIds->nCTLWeight;
     143                 :          0 :         break;
     144                 :            : 
     145                 :            :     case SID_ATTR_CHAR_LANGUAGE:
     146                 :          0 :         pNormal = &pIds->nLanguage;
     147                 :          0 :         pCJK = &pIds->nCJKLanguage;
     148                 :          0 :         pCTL = &pIds->nCTLLanguage;
     149                 :          0 :         break;
     150                 :            : 
     151                 :            :     case 0:
     152                 :            :         // it exist no WhichId - don't set this item
     153                 :          0 :         break;
     154                 :            : 
     155                 :            :     default:
     156                 :          0 :        rSet.Put( rItem );
     157                 :          0 :        break;
     158                 :            :     }
     159                 :            : 
     160                 :            : 
     161         [ #  # ]:          0 :     if( DOUBLEBYTE_CHARTYPE == eType )
     162                 :            :     {
     163 [ #  # ][ #  # ]:          0 :         if( bIsLeftToRightDef && *pCJK )
     164                 :            :         {
     165                 :          0 :             rItem.SetWhich( *pCJK );
     166                 :          0 :             rSet.Put( rItem );
     167                 :            :         }
     168                 :            :     }
     169         [ #  # ]:          0 :     else if( !bIsLeftToRightDef )
     170                 :            :     {
     171         [ #  # ]:          0 :         if( *pCTL )
     172                 :            :         {
     173                 :          0 :             rItem.SetWhich( *pCTL );
     174                 :          0 :             rSet.Put( rItem );
     175                 :            :         }
     176                 :            :     }
     177                 :            :     else
     178                 :            :     {
     179         [ #  # ]:          0 :         if( LOW_CHARTYPE == eType )
     180                 :            :         {
     181         [ #  # ]:          0 :             if( *pNormal )
     182                 :            :             {
     183                 :          0 :                 rItem.SetWhich( *pNormal );
     184                 :          0 :                 rSet.Put( rItem );
     185                 :            :             }
     186                 :            :         }
     187         [ #  # ]:          0 :         else if( HIGH_CHARTYPE == eType )
     188                 :            :         {
     189         [ #  # ]:          0 :             if( *pCTL )
     190                 :            :             {
     191                 :          0 :                 rItem.SetWhich( *pCTL );
     192                 :          0 :                 rSet.Put( rItem );
     193                 :            :             }
     194                 :            :         }
     195                 :            :         else
     196                 :            :         {
     197         [ #  # ]:          0 :             if( *pCJK )
     198                 :            :             {
     199                 :          0 :                 rItem.SetWhich( *pCJK );
     200                 :          0 :                 rSet.Put( rItem );
     201                 :            :             }
     202         [ #  # ]:          0 :             if( *pCTL )
     203                 :            :             {
     204                 :          0 :                 rItem.SetWhich( *pCTL );
     205                 :          0 :                 rSet.Put( rItem );
     206                 :            :             }
     207         [ #  # ]:          0 :             if( *pNormal )
     208                 :            :             {
     209                 :          0 :                 rItem.SetWhich( *pNormal );
     210                 :          0 :                 rSet.Put( rItem );
     211                 :            :             }
     212                 :            :         }
     213                 :            :     }
     214                 :          0 : }
     215                 :            : 
     216                 :            : // --------------------
     217                 :            : 
     218                 :          0 : void SvxRTFParser::ReadAttr( int nToken, SfxItemSet* pSet )
     219                 :            : {
     220                 :            :     DBG_ASSERT( pSet, "A SfxItemSet has to be provided as argument!" );
     221                 :          0 :     int bFirstToken = sal_True, bWeiter = sal_True;
     222                 :          0 :     sal_uInt16 nStyleNo = 0;        // default
     223                 :            :     FontUnderline eUnderline;
     224                 :            :     FontUnderline eOverline;
     225                 :            :     FontEmphasisMark eEmphasis;
     226                 :          0 :     bPardTokenRead = sal_False;
     227                 :          0 :     RTF_CharTypeDef eCharType = NOTDEF_CHARTYPE;
     228                 :            :     sal_uInt16 nFontAlign;
     229                 :            : 
     230 [ #  # ][ #  # ]:          0 :     int bChkStkPos = !bNewGroup && !aAttrStack.empty();
     231                 :            : 
     232 [ #  # ][ #  # ]:          0 :     while( bWeiter && IsParserWorking() )  // as long as known Attribute are recognized
                 [ #  # ]
     233                 :            :     {
     234      [ #  #  # ]:          0 :         switch( nToken )
     235                 :            :         {
     236                 :            :         case RTF_PARD:
     237                 :          0 :             RTFPardPlain( sal_True, &pSet );
     238                 :          0 :             ResetPard();
     239                 :          0 :             nStyleNo = 0;
     240                 :          0 :             bPardTokenRead = sal_True;
     241                 :          0 :             break;
     242                 :            : 
     243                 :            :         case RTF_PLAIN:
     244                 :          0 :             RTFPardPlain( sal_False, &pSet );
     245                 :          0 :             break;
     246                 :            : 
     247                 :            :         default:
     248                 :            :             do {        // middle checked loop
     249         [ #  # ]:          0 :                 if( !bChkStkPos )
     250                 :          0 :                     break;
     251                 :            : 
     252         [ #  # ]:          0 :                 SvxRTFItemStackType* pAkt = aAttrStack.empty() ? 0 : aAttrStack.back();
     253         [ #  # ]:          0 :                 if( !pAkt || (pAkt->pSttNd->GetIdx() == pInsPos->GetNodeIdx() &&
           [ #  #  #  # ]
                 [ #  # ]
     254                 :          0 :                     pAkt->nSttCnt == pInsPos->GetCntIdx() ))
     255                 :          0 :                     break;
     256                 :            : 
     257                 :          0 :                 int nLastToken = GetStackPtr(-1)->nTokenId;
     258 [ #  # ][ #  # ]:          0 :                 if( RTF_PARD == nLastToken || RTF_PLAIN == nLastToken )
     259                 :          0 :                     break;
     260                 :            : 
     261 [ #  # ][ #  # ]:          0 :                 if( pAkt->aAttrSet.Count() || pAkt->pChildList ||
         [ #  # ][ #  # ]
     262                 :            :                     pAkt->nStyleNo )
     263                 :            :                 {
     264                 :            :                     // Open a new Group
     265                 :            :                     SvxRTFItemStackType* pNew = new SvxRTFItemStackType(
     266 [ #  # ][ #  # ]:          0 :                                                 *pAkt, *pInsPos, sal_True );
     267 [ #  # ][ #  # ]:          0 :                     pNew->SetRTFDefaults( GetRTFDefaults() );
     268                 :            : 
     269                 :            :                     // "Set" all valid attributes up until this point
     270         [ #  # ]:          0 :                     AttrGroupEnd();
     271 [ #  # ][ #  # ]:          0 :                     pAkt = aAttrStack.empty() ? 0 : aAttrStack.back();  // can be changed after AttrGroupEnd!
     272         [ #  # ]:          0 :                     pNew->aAttrSet.SetParent( pAkt ? &pAkt->aAttrSet : 0 );
     273                 :            : 
     274         [ #  # ]:          0 :                     aAttrStack.push_back( pNew );
     275                 :          0 :                     pAkt = pNew;
     276                 :            :                 }
     277                 :            :                 else
     278                 :            :                     // continue to use this entry as a new one
     279                 :          0 :                     pAkt->SetStartPos( *pInsPos );
     280                 :            : 
     281                 :          0 :                 pSet = &pAkt->aAttrSet;
     282                 :            :             } while( sal_False );
     283                 :            : 
     284   [ #  #  #  #  :          0 :             switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
     285                 :            :             {
     286                 :            :             case RTF_INTBL:
     287                 :            :             case RTF_PAGEBB:
     288                 :            :             case RTF_SBYS:
     289                 :            :             case RTF_CS:
     290                 :            :             case RTF_LS:
     291                 :            :             case RTF_ILVL:
     292                 :          0 :                     UnknownAttrToken( nToken, pSet );
     293                 :          0 :                     break;
     294                 :            : 
     295                 :            :             case RTF_S:
     296         [ #  # ]:          0 :                 if( bIsInReadStyleTab )
     297                 :            :                 {
     298         [ #  # ]:          0 :                     if( !bFirstToken )
     299                 :          0 :                         SkipToken( -1 );
     300                 :          0 :                     bWeiter = sal_False;
     301                 :            :                 }
     302                 :            :                 else
     303                 :            :                 {
     304         [ #  # ]:          0 :                     nStyleNo = -1 == nTokenValue ? 0 : sal_uInt16(nTokenValue);
     305                 :            :                     // setze am akt. auf dem AttrStack stehenden Style die
     306                 :            :                     // StyleNummer
     307         [ #  # ]:          0 :                     SvxRTFItemStackType* pAkt = aAttrStack.empty() ? 0 : aAttrStack.back();
     308         [ #  # ]:          0 :                     if( !pAkt )
     309                 :          0 :                         break;
     310                 :            : 
     311                 :          0 :                     pAkt->nStyleNo = sal_uInt16( nStyleNo );
     312                 :            : 
     313                 :            :                 }
     314                 :          0 :                 break;
     315                 :            : 
     316                 :            :             case RTF_KEEP:
     317         [ #  # ]:          0 :                 if( PARDID->nSplit )
     318                 :            :                 {
     319         [ #  # ]:          0 :                     pSet->Put( SvxFmtSplitItem( sal_False, PARDID->nSplit ));
     320                 :            :                 }
     321                 :          0 :                 break;
     322                 :            : 
     323                 :            :             case RTF_KEEPN:
     324         [ #  # ]:          0 :                 if( PARDID->nKeep )
     325                 :            :                 {
     326         [ #  # ]:          0 :                     pSet->Put( SvxFmtKeepItem( sal_True, PARDID->nKeep ));
     327                 :            :                 }
     328                 :          0 :                 break;
     329                 :            : 
     330                 :            :             case RTF_LEVEL:
     331         [ #  # ]:          0 :                 if( PARDID->nOutlineLvl )
     332                 :            :                 {
     333                 :          0 :                     pSet->Put( SfxUInt16Item( PARDID->nOutlineLvl,
     334         [ #  # ]:          0 :                                                 (sal_uInt16)nTokenValue ));
     335                 :            :                 }
     336                 :          0 :                 break;
     337                 :            : 
     338                 :            :             case RTF_QL:
     339         [ #  # ]:          0 :                 if( PARDID->nAdjust )
     340                 :            :                 {
     341         [ #  # ]:          0 :                     pSet->Put( SvxAdjustItem( SVX_ADJUST_LEFT, PARDID->nAdjust ));
     342                 :            :                 }
     343                 :          0 :                 break;
     344                 :            :             case RTF_QR:
     345         [ #  # ]:          0 :                 if( PARDID->nAdjust )
     346                 :            :                 {
     347         [ #  # ]:          0 :                     pSet->Put( SvxAdjustItem( SVX_ADJUST_RIGHT, PARDID->nAdjust ));
     348                 :            :                 }
     349                 :          0 :                 break;
     350                 :            :             case RTF_QJ:
     351         [ #  # ]:          0 :                 if( PARDID->nAdjust )
     352                 :            :                 {
     353         [ #  # ]:          0 :                     pSet->Put( SvxAdjustItem( SVX_ADJUST_BLOCK, PARDID->nAdjust ));
     354                 :            :                 }
     355                 :          0 :                 break;
     356                 :            :             case RTF_QC:
     357         [ #  # ]:          0 :                 if( PARDID->nAdjust )
     358                 :            :                 {
     359         [ #  # ]:          0 :                     pSet->Put( SvxAdjustItem( SVX_ADJUST_CENTER, PARDID->nAdjust ));
     360                 :            :                 }
     361                 :          0 :                 break;
     362                 :            : 
     363                 :            :             case RTF_FI:
     364         [ #  # ]:          0 :                 if( PARDID->nLRSpace )
     365                 :            :                 {
     366 [ #  # ][ #  # ]:          0 :                     SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace ));
                 [ #  # ]
     367                 :          0 :                     sal_uInt16 nSz = 0;
     368         [ #  # ]:          0 :                     if( -1 != nTokenValue )
     369                 :            :                     {
     370         [ #  # ]:          0 :                         if( IsCalcValue() )
     371         [ #  # ]:          0 :                             CalcValue();
     372                 :          0 :                         nSz = sal_uInt16(nTokenValue);
     373                 :            :                     }
     374         [ #  # ]:          0 :                     aLR.SetTxtFirstLineOfst( nSz );
     375 [ #  # ][ #  # ]:          0 :                     pSet->Put( aLR );
     376                 :            :                 }
     377                 :          0 :                 break;
     378                 :            : 
     379                 :            :             case RTF_LI:
     380                 :            :             case RTF_LIN:
     381         [ #  # ]:          0 :                 if( PARDID->nLRSpace )
     382                 :            :                 {
     383 [ #  # ][ #  # ]:          0 :                     SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace ));
                 [ #  # ]
     384                 :          0 :                     sal_uInt16 nSz = 0;
     385         [ #  # ]:          0 :                     if( 0 < nTokenValue )
     386                 :            :                     {
     387         [ #  # ]:          0 :                         if( IsCalcValue() )
     388         [ #  # ]:          0 :                             CalcValue();
     389                 :          0 :                         nSz = sal_uInt16(nTokenValue);
     390                 :            :                     }
     391         [ #  # ]:          0 :                     aLR.SetTxtLeft( nSz );
     392 [ #  # ][ #  # ]:          0 :                     pSet->Put( aLR );
     393                 :            :                 }
     394                 :          0 :                 break;
     395                 :            : 
     396                 :            :             case RTF_RI:
     397                 :            :             case RTF_RIN:
     398         [ #  # ]:          0 :                 if( PARDID->nLRSpace )
     399                 :            :                 {
     400 [ #  # ][ #  # ]:          0 :                     SvxLRSpaceItem aLR( GetLRSpace(*pSet, PARDID->nLRSpace ));
                 [ #  # ]
     401                 :          0 :                     sal_uInt16 nSz = 0;
     402         [ #  # ]:          0 :                     if( 0 < nTokenValue )
     403                 :            :                     {
     404         [ #  # ]:          0 :                         if( IsCalcValue() )
     405         [ #  # ]:          0 :                             CalcValue();
     406                 :          0 :                         nSz = sal_uInt16(nTokenValue);
     407                 :            :                     }
     408                 :          0 :                     aLR.SetRight( nSz );
     409 [ #  # ][ #  # ]:          0 :                     pSet->Put( aLR );
     410                 :            :                 }
     411                 :          0 :                 break;
     412                 :            : 
     413                 :            :             case RTF_SB:
     414         [ #  # ]:          0 :                 if( PARDID->nULSpace )
     415                 :            :                 {
     416 [ #  # ][ #  # ]:          0 :                     SvxULSpaceItem aUL( GetULSpace(*pSet, PARDID->nULSpace ));
                 [ #  # ]
     417                 :          0 :                     sal_uInt16 nSz = 0;
     418         [ #  # ]:          0 :                     if( 0 < nTokenValue )
     419                 :            :                     {
     420         [ #  # ]:          0 :                         if( IsCalcValue() )
     421         [ #  # ]:          0 :                             CalcValue();
     422                 :          0 :                         nSz = sal_uInt16(nTokenValue);
     423                 :            :                     }
     424                 :          0 :                     aUL.SetUpper( nSz );
     425 [ #  # ][ #  # ]:          0 :                     pSet->Put( aUL );
     426                 :            :                 }
     427                 :          0 :                 break;
     428                 :            : 
     429                 :            :             case RTF_SA:
     430         [ #  # ]:          0 :                 if( PARDID->nULSpace )
     431                 :            :                 {
     432 [ #  # ][ #  # ]:          0 :                     SvxULSpaceItem aUL( GetULSpace(*pSet, PARDID->nULSpace ));
                 [ #  # ]
     433                 :          0 :                     sal_uInt16 nSz = 0;
     434         [ #  # ]:          0 :                     if( 0 < nTokenValue )
     435                 :            :                     {
     436         [ #  # ]:          0 :                         if( IsCalcValue() )
     437         [ #  # ]:          0 :                             CalcValue();
     438                 :          0 :                         nSz = sal_uInt16(nTokenValue);
     439                 :            :                     }
     440                 :          0 :                     aUL.SetLower( nSz );
     441 [ #  # ][ #  # ]:          0 :                     pSet->Put( aUL );
     442                 :            :                 }
     443                 :          0 :                 break;
     444                 :            : 
     445                 :            :             case RTF_SLMULT:
     446 [ #  # ][ #  # ]:          0 :                 if( PARDID->nLinespacing && 1 == nTokenValue )
                 [ #  # ]
     447                 :            :                 {
     448                 :            :                     // then switches to multi-line!
     449                 :            :                     SvxLineSpacingItem aLSpace( GetLineSpacing( *pSet,
     450 [ #  # ][ #  # ]:          0 :                                                 PARDID->nLinespacing, sal_False ));
                 [ #  # ]
     451                 :            : 
     452                 :            :                     // how much do you get from the line height value?
     453                 :            : 
     454                 :            :                     // Proportional-Size:
     455                 :            :                     // Ie, the ratio is (n / 240) twips
     456                 :            : 
     457                 :          0 :                     nTokenValue = 240;
     458         [ #  # ]:          0 :                     if( IsCalcValue() )
     459         [ #  # ]:          0 :                         CalcValue();
     460                 :            : 
     461                 :          0 :                     nTokenValue = short( 100L * aLSpace.GetLineHeight()
     462                 :          0 :                                             / long( nTokenValue ) );
     463                 :            : 
     464         [ #  # ]:          0 :                     if( nTokenValue > 200 )     // Data value for PropLnSp
     465                 :          0 :                         nTokenValue = 200;      // is one BYTE !!!
     466                 :            : 
     467                 :          0 :                     aLSpace.SetPropLineSpace( (const sal_uInt8)nTokenValue );
     468                 :          0 :                     aLSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
     469                 :            : 
     470 [ #  # ][ #  # ]:          0 :                     pSet->Put( aLSpace );
     471                 :            :                 }
     472                 :          0 :                 break;
     473                 :            : 
     474                 :            :             case RTF_SL:
     475         [ #  # ]:          0 :                 if( PARDID->nLinespacing )
     476                 :            :                 {
     477                 :            :                     // Calculate the ratio between the default font and the
     478                 :            :                     // specified size. The distance consists of the line height
     479                 :            :                     // (100%) and the space above the line (20%).
     480 [ #  # ][ #  # ]:          0 :                     SvxLineSpacingItem aLSpace(0, PARDID->nLinespacing);
     481                 :            : 
     482         [ #  # ]:          0 :                     nTokenValue = !bTokenHasValue ? 0 : nTokenValue;
     483         [ #  # ]:          0 :                     if (1000 == nTokenValue )
     484                 :          0 :                         nTokenValue = 240;
     485                 :            : 
     486                 :            :                     SvxLineSpace eLnSpc;
     487         [ #  # ]:          0 :                     if (nTokenValue < 0)
     488                 :            :                     {
     489                 :          0 :                         eLnSpc = SVX_LINE_SPACE_FIX;
     490                 :          0 :                         nTokenValue = -nTokenValue;
     491                 :            :                     }
     492         [ #  # ]:          0 :                     else if (nTokenValue == 0)
     493                 :            :                     {
     494                 :            :                         //if \sl0 is used, the line spacing is automatically
     495                 :            :                         //determined
     496                 :          0 :                         eLnSpc = SVX_LINE_SPACE_AUTO;
     497                 :            :                     }
     498                 :            :                     else
     499                 :          0 :                         eLnSpc = SVX_LINE_SPACE_MIN;
     500                 :            : 
     501         [ #  # ]:          0 :                     if (IsCalcValue())
     502         [ #  # ]:          0 :                         CalcValue();
     503                 :            : 
     504         [ #  # ]:          0 :                     if (eLnSpc != SVX_LINE_SPACE_AUTO)
     505                 :          0 :                         aLSpace.SetLineHeight( (const sal_uInt16)nTokenValue );
     506                 :            : 
     507                 :          0 :                     aLSpace.GetLineSpaceRule() = eLnSpc;
     508 [ #  # ][ #  # ]:          0 :                     pSet->Put(aLSpace);
     509                 :            :                 }
     510                 :          0 :                 break;
     511                 :            : 
     512                 :            :             case RTF_NOCWRAP:
     513         [ #  # ]:          0 :                 if( PARDID->nForbRule )
     514                 :            :                 {
     515                 :            :                     pSet->Put( SvxForbiddenRuleItem( sal_False,
     516         [ #  # ]:          0 :                                                     PARDID->nForbRule ));
     517                 :            :                 }
     518                 :          0 :                 break;
     519                 :            :             case RTF_NOOVERFLOW:
     520         [ #  # ]:          0 :                 if( PARDID->nHangPunct )
     521                 :            :                 {
     522                 :            :                     pSet->Put( SvxHangingPunctuationItem( sal_False,
     523         [ #  # ]:          0 :                                                     PARDID->nHangPunct ));
     524                 :            :                 }
     525                 :          0 :                 break;
     526                 :            : 
     527                 :            :             case RTF_ASPALPHA:
     528         [ #  # ]:          0 :                 if( PARDID->nScriptSpace )
     529                 :            :                 {
     530                 :            :                     pSet->Put( SvxScriptSpaceItem( sal_True,
     531         [ #  # ]:          0 :                                                 PARDID->nScriptSpace ));
     532                 :            :                 }
     533                 :          0 :                 break;
     534                 :            : 
     535                 :            :             case RTF_FAFIXED:
     536                 :          0 :             case RTF_FAAUTO:    nFontAlign = SvxParaVertAlignItem::AUTOMATIC;
     537                 :          0 :                                 goto SET_FONTALIGNMENT;
     538                 :          0 :             case RTF_FAHANG:    nFontAlign = SvxParaVertAlignItem::TOP;
     539                 :          0 :                                 goto SET_FONTALIGNMENT;
     540                 :          0 :             case RTF_FAVAR:     nFontAlign = SvxParaVertAlignItem::BOTTOM;
     541                 :          0 :                                 goto SET_FONTALIGNMENT;
     542                 :          0 :             case RTF_FACENTER:  nFontAlign = SvxParaVertAlignItem::CENTER;
     543                 :          0 :                                 goto SET_FONTALIGNMENT;
     544                 :          0 :             case RTF_FAROMAN:   nFontAlign = SvxParaVertAlignItem::BASELINE;
     545                 :          0 :                                 goto SET_FONTALIGNMENT;
     546                 :            : SET_FONTALIGNMENT:
     547         [ #  # ]:          0 :             if( PARDID->nFontAlign )
     548                 :            :             {
     549                 :            :                 pSet->Put( SvxParaVertAlignItem( nFontAlign,
     550         [ #  # ]:          0 :                                                 PARDID->nFontAlign ));
     551                 :            :             }
     552                 :          0 :             break;
     553                 :            : 
     554                 :            :             case RTF_B:
     555                 :            :             case RTF_AB:
     556         [ #  # ]:          0 :                 if( IsAttrSttPos() )    // not in the text flow?
     557                 :            :                 {
     558                 :            : 
     559                 :            :                     SvxWeightItem aTmpItem(
     560                 :            :                                     nTokenValue ? WEIGHT_BOLD : WEIGHT_NORMAL,
     561 [ #  # ][ #  # ]:          0 :                                     SID_ATTR_CHAR_WEIGHT );
     562 [ #  # ][ #  # ]:          0 :                     SetScriptAttr( eCharType, *pSet, aTmpItem);
     563                 :            :                 }
     564                 :          0 :                 break;
     565                 :            : 
     566                 :            :             case RTF_CAPS:
     567                 :            :             case RTF_SCAPS:
     568   [ #  #  #  # ]:          0 :                 if( PLAINID->nCaseMap &&
                 [ #  # ]
     569                 :          0 :                     IsAttrSttPos() )        // not in the text flow?
     570                 :            :                 {
     571                 :            :                     SvxCaseMap eCaseMap;
     572         [ #  # ]:          0 :                     if( !nTokenValue )
     573                 :          0 :                         eCaseMap = SVX_CASEMAP_NOT_MAPPED;
     574         [ #  # ]:          0 :                     else if( RTF_CAPS == nToken )
     575                 :          0 :                         eCaseMap = SVX_CASEMAP_VERSALIEN;
     576                 :            :                     else
     577                 :          0 :                         eCaseMap = SVX_CASEMAP_KAPITAELCHEN;
     578                 :            : 
     579         [ #  # ]:          0 :                     pSet->Put( SvxCaseMapItem( eCaseMap, PLAINID->nCaseMap ));
     580                 :            :                 }
     581                 :          0 :                 break;
     582                 :            : 
     583                 :            :             case RTF_DN:
     584                 :            :             case RTF_SUB:
     585         [ #  # ]:          0 :                 if( PLAINID->nEscapement )
     586                 :            :                 {
     587                 :          0 :                     const sal_uInt16 nEsc = PLAINID->nEscapement;
     588 [ #  # ][ #  # ]:          0 :                     if( -1 == nTokenValue || RTF_SUB == nToken )
     589                 :          0 :                         nTokenValue = 6;
     590         [ #  # ]:          0 :                     if( IsCalcValue() )
     591                 :          0 :                         CalcValue();
     592                 :          0 :                     const SvxEscapementItem& rOld = GetEscapement( *pSet, nEsc, sal_False );
     593                 :            :                     short nEs;
     594                 :            :                     sal_uInt8 nProp;
     595         [ #  # ]:          0 :                     if( DFLT_ESC_AUTO_SUPER == rOld.GetEsc() )
     596                 :            :                     {
     597                 :          0 :                         nEs = DFLT_ESC_AUTO_SUB;
     598                 :          0 :                         nProp = rOld.GetProp();
     599                 :            :                     }
     600                 :            :                     else
     601                 :            :                     {
     602                 :          0 :                         nEs = (short)-nTokenValue;
     603         [ #  # ]:          0 :                         nProp = (nToken == RTF_SUB) ? DFLT_ESC_PROP : 100;
     604                 :            :                     }
     605         [ #  # ]:          0 :                     pSet->Put( SvxEscapementItem( nEs, nProp, nEsc ));
     606                 :            :                 }
     607                 :          0 :                 break;
     608                 :            : 
     609                 :            :             case RTF_NOSUPERSUB:
     610         [ #  # ]:          0 :                 if( PLAINID->nEscapement )
     611                 :            :                 {
     612                 :          0 :                     const sal_uInt16 nEsc = PLAINID->nEscapement;
     613         [ #  # ]:          0 :                     pSet->Put( SvxEscapementItem( nEsc ));
     614                 :            :                 }
     615                 :          0 :                 break;
     616                 :            : 
     617                 :            :             case RTF_EXPND:
     618         [ #  # ]:          0 :                 if( PLAINID->nKering )
     619                 :            :                 {
     620         [ #  # ]:          0 :                     if( -1 == nTokenValue )
     621                 :          0 :                         nTokenValue = 0;
     622                 :            :                     else
     623                 :          0 :                         nTokenValue *= 5;
     624         [ #  # ]:          0 :                     if( IsCalcValue() )
     625                 :          0 :                         CalcValue();
     626         [ #  # ]:          0 :                     pSet->Put( SvxKerningItem( (short)nTokenValue, PLAINID->nKering ));
     627                 :            :                 }
     628                 :          0 :                 break;
     629                 :            : 
     630                 :            :             case RTF_KERNING:
     631         [ #  # ]:          0 :                 if( PLAINID->nAutoKerning )
     632                 :            :                 {
     633         [ #  # ]:          0 :                     if( -1 == nTokenValue )
     634                 :          0 :                         nTokenValue = 0;
     635                 :            :                     else
     636                 :          0 :                         nTokenValue *= 10;
     637         [ #  # ]:          0 :                     if( IsCalcValue() )
     638                 :          0 :                         CalcValue();
     639                 :            :                     pSet->Put( SvxAutoKernItem( 0 != nTokenValue,
     640         [ #  # ]:          0 :                                                 PLAINID->nAutoKerning ));
     641                 :            :                 }
     642                 :          0 :                 break;
     643                 :            : 
     644                 :            :             case RTF_EXPNDTW:
     645         [ #  # ]:          0 :                 if( PLAINID->nKering )
     646                 :            :                 {
     647         [ #  # ]:          0 :                     if( -1 == nTokenValue )
     648                 :          0 :                         nTokenValue = 0;
     649         [ #  # ]:          0 :                     if( IsCalcValue() )
     650                 :          0 :                         CalcValue();
     651         [ #  # ]:          0 :                     pSet->Put( SvxKerningItem( (short)nTokenValue, PLAINID->nKering ));
     652                 :            :                 }
     653                 :          0 :                 break;
     654                 :            : 
     655                 :            :             case RTF_F:
     656                 :            :             case RTF_AF:
     657                 :            :                 {
     658         [ #  # ]:          0 :                     const Font& rSVFont = GetFont( sal_uInt16(nTokenValue) );
     659                 :            :                     SvxFontItem aTmpItem( rSVFont.GetFamily(),
     660 [ #  # ][ #  # ]:          0 :                                     rSVFont.GetName(), rSVFont.GetStyleName(),
     661         [ #  # ]:          0 :                                     rSVFont.GetPitch(), rSVFont.GetCharSet(),
     662 [ #  # ][ #  # ]:          0 :                                     SID_ATTR_CHAR_FONT );
                 [ #  # ]
     663         [ #  # ]:          0 :                     SetScriptAttr( eCharType, *pSet, aTmpItem );
     664         [ #  # ]:          0 :                     if( RTF_F == nToken )
     665                 :            :                     {
     666 [ #  # ][ #  # ]:          0 :                         SetEncoding( rSVFont.GetCharSet() );
     667         [ #  # ]:          0 :                         RereadLookahead();
     668         [ #  # ]:          0 :                     }
     669                 :            :                 }
     670                 :          0 :                 break;
     671                 :            : 
     672                 :            :             case RTF_FS:
     673                 :            :             case RTF_AFS:
     674                 :            :                 {
     675         [ #  # ]:          0 :                     if( -1 == nTokenValue )
     676                 :          0 :                         nTokenValue = 240;
     677                 :            :                     else
     678                 :          0 :                         nTokenValue *= 10;
     679                 :            : // #i66167#
     680                 :            : // for the SwRTFParser 'IsCalcValue' will be false and for the EditRTFParser
     681                 :            : // the converiosn takes now place in EditRTFParser since for other reasons
     682                 :            : // the wrong MapUnit might still be use there
     683                 :            : //                   if( IsCalcValue() )
     684                 :            : //                       CalcValue();
     685                 :            :                     SvxFontHeightItem aTmpItem(
     686                 :            :                             (const sal_uInt16)nTokenValue, 100,
     687         [ #  # ]:          0 :                             SID_ATTR_CHAR_FONTHEIGHT );
     688 [ #  # ][ #  # ]:          0 :                     SetScriptAttr( eCharType, *pSet, aTmpItem );
     689                 :            :                 }
     690                 :          0 :                 break;
     691                 :            : 
     692                 :            :             case RTF_I:
     693                 :            :             case RTF_AI:
     694         [ #  # ]:          0 :                 if( IsAttrSttPos() )        // not in the text flow?
     695                 :            :                 {
     696                 :            :                     SvxPostureItem aTmpItem(
     697                 :            :                                     nTokenValue ? ITALIC_NORMAL : ITALIC_NONE,
     698 [ #  # ][ #  # ]:          0 :                                     SID_ATTR_CHAR_POSTURE );
     699 [ #  # ][ #  # ]:          0 :                     SetScriptAttr( eCharType, *pSet, aTmpItem );
     700                 :            :                 }
     701                 :          0 :                 break;
     702                 :            : 
     703                 :            :             case RTF_OUTL:
     704   [ #  #  #  # ]:          0 :                 if( PLAINID->nContour &&
                 [ #  # ]
     705                 :          0 :                     IsAttrSttPos() )        // not in the text flow?
     706                 :            :                 {
     707                 :            :                     pSet->Put( SvxContourItem( nTokenValue ? sal_True : sal_False,
     708 [ #  # ][ #  # ]:          0 :                                 PLAINID->nContour ));
     709                 :            :                 }
     710                 :          0 :                 break;
     711                 :            : 
     712                 :            :             case RTF_SHAD:
     713   [ #  #  #  # ]:          0 :                 if( PLAINID->nShadowed &&
                 [ #  # ]
     714                 :          0 :                     IsAttrSttPos() )        // not in the text flow?
     715                 :            :                 {
     716                 :            :                     pSet->Put( SvxShadowedItem( nTokenValue ? sal_True : sal_False,
     717 [ #  # ][ #  # ]:          0 :                                 PLAINID->nShadowed ));
     718                 :            :                 }
     719                 :          0 :                 break;
     720                 :            : 
     721                 :            :             case RTF_STRIKE:
     722   [ #  #  #  # ]:          0 :                 if( PLAINID->nCrossedOut &&
                 [ #  # ]
     723                 :          0 :                     IsAttrSttPos() )        // not in the text flow?
     724                 :            :                 {
     725                 :            :                     pSet->Put( SvxCrossedOutItem(
     726                 :            :                         nTokenValue ? STRIKEOUT_SINGLE : STRIKEOUT_NONE,
     727 [ #  # ][ #  # ]:          0 :                         PLAINID->nCrossedOut ));
     728                 :            :                 }
     729                 :          0 :                 break;
     730                 :            : 
     731                 :            :             case RTF_STRIKED:
     732         [ #  # ]:          0 :                 if( PLAINID->nCrossedOut )      // not in the text flow?
     733                 :            :                 {
     734                 :            :                     pSet->Put( SvxCrossedOutItem(
     735                 :            :                         nTokenValue ? STRIKEOUT_DOUBLE : STRIKEOUT_NONE,
     736 [ #  # ][ #  # ]:          0 :                         PLAINID->nCrossedOut ));
     737                 :            :                 }
     738                 :          0 :                 break;
     739                 :            : 
     740                 :            :             case RTF_UL:
     741         [ #  # ]:          0 :                 if( !IsAttrSttPos() )
     742                 :          0 :                     break;
     743         [ #  # ]:          0 :                 eUnderline = nTokenValue ? UNDERLINE_SINGLE : UNDERLINE_NONE;
     744                 :          0 :                 goto ATTR_SETUNDERLINE;
     745                 :            : 
     746                 :            :             case RTF_ULD:
     747                 :          0 :                 eUnderline = UNDERLINE_DOTTED;
     748                 :          0 :                 goto ATTR_SETUNDERLINE;
     749                 :            :             case RTF_ULDASH:
     750                 :          0 :                 eUnderline = UNDERLINE_DASH;
     751                 :          0 :                 goto ATTR_SETUNDERLINE;
     752                 :            :             case RTF_ULDASHD:
     753                 :          0 :                 eUnderline = UNDERLINE_DASHDOT;
     754                 :          0 :                 goto ATTR_SETUNDERLINE;
     755                 :            :             case RTF_ULDASHDD:
     756                 :          0 :                 eUnderline = UNDERLINE_DASHDOTDOT;
     757                 :          0 :                 goto ATTR_SETUNDERLINE;
     758                 :            :             case RTF_ULDB:
     759                 :          0 :                 eUnderline = UNDERLINE_DOUBLE;
     760                 :          0 :                 goto ATTR_SETUNDERLINE;
     761                 :            :             case RTF_ULNONE:
     762                 :          0 :                 eUnderline = UNDERLINE_NONE;
     763                 :          0 :                 goto ATTR_SETUNDERLINE;
     764                 :            :             case RTF_ULTH:
     765                 :          0 :                 eUnderline = UNDERLINE_BOLD;
     766                 :          0 :                 goto ATTR_SETUNDERLINE;
     767                 :            :             case RTF_ULWAVE:
     768                 :          0 :                 eUnderline = UNDERLINE_WAVE;
     769                 :          0 :                 goto ATTR_SETUNDERLINE;
     770                 :            :             case RTF_ULTHD:
     771                 :          0 :                 eUnderline = UNDERLINE_BOLDDOTTED;
     772                 :          0 :                 goto ATTR_SETUNDERLINE;
     773                 :            :             case RTF_ULTHDASH:
     774                 :          0 :                 eUnderline = UNDERLINE_BOLDDASH;
     775                 :          0 :                 goto ATTR_SETUNDERLINE;
     776                 :            :             case RTF_ULLDASH:
     777                 :          0 :                 eUnderline = UNDERLINE_LONGDASH;
     778                 :          0 :                 goto ATTR_SETUNDERLINE;
     779                 :            :             case RTF_ULTHLDASH:
     780                 :          0 :                 eUnderline = UNDERLINE_BOLDLONGDASH;
     781                 :          0 :                 goto ATTR_SETUNDERLINE;
     782                 :            :             case RTF_ULTHDASHD:
     783                 :          0 :                 eUnderline = UNDERLINE_BOLDDASHDOT;
     784                 :          0 :                 goto ATTR_SETUNDERLINE;
     785                 :            :             case RTF_ULTHDASHDD:
     786                 :          0 :                 eUnderline = UNDERLINE_BOLDDASHDOTDOT;
     787                 :          0 :                 goto ATTR_SETUNDERLINE;
     788                 :            :             case RTF_ULHWAVE:
     789                 :          0 :                 eUnderline = UNDERLINE_BOLDWAVE;
     790                 :          0 :                 goto ATTR_SETUNDERLINE;
     791                 :            :             case RTF_ULULDBWAVE:
     792                 :          0 :                 eUnderline = UNDERLINE_DOUBLEWAVE;
     793                 :          0 :                 goto ATTR_SETUNDERLINE;
     794                 :            : 
     795                 :            :             case RTF_ULW:
     796                 :          0 :                 eUnderline = UNDERLINE_SINGLE;
     797                 :            : 
     798         [ #  # ]:          0 :                 if( PLAINID->nWordlineMode )
     799                 :            :                 {
     800         [ #  # ]:          0 :                     pSet->Put( SvxWordLineModeItem( sal_True, PLAINID->nWordlineMode ));
     801                 :            :                 }
     802                 :          0 :                 goto ATTR_SETUNDERLINE;
     803                 :            : 
     804                 :            : ATTR_SETUNDERLINE:
     805         [ #  # ]:          0 :                 if( PLAINID->nUnderline )
     806                 :            :                 {
     807         [ #  # ]:          0 :                     pSet->Put( SvxUnderlineItem( eUnderline, PLAINID->nUnderline ));
     808                 :            :                 }
     809                 :          0 :                 break;
     810                 :            : 
     811                 :            :             case RTF_ULC:
     812         [ #  # ]:          0 :                 if( PLAINID->nUnderline )
     813                 :            :                 {
     814 [ #  # ][ #  # ]:          0 :                     SvxUnderlineItem aUL( UNDERLINE_SINGLE, PLAINID->nUnderline );
     815                 :            :                     const SfxPoolItem* pItem;
     816         [ #  # ]:          0 :                     if( SFX_ITEM_SET == pSet->GetItemState(
     817 [ #  # ][ #  # ]:          0 :                         PLAINID->nUnderline, sal_False, &pItem ) )
     818                 :            :                     {
     819                 :            :                         // is switched off ?
     820         [ #  # ]:          0 :                         if( UNDERLINE_NONE ==
     821                 :          0 :                             ((SvxUnderlineItem*)pItem)->GetLineStyle() )
     822                 :            :                             break;
     823         [ #  # ]:          0 :                         aUL = *(SvxUnderlineItem*)pItem;
     824                 :            :                     }
     825                 :            :                     else
     826 [ #  # ][ #  # ]:          0 :                         aUL = (const SvxUnderlineItem&)pSet->Get( PLAINID->nUnderline, sal_False );
                 [ #  # ]
     827                 :            : 
     828         [ #  # ]:          0 :                     if( UNDERLINE_NONE == aUL.GetLineStyle() )
     829                 :          0 :                         aUL.SetLineStyle( UNDERLINE_SINGLE );
     830         [ #  # ]:          0 :                     aUL.SetColor( GetColor( sal_uInt16(nTokenValue) ));
     831 [ #  # ][ #  # ]:          0 :                     pSet->Put( aUL );
                 [ #  # ]
     832                 :            :                 }
     833                 :          0 :                 break;
     834                 :            : 
     835                 :            :             case RTF_OL:
     836         [ #  # ]:          0 :                 if( !IsAttrSttPos() )
     837                 :          0 :                     break;
     838         [ #  # ]:          0 :                 eOverline = nTokenValue ? UNDERLINE_SINGLE : UNDERLINE_NONE;
     839                 :          0 :                 goto ATTR_SETOVERLINE;
     840                 :            : 
     841                 :            :             case RTF_OLD:
     842                 :          0 :                 eOverline = UNDERLINE_DOTTED;
     843                 :          0 :                 goto ATTR_SETOVERLINE;
     844                 :            :             case RTF_OLDASH:
     845                 :          0 :                 eOverline = UNDERLINE_DASH;
     846                 :          0 :                 goto ATTR_SETOVERLINE;
     847                 :            :             case RTF_OLDASHD:
     848                 :          0 :                 eOverline = UNDERLINE_DASHDOT;
     849                 :          0 :                 goto ATTR_SETOVERLINE;
     850                 :            :             case RTF_OLDASHDD:
     851                 :          0 :                 eOverline = UNDERLINE_DASHDOTDOT;
     852                 :          0 :                 goto ATTR_SETOVERLINE;
     853                 :            :             case RTF_OLDB:
     854                 :          0 :                 eOverline = UNDERLINE_DOUBLE;
     855                 :          0 :                 goto ATTR_SETOVERLINE;
     856                 :            :             case RTF_OLNONE:
     857                 :          0 :                 eOverline = UNDERLINE_NONE;
     858                 :          0 :                 goto ATTR_SETOVERLINE;
     859                 :            :             case RTF_OLTH:
     860                 :          0 :                 eOverline = UNDERLINE_BOLD;
     861                 :          0 :                 goto ATTR_SETOVERLINE;
     862                 :            :             case RTF_OLWAVE:
     863                 :          0 :                 eOverline = UNDERLINE_WAVE;
     864                 :          0 :                 goto ATTR_SETOVERLINE;
     865                 :            :             case RTF_OLTHD:
     866                 :          0 :                 eOverline = UNDERLINE_BOLDDOTTED;
     867                 :          0 :                 goto ATTR_SETOVERLINE;
     868                 :            :             case RTF_OLTHDASH:
     869                 :          0 :                 eOverline = UNDERLINE_BOLDDASH;
     870                 :          0 :                 goto ATTR_SETOVERLINE;
     871                 :            :             case RTF_OLLDASH:
     872                 :          0 :                 eOverline = UNDERLINE_LONGDASH;
     873                 :          0 :                 goto ATTR_SETOVERLINE;
     874                 :            :             case RTF_OLTHLDASH:
     875                 :          0 :                 eOverline = UNDERLINE_BOLDLONGDASH;
     876                 :          0 :                 goto ATTR_SETOVERLINE;
     877                 :            :             case RTF_OLTHDASHD:
     878                 :          0 :                 eOverline = UNDERLINE_BOLDDASHDOT;
     879                 :          0 :                 goto ATTR_SETOVERLINE;
     880                 :            :             case RTF_OLTHDASHDD:
     881                 :          0 :                 eOverline = UNDERLINE_BOLDDASHDOTDOT;
     882                 :          0 :                 goto ATTR_SETOVERLINE;
     883                 :            :             case RTF_OLHWAVE:
     884                 :          0 :                 eOverline = UNDERLINE_BOLDWAVE;
     885                 :          0 :                 goto ATTR_SETOVERLINE;
     886                 :            :             case RTF_OLOLDBWAVE:
     887                 :          0 :                 eOverline = UNDERLINE_DOUBLEWAVE;
     888                 :          0 :                 goto ATTR_SETOVERLINE;
     889                 :            : 
     890                 :            :             case RTF_OLW:
     891                 :          0 :                 eOverline = UNDERLINE_SINGLE;
     892                 :            : 
     893         [ #  # ]:          0 :                 if( PLAINID->nWordlineMode )
     894                 :            :                 {
     895         [ #  # ]:          0 :                     pSet->Put( SvxWordLineModeItem( sal_True, PLAINID->nWordlineMode ));
     896                 :            :                 }
     897                 :          0 :                 goto ATTR_SETOVERLINE;
     898                 :            : 
     899                 :            : ATTR_SETOVERLINE:
     900         [ #  # ]:          0 :                 if( PLAINID->nUnderline )
     901                 :            :                 {
     902         [ #  # ]:          0 :                     pSet->Put( SvxOverlineItem( eOverline, PLAINID->nOverline ));
     903                 :            :                 }
     904                 :          0 :                 break;
     905                 :            : 
     906                 :            :             case RTF_OLC:
     907         [ #  # ]:          0 :                 if( PLAINID->nOverline )
     908                 :            :                 {
     909 [ #  # ][ #  # ]:          0 :                     SvxOverlineItem aOL( UNDERLINE_SINGLE, PLAINID->nOverline );
     910                 :            :                     const SfxPoolItem* pItem;
     911         [ #  # ]:          0 :                     if( SFX_ITEM_SET == pSet->GetItemState(
     912 [ #  # ][ #  # ]:          0 :                         PLAINID->nOverline, sal_False, &pItem ) )
     913                 :            :                     {
     914                 :            :                         // is switched off ?
     915         [ #  # ]:          0 :                         if( UNDERLINE_NONE ==
     916                 :          0 :                             ((SvxOverlineItem*)pItem)->GetLineStyle() )
     917                 :            :                             break;
     918         [ #  # ]:          0 :                         aOL = *(SvxOverlineItem*)pItem;
     919                 :            :                     }
     920                 :            :                     else
     921 [ #  # ][ #  # ]:          0 :                         aOL = (const SvxOverlineItem&)pSet->Get( PLAINID->nUnderline, sal_False );
                 [ #  # ]
     922                 :            : 
     923         [ #  # ]:          0 :                     if( UNDERLINE_NONE == aOL.GetLineStyle() )
     924                 :          0 :                         aOL.SetLineStyle( UNDERLINE_SINGLE );
     925         [ #  # ]:          0 :                     aOL.SetColor( GetColor( sal_uInt16(nTokenValue) ));
     926 [ #  # ][ #  # ]:          0 :                     pSet->Put( aOL );
                 [ #  # ]
     927                 :            :                 }
     928                 :          0 :                 break;
     929                 :            : 
     930                 :            :             case RTF_UP:
     931                 :            :             case RTF_SUPER:
     932         [ #  # ]:          0 :                 if( PLAINID->nEscapement )
     933                 :            :                 {
     934                 :          0 :                     const sal_uInt16 nEsc = PLAINID->nEscapement;
     935 [ #  # ][ #  # ]:          0 :                     if( -1 == nTokenValue || RTF_SUPER == nToken )
     936                 :          0 :                         nTokenValue = 6;
     937         [ #  # ]:          0 :                     if( IsCalcValue() )
     938                 :          0 :                         CalcValue();
     939                 :          0 :                     const SvxEscapementItem& rOld = GetEscapement( *pSet, nEsc, sal_False );
     940                 :            :                     short nEs;
     941                 :            :                     sal_uInt8 nProp;
     942         [ #  # ]:          0 :                     if( DFLT_ESC_AUTO_SUB == rOld.GetEsc() )
     943                 :            :                     {
     944                 :          0 :                         nEs = DFLT_ESC_AUTO_SUPER;
     945                 :          0 :                         nProp = rOld.GetProp();
     946                 :            :                     }
     947                 :            :                     else
     948                 :            :                     {
     949                 :          0 :                         nEs = (short)nTokenValue;
     950         [ #  # ]:          0 :                         nProp = (nToken == RTF_SUPER) ? DFLT_ESC_PROP : 100;
     951                 :            :                     }
     952         [ #  # ]:          0 :                     pSet->Put( SvxEscapementItem( nEs, nProp, nEsc ));
     953                 :            :                 }
     954                 :          0 :                 break;
     955                 :            : 
     956                 :            :             case RTF_CF:
     957         [ #  # ]:          0 :                 if( PLAINID->nColor )
     958                 :            :                 {
     959                 :          0 :                     pSet->Put( SvxColorItem( GetColor( sal_uInt16(nTokenValue) ),
     960         [ #  # ]:          0 :                                 PLAINID->nColor ));
     961                 :            :                 }
     962                 :          0 :                 break;
     963                 :            :             //#i12501# While cb is clearly documented in the rtf spec, word
     964                 :            :             //doesn't accept it at all
     965                 :            : #if 0
     966                 :            :             case RTF_CB:
     967                 :            :                 if( PLAINID->nBgColor )
     968                 :            :                 {
     969                 :            :                     pSet->Put( SvxBrushItem( GetColor( sal_uInt16(nTokenValue) ),
     970                 :            :                                 PLAINID->nBgColor ));
     971                 :            :                 }
     972                 :            :                 break;
     973                 :            : #endif
     974                 :            : 
     975                 :            :             case RTF_LANG:
     976         [ #  # ]:          0 :                 if( PLAINID->nLanguage )
     977                 :            :                 {
     978                 :            :                     pSet->Put( SvxLanguageItem( (LanguageType)nTokenValue,
     979         [ #  # ]:          0 :                                 PLAINID->nLanguage ));
     980                 :            :                 }
     981                 :          0 :                 break;
     982                 :            : 
     983                 :            :             case RTF_LANGFE:
     984         [ #  # ]:          0 :                 if( PLAINID->nCJKLanguage )
     985                 :            :                 {
     986                 :            :                     pSet->Put( SvxLanguageItem( (LanguageType)nTokenValue,
     987         [ #  # ]:          0 :                                                 PLAINID->nCJKLanguage ));
     988                 :            :                 }
     989                 :          0 :                 break;
     990                 :            :             case RTF_ALANG:
     991                 :            :                 {
     992                 :            :                     SvxLanguageItem aTmpItem( (LanguageType)nTokenValue,
     993         [ #  # ]:          0 :                                     SID_ATTR_CHAR_LANGUAGE );
     994 [ #  # ][ #  # ]:          0 :                     SetScriptAttr( eCharType, *pSet, aTmpItem );
     995                 :            :                 }
     996                 :          0 :                 break;
     997                 :            : 
     998                 :            :             case RTF_RTLCH:
     999                 :          0 :                 bIsLeftToRightDef = sal_False;
    1000                 :          0 :                 break;
    1001                 :            :             case RTF_LTRCH:
    1002                 :          0 :                 bIsLeftToRightDef = sal_True;
    1003                 :          0 :                 break;
    1004                 :            :             case RTF_RTLPAR:
    1005         [ #  # ]:          0 :                 if (PARDID->nDirection)
    1006                 :            :                 {
    1007                 :            :                     pSet->Put(SvxFrameDirectionItem(FRMDIR_HORI_RIGHT_TOP,
    1008         [ #  # ]:          0 :                         PARDID->nDirection));
    1009                 :            :                 }
    1010                 :          0 :                 break;
    1011                 :            :             case RTF_LTRPAR:
    1012         [ #  # ]:          0 :                 if (PARDID->nDirection)
    1013                 :            :                 {
    1014                 :            :                     pSet->Put(SvxFrameDirectionItem(FRMDIR_HORI_LEFT_TOP,
    1015         [ #  # ]:          0 :                         PARDID->nDirection));
    1016                 :            :                 }
    1017                 :          0 :                 break;
    1018                 :          0 :             case RTF_LOCH:      eCharType = LOW_CHARTYPE;           break;
    1019                 :          0 :             case RTF_HICH:      eCharType = HIGH_CHARTYPE;          break;
    1020                 :          0 :             case RTF_DBCH:      eCharType = DOUBLEBYTE_CHARTYPE;    break;
    1021                 :            : 
    1022                 :            : 
    1023                 :            :             case RTF_ACCNONE:
    1024                 :          0 :                 eEmphasis = EMPHASISMARK_NONE;
    1025                 :          0 :                 goto ATTR_SETEMPHASIS;
    1026                 :            :             case RTF_ACCDOT:
    1027                 :          0 :                 eEmphasis = EMPHASISMARK_DOTS_ABOVE;
    1028                 :          0 :                 goto ATTR_SETEMPHASIS;
    1029                 :            : 
    1030                 :            :             case RTF_ACCCOMMA:
    1031                 :          0 :                 eEmphasis = EMPHASISMARK_SIDE_DOTS;
    1032                 :            : ATTR_SETEMPHASIS:
    1033         [ #  # ]:          0 :                 if( PLAINID->nEmphasis )
    1034                 :            :                 {
    1035                 :            :                     pSet->Put( SvxEmphasisMarkItem( eEmphasis,
    1036         [ #  # ]:          0 :                                                        PLAINID->nEmphasis ));
    1037                 :            :                 }
    1038                 :          0 :                 break;
    1039                 :            : 
    1040                 :            :             case RTF_TWOINONE:
    1041         [ #  # ]:          0 :                 if( PLAINID->nTwoLines )
    1042                 :            :                 {
    1043                 :            :                     sal_Unicode cStt, cEnd;
    1044   [ #  #  #  #  :          0 :                     switch ( nTokenValue )
                      # ]
    1045                 :            :                     {
    1046                 :          0 :                     case 1: cStt = '(', cEnd = ')'; break;
    1047                 :          0 :                     case 2: cStt = '[', cEnd = ']'; break;
    1048                 :          0 :                     case 3: cStt = '<', cEnd = '>'; break;
    1049                 :          0 :                     case 4: cStt = '{', cEnd = '}'; break;
    1050                 :          0 :                     default: cStt = 0, cEnd = 0; break;
    1051                 :            :                     }
    1052                 :            : 
    1053                 :            :                     pSet->Put( SvxTwoLinesItem( sal_True, cStt, cEnd,
    1054         [ #  # ]:          0 :                                                        PLAINID->nTwoLines ));
    1055                 :            :                 }
    1056                 :          0 :                 break;
    1057                 :            : 
    1058                 :            :             case RTF_CHARSCALEX :
    1059         [ #  # ]:          0 :                 if (PLAINID->nCharScaleX)
    1060                 :            :                 {
    1061                 :            :                     //i21372
    1062 [ #  # ][ #  # ]:          0 :                     if (nTokenValue < 1 || nTokenValue > 600)
    1063                 :          0 :                         nTokenValue = 100;
    1064                 :            :                     pSet->Put( SvxCharScaleWidthItem( sal_uInt16(nTokenValue),
    1065         [ #  # ]:          0 :                                                        PLAINID->nCharScaleX ));
    1066                 :            :                 }
    1067                 :          0 :                 break;
    1068                 :            : 
    1069                 :            :             case RTF_HORZVERT:
    1070         [ #  # ]:          0 :                 if( PLAINID->nHorzVert )
    1071                 :            :                 {
    1072                 :            :                     // RTF knows only 90deg
    1073                 :            :                     pSet->Put( SvxCharRotateItem( 900, 1 == nTokenValue,
    1074         [ #  # ]:          0 :                                                        PLAINID->nHorzVert ));
    1075                 :            :                 }
    1076                 :          0 :                 break;
    1077                 :            : 
    1078                 :            :             case RTF_EMBO:
    1079         [ #  # ]:          0 :                 if (PLAINID->nRelief)
    1080                 :            :                 {
    1081                 :            :                     pSet->Put(SvxCharReliefItem(RELIEF_EMBOSSED,
    1082         [ #  # ]:          0 :                         PLAINID->nRelief));
    1083                 :            :                 }
    1084                 :          0 :                 break;
    1085                 :            :             case RTF_IMPR:
    1086         [ #  # ]:          0 :                 if (PLAINID->nRelief)
    1087                 :            :                 {
    1088                 :            :                     pSet->Put(SvxCharReliefItem(RELIEF_ENGRAVED,
    1089         [ #  # ]:          0 :                         PLAINID->nRelief));
    1090                 :            :                 }
    1091                 :          0 :                 break;
    1092                 :            :             case RTF_V:
    1093         [ #  # ]:          0 :                 if (PLAINID->nHidden)
    1094                 :            :                 {
    1095                 :            :                     pSet->Put(SvxCharHiddenItem(nTokenValue != 0,
    1096         [ #  # ]:          0 :                         PLAINID->nHidden));
    1097                 :            :                 }
    1098                 :          0 :                 break;
    1099                 :            :             case RTF_CHBGFDIAG:
    1100                 :            :             case RTF_CHBGDKVERT:
    1101                 :            :             case RTF_CHBGDKHORIZ:
    1102                 :            :             case RTF_CHBGVERT:
    1103                 :            :             case RTF_CHBGHORIZ:
    1104                 :            :             case RTF_CHBGDKFDIAG:
    1105                 :            :             case RTF_CHBGDCROSS:
    1106                 :            :             case RTF_CHBGCROSS:
    1107                 :            :             case RTF_CHBGBDIAG:
    1108                 :            :             case RTF_CHBGDKDCROSS:
    1109                 :            :             case RTF_CHBGDKCROSS:
    1110                 :            :             case RTF_CHBGDKBDIAG:
    1111                 :            :             case RTF_CHCBPAT:
    1112                 :            :             case RTF_CHCFPAT:
    1113                 :            :             case RTF_CHSHDNG:
    1114         [ #  # ]:          0 :                 if( PLAINID->nBgColor )
    1115                 :          0 :                     ReadBackgroundAttr( nToken, *pSet );
    1116                 :          0 :                 break;
    1117                 :            : 
    1118                 :            :             case BRACELEFT:
    1119                 :            :                 {
    1120                 :            :                     // tests on Swg internal tokens
    1121                 :          0 :                     bool bHandled = false;
    1122                 :          0 :                     short nSkip = 0;
    1123         [ #  # ]:          0 :                     if( RTF_IGNOREFLAG != GetNextToken())
    1124                 :          0 :                         nSkip = -1;
    1125         [ #  # ]:          0 :                     else if( (nToken = GetNextToken() ) & RTF_SWGDEFS )
    1126                 :            :                     {
    1127                 :          0 :                         bHandled = true;
    1128   [ #  #  #  #  :          0 :                         switch( nToken )
                      # ]
    1129                 :            :                         {
    1130                 :            :                         case RTF_PGDSCNO:
    1131                 :            :                         case RTF_PGBRK:
    1132                 :            :                         case RTF_SOUTLVL:
    1133                 :          0 :                             UnknownAttrToken( nToken, pSet );
    1134                 :            :                             // overwrite the closing parenthesis
    1135                 :          0 :                             break;
    1136                 :            : 
    1137                 :            :                         case RTF_SWG_ESCPROP:
    1138                 :            :                             {
    1139                 :            :                                 // Store percentage change!
    1140                 :          0 :                                 sal_uInt8 nProp = sal_uInt8( nTokenValue / 100 );
    1141                 :          0 :                                 short nEsc = 0;
    1142         [ #  # ]:          0 :                                 if( 1 == ( nTokenValue % 100 ))
    1143                 :            :                                     // Recognize own auto-flags!
    1144                 :          0 :                                     nEsc = DFLT_ESC_AUTO_SUPER;
    1145                 :            : 
    1146         [ #  # ]:          0 :                                 if( PLAINID->nEscapement )
    1147                 :            :                                     pSet->Put( SvxEscapementItem( nEsc, nProp,
    1148         [ #  # ]:          0 :                                                        PLAINID->nEscapement ));
    1149                 :            :                             }
    1150                 :          0 :                             break;
    1151                 :            : 
    1152                 :            :                         case RTF_HYPHEN:
    1153                 :            :                             {
    1154                 :            :                                 SvxHyphenZoneItem aHypenZone(
    1155                 :            :                                             (nTokenValue & 1) ? sal_True : sal_False,
    1156 [ #  # ][ #  # ]:          0 :                                                 PARDID->nHyphenzone );
    1157                 :            :                                 aHypenZone.SetPageEnd(
    1158         [ #  # ]:          0 :                                             (nTokenValue & 2) ? sal_True : sal_False );
    1159                 :            : 
    1160 [ #  # ][ #  # ]:          0 :                                 if( PARDID->nHyphenzone &&
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    1161         [ #  # ]:          0 :                                     RTF_HYPHLEAD == GetNextToken() &&
    1162         [ #  # ]:          0 :                                     RTF_HYPHTRAIL == GetNextToken() &&
    1163         [ #  # ]:          0 :                                     RTF_HYPHMAX == GetNextToken() )
    1164                 :            :                                 {
    1165                 :          0 :                                     aHypenZone.GetMinLead() =
    1166         [ #  # ]:          0 :                                         sal_uInt8(GetStackPtr( -2 )->nTokenValue);
    1167                 :          0 :                                     aHypenZone.GetMinTrail() =
    1168         [ #  # ]:          0 :                                             sal_uInt8(GetStackPtr( -1 )->nTokenValue);
    1169                 :          0 :                                     aHypenZone.GetMaxHyphens() =
    1170                 :          0 :                                             sal_uInt8(nTokenValue);
    1171                 :            : 
    1172         [ #  # ]:          0 :                                     pSet->Put( aHypenZone );
    1173                 :            :                                 }
    1174                 :            :                                 else
    1175 [ #  # ][ #  # ]:          0 :                                     SkipGroup();  // at the end of the group
    1176                 :            :                             }
    1177                 :          0 :                             break;
    1178                 :            : 
    1179                 :            :                         case RTF_SHADOW:
    1180                 :            :                             {
    1181                 :          0 :                                 int bSkip = sal_True;
    1182                 :            :                                 do {    // middle check loop
    1183                 :          0 :                                     SvxShadowLocation eSL = SvxShadowLocation( nTokenValue );
    1184 [ #  # ][ #  # ]:          0 :                                     if( RTF_SHDW_DIST != GetNextToken() )
    1185                 :            :                                         break;
    1186                 :          0 :                                     sal_uInt16 nDist = sal_uInt16( nTokenValue );
    1187                 :            : 
    1188 [ #  # ][ #  # ]:          0 :                                     if( RTF_SHDW_STYLE != GetNextToken() )
    1189                 :            :                                         break;
    1190                 :            : 
    1191 [ #  # ][ #  # ]:          0 :                                     if( RTF_SHDW_COL != GetNextToken() )
    1192                 :            :                                         break;
    1193                 :          0 :                                     sal_uInt16 nCol = sal_uInt16( nTokenValue );
    1194                 :            : 
    1195 [ #  # ][ #  # ]:          0 :                                     if( RTF_SHDW_FCOL != GetNextToken() )
    1196                 :            :                                         break;
    1197                 :            : 
    1198         [ #  # ]:          0 :                                     Color aColor = GetColor( nCol );
    1199                 :            : 
    1200 [ #  # ][ #  # ]:          0 :                                     if( PARDID->nShadow )
    1201         [ #  # ]:          0 :                                         pSet->Put( SvxShadowItem( PARDID->nShadow,
    1202 [ #  # ][ #  # ]:          0 :                                                                   &aColor, nDist, eSL ) );
                 [ #  # ]
    1203                 :            : 
    1204                 :          0 :                                     bSkip = sal_False;
    1205                 :            :                                 } while( sal_False );
    1206                 :            : 
    1207         [ #  # ]:          0 :                                 if( bSkip )
    1208                 :          0 :                                     SkipGroup();  // at the end of the group
    1209                 :            :                             }
    1210                 :          0 :                             break;
    1211                 :            : 
    1212                 :            :                         default:
    1213                 :          0 :                             bHandled = false;
    1214         [ #  # ]:          0 :                             if( (nToken & ~(0xff | RTF_SWGDEFS)) == RTF_TABSTOPDEF )
    1215                 :            :                             {
    1216                 :          0 :                                 nToken = SkipToken( -2 );
    1217                 :          0 :                                 ReadTabAttr( nToken, *pSet );
    1218                 :            : 
    1219                 :            :                                 /*
    1220                 :            :                                 cmc: #i76140, he who consumed the { must consume the }
    1221                 :            :                                 We rewound to a state of { being the current
    1222                 :            :                                 token so it is our responsibility to consume the }
    1223                 :            :                                 token if we consumed the {. We will not have consumed
    1224                 :            :                                 the { if it belonged to our caller, i.e. if the { we
    1225                 :            :                                 are handling is the "firsttoken" passed to us then
    1226                 :            :                                 the *caller* must consume it, not us. Otherwise *we*
    1227                 :            :                                 should consume it.
    1228                 :            :                                 */
    1229 [ #  # ][ #  # ]:          0 :                                 if (nToken == BRACELEFT && !bFirstToken)
    1230                 :            :                                 {
    1231                 :          0 :                                     nToken = GetNextToken();
    1232                 :            :                                     DBG_ASSERT( nToken == BRACERIGHT,
    1233                 :            :                                         "} did not follow { as expected\n");
    1234                 :            :                                 }
    1235                 :            :                             }
    1236         [ #  # ]:          0 :                             else if( (nToken & ~(0xff| RTF_SWGDEFS)) == RTF_BRDRDEF)
    1237                 :            :                             {
    1238                 :          0 :                                 nToken = SkipToken( -2 );
    1239                 :          0 :                                 ReadBorderAttr( nToken, *pSet );
    1240                 :            :                             }
    1241                 :            :                             else        // so no more attribute
    1242                 :          0 :                                 nSkip = -2;
    1243                 :          0 :                             break;
    1244                 :            :                         }
    1245                 :            : 
    1246                 :            : #if 1
    1247                 :            :                         /*
    1248                 :            :                         cmc: #i4727# / #i12713# Who owns this closing bracket?
    1249                 :            :                         If we read the opening one, we must read this one, if
    1250                 :            :                         other is counting the brackets so as to push/pop off
    1251                 :            :                         the correct environment then we will have pushed a new
    1252                 :            :                         environment for the start { of this, but will not see
    1253                 :            :                         the } and so is out of sync for the rest of the
    1254                 :            :                         document.
    1255                 :            :                         */
    1256 [ #  # ][ #  # ]:          0 :                         if (bHandled && !bFirstToken)
    1257                 :          0 :                             GetNextToken();
    1258                 :            : #endif
    1259                 :            :                     }
    1260                 :            :                     else
    1261                 :          0 :                         nSkip = -2;
    1262                 :            : 
    1263         [ #  # ]:          0 :                     if( nSkip )             // all completely unknown
    1264                 :            :                     {
    1265         [ #  # ]:          0 :                         if (!bFirstToken)
    1266                 :          0 :                             --nSkip;    // BRACELEFT: is the next token
    1267                 :          0 :                         SkipToken( nSkip );
    1268                 :          0 :                         bWeiter = sal_False;
    1269                 :            :                     }
    1270                 :            :                 }
    1271                 :          0 :                 break;
    1272                 :            :             default:
    1273         [ #  # ]:          0 :                 if( (nToken & ~0xff ) == RTF_TABSTOPDEF )
    1274                 :          0 :                     ReadTabAttr( nToken, *pSet );
    1275         [ #  # ]:          0 :                 else if( (nToken & ~0xff ) == RTF_BRDRDEF )
    1276                 :          0 :                     ReadBorderAttr( nToken, *pSet );
    1277         [ #  # ]:          0 :                 else if( (nToken & ~0xff ) == RTF_SHADINGDEF )
    1278                 :          0 :                     ReadBackgroundAttr( nToken, *pSet );
    1279                 :            :                 else
    1280                 :            :                 {
    1281                 :            :                     // unknown token, so token "returned in Parser"
    1282         [ #  # ]:          0 :                     if( !bFirstToken )
    1283                 :          0 :                         SkipToken( -1 );
    1284                 :          0 :                     bWeiter = sal_False;
    1285                 :            :                 }
    1286                 :            :             }
    1287                 :            :         }
    1288         [ #  # ]:          0 :         if( bWeiter )
    1289                 :            :         {
    1290                 :          0 :             nToken = GetNextToken();
    1291                 :            :         }
    1292                 :          0 :         bFirstToken = sal_False;
    1293                 :            :     }
    1294                 :          0 : }
    1295                 :            : 
    1296                 :          0 : void SvxRTFParser::ReadTabAttr( int nToken, SfxItemSet& rSet )
    1297                 :            : {
    1298                 :          0 :     bool bMethodOwnsToken = false; // #i52542# patch from cmc.
    1299                 :            : // then read all the TabStops
    1300         [ #  # ]:          0 :     SvxTabStop aTabStop;
    1301 [ #  # ][ #  # ]:          0 :     SvxTabStopItem aAttr( 0, 0, SVX_TAB_ADJUST_DEFAULT, PARDID->nTabStop );
    1302                 :          0 :     int bWeiter = sal_True;
    1303         [ #  # ]:          0 :     do {
    1304   [ #  #  #  #  :          0 :         switch( nToken )
          #  #  #  #  #  
                #  #  # ]
    1305                 :            :         {
    1306                 :            :         case RTF_TB:        // BarTab ???
    1307                 :            :         case RTF_TX:
    1308                 :            :             {
    1309         [ #  # ]:          0 :                 if( IsCalcValue() )
    1310         [ #  # ]:          0 :                     CalcValue();
    1311                 :          0 :                 aTabStop.GetTabPos() = nTokenValue;
    1312         [ #  # ]:          0 :                 aAttr.Insert( aTabStop );
    1313         [ #  # ]:          0 :                 aTabStop = SvxTabStop();    // all values default
    1314                 :            :             }
    1315                 :          0 :             break;
    1316                 :            : 
    1317                 :            :         case RTF_TQL:
    1318                 :          0 :             aTabStop.GetAdjustment() = SVX_TAB_ADJUST_LEFT;
    1319                 :          0 :             break;
    1320                 :            :         case RTF_TQR:
    1321                 :          0 :             aTabStop.GetAdjustment() = SVX_TAB_ADJUST_RIGHT;
    1322                 :          0 :             break;
    1323                 :            :         case RTF_TQC:
    1324                 :          0 :             aTabStop.GetAdjustment() = SVX_TAB_ADJUST_CENTER;
    1325                 :          0 :             break;
    1326                 :            :         case RTF_TQDEC:
    1327                 :          0 :             aTabStop.GetAdjustment() = SVX_TAB_ADJUST_DECIMAL;
    1328                 :          0 :             break;
    1329                 :            : 
    1330                 :          0 :         case RTF_TLDOT:     aTabStop.GetFill() = '.';   break;
    1331                 :          0 :         case RTF_TLHYPH:    aTabStop.GetFill() = ' ';   break;
    1332                 :          0 :         case RTF_TLUL:      aTabStop.GetFill() = '_';   break;
    1333                 :          0 :         case RTF_TLTH:      aTabStop.GetFill() = '-';   break;
    1334                 :          0 :         case RTF_TLEQ:      aTabStop.GetFill() = '=';   break;
    1335                 :            : 
    1336                 :            :         case BRACELEFT:
    1337                 :            :             {
    1338                 :            :                 // Swg - control BRACELEFT RTF_IGNOREFLAG RTF_TLSWG BRACERIGHT
    1339                 :          0 :                 short nSkip = 0;
    1340 [ #  # ][ #  # ]:          0 :                 if( RTF_IGNOREFLAG != GetNextToken() )
    1341                 :          0 :                     nSkip = -1;
    1342 [ #  # ][ #  # ]:          0 :                 else if( RTF_TLSWG != ( nToken = GetNextToken() ))
    1343                 :          0 :                     nSkip = -2;
    1344                 :            :                 else
    1345                 :            :                 {
    1346         [ #  # ]:          0 :                     aTabStop.GetDecimal() = sal_uInt8(nTokenValue & 0xff);
    1347                 :          0 :                     aTabStop.GetFill() = sal_uInt8((nTokenValue >> 8) & 0xff);
    1348                 :            :                     // overwrite the closing parenthesis
    1349         [ #  # ]:          0 :                     if (bMethodOwnsToken)
    1350         [ #  # ]:          0 :                         GetNextToken();
    1351                 :            :                 }
    1352         [ #  # ]:          0 :                 if( nSkip )
    1353                 :            :                 {
    1354         [ #  # ]:          0 :                     SkipToken( nSkip );     // Ignore back again
    1355                 :          0 :                     bWeiter = sal_False;
    1356                 :            :                 }
    1357                 :            :             }
    1358                 :          0 :             break;
    1359                 :            : 
    1360                 :            :         default:
    1361                 :          0 :             bWeiter = sal_False;
    1362                 :            :         }
    1363         [ #  # ]:          0 :         if( bWeiter )
    1364                 :            :         {
    1365         [ #  # ]:          0 :             nToken = GetNextToken();
    1366                 :          0 :             bMethodOwnsToken = true;
    1367                 :            :         }
    1368                 :            :     } while( bWeiter );
    1369                 :            : 
    1370                 :            :     // Fill with defaults is still missing!
    1371         [ #  # ]:          0 :     rSet.Put( aAttr );
    1372 [ #  # ][ #  # ]:          0 :     SkipToken( -1 );
    1373                 :          0 : }
    1374                 :            : 
    1375                 :          0 : static void SetBorderLine( int nBorderTyp, SvxBoxItem& rItem,
    1376                 :            :                             const SvxBorderLine& rBorder )
    1377                 :            : {
    1378   [ #  #  #  #  :          0 :     switch( nBorderTyp )
                      # ]
    1379                 :            :     {
    1380                 :            :     case RTF_BOX:           // run through all levels
    1381                 :            : 
    1382                 :            :     case RTF_BRDRT:
    1383                 :          0 :         rItem.SetLine( &rBorder, BOX_LINE_TOP );
    1384         [ #  # ]:          0 :         if( RTF_BOX != nBorderTyp )
    1385                 :          0 :             return;
    1386                 :            : 
    1387                 :            :     case RTF_BRDRB:
    1388                 :          0 :         rItem.SetLine( &rBorder, BOX_LINE_BOTTOM );
    1389         [ #  # ]:          0 :         if( RTF_BOX != nBorderTyp )
    1390                 :          0 :             return;
    1391                 :            : 
    1392                 :            :     case RTF_BRDRL:
    1393                 :          0 :         rItem.SetLine( &rBorder, BOX_LINE_LEFT );
    1394         [ #  # ]:          0 :         if( RTF_BOX != nBorderTyp )
    1395                 :          0 :             return;
    1396                 :            : 
    1397                 :            :     case RTF_BRDRR:
    1398                 :          0 :         rItem.SetLine( &rBorder, BOX_LINE_RIGHT );
    1399         [ #  # ]:          0 :         if( RTF_BOX != nBorderTyp )
    1400                 :          0 :             return;
    1401                 :            :     }
    1402                 :            : }
    1403                 :            : 
    1404                 :          0 : void SvxRTFParser::ReadBorderAttr( int nToken, SfxItemSet& rSet,
    1405                 :            :                                     int bTableDef )
    1406                 :            : {
    1407                 :            :     // then read the border attribute
    1408 [ #  # ][ #  # ]:          0 :     SvxBoxItem aAttr( PARDID->nBox );
    1409                 :            :     const SfxPoolItem* pItem;
    1410 [ #  # ][ #  # ]:          0 :     if( SFX_ITEM_SET == rSet.GetItemState( PARDID->nBox, sal_False, &pItem ) )
                 [ #  # ]
    1411         [ #  # ]:          0 :         aAttr = *(SvxBoxItem*)pItem;
    1412                 :            : 
    1413         [ #  # ]:          0 :     SvxBorderLine aBrd( 0, DEF_LINE_WIDTH_0 );  // Simple plain line
    1414                 :          0 :     int bWeiter = sal_True, nBorderTyp = 0;
    1415                 :            : 
    1416                 :          0 :     long nWidth = 1;
    1417                 :          0 :     bool bDoubleWidth = false;
    1418                 :            : 
    1419         [ #  # ]:          0 :     do {
    1420   [ #  #  #  #  :          0 :         switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    1421                 :            :         {
    1422                 :            :         case RTF_BOX:
    1423                 :            :         case RTF_BRDRT:
    1424                 :            :         case RTF_BRDRB:
    1425                 :            :         case RTF_BRDRL:
    1426                 :            :         case RTF_BRDRR:
    1427                 :          0 :             nBorderTyp = nToken;
    1428                 :          0 :             break;
    1429                 :            : 
    1430                 :            :         case RTF_CLBRDRT:       // Cell top border
    1431                 :            :             {
    1432         [ #  # ]:          0 :                 if( bTableDef )
    1433                 :            :                 {
    1434         [ #  # ]:          0 :                     if (nBorderTyp != 0)
    1435         [ #  # ]:          0 :                         SetBorderLine( nBorderTyp, aAttr, aBrd );
    1436                 :          0 :                     nBorderTyp = RTF_BRDRT;
    1437                 :            :                 }
    1438                 :          0 :                 break;
    1439                 :            :             }
    1440                 :            :         case RTF_CLBRDRB:       // Cell bottom border
    1441                 :            :             {
    1442         [ #  # ]:          0 :                 if( bTableDef )
    1443                 :            :                 {
    1444         [ #  # ]:          0 :                     if (nBorderTyp != 0)
    1445         [ #  # ]:          0 :                         SetBorderLine( nBorderTyp, aAttr, aBrd );
    1446                 :          0 :                     nBorderTyp = RTF_BRDRB;
    1447                 :            :                 }
    1448                 :          0 :                 break;
    1449                 :            :             }
    1450                 :            :         case RTF_CLBRDRL:       // Cell left border
    1451                 :            :             {
    1452         [ #  # ]:          0 :                 if( bTableDef )
    1453                 :            :                 {
    1454         [ #  # ]:          0 :                     if (nBorderTyp != 0)
    1455         [ #  # ]:          0 :                         SetBorderLine( nBorderTyp, aAttr, aBrd );
    1456                 :          0 :                     nBorderTyp = RTF_BRDRL;
    1457                 :            :                 }
    1458                 :          0 :                 break;
    1459                 :            :             }
    1460                 :            :         case RTF_CLBRDRR:       // Cell right border
    1461                 :            :             {
    1462         [ #  # ]:          0 :                 if( bTableDef )
    1463                 :            :                 {
    1464         [ #  # ]:          0 :                     if (nBorderTyp != 0)
    1465         [ #  # ]:          0 :                         SetBorderLine( nBorderTyp, aAttr, aBrd );
    1466                 :          0 :                     nBorderTyp = RTF_BRDRR;
    1467                 :            :                 }
    1468                 :          0 :                 break;
    1469                 :            :             }
    1470                 :            : 
    1471                 :            :         case RTF_BRDRDOT:       // dotted border
    1472         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::DOTTED);
    1473                 :          0 :             break;
    1474                 :            :         case RTF_BRDRDASH:      // dashed border
    1475         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::DASHED);
    1476                 :          0 :             break;
    1477                 :            :         case RTF_BRDRHAIR:      // hairline border
    1478                 :            :             {
    1479         [ #  # ]:          0 :                 aBrd.SetBorderLineStyle( table::BorderLineStyle::SOLID);
    1480                 :          0 :                 aBrd.SetWidth( DEF_LINE_WIDTH_0 );
    1481                 :            :             }
    1482                 :          0 :             break;
    1483                 :            :         case RTF_BRDRDB:        // Double border
    1484         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::DOUBLE);
    1485                 :          0 :             break;
    1486                 :            :         case RTF_BRDRINSET:     // inset border
    1487         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::INSET);
    1488                 :          0 :             break;
    1489                 :            :         case RTF_BRDROUTSET:    // outset border
    1490         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::OUTSET);
    1491                 :          0 :             break;
    1492                 :            :         case RTF_BRDRTNTHSG:    // ThinThick Small gap
    1493         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THINTHICK_SMALLGAP);
    1494                 :          0 :             break;
    1495                 :            :         case RTF_BRDRTNTHMG:    // ThinThick Medium gap
    1496         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THINTHICK_MEDIUMGAP);
    1497                 :          0 :             break;
    1498                 :            :         case RTF_BRDRTNTHLG:    // ThinThick Large gap
    1499         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THINTHICK_LARGEGAP);
    1500                 :          0 :             break;
    1501                 :            :         case RTF_BRDRTHTNSG:    // ThickThin Small gap
    1502         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THICKTHIN_SMALLGAP);
    1503                 :          0 :             break;
    1504                 :            :         case RTF_BRDRTHTNMG:    // ThickThin Medium gap
    1505         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THICKTHIN_MEDIUMGAP);
    1506                 :          0 :             break;
    1507                 :            :         case RTF_BRDRTHTNLG:    // ThickThin Large gap
    1508         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::THICKTHIN_LARGEGAP);
    1509                 :          0 :             break;
    1510                 :            :         case RTF_BRDREMBOSS:    // Embossed border
    1511         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::EMBOSSED);
    1512                 :          0 :             break;
    1513                 :            :         case RTF_BRDRENGRAVE:   // Engraved border
    1514         [ #  # ]:          0 :             aBrd.SetBorderLineStyle(table::BorderLineStyle::ENGRAVED);
    1515                 :          0 :             break;
    1516                 :            : 
    1517                 :            :         case RTF_BRDRS:         // single thickness border
    1518                 :          0 :             bDoubleWidth = false;
    1519                 :          0 :             break;
    1520                 :            :         case RTF_BRDRTH:        // double thickness border width*2
    1521                 :          0 :             bDoubleWidth = true;
    1522                 :          0 :             break;
    1523                 :            :         case RTF_BRDRW:         // border width <255
    1524                 :          0 :             nWidth = nTokenValue;
    1525                 :          0 :            break;
    1526                 :            : 
    1527                 :            :         case RTF_BRDRCF:        // Border color
    1528         [ #  # ]:          0 :                 aBrd.SetColor( GetColor( sal_uInt16(nTokenValue) ) );
    1529                 :          0 :                 break;
    1530                 :            : 
    1531                 :            :         case RTF_BRDRSH:        // Shadowed border
    1532         [ #  # ]:          0 :                 rSet.Put( SvxShadowItem( PARDID->nShadow, (Color*) 0, 60 /*3pt*/,
    1533 [ #  # ][ #  # ]:          0 :                                         SVX_SHADOW_BOTTOMRIGHT ) );
                 [ #  # ]
    1534                 :          0 :                 break;
    1535                 :            : 
    1536                 :            :         case RTF_BRSP:          // Spacing to content in twip
    1537                 :            :             {
    1538   [ #  #  #  #  :          0 :                 switch( nBorderTyp )
                   #  # ]
    1539                 :            :                 {
    1540                 :            :                 case RTF_BRDRB:
    1541         [ #  # ]:          0 :                     aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_BOTTOM );
    1542                 :          0 :                     break;
    1543                 :            : 
    1544                 :            :                 case RTF_BRDRT:
    1545         [ #  # ]:          0 :                     aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_TOP );
    1546                 :          0 :                     break;
    1547                 :            : 
    1548                 :            :                 case RTF_BRDRL:
    1549         [ #  # ]:          0 :                     aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_LEFT );
    1550                 :          0 :                     break;
    1551                 :            : 
    1552                 :            :                 case RTF_BRDRR:
    1553         [ #  # ]:          0 :                     aAttr.SetDistance( (sal_uInt16)nTokenValue, BOX_LINE_RIGHT );
    1554                 :          0 :                     break;
    1555                 :            : 
    1556                 :            :                 case RTF_BOX:
    1557                 :          0 :                     aAttr.SetDistance( (sal_uInt16)nTokenValue );
    1558                 :          0 :                     break;
    1559                 :            :                 }
    1560                 :            :             }
    1561                 :          0 :             break;
    1562                 :            : 
    1563                 :            :         case RTF_BRDRBTW:       // Border formatting group
    1564                 :            :         case RTF_BRDRBAR:       // Border outside
    1565                 :            :             // TODO unhandled ATM
    1566                 :          0 :             break;
    1567                 :            : 
    1568                 :            :         default:
    1569                 :          0 :             bWeiter = (nToken & ~(0xff| RTF_SWGDEFS)) == RTF_BRDRDEF;
    1570                 :            :         }
    1571         [ #  # ]:          0 :         if( bWeiter )
    1572         [ #  # ]:          0 :             nToken = GetNextToken();
    1573                 :            :     } while( bWeiter );
    1574                 :            : 
    1575                 :            :     // Finally compute the border width
    1576         [ #  # ]:          0 :     if ( bDoubleWidth ) nWidth *= 2;
    1577                 :          0 :     aBrd.SetWidth( nWidth );
    1578                 :            : 
    1579         [ #  # ]:          0 :     SetBorderLine( nBorderTyp, aAttr, aBrd );
    1580                 :            : 
    1581         [ #  # ]:          0 :     rSet.Put( aAttr );
    1582 [ #  # ][ #  # ]:          0 :     SkipToken( -1 );
    1583                 :          0 : }
    1584                 :            : 
    1585                 :          0 : inline sal_uInt32 CalcShading( sal_uInt32 nColor, sal_uInt32 nFillColor, sal_uInt8 nShading )
    1586                 :            : {
    1587                 :          0 :     nColor = (nColor * nShading) / 100;
    1588                 :          0 :     nFillColor = (nFillColor * ( 100 - nShading )) / 100;
    1589                 :          0 :     return nColor + nFillColor;
    1590                 :            : }
    1591                 :            : 
    1592                 :          0 : void SvxRTFParser::ReadBackgroundAttr( int nToken, SfxItemSet& rSet,
    1593                 :            :                                         int bTableDef )
    1594                 :            : {
    1595                 :            :     // then read the border attribute
    1596                 :          0 :     int bWeiter = sal_True;
    1597                 :          0 :     sal_uInt16 nColor = USHRT_MAX, nFillColor = USHRT_MAX;
    1598                 :          0 :     sal_uInt8 nFillValue = 0;
    1599                 :            : 
    1600                 :            :     sal_uInt16 nWh = ( nToken & ~0xff ) == RTF_CHRFMT
    1601         [ #  # ]:          0 :                     ? PLAINID->nBgColor
    1602 [ #  # ][ #  # ]:          0 :                     : PARDID->nBrush;
    1603                 :            : 
    1604         [ #  # ]:          0 :     do {
    1605   [ #  #  #  #  :          0 :         switch( nToken )
                   #  # ]
    1606                 :            :         {
    1607                 :            :         case RTF_CLCBPAT:
    1608                 :            :         case RTF_CHCBPAT:
    1609                 :            :         case RTF_CBPAT:
    1610                 :          0 :             nFillColor = sal_uInt16( nTokenValue );
    1611                 :          0 :             break;
    1612                 :            : 
    1613                 :            :         case RTF_CLCFPAT:
    1614                 :            :         case RTF_CHCFPAT:
    1615                 :            :         case RTF_CFPAT:
    1616                 :          0 :             nColor = sal_uInt16( nTokenValue );
    1617                 :          0 :             break;
    1618                 :            : 
    1619                 :            :         case RTF_CLSHDNG:
    1620                 :            :         case RTF_CHSHDNG:
    1621                 :            :         case RTF_SHADING:
    1622                 :          0 :             nFillValue = (sal_uInt8)( nTokenValue / 100 );
    1623                 :          0 :             break;
    1624                 :            : 
    1625                 :            :         case RTF_CLBGDKHOR:
    1626                 :            :         case RTF_CHBGDKHORIZ:
    1627                 :            :         case RTF_BGDKHORIZ:
    1628                 :            :         case RTF_CLBGDKVERT:
    1629                 :            :         case RTF_CHBGDKVERT:
    1630                 :            :         case RTF_BGDKVERT:
    1631                 :            :         case RTF_CLBGDKBDIAG:
    1632                 :            :         case RTF_CHBGDKBDIAG:
    1633                 :            :         case RTF_BGDKBDIAG:
    1634                 :            :         case RTF_CLBGDKFDIAG:
    1635                 :            :         case RTF_CHBGDKFDIAG:
    1636                 :            :         case RTF_BGDKFDIAG:
    1637                 :            :         case RTF_CLBGDKCROSS:
    1638                 :            :         case RTF_CHBGDKCROSS:
    1639                 :            :         case RTF_BGDKCROSS:
    1640                 :            :         case RTF_CLBGDKDCROSS:
    1641                 :            :         case RTF_CHBGDKDCROSS:
    1642                 :            :         case RTF_BGDKDCROSS:
    1643                 :            :             // dark -> 60%
    1644                 :          0 :             nFillValue = 60;
    1645                 :          0 :             break;
    1646                 :            : 
    1647                 :            :         case RTF_CLBGHORIZ:
    1648                 :            :         case RTF_CHBGHORIZ:
    1649                 :            :         case RTF_BGHORIZ:
    1650                 :            :         case RTF_CLBGVERT:
    1651                 :            :         case RTF_CHBGVERT:
    1652                 :            :         case RTF_BGVERT:
    1653                 :            :         case RTF_CLBGBDIAG:
    1654                 :            :         case RTF_CHBGBDIAG:
    1655                 :            :         case RTF_BGBDIAG:
    1656                 :            :         case RTF_CLBGFDIAG:
    1657                 :            :         case RTF_CHBGFDIAG:
    1658                 :            :         case RTF_BGFDIAG:
    1659                 :            :         case RTF_CLBGCROSS:
    1660                 :            :         case RTF_CHBGCROSS:
    1661                 :            :         case RTF_BGCROSS:
    1662                 :            :         case RTF_CLBGDCROSS:
    1663                 :            :         case RTF_CHBGDCROSS:
    1664                 :            :         case RTF_BGDCROSS:
    1665                 :            :             // light -> 20%
    1666                 :          0 :             nFillValue = 20;
    1667                 :          0 :             break;
    1668                 :            : 
    1669                 :            :         default:
    1670         [ #  # ]:          0 :             if( bTableDef )
    1671                 :          0 :                 bWeiter = (nToken & ~(0xff | RTF_TABLEDEF) ) == RTF_SHADINGDEF;
    1672                 :            :             else
    1673                 :          0 :                 bWeiter = (nToken & ~0xff) == RTF_SHADINGDEF;
    1674                 :            :         }
    1675         [ #  # ]:          0 :         if( bWeiter )
    1676         [ #  # ]:          0 :             nToken = GetNextToken();
    1677                 :            :     } while( bWeiter );
    1678                 :            : 
    1679                 :          0 :     Color aCol( COL_WHITE ), aFCol;
    1680         [ #  # ]:          0 :     if( !nFillValue )
    1681                 :            :     {
    1682                 :            :         // there was only one of two colors specified or no BrushTyp
    1683         [ #  # ]:          0 :         if( USHRT_MAX != nFillColor )
    1684                 :            :         {
    1685                 :          0 :             nFillValue = 100;
    1686         [ #  # ]:          0 :             aCol = GetColor( nFillColor );
    1687                 :            :         }
    1688         [ #  # ]:          0 :         else if( USHRT_MAX != nColor )
    1689         [ #  # ]:          0 :             aFCol = GetColor( nColor );
    1690                 :            :     }
    1691                 :            :     else
    1692                 :            :     {
    1693         [ #  # ]:          0 :         if( USHRT_MAX != nColor )
    1694         [ #  # ]:          0 :             aCol = GetColor( nColor );
    1695                 :            :         else
    1696                 :          0 :             aCol = Color( COL_BLACK );
    1697                 :            : 
    1698         [ #  # ]:          0 :         if( USHRT_MAX != nFillColor )
    1699         [ #  # ]:          0 :             aFCol = GetColor( nFillColor );
    1700                 :            :         else
    1701                 :          0 :             aFCol = Color( COL_WHITE );
    1702                 :            :     }
    1703                 :            : 
    1704                 :          0 :     Color aColor;
    1705 [ #  # ][ #  # ]:          0 :     if( 0 == nFillValue || 100 == nFillValue )
    1706                 :          0 :         aColor = aCol;
    1707                 :            :     else
    1708                 :            :         aColor = Color(
    1709                 :          0 :             (sal_uInt8)CalcShading( aCol.GetRed(), aFCol.GetRed(), nFillValue ),
    1710                 :          0 :             (sal_uInt8)CalcShading( aCol.GetGreen(), aFCol.GetGreen(), nFillValue ),
    1711                 :          0 :             (sal_uInt8)CalcShading( aCol.GetBlue(), aFCol.GetBlue(), nFillValue ) );
    1712                 :            : 
    1713 [ #  # ][ #  # ]:          0 :     rSet.Put( SvxBrushItem( aColor, nWh ) );
                 [ #  # ]
    1714         [ #  # ]:          0 :     SkipToken( -1 );
    1715                 :          0 : }
    1716                 :            : 
    1717                 :            : 
    1718                 :            : // pard / plain abarbeiten
    1719                 :          0 : void SvxRTFParser::RTFPardPlain( int bPard, SfxItemSet** ppSet )
    1720                 :            : {
    1721 [ #  # ][ #  # ]:          0 :     if( !bNewGroup && !aAttrStack.empty() ) // not at the beginning of a new group
                 [ #  # ]
    1722                 :            :     {
    1723                 :          0 :         SvxRTFItemStackType* pAkt = aAttrStack.back();
    1724                 :            : 
    1725                 :          0 :         int nLastToken = GetStackPtr(-1)->nTokenId;
    1726                 :          0 :         int bNewStkEntry = sal_True;
    1727 [ #  # ][ #  # ]:          0 :         if( RTF_PARD != nLastToken &&
                 [ #  # ]
    1728                 :            :             RTF_PLAIN != nLastToken &&
    1729                 :            :             BRACELEFT != nLastToken )
    1730                 :            :         {
    1731 [ #  # ][ #  # ]:          0 :             if( pAkt->aAttrSet.Count() || pAkt->pChildList || pAkt->nStyleNo )
         [ #  # ][ #  # ]
    1732                 :            :             {
    1733                 :            :                 // open a new group
    1734 [ #  # ][ #  # ]:          0 :                 SvxRTFItemStackType* pNew = new SvxRTFItemStackType( *pAkt, *pInsPos, sal_True );
    1735 [ #  # ][ #  # ]:          0 :                 pNew->SetRTFDefaults( GetRTFDefaults() );
    1736                 :            : 
    1737                 :            :                 // Set all until here valid attributes
    1738         [ #  # ]:          0 :                 AttrGroupEnd();
    1739 [ #  # ][ #  # ]:          0 :                 pAkt = aAttrStack.empty() ? 0 : aAttrStack.back();  // can be changed after AttrGroupEnd!
    1740         [ #  # ]:          0 :                 pNew->aAttrSet.SetParent( pAkt ? &pAkt->aAttrSet : 0 );
    1741         [ #  # ]:          0 :                 aAttrStack.push_back( pNew );
    1742                 :          0 :                 pAkt = pNew;
    1743                 :            :             }
    1744                 :            :             else
    1745                 :            :             {
    1746                 :            :                 // continue to use this entry as new
    1747                 :          0 :                 pAkt->SetStartPos( *pInsPos );
    1748                 :          0 :                 bNewStkEntry = sal_False;
    1749                 :            :             }
    1750                 :            :         }
    1751                 :            : 
    1752                 :            :         // now reset all to default
    1753   [ #  #  #  #  :          0 :         if( bNewStkEntry &&
           #  # ][ #  # ]
    1754                 :          0 :             ( pAkt->aAttrSet.GetParent() || pAkt->aAttrSet.Count() ))
    1755                 :            :         {
    1756                 :            :             const SfxPoolItem *pItem, *pDef;
    1757                 :            :             const sal_uInt16* pPtr;
    1758                 :            :             sal_uInt16 nCnt;
    1759         [ #  # ]:          0 :             const SfxItemSet* pDfltSet = &GetRTFDefaults();
    1760         [ #  # ]:          0 :             if( bPard )
    1761                 :            :             {
    1762                 :          0 :                 pAkt->nStyleNo = 0;
    1763         [ #  # ]:          0 :                 pPtr = &aPardMap[0];
    1764                 :          0 :                 nCnt = aPardMap.size();
    1765                 :            :             }
    1766                 :            :             else
    1767                 :            :             {
    1768         [ #  # ]:          0 :                 pPtr = &aPlainMap[0];
    1769                 :          0 :                 nCnt = aPlainMap.size();
    1770                 :            :             }
    1771                 :            : 
    1772         [ #  # ]:          0 :             for( sal_uInt16 n = 0; n < nCnt; ++n, ++pPtr )
    1773                 :            :             {
    1774                 :            :                 // Item set and different -> Set the Default Pool
    1775         [ #  # ]:          0 :                 if( !*pPtr )
    1776                 :            :                     ;
    1777         [ #  # ]:          0 :                 else if( SFX_WHICH_MAX < *pPtr )
    1778         [ #  # ]:          0 :                     pAkt->aAttrSet.ClearItem( *pPtr );
    1779         [ #  # ]:          0 :                 else if( IsChkStyleAttr() )
    1780 [ #  # ][ #  # ]:          0 :                     pAkt->aAttrSet.Put( pDfltSet->Get( *pPtr ) );
    1781         [ #  # ]:          0 :                 else if( !pAkt->aAttrSet.GetParent() )
    1782                 :            :                 {
    1783         [ #  # ]:          0 :                     if( SFX_ITEM_SET ==
    1784         [ #  # ]:          0 :                         pDfltSet->GetItemState( *pPtr, sal_False, &pDef ))
    1785         [ #  # ]:          0 :                         pAkt->aAttrSet.Put( *pDef );
    1786                 :            :                     else
    1787         [ #  # ]:          0 :                         pAkt->aAttrSet.ClearItem( *pPtr );
    1788                 :            :                 }
    1789 [ #  # ][ #  # ]:          0 :                 else if( SFX_ITEM_SET == pAkt->aAttrSet.GetParent()->
                 [ #  # ]
    1790         [ #  # ]:          0 :                             GetItemState( *pPtr, sal_True, &pItem ) &&
    1791 [ #  # ][ #  # ]:          0 :                         *( pDef = &pDfltSet->Get( *pPtr )) != *pItem )
    1792         [ #  # ]:          0 :                     pAkt->aAttrSet.Put( *pDef );
    1793                 :            :                 else
    1794                 :            :                 {
    1795         [ #  # ]:          0 :                     if( SFX_ITEM_SET ==
    1796         [ #  # ]:          0 :                         pDfltSet->GetItemState( *pPtr, sal_False, &pDef ))
    1797         [ #  # ]:          0 :                         pAkt->aAttrSet.Put( *pDef );
    1798                 :            :                     else
    1799         [ #  # ]:          0 :                         pAkt->aAttrSet.ClearItem( *pPtr );
    1800                 :            :                 }
    1801                 :            :             }
    1802                 :            :         }
    1803         [ #  # ]:          0 :         else if( bPard )
    1804                 :          0 :             pAkt->nStyleNo = 0;     // reset Style number
    1805                 :            : 
    1806                 :          0 :         *ppSet = &pAkt->aAttrSet;
    1807                 :            : 
    1808         [ #  # ]:          0 :         if (!bPard)
    1809                 :            :         {
    1810                 :            :             //Once we have a default font, then any text without a font specifier is
    1811                 :            :             //in the default font, and thus has the default font charset, otherwise
    1812                 :            :             //we can fall back to the ansicpg set codeset
    1813         [ #  # ]:          0 :             if (nDfltFont != -1)
    1814                 :            :             {
    1815                 :          0 :                 const Font& rSVFont = GetFont(sal_uInt16(nDfltFont));
    1816                 :          0 :                 SetEncoding(rSVFont.GetCharSet());
    1817                 :            :             }
    1818                 :            :             else
    1819                 :          0 :                 SetEncoding(GetCodeSet());
    1820                 :            :         }
    1821                 :            :     }
    1822                 :          0 : }
    1823                 :            : 
    1824                 :          0 : void SvxRTFParser::SetDefault( int nToken, int nValue )
    1825                 :            : {
    1826         [ #  # ]:          0 :     if( !bNewDoc )
    1827                 :          0 :         return;
    1828                 :            : 
    1829 [ #  # ][ #  # ]:          0 :     SfxItemSet aTmp( *pAttrPool, &aWhichMap[0] );
    1830                 :          0 :     sal_Bool bOldFlag = bIsLeftToRightDef;
    1831                 :          0 :     bIsLeftToRightDef = sal_True;
    1832   [ #  #  #  #  :          0 :     switch( nToken )
                   #  # ]
    1833                 :            :     {
    1834                 :          0 :     case RTF_ADEFF: bIsLeftToRightDef = sal_False;  // no break!
    1835                 :            :     case RTF_DEFF:
    1836                 :            :         {
    1837         [ #  # ]:          0 :             if( -1 == nValue )
    1838                 :          0 :                 nValue = 0;
    1839         [ #  # ]:          0 :             const Font& rSVFont = GetFont( sal_uInt16(nValue) );
    1840                 :            :             SvxFontItem aTmpItem(
    1841         [ #  # ]:          0 :                                 rSVFont.GetFamily(), rSVFont.GetName(),
    1842         [ #  # ]:          0 :                                 rSVFont.GetStyleName(), rSVFont.GetPitch(),
    1843 [ #  # ][ #  # ]:          0 :                                 rSVFont.GetCharSet(), SID_ATTR_CHAR_FONT );
         [ #  # ][ #  # ]
    1844 [ #  # ][ #  # ]:          0 :             SetScriptAttr( NOTDEF_CHARTYPE, aTmp, aTmpItem );
    1845                 :            :         }
    1846                 :          0 :         break;
    1847                 :            : 
    1848                 :          0 :     case RTF_ADEFLANG:  bIsLeftToRightDef = sal_False;  // no break!
    1849                 :            :     case RTF_DEFLANG:
    1850                 :            :         // store default Language
    1851         [ #  # ]:          0 :         if( -1 != nValue )
    1852                 :            :         {
    1853                 :            :             SvxLanguageItem aTmpItem( (const LanguageType)nValue,
    1854         [ #  # ]:          0 :                                         SID_ATTR_CHAR_LANGUAGE );
    1855 [ #  # ][ #  # ]:          0 :             SetScriptAttr( NOTDEF_CHARTYPE, aTmp, aTmpItem );
    1856                 :            :         }
    1857                 :          0 :         break;
    1858                 :            : 
    1859                 :            :     case RTF_DEFTAB:
    1860 [ #  # ][ #  # ]:          0 :         if( PARDID->nTabStop )
    1861                 :            :         {
    1862                 :            :             // RTF defines 720 twips as default
    1863                 :          0 :             bIsSetDfltTab = sal_True;
    1864 [ #  # ][ #  # ]:          0 :             if( -1 == nValue || !nValue )
    1865                 :          0 :                 nValue = 720;
    1866                 :            : 
    1867                 :            :             // who would like to have no twips  ...
    1868         [ #  # ]:          0 :             if( IsCalcValue() )
    1869                 :            :             {
    1870                 :          0 :                 nTokenValue = nValue;
    1871         [ #  # ]:          0 :                 CalcValue();
    1872                 :          0 :                 nValue = nTokenValue;
    1873                 :            :             }
    1874                 :            : 
    1875                 :            :             // Calculate the ratio of default TabWidth / Tabs and
    1876                 :            :             // calculate the corresponding new number.
    1877                 :            :             // ?? how did one come up with 13 ??
    1878                 :          0 :             sal_uInt16 nAnzTabs = (SVX_TAB_DEFDIST * 13 ) / sal_uInt16(nValue);
    1879                 :            :             /*
    1880                 :            :              cmc, make sure we have at least one, or all hell breaks loose in
    1881                 :            :              everybodies exporters, #i8247#
    1882                 :            :             */
    1883         [ #  # ]:          0 :             if (nAnzTabs < 1)
    1884                 :          0 :                 nAnzTabs = 1;
    1885                 :            : 
    1886                 :            :             // we want Defaulttabs
    1887                 :            :             SvxTabStopItem aNewTab( nAnzTabs, sal_uInt16(nValue),
    1888 [ #  # ][ #  # ]:          0 :                                 SVX_TAB_ADJUST_DEFAULT, PARDID->nTabStop );
    1889         [ #  # ]:          0 :             while( nAnzTabs )
    1890         [ #  # ]:          0 :                 ((SvxTabStop&)aNewTab[ --nAnzTabs ]).GetAdjustment() = SVX_TAB_ADJUST_DEFAULT;
    1891                 :            : 
    1892 [ #  # ][ #  # ]:          0 :             pAttrPool->SetPoolDefaultItem( aNewTab );
    1893                 :            :         }
    1894                 :          0 :         break;
    1895                 :            :     }
    1896                 :          0 :     bIsLeftToRightDef = bOldFlag;
    1897                 :            : 
    1898         [ #  # ]:          0 :     if( aTmp.Count() )
    1899                 :            :     {
    1900         [ #  # ]:          0 :         SfxItemIter aIter( aTmp );
    1901                 :          0 :         const SfxPoolItem* pItem = aIter.GetCurItem();
    1902                 :          0 :         while( sal_True )
    1903                 :            :         {
    1904         [ #  # ]:          0 :             pAttrPool->SetPoolDefaultItem( *pItem );
    1905         [ #  # ]:          0 :             if( aIter.IsAtEnd() )
    1906                 :          0 :                 break;
    1907         [ #  # ]:          0 :             pItem = aIter.NextItem();
    1908         [ #  # ]:          0 :         }
    1909         [ #  # ]:          0 :     }
    1910                 :            : }
    1911                 :            : 
    1912                 :            : // default: no conversion, leaving everything in twips.
    1913                 :          0 : void SvxRTFParser::CalcValue()
    1914                 :            : {
    1915                 :          0 : }
    1916                 :            : 
    1917                 :            : // for tokens that are not evaluated in ReadAttr
    1918                 :          0 : void SvxRTFParser::UnknownAttrToken( int, SfxItemSet* )
    1919                 :            : {
    1920                 :          0 : }
    1921                 :            : 
    1922                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10