spiegel-keyman/developer/src/kmcmpdll/Compiler.rc
SabineSIL 048448a2a4
feat(developer): cross-platform kmx compiler 🚑 (#6980)
* get keymans version



Merge branch 'master' of https://github.com/keymanapp/keyman into refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION

# Conflicts:
#	common/core/desktop/src/kmx/kmx_context.h
#	common/core/desktop/src/kmx/kmx_processor.cpp
#	common/windows/cpp/include/keymanversion.h
#	common/windows/cpp/include/kkmnkbd/Compfile.h
#	common/windows/cpp/include/kmtip_guids.h
#	common/windows/cpp/src/kmtip_guids.cpp
#	core/src/kmx/kmx_conversion.cpp
#	core/src/kmx/kmx_conversion.h
#	core/src/kmx/kmx_file.cpp
#	core/src/kmx/kmx_processevent.cpp
#	core/src/kmx/kmx_processor.hpp
#	core/src/kmx/kmx_xstring.cpp
#	developer/js/.gitignore
#	developer/js/package-lock.json
#	developer/js/tests/tsconfig.json
#	developer/src/kmcmpdll/CasedKeys.cpp
#	developer/src/kmcmpdll/CheckFilenameConsistency.cpp
#	developer/src/kmcmpdll/CheckFilenameConsistency.h
#	developer/src/kmcmpdll/CheckForDuplicates.cpp
#	developer/src/kmcmpdll/CheckForDuplicates.h
#	developer/src/kmcmpdll/CheckNCapsConsistency.cpp
#	developer/src/kmcmpdll/CheckNCapsConsistency.h
#	developer/src/kmcmpdll/Compiler.cpp
#	developer/src/kmcmpdll/DeprecationChecks.cpp
#	developer/src/kmcmpdll/NamedCodeConstants.cpp
#	developer/src/kmcmpdll/UnreachableRules.cpp
#	developer/src/kmcmpdll/UnreachableRules.h
#	developer/src/kmcmpdll/compfile.h
#	developer/src/kmcmpdll/kcframe/kcframe.cpp
#	developer/src/kmcmpdll/kcframe/kcframe.vcxproj
#	developer/src/kmcmpdll/kcframe/kcframe.vcxproj.filters
#	developer/src/kmcmpdll/kmcmpdll.vcxproj
#	developer/src/kmcmpdll/kmcmpdll.vcxproj.filters
#	developer/src/kmcmpdll/version.rc
#	developer/src/kmcmpdll/versioning.cpp
#	developer/src/kmlmc/bundle.sh
#	developer/src/kmlmc/tests/test-join-word-breaker.ts
#	developer/src/kmlmc/tests/test-override-script-defaults.ts
#	developer/src/server/tsconfig.json
#	windows/src/developer/kmcmpdll/Makefile
#	windows/src/developer/kmcmpdll/vkeys.h
#	windows/src/engine/keyman32/keymanengine.h
#	windows/src/global/inc/Vkeys.h
#	windows/src/global/inc/rc4.h
#	windows/src/global/vc/rc4.cpp

* changes in meson + include-paths of several files

* chore: remove common/core

* chore: remove unnecessary files

* chore: move headers and refs

* refactor(developer): fixup path to tests

* refactor(developer): fixup path to tests
tidied up +removed unnecessary files
checked contents of files+included a few new functions needed for myVersion
changed datatypes in CheckForDuplicates
tidy up more paths
CheckFileConsistency: not able to fully adapt for use of char16_t on non windows p.
	-> used char16_t + commented out some AddWarning().

* sorted out some #includes
renamed some functions to reduce ambiguity

* fix(developer): solved linker errors

* chore(developer): remove some comments

* chore(developer): introduced KMX_UCHAR

* chore(developer): restored whitespace, comments

* chore(developer): tidied up vkeys.H / .cpp

* chore(developer): remove keyboardprocessor...

* chore(common): refactor shared types into km_types.h

* chore(core): remove duplicate types

* chore(core): move kmx_file.h to common

* chore(developper): removed typedefs of kmcompcx.h

* chore(developer): removed kmcompx/include/kmx_file.h

* chore(developer): chanched include of pch.h

* chore(developer): removed files from kmcompx/include/

* chore(developer): removed commented sections ( ** old **) if files

* chore(developer): removed doubled/overwritten functions

* chore(developer): removed doubled/overwritten functions

* chore(developer): changed #includes ".." -> <..>

* chore(developer): changed #includes ".." -> <..>

* chore(developer): enable tests for keyboards repo for kmcompx

* chore(developer): new functions e.g. string_from_wstring...

* chore(developer): changed printf->u16sprintf

* chore(developer): fopen

* chore(developer): fixed errors on running kmcompxtest

* chore(developer): changef u16fmt

* chore(developer): fixup u16ncat

* chore(developer): added return Msgs for different types of errors while compiling

* chore(developer): tests using RTL run Ok ( changed RTu->RTL)

* chore(developer): replaced u16ncmp with u16nicmp at most places

* chore(developer): changed Version number for tests 16.046 to 15.0265

* chore(developer): mostly whitespace changes

* chore(developer): tidied up code (not finished yet)

* chore(developer): removed #pragma once from wrong places, edited #includes

* chore(developer): removed #pragma once from wrong places, edited #includes

* chore(developer): CheckFileNameConsistency changed to take KMX_WCHART const* (= wchar_t* const); used in compiler.cpp now

* chore(developer): excluded some tests from kmcompxtest (use get_test_source_exclude_some_kmn.bat now)

* chore(developer): Win-functions in FileNameConsistency

* chore(developer): Win-functions in FileNameConsistency

* chore(developer): CheckFNConsuistency: called u16printf with f´different par.

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): tiedied up code (compiler.cpp)

* chore(developer): tiedied up code

* chore(developer): tidied up code

* chore(developer): removed all commentaries _S2

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): removed several Windows-specific functions

* chore(developer): removed unused datatype typedefs

* chore(developer): new GetCompilerErrorString() used in AddCompileMessage()

* chore(developer): new GetCompilerErrorString() used in AddCompileMessage()

* chore(developer): removed CWARN/CHINT out of CompMsg

* chore(developer): adapted kmcompxtest to test kmn-files that have errors included

* chore(developer): changed gitignore

* chore(developer): changed gitignore

* chore(developer): changed Version Number fot Tests 15.0.265.0 -> 15.0.270.0

* chore(developer): added tests for kmcompx

* chore(developer): move tests (for ErrorMessages) to common/test/keyboards

* chore(developer): move CERR-tests into test/keyboards/invalid

* chore(developer): change mostly whitespace changes

* chore(developer): change mostly whitespace changes

* chore(developer): delete files of keyboards/kmcompx_tests

* chore(developer): include check for correct Filename + rename var + change whitespace changes

* chore(developer): revert changes in AddCompileMessage, tidy up CreateTempFile

* chore(developer): remove python from meson.build

* chore(developer): change ErrExtra, change CompileMsg, change _finddata in FileExists

* chore(developer): check for '_' after Errornumber in Filename

* chore(developer): re-include AddCompilerVersionStore in Compiler.cpp

* chore(developer): add Message CERR_InvalidCharacter to UTF16TempFromUTF8() ; change #include <> -> ""

* chore(developer): add some more keyboardtests

* chore(developer): add some more keyboardtests

* chore(developer): change remaining old datatype-names to new names ( e.g. char -> KMX_CHAR )

* chore(developer): edit + add CERR_tests

* chore(developer): edit + add CERR_tests

* chore(developer): use char16_t in CheckFileNameConsistency

* chore(developer): comments: converting functions in kmx_u16

* chore: reorganize

* chore: commit kmcompx-files

* chore: use ifdef for vkeys

* chore: copy files back

* chore: more cleanup

* chore: meson build for kmcmplib

* chore: tweak unit test, error messages, and paths

* chore(developer): make kmcmplib a static library

* chore(developer): start kmcmpdll link to kmcmplib

* chore(developer): add build.sh for kmcmplib

* chore(developer): link kmcmpdll to kmcmplib

* chore(common): avoid building 'invalid' shared keyboards

* chore(developer): include BEGIN_LINE (repeated Begin)

* chore(developer): add more CERR_tests and move some to other folder, edit readme

* chore(developer): addCompilerMsg for RepeatedBegin

* chore(developer):repeatedBEgin plus rename functions to prevent same names in kmcmpdll and kmcmplib

* chore(developer): add flag flag_use_kmcompx as switch to use old code (kmcmpdll) or new code kmcmplib

* chore(developer): introduce namespace kmcmp instead of different filenames

* chore(developer): more changes for using namespaces

* chore(developer): solve merge conflicts in namespaces

* chore(developer): use namespaces in kmcmplib (except for in dllexport-functions)

* chore(developer): remove some unnecessary CERR_ tests

* chore(developer): remove CERR_CallIsProfessionalFeature, CERR_IncludeCodesIsProfessionalFeature, CERR_MnemonicLayoutIsProfessionalFeature

* chore(developer): note about func.call_js; change all "VESION x.y " to "VESION x.y or higher" ; rename flag for kmcompx to flag_use_new_kmcomp

* chore(developer): use PKMX_DWORD/PKMX_WCHAR   instead of LPKMX_DWORD/LPKMX_WCHAR; use PKMX_STR instead of char* in CompilerMessageProc

* chore(developer): remove kmx-file; NamedCodeConstants: rename variables, set const variables for buf sizes, brackets in for-loops

* chore(developer): change include paths ../

* chore(developer): get rid of reopened namespaces of kmcmp

* chore(developer): restored kmcompxtest

* chore(developer): change #include paths ../ ; excange km_kbp_cp with KMX_WCHAR; change some variable names

* chore(developer): use environment var KEYMAN_ROOT in path for tests; remove try-catch from json-validation.cpp

* chore(developer): use environment var KEYMAN_ROOT in path for tests; remove try-catch from json-validation.cpp

* chore(developer): revert change in NamedCodeConstants

* chore(developer): restored kmcompxtest, adapted readme

* chore(developer): use res-fils/version.rc for kmcmplib

* chore(developer): rename some functions/variables

* chore(developer): typos, comments, add function u16rchr()

* chore(developer): typos, comments, add function u16rchr()

* chore(developer): rename Functions, version rc-files

* chore(developer): rename Functions, version rc-files, set flag_use_new_kmcomp to use (old) kmcmpdll

* chore(developer): add BeginLine in kmcmpdll/Compiler.cpp; fread() in kmcmp_CompileKeyboardFileToBuffer

* chore(developer): set flag_use_new_kmcomp to only use kmcmpdll

* chore(developer): set flag_use_new_kmcomp to only use kmcmpdll...and back to kmcmplib

* (chore(developer): set flag_use_new_kmcomp to only use kmcmpdll...and back

* (chore(developer): changes in NamedCodeConstants::reindex() to run hieroglyphic.kmn properly

* chore(developer): changes in UnrechableRules::VerifyUnreachableRules() to run test_6440_unreachable_code..kmn

* chore(developer): remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta

* chore(developer): remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta, CWARN_ OK

* chore(developer): after stash:remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta, CWARN_ OK

* chore(developer): replace some #include <> with "" ; rename ErrExtra -> ErrExtraW

* chore(developer): replace some #include <> with "" ; rename ErrExtra -> ErrExtraW

* chore(developer): new converting function convert_pchar16T_To_pwcharT in kmx_u16

* chore(developer): CheckFilenameConsistency added fclose()

* chore(developer): --

* chore(developer): removed printf (---> started in... / °°-> changed to...)

* chore(developer): AddDeprecatedCode to get CWARN when in kmcomp.exe -s-w is set

* chore(developer): change MakeHashKeyFromFileKey16() to get correct behaviour of CHINT

* chore(developer): change MakeHashKeyFromFileKey16() to get correct behaviour of CHINT

* chore(developer): move converting function to kmx_u16

* chore(developer): add more CERR_ tests

* chore(developer): Not ready yet: changes in CheckFilenameConsistency to use on non-windows

* chore(developer): Not ready yet: changes in CheckFilenameConsistency to use on non-windows

* chore(developer): copied contents of 3 files of commit fcfc6c698a to here to achieve state of fcfc6c698a

* chore(developer): copied contents of 3 files of commit fcfc6c698a to here to achieve state of fcfc6c698a

* chore(developer): move/rename converting functions

* chore(developer) : update .gitignore, remove converting function

* chore(developer) : update gitignore; sort code in CheckFilenameConsistency::CheckFilenameConsistency()

* chore(developer) : change Version number 15.0.270 -> 17.0.51

* chore(developer): change #includes, path in meson.build

* chore(developer): new function Open_File() to open files on windows and non-windows platforms

* chore(developer): create Function to replace fopen/_wfsopen

* chore(developer): exclude kmx, kvk from git

* chore(developer): exclude kmx, kvk from git

* chore(developer): change #includes to include from kmcmplib

* chore(developer): remove stray fopen

* chore(developer): include Open_File() (as comment for now)

* chore(developer): include Open_File() (as comment for now)

* chore(developer): remove path to kmcmpdll in include_directories

* chore(developer): use functin Open_File()

* chore(developer): remove #ifdef for '\\' and '/' in both IsRelativePath; remove Function Open_File again

* chore(developer): new fun  u16rchr_LinWin, strrchr_LinWin to exchange #ifndef for '\\' and '/'

* chore(developer): implement u16rchr_LinWin and strrchr_LinWin

* chore(developer): implement Open_File()

* chore(developer): new MakeHashKeyFromFileKey, remove comments for Open_File, & *LinWin-functions, delete 1 converting function

* chore(developer): tidy up comments

---------

Co-authored-by: Marc Durdin <marc@durdin.net>
2023-03-01 20:00:04 +11:00

252 lines
13 KiB
Text

#include <windows.h>
#include "comperr.h"
#include "version.rc"
/////////////////////////////////////////////////////////////////////////////
// English (Australia) resources
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
CERR_InvalidLayoutLine "Invalid 'layout' command"
CERR_NoVersionLine "No version line found for file"
CERR_InvalidGroupLine "Invalid 'group' command"
CERR_InvalidStoreLine "Invalid 'store' command"
CERR_InvalidCodeInKeyPartOfRule
"Invalid command or code found in key part of rule"
CERR_InvalidDeadkey "Invalid 'deadkey' or 'dk' command"
CERR_InvalidValue "Invalid value in extended string"
CERR_ZeroLengthString "A string of zero characters was found"
CERR_TooManyIndexToKeyRefs
"Too many index commands refering to key string"
CERR_UnterminatedString "Unterminated string in line"
CERR_StringInVirtualKeySection
"extended string illegal in virtual key section"
CERR_AnyInVirtualKeySection
"'any' command is illegal in virtual key section"
CERR_InvalidAny "Invalid 'any' command"
CERR_StoreDoesNotExist "Store referenced does not exist"
CERR_BeepInVirtualKeySection
"'beep' command is illegal in virtual key section"
CERR_IndexInVirtualKeySection
"'index' command is illegal in virtual key section"
END
STRINGTABLE
BEGIN
CERR_BadCallParams "CompileKeyboardFile was called with bad parameters"
CERR_InfileNotExist "Cannot find the input file"
CERR_CannotCreateOutfile "Cannot open output file for writing"
CERR_UnableToWriteFully "Unable to write the file completely"
CERR_CannotReadInfile "Cannot read the input file - possible disk error"
CERR_SomewhereIGotItWrong "Internal error: contact Tavultesoft"
END
STRINGTABLE
BEGIN
CERR_BufferOverflow "The compiler memory buffer overflowed"
CERR_Break "Compiler interrupted by user"
END
STRINGTABLE
BEGIN
CERR_CannotAllocateMemory "Out of memory"
END
STRINGTABLE
BEGIN
CERR_InvalidBitmapLine "Invalid 'bitmaps' command"
CERR_CannotReadBitmapFile "Cannot open the bitmap file for reading"
CERR_IndexDoesNotPointToAny
"An index() in the output does not have a corresponding any() statement"
CERR_ReservedCharacter "A reserved character was found"
CERR_InvalidCharacter "A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)"
CERR_InvalidCall "The 'call' command is invalid"
CERR_CallInVirtualKeySection
"'call' command is illegal in virtual key section"
CERR_CodeInvalidInKeyStore
"The command is invalid inside a store that is used in a key part of the rule"
CERR_CannotLoadIncludeFile
"Cannot load the included file: it is either invalid or does not exist"
CERR_60FeatureOnly_EthnologueCode
"EthnologueCode system store requires VERSION 6.0"
CERR_60FeatureOnly_MnemonicLayout
"MnemonicLayout functionality requires VERSION 6.0"
CERR_60FeatureOnly_OldCharPosMatching
"OldCharPosMatching system store requires VERSION 6.0"
CERR_60FeatureOnly_NamedCodes
"Named character constants requires VERSION 6.0"
CERR_60FeatureOnly_Contextn "Context(n) requires VERSION 6.0"
CERR_501FeatureOnly_Call "Call() requires VERSION 5.01"
CERR_InvalidNamedCode "Invalid named code constant"
END
STRINGTABLE
BEGIN
CERR_InvalidSystemStore "Invalid system store name found"
CERR_60FeatureOnly_VirtualCharKey
"Virtual character keys require VERSION 6.0"
CERR_VersionAlreadyIncluded
"Only one VERSION or store(&version) line allowed in a source file."
CERR_70FeatureOnly "This feature requires store(&version) '7.0'"
CERR_80FeatureOnly "This feature requires store(&version) '8.0'"
CERR_InvalidInVirtualKeySection
"This statement is not valid in a virtual key section"
CERR_InvalidIf "The if() statement is not valid"
CERR_InvalidReset "The reset() statement is not valid"
CERR_InvalidSet "The set() statement is not valid"
CERR_InvalidSave "The save() statement is not valid"
CERR_InvalidEthnologueCode "Invalid &ethnologuecode format"
CERR_90FeatureOnly_IfSystemStores
"if(&store) requires store(&version) '9.0'"
CERR_IfSystemStore_NotFound "System store in if() not found"
CERR_90FeatureOnly_SetSystemStores "set(&store) requires store(&version) '9.0'"
CERR_SetSystemStore_NotFound "System store in set() not found"
CERR_90FeatureOnlyVirtualKeyDictionary "Custom virtual key names require store(&version) '9.0'"
END
STRINGTABLE
BEGIN
CERR_InvalidIndex "Invalid 'index' command"
CERR_OutsInVirtualKeySection
"'outs' command is illegal in virtual key section"
CERR_InvalidOuts "Invalid 'outs' command"
CERR_ContextInVirtualKeySection
"'context' command is illegal in virtual key section"
CERR_InvalidUse "Invalid 'use' command"
CERR_GroupDoesNotExist "Group does not exist"
CERR_VirtualKeyNotAllowedHere "Virtual key is not allowed here"
CERR_InvalidSwitch "Invalid 'switch' command"
CERR_NoTokensFound "No tokens found in line"
CERR_InvalidLineContinuation "Invalid line continuation"
CERR_LineTooLong "Line too long"
CERR_InvalidCopyright "Invalid 'copyright' command"
CERR_CodeInvalidInThisSection
"This line is invalid in this section of the file"
CERR_InvalidMessage "Invalid 'message' command"
CERR_InvalidLanguageName "Invalid 'languagename' command"
END
STRINGTABLE
BEGIN
CWARN_TooManyWarnings "Too many warnings or errors"
CWARN_OldVersion "The keyboard file is an old version"
CWARN_BitmapNotUsed "The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'."
CWARN_CustomLanguagesNotSupported
"Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead."
CWARN_KeyBadLength "There are too many characters in the keystroke part of the rule."
CWARN_IndexStoreShort "The store referenced in index() is shorter than the store referenced in any()"
CWARN_UnicodeInANSIGroup "A Unicode character was found in an ANSI group"
CWARN_ANSIInUnicodeGroup "An ANSI character was found in a Unicode group"
CWARN_UnicodeSurrogateUsed
"A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF"
CWARN_ReservedCharacter "A Unicode character was found that should not be used"
CWARN_Info "Information"
CWARN_VirtualKeyWithMnemonicLayout
"Virtual key used instead of virtual character key with a mnemonic layout"
CWARN_VirtualCharKeyWithPositionalLayout
"Virtual character key used with a positional layout instead of mnemonic layout"
CWARN_StoreAlreadyUsedAsOptionOrCall
"Store already used as an option or in a call statement and should not be used as a normal store"
CWARN_StoreAlreadyUsedAsStoreOrCall
"Store already used as a normal store or in a call statement and should not be used as an option"
CWARN_StoreAlreadyUsedAsStoreOrOption
"Store already used as a normal store or as an option and should not be used in a call statement"
END
STRINGTABLE
BEGIN
CERR_None "(no error)"
CERR_EndOfFile "(no error - reserved code)"
END
STRINGTABLE
BEGIN
CERR_InvalidToken "Invalid token found"
CERR_InvalidBegin "Invalid 'begin' command"
CERR_InvalidName "Invalid 'name' command"
CERR_InvalidVersion "Invalid 'version' command"
CERR_InvalidLanguageLine "Invalid 'language' command"
CERR_LayoutButNoLanguage "Layout command found but no language command"
END
STRINGTABLE
BEGIN
CWARN_PunctuationInEthnologueCode
"Punctuation should not be used to separate Ethnologue codes; instead use spaces"
END
STRINGTABLE
BEGIN
CERR_CannotCreateTempfile "Cannot create temp file"
END
STRINGTABLE
BEGIN
CERR_90FeatureOnlyLayoutFile "Touch layout file reference requires store(&version) '9.0'"
CERR_90FeatureOnlyKeyboardVersion "KeyboardVersion system store requires store(&version) '9.0'"
CERR_KeyboardVersionFormatInvalid "KeyboardVersion format is invalid, expecting dot-separated integers"
CERR_ContextExHasInvalidOffset "context() statement has offset out of range"
CERR_90FeatureOnlyEmbedCSS "Embedding CSS requires store(&version) '9.0'"
CERR_90FeatureOnlyTargets "&TARGETS system store requires store(&version) '9.0'"
CERR_ContextAndIndexInvalidInMatchNomatch "context and index statements cannot be used in a match or nomatch statement"
CERR_140FeatureOnlyContextAndNotAnyWeb "For web and touch platforms, context() statement referring to notany() requires store(&version) '14.0'"
CWARN_PlatformNotInTargets "The specified platform is not a target platform"
END
STRINGTABLE
BEGIN
CWARN_HeaderStatementIsDeprecated "Header statements are deprecated; use instead the equivalent system store"
CWARN_UseNotLastStatementInRule "A rule with use() statements in the output should not have other content following the use() statements"
CWARN_KVKFileIsInSourceFormat ".kvk file should be binary but is an XML file"
END
STRINGTABLE
BEGIN
CWARN_DontMixChiralAndNonChiralModifiers "Don't mix the use of left/right modifiers with non-left/right modifiers in the same platform"
CWARN_MixingLeftAndRightModifiers "Left and right modifiers should not both be used in the same rule"
END
STRINGTABLE
BEGIN
CWARN_LanguageHeadersDeprecatedInKeyman10 "This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file"
CWARN_HotkeyHasInvalidModifier "Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT"
CHINT_NonUnicodeFile "Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8"
CWARN_NulNotFirstStatementInContext "nul must be the first statement in the context"
CWARN_IfShouldBeAtStartOfContext "if, platform and baselayout should be at start of context (after nul, if present)"
CWARN_KeyShouldIncludeNCaps "Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches"
CHINT_UnreachableRule "This rule will never be matched as another rule takes precedence"
CHINT_FilenameHasDifferingCase "Casing differences may fail on some platforms:"
CWARN_MissingFile "The referenced file could not be found"
END
STRINGTABLE
BEGIN
CERR_ExpansionMustFollowCharacterOrVKey "An expansion must follow a character or a virtual key"
CERR_VKeyExpansionMustBeFollowedByVKey "A virtual key expansion must be terminated by a virtual key"
CERR_CharacterExpansionMustBeFollowedByCharacter "A character expansion must be terminated by a character key"
CERR_VKeyExpansionMustUseConsistentShift "A virtual key expansion must use the same shift state for both terminators"
CERR_ExpansionMustBePositive "An expansion must have positive difference (i.e. A-Z, not Z-A)"
END
STRINGTABLE
BEGIN
CERR_CasedKeysMustContainOnlyVirtualKeys "The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard"
CERR_CasedKeysMustNotIncludeShiftStates "The &CasedKeys system store must not include shift states"
CERR_CasedKeysNotSupportedWithMnemonicLayout "The &CasedKeys system store is not supported with mnemonic layouts"
CERR_CannotUseReadWriteGroupFromReadonlyGroup "Group used from a readonly group must also be readonly"
CERR_StatementNotPermittedInReadonlyGroup "Statement is not permitted in output of readonly group"
CERR_OutputInReadonlyGroup "Output is not permitted in a readonly group"
CERR_NewContextGroupMustBeReadonly "Group used in begin newContext must be readonly"
CERR_PostKeystrokeGroupMustBeReadonly "Group used in begin postKeystroke must be readonly"
CERR_DuplicateGroup "A group with this name has already been defined."
CERR_DuplicateStore "A store with this name has already been defined."
CERR_RepeatedBegin "This begin statement has already been defined."
END