package Win32::Mechanize::NotepadPlusPlus::Notepad::Messages;

use warnings;
use strict;
use Exporter 5.57 ('import');

our @EXPORT = qw/
    %BUFFERENCODING
    %DOCSTATUS
    %INTERNALVAR
    %LANGTYPE
    %LINENUMWIDTH
    %MACROSTATUS
    %MENUHANDLE
    %MODELESS
    %NOTIFICATION
    %NPPIDM
    %NPPMSG
    %STATUSBAR
    %VIEW
    %WINMSGBOX
    %WINPLATFORM
    %WINVER
/;

=encoding utf8

=head1 NAME

Win32::Mechanize::NotepadPlusPlus::Notepad::Messages - Define values for using messages, notifications, and their arguments

=head1 SYNOPSIS

    use Win32::Mechanize::NotepadPlusPlus ':vars';
    print "$_\n" for sort { $NPPMSG{$a} <=> $NPPMSG{$b} } keys %NPPMSG;             # prints all message keys in numerical order


=head1 DESCRIPTION

Notepad++'s L<Plugin Communication system|https://npp-user-manual.org/docs/plugin-communication/#notepad-messages>
defines a set of messages that applications (either plugins embedded in Notepad++, or external programs)
can use for communicating with (and thus controlling) Notepad++.

The hashes in L<Win32::Mechanize::NotepadPlusPlus::Notepad::Messages> give named access to the underlying
messages, as well as named versions of the constants used as arguments for those messages.

=head2 MESSAGES

=over

=item %NPPMSG

Most of the Notepad++ Messages are already implemented in the L<Win32::Mechanize::NotepadPlusPlus::Notepad> interface, and under normal circumstances, the end-user should never need to access this %NPPMSG hash directly.

However, if you have a reason to use L<notepad-E<gt>SendMessage|Win32::Mechanize::NotepadPlusPlus::Notepad/SendMessage> directly,
you can use the values from this hash.  Usually, this would only be done if you want a unique wrapper
around the message, or want to implement a new or unimplemented message.

As an example of using th %NPPMSG hash, this code replicates C<notepad-E<gt>getNppVersion> behavior:

    my $nppv = notepad->SendMessage( $NPPMSG{NPPM_GETNPPVERSION}, 0, 0);
    print "npp v", join('.', $v>>16, split//,($v&0xFFFF)), "\n";

=item DEPRECATED %nppm

Deprecated: This variable has been deleted.  If you used it before, please replace with %NPPMSG or the other appropriate hash.

=cut

our %NPPMSG = (
    'NPPMSG'                                                     => (1024 + 1000),
    # messages
    'NPPM_ACTIVATEDOC'                                           => ((1024 + 1000) + 28),
    'NPPM_ADDSCNMODIFIEDFLAGS'                                   => ((1024 + 1000) + 117),  # v8.7.7
    'NPPM_ADDTOOLBARICON'                                        => ((1024 + 1000) + 41),
    'NPPM_ADDTOOLBARICON_DEPRECATED'                             => ((1024 + 1000) + 41), 	# v8.0
    'NPPM_ADDTOOLBARICON_FORDARKMODE'                            => ((1024 + 1000) + 101),	# v8.0
    'NPPM_ALLOCATECMDID'                                         => ((1024 + 1000) + 81),
    'NPPM_ALLOCATEINDICATOR'                                     => ((1024 + 1000) + 113),  # v8.5.6
    'NPPM_ALLOCATEMARKER'                                        => ((1024 + 1000) + 82),
    'NPPM_ALLOCATESUPPORTED_DEPRECATED'                          => ((1024 + 1000) + 80),   # deprecated v8.6.3
    'NPPM_CREATELEXER'                                           => ((1024 + 1000) + 110),  # v8.4.3
    'NPPM_CREATESCINTILLAHANDLE'                                 => ((1024 + 1000) + 20),
    'NPPM_DARKMODESUBCLASSANDTHEME'                              => ((1024 + 1000) + 112),  # v8.5.4
    'NPPM_DECODESCI'                                             => ((1024 + 1000) + 27),
    'NPPM_DESTROYSCINTILLAHANDLE_DEPRECATED'                     => ((1024 + 1000) + 21),   # deprecated v8.6.3
    'NPPM_DISABLEAUTOUPDATE'                                     => ((1024 + 1000) + 95),
    'NPPM_DMMGETPLUGINHWNDBYNAME'                                => ((1024 + 1000) + 43),
    'NPPM_DMMHIDE'                                               => ((1024 + 1000) + 31),
    'NPPM_DMMREGASDCKDLG'                                        => ((1024 + 1000) + 33),
    'NPPM_DMMSHOW'                                               => ((1024 + 1000) + 30),
    'NPPM_DMMUPDATEDISPINFO'                                     => ((1024 + 1000) + 32),
    'NPPM_DMMVIEWOTHERTAB'                                       => ((1024 + 1000) + 35),
    'NPPM_DOCSWITCHERDISABLECOLUMN'                              => ((1024 + 1000) + 89),   # renamed in v8.1.3
    'NPPM_DOCLISTDISABLECOLUMN'                                  => ((1024 + 1000) + 89), 	# new name in v8.1.3
    'NPPM_DOCLISTDISABLEEXTCOLUMN'                               => ((1024 + 1000) + 89), 	# new name in v8.1.5
    'NPPM_DOCLISTDISABLEPATHCOLUMN'                              => ((1024 + 1000) + 102), 	# new to v8.1.5
    'NPPM_DOOPEN'                                                => ((1024 + 1000) + 77),
    'NPPM_ENCODESCI'                                             => ((1024 + 1000) + 26),
    'NPPM_GETAPPDATAPLUGINSALLOWED'                              => ((1024 + 1000) + 87),
    'NPPM_GETBOOKMARKID'                                         => ((1024 + 1000) + 111),
    'NPPM_GETBUFFERENCODING'                                     => ((1024 + 1000) + 66),
    'NPPM_GETBUFFERFORMAT'                                       => ((1024 + 1000) + 68),
    'NPPM_GETBUFFERIDFROMPOS'                                    => ((1024 + 1000) + 59),
    'NPPM_GETBUFFERLANGTYPE'                                     => ((1024 + 1000) + 64),
    'NPPM_GETCURRENTBUFFERID'                                    => ((1024 + 1000) + 60),
    'NPPM_GETCURRENTCMDLINE'                                     => ((1024 + 1000) + 109),
    'NPPM_GETCURRENTCOLUMN'                                      => ((1024 + 3000) + 9),
    'NPPM_GETCURRENTDIRECTORY'                                   => ((1024 + 3000) + 2),
    'NPPM_GETCURRENTDOCINDEX'                                    => ((1024 + 1000) + 23),
    'NPPM_GETCURRENTLANGTYPE'                                    => ((1024 + 1000) + 5),
    'NPPM_GETCURRENTLINE'                                        => ((1024 + 3000) + 8),
    'NPPM_GETCURRENTLINESTR'                                     => ((1024 + 3000) + 12),
    'NPPM_GETCURRENTMACROSTATUS'                                 => ((1024 + 1000) + 106),  # v8.3.3
    'NPPM_GETCURRENTNATIVELANGENCODING'                          => ((1024 + 1000) + 79),
    'NPPM_GETCURRENTSCINTILLA'                                   => ((1024 + 1000) + 4),
    'NPPM_GETCURRENTVIEW'                                        => ((1024 + 1000) + 88),
    'NPPM_GETCURRENTWORD'                                        => ((1024 + 3000) + 6),
    'NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR'                       => ((1024 + 1000) + 91),
    'NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR'                       => ((1024 + 1000) + 90),
    'NPPM_GETENABLETHEMETEXTUREFUNC'                             => ((1024 + 1000) + 45),
    'NPPM_GETENABLETHEMETEXTUREFUNC_DEPRECATED'                  => ((1024 + 1000) + 45),   # v8.4.x
    'NPPM_GETEXTERNALLEXERAUTOINDENTMODE'                        => ((1024 + 1000) + 103),  # v8.3.3
    'NPPM_GETEXTPART'                                            => ((1024 + 3000) + 5),
    'NPPM_GETFILENAME'                                           => ((1024 + 3000) + 3),
    'NPPM_GETFILENAMEATCURSOR'                                   => ((1024 + 3000) + 11),
    'NPPM_GETFULLCURRENTPATH'                                    => ((1024 + 3000) + 1),
    'NPPM_GETFULLPATHFROMBUFFERID'                               => ((1024 + 1000) + 58),
    'NPPM_GETLANGUAGEDESC'                                       => ((1024 + 1000) + 84),
    'NPPM_GETLANGUAGENAME'                                       => ((1024 + 1000) + 83),
    'NPPM_GETLINENUMBERWIDTHMODE'                                => ((1024 + 1000) + 100), # v7.9.2
    'NPPM_GETMENUHANDLE'                                         => ((1024 + 1000) + 25),
    'NPPM_GETNAMEPART'                                           => ((1024 + 3000) + 4),
    'NPPM_GETNATIVELANGFILENAME'                                 => ((1024 + 1000) + 116),  # v8.7
    'NPPM_GETNBOPENFILES'                                        => ((1024 + 1000) + 7),
    'NPPM_GETNBSESSIONFILES'                                     => ((1024 + 1000) + 13),
    'NPPM_GETNBUSERLANG'                                         => ((1024 + 1000) + 22),
    'NPPM_GETNPPDIRECTORY'                                       => ((1024 + 3000) + 7),
    'NPPM_GETNPPFULLFILEPATH'                                    => ((1024 + 3000) + 10),
    'NPPM_GETNPPSETTINGSDIRPATH'                                 => ((1024 + 1000) + 119),  # v8.8.6
    'NPPM_GETNPPVERSION'                                         => ((1024 + 1000) + 50),
    'NPPM_GETOPENFILENAMES_DEPRECATED'                           => ((1024 + 1000) + 8),    # deprecated v8.8.2
    'NPPM_GETOPENFILENAMESPRIMARY_DEPRECATED'                    => ((1024 + 1000) + 17),   # deprecated v8.8.2
    'NPPM_GETOPENFILENAMESSECOND_DEPRECATED'                     => ((1024 + 1000) + 18),   # deprecated v8.8.2
    'NPPM_GETPLUGINHOMEPATH'                                     => ((1024 + 1000) + 97),
    'NPPM_GETPLUGINSCONFIGDIR'                                   => ((1024 + 1000) + 46),
    'NPPM_GETPOSFROMBUFFERID'                                    => ((1024 + 1000) + 57),
    'NPPM_GETSESSIONFILES'                                       => ((1024 + 1000) + 14),
    'NPPM_GETSETTINGSONCLOUDPATH'                                => ((1024 + 1000) + 98), # v7.9.2
    'NPPM_GETSHORTCUTBYCMDID'                                    => ((1024 + 1000) + 76),
    'NPPM_GETTABCOLORID'                                         => ((1024 + 1000) + 114),  # v8.6.8
    'NPPM_GETTOOLBARICONSETCHOICE'                               => ((1024 + 1000) + 118),  # v8.8.2
    'NPPM_GETWINDOWSVERSION'                                     => ((1024 + 1000) + 42),
    'NPPM_HIDEMENU'                                              => ((1024 + 1000) + 72),
    'NPPM_HIDESTATUSBAR'                                         => ((1024 + 1000) + 74),
    'NPPM_HIDETABBAR'                                            => ((1024 + 1000) + 51),
    'NPPM_HIDETOOLBAR'                                           => ((1024 + 1000) + 70),
    'NPPM_ISAUTOINDENTON'                                        => ((1024 + 1000) + 105),  # v8.3.3
    'NPPM_ISDARKMODEENABLED'                                     => ((1024 + 1000) + 107),  # v8.4.1
    'NPPM_ISDOCSWITCHERSHOWN'                                    => ((1024 + 1000) + 86),
    'NPPM_ISDOCLISTSHOWN'                                        => ((1024 + 1000) + 86),	# v8.1.3
    'NPPM_ISMENUHIDDEN'                                          => ((1024 + 1000) + 73),
    'NPPM_ISSTATUSBARHIDDEN'                                     => ((1024 + 1000) + 75),
    'NPPM_ISTABBARHIDDEN'                                        => ((1024 + 1000) + 52),
    'NPPM_ISTOOLBARHIDDEN'                                       => ((1024 + 1000) + 71),
    'NPPM_LAUNCHFINDINFILESDLG'                                  => ((1024 + 1000) + 29),
    'NPPM_LOADSESSION'                                           => ((1024 + 1000) + 34),
    'NPPM_MAKECURRENTBUFFERDIRTY'                                => ((1024 + 1000) + 44),
    'NPPM_MENUCOMMAND'                                           => ((1024 + 1000) + 48),
    'NPPM_MODELESSDIALOG'                                        => ((1024 + 1000) + 12),
    'NPPM_MSGTOPLUGIN'                                           => ((1024 + 1000) + 47),
    'NPPM_RELOADBUFFERID'                                        => ((1024 + 1000) + 61),
    'NPPM_RELOADFILE'                                            => ((1024 + 1000) + 36),
    'NPPM_REMOVESHORTCUTBYCMDID'                                 => ((1024 + 1000) + 96),
    'NPPM_SAVEALLFILES'                                          => ((1024 + 1000) + 39),
    'NPPM_SAVECURRENTFILE'                                       => ((1024 + 1000) + 38),
    'NPPM_SAVECURRENTFILEAS'                                     => ((1024 + 1000) + 78),
    'NPPM_SAVECURRENTSESSION'                                    => ((1024 + 1000) + 16),
    'NPPM_SAVEFILE'                                              => ((1024 + 1000) + 94),
    'NPPM_SAVESESSION'                                           => ((1024 + 1000) + 15),
    'NPPM_SETBUFFERENCODING'                                     => ((1024 + 1000) + 67),
    'NPPM_SETBUFFERFORMAT'                                       => ((1024 + 1000) + 69),
    'NPPM_SETBUFFERLANGTYPE'                                     => ((1024 + 1000) + 65),
    'NPPM_SETCURRENTLANGTYPE'                                    => ((1024 + 1000) + 6),
    'NPPM_SETEDITORBORDEREDGE'                                   => ((1024 + 1000) + 93),
    'NPPM_SETEXTERNALLEXERAUTOINDENTMODE'                        => ((1024 + 1000) + 104),  # v8.3.3
    'NPPM_SETLINENUMBERWIDTHMODE'                                => ((1024 + 1000) + 99), # v7.9.2
    'NPPM_SETMENUITEMCHECK'                                      => ((1024 + 1000) + 40),
    'NPPM_SETSMOOTHFONT'                                         => ((1024 + 1000) + 92),
    'NPPM_SETSTATUSBAR'                                          => ((1024 + 1000) + 24),
    'NPPM_SETUNTITLEDNAME'                                       => ((1024 + 1000) + 115),  # v8.6.9
    'NPPM_SHOWDOCSWITCHER'                                       => ((1024 + 1000) + 85),
    'NPPM_SHOWDOCLIST'                                       	 => ((1024 + 1000) + 85),	# v8.1.3
    'NPPM_SWITCHTOFILE'                                          => ((1024 + 1000) + 37),
    'NPPM_TRIGGERTABBARCONTEXTMENU'                              => ((1024 + 1000) + 49),

    # message offsets
    'WM_USER'                                                    => 1024,
    'RUNCOMMAND_USER'                                            => (1024 + 3000),
);

=item %VIEW

There are two groups of methods that access the views.

The first is L<getNumberOpenFiles()|Win32::Mechanize::NotepadPlusPlus::Notepad/getNumberOpenFiles>,
which uses three of the %VIEW keys to count the number of files open in the specified view.

    Key             | Value | Description
    ----------------+-------+------------------------------
    ALL_OPEN_FILES  | 0     | Total of files in both views
    PRIMARY_VIEW    | 1     | Only the files in the primary view (usually the left view: editor1)
    SECOND_VIEW     | 2     | Only the files in the second view (usually the right view: editor2)


The second group are the L<buffer-related methods|Win32::Mechanize::NotepadPlusPlus::Notepad/"Get/Change Active Buffers">.

    Key             | Value | Description
    ----------------+-------+------------------------------
    MAIN_VIEW       | 0     | Access the main view (usually the left view: editor1)
    SUB_VIEW        | 1     | Access the sub view (usually the right view: editor2)

Yes, the two groups have an off-by-one.  That's the way the underlying Notepad++ code, and thus the Plugin Interface, was designed.

=cut

our %VIEW = (
    # view params (NPPM_GETNBOPENFILES)
    'ALL_OPEN_FILES'                                             => 0,
    'PRIMARY_VIEW'                                               => 1,
    'SECOND_VIEW'                                                => 2,
    # view params (NPPM_GETCURRENTDOCINDEX)
    'MAIN_VIEW'                                                  => 0,
    'SUB_VIEW'                                                   => 1,
);

=item %MODELESS

=item TODO: L<issue #18|https://github.com/pryrt/Win32-Mechanize-NotepadPlusPlus/issues/18>

These would be used by the C<$NPPMSG{NPPM_MODELESSDIALOG}> message.
However, L<registerModelessDialog()|Win32::Mechanize::NotepadPlusPlus::Notepad/registerModelessDialog>
has not yet been implemented.

    Key                     | Description
    ------------------------|------------
    MODELESSDIALOGADD       | Registers a dialog's hWnd
    MODELESSDIALOGREMOVE    | Un-registers a dialog's hWnd

=cut

our %MODELESS = (
    # NPPM_MODELESSDIALOG params
    'MODELESSDIALOGADD'                                          => 0,
    'MODELESSDIALOGREMOVE'                                       => 1,
);

=item %STATUSBAR

These are be used by the L<setStatusBar()|Win32::Mechanize::NotepadPlusPlus::Notepad/setStatusBar> method for choosing which section of the status bar to change.

    Key                     |   | Description
    ------------------------+---+-----------------
    STATUSBAR_DOC_TYPE      | 0 | Document's syntax lexer (language)
    STATUSBAR_DOC_SIZE      | 1 | File size
    STATUSBAR_CUR_POS       | 2 | Current cursor position
    STATUSBAR_EOF_FORMAT    | 3 | EOL (End-Of-Line) format
    STATUSBAR_UNICODE_TYPE  | 4 | Encoding
    STATUSBAR_TYPING_MODE   | 5 | Insert (INS) or Overwrite (OVR)

=cut

our %STATUSBAR = (
    # NPPM_SETSTATUSBAR params
    'STATUSBAR_DOC_TYPE'                                         => 0,
    'STATUSBAR_DOC_SIZE'                                         => 1,
    'STATUSBAR_CUR_POS'                                          => 2,
    'STATUSBAR_EOF_FORMAT'                                       => 3,
    'STATUSBAR_UNICODE_TYPE'                                     => 4,
    'STATUSBAR_TYPING_MODE'                                      => 5,
);

=item %MENUHANDLE

Used internally by L<getMainMenuHandle()|Win32::Mechanize::NotepadPlusPlus::Notepad/getMainMenuHandle>  and
L<getPluginMenuHandle()|Win32::Mechanize::NotepadPlusPlus::Notepad/getPluginMenuHandle> to return handles to the specified menus.

    Key             |   | Description
    ----------------+---+-----------------
    NPPMAINMENU     | 1 | Main menu (contains File, Edit, ...)
    NPPPLUGINMENU   | 0 | Plugins menu (a submenu of the Main menu)

=cut

our %MENUHANDLE = (
    # NPPM_GETMENUHANDLE params
    'NPPPLUGINMENU'                                              => 0,
    'NPPMAINMENU'                                                => 1,
);

=item %INTERNALVAR

Pass these to L<getNppDir()|Win32::Mechanize::NotepadPlusPlus::Notepad/getNppDir> to access the internal variables described L<in the Macros section of the official docs|https://npp-user-manual.org/docs/config-files/#macros>.

    Key                 | Description                               | Example
    --------------------+-------------------------------------------+----------------------------
    FULL_CURRENT_PATH   | full path to the active file              | E:\My Web\main\welcome.html
    CURRENT_DIRECTORY   | active file’s directory                   | E:\My Web\main
    FILE_NAME           | active file’s name                        | welcome.html
    NAME_PART           | filename without extension                | welcome
    EXT_PART            | extension                                 | html
    CURRENT_WORD        | active selection or word under the cursor | text
    CURRENT_LINE        | line number of cursor location            | 1
    CURRENT_LINESTR     | text of the current line                  | tex of whole line
    CURRENT_COLUMN      | column number of cursor location          | 5
    NPP_DIRECTORY       | notepad++ executable's directory          | c:\Program Files\notepad++
    NPP_FULL_FILE_PATH  | full path to the notepad++.exe            | c:\Program Files\notepad++\notepad++.exe

=cut


our %INTERNALVAR = (
    'VAR_NOT_RECOGNIZED'                                         => 0,
    'FULL_CURRENT_PATH'                                          => 1,
    'CURRENT_DIRECTORY'                                          => 2,
    'FILE_NAME'                                                  => 3,
    'NAME_PART'                                                  => 4,
    'EXT_PART'                                                   => 5,
    'CURRENT_WORD'                                               => 6,
    'NPP_DIRECTORY'                                              => 7,
    'CURRENT_LINE'                                               => 8,
    'CURRENT_COLUMN'                                             => 9,
    'NPP_FULL_FILE_PATH'                                         => 10,
    'GETFILENAMEATCURSOR'                                        => 11,
    'CURRENT_LINESTR'                                            => 12,
);

=item %LANGTYPE

Used by L<language parser methods|Win32::Mechanize::NotepadPlusPlus::Notepad/"Get/Set Language Parser">.

    L_TEXT          : 0  | L_CSS           : 20 | L_AU3           : 40 | L_BAANC         : 60 | L_REGISTRY      : 80 |
    L_PHP           : 1  | L_PERL          : 21 | L_CAML          : 41 | L_SREC          : 61 | L_RUST          : 81 |
    L_C             : 2  | L_PYTHON        : 22 | L_ADA           : 42 | L_IHEX          : 62 | L_SPICE         : 82 |
    L_CPP           : 3  | L_LUA           : 23 | L_VERILOG       : 43 | L_TEHEX         : 63 | L_TXT2TAGS      : 83 |
    L_CS            : 4  | L_TEX           : 24 | L_MATLAB        : 44 | L_SWIFT         : 64 | L_VISUALPROLOG  : 84 |
    L_OBJC          : 5  | L_FORTRAN       : 25 | L_HASKELL       : 45 | L_ASN1          : 65 | L_TYPESCRIPT    : 85 |
    L_JAVA          : 6  | L_BASH          : 26 | L_INNO          : 46 | L_AVS           : 66 | L_JSON5         : 86 |
    L_RC            : 7  | L_FLASH         : 27 | L_SEARCHRESULT  : 47 | L_BLITZBASIC    : 67 | L_MSSQL         : 87 |
    L_HTML          : 8  | L_NSIS          : 28 | L_CMAKE         : 48 | L_PUREBASIC     : 68 | L_GDSCRIPT      : 88 |
    L_XML           : 9  | L_TCL           : 29 | L_YAML          : 49 | L_FREEBASIC     : 69 | L_HOLLYWOOD     : 89 |
    L_MAKEFILE      : 10 | L_LISP          : 30 | L_COBOL         : 50 | L_CSOUND        : 70 | L_GOLANG        : 90 |
    L_PASCAL        : 11 | L_SCHEME        : 31 | L_GUI4CLI       : 51 | L_ERLANG        : 71 | L_RAKU          : 91 |
    L_BATCH         : 12 | L_ASM           : 32 | L_D             : 52 | L_ESCRIPT       : 72 | L_TOML          : 92 |
    L_INI           : 13 | L_DIFF          : 33 | L_POWERSHELL    : 53 | L_FORTH         : 73 | L_SAS           : 93 |
    L_ASCII         : 14 | L_PROPS         : 34 | L_R             : 54 | L_LATEX         : 74 | L_ERRORLIST     : 94 |
    L_USER          : 15 | L_PS            : 35 | L_JSP           : 55 | L_MMIXAL        : 75 | L_EXTERNAL      : 95 |
    L_ASP           : 16 | L_RUBY          : 36 | L_COFFEESCRIPT  : 56 | L_NIMROD        : 76 |                 :    |
    L_SQL           : 17 | L_SMALLTALK     : 37 | L_JSON          : 57 | L_NNCRONTAB     : 77 |                 :    |
    L_VB            : 18 | L_VHDL          : 38 | L_JAVASCRIPT    : 58 | L_OSCRIPT       : 78 |                 :    |
    L_JS_EMBEDDED   : 19 | L_KIX           : 39 | L_FORTRAN_77    : 59 | L_REBOL         : 79 |                 :    |

=cut

our %LANGTYPE = (
    # enum LangType
    'L_TEXT'                                                     => 0,
    'L_PHP '                                                     => 1,
    'L_C'                                                        => 2,
    'L_CPP'                                                      => 3,
    'L_CS'                                                       => 4,
    'L_OBJC'                                                     => 5,
    'L_JAVA'                                                     => 6,
    'L_RC'                                                       => 7,
    'L_HTML'                                                     => 8,
    'L_XML'                                                      => 9,
    'L_MAKEFILE'                                                 => 10,
    'L_PASCAL'                                                   => 11,
    'L_BATCH'                                                    => 12,
    'L_INI'                                                      => 13,
    'L_ASCII'                                                    => 14,
    'L_USER'                                                     => 15,
    'L_ASP'                                                      => 16,
    'L_SQL'                                                      => 17,
    'L_VB'                                                       => 18,
    'L_JS'                                                       => 19,
    'L_CSS'                                                      => 20,
    'L_PERL'                                                     => 21,
    'L_PYTHON'                                                   => 22,
    'L_LUA'                                                      => 23,
    'L_TEX'                                                      => 24,
    'L_FORTRAN'                                                  => 25,
    'L_BASH'                                                     => 26,
    'L_FLASH'                                                    => 27,
    'L_NSIS'                                                     => 28,
    'L_TCL'                                                      => 29,
    'L_LISP'                                                     => 30,
    'L_SCHEME'                                                   => 31,
    'L_ASM'                                                      => 32,
    'L_DIFF'                                                     => 33,
    'L_PROPS'                                                    => 34,
    'L_PS'                                                       => 35,
    'L_RUBY'                                                     => 36,
    'L_SMALLTALK'                                                => 37,
    'L_VHDL'                                                     => 38,
    'L_KIX'                                                      => 39,
    'L_AU3'                                                      => 40,
    'L_CAML'                                                     => 41,
    'L_ADA'                                                      => 42,
    'L_VERILOG'                                                  => 43,
    'L_MATLAB'                                                   => 44,
    'L_HASKELL'                                                  => 45,
    'L_INNO'                                                     => 46,
    'L_SEARCHRESULT'                                             => 47,
    'L_CMAKE'                                                    => 48,
    'L_YAML'                                                     => 49,
    'L_COBOL'                                                    => 50,
    'L_GUI4CLI'                                                  => 51,
    'L_D'                                                        => 52,
    'L_POWERSHELL'                                               => 53,
    'L_R'                                                        => 54,
    'L_JSP'                                                      => 55,
    'L_COFFEESCRIPT'                                             => 56,
    'L_JSON'                                                     => 57,
    'L_JAVASCRIPT'                                               => 58,
    'L_FORTRAN_77'                                               => 59,
    'L_BAANC'                                                    => 60,
    'L_SREC'                                                     => 61,
    'L_IHEX'                                                     => 62,
    'L_TEHEX'                                                    => 63,
    'L_SWIFT'                                                    => 64,
    'L_ASN1'                                                     => 65,
    'L_AVS'                                                      => 66,
    'L_BLITZBASIC'                                               => 67,
    'L_PUREBASIC'                                                => 68,
    'L_FREEBASIC'                                                => 69,
    'L_CSOUND'                                                   => 70,
    'L_ERLANG'                                                   => 71,
    'L_ESCRIPT'                                                  => 72,
    'L_FORTH'                                                    => 73,
    'L_LATEX'                                                    => 74,
    'L_MMIXAL'                                                   => 75,
    'L_NIM'                                                      => 76, # v8
    'L_NIMROD'                                                   => 76,
    'L_NNCRONTAB'                                                => 77,
    'L_OSCRIPT'                                                  => 78,
    'L_REBOL'                                                    => 79,
    'L_REGISTRY'                                                 => 80,
    'L_RUST'                                                     => 81,
    'L_SPICE'                                                    => 82,
    'L_TXT2TAGS'                                                 => 83,
    'L_VISUALPROLOG'                                             => 84,
    'L_TYPESCRIPT'                                               => 85, # v8.1.4
    'L_JSON5'                                                    => 86, # v8.4.9
    'L_MSSQL'                                                    => 87, # v8.5.1
    'L_GDSCRIPT'                                                 => 88, # v8.5.1
    'L_HOLLYWOOD'                                                => 89, # v8.5.2
    'L_GOLANG'                                                   => 90, # v8.6.6
    'L_RAKU'                                                     => 91, # v8.6.6
    'L_TOML'                                                     => 92, # v8.7
    'L_SAS'                                                      => 93, # v8.7.8
    'L_ERRORLIST'                                                => 94, # v8.8.1
    'L_EXTERNAL'                                                 => 95,
);

=item %LINENUMWIDTH

Used by L<setLineNumberWidthMode|Win32::Mechanize::NotepadPlusPlus::Notepad/"setLineNumberWidthMode">
and L<getLineNumberWidthMode|Win32::Mechanize::NotepadPlusPlus::Notepad/"getLineNumberWidthMode">.

    Key                   |   | Description
    ----------------------+---+-----------------
    LINENUMWIDTH_CONSTANT | 1 | Line-number column width always wide enough for largest line number
    LINENUMWIDTH_DYNAMIC  | 0 | Line-number column width changes with number of digits in local line number

Added in v7.9.2.

=cut

our %LINENUMWIDTH = (
    # enum LineNumWidth
    'LINENUMWIDTH_CONSTANT' => 1,
    'LINENUMWIDTH_DYNAMIC'  => 0,
);

=item %WINVER

I'm not sure it's really useful, but it's still privided.

    print join "\n", map { "$_ => $WINVER{$_}" } sort keys %WINVER;

=cut

our %WINVER = (
    # enum WinVer
    'WV_95'                                                      => 2,
    'WV_98'                                                      => 3,
    'WV_ME'                                                      => 4,
    'WV_NT'                                                      => 5,
    'WV_S2003'                                                   => 8,
    'WV_UNKNOWN'                                                 => 0,
    'WV_VISTA'                                                   => 10,
    'WV_W2K'                                                     => 6,
    'WV_WIN10'                                                   => 14,
    'WV_WIN11'                                                   => 15,
    'WV_WIN32S'                                                  => 1,
    'WV_WIN7'                                                    => 11,
    'WV_WIN8'                                                    => 12,
    'WV_WIN81'                                                   => 13,
    'WV_XP'                                                      => 7,
    'WV_XPX64'                                                   => 9,
);

=item %WINPLATFORM

I'm not sure it's really useful, but it's still privided.

    print join "\n", map { "$_ => $WINPLATFORM{$_}" } sort keys %WINPLATFORM;

=cut

our %WINPLATFORM = (
    # enum Platform
    'PF_ARM64'                                                   => 4,
    'PF_IA64'                                                    => 3,
    'PF_UNKNOWN'                                                 => 0,
    'PF_X64'                                                     => 2,
    'PF_X86'                                                     => 1,

);

=item %WINMSGBOX

Used by L<messageBox|Win32::Mechanize::NotepadPlusPlus::Notepad/"messageBox">.
The first group set which buttons are in the dialog box.
The second group set which button is the default/activge button.
The third group affect the icon used for the dialog box.
The final group encode the return values.

    Key                  | Value      | Description
    ---------------------+------------+---------------------------------------------------------------------
    ABORTRETRYIGNORE     | 0x00000002 | The message box contains three push buttons: Abort, Retry, and Ignore.
    CANCELTRYCONTINUE    | 0x00000006 | The message box contains three push buttons: Cancel, Try Again, Continue. Use this message box type instead of MB_ABORTRETRYIGNORE.
    HELP                 | 0x00004000 | Adds a Help button to the message box. When the user clicks the Help button or presses F1, the system sends a WM_HELP message to the owner.
    OK                   | 0x00000000 | The message box contains one push button: OK. This is the default.
    OKCANCEL             | 0x00000001 | The message box contains two push buttons: OK and Cancel.
    RETRYCANCEL          | 0x00000005 | The message box contains two push buttons: Retry and Cancel.
    YESNO                | 0x00000004 | The message box contains two push buttons: Yes and No.
    YESNOCANCEL          | 0x00000003 | The message box contains three push buttons: Yes and No and Cancel.
    ---------------------+------------+---------------------------------------------------------------------
    DEFBUTTON1           | 0x00000000 | The first button is the default button. DEFBUTTON1 is the default unless DEFBUTTON2, DEFBUTTON3, or DEFBUTTON4 is specified.
    DEFBUTTON2           | 0x00000100 | The second button is the default button.
    DEFBUTTON3           | 0x00000200 | The third button is the default button.
    DEFBUTTON4           | 0x00000300 | The fourth button is the default button.
    ---------------------+------------+---------------------------------------------------------------------
    ICONEXCLAMATION      | 0x00000030 | An exclamation-point icon appears in the message box.
    ICONWARNING          | 0x00000030 | An exclamation-point icon appears in the message box.
    ICONINFORMATION      | 0x00000040 | An icon consisting of a lowercase letter i in a circle appears in the message box.
    ICONASTERISK         | 0x00000040 | An icon consisting of a lowercase letter i in a circle appears in the message box.
    ICONQUESTION         | 0x00000020 | A question-mark icon appears in the message box. The question-mark message icon is no longer recommended because it does not clearly represent a specific type of message and because the phrasing of a message as a question could apply to any message type. In addition, users can confuse the message symbol question mark with Help information. Therefore, do not use this question mark message symbol in your message boxes. The system continues to support its inclusion only for backward compatibility.
    ICONSTOP             | 0x00000010 | A stop-sign icon appears in the message box.
    ICONERROR            | 0x00000010 | A stop-sign icon appears in the message box.
    ICONHAND             | 0x00000010 | A stop-sign icon appears in the message box.
    ---------------------+------------+---------------------------------------------------------------------
    RETURN_ABORT         | 3          | The Abort button was selected.
    RETURN_CANCEL        | 2          | The Cancel button was selected.
    RETURN_CONTINUE      | 11         | The Continue button was selected.
    RETURN_IGNORE        | 5          | The Ignore button was selected.
    RETURN_NO            | 7          | The No button was selected.
    RETURN_OK            | 1          | The OK button was selected.
    RETURN_RETRY         | 4          | The Retry button was selected.
    RETURN_TRYAGAIN      | 10         | The Try Again button was selected.
    RETURN_YES           | 6          | The Yes button was selected.
    ---------------------+------------+---------------------------------------------------------------------
=cut

our %WINMSGBOX = (
    # enum MESSAGEBOXFLAGS
    # https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
    #--------------------=> -----------,
    'ABORTRETRYIGNORE'   => 0x00000002 ,
    'CANCELTRYCONTINUE'  => 0x00000006 ,
    'HELP'               => 0x00004000 ,
    'OK'                 => 0x00000000 ,
    'OKCANCEL'           => 0x00000001 ,
    'RETRYCANCEL'        => 0x00000005 ,
    'YESNO'              => 0x00000004 ,
    'YESNOCANCEL'        => 0x00000003 ,
    #--------------------=> -----------,
    'MB_DEFBUTTON1'      => 0x00000000 ,
    'MB_DEFBUTTON2'      => 0x00000100 ,
    'MB_DEFBUTTON3'      => 0x00000200 ,
    'MB_DEFBUTTON4'      => 0x00000300 ,
    #--------------------=> -----------,
    'ICONEXCLAMATION'    => 0x00000030 ,
    'ICONWARNING'        => 0x00000030 ,
    'ICONINFORMATION'    => 0x00000040 ,
    'ICONASTERISK'       => 0x00000040 ,
    'ICONQUESTION'       => 0x00000020 ,
    'ICONSTOP'           => 0x00000010 ,
    'ICONERROR'          => 0x00000010 ,
    'ICONHAND'           => 0x00000010 ,
    #--------------------=> -----------,
    'RETURN_ABORT'       => 3          ,
    'RETURN_CANCEL'      => 2          ,
    'RETURN_CONTINUE'    => 11         ,
    'RETURN_IGNORE'      => 5          ,
    'RETURN_NO'          => 7          ,
    'RETURN_OK'          => 1          ,
    'RETURN_RETRY'       => 4          ,
    'RETURN_TRYAGAIN'    => 10         ,
    'RETURN_YES'         => 6          ,
    #--------------------=> -----------,
);

=back

=head2 NOTIFICATIONS

Not yet used, but the constants are available.

=over

=item %NOTIFICATION

If you are interested, you can find all the message keys with code like the following:

    use Win32::Mechanize::NotepadPlusPlus ':vars';
    printf "%-39s => %d\n", $_, $NOTIFICATION{$_} for sort { $NOTIFICATION{$a} <=> $NOTIFICATION{$b} } keys %NOTIFICATION;   # prints all notification keys in numerical order

=cut


# NPP Notifications
our %NOTIFICATION = (
    'NPPN_FIRST'                                                 => 1000,
    'NPPN_BEFORESHUTDOWN'                                        => (1000 + 19),
    'NPPN_BUFFERACTIVATED'                                       => (1000 + 10),
    'NPPN_CANCELSHUTDOWN'                                        => (1000 + 20),
    'NPPN_CMDLINEPLUGINMSG'                                      => (1000 + 28),    # v8.4.2
    'NPPN_DARKMODECHANGED'                                       => (1000 + 27),    # v8.4.1
    'NPPN_DOCORDERCHANGED'                                       => (1000 + 17),
    'NPPN_EXTERNALLEXERBUFFER'                                   => (1000 + 29),    # v8.5
    'NPPN_FILEBEFORECLOSE'                                       => (1000 + 3),
    'NPPN_FILEBEFOREDELETE'                                      => (1000 + 24),
    'NPPN_FILEBEFORELOAD'                                        => (1000 + 14),
    'NPPN_FILEBEFOREOPEN'                                        => (1000 + 6),
    'NPPN_FILEBEFORERENAME'                                      => (1000 + 21),
    'NPPN_FILEBEFORESAVE'                                        => (1000 + 7),
    'NPPN_FILECLOSED'                                            => (1000 + 5),
    'NPPN_FILEDELETED'                                           => (1000 + 26),
    'NPPN_FILEDELETEFAILED'                                      => (1000 + 25),
    'NPPN_FILELOADFAILED'                                        => (1000 + 15),
    'NPPN_FILEOPENED'                                            => (1000 + 4),
    'NPPN_FILERENAMECANCEL'                                      => (1000 + 22),
    'NPPN_FILERENAMED'                                           => (1000 + 23),
    'NPPN_FILESAVED'                                             => (1000 + 8),
    'NPPN_GLOBALMODIFIED'                                        => (1000 + 30),    # v8.6.5
    'NPPN_LANGCHANGED'                                           => (1000 + 11),
    'NPPN_NATIVELANGCHANGED'                                     => (1000 + 31),    # v8.7
    'NPPN_READONLYCHANGED'                                       => (1000 + 16),
    'NPPN_READY'                                                 => (1000 + 1),
    'NPPN_SHORTCUTREMAPPED'                                      => (1000 + 13),
    'NPPN_SHUTDOWN'                                              => (1000 + 9),
    'NPPN_SNAPSHOTDIRTYFILELOADED'                               => (1000 + 18),
    'NPPN_TBMODIFICATION'                                        => (1000 + 2),
    'NPPN_TOOLBARICONSETCHANGED'                                 => (1000 + 32),    # v8.8.2
    'NPPN_WORDSTYLESUPDATED'                                     => (1000 + 12),
);

=item %DOCSTATUS

Used by the NPPN_READONLYCHANGED notification.

    Key                     |   | Description
    ------------------------+---+-----------------
    DOCSTATUS_READONLY      | 1 | The file changed its "is readonly" status
    DOCSTATUS_BUFFERDIRTY   | 0 | The file changed its "is modified" status

=cut

our %DOCSTATUS = (
    # NPPN_READONLYCHANGED notification params
    'DOCSTATUS_READONLY'                                         => 1,
    'DOCSTATUS_BUFFERDIRTY'                                      => 2,
);

=back

=head2 MENU COMMAND ID VALUES

Underlying the Notepad++ menu system (and any other Win32-API-based application), there are individual
command IDs for each menu command.  Notepad++ gives accesss through the NPPM_MENUCOMMAND message, and
L<notepad-E<gt>menuCommand()|Win32::Mechanize::NotepadPlusPlus::Notepad/menuCommand> allows you to
activate any menu entry's command by its menu ID.

You can find out the names and values of all the messages using:

    use Win32::Mechanize::NotepadPlusPlus ':vars';
    printf "%-40s => %s\n", $_, $NPPIDM{$_} for sort keys %NPPIDM;

=over

=item %NPPIDM

    # both of the next two are equivalent to notepad->close(), but using the command ID for File > Close
    notepad->menuCommand( $NPPIDM{IDM_FILE_CLOSE} );
    notepad->SendMessage( $NPPMSG{NPPM_MENUCOMMAND} , 0 , $NPPIDM{IDM_FILE_CLOSE} );

=item DEPRECATED %nppidm

Deprecated name for %NPPIDM.  This variable no longer exists.  If you were using it, replace
it with %NPPIDM.

=back

=cut

our %NPPIDM = (
    'WM_USER'                                                    => 1024,
    'IDM'                                                        => 40000,
    'IDM_ABOUT'                                                  => (40000  + 7000),
    'IDM_CLEAN_RECENT_FILE_LIST'                                 => ((40000 + 2000) + 41),
    'IDM_CMDLINEARGUMENTS'                                       => ((40000  + 7000)  + 10),
    'IDM_CONFUPDATERPROXY'                                       => ((40000  + 7000)  + 9),
    'IDM_DEBUGINFO'                                              => ((40000  + 7000)  + 12),
    'IDM_DOCLIST_COPYNAMES'                                      => ((40000 + 3500) + 3),		# v8.2.1
    'IDM_DOCLIST_COPYPATHS'                                      => ((40000 + 3500) + 4),		# v8.2.1
    'IDM_DOCLIST_FILESCLOSE'                                     => ((40000 + 3500) + 1),		# v8.1.3
    'IDM_DOCLIST_FILESCLOSEOTHERS'                               => ((40000 + 3500) + 2),		# v8.1.3
    'IDM_DROPLIST_LIST'                                          => (14000 + 1),		# v8.4.3
    'IDM_DROPLIST_MRU_FIRST'                                     => (14000 + 20),		# v8.4.3
    'IDM_EDIT'                                                   => (40000 + 2000),
    'IDM_EDIT_AUTOCOMPLETE'                                      => (50000 + 0),
    'IDM_EDIT_AUTOCOMPLETE_CURRENTFILE'                          => (50000 + 1),
    'IDM_EDIT_AUTOCOMPLETE_PATH'                                 => (50000 + 6),
    'IDM_EDIT_BEGINENDSELECT'                                    => ((40000 + 2000) + 20),
    'IDM_EDIT_BEGINENDSELECT_COLUMNMODE'                         => ((40000 + 2000) + 89),		# v8.5
    'IDM_EDIT_BLANKLINEABOVECURRENT'                             => ((40000 + 2000) + 57),
    'IDM_EDIT_BLANKLINEBELOWCURRENT'                             => ((40000 + 2000) + 58),
    'IDM_EDIT_BLOCK_COMMENT'                                     => ((40000 + 2000) + 22),
    'IDM_EDIT_BLOCK_COMMENT_SET'                                 => ((40000 + 2000) + 35),
    'IDM_EDIT_BLOCK_UNCOMMENT'                                   => ((40000 + 2000) + 36),
    'IDM_EDIT_CHANGESEARCHENGINE'                                => ((40000 + 2000) + 76),
    'IDM_EDIT_CHAR_PANEL'                                        => ((40000 + 2000) + 51),
    #'IDM_EDIT_CLEARREADONLY'                                    => ((40000 + 2000) + 33),      # removed between npp v8.5.3 and v8.9.5
    'IDM_EDIT_CLEARREADONLYFORALLDOCS'                           => ((40000 + 2000) + 103),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_CLIPBOARDHISTORY_PANEL'                            => ((40000 + 2000) + 52),
    'IDM_EDIT_COLUMNMODE'                                        => ((40000 + 2000) + 34),
    'IDM_EDIT_COLUMNMODETIP'                                     => ((40000 + 2000) + 37),
    'IDM_EDIT_COPY'                                              => ((40000 + 2000) + 2),
    'IDM_EDIT_COPY_ALL_NAMES'                                    => ((40000 + 2000) + 87),		# v8.2.1
    'IDM_EDIT_COPY_ALL_PATHS'                                    => ((40000 + 2000) + 88),		# v8.2.1
    'IDM_EDIT_COPY_BINARY'                                       => ((40000 + 2000) + 48),
    'IDM_EDIT_COPY_LINK'                                         => ((40000 + 2000) + 82),  # v7.9.2
    'IDM_EDIT_CURRENTDIRTOCLIP'                                  => ((40000 + 2000) + 31),
    'IDM_EDIT_CUT'                                               => ((40000 + 2000) + 1),
    'IDM_EDIT_CUT_BINARY'                                        => ((40000 + 2000) + 49),
    'IDM_EDIT_DELETE'                                            => ((40000 + 2000) + 6),
    'IDM_EDIT_DUP_LINE'                                          => ((40000 + 2000) + 10),
    'IDM_EDIT_EOL2WS'                                            => ((40000 + 2000) + 44),
    'IDM_EDIT_FILENAMETOCLIP'                                    => ((40000 + 2000) + 30),
    'IDM_EDIT_FULLPATHTOCLIP'                                    => ((40000 + 2000) + 29),
    'IDM_EDIT_FUNCCALLTIP'                                       => (50000 + 2),
    'IDM_EDIT_FUNCCALLTIP_NEXT'                                  => (50000 + 11),		# v8.4.5
    'IDM_EDIT_FUNCCALLTIP_PREVIOUS'                              => (50000 + 10),		# v8.4.5
    'IDM_EDIT_INSERT_DATETIME_CUSTOMIZED'                        => ((40000 + 2000) + 86),	# v8.1.5
    'IDM_EDIT_INSERT_DATETIME_LONG'                              => ((40000 + 2000) + 85),	# v8.1.4
    'IDM_EDIT_INSERT_DATETIME_SHORT'                             => ((40000 + 2000) + 84),	# v8.1.4
    'IDM_EDIT_INS_TAB'                                           => ((40000 + 2000) + 8),
    'IDM_EDIT_INVERTCASE'                                        => ((40000 + 2000) + 71),
    'IDM_EDIT_JOIN_LINES'                                        => ((40000 + 2000) + 13),
    'IDM_EDIT_LINE_DOWN'                                         => ((40000 + 2000) + 15),
    'IDM_EDIT_LINE_UP'                                           => ((40000 + 2000) + 14),
    'IDM_EDIT_LOWERCASE'                                         => ((40000 + 2000) + 17),
    'IDM_EDIT_LTR'                                               => ((40000 + 2000) + 27),
    'IDM_EDIT_MULTISELECTALL'                                    => ((40000 + 2000) + 90),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTALLMATCHCASE'                           => ((40000 + 2000) + 91),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTALLMATCHCASEWHOLEWORD'                  => ((40000 + 2000) + 93),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTALLWHOLEWORD'                           => ((40000 + 2000) + 92),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTNEXT'                                   => ((40000 + 2000) + 94),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTNEXTMATCHCASE'                          => ((40000 + 2000) + 95),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTNEXTMATCHCASEWHOLEWORD'                 => ((40000 + 2000) + 97),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTNEXTWHOLEWORD'                          => ((40000 + 2000) + 96),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTSSKIP'                                  => ((40000 + 2000) + 99),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_MULTISELECTUNDO'                                   => ((40000 + 2000) + 98),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_OPENASFILE'                                        => ((40000 + 2000) + 73),      # name thru v8.9.6.2
    'IDM_EDIT_OPENINFOLDER'                                      => ((40000 + 2000) + 74),      # name thru v8.9.6.2
    'IDM_EDIT_OPENSELECTEDFILETOEDIT'                            => ((40000 + 2000) + 73),      # renamed in v8.9.6.4
    'IDM_EDIT_OPENSELECTEDFILEFOLDERINEXPLORER'                  => ((40000 + 2000) + 74),      # renamed in v8.9.6.4
    'IDM_EDIT_PASTE'                                             => ((40000 + 2000) + 5),
    'IDM_EDIT_PASTE_AS_HTML'                                     => ((40000 + 2000) + 38),
    'IDM_EDIT_PASTE_AS_RTF'                                      => ((40000 + 2000) + 39),
    'IDM_EDIT_PASTE_BINARY'                                      => ((40000 + 2000) + 50),
    'IDM_EDIT_PROPERCASE_BLEND'                                  => ((40000 + 2000) + 68),
    'IDM_EDIT_PROPERCASE_FORCE'                                  => ((40000 + 2000) + 67),
    'IDM_EDIT_RANDOMCASE'                                        => ((40000 + 2000) + 72),
    'IDM_EDIT_REDACT_SELECTION'                                  => ((40000 + 2000) + 106),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_REDO'                                              => ((40000 + 2000) + 4),
    'IDM_EDIT_REMOVEEMPTYLINES'                                  => ((40000 + 2000) + 55),
    'IDM_EDIT_REMOVEEMPTYLINESWITHBLANK'                         => ((40000 + 2000) + 56),
    #'IDM_EDIT_REMOVE_DUP_LINES'                                  => ((40000 + 2000) + 77), # renamed to IDM_EDIT_REMOVE_CONSECUTIVE_DUP_LINES in v7.9.1
    'IDM_EDIT_REMOVE_CONSECUTIVE_DUP_LINES'                      => ((40000 + 2000) + 77), # renamed v7.9.1
    'IDM_EDIT_REMOVE_ANY_DUP_LINES'                              => ((40000 + 2000) + 79), # added v7.9.1
    'IDM_EDIT_RMV_TAB'                                           => ((40000 + 2000) + 9),
    'IDM_EDIT_RTL'                                               => ((40000 + 2000) + 26),
    'IDM_EDIT_SEARCHONINTERNET'                                  => ((40000 + 2000) + 75),
    'IDM_EDIT_SELECTALL'                                         => ((40000 + 2000) + 7),
    'IDM_EDIT_SENTENCECASE_BLEND'                                => ((40000 + 2000) + 70),
    'IDM_EDIT_SENTENCECASE_FORCE'                                => ((40000 + 2000) + 69),
    #IDM_EDIT_SETREADONLY'                                       => ((40000 + 2000) + 28),      # removed between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SETREADONLYFORALLDOCS'                             => ((40000 + 2000) + 102),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SORTLINES_DECIMALCOMMA_ASCENDING'                  => ((40000 + 2000) + 63),
    'IDM_EDIT_SORTLINES_DECIMALCOMMA_DESCENDING'                 => ((40000 + 2000) + 64),
    'IDM_EDIT_SORTLINES_DECIMALDOT_ASCENDING'                    => ((40000 + 2000) + 65),
    'IDM_EDIT_SORTLINES_DECIMALDOT_DESCENDING'                   => ((40000 + 2000) + 66),
    'IDM_EDIT_SORTLINES_INTEGER_ASCENDING'                       => ((40000 + 2000) + 61),
    'IDM_EDIT_SORTLINES_INTEGER_DESCENDING'                      => ((40000 + 2000) + 62),
    'IDM_EDIT_SORTLINES_LENGTH_ASCENDING'                        => ((40000 + 2000) + 104),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SORTLINES_LENGTH_DESCENDING'                       => ((40000 + 2000) + 105),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SORTLINES_LEXICOGRAPHIC_ASCENDING'                 => ((40000 + 2000) + 59),
    'IDM_EDIT_SORTLINES_LEXICOGRAPHIC_DESCENDING'                => ((40000 + 2000) + 60),
    'IDM_EDIT_SORTLINES_LEXICO_CASE_INSENS_ASCENDING'            => ((40000 + 2000) + 80), # added v7.9.1
    'IDM_EDIT_SORTLINES_LEXICO_CASE_INSENS_DESCENDING'           => ((40000 + 2000) + 81), # added v7.9.1
    'IDM_EDIT_SORTLINES_LOCALE_ASCENDING'                        => ((40000 + 2000) + 100),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SORTLINES_LOCALE_DESCENDING'                       => ((40000 + 2000) + 101),     # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_SORTLINES_RANDOMLY'                                => ((40000 + 2000) + 78), # added v7.9.1
    'IDM_EDIT_SORTLINES_REVERSE_ORDER'                           => ((40000 + 2000) + 83),	# v8.0
    'IDM_EDIT_SPLIT_LINES'                                       => ((40000 + 2000) + 12),
    'IDM_EDIT_STREAM_COMMENT'                                    => ((40000 + 2000) + 23),
    'IDM_EDIT_STREAM_UNCOMMENT'                                  => ((40000 + 2000) + 47),
    'IDM_EDIT_SW2TAB_ALL'                                        => ((40000 + 2000) + 54),
    'IDM_EDIT_SW2TAB_LEADING'                                    => ((40000 + 2000) + 53),
    'IDM_EDIT_TAB2SW'                                            => ((40000 + 2000) + 46),
    'IDM_EDIT_TOGGLEREADONLY'                                    => ((40000 + 2000) + 28),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_TOGGLESYSTEMREADONLY'                              => ((40000 + 2000) + 33),      # updated between npp v8.5.3 and v8.9.5
    'IDM_EDIT_TRANSPOSE_LINE'                                    => ((40000 + 2000) + 11),
    'IDM_EDIT_TRIMALL'                                           => ((40000 + 2000) + 45),
    'IDM_EDIT_TRIMLINEHEAD'                                      => ((40000 + 2000) + 42),
    'IDM_EDIT_TRIMTRAILING'                                      => ((40000 + 2000) + 24),
    'IDM_EDIT_TRIM_BOTH'                                         => ((40000 + 2000) + 43),
    'IDM_EDIT_UNDO'                                              => ((40000 + 2000) + 3),
    'IDM_EDIT_UPPERCASE'                                         => ((40000 + 2000) + 16),
    'IDM_EXECUTE'                                                => (40000 + 9000),
    'IDM_EXECUTE_VALIDATE_SHORTCUTSXML'                          => ((40000 + 9000) + 1),   # added v8.9.6.1
    'IDM_EXPORT_FUNC_LIST_AND_QUIT'                              => ((40000 + 4000) + 73),
    'IDM_FILE'                                                   => (40000 + 1000),
    'IDM_FILEMENU_EXISTCMDPOSITION'                              => 22,
    'IDM_FILEMENU_LASTONE'                                       => ((40000 + 1000) + 27),      # will always be the last in the FILE MENU (updated every time)
    'IDM_FILESWITCHER_FILESCLOSE'                                => ((40000 + 3500) + 1),	# renamed v8.1.3 to IDM_DOCLIST_*
    'IDM_FILESWITCHER_FILESCLOSEOTHERS'                          => ((40000 + 3500) + 2),	# renamed v8.1.3 to IDM_DOCLIST_*
    'IDM_FILE_CLOSE'                                             => ((40000 + 1000) + 3),
    'IDM_FILE_CLOSEALL'                                          => ((40000 + 1000) + 4),
    'IDM_FILE_CLOSEALL_BUT_CURRENT'                              => ((40000 + 1000) + 5),
    'IDM_FILE_CLOSEALL_BUT_PINNED'                               => ((40000 + 1000) + 26),      # updated between npp v8.5.3 and v8.9.5
    'IDM_FILE_CLOSEALL_TOLEFT'                                   => ((40000 + 1000) + 9),
    'IDM_FILE_CLOSEALL_TORIGHT'                                  => ((40000 + 1000) + 18),
    'IDM_FILE_CLOSEALL_UNCHANGED'                                => ((40000 + 1000) + 24),
    'IDM_FILE_CONTAININGFOLDERASWORKSPACE'                       => ((40000 + 1000) + 25), # added v7.9.1
    'IDM_FILE_DELETE'                                            => ((40000 + 1000) + 16),
    'IDM_FILE_EXIT'                                              => ((40000 + 1000) + 11),
    'IDM_FILE_LOADSESSION'                                       => ((40000 + 1000) + 12),
    'IDM_FILE_NEW'                                               => ((40000 + 1000) + 1),
    'IDM_FILE_OPEN'                                              => ((40000 + 1000) + 2),
    'IDM_FILE_OPENFOLDERASWORSPACE'                              => ((40000 + 1000) + 22),
    'IDM_FILE_OPEN_CMD'                                          => ((40000 + 1000) + 20),
    'IDM_FILE_OPEN_DEFAULT_VIEWER'                               => ((40000 + 1000) + 23),
    'IDM_FILE_OPEN_FOLDER'                                       => ((40000 + 1000) + 19),
    'IDM_FILE_OPEN_POWERSHELL'                                   => ((40000 + 1000) + 27),  # added v8.9.6.1
    'IDM_FILE_PRINT'                                             => ((40000 + 1000) + 10),
    'IDM_FILE_PRINTNOW'                                          => 1001,
    'IDM_FILE_RELOAD'                                            => ((40000 + 1000) + 14),
    'IDM_FILE_RENAME'                                            => ((40000 + 1000) + 17),
    'IDM_FILE_RESTORELASTCLOSEDFILE'                             => ((40000 + 1000) + 21),
    'IDM_FILE_SAVE'                                              => ((40000 + 1000) + 6),
    'IDM_FILE_SAVEALL'                                           => ((40000 + 1000) + 7),
    'IDM_FILE_SAVEAS'                                            => ((40000 + 1000) + 8),
    'IDM_FILE_SAVECOPYAS'                                        => ((40000 + 1000) + 15),
    'IDM_FILE_SAVESESSION'                                       => ((40000 + 1000) + 13),
    'IDM_FOCUS_ON_FOUND_RESULTS'                                 => ((40000 + 3000) + 45),
    'IDM_FORMAT'                                                 => (40000 + 5000),
    'IDM_FORMAT_ANSI'                                            => ((40000 + 5000) + 4),
    'IDM_FORMAT_AS_UTF_8'                                        => ((40000 + 5000) + 8),
    'IDM_FORMAT_BIG5'                                            => (((40000 + 5000) + 20) + 40),
    'IDM_FORMAT_CONV2_ANSI'                                      => ((40000 + 5000) + 9),
    'IDM_FORMAT_CONV2_AS_UTF_8'                                  => ((40000 + 5000) + 10),
    'IDM_FORMAT_CONV2_UCS_2BE'                                   => ((40000 + 5000) + 12),
    'IDM_FORMAT_CONV2_UCS_2LE'                                   => ((40000 + 5000) + 13),
    'IDM_FORMAT_CONV2_UTF_16BE'                                  => ((40000 + 5000) + 12), # 2021-03-27: Don renamed UCS-2 to UTF-16
    'IDM_FORMAT_CONV2_UTF_16LE'                                  => ((40000 + 5000) + 13), # 2021-03-27: Don renamed UCS-2 to UTF-16
    'IDM_FORMAT_CONV2_UTF_8'                                     => ((40000 + 5000) + 11),
    'IDM_FORMAT_DOS_437'                                         => (((40000 + 5000) + 20) + 24),
    'IDM_FORMAT_DOS_720'                                         => (((40000 + 5000) + 20) + 25),
    'IDM_FORMAT_DOS_737'                                         => (((40000 + 5000) + 20) + 26),
    'IDM_FORMAT_DOS_775'                                         => (((40000 + 5000) + 20) + 27),
    'IDM_FORMAT_DOS_850'                                         => (((40000 + 5000) + 20) + 28),
    'IDM_FORMAT_DOS_852'                                         => (((40000 + 5000) + 20) + 29),
    'IDM_FORMAT_DOS_855'                                         => (((40000 + 5000) + 20) + 30),
    'IDM_FORMAT_DOS_857'                                         => (((40000 + 5000) + 20) + 31),
    'IDM_FORMAT_DOS_858'                                         => (((40000 + 5000) + 20) + 32),
    'IDM_FORMAT_DOS_860'                                         => (((40000 + 5000) + 20) + 33),
    'IDM_FORMAT_DOS_861'                                         => (((40000 + 5000) + 20) + 34),
    'IDM_FORMAT_DOS_862'                                         => (((40000 + 5000) + 20) + 35),
    'IDM_FORMAT_DOS_863'                                         => (((40000 + 5000) + 20) + 36),
    'IDM_FORMAT_DOS_865'                                         => (((40000 + 5000) + 20) + 37),
    'IDM_FORMAT_DOS_866'                                         => (((40000 + 5000) + 20) + 38),
    'IDM_FORMAT_DOS_869'                                         => (((40000 + 5000) + 20) + 39),
    'IDM_FORMAT_ENCODE'                                          => ((40000 + 5000) + 20),
    'IDM_FORMAT_ENCODE_END'                                      => (((40000 + 5000) + 20) + 48),
    'IDM_FORMAT_EUC_KR'                                          => (((40000 + 5000) + 20) + 44),
    'IDM_FORMAT_GB2312'                                          => (((40000 + 5000) + 20) + 41),
    'IDM_FORMAT_ISO_8859_1'                                      => (((40000 + 5000) + 20) + 9),
    'IDM_FORMAT_ISO_8859_13'                                     => (((40000 + 5000) + 20) + 20),
    'IDM_FORMAT_ISO_8859_14'                                     => (((40000 + 5000) + 20) + 21),
    'IDM_FORMAT_ISO_8859_15'                                     => (((40000 + 5000) + 20) + 22),
    'IDM_FORMAT_ISO_8859_2'                                      => (((40000 + 5000) + 20) + 10),
    'IDM_FORMAT_ISO_8859_3'                                      => (((40000 + 5000) + 20) + 11),
    'IDM_FORMAT_ISO_8859_4'                                      => (((40000 + 5000) + 20) + 12),
    'IDM_FORMAT_ISO_8859_5'                                      => (((40000 + 5000) + 20) + 13),
    'IDM_FORMAT_ISO_8859_6'                                      => (((40000 + 5000) + 20) + 14),
    'IDM_FORMAT_ISO_8859_7'                                      => (((40000 + 5000) + 20) + 15),
    'IDM_FORMAT_ISO_8859_8'                                      => (((40000 + 5000) + 20) + 16),
    'IDM_FORMAT_ISO_8859_9'                                      => (((40000 + 5000) + 20) + 17),
    'IDM_FORMAT_KOI8R_CYRILLIC'                                  => (((40000 + 5000) + 20) + 48),
    'IDM_FORMAT_KOI8U_CYRILLIC'                                  => (((40000 + 5000) + 20) + 47),
    'IDM_FORMAT_KOREAN_WIN'                                      => (((40000 + 5000) + 20) + 43),
    'IDM_FORMAT_MAC_CYRILLIC'                                    => (((40000 + 5000) + 20) + 46),
    'IDM_FORMAT_SHIFT_JIS'                                       => (((40000 + 5000) + 20) + 42),
    'IDM_FORMAT_TIS_620'                                         => (((40000 + 5000) + 20) + 45),
    'IDM_FORMAT_TODOS'                                           => ((40000 + 5000) + 1),
    'IDM_FORMAT_TOMAC'                                           => ((40000 + 5000) + 3),
    'IDM_FORMAT_TOUNIX'                                          => ((40000 + 5000) + 2),
    'IDM_FORMAT_UCS_2BE'                                         => ((40000 + 5000) + 6),
    'IDM_FORMAT_UCS_2LE'                                         => ((40000 + 5000) + 7),
    'IDM_FORMAT_UTF_16BE'                                        => ((40000 + 5000) + 6), # 2021-Mar-26: Don renamed UCS-2 to UTF-16
    'IDM_FORMAT_UTF_16LE'                                        => ((40000 + 5000) + 7), # 2021-Mar-26: Don renamed UCS-2 to UTF-16
    'IDM_FORMAT_UTF_8'                                           => ((40000 + 5000) + 5),
    'IDM_FORMAT_WIN_1250'                                        => (((40000 + 5000) + 20) + 0),
    'IDM_FORMAT_WIN_1251'                                        => (((40000 + 5000) + 20) + 1),
    'IDM_FORMAT_WIN_1252'                                        => (((40000 + 5000) + 20) + 2),
    'IDM_FORMAT_WIN_1253'                                        => (((40000 + 5000) + 20) + 3),
    'IDM_FORMAT_WIN_1254'                                        => (((40000 + 5000) + 20) + 4),
    'IDM_FORMAT_WIN_1255'                                        => (((40000 + 5000) + 20) + 5),
    'IDM_FORMAT_WIN_1256'                                        => (((40000 + 5000) + 20) + 6),
    'IDM_FORMAT_WIN_1257'                                        => (((40000 + 5000) + 20) + 7),
    'IDM_FORMAT_WIN_1258'                                        => (((40000 + 5000) + 20) + 8),
    'IDM_FORUM'                                                  => ((40000  + 7000)  + 4),
    'IDM_HELP'                                                   => ((40000  + 7000)  + 8),
    'IDM_HOMESWEETHOME'                                          => ((40000  + 7000)  + 1),
    'IDM_LANG'                                                   => (40000 + 6000),
    'IDM_LANGSTYLE_CONFIG_DLG'                                   => ((40000 + 6000) + 1),
    'IDM_LANG_ADA'                                               => ((40000 + 6000) + 42),
    'IDM_LANG_ASCII'                                             => ((40000 + 6000) + 15),
    'IDM_LANG_ASM'                                               => ((40000 + 6000) + 33),
    'IDM_LANG_ASN1'                                              => ((40000 + 6000) + 64),
    'IDM_LANG_ASP'                                               => ((40000 + 6000) + 9),
    'IDM_LANG_AU3'                                               => ((40000 + 6000) + 44),
    'IDM_LANG_AVS'                                               => ((40000 + 6000) + 65),
    'IDM_LANG_BAANC'                                             => ((40000 + 6000) + 59),
    'IDM_LANG_BASH'                                              => ((40000 + 6000) + 27),
    'IDM_LANG_BATCH'                                             => ((40000 + 6000) + 22),
    'IDM_LANG_BLITZBASIC'                                        => ((40000 + 6000) + 66),
    'IDM_LANG_C'                                                 => ((40000 + 6000) + 2),
    'IDM_LANG_CAML'                                              => ((40000 + 6000) + 40),
    'IDM_LANG_CMAKE'                                             => ((40000 + 6000) + 48),
    'IDM_LANG_COBOL'                                             => ((40000 + 6000) + 50),
    'IDM_LANG_COFFEESCRIPT'                                      => ((40000 + 6000) + 56),
    'IDM_LANG_CPP'                                               => ((40000 + 6000) + 3),
    'IDM_LANG_CS'                                                => ((40000 + 6000) + 23),
    'IDM_LANG_CSOUND'                                            => ((40000 + 6000) + 69),
    'IDM_LANG_CSS'                                               => ((40000 + 6000) + 10),
    'IDM_LANG_D'                                                 => ((40000 + 6000) + 51),
    'IDM_LANG_DIFF'                                              => ((40000 + 6000) + 34),
    'IDM_LANG_ERLANG'                                            => ((40000 + 6000) + 70),
    'IDM_LANG_ERRORLIST'                                         => ((40000 + 6000) + 93),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_ESCRIPT'                                           => ((40000 + 6000) + 71),
    'IDM_LANG_EXTERNAL'                                          => ((40000 + 6000) + 165),
    'IDM_LANG_EXTERNAL_LIMIT'                                    => ((40000 + 6000) + 179),
    'IDM_LANG_FLASH'                                             => ((40000 + 6000) + 28),
    'IDM_LANG_FORTH'                                             => ((40000 + 6000) + 72),
    'IDM_LANG_FORTRAN'                                           => ((40000 + 6000) + 26),
    'IDM_LANG_FORTRAN_77'                                        => ((40000 + 6000) + 58),
    'IDM_LANG_FREEBASIC'                                         => ((40000 + 6000) + 68),
    'IDM_LANG_GDSCRIPT'                                          => ((40000 + 6000) + 87),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_GOLANG'                                            => ((40000 + 6000) + 89),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_GUI4CLI'                                           => ((40000 + 6000) + 52),
    'IDM_LANG_HASKELL'                                           => ((40000 + 6000) + 46),
    'IDM_LANG_HOLLYWOOD'                                         => ((40000 + 6000) + 88),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_HTML'                                              => ((40000 + 6000) + 5),
    'IDM_LANG_IHEX'                                              => ((40000 + 6000) + 61),
    'IDM_LANG_INI'                                               => ((40000 + 6000) + 19),
    'IDM_LANG_INNO'                                              => ((40000 + 6000) + 47),
    'IDM_LANG_JAVA'                                              => ((40000 + 6000) + 4),
    'IDM_LANG_JS'                                                => ((40000 + 6000) + 7),
    'IDM_LANG_JSON'                                              => ((40000 + 6000) + 57),
    'IDM_LANG_JSON5'                                             => ((40000 + 6000) + 85),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_JSP'                                               => ((40000 + 6000) + 55),
    'IDM_LANG_KIX'                                               => ((40000 + 6000) + 41),
    'IDM_LANG_LATEX'                                             => ((40000 + 6000) + 73),
    'IDM_LANG_LISP'                                              => ((40000 + 6000) + 31),
    'IDM_LANG_LUA'                                               => ((40000 + 6000) + 24),
    'IDM_LANG_MAKEFILE'                                          => ((40000 + 6000) + 18),
    'IDM_LANG_MATLAB'                                            => ((40000 + 6000) + 45),
    'IDM_LANG_MMIXAL'                                            => ((40000 + 6000) + 74),
    'IDM_LANG_MSSQL'                                             => ((40000 + 6000) + 86),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_NIMROD'                                            => ((40000 + 6000) + 75),	# renamed v8.0
    'IDM_LANG_NIM'                                               => ((40000 + 6000) + 75),  # v8.0
    'IDM_LANG_NNCRONTAB'                                         => ((40000 + 6000) + 76),
    'IDM_LANG_NSIS'                                              => ((40000 + 6000) + 29),
    'IDM_LANG_OBJC'                                              => ((40000 + 6000) + 14),
    'IDM_LANG_OPENUDLDIR'                                        => ((40000 + 6000) + 300),
    'IDM_LANG_OSCRIPT'                                           => ((40000 + 6000) + 77),
    'IDM_LANG_PASCAL'                                            => ((40000 + 6000) + 11),
    'IDM_LANG_PERL'                                              => ((40000 + 6000) + 13),
    'IDM_LANG_PHP'                                               => ((40000 + 6000) + 8),
    'IDM_LANG_POWERSHELL'                                        => ((40000 + 6000) + 53),
    'IDM_LANG_PROPS'                                             => ((40000 + 6000) + 35),
    'IDM_LANG_PS'                                                => ((40000 + 6000) + 36),
    'IDM_LANG_PUREBASIC'                                         => ((40000 + 6000) + 67),
    'IDM_LANG_PYTHON'                                            => ((40000 + 6000) + 12),
    'IDM_LANG_R'                                                 => ((40000 + 6000) + 54),
    'IDM_LANG_RAKU'                                              => ((40000 + 6000) + 90),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_RC'                                                => ((40000 + 6000) + 17),
    'IDM_LANG_REBOL'                                             => ((40000 + 6000) + 78),
    'IDM_LANG_REGISTRY'                                          => ((40000 + 6000) + 79),
    'IDM_LANG_RUBY'                                              => ((40000 + 6000) + 37),
    'IDM_LANG_RUST'                                              => ((40000 + 6000) + 80),
    'IDM_LANG_SAS'                                               => ((40000 + 6000) + 92),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_SCHEME'                                            => ((40000 + 6000) + 32),
    'IDM_LANG_SMALLTALK'                                         => ((40000 + 6000) + 38),
    'IDM_LANG_SPICE'                                             => ((40000 + 6000) + 81),
    'IDM_LANG_SQL'                                               => ((40000 + 6000) + 20),
    'IDM_LANG_SREC'                                              => ((40000 + 6000) + 60),
    'IDM_LANG_SWIFT'                                             => ((40000 + 6000) + 63),
    'IDM_LANG_TCL'                                               => ((40000 + 6000) + 30),
    'IDM_LANG_TEHEX'                                             => ((40000 + 6000) + 62),
    'IDM_LANG_TEX'                                               => ((40000 + 6000) + 25),
    'IDM_LANG_TEXT'                                              => ((40000 + 6000) + 16),
    'IDM_LANG_TOML'                                              => ((40000 + 6000) + 91),      # updated between npp v8.5.3 and v8.9.5
    'IDM_LANG_TXT2TAGS'                                          => ((40000 + 6000) + 82),
    'IDM_LANG_TYPESCRIPT'                                        => ((40000 + 6000) + 84),	# v8.1.4
    'IDM_LANG_UDLCOLLECTION_PROJECT_SITE'                        => ((40000 + 6000) + 301),	# v8.1.9.3
    'IDM_LANG_USER'                                              => ((40000 + 6000) + 180),
    'IDM_LANG_USER_DLG'                                          => ((40000 + 6000) + 250),
    'IDM_LANG_USER_LIMIT'                                        => ((40000 + 6000) + 210),
    'IDM_LANG_VB'                                                => ((40000 + 6000) + 21),
    'IDM_LANG_VERILOG'                                           => ((40000 + 6000) + 43),
    'IDM_LANG_VHDL'                                              => ((40000 + 6000) + 39),
    'IDM_LANG_VISUALPROLOG'                                      => ((40000 + 6000) + 83),
    'IDM_LANG_XML'                                               => ((40000 + 6000) + 6),
    'IDM_LANG_YAML'                                              => ((40000 + 6000) + 49),
    'IDM_MACRO_PLAYBACKRECORDEDMACRO'                            => ((40000 + 2000) + 21),
    'IDM_MACRO_RUNMULTIMACRODLG'                                 => ((40000 + 2000) + 32),
    'IDM_MACRO_SAVECURRENTMACRO'                                 => ((40000 + 2000) + 25),
    'IDM_MACRO_STARTRECORDINGMACRO'                              => ((40000 + 2000) + 18),
    'IDM_MACRO_STOPRECORDINGMACRO'                               => ((40000 + 2000) + 19),
    'IDM_MISC'                                                   => (40000 + 3500),
    'IDM_ONLINEDOCUMENT'                                         => ((40000  + 7000)  + 3),     # new name (v7.8 and newer)
    'IDM_ONLINEHELP'                                             => ((40000  + 7000)  + 3),     # old name (before v7.8)
    #'IDM_ONLINESUPPORT'                                          => ((40000  + 7000)  + 11),	# removed v8.0; don't support even in previous versions because the service no longer exists
    'IDM_OPEN_ALL_RECENT_FILE'                                   => ((40000 + 2000) + 40),
    'IDM_PINTAB'                                                 => ((40000 + 4000) + 48),      # updated between npp v8.5.3 and v8.9.5
    'IDM_PROJECTPAGE'                                            => ((40000  + 7000)  + 2),
    'IDM_SEARCH'                                                 => (40000 + 3000),
    'IDM_SEARCH_ALLSTYLESTOCLIP'                                 => ((40000 + 3000) + 60), # v7.9.1
    'IDM_SEARCH_CHANGED_NEXT'                                    => ((40000 + 3000) + 67),      # updated between npp v8.5.3 and v8.9.5
    'IDM_SEARCH_CHANGED_PREV'                                    => ((40000 + 3000) + 68),      # updated between npp v8.5.3 and v8.9.5
    'IDM_SEARCH_CLEARALLMARKS'                                   => ((40000 + 3000) + 32),
    'IDM_SEARCH_CLEAR_BOOKMARKS'                                 => ((40000 + 3000) + 8),
    'IDM_SEARCH_CLEAR_CHANGE_HISTORY'                            => ((40000 + 3000) + 69),      # updated between npp v8.5.3 and v8.9.5
    'IDM_SEARCH_COPYMARKEDLINES'                                 => ((40000 + 3000) + 19),
    'IDM_SEARCH_CUTMARKEDLINES'                                  => ((40000 + 3000) + 18),
    'IDM_SEARCH_DELETEMARKEDLINES'                               => ((40000 + 3000) + 21),
    'IDM_SEARCH_DELETEUNMARKEDLINES'                             => ((40000 + 3000) + 51),
    'IDM_SEARCH_FIND'                                            => ((40000 + 3000) + 1),
    'IDM_SEARCH_FINDCHARINRANGE'                                 => ((40000 + 3000) + 52),
    'IDM_SEARCH_FINDINCREMENT'                                   => ((40000 + 3000) + 11),
    'IDM_SEARCH_FINDINFILES'                                     => ((40000 + 3000) + 13),
    'IDM_SEARCH_FINDNEXT'                                        => ((40000 + 3000) + 2),
    'IDM_SEARCH_FINDPREV'                                        => ((40000 + 3000) + 10),
    'IDM_SEARCH_GONEXTMARKER1'                                   => ((40000 + 3000) + 39),
    'IDM_SEARCH_GONEXTMARKER2'                                   => ((40000 + 3000) + 40),
    'IDM_SEARCH_GONEXTMARKER3'                                   => ((40000 + 3000) + 41),
    'IDM_SEARCH_GONEXTMARKER4'                                   => ((40000 + 3000) + 42),
    'IDM_SEARCH_GONEXTMARKER5'                                   => ((40000 + 3000) + 43),
    'IDM_SEARCH_GONEXTMARKER_DEF'                                => ((40000 + 3000) + 44),
    'IDM_SEARCH_GOPREVMARKER1'                                   => ((40000 + 3000) + 33),
    'IDM_SEARCH_GOPREVMARKER2'                                   => ((40000 + 3000) + 34),
    'IDM_SEARCH_GOPREVMARKER3'                                   => ((40000 + 3000) + 35),
    'IDM_SEARCH_GOPREVMARKER4'                                   => ((40000 + 3000) + 36),
    'IDM_SEARCH_GOPREVMARKER5'                                   => ((40000 + 3000) + 37),
    'IDM_SEARCH_GOPREVMARKER_DEF'                                => ((40000 + 3000) + 38),
    'IDM_SEARCH_GOTOLINE'                                        => ((40000 + 3000) + 4),
    'IDM_SEARCH_GOTOMATCHINGBRACE'                               => ((40000 + 3000) + 9),
    'IDM_SEARCH_GOTONEXTFOUND'                                   => ((40000 + 3000) + 46),
    'IDM_SEARCH_GOTOPREVFOUND'                                   => ((40000 + 3000) + 47),
    'IDM_SEARCH_INVERSEMARKS'                                    => ((40000 + 3000) + 50),
    'IDM_SEARCH_MARK'                                            => ((40000 + 3000) + 54),
    'IDM_SEARCH_MARKALLEXT1'                                     => ((40000 + 3000) + 22),
    'IDM_SEARCH_MARKALLEXT2'                                     => ((40000 + 3000) + 24),
    'IDM_SEARCH_MARKALLEXT3'                                     => ((40000 + 3000) + 26),
    'IDM_SEARCH_MARKALLEXT4'                                     => ((40000 + 3000) + 28),
    'IDM_SEARCH_MARKALLEXT5'                                     => ((40000 + 3000) + 30),
    'IDM_SEARCH_MARKEDTOCLIP'                                    => ((40000 + 3000) + 61), # v7.9.1
    'IDM_SEARCH_MARKONEEXT1'                                     => ((40000 + 3000) + 62),	# v8.0
    'IDM_SEARCH_MARKONEEXT2'                                     => ((40000 + 3000) + 63),	# v8.0
    'IDM_SEARCH_MARKONEEXT3'                                     => ((40000 + 3000) + 64),	# v8.0
    'IDM_SEARCH_MARKONEEXT4'                                     => ((40000 + 3000) + 65),	# v8.0
    'IDM_SEARCH_MARKONEEXT5'                                     => ((40000 + 3000) + 66),	# v8.0
    'IDM_SEARCH_NEXT_BOOKMARK'                                   => ((40000 + 3000) + 6),
    'IDM_SEARCH_PASTEMARKEDLINES'                                => ((40000 + 3000) + 20),
    'IDM_SEARCH_PREV_BOOKMARK'                                   => ((40000 + 3000) + 7),
    'IDM_SEARCH_REPLACE'                                         => ((40000 + 3000) + 3),
    'IDM_SEARCH_SELECTMATCHINGBRACES'                            => ((40000 + 3000) + 53),
    'IDM_SEARCH_SETANDFINDNEXT'                                  => ((40000 + 3000) + 48),
    'IDM_SEARCH_SETANDFINDPREV'                                  => ((40000 + 3000) + 49),
    'IDM_SEARCH_STYLE1TOCLIP'                                    => ((40000 + 3000) + 55), # v7.9.1
    'IDM_SEARCH_STYLE2TOCLIP'                                    => ((40000 + 3000) + 56), # v7.9.1
    'IDM_SEARCH_STYLE3TOCLIP'                                    => ((40000 + 3000) + 57), # v7.9.1
    'IDM_SEARCH_STYLE4TOCLIP'                                    => ((40000 + 3000) + 58), # v7.9.1
    'IDM_SEARCH_STYLE5TOCLIP'                                    => ((40000 + 3000) + 59), # v7.9.1
    'IDM_SEARCH_TOGGLE_BOOKMARK'                                 => ((40000 + 3000) + 5),
    'IDM_SEARCH_UNMARKALLEXT1'                                   => ((40000 + 3000) + 23),
    'IDM_SEARCH_UNMARKALLEXT2'                                   => ((40000 + 3000) + 25),
    'IDM_SEARCH_UNMARKALLEXT3'                                   => ((40000 + 3000) + 27),
    'IDM_SEARCH_UNMARKALLEXT4'                                   => ((40000 + 3000) + 29),
    'IDM_SEARCH_UNMARKALLEXT5'                                   => ((40000 + 3000) + 31),
    'IDM_SEARCH_VOLATILE_FINDNEXT'                               => ((40000 + 3000) + 14),
    'IDM_SEARCH_VOLATILE_FINDPREV'                               => ((40000 + 3000) + 15),
    'IDM_SETTING'                                                => (40000 + 8000),
    'IDM_SETTING_EDITCONTEXTMENU'                                => ((40000 + 8000) + 18),
    'IDM_SETTING_IMPORTPLUGIN'                                   => ((40000 + 8000) + 5),
    'IDM_SETTING_IMPORTSTYLETHEMES'                              => ((40000 + 8000) + 6),       # updated between npp v8.5.3 and v8.9.5
    'IDM_SETTING_OPENPLUGINSDIR'                                 => ((40000 + 8000) + 14),
    'IDM_SETTING_PLUGINADM'                                      => ((40000 + 8000) + 15),
    'IDM_SETTING_PREFERENCE'                                     => ((40000 + 8000) + 11),
    'IDM_SETTING_REMEMBER_LAST_SESSION'                          => ((40000 + 8000) + 10),
    'IDM_SETTING_SHORTCUT_MAPPER'                                => ((40000 + 8000) + 9),
    'IDM_SETTING_SHORTCUT_MAPPER_MACRO'                          => ((40000 + 8000) + 16),
    'IDM_SETTING_SHORTCUT_MAPPER_RUN'                            => ((40000 + 8000) + 17),
    'IDM_SETTING_TRAYICON'                                       => ((40000 + 8000) + 8),
    'IDM_SYSTRAYPOPUP'                                           => (40000 + 3100),
    'IDM_SYSTRAYPOPUP_ACTIVATE'                                  => ((40000 + 3100) + 1),
    'IDM_SYSTRAYPOPUP_CLOSE'                                     => ((40000 + 3100) + 5),
    'IDM_SYSTRAYPOPUP_NEWDOC'                                    => ((40000 + 3100) + 2),
    'IDM_SYSTRAYPOPUP_NEW_AND_PASTE'                             => ((40000 + 3100) + 3),
    'IDM_SYSTRAYPOPUP_OPENFILE'                                  => ((40000 + 3100) + 4),
    'IDM_TOOL'                                                   => (40000 + 8500),
    'IDM_TOOL_MD5_GENERATE'                                      => ((40000 + 8500) + 1),
    'IDM_TOOL_MD5_GENERATEFROMFILE'                              => ((40000 + 8500) + 2),
    'IDM_TOOL_MD5_GENERATEINTOCLIPBOARD'                         => ((40000 + 8500) + 3),
    'IDM_TOOL_SHA1_GENERATE'                                     => ((40000 + 8500) + 7),       # updated between npp v8.5.3 and v8.9.5
    'IDM_TOOL_SHA1_GENERATEFROMFILE'                             => ((40000 + 8500) + 8),       # updated between npp v8.5.3 and v8.9.5
    'IDM_TOOL_SHA1_GENERATEINTOCLIPBOARD'                        => ((40000 + 8500) + 9),       # updated between npp v8.5.3 and v8.9.5
    'IDM_TOOL_SHA256_GENERATE'                                   => ((40000 + 8500) + 4),
    'IDM_TOOL_SHA256_GENERATEFROMFILE'                           => ((40000 + 8500) + 5),
    'IDM_TOOL_SHA256_GENERATEINTOCLIPBOARD'                      => ((40000 + 8500) + 6),
    'IDM_TOOL_SHA512_GENERATE'                                   => ((40000 + 8500) + 10),      # updated between npp v8.5.3 and v8.9.5
    'IDM_TOOL_SHA512_GENERATEFROMFILE'                           => ((40000 + 8500) + 11),      # updated between npp v8.5.3 and v8.9.5
    'IDM_TOOL_SHA512_GENERATEINTOCLIPBOARD'                      => ((40000 + 8500) + 12),      # updated between npp v8.5.3 and v8.9.5
    'IDM_UPDATE_NPP'                                             => ((40000  + 7000)  + 6),
    'IDM_VIEW'                                                   => (40000 + 4000),
    'IDM_VIEW_ALL_CHARACTERS'                                    => ((40000 + 4000) + 19),
    'IDM_VIEW_ALWAYSONTOP'                                       => ((40000 + 4000) + 34),
    'IDM_VIEW_CLONE_TO_ANOTHER_VIEW'                             => 10002,
    #IDM_VIEW_CURLINE_HILITING'                                  => ((40000 + 4000) + 21),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_DISTRACTIONFREE'                                   => ((40000 + 4000) + 11),	# v8.0
    'IDM_VIEW_DOCCHANGEMARGIN'                                   => ((40000 + 4000) + 45),	# removed v8.4.6
    'IDM_VIEW_DOCLIST'                                           => ((40000 + 4000) + 70),	# v8.1.3
    'IDM_VIEW_DOC_MAP'                                           => ((40000 + 4000) + 80),
    #IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN'                            => ((40000 + 4000) + 38),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE'                            => ((40000 + 4000) + 39),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_DRAWTABBAR_INACIVETAB'                             => ((40000 + 4000) + 8),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_DRAWTABBAR_MULTILINE'                              => ((40000 + 4000) + 44),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_DRAWTABBAR_TOPBAR'                                 => ((40000 + 4000) + 7),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_DRAWTABBAR_VERTICAL'                               => ((40000 + 4000) + 43),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_EDGEBACKGROUND'                                    => ((40000 + 4000) + 28), # removed v7.9.x
    'IDM_VIEW_EDGELINE'                                          => ((40000 + 4000) + 27), # removed v7.9.x
    'IDM_VIEW_EDGENONE'                                          => ((40000 + 4000) + 37), # removed v7.9.x
    'IDM_VIEW_EOL'                                               => ((40000 + 4000) + 26),
    'IDM_VIEW_FILEBROWSER'                                       => ((40000 + 4000) + 85),
    'IDM_VIEW_FILESWITCHER_PANEL'                                => ((40000 + 4000) + 70),	# removed v8.1.3, but still supported in previous revs
    'IDM_VIEW_FOLD'                                              => ((40000 + 4000) + 50),
    'IDM_VIEW_FOLDALL'                                           => ((40000 + 4000) + 10), # v8.4.2
    #IDM_VIEW_FOLDERMAGIN'                                       => ((40000 + 4000) + 14),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_FOLDERMAGIN_ARROW'                                 => ((40000 + 4000) + 16),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_FOLDERMAGIN_BOX'                                   => ((40000 + 4000) + 18),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_FOLDERMAGIN_CIRCLE'                                => ((40000 + 4000) + 17),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_FOLDERMAGIN_SIMPLE'                                => ((40000 + 4000) + 15),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_FOLD_1'                                            => (((40000 + 4000) + 50) + 1),
    'IDM_VIEW_FOLD_2'                                            => (((40000 + 4000) + 50) + 2),
    'IDM_VIEW_FOLD_3'                                            => (((40000 + 4000) + 50) + 3),
    'IDM_VIEW_FOLD_4'                                            => (((40000 + 4000) + 50) + 4),
    'IDM_VIEW_FOLD_5'                                            => (((40000 + 4000) + 50) + 5),
    'IDM_VIEW_FOLD_6'                                            => (((40000 + 4000) + 50) + 6),
    'IDM_VIEW_FOLD_7'                                            => (((40000 + 4000) + 50) + 7),
    'IDM_VIEW_FOLD_8'                                            => (((40000 + 4000) + 50) + 8),
    'IDM_VIEW_FOLD_CURRENT'                                      => ((40000 + 4000) + 30),
    'IDM_VIEW_FULLSCREENTOGGLE'                                  => ((40000 + 4000) + 32),
    'IDM_VIEW_FUNC_LIST'                                         => ((40000 + 4000) + 84),
    'IDM_VIEW_GOTO_ANOTHER_VIEW'                                 => 10001,
    'IDM_VIEW_GOTO_END'                                          => 10006,                      # updated between npp v8.5.3 and v8.9.5
    'IDM_VIEW_GOTO_NEW_INSTANCE'                                 => 10003,
    'IDM_VIEW_GOTO_START'                                        => 10005,                      # updated between npp v8.5.3 and v8.9.5
    'IDM_VIEW_HIDELINES'                                         => ((40000 + 4000) + 42),
    'IDM_VIEW_INDENT_GUIDE'                                      => ((40000 + 4000) + 20),
    'IDM_VIEW_IN_CHROME'                                         => ((40000 + 4000) + 101),
    'IDM_VIEW_IN_EDGE'                                           => ((40000 + 4000) + 102),
    'IDM_VIEW_IN_FIREFOX'                                        => ((40000 + 4000) + 100),
    'IDM_VIEW_IN_IE'                                             => ((40000 + 4000) + 103),
    #IDM_VIEW_LINENUMBER'                                        => ((40000 + 4000) + 12),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_LOAD_IN_NEW_INSTANCE'                              => 10004,
    #IDM_VIEW_LOCKTABBAR'                                        => ((40000 + 4000) + 6),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_LWALIGN'                                           => ((40000 + 4000) + 47),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_LWDEF'                                             => ((40000 + 4000) + 46),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_LWINDENT'                                          => ((40000 + 4000) + 48),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_MONITORING'                                        => ((40000 + 4000) + 97),
    'IDM_VIEW_NPC'                                               => ((40000 + 4000) + 130),     # updated between npp v8.5.3 and v8.9.5
    'IDM_VIEW_NPC_CCUNIEOL'                                      => ((40000 + 4000) + 131),     # updated between npp v8.5.3 and v8.9.5
    'IDM_VIEW_POSTIT'                                            => ((40000 + 4000) + 9),
    'IDM_VIEW_PROJECT_PANEL_1'                                   => ((40000 + 4000) + 81),
    'IDM_VIEW_PROJECT_PANEL_2'                                   => ((40000 + 4000) + 82),
    'IDM_VIEW_PROJECT_PANEL_3'                                   => ((40000 + 4000) + 83),
    #IDM_VIEW_REDUCETABBAR'                                      => ((40000 + 4000) + 5),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_REFRESHTABAR'                                      => ((40000 + 4000) + 40)       # removed between npp v8.5.3 and v8.9.5,
    'IDM_VIEW_SUMMARY'                                           => ((40000 + 4000) + 49),
    'IDM_VIEW_SWITCHTO_DOCLIST'                                  => ((40000 + 4000) + 109),	# v8.1.3
    'IDM_VIEW_SWITCHTO_FILEBROWSER'                              => ((40000 + 4000) + 107), # v7.9.1
    'IDM_VIEW_SWITCHTO_FUNC_LIST'                                => ((40000 + 4000) + 108), # v7.9.1
    'IDM_VIEW_SWITCHTO_OTHER_VIEW'                               => ((40000 + 4000) + 72),
    'IDM_VIEW_SWITCHTO_PROJECT_PANEL_1'                          => ((40000 + 4000) + 104), # v7.9.1
    'IDM_VIEW_SWITCHTO_PROJECT_PANEL_2'                          => ((40000 + 4000) + 105), # v7.9.1
    'IDM_VIEW_SWITCHTO_PROJECT_PANEL_3'                          => ((40000 + 4000) + 106), # v7.9.1
    #IDM_VIEW_SYMBOLMARGIN'                                      => ((40000 + 4000) + 13),      # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_SYNSCROLLH'                                        => ((40000 + 4000) + 36),
    'IDM_VIEW_SYNSCROLLV'                                        => ((40000 + 4000) + 35),
    'IDM_VIEW_TAB1'                                              => ((40000 + 4000) + 86),
    'IDM_VIEW_TAB2'                                              => ((40000 + 4000) + 87),
    'IDM_VIEW_TAB3'                                              => ((40000 + 4000) + 88),
    'IDM_VIEW_TAB4'                                              => ((40000 + 4000) + 89),
    'IDM_VIEW_TAB5'                                              => ((40000 + 4000) + 90),
    'IDM_VIEW_TAB6'                                              => ((40000 + 4000) + 91),
    'IDM_VIEW_TAB7'                                              => ((40000 + 4000) + 92),
    'IDM_VIEW_TAB8'                                              => ((40000 + 4000) + 93),
    'IDM_VIEW_TAB9'                                              => ((40000 + 4000) + 94),
    'IDM_VIEW_TAB_COLOUR_1'                                      => ((40000 + 4000) + 111),		# v8.4.6
    'IDM_VIEW_TAB_COLOUR_2'                                      => ((40000 + 4000) + 112),		# v8.4.6
    'IDM_VIEW_TAB_COLOUR_3'                                      => ((40000 + 4000) + 113),		# v8.4.6
    'IDM_VIEW_TAB_COLOUR_4'                                      => ((40000 + 4000) + 114),		# v8.4.6
    'IDM_VIEW_TAB_COLOUR_5'                                      => ((40000 + 4000) + 115),		# v8.4.6
    'IDM_VIEW_TAB_COLOUR_NONE'                                   => ((40000 + 4000) + 110),		# v8.4.6
    'IDM_VIEW_TAB_MOVEBACKWARD'                                  => ((40000 + 4000) + 99),
    'IDM_VIEW_TAB_MOVEFORWARD'                                   => ((40000 + 4000) + 98),
    'IDM_VIEW_TAB_NEXT'                                          => ((40000 + 4000) + 95),
    'IDM_VIEW_TAB_PREV'                                          => ((40000 + 4000) + 96),
    'IDM_VIEW_TAB_SPACE'                                         => ((40000 + 4000) + 25),
    'IDM_VIEW_TOGGLE_FOLDALL'                                    => ((40000 + 4000) + 10), # removed v8.4.2
    'IDM_VIEW_TOGGLE_UNFOLDALL'                                  => ((40000 + 4000) + 29), # removed v8.4.2
    #IDM_VIEW_TOOLBAR_ENLARGE'                                   => ((40000 + 4000) + 3),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_TOOLBAR_ENLARGE_SET2'                              => ((40000 + 4000) + 28),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_TOOLBAR_REDUCE'                                    => ((40000 + 4000) + 2),       # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_TOOLBAR_REDUCE_SET2'                               => ((40000 + 4000) + 27),      # removed between npp v8.5.3 and v8.9.5
    #IDM_VIEW_TOOLBAR_STANDARD'                                  => ((40000 + 4000) + 4),       # removed between npp v8.5.3 and v8.9.5
    'IDM_VIEW_UNFOLD'                                            => ((40000 + 4000) + 60),
    'IDM_VIEW_UNFOLDALL'                                         => ((40000 + 4000) + 29),  # v8.4.2
    'IDM_VIEW_UNFOLD_1'                                          => (((40000 + 4000) + 60) + 1),
    'IDM_VIEW_UNFOLD_2'                                          => (((40000 + 4000) + 60) + 2),
    'IDM_VIEW_UNFOLD_3'                                          => (((40000 + 4000) + 60) + 3),
    'IDM_VIEW_UNFOLD_4'                                          => (((40000 + 4000) + 60) + 4),
    'IDM_VIEW_UNFOLD_5'                                          => (((40000 + 4000) + 60) + 5),
    'IDM_VIEW_UNFOLD_6'                                          => (((40000 + 4000) + 60) + 6),
    'IDM_VIEW_UNFOLD_7'                                          => (((40000 + 4000) + 60) + 7),
    'IDM_VIEW_UNFOLD_8'                                          => (((40000 + 4000) + 60) + 8),
    'IDM_VIEW_UNFOLD_CURRENT'                                    => ((40000 + 4000) + 31),
    'IDM_VIEW_WRAP'                                              => ((40000 + 4000) + 22),
    'IDM_VIEW_WRAP_SYMBOL'                                       => ((40000 + 4000) + 41),
    'IDM_VIEW_ZOOMIN'                                            => ((40000 + 4000) + 23),
    'IDM_VIEW_ZOOMOUT'                                           => ((40000 + 4000) + 24),
    'IDM_VIEW_ZOOMRESTORE'                                       => ((40000 + 4000) + 33),
    'IDM_VIEW_ZOOM_SYNC'                                         => ((40000 + 4000) + 27),      # updated between npp v8.5.3 and v8.9.5
    #IDM_WIKIFAQ'                                                => ((40000  + 7000)  + 7),     # removed between npp v8.5.3 and v8.9.5
    'IDM_WINDOW_COPY_NAME'                                       => ((11000 + 59) + 1),     # v8.3.2
    'IDM_WINDOW_COPY_PATH'                                       => ((11000 + 59) + 2),     # v8.3.2
    'IDM_WINDOW_MRU_FIRST'                                       => (11000 + 20),     # v8.3.2
    'IDM_WINDOW_MRU_LIMIT'                                       => (11000 + 59),     # v8.3.2, changed v8.4.3
    'IDM_WINDOW_SORT_FD_ASC'                                     => (11000 + 10),       # updated between npp v8.5.3 and v8.9.5
    'IDM_WINDOW_SORT_FD_DSC'                                     => (11000 + 11),       # updated between npp v8.5.3 and v8.9.5
    'IDM_WINDOW_SORT_FN_ASC'                                     => (11000 + 2),     # v8.3.2
    'IDM_WINDOW_SORT_FN_DSC'                                     => (11000 + 3),     # v8.3.2
    'IDM_WINDOW_SORT_FP_ASC'                                     => (11000 + 4),     # v8.3.2
    'IDM_WINDOW_SORT_FP_DSC'                                     => (11000 + 5),     # v8.3.2
    'IDM_WINDOW_SORT_FS_ASC'                                     => (11000 + 8),     # v8.3.2
    'IDM_WINDOW_SORT_FS_DSC'                                     => (11000 + 9),     # v8.3.2
    'IDM_WINDOW_SORT_FT_ASC'                                     => (11000 + 6),     # v8.3.2
    'IDM_WINDOW_SORT_FT_DSC'                                     => (11000 + 7),     # v8.3.2
    'IDM_WINDOW_WINDOWS'                                         => (11000 + 1),     # v8.3.2
    'IDR_DROPLIST_MENU'                                          => 14000,      # v8.4.3
    'IDR_WINDOWS_MENU'                                           => 11000,     # v8.3.2
);

=head2 OTHER USEFUL ENUMERATIONS

=over

=item DEPRECATED %ENCODINGKEY

Deprecated: The %ENCODINGKEY hash variable no longer exists. Use L</%BUFFERENCODING> for the correct values.

This deprecated hash incorrectly assumed there was a simple numerical offset between the values of
L<notepad-E<gt>getEncoding|Win32::Mechanize::NotepadPlusPlus::Notepad/getEncoding> and the
C<$NPPIDM{IDM_FORMAT_...}> entries in L</%NPPIDM>.

=item %BUFFERENCODING

The numerical values from this hash can be passed to
L<notepad-E<gt>setEncoding|Win32::Mechanize::NotepadPlusPlus::Notepad/setEncoding>
to change the encoding of the buffer; the numerical values returned from
L<notepad-E<gt>getEncoding|Win32::Mechanize::NotepadPlusPlus::Notepad/getEncoding>
can be passed as keys for this hash to convert the encoding number back to a string.

Keys or values ending in _BOM indicate the Unicode Byte Order Mark will be included
as the first bytes in the saved file.

    Key                     | Value         | Description
    ------------------------+---------------+-----------------
    ANSI                    | 0             | 256 codepoints
    UTF8_BOM                | 1             | UTF-8 Encoding, using Byte Order Mark (BOM) at beginning of file
    UCS2_BE_BOM             | 2             | UCS-2 Big Endian, using Byte Order Mark (BOM) at beginning of file
    UCS2_LE_BOM             | 3             | UCS-2 Little Endian, using Byte Order Mark (BOM) at beginning of file
    UTF16_BE_BOM            | 2             | UTF-16 Big Endian, using Byte Order Mark (BOM) at beginning of file
    UTF16_LE_BOM            | 3             | UTF-16 Little Endian, using Byte Order Mark (BOM) at beginning of file
    UTF8                    | 4             | UTF-8 Encoding, _not_ using Byte Order Mark (BOM) at beginning of file
    ------------------------+---------------+-----------------
    COOKIE                  | 4             | Alias for UTF8         (name used in PythonScript BUFFERENCODING enum)
    uni8Bit                 | 0             | Alias for ANSI         (from enum UniMode in source code)
    uniUTF8                 | 1             | Alias for UTF8_BOM     (from enum UniMode in source code)
    uni16BE                 | 2             | Alias for UCS2_BE_BOM/UTF16_BE_BOM  (from enum UniMode in source code)
    uni16LE                 | 3             | Alias for UCS2_LE_BOM/UTF16_LE_BOM  (from enum UniMode in source code)
    uniCookie               | 4             | Alias for UTF8_NO_BOM  (from enum UniMode in source code)
    ------------------------+---------------+-----------------
    0                       | ANSI          | (string)
    1                       | UTF8_BOM      | (string)
    2                       | UCS2_BE_BOM   | (string)
    3                       | UCS2_LE_BOM   | (string)
    4                       | UTF8_NO_BOM   | (string)

=cut

our %BUFFERENCODING = (
    # name => number
    ANSI            => 0,
    UTF8_BOM        => 1,
    UCS2_BE_BOM     => 2,
    UCS2_LE_BOM     => 3,
    UTF16_BE_BOM    => 2,
    UTF16_LE_BOM    => 3,
    UTF8            => 4,
    COOKIE          => 4,   # pythonscript compatible

    # number => text
    0               => 'ANSI',
    1               => 'UTF8_BOM',
    2               => 'UTF16_BE_BOM',
    3               => 'UTF16_LE_BOM',
    4               => 'UTF8',

    # enum UniMode compatible strings
    uni8Bit         => 0,
    uniUTF8         => 1,
    uni16BE         => 2,
    uni16LE         => 3,
    uniCookie       => 4,
);

=item %MACROSTATUS

These are the values returned by
L<notepad-E<gt>getCurrentMacroStatus|Win32::Mechanize::NotepadPlusPlus::Notepad/getCurrentMacroStatus>
This hash provides a two way map: so its keys include both the string names (with the integers as values)
and the integers (with the string names as values).

    Name                    | Integer       | Description
    ------------------------+---------------+-----------------
    Idle                    | 0             | No macro activity (normal/default state)
    RecordInProgress        | 1             | Macro recording has started
    RecordingStopped        | 2             | Macro recording has completed
    PlayingBack             | 3             | Macro is being played back (rare)

The C<PlayingBack> state is not common, because your script has to have called
C<getCurrentMacroStatus> during the brief time that the macro playback is in
progress.  (Unless you have a complicated search/replace and a large document,
it's not likely to see this state.)

=cut

our %MACROSTATUS = (
    # name => number
    Idle                => 0,
    RecordInProgress    => 1,
    RecordingStopped    => 2,
    PlayingBack         => 3,
    # number => name
    0                   => 'Idle',
    1                   => 'RecordInProgress',
    2                   => 'RecordingStopped',
    3                   => 'PlayingBack',
);

=back

=head1 INSTALLATION

Installed as part of L<Win32::Mechanize::NotepadPlusPlus>

=head1 AUTHOR

Peter C. Jones C<E<lt>petercj AT cpan DOT orgE<gt>>

Please report any bugs or feature requests emailing C<E<lt>bug-Win32-Mechanize-NotepadPlusPlus AT rt.cpan.orgE<gt>>
or thru the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Win32-Mechanize-NotepadPlusPlus>,
or thru the repository's interface at L<https://github.com/pryrt/Win32-Mechanize-NotepadPlusPlus/issues>.

=head1 COPYRIGHT

Copyright (C) 2019,2020 Peter C. Jones

=head1 LICENSE

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See L<http://dev.perl.org/licenses/> for more information.

=cut

1;
