patterns: Updated pattern language
This commit is contained in:
parent
c30f8fa459
commit
a51e4afb05
2
lib/external/pattern_language
vendored
2
lib/external/pattern_language
vendored
@ -1 +1 @@
|
|||||||
Subproject commit f73f87c9ccb43c19ef4b02dffb752b890da7afed
|
Subproject commit 69a3d4c05eb6bb1efe7fd926fc99f2982e22a59a
|
@ -31,7 +31,7 @@ namespace hex::plugin::builtin {
|
|||||||
{
|
{
|
||||||
/* demangle(mangled_string) */
|
/* demangle(mangled_string) */
|
||||||
ContentRegistry::PatternLanguage::addFunction(nsHexDec, "demangle", FunctionParameterCount::exactly(1), [](Evaluator *, auto params) -> std::optional<Token::Literal> {
|
ContentRegistry::PatternLanguage::addFunction(nsHexDec, "demangle", FunctionParameterCount::exactly(1), [](Evaluator *, auto params) -> std::optional<Token::Literal> {
|
||||||
const auto mangledString = Token::literalToString(params[0], false);
|
const auto mangledString = params[0].toString(false);
|
||||||
|
|
||||||
return llvm::demangle(mangledString);
|
return llvm::demangle(mangledString);
|
||||||
});
|
});
|
||||||
@ -41,7 +41,7 @@ namespace hex::plugin::builtin {
|
|||||||
{
|
{
|
||||||
/* get(url) */
|
/* get(url) */
|
||||||
ContentRegistry::PatternLanguage::addDangerousFunction(nsHexHttp, "get", FunctionParameterCount::exactly(1), [](Evaluator *, auto params) -> std::optional<Token::Literal> {
|
ContentRegistry::PatternLanguage::addDangerousFunction(nsHexHttp, "get", FunctionParameterCount::exactly(1), [](Evaluator *, auto params) -> std::optional<Token::Literal> {
|
||||||
const auto url = Token::literalToString(params[0], false);
|
const auto url = params[0].toString(false);
|
||||||
|
|
||||||
hex::Net net;
|
hex::Net net;
|
||||||
return net.getString(url).get().body;
|
return net.getString(url).get().body;
|
||||||
|
@ -27,7 +27,7 @@ namespace hex::plugin::builtin {
|
|||||||
|
|
||||||
ImPlot::PlotLineG("##line", [](void *data, int idx) -> ImPlotPoint {
|
ImPlot::PlotLineG("##line", [](void *data, int idx) -> ImPlotPoint {
|
||||||
auto &iteratable = *static_cast<pl::ptrn::Iteratable *>(data);
|
auto &iteratable = *static_cast<pl::ptrn::Iteratable *>(data);
|
||||||
return { static_cast<double>(idx), pl::core::Token::literalToFloatingPoint(iteratable.getEntry(idx)->getValue()) };
|
return { static_cast<double>(idx), iteratable.getEntry(idx)->getValue().toFloatingPoint() };
|
||||||
}, &iteratable, iteratable.getEntryCount());
|
}, &iteratable, iteratable.getEntryCount());
|
||||||
|
|
||||||
ImPlot::EndPlot();
|
ImPlot::EndPlot();
|
||||||
@ -50,8 +50,8 @@ namespace hex::plugin::builtin {
|
|||||||
void drawBitmapVisualizer(pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &, bool shouldReset, const std::vector<pl::core::Token::Literal> &arguments) {
|
void drawBitmapVisualizer(pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &, bool shouldReset, const std::vector<pl::core::Token::Literal> &arguments) {
|
||||||
static ImGui::Texture texture;
|
static ImGui::Texture texture;
|
||||||
if (shouldReset) {
|
if (shouldReset) {
|
||||||
auto width = pl::core::Token::literalToUnsigned(arguments[1]);
|
auto width = arguments[1].toUnsigned();
|
||||||
auto height = pl::core::Token::literalToUnsigned(arguments[2]);
|
auto height = arguments[2].toUnsigned();
|
||||||
|
|
||||||
std::vector<u8> data;
|
std::vector<u8> data;
|
||||||
data.resize(width * height * 4);
|
data.resize(width * height * 4);
|
||||||
@ -73,9 +73,9 @@ namespace hex::plugin::builtin {
|
|||||||
|
|
||||||
static std::vector<Disassembly> disassembly;
|
static std::vector<Disassembly> disassembly;
|
||||||
if (shouldReset) {
|
if (shouldReset) {
|
||||||
auto baseAddress = pl::core::Token::literalToUnsigned(arguments[1]);
|
auto baseAddress = arguments[1].toUnsigned();
|
||||||
auto architecture = pl::core::Token::literalToUnsigned(arguments[2]);
|
auto architecture = arguments[2].toUnsigned();
|
||||||
auto mode = pl::core::Token::literalToUnsigned(arguments[3]);
|
auto mode = arguments[3].toUnsigned();
|
||||||
|
|
||||||
disassembly.clear();
|
disassembly.clear();
|
||||||
|
|
||||||
@ -136,9 +136,9 @@ namespace hex::plugin::builtin {
|
|||||||
|
|
||||||
T value;
|
T value;
|
||||||
if (std::floating_point<T>)
|
if (std::floating_point<T>)
|
||||||
value = pl::core::Token::literalToFloatingPoint(child->getValue());
|
value = child->getValue().toFloatingPoint();
|
||||||
else
|
else
|
||||||
value = pl::core::Token::literalToUnsigned(child->getValue());
|
value = child->getValue().toUnsigned();
|
||||||
|
|
||||||
result.push_back(value);
|
result.push_back(value);
|
||||||
}
|
}
|
||||||
@ -152,8 +152,8 @@ namespace hex::plugin::builtin {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void draw3DVisualizer(pl::ptrn::Pattern &, pl::ptrn::Iteratable &, bool shouldReset, const std::vector<pl::core::Token::Literal> &arguments) {
|
void draw3DVisualizer(pl::ptrn::Pattern &, pl::ptrn::Iteratable &, bool shouldReset, const std::vector<pl::core::Token::Literal> &arguments) {
|
||||||
auto verticesPattern = pl::core::Token::literalToPattern(arguments[1]);
|
auto verticesPattern = arguments[1].toPattern();
|
||||||
auto indicesPattern = pl::core::Token::literalToPattern(arguments[2]);
|
auto indicesPattern = arguments[2].toPattern();
|
||||||
|
|
||||||
static ImGui::Texture texture;
|
static ImGui::Texture texture;
|
||||||
static float scaling = 0.5F;
|
static float scaling = 0.5F;
|
||||||
|
@ -378,7 +378,7 @@ namespace hex::plugin::builtin {
|
|||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
if (variable.outVariable) {
|
if (variable.outVariable) {
|
||||||
ImGui::TextUnformatted(pl::core::Token::literalToString(variable.value, true).c_str());
|
ImGui::TextUnformatted(variable.value.toString(true).c_str());
|
||||||
} else if (variable.inVariable) {
|
} else if (variable.inVariable) {
|
||||||
const std::string label { "##" + name };
|
const std::string label { "##" + name };
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ namespace hex::plugin::builtin::ui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void drawVisualizer(const std::vector<pl::core::Token::Literal> &arguments, pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &iteratable, bool reset) {
|
void drawVisualizer(const std::vector<pl::core::Token::Literal> &arguments, pl::ptrn::Pattern &pattern, pl::ptrn::Iteratable &iteratable, bool reset) {
|
||||||
auto visualizerName = pl::core::Token::literalToString(arguments.front(), true);
|
auto visualizerName = arguments.front().toString(true);
|
||||||
|
|
||||||
const auto &visualizers = ContentRegistry::PatternLanguage::impl::getVisualizers();
|
const auto &visualizers = ContentRegistry::PatternLanguage::impl::getVisualizers();
|
||||||
|
|
||||||
@ -360,10 +360,10 @@ namespace hex::plugin::builtin::ui {
|
|||||||
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
|
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
|
||||||
|
|
||||||
if (ImGui::BeginCombo("##Enum", pattern.getFormattedValue().c_str())) {
|
if (ImGui::BeginCombo("##Enum", pattern.getFormattedValue().c_str())) {
|
||||||
auto currValue = pl::core::Token::literalToUnsigned(pattern.getValue());
|
auto currValue = pattern.getValue().toUnsigned();
|
||||||
for (auto &value : pattern.getEnumValues()) {
|
for (auto &value : pattern.getEnumValues()) {
|
||||||
auto min = pl::core::Token::literalToUnsigned(value.min);
|
auto min = value.min.toUnsigned();
|
||||||
auto max = pl::core::Token::literalToUnsigned(value.max);
|
auto max = value.max.toUnsigned();
|
||||||
|
|
||||||
bool isSelected = min <= currValue && max >= currValue;
|
bool isSelected = min <= currValue && max >= currValue;
|
||||||
if (ImGui::Selectable(fmt::format("{}::{} (0x{:0{}X})", pattern.getTypeName(), value.name, min, pattern.getSize() * 2).c_str(), isSelected)) {
|
if (ImGui::Selectable(fmt::format("{}::{} (0x{:0{}X})", pattern.getTypeName(), value.name, min, pattern.getSize() * 2).c_str(), isSelected)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user