diff --git a/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt b/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt index ce22946d84f..a19cd57f070 100644 --- a/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt +++ b/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt @@ -24,7 +24,6 @@ add_qtc_library(KSyntaxHighlighting src/lib/contextswitch.cpp src/lib/contextswitch_p.h src/lib/definition.cpp src/lib/definition.h src/lib/definitiondownloader.cpp src/lib/definitiondownloader.h - src/lib/definitionref_p.h src/lib/definition_p.h src/lib/dynamicregexpcache_p.h src/lib/foldingregion.cpp src/lib/foldingregion.h diff --git a/src/libs/3rdparty/syntax-highlighting/autogenerated/ksyntaxhighlighting_version.h b/src/libs/3rdparty/syntax-highlighting/autogenerated/ksyntaxhighlighting_version.h index d568d1813d6..a24cb62f555 100644 --- a/src/libs/3rdparty/syntax-highlighting/autogenerated/ksyntaxhighlighting_version.h +++ b/src/libs/3rdparty/syntax-highlighting/autogenerated/ksyntaxhighlighting_version.h @@ -3,10 +3,10 @@ #ifndef KSYNTAXHIGHLIGHTING_VERSION_H #define KSYNTAXHIGHLIGHTING_VERSION_H -#define KSYNTAXHIGHLIGHTING_VERSION_STRING "5.249.0" -#define KSYNTAXHIGHLIGHTING_VERSION_MAJOR 5 -#define KSYNTAXHIGHLIGHTING_VERSION_MINOR 249 +#define KSYNTAXHIGHLIGHTING_VERSION_STRING "6.7.0" +#define KSYNTAXHIGHLIGHTING_VERSION_MAJOR 6 +#define KSYNTAXHIGHLIGHTING_VERSION_MINOR 7 #define KSYNTAXHIGHLIGHTING_VERSION_PATCH 0 -#define KSYNTAXHIGHLIGHTING_VERSION ((5<<16)|(249<<8)|(0)) +#define KSYNTAXHIGHLIGHTING_VERSION ((6<<16)|(7<<8)|(0)) #endif diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/bash.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/bash.xml index b3e8334fdaa..1e019f4f607 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/bash.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/bash.xml @@ -56,17 +56,22 @@ - - + + ]> + + + @@ -1239,12 +1245,12 @@ - + - + @@ -1368,7 +1374,7 @@ - + @@ -1495,13 +1501,19 @@ - + + + + - + + + + @@ -1525,8 +1537,12 @@ + + + - + + @@ -1641,7 +1657,10 @@ - + + + + @@ -1657,7 +1676,10 @@ - + + + + @@ -1773,7 +1795,7 @@ - + @@ -1788,7 +1810,7 @@ - + @@ -1807,7 +1829,7 @@ - + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml index 256619d3ff8..f2fb658a022 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml @@ -18,14 +18,13 @@ --> DEFER DIRECTORY EVAL + EXIT GET_CALL GET_CALL_IDS GET_MESSAGE_LOG_LEVEL @@ -315,8 +315,11 @@ IN_LIST IS_ABSOLUTE IS_DIRECTORY + IS_EXECUTABLE IS_NEWER_THAN + IS_READABLE IS_SYMLINK + IS_WRITABLE LESS LESS_EQUAL MATCHES @@ -480,6 +483,7 @@ TIMESTAMP TLS_CAINFO TLS_VERIFY + TLS_VERSION TOUCH TOUCH_NOCREATE TO_CMAKE_PATH @@ -970,11 +974,17 @@ ANDROID_MK APPEND + AUTO + ENABLED EXPORT EXPORT_LINK_INTERFACE_LIBRARIES FILE NAMESPACE + PACKAGE_DEPENDENCY + SETUP + TARGET TARGETS + XCFRAMEWORK_LOCATION DIRECTORY @@ -1358,8 +1368,10 @@ EXCLUDE_FIXTURE EXCLUDE_FIXTURE_CLEANUP EXCLUDE_FIXTURE_SETUP + EXCLUDE_FROM_FILE EXCLUDE_LABEL INCLUDE + INCLUDE_FROM_FILE INCLUDE_LABEL PARALLEL_LEVEL QUIET @@ -1468,6 +1480,28 @@ SameMajorVersion SameMinorVersion + + INSTALL_DESTINATION + INSTALL_PREFIX + IOS_INCLUDE_FILE + IOS_SIMULATOR_INCLUDE_FILE + MACOS_INCLUDE_FILE + TVOS_INCLUDE_FILE + TVOS_SIMULATOR_INCLUDE_FILE + VISIONOS_INCLUDE_FILE + VISIONOS_SIMULATOR_INCLUDE_FILE + WATCHOS_INCLUDE_FILE + WATCHOS_SIMULATOR_INCLUDE_FILE + + + ERROR_VARIABLE + INSTALL_DESTINATION + INSTALL_PREFIX + SINGLE_ARCHITECTURES + SINGLE_ARCHITECTURE_INCLUDE_FILES + UNIVERSAL_ARCHITECTURES + UNIVERSAL_INCLUDE_FILE + CACHE_ENTRIES DIRECTORIES @@ -1667,6 +1701,7 @@ TIMEOUT TLS_CAINFO TLS_VERIFY + TLS_VERSION TMP_DIR UPDATE_COMMAND UPDATE_DISCONNECTED @@ -2165,7 +2200,6 @@ CMAKE_AUTOMOC_EXECUTABLE CMAKE_AUTOMOC_MOC_OPTIONS CMAKE_AUTOMOC_PATH_PREFIX - CMAKE_AUTOMOC_RELAXED_MODE CMAKE_AUTORCC CMAKE_AUTORCC_EXECUTABLE CMAKE_AUTORCC_OPTIONS @@ -2173,7 +2207,6 @@ CMAKE_AUTOUIC_EXECUTABLE CMAKE_AUTOUIC_OPTIONS CMAKE_AUTOUIC_SEARCH_PATHS - CMAKE_BACKWARDS_COMPATIBILITY CMAKE_BINARY_DIR CMAKE_BUILD_RPATH CMAKE_BUILD_RPATH_USE_ORIGIN @@ -2195,9 +2228,6 @@ CMAKE_COLOR_MAKEFILE CMAKE_COMMAND CMAKE_COMPILER_2005 - CMAKE_COMPILER_IS_GNUCC - CMAKE_COMPILER_IS_GNUCXX - CMAKE_COMPILER_IS_GNUG77 CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY CMAKE_COMPILE_WARNING_AS_ERROR CMAKE_CONFIGURATION_TYPES @@ -2268,7 +2298,6 @@ CMAKE_EXPORT_COMPILE_COMMANDS CMAKE_EXPORT_NO_PACKAGE_REGISTRY CMAKE_EXPORT_PACKAGE_REGISTRY - CMAKE_EXTRA_GENERATOR CMAKE_EXTRA_INCLUDE_FILES CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES CMAKE_FIND_APPBUNDLE @@ -2280,8 +2309,6 @@ CMAKE_FIND_LIBRARY_SUFFIXES CMAKE_FIND_NO_INSTALL_PREFIX CMAKE_FIND_PACKAGE_NAME - CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY - CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY CMAKE_FIND_PACKAGE_PREFER_CONFIG CMAKE_FIND_PACKAGE_REDIRECTS_DIR CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS @@ -2424,6 +2451,7 @@ CMAKE_LIBRARY_OUTPUT_DIRECTORY CMAKE_LIBRARY_PATH CMAKE_LIBRARY_PATH_FLAG + CMAKE_LINKER_TYPE CMAKE_LINK_DEF_FILE_FLAG CMAKE_LINK_DEPENDS_NO_SHARED CMAKE_LINK_DEPENDS_USE_LINKER @@ -2523,6 +2551,7 @@ CMAKE_SKIP_INSTALL_RPATH CMAKE_SKIP_INSTALL_RULES CMAKE_SKIP_RPATH + CMAKE_SKIP_TEST_ALL_DEPENDENCY CMAKE_SOURCE_DIR CMAKE_STAGING_PREFIX CMAKE_STATIC_LIBRARY_PREFIX @@ -2549,9 +2578,12 @@ CMAKE_SYSTEM_PROCESSOR CMAKE_SYSTEM_PROGRAM_PATH CMAKE_SYSTEM_VERSION + CMAKE_Swift_COMPILATION_MODE CMAKE_Swift_LANGUAGE_VERSION CMAKE_Swift_MODULE_DIRECTORY + CMAKE_Swift_NUM_THREADS CMAKE_TASKING_TOOLSET + CMAKE_TEST_LAUNCHER CMAKE_THREAD_LIBS_INIT CMAKE_THREAD_PREFER_PTHREAD CMAKE_TOOLCHAIN_FILE @@ -2564,7 +2596,6 @@ CMAKE_UNITY_BUILD_BATCH_SIZE CMAKE_USER_MAKE_RULES_OVERRIDE CMAKE_USE_PTHREADS_INIT - CMAKE_USE_RELATIVE_PATHS CMAKE_USE_SPROC_INIT CMAKE_USE_WIN32_THREADS_INIT CMAKE_VERBOSE_MAKEFILE @@ -2600,6 +2631,7 @@ CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION CMAKE_VS_TARGET_FRAMEWORK_VERSION + CMAKE_VS_USE_DEBUG_LIBRARIES CMAKE_VS_VERSION_BUILD_NUMBER CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION @@ -2852,10 +2884,15 @@ CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME CPACK_NUGET_PACKAGE_NAME CPACK_NUGET_PACKAGE_OWNERS + CPACK_NUGET_PACKAGE_README CPACK_NUGET_PACKAGE_RELEASE_NOTES + CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH + CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT + CPACK_NUGET_PACKAGE_REPOSITORY_TYPE + CPACK_NUGET_PACKAGE_REPOSITORY_URL CPACK_NUGET_PACKAGE_TAGS + CPACK_NUGET_PACKAGE_TFMS CPACK_NUGET_PACKAGE_TITLE - CPACK_NUGET_PACKAGE_VERSION CPACK_OBJCOPY_EXECUTABLE CPACK_OBJDUMP_EXECUTABLE CPACK_OUTPUT_CONFIG_FILE @@ -2987,6 +3024,7 @@ CPACK_WIX_EXTENSIONS CPACK_WIX_EXTRA_OBJECTS CPACK_WIX_EXTRA_SOURCES + CPACK_WIX_INSTALL_SCOPE CPACK_WIX_LICENSE_RTF CPACK_WIX_PATCH_FILE CPACK_WIX_PRODUCT_GUID @@ -3033,7 +3071,6 @@ CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION CTEST_CUSTOM_WARNING_EXCEPTION CTEST_CUSTOM_WARNING_MATCH - CTEST_CVS_CHECKOUT CTEST_CVS_COMMAND CTEST_CVS_UPDATE_OPTIONS CTEST_DROP_LOCATION @@ -3062,7 +3099,6 @@ CTEST_P4_UPDATE_OPTIONS CTEST_RESOURCE_SPEC_FILE CTEST_RUN_CURRENT_SCRIPT - CTEST_SCP_COMMAND CTEST_SITE CTEST_SOURCE_DIRECTORY CTEST_SUBMIT_INACTIVITY_TIMEOUT @@ -3072,7 +3108,8 @@ CTEST_SVN_UPDATE_OPTIONS CTEST_TEST_LOAD CTEST_TEST_TIMEOUT - CTEST_TRIGGER_SITE + CTEST_TLS_VERIFY + CTEST_TLS_VERSION CTEST_UPDATE_COMMAND CTEST_UPDATE_OPTIONS CTEST_UPDATE_VERSION_ONLY @@ -3297,15 +3334,6 @@ MPI_SKIP_GUESSING MPI_SUBARRAYS_SUPPORTED MSVC - MSVC10 - MSVC11 - MSVC12 - MSVC14 - MSVC60 - MSVC70 - MSVC71 - MSVC80 - MSVC90 MSVC_IDE MSVC_TOOLSET_VERSION MSVC_VERSION @@ -3337,6 +3365,7 @@ OpenGL_GL_PREFERENCE OpenMP_Fortran_HAVE_OMPLIB_HEADER OpenMP_Fortran_HAVE_OMPLIB_MODULE + OpenMP_RUNTIME_MSVC PACKAGE_FIND_NAME PACKAGE_FIND_VERSION_COMPLETE PACKAGE_FIND_VERSION_COUNT @@ -3409,8 +3438,10 @@ Python2_ARTIFACTS_INTERACTIVE Python2_COMPILER Python2_COMPILER_ID + Python2_DEBUG_POSTFIX Python2_DOTNET_LAUNCHER Python2_EXECUTABLE + Python2_EXECUTABLE_DEBUG Python2_FIND_ABI Python2_FIND_FRAMEWORK Python2_FIND_IMPLEMENTATIONS @@ -3418,6 +3449,7 @@ Python2_FIND_STRATEGY Python2_FIND_UNVERSIONED_NAMES Python2_FIND_VIRTUALENV + Python2_INTERPRETER Python2_INTERPRETER_ID Python2_LINK_OPTIONS Python2_SITEARCH @@ -3429,8 +3461,10 @@ Python3_ARTIFACTS_INTERACTIVE Python3_COMPILER Python3_COMPILER_ID + Python3_DEBUG_POSTFIX Python3_DOTNET_LAUNCHER Python3_EXECUTABLE + Python3_EXECUTABLE_DEBUG Python3_FIND_ABI Python3_FIND_FRAMEWORK Python3_FIND_IMPLEMENTATIONS @@ -3438,19 +3472,23 @@ Python3_FIND_STRATEGY Python3_FIND_UNVERSIONED_NAMES Python3_FIND_VIRTUALENV + Python3_INTERPRETER Python3_INTERPRETER_ID Python3_LINK_OPTIONS Python3_SITEARCH Python3_SITELIB Python3_SOABI + Python3_SOSABI Python3_STDARCH Python3_STDLIB Python3_USE_STATIC_LIBS Python_ARTIFACTS_INTERACTIVE Python_COMPILER Python_COMPILER_ID + Python_DEBUG_POSTFIX Python_DOTNET_LAUNCHER Python_EXECUTABLE + Python_EXECUTABLE_DEBUG Python_FIND_ABI Python_FIND_FRAMEWORK Python_FIND_IMPLEMENTATIONS @@ -3458,11 +3496,13 @@ Python_FIND_STRATEGY Python_FIND_UNVERSIONED_NAMES Python_FIND_VIRTUALENV + Python_INTERPRETER Python_INTERPRETER_ID Python_LINK_OPTIONS Python_SITEARCH Python_SITELIB Python_SOABI + Python_SOSABI Python_STDARCH Python_STDLIB Python_USE_STATIC_LIBS @@ -3529,8 +3569,16 @@ + CMAKE_AUTOMOC_RELAXED_MODE + CMAKE_BACKWARDS_COMPATIBILITY + CMAKE_COMPILER_IS_GNUCC + CMAKE_COMPILER_IS_GNUCXX + CMAKE_COMPILER_IS_GNUG77 CMAKE_ENABLE_EXPORTS + CMAKE_EXTRA_GENERATOR CMAKE_FILES_DIRECTORY + CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY + CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY CMAKE_HOME_DIRECTORY CMAKE_INTERNAL_PLATFORM_ABI CMAKE_IOS_INSTALL_COMBINED @@ -3539,6 +3587,7 @@ CMAKE_SUPPRESS_DEVELOPER_ERRORS CMAKE_SUPPRESS_DEVELOPER_WARNINGS CMAKE_SYSTEM_ARCH + CMAKE_USE_RELATIVE_PATHS CMAKE_VS_INTEL_Fortran_PROJECT_VERSION CPACK_INSTALL_PREFIX CPACK_INSTALL_SCRIPT @@ -3546,6 +3595,18 @@ CPACK_PACKAGE_RELOCATABLE CPACK_TEMPORARY_DIRECTORY CPACK_TOPLEVEL_DIRECTORY + CTEST_CVS_CHECKOUT + CTEST_SCP_COMMAND + CTEST_TRIGGER_SITE + MSVC10 + MSVC11 + MSVC12 + MSVC14 + MSVC60 + MSVC70 + MSVC71 + MSVC80 + MSVC90 @@ -3567,11 +3628,18 @@ CMAKE_GENERATOR_INSTANCE CMAKE_GENERATOR_PLATFORM CMAKE_GENERATOR_TOOLSET + CMAKE_INCLUDE_PATH CMAKE_INSTALL_MODE + CMAKE_INSTALL_PREFIX + CMAKE_LIBRARY_PATH + CMAKE_MAXIMUM_RECURSION_DEPTH CMAKE_MSVCIDE_RUN_PATH CMAKE_NO_VERBOSE CMAKE_OSX_ARCHITECTURES CMAKE_PREFIX_PATH + CMAKE_PROGRAM_PATH + CMAKE_TLS_VERIFY + CMAKE_TLS_VERSION CMAKE_TOOLCHAIN_FILE CSFLAGS CTEST_INTERACTIVE_DEBUG_MODE @@ -3639,6 +3707,7 @@ PACKAGES_FOUND PACKAGES_NOT_FOUND PREDEFINED_TARGETS_FOLDER + PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE REPORT_UNDEFINED_PROPERTIES RULE_LAUNCH_COMPILE RULE_LAUNCH_CUSTOM @@ -3914,9 +3983,14 @@ STATIC_LIBRARY_OPTIONS SUFFIX SYSTEM + Swift_COMPILATION_MODE Swift_DEPENDENCIES_FILE + Swift_LANGUAGE_VERSION Swift_MODULE_DIRECTORY Swift_MODULE_NAME + TEST_LAUNCHER + TRANSITIVE_COMPILE_PROPERTIES + TRANSITIVE_LINK_PROPERTIES TYPE UNITY_BUILD UNITY_BUILD_BATCH_SIZE @@ -3939,6 +4013,7 @@ VS_DOTNET_STARTUP_OBJECT VS_DOTNET_TARGET_FRAMEWORK_VERSION VS_DPI_AWARE + VS_FILTER_PROPS VS_GLOBAL_KEYWORD VS_GLOBAL_PROJECT_TYPES VS_GLOBAL_ROOTNAMESPACE @@ -3959,6 +4034,7 @@ VS_SDK_REFERENCES VS_SOLUTION_DEPLOY VS_USER_PROPS + VS_USE_DEBUG_LIBRARIES VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION VS_WINRT_COMPONENT VS_WINRT_EXTENSIONS @@ -4144,6 +4220,14 @@ Fortran_COMPILER_ID HIP_COMPILER_ID ISPC_COMPILER_ID + C_COMPILER_FRONTEND_VARIANT + CXX_COMPILER_FRONTEND_VARIANT + CUDA_COMPILER_FRONTEND_VARIANT + OBJC_COMPILER_FRONTEND_VARIANT + OBJCXX_COMPILER_FRONTEND_VARIANT + Fortran_COMPILER_FRONTEND_VARIANT + HIP_COMPILER_FRONTEND_VARIANT + ISPC_COMPILER_FRONTEND_VARIANT COMPILE_LANGUAGE COMPILE_LANG_AND_ID COMPILE_FEATURES @@ -4200,6 +4284,7 @@ ANGLE-R COMMA SEMICOLON + QUOTE LENGTH @@ -4719,6 +4804,8 @@ + + @@ -5469,13 +5556,14 @@ + - + @@ -5550,7 +5638,7 @@ - + @@ -6023,6 +6111,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -6037,7 +6145,7 @@ - + @@ -6381,7 +6489,7 @@ - + @@ -6401,7 +6509,7 @@ - + @@ -6632,7 +6740,7 @@ - + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml index f302ff13692..c70f2f9f2bc 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml @@ -13,7 +13,7 @@ ** https://www.json.org/json-en.html *************************************************************************** --> - + null @@ -62,7 +62,7 @@ - + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml index c3811c772fb..5d06806afd9 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml @@ -94,7 +94,7 @@ ]> - + @@ -369,7 +369,8 @@ - + + @@ -492,9 +493,13 @@ - + - + + + + + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/modelines.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/modelines.xml index 855bca48029..bccdf70bdfa 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/modelines.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/modelines.xml @@ -1,14 +1,10 @@ - - -]> + auto-brackets - + automatic-spell-checking backspace-indents - block-selection bookmark-sorting bom byte-order-marker byte-order-mark dynamic-word-wrap + enter-to-insert-completion folding-markers folding-preview icon-border @@ -55,7 +51,8 @@ replace-tabs-save replace-tabs - replace-trailing-space-save + + smart-home scrollbar-minimap scrollbar-preview @@ -64,7 +61,6 @@ show-trailing-spaces tab-indents word-wrap - wrap-cursor @@ -82,10 +78,10 @@ auto-center-lines font-size - indent-mode indent-width tab-width - undo-steps + + word-wrap-column @@ -100,6 +96,7 @@ font hl icon-bar-color + indent-mode mode scheme selection-color @@ -129,7 +126,6 @@ - @@ -141,31 +137,28 @@ - - - - + + + - - - + + - - - + - - - + + - - + + + + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml index ed843a7d461..94f8e72f14f 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml @@ -39,7 +39,7 @@ Enhance tr/// and y/// support. --> - + if diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/qface.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/qface.xml index 73e07b4cff5..a25a7df3660 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/qface.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/qface.xml @@ -1,7 +1,7 @@ - @@ -32,8 +32,8 @@ - - + + @@ -99,7 +99,7 @@ - + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/ruby.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/ruby.xml index 7c1163910ff..3268f604c68 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/ruby.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/ruby.xml @@ -1,5 +1,42 @@ - + + + + + + + + + + + + + + + + + + + ._*$?:"=,;]|[0-9]+|-\w|[[:alpha:]]\w*)"> + + + ?|(?!<))|[!>]=?|\.\.\.?)"> + + + + + + + + + + + ?)?|>=?|=~|===?|\*\*?"> + +]> - -. +--> + + + author="Stefan Lang (langstefan@gmx.at), Sebastian Vuorinen (sebastian.vuorinen@helsinki.fi), Robin Pedersen (robinpeder@gmail.com), Miquel Sabaté (mikisabate@gmail.com), Jonathan Poelen (jonathan.poelen@gmail.com)" + license="LGPLv2+"> - - BEGIN - END - and - begin - break - case - defined? - do - else - elsif + + class + def end ensure - for - if + when + keyword-begin-end-cond + keyword-block-cond + keyword-block-then-value + keyword-block + keyword-loop + keyword-then-stmt + keyword-then-value + + + + break + defined? in next - not - or redo - rescue retry return + yield + + + + and + not + or then + BEGIN + END + + + + begin + do + + + + case + module + + + + + if + unless + + + + else + elsif + rescue + + + + + for + until + while + + + + if unless until - when - yield + while + rescue @@ -104,9 +230,7 @@ $stdout - $defout $stderr - $deferr $stdin @@ -188,688 +312,1030 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + - There is no other chance of keeping heredoc apart from the - push operator '<<' than requiring to put space between the operator - and the string. - --> - - + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - - - + - - + - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + - - - - + + + + + + + + + + + + + + + + + + + - - - + + + + + - - - - + + + + + - - - - + + + + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + - - - - - - - + + + - - - - + + + - - - - - - - + + + - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - - - - - - + - + + - - - - - - - - + + + + + - - - - + + + + + + + - - + + + - - - + + + + - - - + + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - + + + + - - - - + + + + + - + + + + + + + + + + + + + + + + - - - - + + + + - + - - - - - - - + + + + + + + - - - - + + + + - + - - - - - - - - - - + + + + + - - + + + - - - - - + + + + - - - - + + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - - - - - - - - + + + + - - - - - + + + - - - - + + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + + - - - - + + + - - - - - - - - - + + + - - - - + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + - - - - - - - + + + - - - - + + + + + + + + + - - - - - + + + - - - - + + + + + + + + + - - - - - + + + - - - - + + + - - - - - - - - - - - + + + + + - - - - + + + + - - - - - - - - - - - - + + - - - - + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - - + + + - - - - + + + + + + + - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -883,17 +1349,21 @@ - + + + + + - + @@ -906,7 +1376,7 @@ - + @@ -916,7 +1386,9 @@ - + + + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/xml.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/xml.xml index da1910e26c3..5f02dcc5bd7 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/xml.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/xml.xml @@ -6,7 +6,7 @@ ]> - + @@ -99,6 +99,7 @@ + diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/yaml.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/yaml.xml index 120dbd55f7f..3fb6880f868 100644 --- a/src/libs/3rdparty/syntax-highlighting/data/syntax/yaml.xml +++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/yaml.xml @@ -53,8 +53,8 @@ - diff --git a/src/libs/3rdparty/syntax-highlighting/src/cli/ksyntaxhighlighter.cpp b/src/libs/3rdparty/syntax-highlighting/src/cli/ksyntaxhighlighter.cpp index 681410cb706..886734ec72f 100644 --- a/src/libs/3rdparty/syntax-highlighting/src/cli/ksyntaxhighlighter.cpp +++ b/src/libs/3rdparty/syntax-highlighting/src/cli/ksyntaxhighlighter.cpp @@ -17,7 +17,7 @@ #include #include -#include +#include using namespace KSyntaxHighlighting; @@ -93,16 +93,15 @@ int main(int argc, char **argv) app.translate("SyntaxHighlightingCLI", "theme")); parser.addOption(themeName); - QCommandLineOption outputFormatOption( - QStringList() << QStringLiteral("f") << QStringLiteral("output-format"), - app.translate("SyntaxHighlightingCLI", "Use the specified format instead of html. Must be html, ansi or ansi256Colors."), - app.translate("SyntaxHighlightingCLI", "format"), - QStringLiteral("html")); + QCommandLineOption outputFormatOption(QStringList() << QStringLiteral("f") << QStringLiteral("output-format"), + app.translate("SyntaxHighlightingCLI", "Use the specified format instead of html. Must be html, ansi or ansi256."), + app.translate("SyntaxHighlightingCLI", "format"), + QStringLiteral("html")); parser.addOption(outputFormatOption); QCommandLineOption traceOption(QStringList() << QStringLiteral("syntax-trace"), app.translate("SyntaxHighlightingCLI", - "Add information to debug a syntax file. Only works with --output-format=ansi or ansi256Colors. Possible " + "Add information to debug a syntax file. Only works with --output-format=ansi or ansi256. Possible " "values are format, region, context, stackSize and all."), app.translate("SyntaxHighlightingCLI", "type")); parser.addOption(traceOption); @@ -111,8 +110,13 @@ int main(int argc, char **argv) app.translate("SyntaxHighlightingCLI", "Disable ANSI background for the default color.")); parser.addOption(noAnsiEditorBg); + QCommandLineOption bgRole(QStringList() << QStringLiteral("B") << QStringLiteral("background-role"), + app.translate("SyntaxHighlightingCLI", "Select background color role from theme."), + app.translate("SyntaxHighlightingCLI", "role")); + parser.addOption(bgRole); + QCommandLineOption unbufferedAnsi(QStringList() << QStringLiteral("U") << QStringLiteral("unbuffered"), - app.translate("SyntaxHighlightingCLI", "For ansi and ansi256Colors formats, flush the output buffer on each line.")); + app.translate("SyntaxHighlightingCLI", "For ansi and ansi256 formats, flush the output buffer on each line.")); parser.addOption(unbufferedAnsi); QCommandLineOption titleOption( @@ -127,22 +131,84 @@ int main(int argc, char **argv) if (parser.isSet(listDefs)) { for (const auto &def : repo.definitions()) { - std::cout << qPrintable(def.name()) << std::endl; + fprintf(stdout, "%s\n", qPrintable(def.name())); } return 0; } if (parser.isSet(listThemes)) { for (const auto &theme : repo.themes()) { - std::cout << qPrintable(theme.name()) << std::endl; + fprintf(stdout, "%s\n", qPrintable(theme.name())); } return 0; } + Theme::EditorColorRole bgColorRole = Theme::BackgroundColor; + + if (parser.isSet(bgRole)) { + /* + * Theme::EditorColorRole contains border, foreground and background colors. + * To ensure that only the background colors used in text editing are used, + * QMetaEnum is avoided and values are listed in hard. + */ + + struct BgRole { + QStringView name; + Theme::EditorColorRole role; + // name for display + const char *asciiName; + }; + +#define BG_ROLE(role) \ + BgRole \ + { \ + QStringView(u"" #role, sizeof(#role) - 1), Theme::role, #role \ + } + constexpr BgRole bgRoles[] = { + BG_ROLE(BackgroundColor), + BG_ROLE(TextSelection), + BG_ROLE(CurrentLine), + BG_ROLE(SearchHighlight), + BG_ROLE(ReplaceHighlight), + BG_ROLE(BracketMatching), + BG_ROLE(CodeFolding), + BG_ROLE(MarkBookmark), + BG_ROLE(MarkBreakpointActive), + BG_ROLE(MarkBreakpointReached), + BG_ROLE(MarkBreakpointDisabled), + BG_ROLE(MarkExecution), + BG_ROLE(MarkWarning), + BG_ROLE(MarkError), + BG_ROLE(TemplateBackground), + BG_ROLE(TemplatePlaceholder), + BG_ROLE(TemplateFocusedPlaceholder), + BG_ROLE(TemplateReadOnlyPlaceholder), + }; +#undef BG_ROLE + + const auto role = parser.value(bgRole); + bool ok = false; + for (const auto &def : bgRoles) { + if (def.name == role) { + bgColorRole = def.role; + ok = true; + break; + } + } + + if (!ok) { + fprintf(stderr, "Unknown background role. Expected:\n"); + for (const auto &def : bgRoles) { + fprintf(stderr, " - %s\n", def.asciiName); + } + return 1; + } + } + if (parser.isSet(updateDefs)) { DefinitionDownloader downloader(&repo); - QObject::connect(&downloader, &DefinitionDownloader::informationMessage, [](const QString &msg) { - std::cout << qPrintable(msg) << std::endl; + QObject::connect(&downloader, &DefinitionDownloader::informationMessage, &app, [](const QString &msg) { + fprintf(stdout, "%s\n", qPrintable(msg)); }); QObject::connect(&downloader, &DefinitionDownloader::done, &app, &QCoreApplication::quit); downloader.start(); @@ -179,7 +245,7 @@ int main(int argc, char **argv) } if (!def.isValid()) { - std::cerr << "Unknown syntax." << std::endl; + fprintf(stderr, "Unknown syntax.\n"); return 1; } @@ -192,14 +258,16 @@ int main(int argc, char **argv) HtmlHighlighter highlighter; highlighter.setDefinition(def); + highlighter.setBackgroundRole(bgColorRole); highlighter.setTheme(theme(repo, parser.value(themeName), Repository::LightTheme)); applyHighlighter(highlighter, parser, fromFileName, inFileName, outputName, title); } else { auto AnsiFormat = AnsiHighlighter::AnsiFormat::TrueColor; - if (0 == outputFormat.compare(QLatin1String("ansi256Colors"), Qt::CaseInsensitive)) { + // compatible with the old ansi256Colors value + if (outputFormat.startsWith(QLatin1String("ansi256"), Qt::CaseInsensitive)) { AnsiFormat = AnsiHighlighter::AnsiFormat::XTerm256Color; } else if (0 != outputFormat.compare(QLatin1String("ansi"), Qt::CaseInsensitive)) { - std::cerr << "Unknown output format." << std::endl; + fprintf(stderr, "Unknown output format.\n"); return 2; } @@ -220,7 +288,7 @@ int main(int argc, char **argv) } else if (option == QStringLiteral("all")) { options |= AnsiHighlighter::Option::TraceAll; } else { - std::cerr << "Unknown trace name." << std::endl; + fprintf(stderr, "Unknown trace name.\n"); return 2; } } @@ -228,6 +296,7 @@ int main(int argc, char **argv) AnsiHighlighter highlighter; highlighter.setDefinition(def); + highlighter.setBackgroundRole(bgColorRole); highlighter.setTheme(theme(repo, parser.value(themeName), Repository::DarkTheme)); applyHighlighter(highlighter, parser, fromFileName, inFileName, outputName, AnsiFormat, options); } diff --git a/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp b/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp index 787747e21c0..b398eced154 100644 --- a/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp +++ b/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp @@ -5,6 +5,7 @@ SPDX-License-Identifier: MIT */ +#include #include #include #include @@ -13,11 +14,13 @@ #include #include #include +#include #include #include #ifdef HAS_XERCESC +#include #include #include @@ -144,34 +147,44 @@ private: bool m_failed = false; }; -void init_parser(SAX2XMLReaderImpl &parser) +class CustomXMLValidator : public SAX2XMLReaderImpl { - // Commonly useful configuration. - // - parser.setFeature(XMLUni::fgSAX2CoreNameSpaces, true); - parser.setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); - parser.setFeature(XMLUni::fgSAX2CoreValidation, true); +public: + QString messages; + CustomErrorHandler eh{&messages}; - // Enable validation. - // - parser.setFeature(XMLUni::fgXercesSchema, true); - parser.setFeature(XMLUni::fgXercesSchemaFullChecking, true); - parser.setFeature(XMLUni::fgXercesValidationErrorAsFatal, true); + CustomXMLValidator(XMLGrammarPool *xsd) + : SAX2XMLReaderImpl(XMLPlatformUtils::fgMemoryManager, xsd) + { + // Commonly useful configuration. + // + setFeature(XMLUni::fgSAX2CoreNameSpaces, true); + setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); + setFeature(XMLUni::fgSAX2CoreValidation, true); - // Use the loaded grammar during parsing. - // - parser.setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); + // Enable validation. + // + setFeature(XMLUni::fgXercesSchema, true); + setFeature(XMLUni::fgXercesSchemaFullChecking, true); + setFeature(XMLUni::fgXercesValidationErrorAsFatal, true); - // Don't load schemas from any other source (e.g., from XML document's - // xsi:schemaLocation attributes). - // - parser.setFeature(XMLUni::fgXercesLoadSchema, false); + // Use the loaded grammar during parsing. + // + setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); - // Xerces-C++ 3.1.0 is the first version with working multi import - // support. - // - parser.setFeature(XMLUni::fgXercesHandleMultipleImports, true); -} + // Don't load schemas from any other source (e.g., from XML document's + // xsi:schemaLocation attributes). + // + setFeature(XMLUni::fgXercesLoadSchema, false); + + // Xerces-C++ 3.1.0 is the first version with working multi import + // support. + // + setFeature(XMLUni::fgXercesHandleMultipleImports, true); + + setErrorHandler(&eh); + } +}; #endif @@ -183,11 +196,36 @@ void init_parser(SAX2XMLReaderImpl &parser) using KSyntaxHighlighting::WordDelimiters; using KSyntaxHighlighting::Xml::attrToBool; +using namespace Qt::Literals::StringLiterals; + +static constexpr QStringView operator""_sv(const char16_t *s, std::size_t n) +{ + return QStringView(s, s + n); +} + +namespace +{ + +struct KateVersion { + int majorRevision; + int minorRevision; + + KateVersion(int majorRevision = 0, int minorRevision = 0) + : majorRevision(majorRevision) + , minorRevision(minorRevision) + { + } + + bool operator<(const KateVersion &version) const + { + return majorRevision < version.majorRevision || (majorRevision == version.majorRevision && minorRevision < version.minorRevision); + } +}; + class HlFilesChecker { public: - template - void setDefinition(const T &verStr, const QString &filename, const QString &name) + void setDefinition(QStringView verStr, const QString &filename, const QString &name, const QStringList &alternativeNames) { m_currentDefinition = &*m_definitions.insert(name, Definition{}); m_currentDefinition->languageName = name; @@ -196,42 +234,78 @@ public: m_currentKeywords = nullptr; m_currentContext = nullptr; - const auto idx = verStr.indexOf(QLatin1Char('.')); + const auto idx = verStr.indexOf(u'.'); if (idx <= 0) { qWarning() << filename << "invalid kateversion" << verStr; m_success = false; } else { - m_currentDefinition->kateVersion = {verStr.left(idx).toInt(), verStr.mid(idx + 1).toInt()}; + m_currentDefinition->kateVersion = {verStr.sliced(0, idx).toInt(), verStr.sliced(idx + 1).toInt()}; + } + + auto checkName = [this, &filename](char const *nameType, const QString &name) { + auto it = m_names.find(name); + if (it != m_names.end()) { + qWarning() << filename << "duplicate" << nameType << "with" << it.value(); + m_success = false; + } else { + m_names.insert(name, filename); + } + }; + checkName("name", name); + for (const auto &alternativeName : alternativeNames) { + checkName("alternative name", alternativeName); } } - void processElement(QXmlStreamReader &xml) + KateVersion currentVersion() const { - if (xml.isStartElement()) { + return m_currentDefinition->kateVersion; + } + + void processElement(const QXmlStreamReader &xml) + { + switch (xml.tokenType()) { + case QXmlStreamReader::StartElement: if (m_currentContext) { m_currentContext->rules.push_back(Context::Rule{}); auto &rule = m_currentContext->rules.back(); m_success = rule.parseElement(m_currentDefinition->filename, xml) && m_success; m_currentContext->hasDynamicRule = m_currentContext->hasDynamicRule || rule.dynamic == XmlBool::True; } else if (m_currentKeywords) { - m_success = m_currentKeywords->items.parseElement(m_currentDefinition->filename, xml) && m_success; - } else if (xml.name() == QStringLiteral("context")) { + m_inKeywordItem = true; + } else if (xml.name() == u"context"_sv) { processContextElement(xml); - } else if (xml.name() == QStringLiteral("list")) { + } else if (xml.name() == u"list"_sv) { processListElement(xml); - } else if (xml.name() == QStringLiteral("keywords")) { + } else if (xml.name() == u"keywords"_sv) { m_success = m_currentDefinition->parseKeywords(xml) && m_success; - } else if (xml.name() == QStringLiteral("emptyLine")) { + } else if (xml.name() == u"emptyLine"_sv) { m_success = parseEmptyLine(m_currentDefinition->filename, xml) && m_success; - } else if (xml.name() == QStringLiteral("itemData")) { + } else if (xml.name() == u"itemData"_sv) { m_success = m_currentDefinition->itemDatas.parseElement(m_currentDefinition->filename, xml) && m_success; } - } else if (xml.isEndElement()) { - if (m_currentContext && xml.name() == QStringLiteral("context")) { + break; + + case QXmlStreamReader::EndElement: + if (m_currentContext && xml.name() == u"context"_sv) { m_currentContext = nullptr; - } else if (m_currentKeywords && xml.name() == QStringLiteral("list")) { + } else if (m_currentKeywords && xml.name() == u"list"_sv) { m_currentKeywords = nullptr; + } else if (m_currentKeywords) { + m_success = m_currentKeywords->items.parseElement(m_currentDefinition->filename, xml, m_textContent) && m_success; + m_textContent.clear(); + m_inKeywordItem = false; } + break; + + case QXmlStreamReader::EntityReference: + case QXmlStreamReader::Characters: + if (m_inKeywordItem) { + m_textContent += xml.text(); + } + break; + + default:; } } @@ -364,20 +438,20 @@ public: QString message; message.reserve(128); for (auto &ruleAndInclude : std::as_const(unreachableBy)) { - message += QStringLiteral("line "); + message += u"line "_sv; message += QString::number(ruleAndInclude.rule->line); - message += QStringLiteral(" ["); + message += u" ["_sv; message += ruleAndInclude.rule->parentContext->name; if (rule->filename != ruleAndInclude.rule->filename) { - message += QStringLiteral(" ("); + message += u" ("_sv; message += ruleAndInclude.rule->filename; - message += QLatin1Char(')'); + message += u')'; } if (ruleAndInclude.includeRules) { - message += QStringLiteral(" via line "); + message += u" via line "_sv; message += QString::number(ruleAndInclude.includeRules->line); } - message += QStringLiteral("], "); + message += u"], "_sv; } message.chop(2); @@ -408,13 +482,13 @@ private: struct Parser { const QString &filename; - QXmlStreamReader &xml; - QXmlStreamAttribute &attr; + const QXmlStreamReader &xml; + const QXmlStreamAttribute &attr; bool success; //! Read a string type attribute, \c success = \c false when \p str is not empty //! \return \c true when attr.name() == attrName, otherwise false - bool extractString(QString &str, const QString &attrName) + bool extractString(QString &str, QStringView attrName) { if (attr.name() != attrName) { return false; @@ -431,7 +505,7 @@ private: //! Read a bool type attribute, \c success = \c false when \p xmlBool is not \c XmlBool::Unspecified. //! \return \c true when attr.name() == attrName, otherwise false - bool extractXmlBool(XmlBool &xmlBool, const QString &attrName) + bool extractXmlBool(XmlBool &xmlBool, QStringView attrName) { if (attr.name() != attrName) { return false; @@ -444,7 +518,7 @@ private: //! Read a positive integer type attribute, \c success = \c false when \p positive is already greater than or equal to 0 //! \return \c true when attr.name() == attrName, otherwise false - bool extractPositive(int &positive, const QString &attrName) + bool extractPositive(int &positive, QStringView attrName) { if (attr.name() != attrName) { return false; @@ -463,7 +537,7 @@ private: //! Read a color, \c success = \c false when \p color is already greater than or equal to 0 //! \return \c true when attr.name() == attrName, otherwise false - bool checkColor(const QString &attrName) + bool checkColor(QStringView attrName) { if (attr.name() != attrName) { return false; @@ -480,7 +554,7 @@ private: //! Read a QChar, \c success = \c false when \p c is not \c '\0' or does not have one char //! \return \c true when attr.name() == attrName, otherwise false - bool extractChar(QChar &c, const QString &attrName) + bool extractChar(QChar &c, QStringView attrName) { if (attr.name() != attrName) { return false; @@ -489,7 +563,7 @@ private: if (attr.value().size() == 1) { c = attr.value()[0]; } else { - c = QLatin1Char('_'); + c = u'_'; qWarning() << filename << "line" << xml.lineNumber() << attrName << "must contain exactly one char:" << attr.value(); success = false; } @@ -529,21 +603,20 @@ private: QList keywords; QSet includes; - bool parseElement(const QString &filename, QXmlStreamReader &xml) + bool parseElement(const QString &filename, const QXmlStreamReader &xml, const QString &content) { bool success = true; const int line = xml.lineNumber(); - QString content = xml.readElementText(); if (content.isEmpty()) { qWarning() << filename << "line" << line << "is empty:" << xml.name(); success = false; } - if (xml.name() == QStringLiteral("include")) { + if (xml.name() == u"include"_sv) { includes.insert({content, line}); - } else if (xml.name() == QStringLiteral("item")) { + } else if (xml.name() == u"item"_sv) { keywords.append({content, line}); } else { qWarning() << filename << "line" << line << "invalid element:" << xml.name(); @@ -558,15 +631,16 @@ private: Items items; int line; - bool parseElement(const QString &filename, QXmlStreamReader &xml) + bool parseElement(const QString &filename, const QXmlStreamReader &xml) { line = xml.lineNumber(); bool success = true; - for (auto &attr : xml.attributes()) { + const auto attrs = xml.attributes(); + for (const auto &attr : attrs) { Parser parser{filename, xml, attr, success}; - const bool isExtracted = parser.extractString(name, QStringLiteral("name")); + const bool isExtracted = parser.extractString(name, u"name"_sv); success = parser.checkIfExtracted(isExtracted); } @@ -629,7 +703,7 @@ private: // Detect2Chars, RangeDetect QChar char1; - // AnyChar, DetectChar, StringDetect, RegExpr, WordDetect, keyword + // AnyChar, StringDetect, RegExpr, WordDetect, keyword QString string; // RegExpr without .* as suffix QString sanitizedString; @@ -648,31 +722,31 @@ private: QString filename; - bool parseElement(const QString &filename, QXmlStreamReader &xml) + bool parseElement(const QString &filename, const QXmlStreamReader &xml) { this->filename = filename; line = xml.lineNumber(); - using Pair = QPair; + using Pair = QPair; static const auto pairs = { - Pair{QStringLiteral("AnyChar"), Type::AnyChar}, - Pair{QStringLiteral("Detect2Chars"), Type::Detect2Chars}, - Pair{QStringLiteral("DetectChar"), Type::DetectChar}, - Pair{QStringLiteral("DetectIdentifier"), Type::DetectIdentifier}, - Pair{QStringLiteral("DetectSpaces"), Type::DetectSpaces}, - Pair{QStringLiteral("Float"), Type::Float}, - Pair{QStringLiteral("HlCChar"), Type::HlCChar}, - Pair{QStringLiteral("HlCHex"), Type::HlCHex}, - Pair{QStringLiteral("HlCOct"), Type::HlCOct}, - Pair{QStringLiteral("HlCStringChar"), Type::HlCStringChar}, - Pair{QStringLiteral("IncludeRules"), Type::IncludeRules}, - Pair{QStringLiteral("Int"), Type::Int}, - Pair{QStringLiteral("LineContinue"), Type::LineContinue}, - Pair{QStringLiteral("RangeDetect"), Type::RangeDetect}, - Pair{QStringLiteral("RegExpr"), Type::RegExpr}, - Pair{QStringLiteral("StringDetect"), Type::StringDetect}, - Pair{QStringLiteral("WordDetect"), Type::WordDetect}, - Pair{QStringLiteral("keyword"), Type::keyword}, + Pair{u"AnyChar"_sv, Type::AnyChar}, + Pair{u"Detect2Chars"_sv, Type::Detect2Chars}, + Pair{u"DetectChar"_sv, Type::DetectChar}, + Pair{u"DetectIdentifier"_sv, Type::DetectIdentifier}, + Pair{u"DetectSpaces"_sv, Type::DetectSpaces}, + Pair{u"Float"_sv, Type::Float}, + Pair{u"HlCChar"_sv, Type::HlCChar}, + Pair{u"HlCHex"_sv, Type::HlCHex}, + Pair{u"HlCOct"_sv, Type::HlCOct}, + Pair{u"HlCStringChar"_sv, Type::HlCStringChar}, + Pair{u"IncludeRules"_sv, Type::IncludeRules}, + Pair{u"Int"_sv, Type::Int}, + Pair{u"LineContinue"_sv, Type::LineContinue}, + Pair{u"RangeDetect"_sv, Type::RangeDetect}, + Pair{u"RegExpr"_sv, Type::RegExpr}, + Pair{u"StringDetect"_sv, Type::StringDetect}, + Pair{u"WordDetect"_sv, Type::WordDetect}, + Pair{u"keyword", Type::keyword}, }; for (auto pair : pairs) { @@ -694,7 +768,7 @@ private: sanitizedString = string; sanitizedString.replace(allSuffix, QString()); // string is a catch-all, do not sanitize - if (sanitizedString.isEmpty() || sanitizedString == QStringLiteral("^")) { + if (sanitizedString.isEmpty() || sanitizedString == u"^"_sv) { sanitizedString = string; } } @@ -707,72 +781,73 @@ private: } private: - bool parseAttributes(const QString &filename, QXmlStreamReader &xml) + bool parseAttributes(const QString &filename, const QXmlStreamReader &xml) { bool success = true; - for (auto &attr : xml.attributes()) { + const auto attrs = xml.attributes(); + for (const auto &attr : attrs) { Parser parser{filename, xml, attr, success}; // clang-format off const bool isExtracted - = parser.extractString(attribute, QStringLiteral("attribute")) - || parser.extractString(context.name, QStringLiteral("context")) - || parser.extractXmlBool(lookAhead, QStringLiteral("lookAhead")) - || parser.extractXmlBool(firstNonSpace, QStringLiteral("firstNonSpace")) - || parser.extractString(beginRegion, QStringLiteral("beginRegion")) - || parser.extractString(endRegion, QStringLiteral("endRegion")) - || parser.extractPositive(column, QStringLiteral("column")) + = parser.extractString(attribute, u"attribute"_sv) + || parser.extractString(context.name, u"context"_sv) + || parser.extractXmlBool(lookAhead, u"lookAhead"_sv) + || parser.extractXmlBool(firstNonSpace, u"firstNonSpace"_sv) + || parser.extractString(beginRegion, u"beginRegion"_sv) + || parser.extractString(endRegion, u"endRegion"_sv) + || parser.extractPositive(column, u"column"_sv) || ((type == Type::RegExpr || type == Type::StringDetect || type == Type::WordDetect || type == Type::keyword - ) && parser.extractXmlBool(insensitive, QStringLiteral("insensitive"))) + ) && parser.extractXmlBool(insensitive, u"insensitive"_sv)) || ((type == Type::DetectChar || type == Type::RegExpr || type == Type::StringDetect || type == Type::keyword - ) && parser.extractXmlBool(dynamic, QStringLiteral("dynamic"))) + ) && parser.extractXmlBool(dynamic, u"dynamic"_sv)) || ((type == Type::RegExpr) - && parser.extractXmlBool(minimal, QStringLiteral("minimal"))) + && parser.extractXmlBool(minimal, u"minimal"_sv)) || ((type == Type::DetectChar || type == Type::Detect2Chars || type == Type::LineContinue || type == Type::RangeDetect - ) && parser.extractChar(char0, QStringLiteral("char"))) + ) && parser.extractChar(char0, u"char"_sv)) || ((type == Type::Detect2Chars || type == Type::RangeDetect - ) && parser.extractChar(char1, QStringLiteral("char1"))) + ) && parser.extractChar(char1, u"char1"_sv)) || ((type == Type::AnyChar || type == Type::RegExpr || type == Type::StringDetect || type == Type::WordDetect || type == Type::keyword - ) && parser.extractString(string, QStringLiteral("String"))) + ) && parser.extractString(string, u"String"_sv)) || ((type == Type::IncludeRules) - && parser.extractXmlBool(includeAttrib, QStringLiteral("includeAttrib"))) + && parser.extractXmlBool(includeAttrib, u"includeAttrib"_sv)) || ((type == Type::Float || type == Type::HlCHex || type == Type::HlCOct || type == Type::Int || type == Type::keyword || type == Type::WordDetect - ) && (parser.extractString(additionalDeliminator, QStringLiteral("additionalDeliminator")) - || parser.extractString(weakDeliminator, QStringLiteral("weakDeliminator")))) + ) && (parser.extractString(additionalDeliminator, u"additionalDeliminator"_sv) + || parser.extractString(weakDeliminator, u"weakDeliminator"_sv))) ; // clang-format on success = parser.checkIfExtracted(isExtracted); + } - if (type == Type::LineContinue && char0 == QLatin1Char('\0')) { - char0 = QLatin1Char('\\'); - } + if (type == Type::LineContinue && char0 == u'\0') { + char0 = u'\\'; } return success; } - bool checkMandoryAttributes(const QString &filename, QXmlStreamReader &xml) + bool checkMandoryAttributes(const QString &filename, const QXmlStreamReader &xml) { QString missingAttr; @@ -841,26 +916,27 @@ private: XmlBool fallthrough{}; XmlBool stopEmptyLineContextSwitchLoop{}; - bool parseElement(const QString &filename, QXmlStreamReader &xml) + bool parseElement(const QString &filename, const QXmlStreamReader &xml) { line = xml.lineNumber(); bool success = true; - for (auto &attr : xml.attributes()) { + const auto attrs = xml.attributes(); + for (const auto &attr : attrs) { Parser parser{filename, xml, attr, success}; XmlBool noIndentationBasedFolding{}; // clang-format off - const bool isExtracted = parser.extractString(name, QStringLiteral("name")) - || parser.extractString(attribute, QStringLiteral("attribute")) - || parser.extractString(lineEndContext.name, QStringLiteral("lineEndContext")) - || parser.extractString(lineEmptyContext.name, QStringLiteral("lineEmptyContext")) - || parser.extractString(fallthroughContext.name, QStringLiteral("fallthroughContext")) - || parser.extractXmlBool(dynamic, QStringLiteral("dynamic")) - || parser.extractXmlBool(fallthrough, QStringLiteral("fallthrough")) - || parser.extractXmlBool(stopEmptyLineContextSwitchLoop, QStringLiteral("stopEmptyLineContextSwitchLoop")) - || parser.extractXmlBool(noIndentationBasedFolding, QStringLiteral("noIndentationBasedFolding")); + const bool isExtracted = parser.extractString(name, u"name"_sv) + || parser.extractString(attribute, u"attribute"_sv) + || parser.extractString(lineEndContext.name, u"lineEndContext"_sv) + || parser.extractString(lineEmptyContext.name, u"lineEmptyContext"_sv) + || parser.extractString(fallthroughContext.name, u"fallthroughContext"_sv) + || parser.extractXmlBool(dynamic, u"dynamic"_sv) + || parser.extractXmlBool(fallthrough, u"fallthrough"_sv) + || parser.extractXmlBool(stopEmptyLineContextSwitchLoop, u"stopEmptyLineContextSwitchLoop"_sv) + || parser.extractXmlBool(noIndentationBasedFolding, u"noIndentationBasedFolding"_sv); // clang-format on success = parser.checkIfExtracted(isExtracted); @@ -880,22 +956,6 @@ private: } }; - struct Version { - int majorRevision; - int minorRevision; - - Version(int majorRevision = 0, int minorRevision = 0) - : majorRevision(majorRevision) - , minorRevision(minorRevision) - { - } - - bool operator<(const Version &version) const - { - return majorRevision < version.majorRevision || (majorRevision == version.majorRevision && minorRevision < version.minorRevision); - } - }; - struct ItemDatas { struct Style { QString name; @@ -914,7 +974,7 @@ private: QSet