LCOV - code coverage report
Current view: top level - libreoffice/sw/source/core/doc - SwStyleNameMapper.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 253 322 78.6 %
Date: 2012-12-17 Functions: 37 41 90.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <SwStyleNameMapper.hxx>
      21             : #include <tools/resmgr.hxx>
      22             : #include <poolfmt.hxx>
      23             : #include <rcid.hrc>
      24             : #ifdef _NEED_TO_DEBUG_MAPPING
      25             : #include <stdlib.h>
      26             : #endif
      27             : 
      28             : extern ResMgr* pSwResMgr;
      29             : // Initialise UI names to 0
      30             : boost::ptr_vector<String> *SwStyleNameMapper::pTextUINameArray = 0,
      31             :                 *SwStyleNameMapper::pListsUINameArray = 0,
      32             :                 *SwStyleNameMapper::pExtraUINameArray = 0,
      33             :                 *SwStyleNameMapper::pRegisterUINameArray = 0,
      34             :                 *SwStyleNameMapper::pDocUINameArray = 0,
      35             :                 *SwStyleNameMapper::pHTMLUINameArray = 0,
      36             :                 *SwStyleNameMapper::pFrmFmtUINameArray = 0,
      37             :                 *SwStyleNameMapper::pChrFmtUINameArray = 0,
      38             :                 *SwStyleNameMapper::pHTMLChrFmtUINameArray = 0,
      39             :                 *SwStyleNameMapper::pPageDescUINameArray = 0,
      40             :                 *SwStyleNameMapper::pNumRuleUINameArray = 0,
      41             : 
      42             : // Initialise programmatic names to 0
      43             :                 *SwStyleNameMapper::pTextProgNameArray = 0,
      44             :                 *SwStyleNameMapper::pListsProgNameArray = 0,
      45             :                 *SwStyleNameMapper::pExtraProgNameArray = 0,
      46             :                 *SwStyleNameMapper::pRegisterProgNameArray = 0,
      47             :                 *SwStyleNameMapper::pDocProgNameArray = 0,
      48             :                 *SwStyleNameMapper::pHTMLProgNameArray = 0,
      49             :                 *SwStyleNameMapper::pFrmFmtProgNameArray = 0,
      50             :                 *SwStyleNameMapper::pChrFmtProgNameArray = 0,
      51             :                 *SwStyleNameMapper::pHTMLChrFmtProgNameArray = 0,
      52             :                 *SwStyleNameMapper::pPageDescProgNameArray = 0,
      53             :                 *SwStyleNameMapper::pNumRuleProgNameArray = 0;
      54             : 
      55             : NameToIdHash    *SwStyleNameMapper::pParaUIMap = 0,
      56             :                 *SwStyleNameMapper::pCharUIMap = 0,
      57             :                 *SwStyleNameMapper::pPageUIMap = 0,
      58             :                 *SwStyleNameMapper::pFrameUIMap = 0,
      59             :                 *SwStyleNameMapper::pNumRuleUIMap = 0,
      60             : 
      61             :                 *SwStyleNameMapper::pParaProgMap = 0,
      62             :                 *SwStyleNameMapper::pCharProgMap = 0,
      63             :                 *SwStyleNameMapper::pPageProgMap = 0,
      64             :                 *SwStyleNameMapper::pFrameProgMap = 0,
      65             :                 *SwStyleNameMapper::pNumRuleProgMap = 0;
      66             : 
      67             : // SwTableEntry so we can pass the length to the String CTOR
      68             : struct SwTableEntry
      69             : {
      70             :     sal_uInt8 nLength;
      71             :     const sal_Char *pChar;
      72             : };
      73             : 
      74             : #define ENTRY( s ) { sizeof (s)-1, s }
      75             : 
      76             : // Hard coded Programmatic Name tables
      77             : const struct SwTableEntry TextProgNameTable [] =
      78             : {
      79             :     ENTRY( "Standard" ), // RES_POOLCOLL_STANDARD
      80             :     ENTRY( "Text body" ),
      81             :     ENTRY( "First line indent" ),
      82             :     ENTRY( "Hanging indent" ),
      83             :     ENTRY( "Text body indent" ),
      84             :     ENTRY( "Salutation" ),
      85             :     ENTRY( "Signature" ),
      86             :     ENTRY( "List Indent" ), // RES_POOLCOLL_CONFRONTATION
      87             :     ENTRY( "Marginalia" ),
      88             :     ENTRY( "Heading" ),
      89             :     ENTRY( "Heading 1" ),
      90             :     ENTRY( "Heading 2" ),
      91             :     ENTRY( "Heading 3" ),
      92             :     ENTRY( "Heading 4" ),
      93             :     ENTRY( "Heading 5" ),
      94             :     ENTRY( "Heading 6" ),
      95             :     ENTRY( "Heading 7" ),
      96             :     ENTRY( "Heading 8" ),
      97             :     ENTRY( "Heading 9" ),
      98             :     ENTRY( "Heading 10" ), // RES_POOLCOLL_TEXT_END
      99             :     { 0, NULL }
     100             : };
     101             : 
     102             : const struct SwTableEntry ListsProgNameTable [] =
     103             : {
     104             :     ENTRY( "List" ), // STR_POCO_PRGM_NUMBUL_BASE
     105             :     ENTRY( "Numbering 1 Start" ), // STR_POCO_PRGM_NUM_LEVEL1S
     106             :     ENTRY( "Numbering 1" ),
     107             :     ENTRY( "Numbering 1 End" ),
     108             :     ENTRY( "Numbering 1 Cont." ),
     109             :     ENTRY( "Numbering 2 Start" ),
     110             :     ENTRY( "Numbering 2" ),
     111             :     ENTRY( "Numbering 2 End" ),
     112             :     ENTRY( "Numbering 2 Cont." ),
     113             :     ENTRY( "Numbering 3 Start" ),
     114             :     ENTRY( "Numbering 3" ),
     115             :     ENTRY( "Numbering 3 End" ),
     116             :     ENTRY( "Numbering 3 Cont." ),
     117             :     ENTRY( "Numbering 4 Start" ),
     118             :     ENTRY( "Numbering 4" ),
     119             :     ENTRY( "Numbering 4 End" ),
     120             :     ENTRY( "Numbering 4 Cont." ),
     121             :     ENTRY( "Numbering 5 Start" ),
     122             :     ENTRY( "Numbering 5" ),
     123             :     ENTRY( "Numbering 5 End" ),
     124             :     ENTRY( "Numbering 5 Cont." ),
     125             :     ENTRY( "List 1 Start" ),
     126             :     ENTRY( "List 1" ),
     127             :     ENTRY( "List 1 End" ),
     128             :     ENTRY( "List 1 Cont." ),
     129             :     ENTRY( "List 2 Start" ),
     130             :     ENTRY( "List 2" ),
     131             :     ENTRY( "List 2 End" ),
     132             :     ENTRY( "List 2 Cont." ),
     133             :     ENTRY( "List 3 Start" ),
     134             :     ENTRY( "List 3" ),
     135             :     ENTRY( "List 3 End" ),
     136             :     ENTRY( "List 3 Cont." ),
     137             :     ENTRY( "List 4 Start" ),
     138             :     ENTRY( "List 4" ),
     139             :     ENTRY( "List 4 End" ),
     140             :     ENTRY( "List 4 Cont." ),
     141             :     ENTRY( "List 5 Start" ),
     142             :     ENTRY( "List 5" ),
     143             :     ENTRY( "List 5 End" ),
     144             :     ENTRY( "List 5 Cont." ), // STR_POCO_PRGM_BUL_NONUM5
     145             :     { 0, NULL }
     146             : };
     147             : 
     148             : const struct SwTableEntry ExtraProgNameTable [] =
     149             : {
     150             :     ENTRY( "Header" ), // RES_POOLCOLL_EXTRA_BEGIN
     151             :     ENTRY( "Header left" ),
     152             :     ENTRY( "Header right" ),
     153             :     ENTRY( "Footer" ),
     154             :     ENTRY( "Footer left" ),
     155             :     ENTRY( "Footer right" ),
     156             :     ENTRY( "Table Contents" ),
     157             :     ENTRY( "Table Heading" ),
     158             :     ENTRY( "Caption" ),
     159             :     ENTRY( "Illustration" ),
     160             :     ENTRY( "Table" ),
     161             :     ENTRY( "Text" ),
     162             :     ENTRY( "Frame contents" ),
     163             :     ENTRY( "Footnote" ),
     164             :     ENTRY( "Addressee" ),
     165             :     ENTRY( "Sender" ),
     166             :     ENTRY( "Endnote" ),
     167             :     ENTRY( "Drawing" ), // RES_POOLCOLL_LABEL_DRAWING
     168             :     { 0, NULL }
     169             : };
     170             : 
     171             : const struct SwTableEntry RegisterProgNameTable [] =
     172             : {
     173             :     ENTRY( "Index" ), // STR_POCO_PRGM_REGISTER_BASE
     174             :     ENTRY( "Index Heading" ), // STR_POCO_PRGM_TOX_IDXH
     175             :     ENTRY( "Index 1" ),
     176             :     ENTRY( "Index 2" ),
     177             :     ENTRY( "Index 3" ),
     178             :     ENTRY( "Index Separator" ),
     179             :     ENTRY( "Contents Heading" ),
     180             :     ENTRY( "Contents 1" ),
     181             :     ENTRY( "Contents 2" ),
     182             :     ENTRY( "Contents 3" ),
     183             :     ENTRY( "Contents 4" ),
     184             :     ENTRY( "Contents 5" ),
     185             :     ENTRY( "User Index Heading" ),
     186             :     ENTRY( "User Index 1" ),
     187             :     ENTRY( "User Index 2" ),
     188             :     ENTRY( "User Index 3" ),
     189             :     ENTRY( "User Index 4" ),
     190             :     ENTRY( "User Index 5" ),
     191             :     ENTRY( "Contents 6" ),
     192             :     ENTRY( "Contents 7" ),
     193             :     ENTRY( "Contents 8" ),
     194             :     ENTRY( "Contents 9" ),
     195             :     ENTRY( "Contents 10" ),
     196             :     ENTRY( "Illustration Index Heading" ),
     197             :     ENTRY( "Illustration Index 1" ),
     198             :     ENTRY( "Object index heading" ),
     199             :     ENTRY( "Object index 1" ),
     200             :     ENTRY( "Table index heading" ),
     201             :     ENTRY( "Table index 1" ),
     202             :     ENTRY( "Bibliography Heading" ),
     203             :     ENTRY( "Bibliography 1" ),
     204             :     ENTRY( "User Index 6" ),
     205             :     ENTRY( "User Index 7" ),
     206             :     ENTRY( "User Index 8" ),
     207             :     ENTRY( "User Index 9" ),
     208             :     ENTRY( "User Index 10" ), // STR_POCO_PRGM_TOX_USER10
     209             :     { 0, NULL }
     210             : };
     211             : 
     212             : const struct SwTableEntry DocProgNameTable [] =
     213             : {
     214             :     ENTRY( "Title" ), // STR_POCO_PRGM_DOC_TITEL
     215             :     ENTRY( "Subtitle" ),
     216             :     { 0, NULL }
     217             : };
     218             : 
     219             : const struct SwTableEntry HTMLProgNameTable [] =
     220             : {
     221             :     ENTRY( "Quotations" ),
     222             :     ENTRY( "Preformatted Text" ),
     223             :     ENTRY( "Horizontal Line" ),
     224             :     ENTRY( "List Contents" ),
     225             :     ENTRY( "List Heading" ), // STR_POCO_PRGM_HTML_DT
     226             :     { 0, NULL }
     227             : };
     228             : 
     229             : const struct SwTableEntry FrmFmtProgNameTable [] =
     230             : {
     231             :     ENTRY( "Frame" ), // RES_POOLFRM_FRAME
     232             :     ENTRY( "Graphics" ),
     233             :     ENTRY( "OLE" ),
     234             :     ENTRY( "Formula" ),
     235             :     ENTRY( "Marginalia" ),
     236             :     ENTRY( "Watermark" ),
     237             :     ENTRY( "Labels" ), // RES_POOLFRM_LABEL
     238             :     { 0, NULL }
     239             : };
     240             : 
     241             : const struct SwTableEntry ChrFmtProgNameTable [] =
     242             : {
     243             :     ENTRY( "Footnote Symbol" ), // RES_POOLCHR_FOOTNOTE
     244             :     ENTRY( "Page Number" ),
     245             :     ENTRY( "Caption characters" ),
     246             :     ENTRY( "Drop Caps" ),
     247             :     ENTRY( "Numbering Symbols" ),
     248             :     ENTRY( "Bullet Symbols" ),
     249             :     ENTRY( "Internet link" ),
     250             :     ENTRY( "Visited Internet Link" ),
     251             :     ENTRY( "Placeholder" ),
     252             :     ENTRY( "Index Link" ),
     253             :     ENTRY( "Endnote Symbol" ),
     254             :     ENTRY( "Line numbering" ),
     255             :     ENTRY( "Main index entry" ),
     256             :     ENTRY( "Footnote anchor" ),
     257             :     ENTRY( "Endnote anchor" ),
     258             :     ENTRY( "Rubies" ), // RES_POOLCHR_RUBYTEXT
     259             :     ENTRY( "Vertical Numbering Symbols" ), // RES_POOLCHR_VERT_NUMBER
     260             :     { 0, NULL }
     261             : };
     262             : 
     263             : const struct SwTableEntry HTMLChrFmtProgNameTable [] =
     264             : {
     265             :     ENTRY( "Emphasis" ), // RES_POOLCHR_HTML_EMPHASIS
     266             :     ENTRY( "Citation" ),
     267             :     ENTRY( "Strong Emphasis" ),
     268             :     ENTRY( "Source Text" ),
     269             :     ENTRY( "Example" ),
     270             :     ENTRY( "User Entry" ),
     271             :     ENTRY( "Variable" ),
     272             :     ENTRY( "Definition" ),
     273             :     ENTRY( "Teletype" ), // RES_POOLCHR_HTML_TELETYPE
     274             :     { 0, NULL }
     275             : };
     276             : 
     277             : const struct SwTableEntry PageDescProgNameTable [] =
     278             : {
     279             :     ENTRY( "Standard" ), // STR_POOLPAGE_PRGM_STANDARD
     280             :     ENTRY( "First Page" ),
     281             :     ENTRY( "Left Page" ),
     282             :     ENTRY( "Right Page" ),
     283             :     ENTRY( "Envelope" ),
     284             :     ENTRY( "Index" ),
     285             :     ENTRY( "HTML" ),
     286             :     ENTRY( "Footnote" ),
     287             :     ENTRY( "Endnote" ), // STR_POOLPAGE_PRGM_ENDNOTE
     288             :     ENTRY( "Landscape" ),
     289             :     { 0, NULL }
     290             : };
     291             : 
     292             : const struct SwTableEntry NumRuleProgNameTable [] =
     293             : {
     294             :     ENTRY( "Numbering 1" ), // STR_POOLNUMRULE_PRGM_NUM1
     295             :     ENTRY( "Numbering 2" ),
     296             :     ENTRY( "Numbering 3" ),
     297             :     ENTRY( "Numbering 4" ),
     298             :     ENTRY( "Numbering 5" ),
     299             :     ENTRY( "List 1" ),
     300             :     ENTRY( "List 2" ),
     301             :     ENTRY( "List 3" ),
     302             :     ENTRY( "List 4" ),
     303             :     ENTRY( "List 5" ), // STR_POOLNUMRULE_PRGM_BUL5
     304             :     { 0, NULL }
     305             : };
     306             : #undef ENTRY
     307             : 
     308        3794 : bool SwStyleNameMapper::SuffixIsUser ( const String & rString )
     309             : {
     310        3794 :     const sal_Unicode *pChar = rString.GetBuffer();
     311        3794 :     sal_Int32 nLen = rString.Len();
     312        3794 :     bool bRet = false;
     313        7388 :     if( nLen > 8 &&
     314        3068 :         pChar[nLen-7] == ' ' &&
     315         526 :         pChar[nLen-6] == '(' &&
     316           0 :         pChar[nLen-5] == 'u' &&
     317           0 :         pChar[nLen-4] == 's' &&
     318           0 :         pChar[nLen-3] == 'e' &&
     319           0 :         pChar[nLen-2] == 'r' &&
     320           0 :         pChar[nLen-1] == ')' )
     321           0 :         bRet = true;
     322        3794 :     return bRet;
     323             : }
     324        5398 : void SwStyleNameMapper::CheckSuffixAndDelete ( String & rString )
     325             : {
     326        5398 :     const sal_Unicode *pChar = rString.GetBuffer();
     327        5398 :     xub_StrLen nLen = rString.Len();
     328        9266 :     if (nLen > 8 &&
     329        3638 :         pChar[nLen-7] == ' ' &&
     330         230 :         pChar[nLen-6] == '(' &&
     331           0 :         pChar[nLen-5] == 'u' &&
     332           0 :         pChar[nLen-4] == 's' &&
     333           0 :         pChar[nLen-3] == 'e' &&
     334           0 :         pChar[nLen-2] == 'r' &&
     335           0 :         pChar[nLen-1] == ')')
     336             :     {
     337           0 :         rString.Erase ( nLen - 7, 7 );
     338             :     }
     339        5398 : }
     340       93885 : const NameToIdHash & SwStyleNameMapper::getHashTable ( SwGetPoolIdFromName eFlags, bool bProgName )
     341             : {
     342       93885 :     NameToIdHash *pHash = 0;
     343             :     const boost::ptr_vector<String> *pStrings;
     344             : 
     345       93885 :     switch ( eFlags )
     346             :     {
     347             :         case nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL:
     348             :         {
     349             :             sal_uInt16 nIndex;
     350             :             sal_uInt16 nId;
     351             : 
     352       73813 :             pHash = bProgName ? pParaProgMap : pParaUIMap;
     353       73813 :             if ( !pHash )
     354             :             {
     355             :                 pHash = new NameToIdHash ( RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN +
     356             :                                            RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN +
     357             :                                            RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN +
     358             :                                            RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN +
     359             :                                            RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN +
     360          42 :                                            RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN );
     361          42 :                 pStrings = bProgName ? &GetTextProgNameArray() : &GetTextUINameArray();
     362         882 :                 for ( nIndex = 0, nId = RES_POOLCOLL_TEXT_BEGIN ; nId < RES_POOLCOLL_TEXT_END ; nId++,nIndex++ )
     363         840 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     364          42 :                 pStrings = bProgName ? &GetListsProgNameArray() : &GetListsUINameArray();
     365        1764 :                 for ( nIndex = 0, nId = RES_POOLCOLL_LISTS_BEGIN ; nId < RES_POOLCOLL_LISTS_END ; nId++,nIndex++ )
     366        1722 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     367          42 :                 pStrings = bProgName ? &GetExtraProgNameArray() : &GetExtraUINameArray();
     368         798 :                 for ( nIndex = 0, nId = RES_POOLCOLL_EXTRA_BEGIN ; nId < RES_POOLCOLL_EXTRA_END ; nId++,nIndex++ )
     369         756 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     370          42 :                 pStrings = bProgName ? &GetRegisterProgNameArray() : &GetRegisterUINameArray();
     371        1554 :                 for ( nIndex = 0, nId = RES_POOLCOLL_REGISTER_BEGIN ; nId < RES_POOLCOLL_REGISTER_END ; nId++,nIndex++ )
     372        1512 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     373          42 :                 pStrings = bProgName ? &GetDocProgNameArray() : &GetDocUINameArray();
     374         126 :                 for ( nIndex = 0, nId = RES_POOLCOLL_DOC_BEGIN ; nId < RES_POOLCOLL_DOC_END ; nId++,nIndex++ )
     375          84 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     376          42 :                 pStrings = bProgName ? &GetHTMLProgNameArray() : &GetHTMLUINameArray();
     377         252 :                 for ( nIndex = 0, nId = RES_POOLCOLL_HTML_BEGIN ; nId < RES_POOLCOLL_HTML_END ; nId++,nIndex++ )
     378         210 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     379             : 
     380          42 :                 if ( bProgName )
     381          20 :                     pParaProgMap = pHash;
     382             :                 else
     383          22 :                     pParaUIMap = pHash;
     384             :             }
     385             :         }
     386       73813 :         break;
     387             :         case nsSwGetPoolIdFromName::GET_POOLID_CHRFMT:
     388             :         {
     389       12720 :             pHash = bProgName ? pCharProgMap : pCharUIMap;
     390       12720 :             if ( !pHash )
     391             :             {
     392             :                 sal_uInt16 nIndex;
     393             :                 sal_uInt16 nId;
     394             : 
     395             :                 pHash = new NameToIdHash ( RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN +
     396          38 :                                            RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN );
     397          38 :                 pStrings = bProgName ? &GetChrFmtProgNameArray() : &GetChrFmtUINameArray();
     398         684 :                 for ( nIndex = 0, nId = RES_POOLCHR_NORMAL_BEGIN ; nId < RES_POOLCHR_NORMAL_END ; nId++,nIndex++ )
     399         646 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     400          38 :                 pStrings = bProgName ? &GetHTMLChrFmtProgNameArray() : &GetHTMLChrFmtUINameArray();
     401         380 :                 for ( nIndex = 0, nId = RES_POOLCHR_HTML_BEGIN ; nId < RES_POOLCHR_HTML_END ; nId++,nIndex++ )
     402         342 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     403          38 :                 if (bProgName )
     404          17 :                     pCharProgMap = pHash;
     405             :                 else
     406          21 :                     pCharUIMap = pHash;
     407             :             }
     408             :         }
     409       12720 :         break;
     410             :         case nsSwGetPoolIdFromName::GET_POOLID_FRMFMT:
     411             :         {
     412        1210 :             pHash = bProgName ? pFrameProgMap : pFrameUIMap;
     413        1210 :             if ( !pHash )
     414             :             {
     415          28 :                 pHash = new NameToIdHash ( RES_POOLFRM_END - RES_POOLFRM_BEGIN );
     416          28 :                 pStrings = bProgName ? &GetFrmFmtProgNameArray() : &GetFrmFmtUINameArray();
     417         224 :                 for ( sal_uInt16 nIndex=0,nId = RES_POOLFRM_BEGIN ; nId < RES_POOLFRM_END ; nId++,nIndex++ )
     418         196 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     419          28 :                 if ( bProgName )
     420          14 :                     pFrameProgMap = pHash;
     421             :                 else
     422          14 :                     pFrameUIMap = pHash;
     423             :             }
     424             :         }
     425        1210 :         break;
     426             :         case nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC:
     427             :         {
     428        4569 :             pHash = bProgName ? pPageProgMap : pPageUIMap;
     429        4569 :             if ( !pHash )
     430             :             {
     431          40 :                 pHash = new NameToIdHash ( RES_POOLPAGE_END - RES_POOLPAGE_BEGIN );
     432          40 :                 pStrings = bProgName ? &GetPageDescProgNameArray() : &GetPageDescUINameArray();
     433         440 :                 for ( sal_uInt16 nIndex=0,nId = RES_POOLPAGE_BEGIN ; nId < RES_POOLPAGE_END ; nId++,nIndex++ )
     434         400 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     435          40 :                 if ( bProgName )
     436          20 :                     pPageProgMap = pHash;
     437             :                 else
     438          20 :                     pPageUIMap = pHash;
     439             :             }
     440             :         }
     441        4569 :         break;
     442             :         case nsSwGetPoolIdFromName::GET_POOLID_NUMRULE:
     443             :         {
     444        1573 :             pHash = bProgName ? pNumRuleProgMap : pNumRuleUIMap;
     445        1573 :             if ( !pHash )
     446             :             {
     447          34 :                 pHash = new NameToIdHash ( RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN );
     448          34 :                 pStrings = bProgName ? &GetNumRuleProgNameArray() : &GetNumRuleUINameArray();
     449         374 :                 for ( sal_uInt16 nIndex=0,nId = RES_POOLNUMRULE_BEGIN ; nId < RES_POOLNUMRULE_END ; nId++,nIndex++ )
     450             :                 {
     451         340 :                     (*pHash)[&((*pStrings)[nIndex])] = nId;
     452             :                 }
     453          34 :                 if ( bProgName )
     454          17 :                     pNumRuleProgMap = pHash;
     455             :                 else
     456          17 :                     pNumRuleUIMap = pHash;
     457             :             }
     458             :         }
     459        1573 :         break;
     460             :     }
     461             : #ifdef _NEED_TO_DEBUG_MAPPING
     462             :     static bool bTested = false;
     463             :     if ( !bTested )
     464             :     {
     465             :         bTested = true;
     466             :         {
     467             :             for ( sal_uInt16 nIndex = 0, nId = RES_POOLCOLL_TEXT_BEGIN ; nId < RES_POOLCOLL_TEXT_END ; nId++,nIndex++ )
     468             :             {
     469             :                 String aString, bString;
     470             :                 FillUIName ( nId, aString );
     471             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     472             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     473             :                 FillProgName ( nNewId, aString );
     474             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     475             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     476             :                 if ( nNewId != nId )
     477             :                     abort();
     478             :             }
     479             :             for ( nIndex = 0, nId = RES_POOLCOLL_LISTS_BEGIN ; nId < RES_POOLCOLL_LISTS_END ; nId++,nIndex++ )
     480             :             {
     481             :                 String aString, bString;
     482             :                 FillUIName ( nId, aString );
     483             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     484             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     485             :                 FillProgName ( nNewId, aString );
     486             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     487             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     488             :                 if ( nNewId != nId )
     489             :                     abort();
     490             :             }
     491             :             for ( nIndex = 0, nId = RES_POOLCOLL_EXTRA_BEGIN ; nId < RES_POOLCOLL_EXTRA_END ; nId++,nIndex++ )
     492             :             {
     493             :                 String aString, bString;
     494             :                 FillUIName ( nId, aString );
     495             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     496             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     497             :                 FillProgName ( nNewId, aString );
     498             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     499             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     500             :                 if ( nNewId != nId )
     501             :                     abort();
     502             :             }
     503             :             for ( nIndex = 0, nId = RES_POOLCOLL_REGISTER_BEGIN ; nId < RES_POOLCOLL_REGISTER_END ; nId++,nIndex++ )
     504             :             {
     505             :                 String aString, bString;
     506             :                 FillUIName ( nId, aString );
     507             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     508             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     509             :                 FillProgName ( nNewId, aString );
     510             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     511             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     512             :                 if ( nNewId != nId )
     513             :                     abort();
     514             :             }
     515             :             for ( nIndex = 0, nId = RES_POOLCOLL_DOC_BEGIN ; nId < RES_POOLCOLL_DOC_END ; nId++,nIndex++ )
     516             :             {
     517             :                 String aString, bString;
     518             :                 FillUIName ( nId, aString );
     519             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     520             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     521             :                 FillProgName ( nNewId, aString );
     522             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     523             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     524             :                 if ( nNewId != nId )
     525             :                     abort();
     526             :             }
     527             :             for ( nIndex = 0, nId = RES_POOLCOLL_HTML_BEGIN ; nId < RES_POOLCOLL_HTML_END ; nId++,nIndex++ )
     528             :             {
     529             :                 String aString, bString;
     530             :                 FillUIName ( nId, aString );
     531             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     532             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     533             :                 FillProgName ( nNewId, aString );
     534             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     535             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     536             :                 if ( nNewId != nId )
     537             :                     abort();
     538             :             }
     539             :         }
     540             :         {
     541             :             for ( sal_uInt16 nIndex = 0, nId = RES_POOLCHR_NORMAL_BEGIN ; nId < RES_POOLCHR_NORMAL_END ; nId++,nIndex++ )
     542             :             {
     543             :                 String aString, bString;
     544             :                 FillUIName ( nId, aString );
     545             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     546             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     547             :                 FillProgName ( nNewId, aString );
     548             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     549             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     550             :                 if ( nNewId != nId )
     551             :                     abort();
     552             :             }
     553             :             for ( nIndex = 0, nId = RES_POOLCHR_HTML_BEGIN ; nId < RES_POOLCHR_HTML_END ; nId++,nIndex++ )
     554             :             {
     555             :                 String aString, bString;
     556             :                 FillUIName ( nId, aString );
     557             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     558             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     559             :                 FillProgName ( nNewId, aString );
     560             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     561             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     562             :                 if ( nNewId != nId )
     563             :                     abort();
     564             :             }
     565             :         }
     566             :         {
     567             :             for ( sal_uInt16 nIndex=0,nId = RES_POOLFRM_BEGIN ; nId < RES_POOLFRM_END ; nId++,nIndex++ )
     568             :             {
     569             :                 String aString, bString;
     570             :                 FillUIName ( nId, aString );
     571             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     572             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     573             :                 FillProgName ( nNewId, aString );
     574             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     575             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     576             :                 if ( nNewId != nId )
     577             :                     abort();
     578             :             }
     579             :         }
     580             :         {
     581             :             for ( sal_uInt16 nIndex=0,nId = RES_POOLPAGE_BEGIN ; nId < RES_POOLPAGE_END ; nId++,nIndex++ )
     582             :             {
     583             :                 String aString, bString;
     584             :                 FillUIName ( nId, aString );
     585             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     586             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     587             :                 FillProgName ( nNewId, aString );
     588             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     589             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     590             :                 if ( nNewId != nId )
     591             :                     abort();
     592             :             }
     593             :         }
     594             :         {
     595             :             for ( sal_uInt16 nIndex=0,nId = RES_POOLNUMRULE_BEGIN ; nId < RES_POOLNUMRULE_END ; nId++,nIndex++ )
     596             :             {
     597             :                 String aString, bString;
     598             :                 FillUIName ( nId, aString );
     599             :                 bString = GetProgName ( nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, aString );
     600             :                 sal_uInt16 nNewId = GetPoolIdFromProgName ( bString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     601             :                 FillProgName ( nNewId, aString );
     602             :                 bString = GetUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     603             :                 nNewId = GetPoolIdFromUIName ( aString, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
     604             :                 if ( nNewId != nId )
     605             :                     abort();
     606             :             }
     607             :         }
     608             :     }
     609             : #endif
     610       93885 :     return *pHash;
     611             : }
     612             : // This gets the UI Name from the programmatic name
     613          40 : const String& SwStyleNameMapper::GetUIName ( const String& rName, SwGetPoolIdFromName eFlags )
     614             : {
     615          40 :     sal_uInt16 nId = GetPoolIdFromProgName ( rName, eFlags );
     616          40 :     return nId != USHRT_MAX ? GetUIName( nId, rName ) : rName;
     617             : }
     618             : 
     619             : 
     620             : // Get the programmatic Name from the UI name
     621          46 : const String& SwStyleNameMapper::GetProgName( const String& rName, SwGetPoolIdFromName eFlags )
     622             : {
     623          46 :     sal_uInt16 nId = GetPoolIdFromUIName ( rName, eFlags );
     624          46 :     return nId != USHRT_MAX ? GetProgName( nId, rName ) : rName;
     625             : }
     626             : 
     627             : // Get the programmatic name from the UI name in rName and put it into rFillName
     628       13412 : void SwStyleNameMapper::FillProgName ( const String& rName, String& rFillName, SwGetPoolIdFromName eFlags, bool bDisambiguate )
     629             : {
     630       13412 :     sal_uInt16 nId = GetPoolIdFromUIName ( rName, eFlags );
     631       13412 :     if ( bDisambiguate && nId == USHRT_MAX )
     632             :     {
     633             :         // rName isn't in our UI name table...check if it's in the programmatic one
     634        3794 :         nId = GetPoolIdFromProgName ( rName, eFlags );
     635             : 
     636        3794 :         rFillName = rName;
     637        7588 :         if (nId == USHRT_MAX )
     638             :         {
     639             :             // It isn't ...make sure the suffix isn't already " (user)"...if it is,
     640             :             // we need to add another one
     641        3794 :             if ( SuffixIsUser ( rFillName ) )
     642           0 :                 rFillName.AppendAscii ( RTL_CONSTASCII_STRINGPARAM ( " (user)" ) );
     643             :         }
     644             :         else
     645             :         {
     646             :             // It's in the programmatic name table...append suffix
     647           0 :             rFillName.AppendAscii ( RTL_CONSTASCII_STRINGPARAM ( " (user)" ) );
     648             :         }
     649             :     }
     650             :     else
     651             :     {
     652             :         // If we aren't trying to disambiguate, then just do a normal fill
     653        9618 :         fillNameFromId ( nId, rFillName, true);
     654             :     }
     655       13412 : }
     656             : // Get the UI name from the programmatic name in rName and put it into rFillName
     657       13930 : void SwStyleNameMapper::FillUIName ( const String& rName, String& rFillName, SwGetPoolIdFromName eFlags, bool bDisambiguate )
     658             : {
     659       13930 :     sal_uInt16 nId = GetPoolIdFromProgName ( rName, eFlags );
     660       13930 :     if ( bDisambiguate && nId == USHRT_MAX )
     661             :     {
     662        5398 :         rFillName = rName;
     663             :         // rName isn't in our Prog name table...check if it has a " (user)" suffix, if so remove it
     664        5398 :         CheckSuffixAndDelete ( rFillName );
     665             :     }
     666             :     else
     667             :     {
     668             :         // If we aren't trying to disambiguate, then just do a normal fill
     669        8532 :         fillNameFromId ( nId, rFillName, false);
     670             :     }
     671       13930 : }
     672             : 
     673           0 : const String& SwStyleNameMapper::getNameFromId( sal_uInt16 nId, const String& rFillName, bool bProgName )
     674             : {
     675           0 :     sal_uInt16 nStt = 0;
     676           0 :     const boost::ptr_vector<String>* pStrArr = 0;
     677             : 
     678           0 :     switch( (USER_FMT | COLL_GET_RANGE_BITS | POOLGRP_NOCOLLID) & nId )
     679             :     {
     680             :     case COLL_TEXT_BITS:
     681           0 :         if( RES_POOLCOLL_TEXT_BEGIN <= nId && nId < RES_POOLCOLL_TEXT_END )
     682             :         {
     683           0 :             pStrArr = bProgName ? &GetTextProgNameArray() : &GetTextUINameArray();
     684           0 :             nStt = RES_POOLCOLL_TEXT_BEGIN;
     685             :         }
     686           0 :         break;
     687             :     case COLL_LISTS_BITS:
     688           0 :         if( RES_POOLCOLL_LISTS_BEGIN <= nId && nId < RES_POOLCOLL_LISTS_END )
     689             :         {
     690           0 :             pStrArr = bProgName ? &GetListsProgNameArray() : &GetListsUINameArray();
     691           0 :             nStt = RES_POOLCOLL_LISTS_BEGIN;
     692             :         }
     693           0 :         break;
     694             :     case COLL_EXTRA_BITS:
     695           0 :         if( RES_POOLCOLL_EXTRA_BEGIN <= nId && nId < RES_POOLCOLL_EXTRA_END )
     696             :         {
     697           0 :             pStrArr = bProgName ? &GetExtraProgNameArray() : &GetExtraUINameArray();
     698           0 :             nStt = RES_POOLCOLL_EXTRA_BEGIN;
     699             :         }
     700           0 :         break;
     701             :     case COLL_REGISTER_BITS:
     702           0 :         if( RES_POOLCOLL_REGISTER_BEGIN <= nId && nId < RES_POOLCOLL_REGISTER_END )
     703             :         {
     704           0 :             pStrArr = bProgName ? &GetRegisterProgNameArray() : &GetRegisterUINameArray();
     705           0 :             nStt = RES_POOLCOLL_REGISTER_BEGIN;
     706             :         }
     707           0 :         break;
     708             :     case COLL_DOC_BITS:
     709           0 :         if( RES_POOLCOLL_DOC_BEGIN <= nId && nId < RES_POOLCOLL_DOC_END )
     710             :         {
     711           0 :             pStrArr = bProgName ? &GetDocProgNameArray() : &GetDocUINameArray();
     712           0 :             nStt = RES_POOLCOLL_DOC_BEGIN;
     713             :         }
     714           0 :         break;
     715             :     case COLL_HTML_BITS:
     716           0 :         if( RES_POOLCOLL_HTML_BEGIN <= nId && nId < RES_POOLCOLL_HTML_END )
     717             :         {
     718           0 :             pStrArr = bProgName ? &GetHTMLProgNameArray() : &GetHTMLUINameArray();
     719           0 :             nStt = RES_POOLCOLL_HTML_BEGIN;
     720             :         }
     721           0 :         break;
     722             :     case POOLGRP_CHARFMT:
     723           0 :         if( RES_POOLCHR_NORMAL_BEGIN <= nId && nId < RES_POOLCHR_NORMAL_END )
     724             :         {
     725           0 :             pStrArr = bProgName ? &GetChrFmtProgNameArray() : &GetChrFmtUINameArray();
     726           0 :             nStt = RES_POOLCHR_NORMAL_BEGIN;
     727             :         }
     728           0 :         else if( RES_POOLCHR_HTML_BEGIN <= nId && nId < RES_POOLCHR_HTML_END )
     729             :         {
     730           0 :             pStrArr = bProgName ? &GetHTMLChrFmtProgNameArray() : &GetHTMLChrFmtUINameArray();
     731           0 :             nStt = RES_POOLCHR_HTML_BEGIN;
     732             :         }
     733           0 :         break;
     734             :     case POOLGRP_FRAMEFMT:
     735           0 :         if( RES_POOLFRM_BEGIN <= nId && nId < RES_POOLFRM_END )
     736             :         {
     737           0 :             pStrArr = bProgName ? &GetFrmFmtProgNameArray() : &GetFrmFmtUINameArray();
     738           0 :             nStt = RES_POOLFRM_BEGIN;
     739             :         }
     740           0 :         break;
     741             :     case POOLGRP_PAGEDESC:
     742           0 :         if( RES_POOLPAGE_BEGIN <= nId && nId < RES_POOLPAGE_END )
     743             :         {
     744           0 :             pStrArr = bProgName ? &GetPageDescProgNameArray() : &GetPageDescUINameArray();
     745           0 :             nStt = RES_POOLPAGE_BEGIN;
     746             :         }
     747           0 :         break;
     748             :     case POOLGRP_NUMRULE:
     749           0 :         if( RES_POOLNUMRULE_BEGIN <= nId && nId < RES_POOLNUMRULE_END )
     750             :         {
     751           0 :             pStrArr = bProgName ? &GetNumRuleProgNameArray() : &GetNumRuleUINameArray();
     752           0 :             nStt = RES_POOLNUMRULE_BEGIN;
     753             :         }
     754           0 :         break;
     755             :     }
     756           0 :     return pStrArr ? (pStrArr->operator[] ( nId - nStt ) ) : rFillName;
     757             : }
     758       18190 : void SwStyleNameMapper::fillNameFromId( sal_uInt16 nId, String& rFillName, bool bProgName )
     759             : {
     760       18190 :     sal_uInt16 nStt = 0;
     761       18190 :     const boost::ptr_vector<String>* pStrArr = 0;
     762             : 
     763       18190 :     switch( (USER_FMT | COLL_GET_RANGE_BITS | POOLGRP_NOCOLLID) & nId )
     764             :     {
     765             :     case COLL_TEXT_BITS:
     766        9715 :         if( RES_POOLCOLL_TEXT_BEGIN <= nId && nId < RES_POOLCOLL_TEXT_END )
     767             :         {
     768        9715 :             pStrArr = bProgName ? &GetTextProgNameArray() : &GetTextUINameArray();
     769        9715 :             nStt = RES_POOLCOLL_TEXT_BEGIN;
     770             :         }
     771        9715 :         break;
     772             :     case COLL_LISTS_BITS:
     773         984 :         if( RES_POOLCOLL_LISTS_BEGIN <= nId && nId < RES_POOLCOLL_LISTS_END )
     774             :         {
     775         984 :             pStrArr = bProgName ? &GetListsProgNameArray() : &GetListsUINameArray();
     776         984 :             nStt = RES_POOLCOLL_LISTS_BEGIN;
     777             :         }
     778         984 :         break;
     779             :     case COLL_EXTRA_BITS:
     780        1796 :         if( RES_POOLCOLL_EXTRA_BEGIN <= nId && nId < RES_POOLCOLL_EXTRA_END )
     781             :         {
     782        1796 :             pStrArr = bProgName ? &GetExtraProgNameArray() : &GetExtraUINameArray();
     783        1796 :             nStt = RES_POOLCOLL_EXTRA_BEGIN;
     784             :         }
     785        1796 :         break;
     786             :     case COLL_REGISTER_BITS:
     787         992 :         if( RES_POOLCOLL_REGISTER_BEGIN <= nId && nId < RES_POOLCOLL_REGISTER_END )
     788             :         {
     789         992 :             pStrArr = bProgName ? &GetRegisterProgNameArray() : &GetRegisterUINameArray();
     790         992 :             nStt = RES_POOLCOLL_REGISTER_BEGIN;
     791             :         }
     792         992 :         break;
     793             :     case COLL_DOC_BITS:
     794         126 :         if( RES_POOLCOLL_DOC_BEGIN <= nId && nId < RES_POOLCOLL_DOC_END )
     795             :         {
     796         126 :             pStrArr = bProgName ? &GetDocProgNameArray() : &GetDocUINameArray();
     797         126 :             nStt = RES_POOLCOLL_DOC_BEGIN;
     798             :         }
     799         126 :         break;
     800             :     case COLL_HTML_BITS:
     801         608 :         if( RES_POOLCOLL_HTML_BEGIN <= nId && nId < RES_POOLCOLL_HTML_END )
     802             :         {
     803         608 :             pStrArr = bProgName ? &GetHTMLProgNameArray() : &GetHTMLUINameArray();
     804         608 :             nStt = RES_POOLCOLL_HTML_BEGIN;
     805             :         }
     806         608 :         break;
     807             :     case POOLGRP_CHARFMT:
     808        1416 :         if( RES_POOLCHR_NORMAL_BEGIN <= nId && nId < RES_POOLCHR_NORMAL_END )
     809             :         {
     810         970 :             pStrArr = bProgName ? &GetChrFmtProgNameArray() : &GetChrFmtUINameArray();
     811         970 :             nStt = RES_POOLCHR_NORMAL_BEGIN;
     812             :         }
     813         446 :         else if( RES_POOLCHR_HTML_BEGIN <= nId && nId < RES_POOLCHR_HTML_END )
     814             :         {
     815         446 :             pStrArr = bProgName ? &GetHTMLChrFmtProgNameArray() : &GetHTMLChrFmtUINameArray();
     816         446 :             nStt = RES_POOLCHR_HTML_BEGIN;
     817             :         }
     818        1416 :         break;
     819             :     case POOLGRP_FRAMEFMT:
     820         532 :         if( RES_POOLFRM_BEGIN <= nId && nId < RES_POOLFRM_END )
     821             :         {
     822         532 :             pStrArr = bProgName ? &GetFrmFmtProgNameArray() : &GetFrmFmtUINameArray();
     823         532 :             nStt = RES_POOLFRM_BEGIN;
     824             :         }
     825         532 :         break;
     826             :     case POOLGRP_PAGEDESC:
     827        1927 :         if( RES_POOLPAGE_BEGIN <= nId && nId < RES_POOLPAGE_END )
     828             :         {
     829        1927 :             pStrArr = bProgName ? &GetPageDescProgNameArray() : &GetPageDescUINameArray();
     830        1927 :             nStt = RES_POOLPAGE_BEGIN;
     831             :         }
     832        1927 :         break;
     833             :     case POOLGRP_NUMRULE:
     834          94 :         if( RES_POOLNUMRULE_BEGIN <= nId && nId < RES_POOLNUMRULE_END )
     835             :         {
     836          94 :             pStrArr = bProgName ? &GetNumRuleProgNameArray() : &GetNumRuleUINameArray();
     837          94 :             nStt = RES_POOLNUMRULE_BEGIN;
     838             :         }
     839          94 :         break;
     840             :     }
     841       18190 :     if (pStrArr)
     842       18190 :         rFillName = (pStrArr->operator[] ( nId - nStt ) );
     843       18190 : }
     844             : // Get the UI Name from the pool ID
     845          40 : void SwStyleNameMapper::FillUIName ( sal_uInt16 nId, String& rFillName )
     846             : {
     847          40 :     fillNameFromId ( nId, rFillName, false );
     848          40 : }
     849             : // Get the UI Name from the pool ID
     850           0 : const String& SwStyleNameMapper::GetUIName ( sal_uInt16 nId, const String& rName )
     851             : {
     852           0 :     return getNameFromId ( nId, rName, false );
     853             : }
     854             : 
     855             : // Get the programmatic Name from the pool ID
     856           0 : void SwStyleNameMapper::FillProgName ( sal_uInt16 nId, String& rFillName )
     857             : {
     858           0 :     fillNameFromId ( nId, rFillName, true );
     859           0 : }
     860             : // Get the programmatic Name from the pool ID
     861           0 : const String& SwStyleNameMapper::GetProgName ( sal_uInt16 nId, const String& rName )
     862             : {
     863           0 :     return getNameFromId ( nId, rName, true );
     864             : }
     865             : // This gets the PoolId from the UI Name
     866       76121 : sal_uInt16 SwStyleNameMapper::GetPoolIdFromUIName( const String& rName, SwGetPoolIdFromName eFlags )
     867             : {
     868       76121 :     const NameToIdHash & rHashMap = getHashTable ( eFlags, false );
     869       76121 :     NameToIdHash::const_iterator aIter = rHashMap.find ( &rName );
     870       76121 :     return aIter != rHashMap.end() ? (*aIter).second : USHRT_MAX;
     871             : }
     872             : // Get the Pool ID from the programmatic name
     873       17764 : sal_uInt16 SwStyleNameMapper::GetPoolIdFromProgName( const String& rName, SwGetPoolIdFromName eFlags )
     874             : {
     875       17764 :     const NameToIdHash & rHashMap = getHashTable ( eFlags, true );
     876       17764 :     NameToIdHash::const_iterator aIter = rHashMap.find ( &rName );
     877       17764 :     return aIter != rHashMap.end() ? (*aIter).second : USHRT_MAX;
     878             : }
     879             : 
     880         225 : boost::ptr_vector<String>* SwStyleNameMapper::NewUINameArray( boost::ptr_vector<String>*& pNameArray, sal_uInt16 nStt, sal_uInt16 nEnd )
     881             : {
     882         225 :     if( !pNameArray )
     883             :     {
     884         225 :         pNameArray = new boost::ptr_vector<String>;
     885         225 :         pNameArray->reserve(nEnd - nStt);
     886        4148 :         while( nStt < nEnd )
     887             :         {
     888        3698 :             const ResId rRId( nStt, *pSwResMgr );
     889        3698 :             pNameArray->push_back(new String(rRId));
     890        3698 :             ++nStt;
     891             :         }
     892             :     }
     893         225 :     return pNameArray;
     894             : }
     895             : 
     896       10738 : const boost::ptr_vector<String>& SwStyleNameMapper::GetTextUINameArray()
     897             : {
     898             :     return pTextUINameArray ? *pTextUINameArray :
     899             :            *NewUINameArray( pTextUINameArray, RC_POOLCOLL_TEXT_BEGIN,
     900             :             ( RC_POOLCOLL_TEXT_BEGIN +
     901       10738 :                     (RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN )) );
     902             : }
     903             : 
     904         944 : const boost::ptr_vector<String>& SwStyleNameMapper::GetListsUINameArray()
     905             : {
     906             :     return pListsUINameArray ? *pListsUINameArray :
     907             :            *NewUINameArray( pListsUINameArray, RC_POOLCOLL_LISTS_BEGIN,
     908             :             ( RC_POOLCOLL_LISTS_BEGIN +
     909         944 :                     (RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN )) );
     910             : }
     911             : 
     912        1934 : const boost::ptr_vector<String>& SwStyleNameMapper::GetExtraUINameArray()
     913             : {
     914             :     return pExtraUINameArray ? *pExtraUINameArray :
     915             :            *NewUINameArray( pExtraUINameArray, RC_POOLCOLL_EXTRA_BEGIN,
     916             :                 ( RC_POOLCOLL_EXTRA_BEGIN +
     917        1934 :                     (RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN )) );
     918             : }
     919             : 
     920         992 : const boost::ptr_vector<String>& SwStyleNameMapper::GetRegisterUINameArray()
     921             : {
     922             :     return pRegisterUINameArray ? *pRegisterUINameArray :
     923             :            *NewUINameArray( pRegisterUINameArray, RC_POOLCOLL_REGISTER_BEGIN,
     924             :             ( RC_POOLCOLL_REGISTER_BEGIN +
     925         992 :                 (RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN )) );
     926             : }
     927             : 
     928         480 : const boost::ptr_vector<String>& SwStyleNameMapper::GetDocUINameArray()
     929             : {
     930             :     return pDocUINameArray ? *pDocUINameArray :
     931             :            *NewUINameArray( pDocUINameArray, RC_POOLCOLL_DOC_BEGIN,
     932             :                     ( RC_POOLCOLL_DOC_BEGIN +
     933         480 :                         (RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN )) );
     934             : }
     935             : 
     936         404 : const boost::ptr_vector<String>& SwStyleNameMapper::GetHTMLUINameArray()
     937             : {
     938             :     return pHTMLUINameArray ? *pHTMLUINameArray :
     939             :            *NewUINameArray( pHTMLUINameArray, RC_POOLCOLL_HTML_BEGIN,
     940             :                     ( RC_POOLCOLL_HTML_BEGIN +
     941         404 :                         (RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN )) );
     942             : }
     943             : 
     944         494 : const boost::ptr_vector<String>& SwStyleNameMapper::GetFrmFmtUINameArray()
     945             : {
     946             :     return pFrmFmtUINameArray ? *pFrmFmtUINameArray :
     947             :            *NewUINameArray( pFrmFmtUINameArray, RC_POOLFRMFMT_BEGIN,
     948             :                     ( RC_POOLFRMFMT_BEGIN +
     949         494 :                         (RES_POOLFRM_END - RES_POOLFRM_BEGIN )) );
     950             : }
     951             : 
     952         395 : const boost::ptr_vector<String>& SwStyleNameMapper::GetChrFmtUINameArray()
     953             : {
     954             :     return pChrFmtUINameArray ? *pChrFmtUINameArray :
     955             :            *NewUINameArray( pChrFmtUINameArray, RC_POOLCHRFMT_BEGIN,
     956             :             ( RC_POOLCHRFMT_BEGIN +
     957         395 :                     (RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN )) );
     958             : }
     959             : 
     960         233 : const boost::ptr_vector<String>& SwStyleNameMapper::GetHTMLChrFmtUINameArray()
     961             : {
     962             :     return pHTMLChrFmtUINameArray ? *pHTMLChrFmtUINameArray :
     963             :            *NewUINameArray( pHTMLChrFmtUINameArray, RC_POOLCHRFMT_HTML_BEGIN,
     964             :             ( RC_POOLCHRFMT_HTML_BEGIN +
     965         233 :                     (RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN )) );
     966             : }
     967             : 
     968        1521 : const boost::ptr_vector<String>& SwStyleNameMapper::GetPageDescUINameArray()
     969             : {
     970             :     return pPageDescUINameArray ? *pPageDescUINameArray :
     971             :            *NewUINameArray( pPageDescUINameArray, RC_POOLPAGEDESC_BEGIN,
     972             :             ( RC_POOLPAGEDESC_BEGIN +
     973        1521 :                     (RES_POOLPAGE_END - RES_POOLPAGE_BEGIN )) );
     974             : }
     975             : 
     976          92 : const boost::ptr_vector<String>& SwStyleNameMapper::GetNumRuleUINameArray()
     977             : {
     978             :     return pNumRuleUINameArray ? *pNumRuleUINameArray :
     979             :            *NewUINameArray( pNumRuleUINameArray, RC_POOLNUMRULE_BEGIN,
     980             :             ( RC_POOLNUMRULE_BEGIN +
     981          92 :                     (RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN )) );
     982             : }
     983             : 
     984         207 : boost::ptr_vector<String>* SwStyleNameMapper::NewProgNameArray( boost::ptr_vector<String>*& pProgNameArray, const SwTableEntry *pTable, sal_uInt8 nCount )
     985             : {
     986         207 :     if( !pProgNameArray )
     987             :     {
     988         207 :         pProgNameArray = new boost::ptr_vector<String>;
     989         207 :         pProgNameArray->reserve(nCount);
     990        3804 :         while (pTable->nLength)
     991             :         {
     992        3390 :             pProgNameArray->push_back(new String( pTable->pChar, pTable->nLength, RTL_TEXTENCODING_ASCII_US ));
     993        3390 :             pTable++;
     994             :         }
     995             :     }
     996         207 :     return pProgNameArray;
     997             : }
     998             : 
     999        5870 : const boost::ptr_vector<String>& SwStyleNameMapper::GetTextProgNameArray()
    1000             : {
    1001             :     return pTextProgNameArray ? *pTextProgNameArray :
    1002             :            *NewProgNameArray( pTextProgNameArray, TextProgNameTable,
    1003        5870 :             sizeof ( TextProgNameTable ) / sizeof ( SwTableEntry ) );
    1004             : }
    1005             : 
    1006         442 : const boost::ptr_vector<String>& SwStyleNameMapper::GetListsProgNameArray()
    1007             : {
    1008             :     return pListsProgNameArray ? *pListsProgNameArray :
    1009             :            *NewProgNameArray( pListsProgNameArray, ListsProgNameTable,
    1010         442 :             sizeof ( ListsProgNameTable ) / sizeof ( SwTableEntry ) );
    1011             : }
    1012             : 
    1013         944 : const boost::ptr_vector<String>& SwStyleNameMapper::GetExtraProgNameArray()
    1014             : {
    1015             :     return pExtraProgNameArray ? *pExtraProgNameArray :
    1016             :            *NewProgNameArray( pExtraProgNameArray, ExtraProgNameTable,
    1017         944 :             sizeof ( ExtraProgNameTable ) / sizeof ( SwTableEntry ) );
    1018             : }
    1019             : 
    1020         402 : const boost::ptr_vector<String>& SwStyleNameMapper::GetRegisterProgNameArray()
    1021             : {
    1022             :     return pRegisterProgNameArray ? *pRegisterProgNameArray :
    1023             :            *NewProgNameArray( pRegisterProgNameArray, RegisterProgNameTable,
    1024         402 :             sizeof ( RegisterProgNameTable ) / sizeof ( SwTableEntry ) );
    1025             : }
    1026             : 
    1027          48 : const boost::ptr_vector<String>& SwStyleNameMapper::GetDocProgNameArray()
    1028             : {
    1029             :     return pDocProgNameArray ? *pDocProgNameArray :
    1030             :            *NewProgNameArray( pDocProgNameArray, DocProgNameTable,
    1031          48 :             sizeof ( DocProgNameTable ) / sizeof ( SwTableEntry ) );
    1032             : }
    1033             : 
    1034         606 : const boost::ptr_vector<String>& SwStyleNameMapper::GetHTMLProgNameArray()
    1035             : {
    1036             :     return pHTMLProgNameArray ? *pHTMLProgNameArray :
    1037             :            *NewProgNameArray( pHTMLProgNameArray, HTMLProgNameTable,
    1038         606 :             sizeof ( HTMLProgNameTable ) / sizeof ( SwTableEntry ) );
    1039             : }
    1040             : 
    1041          82 : const boost::ptr_vector<String>& SwStyleNameMapper::GetFrmFmtProgNameArray()
    1042             : {
    1043             :     return pFrmFmtProgNameArray ? *pFrmFmtProgNameArray :
    1044             :            *NewProgNameArray( pFrmFmtProgNameArray, FrmFmtProgNameTable,
    1045          82 :             sizeof ( FrmFmtProgNameTable ) / sizeof ( SwTableEntry ) );
    1046             : }
    1047             : 
    1048         761 : const boost::ptr_vector<String>& SwStyleNameMapper::GetChrFmtProgNameArray()
    1049             : {
    1050             :     return pChrFmtProgNameArray ? *pChrFmtProgNameArray :
    1051             :            *NewProgNameArray( pChrFmtProgNameArray, ChrFmtProgNameTable,
    1052         761 :             sizeof ( ChrFmtProgNameTable ) / sizeof ( SwTableEntry ) );
    1053             : }
    1054             : 
    1055         399 : const boost::ptr_vector<String>& SwStyleNameMapper::GetHTMLChrFmtProgNameArray()
    1056             : {
    1057             :     return pHTMLChrFmtProgNameArray ? *pHTMLChrFmtProgNameArray :
    1058             :            *NewProgNameArray( pHTMLChrFmtProgNameArray, HTMLChrFmtProgNameTable,
    1059         399 :             sizeof ( HTMLChrFmtProgNameTable ) / sizeof ( SwTableEntry ) );
    1060             : }
    1061             : 
    1062         562 : const boost::ptr_vector<String>& SwStyleNameMapper::GetPageDescProgNameArray()
    1063             : {
    1064             :     return pPageDescProgNameArray ? *pPageDescProgNameArray :
    1065             :            *NewProgNameArray( pPageDescProgNameArray, PageDescProgNameTable,
    1066         562 :             sizeof ( PageDescProgNameTable ) / sizeof ( SwTableEntry ) );
    1067             : }
    1068             : 
    1069          57 : const boost::ptr_vector<String>& SwStyleNameMapper::GetNumRuleProgNameArray()
    1070             : {
    1071             :     return pNumRuleProgNameArray ? *pNumRuleProgNameArray :
    1072             :            *NewProgNameArray( pNumRuleProgNameArray, NumRuleProgNameTable,
    1073          57 :             sizeof ( NumRuleProgNameTable ) / sizeof ( SwTableEntry ) );
    1074             : }
    1075             : 
    1076             : 
    1077          16 : const String SwStyleNameMapper::GetSpecialExtraProgName( const String& rExtraUIName )
    1078             : {
    1079          16 :     String aRes = rExtraUIName;
    1080          16 :     bool bChgName = false;
    1081          16 :     const boost::ptr_vector<String>& rExtraArr(GetExtraUINameArray());
    1082             :     static sal_uInt16 nIds[] =
    1083             :     {
    1084             :         RES_POOLCOLL_LABEL_DRAWING - RES_POOLCOLL_EXTRA_BEGIN,
    1085             :         RES_POOLCOLL_LABEL_ABB - RES_POOLCOLL_EXTRA_BEGIN,
    1086             :         RES_POOLCOLL_LABEL_TABLE - RES_POOLCOLL_EXTRA_BEGIN,
    1087             :         RES_POOLCOLL_LABEL_FRAME- RES_POOLCOLL_EXTRA_BEGIN,
    1088             :         0
    1089             :     };
    1090             :     const sal_uInt16 * pIds;
    1091          40 :     for ( pIds = nIds; *pIds; ++pIds)
    1092             :     {
    1093          40 :         if (aRes == rExtraArr[ *pIds ])
    1094             :         {
    1095          16 :             bChgName = true;
    1096          16 :             break;
    1097             :         }
    1098             :     }
    1099          16 :     if (bChgName)
    1100          16 :         aRes = GetExtraProgNameArray()[*pIds];
    1101          16 :     return aRes;
    1102             : }
    1103             : 
    1104         334 : const String SwStyleNameMapper::GetSpecialExtraUIName( const String& rExtraProgName )
    1105             : {
    1106         334 :     String aRes = rExtraProgName;
    1107         334 :     bool bChgName = false;
    1108         334 :     const boost::ptr_vector<String>& rExtraArr(GetExtraProgNameArray());
    1109             :     static sal_uInt16 nIds[] =
    1110             :     {
    1111             :         RES_POOLCOLL_LABEL_DRAWING - RES_POOLCOLL_EXTRA_BEGIN,
    1112             :         RES_POOLCOLL_LABEL_ABB - RES_POOLCOLL_EXTRA_BEGIN,
    1113             :         RES_POOLCOLL_LABEL_TABLE - RES_POOLCOLL_EXTRA_BEGIN,
    1114             :         RES_POOLCOLL_LABEL_FRAME- RES_POOLCOLL_EXTRA_BEGIN,
    1115             :         0
    1116             :     };
    1117             :     const sal_uInt16 * pIds;
    1118             : 
    1119         890 :     for ( pIds = nIds; *pIds; ++pIds)
    1120             :     {
    1121         868 :         if (aRes == rExtraArr[ *pIds ])
    1122             :         {
    1123         312 :             bChgName = true;
    1124         312 :             break;
    1125             :         }
    1126             :     }
    1127         334 :     if (bChgName)
    1128         312 :         aRes = GetExtraUINameArray()[*pIds];
    1129         334 :     return aRes;
    1130             : }
    1131             : 
    1132             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10