1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _SWSTYLENAMEMAPPER_HXX 24*b1cdbd2cSJim Jagielski #define _SWSTYLENAMEMAPPER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <sal/types.h> 27*b1cdbd2cSJim Jagielski #include <tools/string.hxx> 28*b1cdbd2cSJim Jagielski #include <SwGetPoolIdFromName.hxx> 29*b1cdbd2cSJim Jagielski #include "swdllapi.h" 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #ifndef INCLUDED_HASH_MAP 32*b1cdbd2cSJim Jagielski #include <hash_map> 33*b1cdbd2cSJim Jagielski #define INCLUDED_HASH_MAP 34*b1cdbd2cSJim Jagielski #endif 35*b1cdbd2cSJim Jagielski #include <stringhash.hxx> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski /* This class holds all data about the names of styles used in the user 38*b1cdbd2cSJim Jagielski * interface (UI names...these are localised into different languages). 39*b1cdbd2cSJim Jagielski * These UI names are loaded from the resource files on demand. 40*b1cdbd2cSJim Jagielski * 41*b1cdbd2cSJim Jagielski * It also holds all information about the 'Programmatic' names of styles 42*b1cdbd2cSJim Jagielski * which remain static (and are hardcoded in the corresponding cxx file) 43*b1cdbd2cSJim Jagielski * for all languages. 44*b1cdbd2cSJim Jagielski * 45*b1cdbd2cSJim Jagielski * This class also provides static functions which can be used for the 46*b1cdbd2cSJim Jagielski * following conversions: 47*b1cdbd2cSJim Jagielski * 48*b1cdbd2cSJim Jagielski * 1. Programmatic Name -> UI Name 49*b1cdbd2cSJim Jagielski * 2. Programmatic Name -> Pool ID 50*b1cdbd2cSJim Jagielski * 3. UI Name -> Programmatic Name 51*b1cdbd2cSJim Jagielski * 4. UI Name -> Pool ID 52*b1cdbd2cSJim Jagielski * 5. Pool ID -> UI Name 53*b1cdbd2cSJim Jagielski * 6. Pool ID -> Programmatic Name 54*b1cdbd2cSJim Jagielski * 55*b1cdbd2cSJim Jagielski * The relationship of these tables to the style families is as follows: 56*b1cdbd2cSJim Jagielski * 57*b1cdbd2cSJim Jagielski * 1. Paragraph contains the Text, Lists, Extra, Register, Doc and HTML 58*b1cdbd2cSJim Jagielski * name arrays. 59*b1cdbd2cSJim Jagielski * 2. Character contains the ChrFmt and HTMLChrFmt name arrays. 60*b1cdbd2cSJim Jagielski * 3. Page contains the PageDesc name array. 61*b1cdbd2cSJim Jagielski * 4. Frame contains the FrmFmt name array. 62*b1cdbd2cSJim Jagielski * 5. Numbering Rule contains the NumRule name array. 63*b1cdbd2cSJim Jagielski */ 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski /* 66*b1cdbd2cSJim Jagielski * There is a further complication that came to light later. If someone enters 67*b1cdbd2cSJim Jagielski * a user-defined style name which is the same as a programmatic name, this 68*b1cdbd2cSJim Jagielski * name clash must be handled. 69*b1cdbd2cSJim Jagielski * 70*b1cdbd2cSJim Jagielski * Therefore, when there is a danger of a nameclash, the boolean bDisambiguate 71*b1cdbd2cSJim Jagielski * must be set to true in the SwStyleNameMapper call (it defaults to false). 72*b1cdbd2cSJim Jagielski * This will cause the following to happen: 73*b1cdbd2cSJim Jagielski * 74*b1cdbd2cSJim Jagielski * If the UI style name either equals a programmatic name or already ends 75*b1cdbd2cSJim Jagielski * with " (user)", then it must append " (user)" to the end. 76*b1cdbd2cSJim Jagielski * 77*b1cdbd2cSJim Jagielski * When a programmatic name is being converted to a UI name, if it ends in 78*b1cdbd2cSJim Jagielski * " (user)", we simply remove it. 79*b1cdbd2cSJim Jagielski */ 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski class SvStringsDtor; 82*b1cdbd2cSJim Jagielski class String; 83*b1cdbd2cSJim Jagielski struct SwTableEntry; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski typedef ::std::hash_map < const String*, sal_uInt16, StringHash, StringEq > NameToIdHash; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski class SwStyleNameMapper 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski friend void _InitCore(); 91*b1cdbd2cSJim Jagielski friend void _FinitCore(); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski protected: 94*b1cdbd2cSJim Jagielski // UI Name tables 95*b1cdbd2cSJim Jagielski static SvStringsDtor *pTextUINameArray, 96*b1cdbd2cSJim Jagielski *pListsUINameArray, 97*b1cdbd2cSJim Jagielski *pExtraUINameArray, 98*b1cdbd2cSJim Jagielski *pRegisterUINameArray, 99*b1cdbd2cSJim Jagielski *pDocUINameArray, 100*b1cdbd2cSJim Jagielski *pHTMLUINameArray, 101*b1cdbd2cSJim Jagielski *pFrmFmtUINameArray, 102*b1cdbd2cSJim Jagielski *pChrFmtUINameArray, 103*b1cdbd2cSJim Jagielski *pHTMLChrFmtUINameArray, 104*b1cdbd2cSJim Jagielski *pPageDescUINameArray, 105*b1cdbd2cSJim Jagielski *pNumRuleUINameArray, 106*b1cdbd2cSJim Jagielski // Programmatic Name tables 107*b1cdbd2cSJim Jagielski *pTextProgNameArray, 108*b1cdbd2cSJim Jagielski *pListsProgNameArray, 109*b1cdbd2cSJim Jagielski *pExtraProgNameArray, 110*b1cdbd2cSJim Jagielski *pRegisterProgNameArray, 111*b1cdbd2cSJim Jagielski *pDocProgNameArray, 112*b1cdbd2cSJim Jagielski *pHTMLProgNameArray, 113*b1cdbd2cSJim Jagielski *pFrmFmtProgNameArray, 114*b1cdbd2cSJim Jagielski *pChrFmtProgNameArray, 115*b1cdbd2cSJim Jagielski *pHTMLChrFmtProgNameArray, 116*b1cdbd2cSJim Jagielski *pPageDescProgNameArray, 117*b1cdbd2cSJim Jagielski *pNumRuleProgNameArray; 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski static NameToIdHash *pParaUIMap, 120*b1cdbd2cSJim Jagielski *pCharUIMap, 121*b1cdbd2cSJim Jagielski *pPageUIMap, 122*b1cdbd2cSJim Jagielski *pFrameUIMap, 123*b1cdbd2cSJim Jagielski *pNumRuleUIMap, 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski *pParaProgMap, 126*b1cdbd2cSJim Jagielski *pCharProgMap, 127*b1cdbd2cSJim Jagielski *pPageProgMap, 128*b1cdbd2cSJim Jagielski *pFrameProgMap, 129*b1cdbd2cSJim Jagielski *pNumRuleProgMap; 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski static SvStringsDtor* NewUINameArray( SvStringsDtor*&, 132*b1cdbd2cSJim Jagielski sal_uInt16 nStt, 133*b1cdbd2cSJim Jagielski sal_uInt16 nEnd ); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski static SvStringsDtor* NewProgNameArray( SvStringsDtor*&, 136*b1cdbd2cSJim Jagielski const SwTableEntry *pTable, 137*b1cdbd2cSJim Jagielski sal_uInt8 nCount); 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski static void fillNameFromId ( sal_uInt16 nId, String &rName, sal_Bool bProgName ); 140*b1cdbd2cSJim Jagielski static const String& getNameFromId ( sal_uInt16 nId, const String &rName, sal_Bool bProgName ); 141*b1cdbd2cSJim Jagielski static const NameToIdHash& getHashTable ( SwGetPoolIdFromName, sal_Bool bProgName ); 142*b1cdbd2cSJim Jagielski static sal_Bool SuffixIsUser ( const String & rString ); 143*b1cdbd2cSJim Jagielski static void CheckSuffixAndDelete ( String & rString ); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski public: 146*b1cdbd2cSJim Jagielski // This gets the UI Name from the programmatic name 147*b1cdbd2cSJim Jagielski static const String& GetUIName ( const String& rName, SwGetPoolIdFromName ); 148*b1cdbd2cSJim Jagielski static void FillUIName ( const String& rName, String& rFillName, SwGetPoolIdFromName, sal_Bool bDisambiguate = sal_False ); 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski // Get the programmatic Name from the UI name 151*b1cdbd2cSJim Jagielski static const String& GetProgName ( const String& rName, SwGetPoolIdFromName ); 152*b1cdbd2cSJim Jagielski static void FillProgName ( const String& rName, String& rFillName, SwGetPoolIdFromName, sal_Bool bDisambiguate = sal_False ); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski // This gets the UI Name from the Pool ID 155*b1cdbd2cSJim Jagielski SW_DLLPUBLIC static void FillUIName ( sal_uInt16 nId, String& rFillName ); 156*b1cdbd2cSJim Jagielski SW_DLLPUBLIC static const String& GetUIName ( sal_uInt16 nId, const String& rName ); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski // This gets the programmatic Name from the Pool ID 159*b1cdbd2cSJim Jagielski static void FillProgName( sal_uInt16 nId, String& rFillName ); 160*b1cdbd2cSJim Jagielski SW_DLLPUBLIC static const String& GetProgName ( sal_uInt16 nId, const String& rName ); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski // This gets the PoolId from the UI Name 163*b1cdbd2cSJim Jagielski SW_DLLPUBLIC static sal_uInt16 GetPoolIdFromUIName( const String& rName, SwGetPoolIdFromName ); 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski // Get the Pool ID from the programmatic name 166*b1cdbd2cSJim Jagielski static sal_uInt16 GetPoolIdFromProgName( const String& rName, SwGetPoolIdFromName ); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski // used to convert the 4 special ExtraProg/UINames for 169*b1cdbd2cSJim Jagielski // RES_POOLCOLL_LABEL_DRAWING, RES_POOLCOLL_LABEL_ABB, 170*b1cdbd2cSJim Jagielski // RES_POOLCOLL_LABEL_TABLE, RES_POOLCOLL_LABEL_FRAME 171*b1cdbd2cSJim Jagielski // forth and back. 172*b1cdbd2cSJim Jagielski // Non-matching names remain unchanged. 173*b1cdbd2cSJim Jagielski SW_DLLPUBLIC static const String GetSpecialExtraProgName( const String& rExtraUIName ); 174*b1cdbd2cSJim Jagielski static const String GetSpecialExtraUIName( const String& rExtraProgName ); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetTextUINameArray(); 177*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetListsUINameArray(); 178*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetExtraUINameArray(); 179*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetRegisterUINameArray(); 180*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetDocUINameArray(); 181*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetHTMLUINameArray(); 182*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetFrmFmtUINameArray(); 183*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetChrFmtUINameArray(); 184*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetHTMLChrFmtUINameArray(); 185*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetPageDescUINameArray(); 186*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetNumRuleUINameArray(); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetTextProgNameArray(); 189*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetListsProgNameArray(); 190*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetExtraProgNameArray(); 191*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetRegisterProgNameArray(); 192*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetDocProgNameArray(); 193*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetHTMLProgNameArray(); 194*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetFrmFmtProgNameArray(); 195*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetChrFmtProgNameArray(); 196*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetHTMLChrFmtProgNameArray(); 197*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetPageDescProgNameArray(); 198*b1cdbd2cSJim Jagielski static const SvStringsDtor& GetNumRuleProgNameArray(); 199*b1cdbd2cSJim Jagielski }; 200*b1cdbd2cSJim Jagielski #endif // _NAME_MAPPER_HXX 201