/* -*- 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_UNOMAP_HXX
#define INCLUDED_SW_INC_UNOMAP_HXX

#include <sal/config.h>

#include <span>

#include <sal/types.h>
#include <svl/itemprop.hxx>

class SfxItemPropertySet;

#define PROPERTY_MAP_TEXT_CURSOR            0
#define PROPERTY_MAP_CHAR_STYLE             1
#define PROPERTY_MAP_PARA_STYLE             2
#define PROPERTY_MAP_FRAME_STYLE            3
#define PROPERTY_MAP_PAGE_STYLE             4
#define PROPERTY_MAP_NUM_STYLE              5
#define PROPERTY_MAP_SECTION                6
#define PROPERTY_MAP_TEXT_TABLE             7
#define PROPERTY_MAP_TABLE_CELL             8
#define PROPERTY_MAP_TABLE_RANGE            9
#define PROPERTY_MAP_TEXT_SEARCH            10
#define PROPERTY_MAP_TEXT_FRAME             11
#define PROPERTY_MAP_TEXT_GRAPHIC           12
#define PROPERTY_MAP_TEXT_SHAPE             13
#define PROPERTY_MAP_INDEX_USER             14
#define PROPERTY_MAP_INDEX_CNTNT            15
#define PROPERTY_MAP_INDEX_IDX              16
#define PROPERTY_MAP_USER_MARK              17
#define PROPERTY_MAP_CNTIDX_MARK            18
#define PROPERTY_MAP_INDEX_MARK             19
#define PROPERTY_MAP_TEXT_TABLE_ROW         20
#define PROPERTY_MAP_TEXT_SHAPE_DESCRIPTOR  21
#define PROPERTY_MAP_TEXT_TABLE_CURSOR      22
#define PROPERTY_MAP_BOOKMARK               23
#define PROPERTY_MAP_PARAGRAPH_EXTENSIONS   24
#define PROPERTY_MAP_INDEX_ILLUSTRATIONS    25
#define PROPERTY_MAP_INDEX_OBJECTS          26
#define PROPERTY_MAP_INDEX_TABLES           27
#define PROPERTY_MAP_BIBLIOGRAPHY           28
#define PROPERTY_MAP_TEXT_DOCUMENT          29
#define PROPERTY_MAP_LINK_TARGET            30
#define PROPERTY_MAP_AUTO_TEXT_GROUP        31
#define PROPERTY_MAP_TEXTPORTION_EXTENSIONS 34
#define PROPERTY_MAP_FOOTNOTE               35
#define PROPERTY_MAP_PARAGRAPH              37
#define PROPERTY_MAP_EMBEDDED_OBJECT        38
#define PROPERTY_MAP_REDLINE                39
#define PROPERTY_MAP_TEXT_DEFAULT           40

#define PROPERTY_MAP_FLDTYP_DATETIME                    41
#define PROPERTY_MAP_FLDTYP_USER                        42
#define PROPERTY_MAP_FLDTYP_SET_EXP                     43
#define PROPERTY_MAP_FLDTYP_GET_EXP                     44
#define PROPERTY_MAP_FLDTYP_FILE_NAME                   45
#define PROPERTY_MAP_FLDTYP_PAGE_NUM                    46
#define PROPERTY_MAP_FLDTYP_AUTHOR                      47
#define PROPERTY_MAP_FLDTYP_CHAPTER                     48
#define PROPERTY_MAP_FLDTYP_GET_REFERENCE               49
#define PROPERTY_MAP_FLDTYP_CONDITIONED_TEXT            50
#define PROPERTY_MAP_FLDTYP_HIDDEN_TEXT                 51
#define PROPERTY_MAP_FLDTYP_ANNOTATION                  52
#define PROPERTY_MAP_FLDTYP_INPUT                       53
#define PROPERTY_MAP_FLDTYP_MACRO                       54
#define PROPERTY_MAP_FLDTYP_DDE                         55
#define PROPERTY_MAP_FLDTYP_HIDDEN_PARA                 56
#define PROPERTY_MAP_FLDTYP_DOC_INFO                    57
#define PROPERTY_MAP_FLDTYP_TEMPLATE_NAME               58
#define PROPERTY_MAP_FLDTYP_USER_EXT                    59
#define PROPERTY_MAP_FLDTYP_REF_PAGE_SET                60
#define PROPERTY_MAP_FLDTYP_REF_PAGE_GET                61
#define PROPERTY_MAP_FLDTYP_JUMP_EDIT                   62
#define PROPERTY_MAP_FLDTYP_SCRIPT                      63
#define PROPERTY_MAP_FLDTYP_DATABASE_NEXT_SET           64
#define PROPERTY_MAP_FLDTYP_DATABASE_NUM_SET            65
#define PROPERTY_MAP_FLDTYP_DATABASE_SET_NUM            66
#define PROPERTY_MAP_FLDTYP_DATABASE                    67
#define PROPERTY_MAP_FLDTYP_DATABASE_NAME               68
#define PROPERTY_MAP_FLDTYP_DOCSTAT                     69
#define PROPERTY_MAP_FLDTYP_DOCINFO_AUTHOR              70
#define PROPERTY_MAP_FLDTYP_DOCINFO_DATE_TIME           71
#define PROPERTY_MAP_FLDTYP_DOCINFO_CHANGE_DATE_TIME    72
#define PROPERTY_MAP_FLDTYP_DOCINFO_CREATE_DATE_TIME    73
#define PROPERTY_MAP_FLDTYP_DOCINFO_EDIT_TIME           74
#define PROPERTY_MAP_FLDTYP_DOCINFO_MISC                75
#define PROPERTY_MAP_FLDTYP_DOCINFO_REVISION            76
#define PROPERTY_MAP_FLDTYP_COMBINED_CHARACTERS         77
#define PROPERTY_MAP_FLDTYP_DUMMY_0                     78
#define PROPERTY_MAP_FLDTYP_TABLE_FORMULA               79
#define PROPERTY_MAP_FLDMSTR_USER                       80
#define PROPERTY_MAP_FLDMSTR_DDE                        81
#define PROPERTY_MAP_FLDMSTR_SET_EXP                    82
#define PROPERTY_MAP_FLDMSTR_DATABASE                   83
#define PROPERTY_MAP_FLDMSTR_DUMMY0                     84
#define PROPERTY_MAP_FLDTYP_BIBLIOGRAPHY                85
#define PROPERTY_MAP_FLDMSTR_BIBLIOGRAPHY               86
#define PROPERTY_MAP_TEXT                               87
#define PROPERTY_MAP_REDLINE_PORTION                    88
#define PROPERTY_MAP_MAILMERGE                          89
#define PROPERTY_MAP_FLDTYP_DROPDOWN                    90
#define PROPERTY_MAP_CHART2_DATA_SEQUENCE               91
#define PROPERTY_MAP_TEXT_VIEW                          92
#define PROPERTY_MAP_CONDITIONAL_PARA_STYLE             93
#define PROPERTY_MAP_CHAR_AUTO_STYLE                    94
#define PROPERTY_MAP_RUBY_AUTO_STYLE                    95
#define PROPERTY_MAP_PARA_AUTO_STYLE                    96
#define PROPERTY_MAP_FLDTYP_DOCINFO_CUSTOM              97
#define PROPERTY_MAP_METAFIELD                          98
#define PROPERTY_MAP_ACCESSIBILITY_TEXT_ATTRIBUTE       99
#define PROPERTY_MAP_TABLE_STYLE                        100
#define PROPERTY_MAP_CELL_STYLE                         101
#define PROPERTY_MAP_FIELDMARK                          102
#define PROPERTY_MAP_LINEBREAK                          103
#define PROPERTY_MAP_CONTENTCONTROL                     104
#define PROPERTY_MAP_TEXT_PAGE                          105
#define PROPERTY_MAP_END                                106

//S&E
#define WID_WORDS                0
#define WID_BACKWARDS            1
#define WID_REGULAR_EXPRESSION   2
#define WID_CASE_SENSITIVE       3
#define WID_IN_SELECTION         4
#define WID_STYLES               5
#define WID_SIMILARITY           6
#define WID_SIMILARITY_RELAX     7
#define WID_SIMILARITY_EXCHANGE  8
#define WID_SIMILARITY_ADD       9
#define WID_SIMILARITY_REMOVE    10
#define WID_SEARCH_ALL           11

//Sections
#define WID_SECT_CONDITION   8000
#define WID_SECT_DDE_TYPE    8001
#define WID_SECT_DDE_FILE    8002
#define WID_SECT_DDE_ELEMENT 8003
#define WID_SECT_LINK        8004
#define WID_SECT_VISIBLE     8005
#define WID_SECT_PROTECTED   8006
#define WID_SECT_REGION      8007
#define WID_SECT_DDE_AUTOUPDATE 8008
#define WID_SECT_DOCUMENT_INDEX 8009
#define WID_SECT_IS_GLOBAL_DOC_SECTION 8010
#define WID_SECT_PASSWORD    8011
#define WID_SECT_CURRENTLY_VISIBLE 8012
#define WID_SECT_EDIT_IN_READONLY 8013

// Indices/Tables of content
#define WID_PRIMARY_KEY                         1000
#define WID_SECONDARY_KEY                       1001
#define WID_ALT_TEXT                            1002
#define WID_IDX_TITLE                           1003
#define WID_LEVEL                               1004
#define WID_CREATE_FROM_MARKS                   1005
#define WID_CREATE_FROM_OUTLINE                 1006
#define WID_MAIN_ENTRY                          1007
#define WID_CREATE_FROM_CHAPTER                 1008
#define WID_CREATE_FROM_LABELS                  1009
#define WID_USE_ALPHABETICAL_SEPARATORS         1010
#define WID_USE_KEY_AS_ENTRY                    1011
#define WID_USE_COMBINED_ENTRIES                1012
#define WID_IS_CASE_SENSITIVE                   1013
#define WID_USE_P_P                             1014
#define WID_USE_DASH                            1015
#define WID_USE_UPPER_CASE                      1016
#define WID_LABEL_CATEGORY                      1018
#define WID_LABEL_DISPLAY_TYPE                  1019
#define WID_USE_LEVEL_FROM_SOURCE               1020
#define WID_LEVEL_FORMAT                        1021
#define WID_LEVEL_PARAGRAPH_STYLES              1022
#define WID_HIDE_TABLEADER_PAGENUMBERS          1023
#define WID_TAB_IN_TOC                          1024
#define WID_MAIN_ENTRY_CHARACTER_STYLE_NAME     1025
#define WID_CREATE_FROM_TABLES                  1026
#define WID_CREATE_FROM_TEXT_FRAMES             1027
#define WID_CREATE_FROM_GRAPHIC_OBJECTS         1028
#define WID_CREATE_FROM_EMBEDDED_OBJECTS        1029
#define WID_CREATE_FROM_STAR_MATH               1030
#define WID_PROTECTED                           1031

#define WID_CREATE_FROM_STAR_CHART              1032
#define WID_CREATE_FROM_STAR_CALC               1033
#define WID_CREATE_FROM_STAR_DRAW               1034
#define WID_CREATE_FROM_OTHER_EMBEDDED_OBJECTS  1035
#define WID_USER_IDX_NAME                       1036
#define WID_PARA_HEAD                           1037
#define WID_PARA_SEP                            1038
#define WID_PARA_LEV1                           1039
#define WID_PARA_LEV2                           1040
#define WID_PARA_LEV3                           1041
#define WID_PARA_LEV4                           1042
#define WID_PARA_LEV5                           1043
#define WID_PARA_LEV6                           1044
#define WID_PARA_LEV7                           1045
#define WID_PARA_LEV8                           1046
#define WID_PARA_LEV9                           1047
#define WID_PARA_LEV10                          1048
#define WID_IS_COMMA_SEPARATED                  1049
#define WID_INDEX_MARKS                         1050
#define WID_IS_RELATIVE_TABSTOPS                1051
#define WID_CREATE_FROM_PARAGRAPH_STYLES        1052
#define WID_IDX_CONTENT_SECTION                 1053
#define WID_IDX_HEADER_SECTION                  1054
#define WID_IDX_LOCALE                          1055
#define WID_IDX_SORT_ALGORITHM                  1056
#define WID_IDX_NAME                            1057

#define WID_TEXT_READING                        1058
#define WID_PRIMARY_KEY_READING                 1059
#define WID_SECONDARY_KEY_READING               1060
#define WID_TOC_BOOKMARK                        1061
#define WID_TOC_NEWLINE                         1062
#define WID_TOC_PARAGRAPH_OUTLINE_LEVEL         1063
#define WID_CREATE_FROM_PARAGRAPH_STYLE         1064

// Text document
#define WID_DOC_CHAR_COUNT                      1000
#define WID_DOC_PARA_COUNT                      1001
#define WID_DOC_WORD_COUNT                      1002
#define WID_DOC_WORD_SEPARATOR                  1003
#define WID_DOC_CHANGES_SHOW                    1004
#define WID_DOC_CHANGES_RECORD                  1005
#define WID_DOC_AUTO_MARK_URL                   1006
#define WID_DOC_HIDE_TIPS                       1007
#define WID_DOC_REDLINE_DISPLAY                 1008
#define WID_DOC_FORBIDDEN_CHARS                 1009
#define WID_DOC_CHANGES_PASSWORD                1010
#define WID_DOC_TWO_DIGIT_YEAR                  1011
#define WID_DOC_AUTOMATIC_CONTROL_FOCUS         1012
#define WID_DOC_APPLY_FORM_DESIGN_MODE          1013
#define WID_DOC_BASIC_LIBRARIES                 1014
#define WID_DOC_RUNTIME_UID                     1015
#define WID_DOC_LOCK_UPDATES                    1016
#define WID_DOC_HAS_VALID_SIGNATURES            1017
#define WID_DOC_INTEROP_GRAB_BAG                1018
#define WID_DOC_WRITERFILTER                    1019
#define WID_DOC_BUILDID                         1024
#define WID_DOC_ISTEMPLATEID                    1025
#define WID_DOC_DEFAULT_PAGE_MODE               1069

// MailMerge
#define WID_SELECTION                           1071
#define WID_RESULT_SET                          1072
#define WID_CONNECTION                          1073
#define WID_MODEL                               1074
#define WID_DATA_SOURCE_NAME                    1075
#define WID_DATA_COMMAND                        1076
#define WID_FILTER                              1077
#define WID_DOCUMENT_URL                        1078
#define WID_OUTPUT_URL                          1079
#define WID_DATA_COMMAND_TYPE                   1080
#define WID_OUTPUT_TYPE                         1081
#define WID_ESCAPE_PROCESSING                   1082
#define WID_SINGLE_PRINT_JOBS                   1083
#define WID_FILE_NAME_FROM_COLUMN               1084
#define WID_FILE_NAME_PREFIX                    1085
#define WID_MAIL_SUBJECT                        1086
#define WID_ADDRESS_FROM_COLUMN                 1087
#define WID_SEND_AS_HTML                        1088
#define WID_SEND_AS_ATTACHMENT                  1089
#define WID_MAIL_BODY                           1090
#define WID_ATTACHMENT_NAME                     1091
#define WID_ATTACHMENT_FILTER                   1092
#define WID_PRINT_OPTIONS                       1093
#define WID_SAVE_AS_SINGLE_FILE                 1094
#define WID_SAVE_FILTER                         1095
#define WID_COPIES_TO                           1096
#define WID_BLIND_COPIES_TO                     1097
#define WID_IN_SERVER_PASSWORD                  1098
#define WID_OUT_SERVER_PASSWORD                 1099
#define WID_SAVE_FILTER_OPTIONS                 1100
#define WID_SAVE_FILTER_DATA                    1101

#define WID_PAGE_COUNT                          1100
#define WID_LINE_COUNT                          1101
#define WID_IS_CONSTANT_SPELLCHECK              1102
#define WID_IS_HIDE_SPELL_MARKS                 1103    /* deprecated #i91949 */

#define WID_LAYOUT_SIZE                         1104
#define WID_DOC_DIALOG_LIBRARIES                1105
#define WID_DOC_VBA_DOCOBJ                      1106

#define WID_DOC_ALLOW_LINK_UPDATE               1107

// AutoText
#define WID_GROUP_PATH                          0
#define WID_GROUP_TITLE                         1

// NumberingRules
#define WID_IS_AUTOMATIC                0
#define WID_CONTINUOUS                  1
#define WID_RULE_NAME                   2
#define WID_IS_ABS_MARGINS              3
#define WID_IS_OUTLINE                  4
#define WID_DEFAULT_LIST_ID             5

#define WID_PAGE_BOTTOM 0
#define WID_PAGE_LEFT   1
#define WID_PAGE_RIGHT  2
#define WID_PAGE_TOP    3
#define WID_PAGE_WIDTH  4
#define WID_PAGE_HEIGHT 5
#define WID_PAGE_NUMBER 6
#define WID_PAGE_ORIENT 7
#define WID_PAGE_USERATTRIBS 8
#define WID_PAGE_ISDARK 9
#define WID_NAVORDER 10
#define WID_PAGE_BACKFULL 11

#define WID_PAGE_THEME 12

// This define would need the include of <svx/unoshprp.hxx>, but this ends
// in a mess; there *are* double used symbols which are used in a #define in
// editengine and as an enum in sw; these will then collide and lead to severe
// problems which will be hard to detect at all (e.g. look for UNO_NAME_CHAR_COLOR).
// More of these are likely, so better use a local define here, but at least the same
// as in svx/inc/unoshprp.hxx
#define OWN_ATTR_FILLBMP_MODE   (OWN_ATTR_VALUE_START+45)

class SwUnoPropertyMapProvider
{
    std::span<SfxItemPropertyMapEntry const> m_aMapEntriesArr[PROPERTY_MAP_END];
    SfxItemPropertySet*             m_aPropertySetArr[PROPERTY_MAP_END];

public:
    SwUnoPropertyMapProvider();

    std::span<const SfxItemPropertyMapEntry> GetPropertyMapEntries(sal_uInt16 PropertyId);
    const SfxItemPropertySet*       GetPropertySet( sal_uInt16 PropertyId );

private:
    static std::span<const SfxItemPropertyMapEntry>  GetTextCursorPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetAccessibilityTextAttrPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetParagraphPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetAutoParaStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetCharStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetAutoCharStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetParaStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetConditionalParaStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetFrameStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetPageStylePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetTablePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetRangePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetSectionPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetFramePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetGraphicPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetEmbeddedPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetIndexMarkPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetContentMarkPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetUserMarkPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetTextTableCursorPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetBookmarkPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetParagraphExtensionsPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetTextPortionExtensionPropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetFootnotePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetRedlinePropertyMap();
    static std::span<const SfxItemPropertyMapEntry>  GetRedlinePortionPropertyMap();
    static std::span<SfxItemPropertyMapEntry>  GetTextDefaultPropertyMap();
    static std::span<const SfxItemPropertyMapEntry> GetLineBreakPropertyMap();
    static std::span<const SfxItemPropertyMapEntry> GetContentControlPropertyMap();
};

extern SwUnoPropertyMapProvider aSwMapProvider;
#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
