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