spiegel-keyman/developer/kmcompx/include/UnreachableRules.cpp
Sabine 3e58fa76b6 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
2022-07-12 10:43:20 +02:00

58 lines
1.7 KiB
C++

# pragma once
#include "../../../../developer/kmcompx/include/pch.h" // _S2 #include "pch"
#include "../../../../developer/kmcompx/include/Compfile.h" // _S2 #include <Compfile.h>
#include "../../../../developer/kmcompx/include/compiler.h" // _S2 #include <compiler.h>
#include "../../../../developer/kmcompx/include/comperr.h" // _S2 #include <comperr.h>
#include "../../../../developer/kmcompx/include/kmcmpdll.h" // _S2 #include <kmcmpdll.h>
/*
#include "pch.h"
#include <compfile.h>
#include <compiler.h>
#include <comperr.h>
#include <kmcmpdll.h>
#include <vkeys.h>
*/
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <sstream>
#include "UnreachableRules.h"
std::wstring MakeHashKeyFromFileKey(PFILE_KEY kp) {
std::wstringstream key;
key << kp->Key << "," << kp->ShiftFlags << ",";
if (kp->dpContext) key << kp->dpContext;
return key.str();
}
KMX_DWORD VerifyUnreachableRules(PFILE_GROUP gp) {
PFILE_KEY kp = gp->dpKeyArray;
KMX_DWORD i;
std::unordered_map<std::wstring, FILE_KEY> map;
std::unordered_set<int> reportedLines;
for (i = 0; i < gp->cxKeyArray; i++, kp++) {
std::wstring key = MakeHashKeyFromFileKey(kp);
if (map.count(key) > 0) {
FILE_KEY const & k1 = map.at(key);
if (kp->Line != k1.Line && reportedLines.count(kp->Line) == 0) {
reportedLines.insert(kp->Line);
currentLine = kp->Line;
// _S2 needs to be added
//sprintf(ErrExtra, " character offset:%d", ErrChr); // _S2 wsprintf(ErrExtra, "Overridden by rule on line %d", k1.Line);
AddWarning(CHINT_UnreachableRule);
}
}
else {
map.insert({ key, *kp });
}
}
return CERR_None;
}