diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
commit | 267c6f2ac71f92999e969232431ba04678e7437e (patch) | |
tree | 358c9467650e1d0a1d7227a21dac2e3d08b622b2 /sw/inc/SwStyleNameMapper.hxx | |
parent | Initial commit. (diff) | |
download | libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip |
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sw/inc/SwStyleNameMapper.hxx')
-rw-r--r-- | sw/inc/SwStyleNameMapper.hxx | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/sw/inc/SwStyleNameMapper.hxx b/sw/inc/SwStyleNameMapper.hxx new file mode 100644 index 0000000000..139f09c974 --- /dev/null +++ b/sw/inc/SwStyleNameMapper.hxx @@ -0,0 +1,158 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_SW_INC_SWSTYLENAMEMAPPER_HXX +#define INCLUDED_SW_INC_SWSTYLENAMEMAPPER_HXX + +#include <sal/types.h> +#include <rtl/ustring.hxx> +#include "SwGetPoolIdFromName.hxx" +#include "swdllapi.h" + +#include <unordered_map> +#include <vector> + +/** This class holds all data about the names of styles used in the user + * interface (UI names...these are localised into different languages). + * These UI names are loaded from the resource files on demand. + * + * It also holds all information about the 'Programmatic' names of styles + * which remain static (and are hardcoded in the corresponding cxx file) + * for all languages. + * + * This class also provides static functions which can be used for the + * following conversions: + * + * 1. Programmatic Name -> UI Name + * 2. Programmatic Name -> Pool ID + * 3. UI Name -> Programmatic Name + * 4. UI Name -> Pool ID + * 5. Pool ID -> UI Name + * 6. Pool ID -> Programmatic Name + * + * The relationship of these tables to the style families is as follows: + * + * 1. Paragraph contains the Text, Lists, Extra, Register, Doc and HTML + * name arrays. + * 2. Character contains the ChrFormat and HTMLChrFormat name arrays. + * 3. Page contains the PageDesc name array. + * 4. Frame contains the FrameFormat name array. + * 5. Numbering Rule contains the NumRule name array. + */ + +/** + * There is a further complication that came to light later. If someone enters + * a user-defined style name which is the same as a programmatic name, this + * name clash must be handled. + * + * Therefore, when there is a danger of a nameclash, the boolean bDisambiguate + * must be set to true in the SwStyleNameMapper call (it defaults to false). + * This will cause the following to happen: + * + * If the UI style name either equals a programmatic name or already ends + * with " (user)", then it must append " (user)" to the end. + * + * When a programmatic name is being converted to a UI name, if it ends in + * " (user)", we simply remove it. + */ + +typedef std::unordered_map<OUString, sal_uInt16> NameToIdHash; + +class SwStyleNameMapper final +{ + friend void InitCore(); + friend void FinitCore(); + + static void fillNameFromId(sal_uInt16 nId, OUString &rName, bool bProgName); + static const OUString& getNameFromId(sal_uInt16 nId, const OUString &rName, + bool bProgName); + static const NameToIdHash& getHashTable ( SwGetPoolIdFromName, bool bProgName ); +#ifdef _NEED_TO_DEBUG_MAPPING + static void testNameTable( SwGetPoolIdFromName const nFamily, sal_uInt16 const nStartIndex, sal_uInt16 const nEndIndex ); +#endif + +public: + // This gets the UI Name from the programmatic name + static const OUString& GetUIName(const OUString& rName, SwGetPoolIdFromName); + static void FillUIName(const OUString& rName, OUString& rFillName, + SwGetPoolIdFromName); + + // Get the programmatic Name from the UI name + static const OUString& GetProgName(const OUString& rName, + SwGetPoolIdFromName); + static void FillProgName(const OUString& rName, OUString& rFillName, + SwGetPoolIdFromName); + + // This gets the UI Name from the Pool ID + SW_DLLPUBLIC static void FillUIName(sal_uInt16 nId, OUString& rFillName); + SW_DLLPUBLIC static const OUString& GetUIName(sal_uInt16 nId, + const OUString& rName); + + // This gets the programmatic Name from the Pool ID + static void FillProgName(sal_uInt16 nId, OUString& rFillName); + SW_DLLPUBLIC static const OUString& GetProgName(sal_uInt16 nId, + const OUString& rName); + + // This gets the PoolId from the UI Name + SW_DLLPUBLIC static sal_uInt16 GetPoolIdFromUIName(const OUString& rName, + SwGetPoolIdFromName); + + // Get the Pool ID from the programmatic name + static sal_uInt16 GetPoolIdFromProgName(const OUString& rName, + SwGetPoolIdFromName); + + // used to convert the 4 special ExtraProg/UINames for + // RES_POOLCOLL_LABEL_DRAWING, RES_POOLCOLL_LABEL_ABB, + // RES_POOLCOLL_LABEL_TABLE, RES_POOLCOLL_LABEL_FRAME + // forth and back. + // Non-matching names remain unchanged. + SW_DLLPUBLIC static const OUString & GetSpecialExtraProgName( + const OUString& rExtraUIName); + static const OUString & GetSpecialExtraUIName(const OUString& rExtraProgName); + + static const std::vector<OUString>& GetTextUINameArray(); + static const std::vector<OUString>& GetListsUINameArray(); + static const std::vector<OUString>& GetExtraUINameArray(); + static const std::vector<OUString>& GetRegisterUINameArray(); + static const std::vector<OUString>& GetDocUINameArray(); + static const std::vector<OUString>& GetHTMLUINameArray(); + static const std::vector<OUString>& GetFrameFormatUINameArray(); + static const std::vector<OUString>& GetChrFormatUINameArray(); + static const std::vector<OUString>& GetHTMLChrFormatUINameArray(); + static const std::vector<OUString>& GetPageDescUINameArray(); + static const std::vector<OUString>& GetNumRuleUINameArray(); + static const std::vector<OUString>& GetTableStyleUINameArray(); + static const std::vector<OUString>& GetCellStyleUINameArray(); + + static const std::vector<OUString>& GetTextProgNameArray(); + static const std::vector<OUString>& GetListsProgNameArray(); + static const std::vector<OUString>& GetExtraProgNameArray(); + static const std::vector<OUString>& GetRegisterProgNameArray(); + static const std::vector<OUString>& GetDocProgNameArray(); + static const std::vector<OUString>& GetHTMLProgNameArray(); + static const std::vector<OUString>& GetFrameFormatProgNameArray(); + static const std::vector<OUString>& GetChrFormatProgNameArray(); + static const std::vector<OUString>& GetHTMLChrFormatProgNameArray(); + static const std::vector<OUString>& GetPageDescProgNameArray(); + static const std::vector<OUString>& GetNumRuleProgNameArray(); + static const std::vector<OUString>& GetTableStyleProgNameArray(); + static const std::vector<OUString>& GetCellStyleProgNameArray(); +}; +#endif // _NAME_MAPPER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |