spiegel-keyman/windows/src/developer/kmcmpdll/Compiler.rc
Marc Durdin 0c782e22d3 fix(developer): Compiler check for if and nul at start of context
Fixes #4280.

Adds checks to verify that `if()`, `platform()`, `baselayout()` and
`nul` are at the start of the context in the appropriate order.

Adds unit tests to validate these checks.

These are conditions that have been present in earlier versions of
Keyman but not enforced until now. Keyboards that do not meet these
conditions would not work correctly in all circumstances and should be
updated to meet the requirements.

An alternative would have been to reorder the context string but that is
much more complex as manipulation would also have been required for the
output string. The enforced order is logical and reduces confusion in
any case.

Updated documentation coming along shortly.
2021-02-03 15:28:53 +11:00

230 lines
11 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_CallIsProfessionalFeature
"Call() is only available in Keyman Developer Professional"
CERR_IncludeCodesIsProfessionalFeature
"&IncludeCodes is only available in Keyman Developer Professional"
CERR_MnemonicLayoutIsProfessionalFeature
"&MnemonicLayout is only available in Keyman Developer Professional"
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"
CINFO_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])"
END