xref: /aoo4110/main/sw/inc/SwStyleNameMapper.hxx (revision b1cdbd2c)
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