git: b72dc62032a1 - main - editors/imhex: Update to 1.27.1

From: MANTANI Nobutaka <nobutaka_at_FreeBSD.org>
Date: Wed, 15 Feb 2023 14:27:18 UTC
The branch main has been updated by nobutaka:

URL: https://cgit.FreeBSD.org/ports/commit/?id=b72dc62032a1313942c465d602ee4041daaa5467

commit b72dc62032a1313942c465d602ee4041daaa5467
Author:     MANTANI Nobutaka <nobutaka@FreeBSD.org>
AuthorDate: 2023-02-15 14:25:12 +0000
Commit:     MANTANI Nobutaka <nobutaka@FreeBSD.org>
CommitDate: 2023-02-15 14:26:42 +0000

    editors/imhex: Update to 1.27.1
---
 editors/imhex/Makefile                             |  15 +--
 editors/imhex/distinfo                             |  18 +--
 editors/imhex/files/patch-CMakeLists.txt           |  13 +--
 .../imhex/files/patch-cmake_build__helpers.cmake   |  10 +-
 ...h-lib_external_pattern__language_CMakeLists.txt |  11 --
 ...pattern__language_lib_include_pl_core_token.hpp |  22 ++--
 ...n__language_lib_include_pl_patterns_pattern.hpp |  11 ++
 ...b_libimhex_include_hex_data__processor_node.hpp |   4 +-
 ...ch-lib_libimhex_include_hex_helpers_patches.hpp |  26 +++++
 ..._libimhex_source_api_project__file__manager.cpp |  11 ++
 .../files/patch-lib_libimhex_source_helpers_fs.cpp |  13 ++-
 .../patch-lib_libimhex_source_helpers_patches.cpp  | 126 +++++++++++++++++++++
 editors/imhex/files/patch-main_CMakeLists.txt      |  11 ++
 ...ns_builtin_source_content_settings__entries.cpp |   4 +-
 ...ins_builtin_source_content_views_view__find.cpp | 124 ++------------------
 ...ltin_source_content_views_view__hex__editor.cpp |   4 +-
 ..._source_content_views_view__pattern__editor.cpp |  10 +-
 ...h-plugins_builtin_source_ui_pattern__drawer.cpp |  12 ++
 editors/imhex/pkg-plist                            |  94 ++++++++-------
 19 files changed, 312 insertions(+), 227 deletions(-)

diff --git a/editors/imhex/Makefile b/editors/imhex/Makefile
index 97a1b8889cc4..b7a7eaed1b31 100644
--- a/editors/imhex/Makefile
+++ b/editors/imhex/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	imhex
-PORTVERSION=	1.26.2
+PORTVERSION=	1.27.1
 DISTVERSIONPREFIX=	v
 CATEGORIES=	editors
 MASTER_SITES=	https://git.sr.ht/~danyspin97/xdgpp/blob/f01f810714443d0f10c333d4d1d9c0383be41375/:xdg
@@ -28,8 +28,9 @@ EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX} \
 
 BUILD_DEPENDS=	glm>0:math/glm \
 		nlohmann-json>0:devel/nlohmann-json \
+		${LOCALBASE}/include/hpx/functional.hpp:devel/hpx \
 		${LOCALBASE}/include/range/v3/range.hpp:devel/range-v3 \
-		${LOCALBASE}/include/hpx/functional.hpp:devel/hpx
+		${LOCALBASE}/include/tl/expected.hpp:devel/tl-expected
 LIB_DEPENDS=	libcurl.so:ftp/curl \
 		libglfw.so:graphics/glfw \
 		libfreetype.so:print/freetype2 \
@@ -38,7 +39,7 @@ LIB_DEPENDS=	libcurl.so:ftp/curl \
 		libtre.so:textproc/libtre
 
 USES=		cmake gl gnome pkgconfig python:3.8+ xorg
-USE_GL=		gl
+USE_GL=		gl glu
 USE_GNOME=	cairo gdkpixbuf2 gtk30
 USE_XORG=	x11 xcb xau xdmcp
 USE_GITHUB=	yes
@@ -58,16 +59,16 @@ GH_TUPLE=	btzy:nativefiledialog-extended:${GH_TAG_NATIVEFILEDIALOG}:nativefiledi
 GH_TAG_CAPSTONE=	d5141c0
 GH_TAG_CLI11=	faea921
 GH_TAG_FMT=	a337011
-GH_TAG_IMHEX_PATTERNS=	a4a1430
+GH_TAG_IMHEX_PATTERNS=	ea4dda0
 GH_TAG_JTHREAD=	0fa8d39
-GH_TAG_LIBROMFS=	59d8cec
+GH_TAG_LIBROMFS=	40cd303
 GH_TAG_NATIVEFILEDIALOG=	6efc824
-GH_TAG_PATTERN_LANGUAGE=	58f1702
+GH_TAG_PATTERN_LANGUAGE=	0e32a23
 GH_TAG_YARA=	ba94b4f
 
 CMAKE_ARGS=	-DUSE_SYSTEM_CURL=ON -DUSE_SYSTEM_NLOHMANN_JSON=ON \
 		-DIMHEX_STRIP_RELEASE=OFF -DIMHEX_PLUGINS_IN_SHARE=ON \
-		-DIMHEX_OFFLINE_BUILD=ON
+		-DIMHEX_OFFLINE_BUILD=ON -DIMHEX_USE_GTK_FILE_PICKER=ON
 
 PORTDOCS=	README.md
 
diff --git a/editors/imhex/distinfo b/editors/imhex/distinfo
index 49ab0dc33b8c..82517e4c5c78 100644
--- a/editors/imhex/distinfo
+++ b/editors/imhex/distinfo
@@ -1,8 +1,8 @@
-TIMESTAMP = 1673255964
+TIMESTAMP = 1676468817
 SHA256 (imhex/xdg.hpp) = 2e08ce74adb71ff9b9aa9e1c999733fccd4b00967b9cf0c0e51dbf049392a9ec
 SIZE (imhex/xdg.hpp) = 7674
-SHA256 (imhex/WerWolv-ImHex-v1.26.2_GH0.tar.gz) = bd5b24ec8b5e3cf907eb88f3769b6b8d4aeca5e8cb5b43fe880dd012c92d75ed
-SIZE (imhex/WerWolv-ImHex-v1.26.2_GH0.tar.gz) = 11058206
+SHA256 (imhex/WerWolv-ImHex-v1.27.1_GH0.tar.gz) = c0eaba25b6b01242ad23a6872d815372815d40d22a0f727e0b61da5dc59366a4
+SIZE (imhex/WerWolv-ImHex-v1.27.1_GH0.tar.gz) = 11716724
 SHA256 (imhex/btzy-nativefiledialog-extended-6efc824_GH0.tar.gz) = 9ada1814eaedcdb8aaae1829443747ab385b6f296e3e756a483c34456e15dcbd
 SIZE (imhex/btzy-nativefiledialog-extended-6efc824_GH0.tar.gz) = 412533
 SHA256 (imhex/capstone-engine-capstone-d5141c0_GH0.tar.gz) = 435d40757928fa73dec19c6d0fbf171bd76341391c8525ce1286927dab44c3e7
@@ -15,9 +15,9 @@ SHA256 (imhex/josuttis-jthread-0fa8d39_GH0.tar.gz) = ccd9c871dc2da9611e6d0cba5fc
 SIZE (imhex/josuttis-jthread-0fa8d39_GH0.tar.gz) = 4450456
 SHA256 (imhex/VirusTotal-yara-ba94b4f_GH0.tar.gz) = 4c81120bff451a55deaa23b48155d3eb35955ce11a1d76fbfcbbe2c2e33770b9
 SIZE (imhex/VirusTotal-yara-ba94b4f_GH0.tar.gz) = 1288534
-SHA256 (imhex/WerWolv-ImHex-Patterns-a4a1430_GH0.tar.gz) = 9de0d582a266df555548f941c1c3ba57f576056dad2315a7bf727ee00cc4c6ba
-SIZE (imhex/WerWolv-ImHex-Patterns-a4a1430_GH0.tar.gz) = 6853083
-SHA256 (imhex/WerWolv-PatternLanguage-58f1702_GH0.tar.gz) = 80081c0962d4de1c0bd9287db0805451631956978814e071b81f14c74739082a
-SIZE (imhex/WerWolv-PatternLanguage-58f1702_GH0.tar.gz) = 426049
-SHA256 (imhex/WerWolv-libromfs-59d8cec_GH0.tar.gz) = 2ece573aefce05d42969097a26ff8e3eb81a5bbdc35650f2b45338c1a0304d0c
-SIZE (imhex/WerWolv-libromfs-59d8cec_GH0.tar.gz) = 4286
+SHA256 (imhex/WerWolv-ImHex-Patterns-ea4dda0_GH0.tar.gz) = da07b7b99386fba50db7132fcb67a40ac990d298c92a3a3687870d062e9cb5c3
+SIZE (imhex/WerWolv-ImHex-Patterns-ea4dda0_GH0.tar.gz) = 6896993
+SHA256 (imhex/WerWolv-PatternLanguage-0e32a23_GH0.tar.gz) = 596bc2636eb07c7de71de3fd6582d7c18ecdf1ac5bc6f55d593c07e12ce8653e
+SIZE (imhex/WerWolv-PatternLanguage-0e32a23_GH0.tar.gz) = 428847
+SHA256 (imhex/WerWolv-libromfs-40cd303_GH0.tar.gz) = e785499616e1dfc2644be61706cf1fba49a8d8282c6aecf78efee02c6fbbca13
+SIZE (imhex/WerWolv-libromfs-40cd303_GH0.tar.gz) = 4301
diff --git a/editors/imhex/files/patch-CMakeLists.txt b/editors/imhex/files/patch-CMakeLists.txt
index 210b207d0448..4839db5e37f7 100644
--- a/editors/imhex/files/patch-CMakeLists.txt
+++ b/editors/imhex/files/patch-CMakeLists.txt
@@ -1,15 +1,6 @@
---- CMakeLists.txt.orig	2022-11-14 09:07:21 UTC
+--- CMakeLists.txt.orig	2023-02-15 08:39:23 UTC
 +++ CMakeLists.txt
-@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.20)
- # Options
- option(IMHEX_USE_BUNDLED_CA "Use the CA bundle in romfs instead of the system one" OFF)
- option(IMHEX_PLUGINS_IN_SHARE "Put the plugins in share/imhex/plugins instead of lib[..]/imhex/plugins" OFF)
--option(IMHEX_STRIP_RELEASE "Strip the release builds" ON)
-+option(IMHEX_STRIP_RELEASE "Strip the release builds" OFF)
- option(IMHEX_OFFLINE_BUILD "Enable offline build" OFF)
- option(IMHEX_IGNORE_BAD_CLONE "Disable the bad clone prevention checks" OFF)
- option(IMHEX_PATTERNS_PULL_MASTER "Download latest files from master branch of the ImHex-Patterns repo" OFF)
-@@ -23,8 +23,6 @@ project(imhex VERSION ${IMHEX_VERSION})
+@@ -28,8 +28,6 @@ project(imhex
  
  # Make sure project is configured correctly
  setDefaultBuiltTypeIfUnset()
diff --git a/editors/imhex/files/patch-cmake_build__helpers.cmake b/editors/imhex/files/patch-cmake_build__helpers.cmake
index 3aed175bcc8d..375109f88029 100644
--- a/editors/imhex/files/patch-cmake_build__helpers.cmake
+++ b/editors/imhex/files/patch-cmake_build__helpers.cmake
@@ -1,4 +1,4 @@
---- cmake/build_helpers.cmake.orig	2023-01-05 08:53:49 UTC
+--- cmake/build_helpers.cmake.orig	2023-02-15 13:56:27 UTC
 +++ cmake/build_helpers.cmake
 @@ -370,13 +370,13 @@ function(downloadImHexPatternsFiles dest)
  
@@ -24,11 +24,3 @@
  
      set(CMAKE_C_FLAGS    "${CMAKE_C_FLAGS}    ${IMHEX_C_FLAGS}")
      set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS}  ${IMHEX_C_FLAGS}")
-@@ -434,7 +433,6 @@ macro(addBundledLibraries)
-     endif()
- 
-     if (NOT USE_SYSTEM_NFD)
--        set(NFD_PORTAL ON CACHE BOOL "Use Portals for Linux file dialogs" FORCE)
-         add_subdirectory(${EXTERN_LIBS_FOLDER}/nativefiledialog EXCLUDE_FROM_ALL)
-         set_target_properties(nfd PROPERTIES POSITION_INDEPENDENT_CODE ON)
-         set(NFD_LIBRARIES nfd)
diff --git a/editors/imhex/files/patch-lib_external_pattern__language_CMakeLists.txt b/editors/imhex/files/patch-lib_external_pattern__language_CMakeLists.txt
deleted file mode 100644
index 23723b28f688..000000000000
--- a/editors/imhex/files/patch-lib_external_pattern__language_CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
---- lib/external/pattern_language/CMakeLists.txt.orig	2023-01-05 15:06:41 UTC
-+++ lib/external/pattern_language/CMakeLists.txt
-@@ -8,8 +8,6 @@ option(LIBPL_ENABLE_TESTS "Enable testing" OFF)
- option(LIBPL_ENABLE_CLI "Enable building the CLI tool" ON)
- option(LIBPL_ENABLE_EXAMPLE "Enable building the examples" OFF)
- 
--set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-stringop-overflow -Wno-array-bounds")
--
- if (WIN32)
-     add_compile_definitions(OS_WINDOWS)
- elseif (APPLE)
diff --git a/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_core_token.hpp b/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_core_token.hpp
index 51443a6ce271..d33644543603 100644
--- a/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_core_token.hpp
+++ b/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_core_token.hpp
@@ -1,6 +1,6 @@
---- lib/external/pattern_language/lib/include/pl/core/token.hpp.orig	2023-01-09 11:44:49 UTC
+--- lib/external/pattern_language/lib/include/pl/core/token.hpp.orig	2023-02-13 14:23:14 UTC
 +++ lib/external/pattern_language/lib/include/pl/core/token.hpp
-@@ -151,14 +151,14 @@ namespace pl::core {
+@@ -155,7 +155,7 @@ namespace pl::core {
              bool global;
              std::string comment;
  
@@ -8,22 +8,22 @@
 +            bool operator==(const DocComment &) const = default;
          };
  
-         using Literal    = std::variant<char, bool, u128, i128, double, std::string, ptrn::Pattern *>;
+         struct Literal : public std::variant<char, bool, u128, i128, double, std::string, ptrn::Pattern *> {
+@@ -183,7 +183,7 @@ namespace pl::core {
+ 
          using ValueTypes = std::variant<Keyword, Identifier, Operator, Literal, ValueType, Separator, DocComment>;
-+        // These changes are necessary for Clang
-+        inline Token(Type type, auto value, u32 line, u32 column) : type(type), value(std::move(value)), line(line), column(column) {}
  
 -        constexpr Token(Type type, auto value, u32 line, u32 column) : type(type), value(std::move(value)), line(line), column(column) {}
--
++        inline Token(Type type, auto value, u32 line, u32 column) : type(type), value(std::move(value)), line(line), column(column) {}
+ 
          [[nodiscard]] constexpr static inline bool isInteger(const ValueType &type) {
              return isUnsigned(type) || isSigned(type);
-         }
-@@ -227,134 +227,134 @@ namespace pl::core {
+@@ -220,136 +220,136 @@ namespace pl::core {
  
      namespace tkn {
  
 -        constexpr inline Token createToken(const core::Token::Type type, const core::Token::ValueTypes &value) {
-+        inline pl::core::Token createToken(const core::Token::Type type, const core::Token::ValueTypes &value) {
++        inline Token createToken(const core::Token::Type type, const core::Token::ValueTypes &value) {
              return { type, value, 1, 1 };
          }
  
@@ -50,6 +50,8 @@
 -            constexpr auto In           = createToken(core::Token::Type::Keyword, Token::Keyword::In);
 -            constexpr auto Out          = createToken(core::Token::Type::Keyword, Token::Keyword::Out);
 -            constexpr auto Reference    = createToken(core::Token::Type::Keyword, Token::Keyword::Reference);
+-            constexpr auto Null         = createToken(core::Token::Type::Keyword, Token::Keyword::Null);
+-            constexpr auto Const        = createToken(core::Token::Type::Keyword, Token::Keyword::Const);
 +            inline auto If           = createToken(core::Token::Type::Keyword, Token::Keyword::If);
 +            inline auto Else         = createToken(core::Token::Type::Keyword, Token::Keyword::Else);
 +            inline auto While        = createToken(core::Token::Type::Keyword, Token::Keyword::While);
@@ -71,6 +73,8 @@
 +            inline auto In           = createToken(core::Token::Type::Keyword, Token::Keyword::In);
 +            inline auto Out          = createToken(core::Token::Type::Keyword, Token::Keyword::Out);
 +            inline auto Reference    = createToken(core::Token::Type::Keyword, Token::Keyword::Reference);
++            inline auto Null         = createToken(core::Token::Type::Keyword, Token::Keyword::Null);
++            inline auto Const        = createToken(core::Token::Type::Keyword, Token::Keyword::Const);
  
          }
  
diff --git a/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_patterns_pattern.hpp b/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_patterns_pattern.hpp
new file mode 100644
index 000000000000..04b38f4f4b6c
--- /dev/null
+++ b/editors/imhex/files/patch-lib_external_pattern__language_lib_include_pl_patterns_pattern.hpp
@@ -0,0 +1,11 @@
+--- lib/external/pattern_language/lib/include/pl/patterns/pattern.hpp.orig	2023-02-15 14:19:06 UTC
++++ lib/external/pattern_language/lib/include/pl/patterns/pattern.hpp
+@@ -317,7 +317,7 @@ namespace pl::ptrn {
+                         auto startOffset = child->getOffset();
+ 
+                         child->setOffset(offset);
+-                        PL_ON_SCOPE_EXIT { child->setOffset(startOffset); };
++                        [[maybe_unused]] auto PL_ANONYMOUS_VARIABLE(SCOPE_EXIT_) = ::pl::scope_guard::ScopeGuardOnExit() + [&, child=child]() { child->setOffset(startOffset); };
+ 
+                         auto bytes = child->getBytes();
+                         std::copy(bytes.begin(), bytes.end(), std::back_inserter(result));
diff --git a/editors/imhex/files/patch-lib_libimhex_include_hex_data__processor_node.hpp b/editors/imhex/files/patch-lib_libimhex_include_hex_data__processor_node.hpp
index b0388d966bd2..75f1f09572bf 100644
--- a/editors/imhex/files/patch-lib_libimhex_include_hex_data__processor_node.hpp
+++ b/editors/imhex/files/patch-lib_libimhex_include_hex_data__processor_node.hpp
@@ -1,6 +1,6 @@
---- lib/libimhex/include/hex/data_processor/node.hpp.orig	2022-10-08 08:03:47 UTC
+--- lib/libimhex/include/hex/data_processor/node.hpp.orig	2023-02-12 18:24:04 UTC
 +++ lib/libimhex/include/hex/data_processor/node.hpp
-@@ -46,6 +46,7 @@ namespace hex::dp {
+@@ -49,6 +49,7 @@ namespace hex::dp {
          struct NodeError {
              Node *node;
              std::string message;
diff --git a/editors/imhex/files/patch-lib_libimhex_include_hex_helpers_patches.hpp b/editors/imhex/files/patch-lib_libimhex_include_hex_helpers_patches.hpp
new file mode 100644
index 000000000000..fb97498212b6
--- /dev/null
+++ b/editors/imhex/files/patch-lib_libimhex_include_hex_helpers_patches.hpp
@@ -0,0 +1,26 @@
+--- lib/libimhex/include/hex/helpers/patches.hpp.orig	2023-02-13 15:24:10 UTC
++++ lib/libimhex/include/hex/helpers/patches.hpp
+@@ -4,7 +4,7 @@
+ 
+ #include <map>
+ #include <vector>
+-#include <expected>
++#include <tl/expected.hpp>
+ 
+ namespace hex {
+ 
+@@ -18,9 +18,9 @@ namespace hex {
+         MissingEOF
+     };
+ 
+-    std::expected<std::vector<u8>, IPSError> generateIPSPatch(const Patches &patches);
+-    std::expected<std::vector<u8>, IPSError> generateIPS32Patch(const Patches &patches);
++    tl::expected<std::vector<u8>, IPSError> generateIPSPatch(const Patches &patches);
++    tl::expected<std::vector<u8>, IPSError> generateIPS32Patch(const Patches &patches);
+ 
+-    std::expected<Patches, IPSError> loadIPSPatch(const std::vector<u8> &ipsPatch);
+-    std::expected<Patches, IPSError> loadIPS32Patch(const std::vector<u8> &ipsPatch);
++    tl::expected<Patches, IPSError> loadIPSPatch(const std::vector<u8> &ipsPatch);
++    tl::expected<Patches, IPSError> loadIPS32Patch(const std::vector<u8> &ipsPatch);
+ }
+\ No newline at end of file
diff --git a/editors/imhex/files/patch-lib_libimhex_source_api_project__file__manager.cpp b/editors/imhex/files/patch-lib_libimhex_source_api_project__file__manager.cpp
new file mode 100644
index 000000000000..f8ed1e496d67
--- /dev/null
+++ b/editors/imhex/files/patch-lib_libimhex_source_api_project__file__manager.cpp
@@ -0,0 +1,11 @@
+--- lib/libimhex/source/api/project_file_manager.cpp.orig	2023-02-13 15:22:20 UTC
++++ lib/libimhex/source/api/project_file_manager.cpp
+@@ -43,7 +43,7 @@ namespace hex {
+                 return false;
+         }
+ 
+-        auto providers = auto(ImHexApi::Provider::getProviders());
++        auto providers = ImHexApi::Provider::getProviders();
+         for (const auto &provider : providers) {
+             ImHexApi::Provider::remove(provider);
+         }
diff --git a/editors/imhex/files/patch-lib_libimhex_source_helpers_fs.cpp b/editors/imhex/files/patch-lib_libimhex_source_helpers_fs.cpp
index a1901ae5fa7c..ca035f5b4856 100644
--- a/editors/imhex/files/patch-lib_libimhex_source_helpers_fs.cpp
+++ b/editors/imhex/files/patch-lib_libimhex_source_helpers_fs.cpp
@@ -1,6 +1,6 @@
---- lib/libimhex/source/helpers/fs.cpp.orig	2023-01-05 08:53:49 UTC
+--- lib/libimhex/source/helpers/fs.cpp.orig	2023-02-12 18:24:04 UTC
 +++ lib/libimhex/source/helpers/fs.cpp
-@@ -14,10 +14,15 @@
+@@ -15,10 +15,15 @@
      #include <shlobj.h>
  #elif defined(OS_LINUX)
      #include <xdg.hpp>
@@ -16,3 +16,12 @@
  #include <filesystem>
  
  namespace hex::fs {
+@@ -101,7 +106,7 @@ namespace hex::fs {
+                 result = NFD::PickFolder(outPath, defaultPath.empty() ? nullptr : defaultPath.c_str());
+                 break;
+             default:
+-                std::unreachable();
++                pl::hlp::unreachable();
+         }
+ 
+         if (result == NFD_OKAY){
diff --git a/editors/imhex/files/patch-lib_libimhex_source_helpers_patches.cpp b/editors/imhex/files/patch-lib_libimhex_source_helpers_patches.cpp
new file mode 100644
index 000000000000..dd41c9f794f8
--- /dev/null
+++ b/editors/imhex/files/patch-lib_libimhex_source_helpers_patches.cpp
@@ -0,0 +1,126 @@
+--- lib/libimhex/source/helpers/patches.cpp.orig	2023-02-13 15:36:19 UTC
++++ lib/libimhex/source/helpers/patches.cpp
+@@ -18,7 +18,7 @@ namespace hex {
+         std::memcpy((&buffer.back() - sizeof(T)) + 1, &bytes, sizeof(T));
+     }
+ 
+-    std::expected<std::vector<u8>, IPSError> generateIPSPatch(const Patches &patches) {
++    tl::expected<std::vector<u8>, IPSError> generateIPSPatch(const Patches &patches) {
+         std::vector<u8> result;
+ 
+         pushStringBack(result, "PATCH");
+@@ -43,9 +43,9 @@ namespace hex {
+                 bytes.push_back(values[i]);
+ 
+                 if (bytes.size() > 0xFFFF)
+-                    return std::unexpected(IPSError::PatchTooLarge);
++                    return tl::unexpected(IPSError::PatchTooLarge);
+                 if (startAddress > 0xFFFF'FFFF)
+-                    return std::unexpected(IPSError::AddressOutOfRange);
++                    return tl::unexpected(IPSError::AddressOutOfRange);
+ 
+                 u32 address       = startAddress.value();
+                 auto addressBytes = reinterpret_cast<u8 *>(&address);
+@@ -68,7 +68,7 @@ namespace hex {
+         return result;
+     }
+ 
+-    std::expected<std::vector<u8>, IPSError> generateIPS32Patch(const Patches &patches) {
++    tl::expected<std::vector<u8>, IPSError> generateIPS32Patch(const Patches &patches) {
+         std::vector<u8> result;
+ 
+         pushStringBack(result, "IPS32");
+@@ -93,9 +93,9 @@ namespace hex {
+                 bytes.push_back(values[i]);
+ 
+                 if (bytes.size() > 0xFFFF)
+-                    return std::unexpected(IPSError::PatchTooLarge);
++                    return tl::unexpected(IPSError::PatchTooLarge);
+                 if (startAddress > 0xFFFF'FFFF)
+-                    return std::unexpected(IPSError::AddressOutOfRange);
++                    return tl::unexpected(IPSError::AddressOutOfRange);
+ 
+                 u32 address       = startAddress.value();
+                 auto addressBytes = reinterpret_cast<u8 *>(&address);
+@@ -119,12 +119,12 @@ namespace hex {
+         return result;
+     }
+ 
+-    std::expected<Patches, IPSError> loadIPSPatch(const std::vector<u8> &ipsPatch) {
++    tl::expected<Patches, IPSError> loadIPSPatch(const std::vector<u8> &ipsPatch) {
+         if (ipsPatch.size() < (5 + 3))
+-            return std::unexpected(IPSError::InvalidPatchHeader);
++            return tl::unexpected(IPSError::InvalidPatchHeader);
+ 
+         if (std::memcmp(ipsPatch.data(), "PATCH", 5) != 0)
+-            return std::unexpected(IPSError::InvalidPatchHeader);
++            return tl::unexpected(IPSError::InvalidPatchHeader);
+ 
+         Patches result;
+         bool foundEOF = false;
+@@ -139,7 +139,7 @@ namespace hex {
+             // Handle normal record
+             if (size > 0x0000) {
+                 if (ipsOffset + size > ipsPatch.size() - 3)
+-                    return std::unexpected(IPSError::InvalidPatchFormat);
++                    return tl::unexpected(IPSError::InvalidPatchFormat);
+ 
+                 for (u16 i = 0; i < size; i++)
+                     result[offset + i] = ipsPatch[ipsOffset + i];
+@@ -148,7 +148,7 @@ namespace hex {
+             // Handle RLE record
+             else {
+                 if (ipsOffset + 3 > ipsPatch.size() - 3)
+-                    return std::unexpected(IPSError::InvalidPatchFormat);
++                    return tl::unexpected(IPSError::InvalidPatchFormat);
+ 
+                 u16 rleSize = ipsPatch[ipsOffset + 0] | (ipsPatch[ipsOffset + 1] << 8);
+ 
+@@ -167,15 +167,15 @@ namespace hex {
+         if (foundEOF)
+             return result;
+         else
+-            return std::unexpected(IPSError::MissingEOF);
++            return tl::unexpected(IPSError::MissingEOF);
+     }
+ 
+-    std::expected<Patches, IPSError> loadIPS32Patch(const std::vector<u8> &ipsPatch) {
++    tl::expected<Patches, IPSError> loadIPS32Patch(const std::vector<u8> &ipsPatch) {
+         if (ipsPatch.size() < (5 + 4))
+-            return std::unexpected(IPSError::InvalidPatchHeader);
++            return tl::unexpected(IPSError::InvalidPatchHeader);
+ 
+         if (std::memcmp(ipsPatch.data(), "IPS32", 5) != 0)
+-            return std::unexpected(IPSError::InvalidPatchHeader);
++            return tl::unexpected(IPSError::InvalidPatchHeader);
+ 
+         Patches result;
+         bool foundEEOF = false;
+@@ -190,7 +190,7 @@ namespace hex {
+             // Handle normal record
+             if (size > 0x0000) {
+                 if (ipsOffset + size > ipsPatch.size() - 3)
+-                    return std::unexpected(IPSError::InvalidPatchFormat);
++                    return tl::unexpected(IPSError::InvalidPatchFormat);
+ 
+                 for (u16 i = 0; i < size; i++)
+                     result[offset + i] = ipsPatch[ipsOffset + i];
+@@ -199,7 +199,7 @@ namespace hex {
+             // Handle RLE record
+             else {
+                 if (ipsOffset + 3 > ipsPatch.size() - 3)
+-                    return std::unexpected(IPSError::InvalidPatchFormat);
++                    return tl::unexpected(IPSError::InvalidPatchFormat);
+ 
+                 u16 rleSize = ipsPatch[ipsOffset + 0] | (ipsPatch[ipsOffset + 1] << 8);
+ 
+@@ -218,7 +218,7 @@ namespace hex {
+         if (foundEEOF)
+             return result;
+         else
+-            return std::unexpected(IPSError::MissingEOF);
++            return tl::unexpected(IPSError::MissingEOF);
+     }
+ 
+ }
+\ No newline at end of file
diff --git a/editors/imhex/files/patch-main_CMakeLists.txt b/editors/imhex/files/patch-main_CMakeLists.txt
new file mode 100644
index 000000000000..47e20ae36dda
--- /dev/null
+++ b/editors/imhex/files/patch-main_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- main/CMakeLists.txt.orig	2023-02-13 15:50:24 UTC
++++ main/CMakeLists.txt
+@@ -30,7 +30,7 @@ set_target_properties(main PROPERTIES
+ 
+ add_compile_definitions(IMHEX_PROJECT_NAME="${PROJECT_NAME}")
+ 
+-target_link_libraries(main PRIVATE libromfs-imhex libimhex ${FMT_LIBRARIES})
++target_link_libraries(main PRIVATE libromfs-imhex libimhex ${FMT_LIBRARIES} execinfo)
+ if (WIN32)
+     target_link_libraries(main PRIVATE usp10 wsock32 ws2_32 Dwmapi.lib)
+ else ()
diff --git a/editors/imhex/files/patch-plugins_builtin_source_content_settings__entries.cpp b/editors/imhex/files/patch-plugins_builtin_source_content_settings__entries.cpp
index a4402a37bf5a..554360faa23e 100644
--- a/editors/imhex/files/patch-plugins_builtin_source_content_settings__entries.cpp
+++ b/editors/imhex/files/patch-plugins_builtin_source_content_settings__entries.cpp
@@ -1,6 +1,6 @@
---- plugins/builtin/source/content/settings_entries.cpp.orig	2023-01-05 08:53:49 UTC
+--- plugins/builtin/source/content/settings_entries.cpp.orig	2023-02-12 18:24:04 UTC
 +++ plugins/builtin/source/content/settings_entries.cpp
-@@ -22,8 +22,7 @@ namespace {
+@@ -24,8 +24,7 @@ namespace {
          userFolders.clear();
          std::vector<std::string> paths = setting;
          for (const auto &path : paths) {
diff --git a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__find.cpp b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__find.cpp
index c548e2681e57..10e2dd5a7c40 100644
--- a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__find.cpp
+++ b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__find.cpp
@@ -1,106 +1,6 @@
---- plugins/builtin/source/content/views/view_find.cpp.orig	2023-01-05 08:53:49 UTC
+--- plugins/builtin/source/content/views/view_find.cpp.orig	2023-02-12 18:24:04 UTC
 +++ plugins/builtin/source/content/views/view_find.cpp
-@@ -153,34 +153,86 @@ namespace hex::plugin::builtin {
-     }
- 
-     template<typename Type, typename StorageType>
--    static std::tuple<bool, std::variant<u64, i64, float, double>, size_t> parseNumericValue(const std::string &string) {
-+    static std::tuple<bool, u64, size_t> parseNumericValue_u(const std::string &string) {
-         static_assert(sizeof(StorageType) >= sizeof(Type));
- 
-         StorageType value = 0x00;
--        auto result = std::from_chars(string.data(), string.data() + string.size(), value);
--        if (result.ec != std::errc() || result.ptr != string.data() + string.size())
-+        try {
-+            value = std::stoull(string.data());
-+        } catch (...) {
-             return { false, { }, 0 };
-+        }
-+        if (value < std::numeric_limits<Type>::lowest() || value > std::numeric_limits<Type>::max())
-+            return { false, { }, 0 };
- 
-+        return { true, value, sizeof(Type) };
-+    }
-+
-+    template<typename Type, typename StorageType>
-+    static std::tuple<bool, i64, size_t> parseNumericValue_i(const std::string &string) {
-+        static_assert(sizeof(StorageType) >= sizeof(Type));
-+
-+        StorageType value = 0x00;
-+        try {
-+            value = std::stoll(string.data());
-+        } catch (...) {
-+            return { false, { }, 0 };
-+        }
-+
-         if (value < std::numeric_limits<Type>::lowest() || value > std::numeric_limits<Type>::max())
-             return { false, { }, 0 };
- 
-         return { true, value, sizeof(Type) };
-     }
- 
-+    template<typename Type, typename StorageType>
-+    static std::tuple<bool, float, size_t> parseNumericValue_f(const std::string &string) {
-+        static_assert(sizeof(StorageType) >= sizeof(Type));
-+
-+        StorageType value = 0x00;
-+        try {
-+            value = std::stof(string.data());
-+        } catch (...) {
-+            return { false, { }, 0 };
-+        }
-+
-+        if (value < std::numeric_limits<Type>::lowest() || value > std::numeric_limits<Type>::max())
-+            return { false, { }, 0 };
-+
-+        return { true, value, sizeof(float) };
-+    }
-+
-+    template<typename Type, typename StorageType>
-+    static std::tuple<bool, double, size_t> parseNumericValue_d(const std::string &string) {
-+        static_assert(sizeof(StorageType) >= sizeof(Type));
-+
-+        StorageType value = 0x00;
-+        try {
-+            value = std::stod(string.data());
-+        } catch (...) {
-+            return { false, { }, 0 };
-+        }
-+
-+        if (value < std::numeric_limits<Type>::lowest() || value > std::numeric_limits<Type>::max())
-+            return { false, { }, 0 };
-+
-+        return { true, value, sizeof(Type) };
-+    }
-+
-     std::tuple<bool, std::variant<u64, i64, float, double>, size_t> ViewFind::parseNumericValueInput(const std::string &input, SearchSettings::Value::Type type) {
-         switch (type) {
-             using enum SearchSettings::Value::Type;
- 
--            case U8:    return parseNumericValue<u8,  u64>(input);
--            case U16:   return parseNumericValue<u16, u64>(input);
--            case U32:   return parseNumericValue<u32, u64>(input);
--            case U64:   return parseNumericValue<u64, u64>(input);
--            case I8:    return parseNumericValue<i8,  i64>(input);
--            case I16:   return parseNumericValue<i16, i64>(input);
--            case I32:   return parseNumericValue<i32, i64>(input);
--            case I64:   return parseNumericValue<i64, i64>(input);
--            case F32:   return parseNumericValue<float, float>(input);
--            case F64:   return parseNumericValue<double, double>(input);
-+            case U8:    return parseNumericValue_u<u8,  u64>(input);
-+            case U16:   return parseNumericValue_u<u16, u64>(input);
-+            case U32:   return parseNumericValue_u<u32, u64>(input);
-+            case U64:   return parseNumericValue_u<u64, u64>(input);
-+            case I8:    return parseNumericValue_i<i8,  i64>(input);
-+            case I16:   return parseNumericValue_i<i16, i64>(input);
-+            case I32:   return parseNumericValue_i<i32, i64>(input);
-+            case I64:   return parseNumericValue_i<i64, i64>(input);
-+            case F32:   return parseNumericValue_f<float, float>(input);
-+            case F64:   return parseNumericValue_d<double, double>(input);
-             default:    return { false, { }, 0 };
-         }
-     }
-@@ -293,7 +345,7 @@ namespace hex::plugin::builtin {
+@@ -305,7 +305,7 @@ namespace hex::plugin::builtin {
  
          auto occurrence = reader.begin();
          while (true) {
@@ -109,18 +9,12 @@
              if (occurrence == reader.end())
                  break;
  
-@@ -377,8 +429,12 @@ namespace hex::plugin::builtin {
-         reader.seek(searchRegion.getStartAddress());
-         reader.setEndAddress(searchRegion.getEndAddress());
+@@ -407,7 +407,7 @@ namespace hex::plugin::builtin {
+             if (validBytes == size) {
+                 bytes &= hex::bitmask(size * 8);
  
--        const auto [validMin, min, sizeMin] = parseNumericValueInput(settings.inputMin, settings.type);
--        const auto [validMax, max, sizeMax] = parseNumericValueInput(settings.inputMax, settings.type);
-+        const auto validMin = std::get<0>(parseNumericValueInput(settings.inputMin, settings.type));
-+        const auto min = std::get<1>(parseNumericValueInput(settings.inputMin, settings.type));
-+        const auto sizeMin = std::get<2>(parseNumericValueInput(settings.inputMin, settings.type));
-+        const auto validMax = std::get<0>(parseNumericValueInput(settings.inputMax, settings.type));
-+        const auto max = std::get<1>(parseNumericValueInput(settings.inputMax, settings.type));
-+        const auto sizeMax = std::get<2>(parseNumericValueInput(settings.inputMax, settings.type));
+-                auto result = std::visit([&](auto tag) {
++                auto result = std::visit([&, min=min, max=max](auto tag) {
+                     using T = std::remove_cvref_t<std::decay_t<decltype(tag)>>;
  
-         if (!validMin || !validMax || sizeMin != sizeMax)
-             return { };
+                     auto minValue = std::get<T>(min);
diff --git a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__hex__editor.cpp b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__hex__editor.cpp
index ba671e2666d4..d2e69f0e0684 100644
--- a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__hex__editor.cpp
+++ b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__hex__editor.cpp
@@ -1,6 +1,6 @@
---- plugins/builtin/source/content/views/view_hex_editor.cpp.orig	2022-11-14 09:07:21 UTC
+--- plugins/builtin/source/content/views/view_hex_editor.cpp.orig	2023-02-12 18:24:04 UTC
 +++ plugins/builtin/source/content/views/view_hex_editor.cpp
-@@ -296,7 +296,7 @@ namespace hex::plugin::builtin {
+@@ -297,7 +297,7 @@ namespace hex::plugin::builtin {
              reader.seek(this->m_searchPosition.value_or(provider->getBaseAddress()));
  
              constexpr static auto searchFunction = [](const auto &haystackBegin, const auto &haystackEnd, const auto &needleBegin, const auto &needleEnd) {
diff --git a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__pattern__editor.cpp b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__pattern__editor.cpp
index ba4910f07c4d..fe12e229b4fb 100644
--- a/editors/imhex/files/patch-plugins_builtin_source_content_views_view__pattern__editor.cpp
+++ b/editors/imhex/files/patch-plugins_builtin_source_content_views_view__pattern__editor.cpp
@@ -1,15 +1,15 @@
---- plugins/builtin/source/content/views/view_pattern_editor.cpp.orig	2023-01-05 08:53:49 UTC
+--- plugins/builtin/source/content/views/view_pattern_editor.cpp.orig	2023-02-15 08:39:23 UTC
 +++ plugins/builtin/source/content/views/view_pattern_editor.cpp
-@@ -439,7 +439,7 @@ namespace hex::plugin::builtin {
+@@ -437,7 +437,7 @@ namespace hex::plugin::builtin {
                      dataProvider->setReadOnly(true);
  
                      auto hexEditor = ui::HexEditor();
 -                    hexEditor.setBackgroundHighlightCallback([this, id](u64 address, const u8 *, size_t) -> std::optional<color_t> {
-+                    hexEditor.setBackgroundHighlightCallback([this, id = id](u64 address, const u8 *, size_t) -> std::optional<color_t> {
++                    hexEditor.setBackgroundHighlightCallback([this, id=id](u64 address, const u8 *, size_t) -> std::optional<color_t> {
                          if (this->m_runningEvaluators != 0)
                              return std::nullopt;
                          if (!ImHexApi::Provider::isValid())
-@@ -461,7 +461,7 @@ namespace hex::plugin::builtin {
+@@ -459,7 +459,7 @@ namespace hex::plugin::builtin {
  
                      auto patternProvider = ImHexApi::Provider::get();
  
@@ -18,7 +18,7 @@
                          hexEditor.setProvider(dataProvider.get());
                          hexEditor.draw(480_scaled);
  
-@@ -934,7 +934,7 @@ namespace hex::plugin::builtin {
+@@ -931,7 +931,7 @@ namespace hex::plugin::builtin {
                          if (type->isTemplateType())
                              continue;
  
diff --git a/editors/imhex/files/patch-plugins_builtin_source_ui_pattern__drawer.cpp b/editors/imhex/files/patch-plugins_builtin_source_ui_pattern__drawer.cpp
new file mode 100644
index 000000000000..3a6ff03be6c5
--- /dev/null
+++ b/editors/imhex/files/patch-plugins_builtin_source_ui_pattern__drawer.cpp
@@ -0,0 +1,12 @@
+--- plugins/builtin/source/ui/pattern_drawer.cpp.orig	2023-02-12 18:24:04 UTC
++++ plugins/builtin/source/ui/pattern_drawer.cpp
+@@ -134,7 +134,8 @@ namespace hex::plugin::builtin::ui {
+                 ImGui::TextUnformatted("hex.builtin.pattern_drawer.visualizer.invalid_parameter_count"_lang);
+             } else {
+                 try {
+-                    visualizer.callback(pattern, iteratable, reset, { arguments.begin() + 1, arguments.end() });
++                    const std::vector<pl::core::Token::Literal> args = { arguments.begin() + 1, arguments.end() };
++                    visualizer.callback(pattern, iteratable, reset, args);
+                 } catch (std::exception &e) {
+                     this->m_lastVisualizerError = e.what();
+                 }
diff --git a/editors/imhex/pkg-plist b/editors/imhex/pkg-plist
index 99cc78bdcf59..a050fd7085a4 100644
--- a/editors/imhex/pkg-plist
+++ b/editors/imhex/pkg-plist
@@ -1,57 +1,16 @@
 bin/imhex
-lib/libimhex.so.1.26.2
+lib/libimhex.so.1.27.1
 share/applications/imhex.desktop
 %%DATADIR%%/constants/_schema.json
 %%DATADIR%%/constants/crc16.json
 %%DATADIR%%/constants/crc32.json
 %%DATADIR%%/constants/http_status.json
 %%DATADIR%%/constants/linux_errors.json
-%%DATADIR%%/includes/hex/core.pat
-%%DATADIR%%/includes/hex/dec.pat
-%%DATADIR%%/includes/hex/http.pat
-%%DATADIR%%/includes/hex/impl/imhex_check.pat
-%%DATADIR%%/includes/hex/type/mangled.pat
-%%DATADIR%%/includes/std/array.pat
-%%DATADIR%%/includes/type/types/010.pat
-%%DATADIR%%/includes/type/types/c.pat
-%%DATADIR%%/includes/type/types/linux.pat
-%%DATADIR%%/includes/type/types/rust.pat
-%%DATADIR%%/includes/type/types/win32.pat
-%%DATADIR%%/includes/type/base.pat
-%%DATADIR%%/includes/type/bcd.pat
-%%DATADIR%%/includes/type/color.pat
-%%DATADIR%%/includes/type/magic.pat
-%%DATADIR%%/patterns/bson.hexpat
-%%DATADIR%%/patterns/chm.hexpat
-%%DATADIR%%/patterns/coff.hexpat
-%%DATADIR%%/patterns/cpio.pat
-%%DATADIR%%/patterns/dmg.hexpat
-%%DATADIR%%/patterns/fdt.pat
-%%DATADIR%%/patterns/flac.hexpat
-%%DATADIR%%/patterns/gif.hexpat
-%%DATADIR%%/patterns/gzip.hexpat
-%%DATADIR%%/patterns/id3.hexpat
-%%DATADIR%%/patterns/macho.hexpat
-%%DATADIR%%/patterns/minidump.hexpat
-%%DATADIR%%/patterns/msgpack.hexpat
-%%DATADIR%%/patterns/nbt.hexpat
-%%DATADIR%%/patterns/ne.hexpat
-%%DATADIR%%/patterns/pbzx.hexpat
-%%DATADIR%%/patterns/pcx.hexpat
-%%DATADIR%%/patterns/pfs0.hexpat
-%%DATADIR%%/patterns/qoi.hexpat
-%%DATADIR%%/patterns/sit5.hexpat
-%%DATADIR%%/patterns/tar.hexpat
-%%DATADIR%%/patterns/usb.hexpat
-%%DATADIR%%/patterns/wad.hexpat
-%%DATADIR%%/patterns/xci.hexpat
-%%DATADIR%%/patterns/xilinx_bit.hexpat
-%%DATADIR%%/patterns/zstd.hexpat
 %%DATADIR%%/encodings/arabic_iso.tbl
 %%DATADIR%%/encodings/arabic_windows.tbl
-%%DATADIR%%/encodings/ascii.tbl
 %%DATADIR%%/encodings/ascii_ansi.tbl
 %%DATADIR%%/encodings/ascii_oem.tbl
+%%DATADIR%%/encodings/ascii.tbl
 %%DATADIR%%/encodings/baltic_iso.tbl
 %%DATADIR%%/encodings/baltic_windows.tbl
 %%DATADIR%%/encodings/cyrillic_cp866.tbl
@@ -74,6 +33,7 @@ share/applications/imhex.desktop
 %%DATADIR%%/encodings/jis_x_0211.tbl
 %%DATADIR%%/encodings/jis_x_0213.tbl
 %%DATADIR%%/encodings/macintosh.tbl
+%%DATADIR%%/encodings/ms932.tbl
 %%DATADIR%%/encodings/pokegen1_en.tbl
 %%DATADIR%%/encodings/shiftjis.tbl
 %%DATADIR%%/encodings/thai.tbl
@@ -81,6 +41,12 @@ share/applications/imhex.desktop
 %%DATADIR%%/encodings/turkish_windows.tbl
 %%DATADIR%%/encodings/utf8.tbl
 %%DATADIR%%/encodings/vietnamese.tbl
+%%DATADIR%%/includes/hex/core.pat
+%%DATADIR%%/includes/hex/dec.pat
+%%DATADIR%%/includes/hex/http.pat
+%%DATADIR%%/includes/hex/impl/imhex_check.pat
+%%DATADIR%%/includes/hex/type/mangled.pat
+%%DATADIR%%/includes/std/array.pat
 %%DATADIR%%/includes/std/bit.pat
 %%DATADIR%%/includes/std/core.pat
 %%DATADIR%%/includes/std/ctype.pat
@@ -95,15 +61,24 @@ share/applications/imhex.desktop
 %%DATADIR%%/includes/std/string.pat
 %%DATADIR%%/includes/std/sys.pat
 %%DATADIR%%/includes/std/time.pat
+%%DATADIR%%/includes/type/base.pat
+%%DATADIR%%/includes/type/bcd.pat
 %%DATADIR%%/includes/type/byte.pat
+%%DATADIR%%/includes/type/color.pat
 %%DATADIR%%/includes/type/float16.pat
 %%DATADIR%%/includes/type/guid.pat
 %%DATADIR%%/includes/type/ip.pat
 %%DATADIR%%/includes/type/leb128.pat
 %%DATADIR%%/includes/type/mac.pat
+%%DATADIR%%/includes/type/magic.pat
 %%DATADIR%%/includes/type/path.pat
 %%DATADIR%%/includes/type/size.pat
 %%DATADIR%%/includes/type/time.pat
+%%DATADIR%%/includes/type/types/010.pat
+%%DATADIR%%/includes/type/types/c.pat
+%%DATADIR%%/includes/type/types/linux.pat
+%%DATADIR%%/includes/type/types/rust.pat
+%%DATADIR%%/includes/type/types/win32.pat
 %%DATADIR%%/magic/nintendo_switch_magic
 %%DATADIR%%/magic/portable_executable_magic
 %%DATADIR%%/patterns/afe2.hexpat
@@ -111,33 +86,66 @@ share/applications/imhex.desktop
 %%DATADIR%%/patterns/arm_cm_vtor.hexpat
 %%DATADIR%%/patterns/bencode.hexpat
 %%DATADIR%%/patterns/bmp.hexpat
+%%DATADIR%%/patterns/bson.hexpat
+%%DATADIR%%/patterns/cchva.hexpat
+%%DATADIR%%/patterns/ccpal.hexpat
+%%DATADIR%%/patterns/ccvxl.hexpat
+%%DATADIR%%/patterns/chm.hexpat
+%%DATADIR%%/patterns/coff.hexpat
+%%DATADIR%%/patterns/cpio.pat
 %%DATADIR%%/patterns/dds.hexpat
+%%DATADIR%%/patterns/dmg.hexpat
 %%DATADIR%%/patterns/elf.hexpat
+%%DATADIR%%/patterns/fdt.pat
+%%DATADIR%%/patterns/flac.hexpat
 %%DATADIR%%/patterns/fs.hexpat
+%%DATADIR%%/patterns/gif.hexpat
+%%DATADIR%%/patterns/gzip.hexpat
 %%DATADIR%%/patterns/ico.hexpat
+%%DATADIR%%/patterns/id3.hexpat
 %%DATADIR%%/patterns/intel_hex.hexpat
 %%DATADIR%%/patterns/ip.hexpat
 %%DATADIR%%/patterns/iso.hexpat
 %%DATADIR%%/patterns/java_class.hexpat
+%%DATADIR%%/patterns/jpeg.hexpat
 %%DATADIR%%/patterns/lnk.hexpat
+%%DATADIR%%/patterns/macho.hexpat
 %%DATADIR%%/patterns/midi.hexpat
+%%DATADIR%%/patterns/minidump.hexpat
+%%DATADIR%%/patterns/msgpack.hexpat
 %%DATADIR%%/patterns/nacp.hexpat
+%%DATADIR%%/patterns/nbt.hexpat
+%%DATADIR%%/patterns/ne.hexpat
 %%DATADIR%%/patterns/nro.hexpat
 %%DATADIR%%/patterns/ntag.hexpat
 %%DATADIR%%/patterns/ogg.hexpat
+%%DATADIR%%/patterns/pbzx.hexpat
 %%DATADIR%%/patterns/pcap.hexpat
+%%DATADIR%%/patterns/pcx.hexpat
 %%DATADIR%%/patterns/pe.hexpat
+%%DATADIR%%/patterns/pfs0.hexpat
+%%DATADIR%%/patterns/pif.hexpat
 %%DATADIR%%/patterns/png.hexpat
 %%DATADIR%%/patterns/prodinfo.hexpat
 %%DATADIR%%/patterns/protobuf.hexpat
+%%DATADIR%%/patterns/qbcl.hexpat
+%%DATADIR%%/patterns/qoi.hexpat
+%%DATADIR%%/patterns/sit5.hexpat
 %%DATADIR%%/patterns/spirv.hexpat
 %%DATADIR%%/patterns/stl.hexpat
+%%DATADIR%%/patterns/tar.hexpat
 %%DATADIR%%/patterns/tga.hexpat
 %%DATADIR%%/patterns/uf2.hexpat
+%%DATADIR%%/patterns/usb.hexpat
 %%DATADIR%%/patterns/vdf.hexpat
 %%DATADIR%%/patterns/vhdx.hexpat
+%%DATADIR%%/patterns/wad.hexpat
 %%DATADIR%%/patterns/wav.hexpat
+%%DATADIR%%/patterns/xbeh.hexpat
+%%DATADIR%%/patterns/xci.hexpat
+%%DATADIR%%/patterns/xilinx_bit.hexpat
 %%DATADIR%%/patterns/zip.hexpat
+%%DATADIR%%/patterns/zstd.hexpat
 %%DATADIR%%/plugins/builtin.hexplug
 share/metainfo/net.werwolv.imhex.appdata.xml
 share/metainfo/net.werwolv.imhex.metainfo.xml