aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-11-05 08:59:26 +0100
committerDavid Schulz <david.schulz@qt.io>2019-11-05 10:11:54 +0000
commit5634f112bd31cd2f9ccc521072097a22fb6f09c7 (patch)
treea35ea887229671320878988d897a92be3896e629
parentf85f1df157d695932b000915571f0c60287e999c (diff)
SyntaxHighlighting: update KSyntaxHighlighting engine to v5.63.0
Task-number: QTCREATORBUG-22558 Change-Id: I0902d5d866fc83fca2d508cab24dea8d7176240c Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/generators/cmake.xml.tpl32
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/generators/cmake.yaml283
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/generators/generate-cmake-syntax.py45
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/generators/generate-php.pl12
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/schema/language.xsd24
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml232
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/css.xml15
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/html.xml17
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml2
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml701
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml2
-rw-r--r--src/libs/3rdparty/syntax-highlighting/data/syntax/perl6.xml1785
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/cli/kate-syntax-highlighter.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp107
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/CMakeLists.txt2
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/context.cpp4
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/definition.cpp14
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/definition.h23
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h2
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/definitiondownloader.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/format.cpp41
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/format.h65
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/htmlhighlighter.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist_p.h11
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/repository.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/rule.cpp18
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/rule_p.h1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/state.h1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/syntaxhighlighter.cpp1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/textstyledata_p.h1
-rw-r--r--src/libs/3rdparty/syntax-highlighting/src/lib/themedata.cpp1
32 files changed, 3152 insertions, 295 deletions
diff --git a/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.xml.tpl b/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.xml.tpl
index 33cc7511aa8..f7b7570cf43 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.xml.tpl
+++ b/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.xml.tpl
@@ -9,7 +9,7 @@
Copyright 2004 Alexander Neundorf (neundorf@kde.org)
Copyright 2005 Dominik Haumann (dhdev@gmx.de)
Copyright 2007,2008,2013,2014 Matthew Woehlke (mw_triad@users.sourceforge.net)
- Copyright 2013-2015,2017-2018 Alex Turbov (i.zaufi@gmail.com)
+ Copyright 2013-2015,2017-2019 Alex Turbov (i.zaufi@gmail.com)
**********************************************************************
* This library is free software; you can redistribute it and/or *
@@ -31,7 +31,7 @@
<language
name="CMake"
- version="11"
+ version="16"
kateversion="2.4"
section="Other"
extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -70,6 +70,12 @@
{%- endfor %}
</list>
+ <list name="environment-variables">
+ {%- for var in environment_variables.kw %}
+ <item>{{var}}</item>
+ {%- endfor %}
+ </list>
+
{%- for kind in properties.kinds %}
<list name="{{ kind|replace('_', '-') }}">
{%- for prop in properties[kind].kw %}
@@ -197,11 +203,27 @@
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
- <RegExpr attribute="Environment Variable Substitution" context="#stay" String="\$ENV\{\s*[\w-]+\s*\}" />
+ <RegExpr attribute="Cache Variable Substitution" context="#stay" String="\$CACHE\{\s*[\w-]+\s*\}" />
+ <RegExpr attribute="Environment Variable Substitution" context="EnvVarSubst" String="\$ENV\{\s*[\w-]+\s*\}" lookAhead="true" />
<Detect2Chars attribute="Variable Substitution" context="VarSubst" char="$" char1="{" />
<RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
</context>
+ <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubst">
+ <DetectIdentifier />
+ <DetectChar attribute="Environment Variable Substitution" context="EnvVarSubstVar" char="{" />
+ <DetectChar attribute="Environment Variable Substitution" context="#pop" char="}" />
+ </context>
+
+ <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubstVar">
+ <keyword attribute="Standard Environment Variable" context="#stay" String="environment-variables" insensitive="false" />
+ {%- for var in environment_variables.re %}
+ <RegExpr attribute="Standard Environment Variable" context="#stay" String="{{var}}" />
+ {%- endfor %}
+ <DetectIdentifier />
+ <DetectChar attribute="Environment Variable Substitution" context="#pop#pop" char="}" />
+ </context>
+
<context attribute="Variable Substitution" lineEndContext="#pop" name="VarSubst">
<IncludeRules context="Detect Builtin Variables" />
<DetectIdentifier />
@@ -300,10 +322,12 @@
<itemData name="Strings" defStyleNum="dsString" spellChecking="true" />
<itemData name="Escapes" defStyleNum="dsChar" spellChecking="false" />
<itemData name="Builtin Variable" defStyleNum="dsDecVal" color="#c09050" selColor="#c09050" spellChecking="false" />
+ <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
<itemData name="Variable Substitution" defStyleNum="dsDecVal" spellChecking="false" />
<itemData name="@Variable Substitution" defStyleNum="dsBaseN" spellChecking="false" />
- <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
+ <itemData name="Cache Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
<itemData name="Environment Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
+ <itemData name="Standard Environment Variable" defStyleNum="dsFloat" spellChecking="false" />
<itemData name="Generator Expression Keyword" defStyleNum="dsKeyword" color="#b84040" selColor="#b84040" spellChecking="false" />
<itemData name="Generator Expression" defStyleNum="dsOthers" color="#b86050" selColor="#b86050" spellChecking="false" />
<itemData name="Comment" defStyleNum="dsComment" spellChecking="true" />
diff --git a/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.yaml b/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.yaml
index 1174c35215d..f3fa77756f0 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.yaml
+++ b/src/libs/3rdparty/syntax-highlighting/data/generators/cmake.yaml
@@ -7,6 +7,7 @@ global-properties:
- AUTORCC_SOURCE_GROUP
- CMAKE_C_KNOWN_FEATURES
- CMAKE_CXX_KNOWN_FEATURES
+ - CMAKE_ROLE # Since 3.14
- DEBUG_CONFIGURATIONS
- DISABLED_FEATURES
- ENABLED_FEATURES
@@ -42,6 +43,7 @@ global-properties:
- FeatureSummary_<TYPE>_DESCRIPTION
directory-properties:
+ - ADDITIONAL_CLEAN_FILES # Since 3.15
- ADDITIONAL_MAKE_CLEAN_FILES
- BINARY_DIR
- BUILDSYSTEM_TARGETS
@@ -78,6 +80,7 @@ directory-properties:
# NOTE Copy-n-pasting this list from official docs may contain a redudant item `Example`! Check it!
target-properties:
+ - ADDITIONAL_CLEAN_FILES # Since 3.15
- ALIASED_TARGET
- ANDROID_ANT_ADDITIONAL_OPTIONS
- ANDROID_API
@@ -101,17 +104,24 @@ target-properties:
- ARCHIVE_OUTPUT_NAME_<CONFIG>
- ARCHIVE_OUTPUT_NAME
- AUTOGEN_BUILD_DIR
+ - AUTOGEN_ORIGIN_DEPENDS # Since 3.14
- AUTOGEN_TARGET_DEPENDS
+ - AUTOMOC_COMPILER_PREDEFINES # Since ???
- AUTOMOC_DEPEND_FILTERS
- - AUTOMOC_MOC_OPTIONS
+ - AUTOMOC_EXECUTABLE # Since 3.14
+ - AUTOMOC_MACRO_NAMES
+ - AUTOMOC_MOC_OPTIONS # Since ???
- AUTOMOC
- AUTOUIC
+ - AUTOUIC_EXECUTABLE # Since 3.14
- AUTOUIC_OPTIONS
- AUTOUIC_SEARCH_PATHS
- AUTORCC
+ - AUTORCC_EXECUTABLE # Since 3.14
- AUTORCC_OPTIONS
- BINARY_DIR
- BUILD_RPATH
+ - BUILD_RPATH_USE_ORIGIN # Since 3.14
- BUILD_WITH_INSTALL_NAME_DIR
- BUILD_WITH_INSTALL_RPATH
- BUNDLE_EXTENSION
@@ -246,6 +256,7 @@ target-properties:
- MACOSX_RPATH
- MANUALLY_ADDED_DEPENDENCIES
- MAP_IMPORTED_CONFIG_<CONFIG>
+ - MSVC_RUNTIME_LIBRARY # Since 3.15
- NAME
- NO_SONAME
- NO_SYSTEM_FROM_IMPORTED
@@ -278,6 +289,9 @@ target-properties:
- STATIC_LIBRARY_FLAGS
- STATIC_LIBRARY_OPTIONS # Since 3.13
- SUFFIX
+ - Swift_DEPENDENCIES_FILE # Since 3.15
+ - Swift_MODULE_DIRECTORY # Since 3.15
+ - Swift_MODULE_NAME # Since 3.15
- TYPE
- VERSION
- VISIBILITY_INLINES_HIDDEN
@@ -298,8 +312,13 @@ target-properties:
- VS_GLOBAL_<variable>
- VS_IOT_EXTENSIONS_VERSION
- VS_IOT_STARTUP_TASK
+ - VS_JUST_MY_CODE_DEBUGGING # Since 3.15
- VS_KEYWORD
- VS_MOBILE_EXTENSIONS_VERSION
+ - VS_NO_SOLUTION_DEPLOY # Since 3.15
+ - VS_PACKAGE_REFERENCES # Since 3.15
+ - VS_PROJECT_IMPORT # Since 3.15
+ - VS_PACKAGE_REFERENCES
- VS_SCC_AUXPATH
- VS_SCC_LOCALPATH
- VS_SCC_PROJECTNAME
@@ -314,9 +333,12 @@ target-properties:
- WINDOWS_EXPORT_ALL_SYMBOLS
- XCODE_ATTRIBUTE_<an-attribute>
- XCODE_EXPLICIT_FILE_TYPE
+ - XCODE_GENERATE_SCHEME # Since 3.15
- XCODE_PRODUCT_TYPE
- XCODE_SCHEME_ADDRESS_SANITIZER # Since 3.13
- XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN # Since 3.13
+ - XCODE_SCHEME_ARGUMENTS # Since 3.13
+ - XCODE_SCHEME_DEBUG_AS_ROOT # Since 3.15
- XCODE_SCHEME_THREAD_SANITIZER # Since 3.13
- XCODE_SCHEME_THREAD_SANITIZER_STOP # Since 3.13
- XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER # Since 3.13
@@ -331,7 +353,6 @@ target-properties:
- XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE # Since 3.13
- XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS # Since 3.13
- XCODE_SCHEME_EXECUTABLE # Since 3.13
- - XCODE_SCHEME_ARGUMENTS # Since 3.13
- XCODE_SCHEME_ENVIRONMENT # Since 3.13
- XCTEST
@@ -383,6 +404,8 @@ source-properties:
- SKIP_AUTOMOC
- SKIP_AUTORCC
- SKIP_AUTOUIC
+ - Swift_DEPENDENCIES_FILE # Since 3.15
+ - Swift_DIAGNOSTICS_FILE # Since 3.15
- SYMBOLIC
- VS_COPY_TO_OUT_DIR
- VS_CSHARP_<tagname>
@@ -423,69 +446,95 @@ install-properties:
- CPACK_WIX_ACL
generator-expressions:
+ # Boolean Generator Expressions
+ # * Logical Operators
- 0
- 1
- - AND
- - ANGLE-R
- BOOL
- - BUILD_INTERFACE
- - COMMA
- - COMPILE_FEATURES
- - COMPILE_LANGUAGE
+ - AND
+ - OR
+ - NOT
+ # * String Comparisons
+ - STREQUAL
+ - EQUAL
+ - IN_LIST # Since 3.12
+ - VERSION_LESS
+ - VERSION_GREATER
+ - VERSION_EQUAL
+ - VERSION_LESS_EQUAL
+ - VERSION_GREATER_EQUAL
+ # * Variable Queries
+ - TARGET_EXISTS # Since 3.12
- CONFIG
- - CXX_COMPILER_ID
- - CXX_COMPILER_VERSION
+ - PLATFORM_ID
- C_COMPILER_ID
+ - CXX_COMPILER_ID
+ - CUDA_COMPILER_ID # Since 3.15
+ - Fortran_COMPILER_ID
- C_COMPILER_VERSION
- - EQUAL
- - GENEX_EVAL # Since 3.12
+ - CXX_COMPILER_VERSION
+ - CUDA_COMPILER_VERSION # Since 3.15
+ - Fortran_COMPILER_VERSION
+ - TARGET_POLICY
+ - COMPILE_FEATURES
+ - COMPILE_LANG_AND_ID # Since 3.15
+ - COMPILE_LANGUAGE
+ # String-Valued Generator Expressions
+ # * Escaped Characters
+ - ANGLE-R
+ - COMMA
+ - SEMICOLON
+ # * Conditional Expressions
- IF
- - INSTALL_INTERFACE
- - INSTALL_PREFIX
- - IN_LIST # Since 3.12
+ # * String Transformations
- JOIN
- - LINK_ONLY
+ - REMOVE_DUPLICATES # Since 3.15
+ - FILTER # Since 3.15
- LOWER_CASE
- - MAKE_C_IDENTIFIER
- - NOT
- - OR
- - PLATFORM_ID
- - SEMICOLON
- - SHELL_PATH
- - STREQUAL
- - TARGET_BUNDLE_CONTENT_DIR
- - TARGET_BUNDLE_DIR
- - TARGET_EXISTS # Since 3.12
+ - UPPER_CASE
+ - GENEX_EVAL # Since 3.12
+ - TARGET_GENEX_EVAL # Since 3.12
+ # * Variable Queries (NOTE Already included above)
+ # * Target-Dependent Queries
+ - TARGET_NAME_IF_EXISTS # Since 3.12
- TARGET_FILE
- - TARGET_FILE_DIR
+ - TARGET_FILE_BASE_NAME # Since 3.15
+ - TARGET_FILE_PREFIX # Since 3.15
+ - TARGET_FILE_SUFFIX # Since 3.15
- TARGET_FILE_NAME
- - TARGET_GENEX_EVAL # Since 3.12
+ - TARGET_FILE_DIR
- TARGET_LINKER_FILE
- - TARGET_LINKER_FILE_DIR
+ - TARGET_LINKER_FILE_BASE_NAME # Since 3.15
+ - TARGET_LINKER_FILE_PREFIX # Since 3.15
+ - TARGET_LINKER_FILE_SUFFIX # Since 3.15
- TARGET_LINKER_FILE_NAME
- - TARGET_NAME
- - TARGET_NAME_IF_EXISTS # Since 3.12
- - TARGET_OBJECTS
+ - TARGET_LINKER_FILE_DIR
+ - TARGET_SONAME_FILE
+ - TARGET_SONAME_FILE
+ - TARGET_SONAME_FILE_NAME
+ - TARGET_SONAME_FILE_DIR
- TARGET_PDB_FILE
- - TARGET_PDB_FILE_DIR
+ - TARGET_PDB_FILE_BASE_NAME # Since 3.15
- TARGET_PDB_FILE_NAME
- - TARGET_POLICY
+ - TARGET_PDB_FILE_DIR
+ - TARGET_BUNDLE_DIR
+ - TARGET_BUNDLE_CONTENT_DIR
- TARGET_PROPERTY
- - TARGET_SONAME_FILE
- - TARGET_SONAME_FILE_DIR
- - TARGET_SONAME_FILE_NAME
- - UPPER_CASE
- - VERSION_EQUAL
- - VERSION_GREATER
- - VERSION_GREATER_EQUAL
- - VERSION_LESS
- - VERSION_LESS_EQUAL
+ - INSTALL_PREFIX
+ # Output-Related Expressions
+ - TARGET_NAME
+ - LINK_ONLY
+ - INSTALL_INTERFACE
+ - BUILD_INTERFACE
+ - MAKE_C_IDENTIFIER
+ - TARGET_OBJECTS
+ - SHELL_PATH
variables:
# Variables that Provide Information
- CMAKE_AR
- CMAKE_ARGC
- - CMAKE_ARGV0
+ - CMAKE_ARGV<n>
- CMAKE_BINARY_DIR
- CMAKE_BUILD_TOOL
- CMAKE_CACHEFILE_DIR
@@ -558,6 +607,7 @@ variables:
- CMAKE_SOURCE_DIR
- CMAKE_STATIC_LIBRARY_PREFIX
- CMAKE_STATIC_LIBRARY_SUFFIX
+ - CMAKE_Swift_MODULE_DIRECTORY # Since 3.15
- CMAKE_TOOLCHAIN_FILE
- CMAKE_TWEAK_VERSION
- CMAKE_VERBOSE_MAKEFILE
@@ -611,7 +661,9 @@ variables:
- CMAKE_ECLIPSE_VERSION
- CMAKE_ERROR_DEPRECATED
- CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
+ - CMAKE_EXECUTE_PROCESS_COMMAND_ECHO # Since 3.15
- CMAKE_EXPORT_COMPILE_COMMANDS
+ - CMAKE_EXPORT_PACKAGE_REGISTRY # Since 3.15
- CMAKE_EXPORT_NO_PACKAGE_REGISTRY
- CMAKE_FIND_APPBUNDLE
- CMAKE_FIND_FRAMEWORK
@@ -621,6 +673,8 @@ variables:
- CMAKE_FIND_NO_INSTALL_PREFIX
- CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
- CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
+ - CMAKE_FIND_PACKAGE_PREFER_CONFIG # Since 3.15
+ - CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS # Since 3.14
- CMAKE_FIND_PACKAGE_WARN_NO_MODULE
- CMAKE_FIND_ROOT_PATH
- CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
@@ -639,6 +693,7 @@ variables:
- CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
- CMAKE_LIBRARY_PATH
- CMAKE_LINK_DIRECTORIES_BEFORE # Since 3.13
+ - CMAKE_MAXIMUM_RECURSION_DEPTH # Since 3.14
- CMAKE_MFC_FLAG
- CMAKE_MODULE_PATH
- CMAKE_NOT_USING_CONFIG_FLAGS
@@ -646,6 +701,8 @@ variables:
- CMAKE_POLICY_WARNING_CMP<NNNN>
- CMAKE_PREFIX_PATH
- CMAKE_PROGRAM_PATH
+ - CMAKE_PROJECT_INCLUDE # Since 3.15
+ - CMAKE_PROJECT_INCLUDE_BEFORE # Since 3.15
- CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
- CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
- CMAKE_STAGING_PREFIX
@@ -757,6 +814,7 @@ variables:
- CMAKE_ANDROID_STL_TYPE
- CMAKE_ARCHIVE_OUTPUT_DIRECTORY
- CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
+ - CMAKE_AUTOGEN_ORIGIN_DEPENDS # Since 3.14
- CMAKE_AUTOGEN_PARALLEL
- CMAKE_AUTOGEN_VERBOSE # Since 3.13
- CMAKE_AUTOMOC
@@ -768,6 +826,7 @@ variables:
- CMAKE_AUTOUIC_OPTIONS
- CMAKE_AUTOUIC_SEARCH_PATHS
- CMAKE_BUILD_RPATH
+ - CMAKE_BUILD_RPATH_USE_ORIGIN # Since 3.14
- CMAKE_BUILD_WITH_INSTALL_NAME_DIR
- CMAKE_BUILD_WITH_INSTALL_RPATH
- CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
@@ -781,8 +840,13 @@ variables:
- CMAKE_EXE_LINKER_FLAGS_<CONFIG>_INIT
- CMAKE_EXE_LINKER_FLAGS_INIT
- CMAKE_FOLDER # Since 3.12
+ - CMAKE_FRAMEWORK # Since 3.15
- CMAKE_Fortran_FORMAT
- CMAKE_Fortran_MODULE_DIRECTORY
+ - CMAKE_GLOBAL_AUTOGEN_TARGET # Since 3.14
+ - CMAKE_GLOBAL_AUTOGEN_TARGET_NAME # Since 3.14
+ - CMAKE_GLOBAL_AUTORCC_TARGET # Since 3.14
+ - CMAKE_GLOBAL_AUTORCC_TARGET_NAME # Since 3.14
- CMAKE_GNUtoMS
- CMAKE_INCLUDE_CURRENT_DIR
- CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE
@@ -814,6 +878,8 @@ variables:
- CMAKE_MODULE_LINKER_FLAGS_<CONFIG>
- CMAKE_MODULE_LINKER_FLAGS_<CONFIG>_INIT
- CMAKE_MODULE_LINKER_FLAGS_INIT
+ - CMAKE_MSVCIDE_RUN_PATH # Since 3.15
+ - CMAKE_MSVC_RUNTIME_LIBRARY # Since 3.15
- CMAKE_NINJA_OUTPUT_PATH_PREFIX
- CMAKE_NO_BUILTIN_CHRPATH
- CMAKE_NO_SYSTEM_FROM_IMPORTED
@@ -843,6 +909,7 @@ variables:
- CMAKE_VS_GLOBALS # Since 3.13
- CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
- CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
+ - CMAKE_VS_JUST_MY_CODE_DEBUGGING # Since 3.15
- CMAKE_VS_SDK_EXCLUDE_DIRECTORIES # Since 3.12
- CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES # Since 3.12
- CMAKE_VS_SDK_INCLUDE_DIRECTORIES # Since 3.12
@@ -986,6 +1053,7 @@ variables:
- CTEST_P4_UPDATE_OPTIONS
- CTEST_SCP_COMMAND
- CTEST_SITE
+ - CTEST_SUBMIT_URL # Since 3.14
- CTEST_SOURCE_DIRECTORY
- CTEST_SVN_COMMAND
- CTEST_SVN_OPTIONS
@@ -996,6 +1064,7 @@ variables:
- CTEST_UPDATE_COMMAND
- CTEST_UPDATE_OPTIONS
- CTEST_UPDATE_VERSION_ONLY
+ - CTEST_UPDATE_VERSION_OVERRIDE # Since 3.15
- CTEST_USE_LAUNCHERS
# Variables for CPack
- CPACK_ABSOLUTE_DESTINATION_FILES
@@ -1064,6 +1133,7 @@ variables:
- CMAKE_REQUIRED_DEFINITIONS
- CMAKE_REQUIRED_FLAGS
- CMAKE_REQUIRED_INCLUDES
+ - CMAKE_REQUIRED_LINK_OPTIONS # Since 3.14
- CMAKE_REQUIRED_LIBRARIES
- CMAKE_REQUIRED_QUIET
# - CheckTypeSize
@@ -1198,6 +1268,7 @@ variables:
- CPACK_IFW_PACKAGE_BANNER
- CPACK_IFW_PACKAGE_BACKGROUND
- CPACK_IFW_PACKAGE_WIZARD_STYLE
+ - CPACK_IFW_PACKAGE_STYLE_SHEET # Since 3.15
- CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH
- CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT
- CPACK_IFW_PACKAGE_TITLE_COLOR
@@ -1546,7 +1617,59 @@ variables:
# - UseSWIG
- CMAKE_SWIG_FLAGS
- CMAKE_SWIG_OUTDIR
+ - SWIG_OUTFILE_DIR
- SWIG_MODULE_<name>_EXTRA_DEPS
+ - SWIG_SOURCE_FILE_EXTENSIONS # Since 3.14
+
+# https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html
+# NOTE Added to syntax file version 14 at 3.15.0 version of CMake
+environment-variables:
+ # Environment Variables that Control the Build
+ - CMAKE_BUILD_PARALLEL_LEVEL
+ - CMAKE_CONFIG_TYPE
+ - CMAKE_GENERATOR
+ - CMAKE_GENERATOR_INSTANCE
+ - CMAKE_GENERATOR_PLATFORM
+ - CMAKE_GENERATOR_TOOLSET
+ - CMAKE_MSVCIDE_RUN_PATH
+ - CMAKE_NO_VERBOSE
+ - CMAKE_OSX_ARCHITECTURES
+ - DESTDIR
+ - LDFLAGS
+ - MACOSX_DEPLOYMENT_TARGET
+ - <PackageName>_ROOT
+ - VERBOSE
+ # Environment Variables for Languages
+ - ASM<DIALECT>
+ - ASM<DIALECT>FLAGS
+ - CC
+ - CFLAGS
+ - CSFLAGS
+ - CUDACXX
+ - CUDAFLAGS
+ - CUDAHOSTCXX
+ - CXX
+ - CXXFLAGS
+ - FC
+ - FFLAGS
+ - RC
+ - RCFLAGS
+ - SWIFTC
+ # Environment Variables for CTest
+ - CMAKE_CONFIG_TYPE
+ - CTEST_INTERACTIVE_DEBUG_MODE
+ - CTEST_OUTPUT_ON_FAILURE
+ - CTEST_PARALLEL_LEVEL
+ - CTEST_PROGRESS_OUTPUT
+ - CTEST_USE_LAUNCHERS_DEFAULT
+ - DASHBOARD_TEST_FROM_CTEST
+ # Here are the `find_package` specific variables described at the
+ # https://cmake.org/cmake/help/latest/command/find_package.html
+ - <PackageName>_DIR
+ - CMAKE_PREFIX_PATH
+ - CMAKE_FRAMEWORK_PATH
+ - CMAKE_APPBUNDLE_PATH
+ - PATH
scripting-commands:
-
@@ -1670,11 +1793,21 @@ scripting-commands:
, ERROR_FILE
, OUTPUT_QUIET
, ERROR_QUIET
+ , COMMAND_ECHO # Since 3.15
, OUTPUT_STRIP_TRAILING_WHITESPACE
, ERROR_STRIP_TRAILING_WHITESPACE
, ENCODING
]
- special-args: [NONE, AUTO, ANSI, OEM, UTF8]
+ special-args: [
+ NONE
+ , AUTO
+ , ANSI
+ , OEM
+ , UTF8
+ , STDERR # Since 3.15: the value for `COMMAND_ECHO`
+ , STDOUT # Since 3.15: the value for `COMMAND_ECHO`
+ ]
+ nested-parentheses?: true
-
name: file
named-args: [
@@ -1746,6 +1879,7 @@ scripting-commands:
, DIRECTORY_PERMISSIONS
, NO_SOURCE_PERMISSIONS
, USE_SOURCE_PERMISSIONS
+ , FOLLOW_SYMLINK_CHAIN # Since 3.15
, FILES_MATCHING
, PATTERN
, REGEX
@@ -1760,6 +1894,9 @@ scripting-commands:
# Sub-options of UPLOAD/DOWNLOAD since 3.11
, NETRC
, NETRC_FILE
+ # New sub-options since 3.14
+ , READ_SYMLINK
+ , SIZE
]
special-args: [
UTF-8
@@ -1871,7 +2008,21 @@ scripting-commands:
property-args: &get_directory_property [directory-properties]
-
name: get_filename_component
- named-args: [DIRECTORY, NAME, EXT, NAME_WE, PATH, CACHE, BASE_DIR, ABSOLUTE, REALPATH, PROGRAM, PROGRAM_ARGS]
+ named-args: [
+ DIRECTORY
+ , NAME
+ , EXT
+ , NAME_WE
+ , PATH
+ , CACHE
+ , BASE_DIR
+ , ABSOLUTE
+ , REALPATH
+ , PROGRAM
+ , PROGRAM_ARGS
+ , LAST_EXT # Since 3.14
+ , NAME_WLE # Since 3.14
+ ]
-
name: get_property
named-args: [GLOBAL, DIRECTORY, TARGET, SOURCE, INSTALL, TEST, CACHE, VARIABLE, PROPERTY, SET, DEFINED, BRIEF_DOCS, FULL_DOCS]
@@ -1933,6 +2084,10 @@ scripting-commands:
, FOR
# NOTE Another `REGEX` named arg has already added
, OUTPUT_VARIABLE
+ # Since 3.15
+ # NOTE Another `PREPEND` named arg has already added
+ , POP_FRONT
+ , POP_BACK
]
# Since 3.13
special-args: [STRING, FILE_BASENAME, SENSITIVE, INSENSITIVE, ASCENDING, DESCENDING]
@@ -1951,7 +2106,19 @@ scripting-commands:
special-args: [DECIMAL, HEXADECIMAL]
-
name: message
- named-args: [STATUS, WARNING, AUTHOR_WARNING, SEND_ERROR, FATAL_ERROR, DEPRECATION]
+ named-args: [
+ STATUS
+ , WARNING
+ , AUTHOR_WARNING
+ , SEND_ERROR
+ , FATAL_ERROR
+ , DEPRECATION
+ # Since 3.15
+ , NOTICE
+ , VERBOSE
+ , DEBUG
+ , TRACE
+ ]
-
name: option
-
@@ -1993,6 +2160,7 @@ scripting-commands:
, SUBSTRING
, STRIP
, GENEX_STRIP
+ , REPEAT # Since 3.15
, COMPARE
, LESS
, GREATER
@@ -2055,6 +2223,7 @@ project-commands:
, WORKING_DIRECTORY
, COMMENT
, DEPFILE
+ , JOB_POOL # Since 3.15
, VERBATIM
, APPEND
, USES_TERMINAL
@@ -2064,6 +2233,7 @@ project-commands:
, PRE_LINK
, POST_BUILD
]
+ nested-parentheses?: true
-
name: add_custom_target
named-args: [
@@ -2075,12 +2245,14 @@ project-commands:
, WORKING_DIRECTORY
, COMMENT
, DEPFILE
+ , JOB_POOL # Since 3.15
, VERBATIM
, APPEND
, USES_TERMINAL
, COMMAND_EXPAND_LISTS
, SOURCES
]
+ nested-parentheses?: true
-
name: add_definitions
-
@@ -2099,6 +2271,7 @@ project-commands:
-
name: add_test
named-args: [NAME, COMMAND, CONFIGURATIONS, WORKING_DIRECTORY]
+ nested-parentheses?: true
-
name: aux_source_directory
-
@@ -2347,6 +2520,7 @@ project-commands:
, SOURCES
, COMPILE_DEFINITIONS
, LINK_LIBRARIES
+ , LINK_OPTIONS # Since 3.14
, COPY_FILE
, COPY_FILE_ERROR
, <LANG>_STANDARD
@@ -2361,6 +2535,7 @@ project-commands:
, CMAKE_FLAGS
, COMPILE_DEFINITIONS
, LINK_LIBRARIES
+ , LINK_OPTIONS # Since 3.14
, COMPILE_OUTPUT_VARIABLE
, RUN_OUTPUT_VARIABLE
, OUTPUT_VARIABLE
@@ -2414,7 +2589,19 @@ ctest-commands:
named-args: [TRACK, APPEND, QUIET]
-
name: ctest_submit
- named-args: [PARTS, FILES, HTTPHEADER, RETRY_COUNT, RETRY_DELAY, RETURN_VALUE, QUIET, CDASH_UPLOAD, CDASH_UPLOAD_TYPE]
+ named-args: [
+ PARTS
+ , FILES
+ , BUILD_ID # Since 3.15
+ , SUBMIT_URL # Since 3.14
+ , HTTPHEADER
+ , RETRY_COUNT
+ , RETRY_DELAY
+ , RETURN_VALUE
+ , QUIET
+ , CDASH_UPLOAD
+ , CDASH_UPLOAD_TYPE
+ ]
-
name: ctest_test
named-args: [
diff --git a/src/libs/3rdparty/syntax-highlighting/data/generators/generate-cmake-syntax.py b/src/libs/3rdparty/syntax-highlighting/data/generators/generate-cmake-syntax.py
index 61f60a682d6..ff94189b811 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/generators/generate-cmake-syntax.py
+++ b/src/libs/3rdparty/syntax-highlighting/data/generators/generate-cmake-syntax.py
@@ -3,7 +3,7 @@
#
# Generate Kate syntax file for CMake
#
-# Copyright (c) 2017, Alex Turbov <i.zaufi@gmail.com>
+# Copyright (c) 2017-2019 Alex Turbov <i.zaufi@gmail.com>
#
# To install prerequisites:
#
@@ -33,6 +33,7 @@ _PROPERTY_KEYS = [
, 'install-properties'
]
_KW_RE_LIST = ['kw', 're']
+_VAR_KIND_LIST = ['variables', 'environment-variables']
def try_transform_placeholder_string_to_regex(name):
@@ -44,6 +45,9 @@ def try_transform_placeholder_string_to_regex(name):
if 'CMAKE_MATCH_' in m:
return '\\bCMAKE_MATCH_[0-9]+\\b'
+ if 'CMAKE_ARGV' in m:
+ return '\\bCMAKE_ARGV[0-9]+\\b'
+
return '\\b{}\\b'.format('&id_re;'.join(list(m))) if 1 < len(m) else name
@@ -109,11 +113,20 @@ def cmd_is_nulary(cmd):
def cli(input_yaml, template):
data = yaml.load(input_yaml)
- # Partition `variables` list into "pure" words and regexes to match
- data['variables'] = {
- k: sorted(set(v)) for k, v in zip(_KW_RE_LIST, [*partition_iterable(lambda x: _TEMPLATED_NAME.search(x) is None, data['variables'])])
- }
- data['variables']['re'] = [*map(lambda x: try_transform_placeholder_string_to_regex(x), data['variables']['re'])]
+ # Partition `variables` and `environment-variables` lists into "pure" (key)words and regexes to match
+ for var_key in _VAR_KIND_LIST:
+ data[var_key] = {
+ k: sorted(set(v)) for k, v in zip(
+ _KW_RE_LIST
+ , [*partition_iterable(lambda x: _TEMPLATED_NAME.search(x) is None, data[var_key])]
+ )
+ }
+ data[var_key]['re'] = [
+ *map(
+ lambda x: try_transform_placeholder_string_to_regex(x)
+ , data[var_key]['re']
+ )
+ ]
# Transform properties and make all-properties list
data['properties'] = {}
@@ -122,17 +135,27 @@ def cli(input_yaml, template):
props, props_re = partition_iterable(lambda x: _TEMPLATED_NAME.search(x) is None, data[prop])
del data[prop]
- data['properties'][python_prop_list_name] = {k: sorted(set(v)) for k, v in zip(_KW_RE_LIST, [props, props_re])}
- data['properties'][python_prop_list_name]['re'] = [*map(lambda x: try_transform_placeholder_string_to_regex(x), props_re)]
-
+ data['properties'][python_prop_list_name] = {
+ k: sorted(set(v)) for k, v in zip(_KW_RE_LIST, [props, props_re])
+ }
+ data['properties'][python_prop_list_name]['re'] = [
+ *map(lambda x: try_transform_placeholder_string_to_regex(x), props_re)
+ ]
data['properties']['kinds'] = [*map(lambda name: name.replace('-', '_'), _PROPERTY_KEYS)]
# Make all commands list
- data['commands'] = [*map(lambda cmd: transform_command(cmd), data['scripting-commands'] + data['project-commands'] + data['ctest-commands'])]
+ data['commands'] = [
+ *map(
+ lambda cmd: transform_command(cmd)
+ , data['scripting-commands'] + data['project-commands'] + data['ctest-commands'])
+ ]
+ # Fix node names to be accessible from Jinja template
data['generator_expressions'] = data['generator-expressions']
-
+ data['environment_variables'] = data['environment-variables']
+ del data['generator-expressions']
+ del data['environment-variables']
env = jinja2.Environment(
keep_trailing_newline=True
diff --git a/src/libs/3rdparty/syntax-highlighting/data/generators/generate-php.pl b/src/libs/3rdparty/syntax-highlighting/data/generators/generate-php.pl
index c8274aab582..f034bcada72 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/generators/generate-php.pl
+++ b/src/libs/3rdparty/syntax-highlighting/data/generators/generate-php.pl
@@ -42,7 +42,14 @@ if ($root == 1)
}
else
{
- $file =~ s/<language([^>]+)name="([^"]*)"/<language$1name="$2\/PHP" hidden="true"/s;
+ if ($file =~ /<language[^>]+hidden="[^"]*"/) {
+ $file =~ s/<language([^>]+)name="([^"]*)"/<language$1name="$2\/PHP"/s;
+ $file =~ s/<language([^>]+)hidden="[^"]*"/<language$1hidden="true"/s;
+ }
+ else
+ {
+ $file =~ s/<language([^>]+)name="([^"]*)"/<language$1name="$2\/PHP" hidden="true"/s;
+ }
$file =~ s/<language([^>]+)section="[^"]*"/<language$1section="Other"/s;
$file =~ s/<language([^>]+)extensions="[^"]*"/<language$1extensions=""/s;
$file =~ s/<language([^>]+)mimetype="[^"]*"/<language$1mimetype=""/s;
@@ -51,7 +58,8 @@ else
$findphp = "<context name=\"FindPHP\" attribute=\"Normal Text\" lineEndContext=\"#stay\">\n<RegExpr context=\"##PHP/PHP\" String=\"&lt;\\?(?:=|php)?\" lookAhead=\"true\" />\n</context>\n";
$file =~ s/<IncludeRules\s([^>]*)context="([^"#]*)##(?!Alerts|Doxygen|Modelines)([^"]+)"/<IncludeRules $1context="$2##$3\/PHP"/g;
-$file =~ s/(<context\s[^>]*>)/$1\n<IncludeRules context="FindPHP" \/>/g;
+$file =~ s/(<context\s[^>]*[^>\/]>)/$1\n<IncludeRules context="FindPHP" \/>/g;
+$file =~ s/(<context\s[^>]*[^>\/])\s*\/>/$1>\n<IncludeRules context="FindPHP" \/>\n<\/context>/g;
$file =~ s/(?=<\/contexts\s*>)/$findphp/;
print $file;
diff --git a/src/libs/3rdparty/syntax-highlighting/data/schema/language.xsd b/src/libs/3rdparty/syntax-highlighting/data/schema/language.xsd
index 6f05aad7b51..9a03ef2b780 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/schema/language.xsd
+++ b/src/libs/3rdparty/syntax-highlighting/data/schema/language.xsd
@@ -279,9 +279,10 @@
-->
<xs:element name="list">
<xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="item"/>
- </xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="item"/>
+ <xs:element ref="include"/>
+ </xs:choice>
<xs:attribute name="name" use="required"/>
</xs:complexType>
</xs:element>
@@ -290,6 +291,11 @@
contains string used in <keyword>
-->
<xs:element name="item" type="xs:string"/>
+ <!--
+ List include
+ contains a name of <keyword>
+ -->
+ <xs:element name="include" type="xs:string"/>
<!-- List of contexts -->
<xs:element name="contexts">
<xs:complexType>
@@ -305,6 +311,7 @@
lineEndContext: Next context if end of line is encountered
lineEmptyContext: Next context if an empty line is encountered [optional]
fallthrough: Use a fallthrough context [optional]
+ deprecated since 5.62 but preserved to maintain compatibility in older versions of KF5
fallthroughContext: Fall through to this context [optional]
dynamic: Dynamic context [boolean, optional]
noIndentationBasedFolding: Python uses indentation based folding. However, Python has parts where
@@ -314,7 +321,6 @@
TODO:
- Explain fallthrough.
- - Do we need fallthrough at all? It could be true, if fallthroughContext is set, false otherwise.
- Make lineEndContext optional, defaults to '#stay'. Reasonable?
-->
<xs:element name="context">
@@ -344,7 +350,15 @@
<xs:attribute name="attribute" use="required"/>
<xs:attribute name="lineEndContext" use="required"/>
<xs:attribute name="lineEmptyContext"/>
- <xs:attribute name="fallthrough" type="xs:boolean"/>
+ <xs:attribute name="fallthrough">
+ <xs:simpleType>
+ <!-- alway true since 5.62 -->
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="1"/>
+ <xs:enumeration value="true"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
<xs:attribute name="fallthroughContext"/>
<xs:attribute name="dynamic" type="xs:boolean"/>
<xs:attribute name="noIndentationBasedFolding" type="xs:boolean"/>
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml
index 6d170e4eaaa..def91cc4ddd 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/cmake.xml
@@ -9,7 +9,7 @@
Copyright 2004 Alexander Neundorf (neundorf@kde.org)
Copyright 2005 Dominik Haumann (dhdev@gmx.de)
Copyright 2007,2008,2013,2014 Matthew Woehlke (mw_triad@users.sourceforge.net)
- Copyright 2013-2015,2017-2018 Alex Turbov (i.zaufi@gmail.com)
+ Copyright 2013-2015,2017-2019 Alex Turbov (i.zaufi@gmail.com)
**********************************************************************
* This library is free software; you can redistribute it and/or *
@@ -31,7 +31,7 @@
<language
name="CMake"
- version="12"
+ version="16"
kateversion="2.4"
section="Other"
extensions="CMakeLists.txt;*.cmake;*.cmake.in"
@@ -248,6 +248,7 @@
</list>
<list name="execute_process_nargs">
<item>COMMAND</item>
+ <item>COMMAND_ECHO</item>
<item>ENCODING</item>
<item>ERROR_FILE</item>
<item>ERROR_QUIET</item>
@@ -268,6 +269,8 @@
<item>AUTO</item>
<item>NONE</item>
<item>OEM</item>
+ <item>STDERR</item>
+ <item>STDOUT</item>
<item>UTF8</item>
</list>
<list name="file_nargs">
@@ -287,6 +290,7 @@
<item>FILES_MATCHING</item>
<item>FILE_PERMISSIONS</item>
<item>FOLLOW_SYMLINKS</item>
+ <item>FOLLOW_SYMLINK_CHAIN</item>
<item>GENERATE</item>
<item>GLOB</item>
<item>GLOB_RECURSE</item>
@@ -567,6 +571,8 @@
<item>LENGTH</item>
<item>ORDER</item>
<item>OUTPUT_VARIABLE</item>
+ <item>POP_BACK</item>
+ <item>POP_FRONT</item>
<item>PREPEND</item>
<item>REGEX</item>
<item>REMOVE_AT</item>
@@ -602,10 +608,14 @@
</list>
<list name="message_nargs">
<item>AUTHOR_WARNING</item>
+ <item>DEBUG</item>
<item>DEPRECATION</item>
<item>FATAL_ERROR</item>
+ <item>NOTICE</item>
<item>SEND_ERROR</item>
<item>STATUS</item>
+ <item>TRACE</item>
+ <item>VERBOSE</item>
<item>WARNING</item>
</list>
<list name="separate_arguments_nargs">
@@ -671,6 +681,7 @@
<item>RANDOM</item>
<item>RANDOM_SEED</item>
<item>REGEX</item>
+ <item>REPEAT</item>
<item>REPLACE</item>
<item>REVERSE</item>
<item>SHA1</item>
@@ -737,6 +748,7 @@
<item>DEPENDS</item>
<item>DEPFILE</item>
<item>IMPLICIT_DEPENDS</item>
+ <item>JOB_POOL</item>
<item>MAIN_DEPENDENCY</item>
<item>OUTPUT</item>
<item>POST_BUILD</item>
@@ -757,6 +769,7 @@
<item>DEPENDS</item>
<item>DEPFILE</item>
<item>IMPLICIT_DEPENDS</item>
+ <item>JOB_POOL</item>
<item>SOURCES</item>
<item>USES_TERMINAL</item>
<item>VERBATIM</item>
@@ -1135,6 +1148,7 @@
<item>TRACK</item>
</list>
<list name="ctest_submit_nargs">
+ <item>BUILD_ID</item>
<item>CDASH_UPLOAD</item>
<item>CDASH_UPLOAD_TYPE</item>
<item>FILES</item>
@@ -1144,6 +1158,7 @@
<item>RETRY_COUNT</item>
<item>RETRY_DELAY</item>
<item>RETURN_VALUE</item>
+ <item>SUBMIT_URL</item>
</list>
<list name="ctest_test_nargs">
<item>APPEND</item>
@@ -1214,7 +1229,6 @@
<item>CMAKE_AR</item>
<item>CMAKE_ARCHIVE_OUTPUT_DIRECTORY</item>
<item>CMAKE_ARGC</item>
- <item>CMAKE_ARGV0</item>
<item>CMAKE_AUTOGEN_ORIGIN_DEPENDS</item>
<item>CMAKE_AUTOGEN_PARALLEL</item>
<item>CMAKE_AUTOGEN_VERBOSE</item>
@@ -1288,10 +1302,12 @@
<item>CMAKE_ERROR_DEPRECATED</item>
<item>CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION</item>
<item>CMAKE_EXECUTABLE_SUFFIX</item>
+ <item>CMAKE_EXECUTE_PROCESS_COMMAND_ECHO</item>
<item>CMAKE_EXE_LINKER_FLAGS</item>
<item>CMAKE_EXE_LINKER_FLAGS_INIT</item>
<item>CMAKE_EXPORT_COMPILE_COMMANDS</item>
<item>CMAKE_EXPORT_NO_PACKAGE_REGISTRY</item>
+ <item>CMAKE_EXPORT_PACKAGE_REGISTRY</item>
<item>CMAKE_EXTRA_GENERATOR</item>
<item>CMAKE_EXTRA_INCLUDE_FILES</item>
<item>CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES</item>
@@ -1305,6 +1321,7 @@
<item>CMAKE_FIND_PACKAGE_NAME</item>
<item>CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY</item>
<item>CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY</item>
+ <item>CMAKE_FIND_PACKAGE_PREFER_CONFIG</item>
<item>CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS</item>
<item>CMAKE_FIND_PACKAGE_SORT_DIRECTION</item>
<item>CMAKE_FIND_PACKAGE_SORT_ORDER</item>
@@ -1315,6 +1332,7 @@
<item>CMAKE_FIND_ROOT_PATH_MODE_PACKAGE</item>
<item>CMAKE_FIND_ROOT_PATH_MODE_PROGRAM</item>
<item>CMAKE_FOLDER</item>
+ <item>CMAKE_FRAMEWORK</item>
<item>CMAKE_FRAMEWORK_PATH</item>
<item>CMAKE_Fortran_FORMAT</item>
<item>CMAKE_Fortran_MODDIR_DEFAULT</item>
@@ -1432,6 +1450,8 @@
<item>CMAKE_MODULE_LINKER_FLAGS</item>
<item>CMAKE_MODULE_LINKER_FLAGS_INIT</item>
<item>CMAKE_MODULE_PATH</item>
+ <item>CMAKE_MSVCIDE_RUN_PATH</item>
+ <item>CMAKE_MSVC_RUNTIME_LIBRARY</item>
<item>CMAKE_NETRC</item>
<item>CMAKE_NETRC_FILE</item>
<item>CMAKE_NINJA_OUTPUT_PATH_PREFIX</item>
@@ -1454,6 +1474,8 @@
<item>CMAKE_PROGRAM_PATH</item>
<item>CMAKE_PROJECT_DESCRIPTION</item>
<item>CMAKE_PROJECT_HOMEPAGE_URL</item>
+ <item>CMAKE_PROJECT_INCLUDE</item>
+ <item>CMAKE_PROJECT_INCLUDE_BEFORE</item>
<item>CMAKE_PROJECT_NAME</item>
<item>CMAKE_PROJECT_VERSION</item>
<item>CMAKE_PROJECT_VERSION_MAJOR</item>
@@ -1465,6 +1487,7 @@
<item>CMAKE_REQUIRED_FLAGS</item>
<item>CMAKE_REQUIRED_INCLUDES</item>
<item>CMAKE_REQUIRED_LIBRARIES</item>
+ <item>CMAKE_REQUIRED_LINK_OPTIONS</item>
<item>CMAKE_REQUIRED_QUIET</item>
<item>CMAKE_ROOT</item>
<item>CMAKE_RUNTIME_OUTPUT_DIRECTORY</item>
@@ -1509,6 +1532,7 @@
<item>CMAKE_SYSTEM_PROGRAM_PATH</item>
<item>CMAKE_SYSTEM_VERSION</item>
<item>CMAKE_Swift_LANGUAGE_VERSION</item>
+ <item>CMAKE_Swift_MODULE_DIRECTORY</item>
<item>CMAKE_THREAD_LIBS_INIT</item>
<item>CMAKE_THREAD_PREFER_PTHREAD</item>
<item>CMAKE_TOOLCHAIN_FILE</item>
@@ -1529,6 +1553,7 @@
<item>CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD</item>
<item>CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD</item>
<item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>
+ <item>CMAKE_VS_JUST_MY_CODE_DEBUGGING</item>
<item>CMAKE_VS_MSBUILD_COMMAND</item>
<item>CMAKE_VS_NsightTegra_VERSION</item>
<item>CMAKE_VS_PLATFORM_NAME</item>
@@ -1658,6 +1683,7 @@
<item>CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR</item>
<item>CPACK_IFW_PACKAGE_RESOURCES</item>
<item>CPACK_IFW_PACKAGE_START_MENU_DIRECTORY</item>
+ <item>CPACK_IFW_PACKAGE_STYLE_SHEET</item>
<item>CPACK_IFW_PACKAGE_TITLE</item>
<item>CPACK_IFW_PACKAGE_TITLE_COLOR</item>
<item>CPACK_IFW_PACKAGE_WATERMARK</item>
@@ -1908,6 +1934,7 @@
<item>CTEST_UPDATE_COMMAND</item>
<item>CTEST_UPDATE_OPTIONS</item>
<item>CTEST_UPDATE_VERSION_ONLY</item>
+ <item>CTEST_UPDATE_VERSION_OVERRIDE</item>
<item>CTEST_USE_LAUNCHERS</item>
<item>CYGWIN</item>
<item>EXECUTABLE_OUTPUT_PATH</item>
@@ -1990,6 +2017,45 @@
<item>XCODE</item>
<item>XCODE_VERSION</item>
</list>
+
+ <list name="environment-variables">
+ <item>CC</item>
+ <item>CFLAGS</item>
+ <item>CMAKE_APPBUNDLE_PATH</item>
+ <item>CMAKE_BUILD_PARALLEL_LEVEL</item>
+ <item>CMAKE_CONFIG_TYPE</item>
+ <item>CMAKE_FRAMEWORK_PATH</item>
+ <item>CMAKE_GENERATOR</item>
+ <item>CMAKE_GENERATOR_INSTANCE</item>
+ <item>CMAKE_GENERATOR_PLATFORM</item>
+ <item>CMAKE_GENERATOR_TOOLSET</item>
+ <item>CMAKE_MSVCIDE_RUN_PATH</item>
+ <item>CMAKE_NO_VERBOSE</item>
+ <item>CMAKE_OSX_ARCHITECTURES</item>
+ <item>CMAKE_PREFIX_PATH</item>
+ <item>CSFLAGS</item>
+ <item>CTEST_INTERACTIVE_DEBUG_MODE</item>
+ <item>CTEST_OUTPUT_ON_FAILURE</item>
+ <item>CTEST_PARALLEL_LEVEL</item>
+ <item>CTEST_PROGRESS_OUTPUT</item>
+ <item>CTEST_USE_LAUNCHERS_DEFAULT</item>
+ <item>CUDACXX</item>
+ <item>CUDAFLAGS</item>
+ <item>CUDAHOSTCXX</item>
+ <item>CXX</item>
+ <item>CXXFLAGS</item>
+ <item>DASHBOARD_TEST_FROM_CTEST</item>
+ <item>DESTDIR</item>
+ <item>FC</item>
+ <item>FFLAGS</item>
+ <item>LDFLAGS</item>
+ <item>MACOSX_DEPLOYMENT_TARGET</item>
+ <item>PATH</item>
+ <item>RC</item>
+ <item>RCFLAGS</item>
+ <item>SWIFTC</item>
+ <item>VERBOSE</item>
+ </list>
<list name="global-properties">
<item>ALLOW_DUPLICATE_CUSTOM_TARGETS</item>
<item>AUTOGEN_SOURCE_GROUP</item>
@@ -2032,6 +2098,7 @@
<item>XCODE_EMIT_EFFECTIVE_PLATFORM_NAME</item>
</list>
<list name="directory-properties">
+ <item>ADDITIONAL_CLEAN_FILES</item>
<item>ADDITIONAL_MAKE_CLEAN_FILES</item>
<item>BINARY_DIR</item>
<item>BUILDSYSTEM_TARGETS</item>
@@ -2064,6 +2131,7 @@
<item>VS_STARTUP_PROJECT</item>
</list>
<list name="target-properties">
+ <item>ADDITIONAL_CLEAN_FILES</item>
<item>ALIASED_TARGET</item>
<item>ANDROID_ANT_ADDITIONAL_OPTIONS</item>
<item>ANDROID_API</item>
@@ -2207,6 +2275,7 @@
<item>MACOSX_FRAMEWORK_INFO_PLIST</item>
<item>MACOSX_RPATH</item>
<item>MANUALLY_ADDED_DEPENDENCIES</item>
+ <item>MSVC_RUNTIME_LIBRARY</item>
<item>NAME</item>
<item>NO_SONAME</item>
<item>NO_SYSTEM_FROM_IMPORTED</item>
@@ -2232,6 +2301,9 @@
<item>STATIC_LIBRARY_FLAGS</item>
<item>STATIC_LIBRARY_OPTIONS</item>
<item>SUFFIX</item>
+ <item>Swift_DEPENDENCIES_FILE</item>
+ <item>Swift_MODULE_DIRECTORY</item>
+ <item>Swift_MODULE_NAME</item>
<item>TYPE</item>
<item>VERSION</item>
<item>VISIBILITY_INLINES_HIDDEN</item>
@@ -2249,8 +2321,12 @@
<item>VS_GLOBAL_ROOTNAMESPACE</item>
<item>VS_IOT_EXTENSIONS_VERSION</item>
<item>VS_IOT_STARTUP_TASK</item>
+ <item>VS_JUST_MY_CODE_DEBUGGING</item>
<item>VS_KEYWORD</item>
<item>VS_MOBILE_EXTENSIONS_VERSION</item>
+ <item>VS_NO_SOLUTION_DEPLOY</item>
+ <item>VS_PACKAGE_REFERENCES</item>
+ <item>VS_PROJECT_IMPORT</item>
<item>VS_SCC_AUXPATH</item>
<item>VS_SCC_LOCALPATH</item>
<item>VS_SCC_PROJECTNAME</item>
@@ -2264,10 +2340,12 @@
<item>WIN32_EXECUTABLE</item>
<item>WINDOWS_EXPORT_ALL_SYMBOLS</item>
<item>XCODE_EXPLICIT_FILE_TYPE</item>
+ <item>XCODE_GENERATE_SCHEME</item>
<item>XCODE_PRODUCT_TYPE</item>
<item>XCODE_SCHEME_ADDRESS_SANITIZER</item>
<item>XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN</item>
<item>XCODE_SCHEME_ARGUMENTS</item>
+ <item>XCODE_SCHEME_DEBUG_AS_ROOT</item>
<item>XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER</item>
<item>XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS</item>
<item>XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE</item>
@@ -2309,6 +2387,8 @@
<item>SKIP_AUTORCC</item>
<item>SKIP_AUTOUIC</item>
<item>SYMBOLIC</item>
+ <item>Swift_DEPENDENCIES_FILE</item>
+ <item>Swift_DIAGNOSTICS_FILE</item>
<item>VS_COPY_TO_OUT_DIR</item>
<item>VS_DEPLOYMENT_CONTENT</item>
<item>VS_DEPLOYMENT_LOCATION</item>
@@ -2375,61 +2455,76 @@
<list name="generator-expressions">
<item>0</item>
<item>1</item>
- <item>AND</item>
- <item>ANGLE-R</item>
<item>BOOL</item>
- <item>BUILD_INTERFACE</item>
- <item>COMMA</item>
- <item>COMPILE_FEATURES</item>
- <item>COMPILE_LANGUAGE</item>
+ <item>AND</item>
+ <item>OR</item>
+ <item>NOT</item>
+ <item>STREQUAL</item>
+ <item>EQUAL</item>
+ <item>IN_LIST</item>
+ <item>VERSION_LESS</item>
+ <item>VERSION_GREATER</item>
+ <item>VERSION_EQUAL</item>
+ <item>VERSION_LESS_EQUAL</item>
+ <item>VERSION_GREATER_EQUAL</item>
+ <item>TARGET_EXISTS</item>
<item>CONFIG</item>
- <item>CXX_COMPILER_ID</item>
- <item>CXX_COMPILER_VERSION</item>
+ <item>PLATFORM_ID</item>
<item>C_COMPILER_ID</item>
+ <item>CXX_COMPILER_ID</item>
+ <item>CUDA_COMPILER_ID</item>
+ <item>Fortran_COMPILER_ID</item>
<item>C_COMPILER_VERSION</item>
- <item>EQUAL</item>
- <item>GENEX_EVAL</item>
+ <item>CXX_COMPILER_VERSION</item>
+ <item>CUDA_COMPILER_VERSION</item>
+ <item>Fortran_COMPILER_VERSION</item>
+ <item>TARGET_POLICY</item>
+ <item>COMPILE_FEATURES</item>
+ <item>COMPILE_LANG_AND_ID</item>
+ <item>COMPILE_LANGUAGE</item>
+ <item>ANGLE-R</item>
+ <item>COMMA</item>
+ <item>SEMICOLON</item>
<item>IF</item>
- <item>INSTALL_INTERFACE</item>
- <item>INSTALL_PREFIX</item>
- <item>IN_LIST</item>
<item>JOIN</item>
- <item>LINK_ONLY</item>
+ <item>REMOVE_DUPLICATES</item>
+ <item>FILTER</item>
<item>LOWER_CASE</item>
- <item>MAKE_C_IDENTIFIER</item>
- <item>NOT</item>
- <item>OR</item>
- <item>PLATFORM_ID</item>
- <item>SEMICOLON</item>
- <item>SHELL_PATH</item>
- <item>STREQUAL</item>
- <item>TARGET_BUNDLE_CONTENT_DIR</item>
- <item>TARGET_BUNDLE_DIR</item>
- <item>TARGET_EXISTS</item>
+ <item>UPPER_CASE</item>
+ <item>GENEX_EVAL</item>
+ <item>TARGET_GENEX_EVAL</item>
+ <item>TARGET_NAME_IF_EXISTS</item>
<item>TARGET_FILE</item>
- <item>TARGET_FILE_DIR</item>
+ <item>TARGET_FILE_BASE_NAME</item>
+ <item>TARGET_FILE_PREFIX</item>
+ <item>TARGET_FILE_SUFFIX</item>
<item>TARGET_FILE_NAME</item>
- <item>TARGET_GENEX_EVAL</item>
+ <item>TARGET_FILE_DIR</item>
<item>TARGET_LINKER_FILE</item>
- <item>TARGET_LINKER_FILE_DIR</item>
+ <item>TARGET_LINKER_FILE_BASE_NAME</item>
+ <item>TARGET_LINKER_FILE_PREFIX</item>
+ <item>TARGET_LINKER_FILE_SUFFIX</item>
<item>TARGET_LINKER_FILE_NAME</item>
- <item>TARGET_NAME</item>
- <item>TARGET_NAME_IF_EXISTS</item>
- <item>TARGET_OBJECTS</item>
+ <item>TARGET_LINKER_FILE_DIR</item>
+ <item>TARGET_SONAME_FILE</item>
+ <item>TARGET_SONAME_FILE</item>
+ <item>TARGET_SONAME_FILE_NAME</item>
+ <item>TARGET_SONAME_FILE_DIR</item>
<item>TARGET_PDB_FILE</item>
- <item>TARGET_PDB_FILE_DIR</item>
+ <item>TARGET_PDB_FILE_BASE_NAME</item>
<item>TARGET_PDB_FILE_NAME</item>
- <item>TARGET_POLICY</item>
+ <item>TARGET_PDB_FILE_DIR</item>
+ <item>TARGET_BUNDLE_DIR</item>
+ <item>TARGET_BUNDLE_CONTENT_DIR</item>
<item>TARGET_PROPERTY</item>
- <item>TARGET_SONAME_FILE</item>
- <item>TARGET_SONAME_FILE_DIR</item>
- <item>TARGET_SONAME_FILE_NAME</item>
- <item>UPPER_CASE</item>
- <item>VERSION_EQUAL</item>
- <item>VERSION_GREATER</item>
- <item>VERSION_GREATER_EQUAL</item>
- <item>VERSION_LESS</item>
- <item>VERSION_LESS_EQUAL</item>
+ <item>INSTALL_PREFIX</item>
+ <item>TARGET_NAME</item>
+ <item>LINK_ONLY</item>
+ <item>INSTALL_INTERFACE</item>
+ <item>BUILD_INTERFACE</item>
+ <item>MAKE_C_IDENTIFIER</item>
+ <item>TARGET_OBJECTS</item>
+ <item>SHELL_PATH</item>
</list>
<contexts>
@@ -2662,11 +2757,18 @@
<DetectChar attribute="Normal Text" context="execute_process_ctx_op" char="(" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="execute_process_ctx_op">
+ <DetectChar attribute="Normal Text" context="execute_process_ctx_op_nested" char="(" />
<IncludeRules context="EndCmdPop2" />
<keyword attribute="Named Args" context="#stay" String="execute_process_nargs" />
<keyword attribute="Special Args" context="#stay" String="execute_process_sargs" />
<IncludeRules context="User Function Args" />
</context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="execute_process_ctx_op_nested">
+ <IncludeRules context="EndCmdPop" />
+ <keyword attribute="Named Args" context="#stay" String="execute_process_nargs" />
+ <keyword attribute="Special Args" context="#stay" String="execute_process_sargs" />
+ <IncludeRules context="User Function Args" />
+ </context>
<context attribute="Normal Text" lineEndContext="#stay" name="file_ctx">
<DetectChar attribute="Normal Text" context="file_ctx_op" char="(" />
</context>
@@ -2978,18 +3080,30 @@
<DetectChar attribute="Normal Text" context="add_custom_command_ctx_op" char="(" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="add_custom_command_ctx_op">
+ <DetectChar attribute="Normal Text" context="add_custom_command_ctx_op_nested" char="(" />
<IncludeRules context="EndCmdPop2" />
<keyword attribute="Named Args" context="#stay" String="add_custom_command_nargs" />
<IncludeRules context="User Function Args" />
</context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="add_custom_command_ctx_op_nested">
+ <IncludeRules context="EndCmdPop" />
+ <keyword attribute="Named Args" context="#stay" String="add_custom_command_nargs" />
+ <IncludeRules context="User Function Args" />
+ </context>
<context attribute="Normal Text" lineEndContext="#stay" name="add_custom_target_ctx">
<DetectChar attribute="Normal Text" context="add_custom_target_ctx_op" char="(" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="add_custom_target_ctx_op">
+ <DetectChar attribute="Normal Text" context="add_custom_target_ctx_op_nested" char="(" />
<IncludeRules context="EndCmdPop2" />
<keyword attribute="Named Args" context="#stay" String="add_custom_target_nargs" />
<IncludeRules context="User Function Args" />
</context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="add_custom_target_ctx_op_nested">
+ <IncludeRules context="EndCmdPop" />
+ <keyword attribute="Named Args" context="#stay" String="add_custom_target_nargs" />
+ <IncludeRules context="User Function Args" />
+ </context>
<context attribute="Normal Text" lineEndContext="#stay" name="add_definitions_ctx">
<DetectChar attribute="Normal Text" context="add_definitions_ctx_op" char="(" />
</context>
@@ -3039,10 +3153,16 @@
<DetectChar attribute="Normal Text" context="add_test_ctx_op" char="(" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="add_test_ctx_op">
+ <DetectChar attribute="Normal Text" context="add_test_ctx_op_nested" char="(" />
<IncludeRules context="EndCmdPop2" />
<keyword attribute="Named Args" context="#stay" String="add_test_nargs" />
<IncludeRules context="User Function Args" />
</context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="add_test_ctx_op_nested">
+ <IncludeRules context="EndCmdPop" />
+ <keyword attribute="Named Args" context="#stay" String="add_test_nargs" />
+ <IncludeRules context="User Function Args" />
+ </context>
<context attribute="Normal Text" lineEndContext="#stay" name="aux_source_directory_ctx">
<DetectChar attribute="Normal Text" context="aux_source_directory_ctx_op" char="(" />
</context>
@@ -3619,6 +3739,7 @@
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_STANDARD_LIBRARIES\b" />
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_VISIBILITY_PRESET\b" />
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_ARCHIVE_OUTPUT_DIRECTORY_&id_re;\b" />
+ <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_ARGV[0-9]+\b" />
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_&id_re;\b" />
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_DISABLE_FIND_PACKAGE_&id_re;\b" />
<RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_EXE_LINKER_FLAGS_&id_re;\b" />
@@ -3727,11 +3848,28 @@
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
- <RegExpr attribute="Environment Variable Substitution" context="#stay" String="\$ENV\{\s*[\w-]+\s*\}" />
+ <RegExpr attribute="Cache Variable Substitution" context="#stay" String="\$CACHE\{\s*[\w-]+\s*\}" />
+ <RegExpr attribute="Environment Variable Substitution" context="EnvVarSubst" String="\$ENV\{\s*[\w-]+\s*\}" lookAhead="true" />
<Detect2Chars attribute="Variable Substitution" context="VarSubst" char="$" char1="{" />
<RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
</context>
+ <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubst">
+ <DetectIdentifier />
+ <DetectChar attribute="Environment Variable Substitution" context="EnvVarSubstVar" char="{" />
+ <DetectChar attribute="Environment Variable Substitution" context="#pop" char="}" />
+ </context>
+
+ <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubstVar">
+ <keyword attribute="Standard Environment Variable" context="#stay" String="environment-variables" insensitive="false" />
+ <RegExpr attribute="Standard Environment Variable" context="#stay" String="\b&id_re;_DIR\b" />
+ <RegExpr attribute="Standard Environment Variable" context="#stay" String="\b&id_re;_ROOT\b" />
+ <RegExpr attribute="Standard Environment Variable" context="#stay" String="\bASM&id_re;\b" />
+ <RegExpr attribute="Standard Environment Variable" context="#stay" String="\bASM&id_re;FLAGS\b" />
+ <DetectIdentifier />
+ <DetectChar attribute="Environment Variable Substitution" context="#pop#pop" char="}" />
+ </context>
+
<context attribute="Variable Substitution" lineEndContext="#pop" name="VarSubst">
<IncludeRules context="Detect Builtin Variables" />
<DetectIdentifier />
@@ -3830,10 +3968,12 @@
<itemData name="Strings" defStyleNum="dsString" spellChecking="true" />
<itemData name="Escapes" defStyleNum="dsChar" spellChecking="false" />
<itemData name="Builtin Variable" defStyleNum="dsDecVal" color="#c09050" selColor="#c09050" spellChecking="false" />
+ <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
<itemData name="Variable Substitution" defStyleNum="dsDecVal" spellChecking="false" />
<itemData name="@Variable Substitution" defStyleNum="dsBaseN" spellChecking="false" />
- <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
+ <itemData name="Cache Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
<itemData name="Environment Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
+ <itemData name="Standard Environment Variable" defStyleNum="dsFloat" spellChecking="false" />
<itemData name="Generator Expression Keyword" defStyleNum="dsKeyword" color="#b84040" selColor="#b84040" spellChecking="false" />
<itemData name="Generator Expression" defStyleNum="dsOthers" color="#b86050" selColor="#b86050" spellChecking="false" />
<itemData name="Comment" defStyleNum="dsComment" spellChecking="true" />
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/css.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/css.xml
index 25a614e826f..228bb45b854 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/syntax/css.xml
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/css.xml
@@ -38,7 +38,8 @@ Changelog:
-->
-<language name="CSS" version="8" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+<language name="CSS" version="9" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+ <!-- https://www.w3.org/Style/CSS/current-work -->
<highlighting>
<list name="properties">
@@ -1258,8 +1259,9 @@ Changelog:
<item>selection</item>
</list>
- <list name="pseudoclass-not">
+ <list name="pseudoclass-selector">
<item>not</item>
+ <item>matches</item>
</list>
<list name="pseudoclasses-@page">
@@ -1383,8 +1385,8 @@ Changelog:
<keyword attribute="Value Keyword" context="#stay" String="value keywords" />
<keyword attribute="Value" context="#stay" String="values" />
<keyword attribute="Color" context="#stay" String="colors" />
- <RegExpr attribute="Color" context="#stay" String="#([0-9A-Fa-f]{3}){1,2}\b" />
- <RegExpr attribute="Number" context="FindUnits" String="[-+]?[0-9.]+(?![-+])" />
+ <RegExpr attribute="Color" context="#stay" String="#([0-9A-Fa-f]{3,4}){1,2}\b" />
+ <RegExpr attribute="Number" context="FindUnits" String="[-+]?([0-9]+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?(?![-+])" />
<RegExpr attribute="Normal Text" context="#stay" String="[-]?(&nmstart;)(&nmchar;)*" />
</context>
@@ -1393,7 +1395,8 @@ Changelog:
</context>
<context name="FindUnits" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
- <RegExpr attribute="Unit" context="#stay" String="(%|(em|ex|ch|rem|vw|vh|vm|px|in|cm|mm|pt|pc|deg|rad|grad|turn|ms|s|Hz|kHz)\b)(?![-+])" />
+ <!-- https://drafts.csswg.org/css-values-4/#lengths -->
+ <RegExpr attribute="Unit" context="#stay" String="(%|(em|ex|cap|ch|ic|rem|lh|rlh|vw|vh|vi|vb|vmin|vmax|cm|mm|Q|in|pc|pt|px|deg|rad|grad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|x)\b)(?![-+])" />
</context>
<!-- find strings // "some words" 'some words' -->
@@ -1548,7 +1551,7 @@ Changelog:
<context name="SelectorPseudo" attribute="Selector Pseudo" lineEndContext="#pop">
<DetectChar attribute="Selector Pseudo" context="SelectorPseudoElements" char=":" />
- <keyword attribute="Selector Pseudo" context="SelectorPseudoValueSelector" String="pseudoclass-not" />
+ <keyword attribute="Selector Pseudo" context="SelectorPseudoValueSelector" String="pseudoclass-selector" />
<keyword attribute="Selector Pseudo" context="SelectorPseudoValue" String="pseudoclasses" />
<RegExpr attribute="Selector Pseudo" context="SelectorPseudoValue" String="[-a-zA-Z][-a-zA-Z0-9]*" />
</context>
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/html.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/html.xml
index 107e1067da8..7f0d52b353c 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/syntax/html.xml
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/html.xml
@@ -5,7 +5,7 @@
<!ENTITY attributeName "[A-Za-z_:*#\(\[][\)\]\w.:_-]*">
<!ENTITY entref "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
]>
-<language name="HTML" version="7" kateversion="3.4" section="Markup" extensions="*.htm;*.html;*.shtml;*.shtm" mimetype="text/html" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+<language name="HTML" version="9" kateversion="5.53" section="Markup" extensions="*.htm;*.html;*.shtml;*.shtm" mimetype="text/html" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
<highlighting>
<contexts>
@@ -20,8 +20,19 @@
<StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
<RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" insensitive="true" beginRegion="doctype" />
<RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:-]*" beginRegion="pi" />
+ <IncludeRules context="FindSpecialHTMLTags" />
+ <IncludeRules context="FindHTMLTags" />
+ <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
+ <IncludeRules context="FindEntityRefs" />
+ </context>
+
+ <!-- This allows you to insert HTML tags in other syntax definitions -->
+ <context name="FindSpecialHTMLTags" attribute="Normal Text" lineEndContext="#stay">
<RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="true" beginRegion="style" />
<RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="true" beginRegion="script" />
+ </context>
+
+ <context name="FindHTMLTags" attribute="Normal Text" lineEndContext="#stay">
<RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
<RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
<RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
@@ -54,8 +65,6 @@
<RegExpr attribute="Element" context="El Close" String="&lt;/nav\b" insensitive="true" endRegion="nav" />
<RegExpr attribute="Element" context="El Close" String="&lt;/section\b" insensitive="true" endRegion="section" />
<RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
- <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
- <IncludeRules context="FindEntityRefs" />
</context>
<context name="FindEntityRefs" attribute="Other Text" lineEndContext="#stay">
@@ -230,7 +239,7 @@
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&quot;x-tmpl-mustache&quot;"/>
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&apos;x-tmpl-mustache&apos;"/>
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&quot;text/mustache&quot;"/>
- <StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&apos;text/mustache&apos;"/>
+ <StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&apos;text/mustache&apos;"/>
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&quot;text/x-mustache-template&quot;"/>
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&apos;text/x-mustache-template&apos;"/>
<StringDetect attribute="Value" context="#pop#pop!MustacheJS" String="&quot;text/x-handlebars-template&quot;"/>
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml
index 28ad8e8a33d..e9f80a534ea 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/json.xml
@@ -12,7 +12,7 @@
** http://tools.ietf.org/html/rfc4627
***************************************************************************
-->
-<language name="JSON" section="Markup" version="3" kateversion="2.4" extensions="*.json;.kateproject;.arcconfig;*.gltf" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
+<language name="JSON" section="Markup" version="4" kateversion="2.4" extensions="*.json;.kateproject;.arcconfig;*.geojson;*.gltf" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
<highlighting>
<list name="Constants">
<item>null</item>
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml
index f88848729fb..7d11b34e6b6 100644
--- a/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/markdown.xml
@@ -6,6 +6,7 @@
Dual-Licensed under both GPL and BSD licenses.
Extended 2009 Claes Holmerson. http://github.com/claes/kate-markdown/
+ Extended 2019 Nibaldo González S. <nibgonz@gmail.com> (changes under MIT license).
-->
<!--
The [^\s]{1} is in the regex to avoid interfering with bullet list which
@@ -15,189 +16,623 @@
Match space or newline, followed by "*", followed by one non-space,
followed by anything non-asterisk, followed by "*", followed by
space, end-of-sentence punctuation, or the end of the line.
+
+ TODO: We can be more specific and highlight text combinations in bold,
+ italic and strikethrough.
+ Example: **bold text and _italic and bold text_**
+ __bold and ~~strikeout and bold~~__
-->
<!DOCTYPE language SYSTEM "language.dtd"
[
-<!ENTITY strongemphasisregex "(\s|^)[\*_]{3}[^\*_]+[\*_]{3}(\s|\.|,|;|:|\-|\?|$)">
-<!ENTITY strongregex "(\s|^)[\*_]{2}[^\s]{1}[^\*_]+[\*_]{2}(\s|\.|,|;|:|\-|\?|$)">
-<!ENTITY emphasisregex "(\s|^)[\*_]{1}[^\s]{1}[^\*_]+[\*_]{1}(\s|\.|,|;|:|\-|\?|$)">
-<!ENTITY reflinkregex '\[[^\]\^]+\]\s*\[[^\]]*\]\s*(\s+\"[^\"]*\"){0,1}'>
-<!ENTITY reflinktargetregex '\[[^\]\^]+\]\:\s+[^\s]+(\s+\"[^\"]*\"){0,1}'>
-<!ENTITY footnoteregex "\[\^[^\]]+\]">
-<!ENTITY inlinelinkregex "\[[^\]\^]+\]\s*\([^\(]*\)">
-<!ENTITY inlineimageregex "\!\[[^\]\^]+\]\([^\(]*\)">
-<!ENTITY refimageregex "\!\[[^\]\^]+\]\[[^\[]*\]">
-<!ENTITY autolinkregex '&lt;(https?|ftp):[^\"&gt;\s]+&gt;'>
-<!ENTITY mailtolinkregex "&lt;(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)&gt;">
-<!ENTITY rulerregex "\s*([\*\-_]\s?){3,}\s*">
+<!-- NOTE: To correctly detect bold, italic or strike out text, use minimal="true" in RegExpr rules -->
+<!ENTITY contentregex_ast "(?:(?:[^\*\s\\]|\\.)(?:[^\\]|\\.)*)?(?:[^\*\s\\]|\\\S)">
+<!ENTITY contentregex_und "(?:(?:[^_\s\\]|\\.)(?:[^\\]|\\.)*)?(?:[^_\s\\]|\\\S)">
+<!-- strong + emphasis text -->
+<!ENTITY strongemphasisregex_ast "\*{3,5}&contentregex_ast;\*{3}">
+<!ENTITY strongemphasisregex_und "\b_{3,5}&contentregex_und;_{3}">
+<!ENTITY strongemphasisregex_ast_und "\*{2,5}(?:(?:_|_{3}|_{5})&contentregex_und;_+|(?:_{2}|_{4})&contentregex_und;_)\*{2}">
+<!ENTITY strongemphasisregex_ast_und2 "\*_{2,5}&contentregex_und;_{2,5}\*(?!\*)">
+<!ENTITY strongemphasisregex_und_ast "\b_{2,5}(?:(?:\*|\*{3}|\*{5})&contentregex_ast;\*+|(?:\*{2}|\*{4})&contentregex_ast;\*)_{2}">
+<!ENTITY strongemphasisregex_und_ast2 "\b_(?:\*{2,5}&contentregex_ast;\*{2,5}_{0,4}|_{0,4}\*{2,5}&contentregex_ast;\*{2,5})_\b">
+<!-- strong text -->
+<!ENTITY strongregex_ast "\*{2}(?:&contentregex_ast;\*{2}|\*{1,3}&contentregex_ast;\*{2}(?!\*))">
+<!ENTITY strongregex_und "\b_{2}(?:&contentregex_und;_{2}|_{1,3}&contentregex_und;_{2}(?!_))">
+<!-- emphasis text -->
+<!ENTITY emphasisregex_ast "\*(?:&contentregex_ast;\*|\*{1,4}&contentregex_ast;\*(?!\*))">
+<!ENTITY emphasisregex_und "\b_(?:&contentregex_und;_+|_{1,4}&contentregex_und;_)\b">
+<!-- links -->
+<!ENTITY startlink "(?:https?|ftp)\://">
+<!ENTITY link "&startlink;[^&quot;&gt;\s]+">
+<!-- link in normal text -->
+<!ENTITY implicitlink "\b&startlink;[^&quot;&gt;\s`\)]*[^\s!&quot;&apos;`\(\)\*,\.:;&lt;&gt;\?~\]\}\\](?=[[:punct:]]*(?:[\s\)]|$))">
+<!-- references: [name], [name][id], [name][id] "title", [name](https://example.com) -->
+<!ENTITY refchar "(?:\\.|[^\]\\])">
+<!ENTITY refname "(?:\\.|[^\s\[\]\\])&refchar;*">
+<!ENTITY reflinkid "\s*(?:&refname;)?">
+<!ENTITY reflinkidregex "(?:\s?\[&reflinkid;\]|\((?:\\.|[^\(\)\\])*\))">
+<!ENTITY reflinkregex "\[(?:(?=\s*&refname;\])|\s+(?=\]))">
+<!-- target ref.: [id]: https://example.com "Title" -->
+<!ENTITY reflinktargetregex '\[\s*(?:&refname;|\s)\]\:\s+(?=\S)'>
+<!-- footnote: [^name] -->
+<!ENTITY footnoteregex "\[\^&refchar;+\]">
+<!-- image: ![title](https://example.com), ![title][id] -->
+<!ENTITY startinlineimage "\!\[(?:\\.|[^\[\]\\])*\]\(">
+<!ENTITY endinlineimage "(?:\\.|[^\(\)\\])*\)">
+<!ENTITY inlineimageregex "&startinlineimage;(?=&endinlineimage;)">
+<!ENTITY refimageregex "\!\[(?:\\.|[^\[\]\\])*\]\[&reflinkid;\]">
+<!-- autolink & email: <https://example.com>, <example@kde.org>, <mailto:example@kde.org> -->
+<!ENTITY autolinkregex '&lt;&link;&gt;'>
+<!ENTITY email "[\-\.\w]+\@[\-a-z0-9]+(?:\.[\-a-z0-9]+)*\.[a-z]+">
+<!ENTITY mailtolinkregex "&lt;(?:mailto:)?(?=&email;&gt;)">
+<!-- horizontal rule: avoid conflicts with strong-emphasis text, lists and code blocks -->
+<!ENTITY rulerregex "\s*(?:(?:\*\s*){3,}|(?:_\s*){3,}|(?:\-\s*){3,})\s*$">
<!-- two spaces at end of line generates linebreak -->
<!ENTITY linebreakregex " $">
-<!ENTITY strikeoutregex "[~]{2}[^~].*[^~][~]{2}">
-<!-- pandoc style -->
+<!-- strikethrough text, pandoc style -->
+<!ENTITY strikeoutregex "[~]{2}[^~](?:.*[^~])?[~]{2}">
+<!-- start of fenced code block -->
+<!ENTITY fcode "(`{3,}|~{3,})">
+<!-- end of line & empty line -->
+<!ENTITY end "\s*$">
+<!ENTITY emptyline "^\s*$">
+<!-- indented code block -->
+<!ENTITY indentedcodeblock "(?:\s{4}|\t).*$">
+<!-- bullet of list -->
+<!ENTITY listbullet "[\*\+\-]">
+<!-- metadata key & name of html tag -->
+<!ENTITY metadatakey "[a-zA-Z0-9][\w\-\s]*\:">
+<!ENTITY htmlname "[A-Za-z_\:][\w\.\:\-]*">
+<!-- comment -->
+<!ENTITY startcomment "&lt;!--">
+<!ENTITY endcomment "--&gt;">
+<!ENTITY checkbox "\[[ x]\](?=\s)">
]>
-<language name="Markdown" version="6" kateversion="5.0" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
+
+<language name="Markdown" version="10" kateversion="5.53" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
<highlighting>
<contexts>
- <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text">
- <DetectChar context="blockquote" char="&gt;" column="0"/>
- <RegExpr attribute="h1" String="^#\s.*[#]?$"/>
- <RegExpr attribute="h2" String="^##\s.*[#]?$"/>
- <RegExpr attribute="h3" String="^###\s.*[#]?$"/>
- <RegExpr attribute="h4" String="^####\s.*[#]?$"/>
- <RegExpr attribute="h5" String="^#####\s.*[#]?$"/>
- <RegExpr attribute="h6" String="^######\s.*[#]?$"/>
- <RegExpr attribute="ruler" String="&rulerregex;"/>
- <RegExpr attribute="strong" String="&strongregex;"/>
- <RegExpr attribute="emphasis" String="&emphasisregex;"/>
- <RegExpr attribute="strongemphasis" String="&strongemphasisregex;"/>
- <RegExpr attribute="code" String="^([\s]{4,}|\t+).*$"/>
- <RegExpr context="bullet" String="^[\*\+\-]\s"/>
- <RegExpr context="numlist" String="^[\d]+\.\s"/>
- <RegExpr attribute="meta" String="^(Title|Author|Date|Copyright|Revision|CSS|LaTeX\ XSLT|Categories|Tags|BaseName|Excerpt):(.*)+$"/>
- <IncludeRules context="inc"/>
+ <!-- Start of the Markdown document: find metadata or code block -->
+ <context name="Start Document" attribute="Normal Text" lineEndContext="Normal Text" lineEmptyContext="Normal Text" fallthrough="true" fallthroughContext="Normal Text">
+ <!-- Some titles: (Title|Author|Date|Copyright|Revision|CSS|LaTeX\ XSLT|Categories|Tags|BaseName|Excerpt) -->
+ <!-- Metadata: Markdown format -->
+ <RegExpr attribute="Metadata" context="metadata" String="\-{3}&end;" column="0" beginRegion="metadata"/>
+ <!-- Metadata: MultiMarkdown format -->
+ <RegExpr attribute="Metadata Title" context="metadata-mm-value" String="^&metadatakey;(?=\s|$)" column="0"/>
+ <!-- Code Block -->
+ <RegExpr attribute="Code" context="find-code-block-start" String="^&indentedcodeblock;" column="0"/>
+ </context>
+ <context name="metadata" attribute="Metadata" lineEndContext="#stay">
+ <StringDetect attribute="Metadata" context="#pop!Normal Text" String="---" column="0" endRegion="metadata"/>
+ <StringDetect attribute="Metadata" context="#pop!Normal Text" String="..." column="0" endRegion="metadata"/>
+ <RegExpr attribute="Metadata Title" String="^&metadatakey;(?=\s|$)" column="0"/>
</context>
- <context attribute="blockquote" lineEndContext="#stay" lineEmptyContext="#pop" name="blockquote">
- <RegExpr attribute="bq-strong" String="&strongregex;"/>
- <RegExpr attribute="bq-emphasis" String="&emphasisregex;"/>
+ <context name="metadata-mm-value" attribute="Metadata" lineEndContext="#pop!metadata-mm"/>
+ <context name="metadata-mm" attribute="Metadata" lineEndContext="#stay" lineEmptyContext="#pop!Normal Text" fallthrough="true" fallthroughContext="#pop!Normal Text">
+ <!-- Find Metadata key or value -->
+ <RegExpr attribute="Metadata Title" context="#pop!metadata-mm-value" String="^&metadatakey;(?=\s|$)" column="0"/>
+ <RegExpr attribute="Metadata" context="#pop!metadata-mm-value" String="^(?:\s{4}|\t)" column="0"/>
+ </context>
+ <context name="find-code-block-start" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="#stay" fallthrough="true" fallthroughContext="#pop!Normal Text">
+ <IncludeRules context="find-code-block"/>
+ </context>
+
+ <!-- Normal Text Document -->
+ <context name="Normal Text" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="find-code-block">
+ <!-- Header -->
+ <DetectChar context="find-header" char="#" column="0" lookAhead="true"/>
+ <RegExpr attribute="Header H1" String="(?:\=\s*){2,}$" firstNonSpace="true"/>
+ <!-- Highlight code block after line only with spaces or comment -->
+ <RegExpr attribute="Normal Text" context="find-code-block" String="&emptyline;" column="0"/>
+ <StringDetect attribute="Comment" context="find-code-block" String="&startcomment;" column="0" lookAhead="true"/>
+ <!-- Horizontal rules, Blockquotes and Lists.
+ NOTE: The indentation of the lists is captured. -->
+ <RegExpr attribute="Horizontal Rule" context="find-code-block" String="^&rulerregex;" column="0"/>
+ <DetectChar attribute="Blockquote" context="blockquote" char="&gt;" firstNonSpace="true"/>
+ <RegExpr attribute="List" context="list" String="(\s*)&listbullet;(\s+)" column="0"/>
+ <RegExpr attribute="Number List" context="numlist" String="(\s*)\d\.(\s+)" column="0"/>
+ <RegExpr attribute="Number List" context="numlist2" String="(\s*)\d\d+\.(\s+)" column="0"/>
+ <!-- Find Strong, Emphasis and Strikethrough Text -->
+ <DetectChar context="find-strong-normal" char="*" lookAhead="true"/>
+ <DetectChar context="find-emphasis-normal" char="_" lookAhead="true"/>
+ <RegExpr attribute="Strikethrough Text" minimal="true" String="&strikeoutregex;"/>
+ <!-- Common -->
<IncludeRules context="inc"/>
+ <RegExpr attribute="Normal Text: Link" String="&implicitlink;"/>
+ </context>
+ <!-- Find indented code blocks. These are only allowed after an empty line or on the first line -->
+ <context name="find-code-block" attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="#stay" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr attribute="Code" String="^&indentedcodeblock;" column="0"/>
+ <RegExpr attribute="Normal Text" String="&end;" />
+ <RegExpr attribute="Comment" context="comment" String="\s*&startcomment;" column="0" beginRegion="comment"/>
+ <RegExpr attribute="Comment" context="comment" String="\s*&startcomment;(?=.*&endcomment;)" beginRegion="comment"/>
</context>
- <context attribute="bullet" lineEndContext="#stay" lineEmptyContext="#pop" name="bullet">
- <RegExpr attribute="bl-strong" String="&strongregex;"/>
- <RegExpr attribute="bl-emphasis" String="&emphasisregex;"/>
+
+ <context name="find-header" attribute="Normal Text" lineEndContext="#pop">
+ <RegExpr attribute="Header H1" context="#pop" String="^#\s.*[#]?$"/>
+ <RegExpr attribute="Header H2" context="#pop" String="^##\s.*[#]?$"/>
+ <RegExpr attribute="Header H3" context="#pop" String="^###\s.*[#]?$"/>
+ <RegExpr attribute="Header H4" context="#pop" String="^####\s.*[#]?$"/>
+ <RegExpr attribute="Header H5" context="#pop" String="^#####\s.*[#]?$"/>
+ <RegExpr attribute="Header H6" context="#pop" String="^######\s.*[#]?$"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="#"/>
+ </context>
+ <context name="find-strong-normal" attribute="Normal Text" lineEndContext="#pop">
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und;"/>
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und2;"/>
+ <RegExpr attribute="Strong Text" context="#pop" minimal="true" String="&strongregex_ast;"/>
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast;"/>
+ <RegExpr attribute="Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_ast;"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="*"/>
+ </context>
+ <context name="find-emphasis-normal" attribute="Normal Text" lineEndContext="#pop">
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast;"/>
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast2;"/>
+ <RegExpr attribute="Strong Text" context="#pop" minimal="true" String="&strongregex_und;"/>
+ <RegExpr attribute="Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und;"/>
+ <RegExpr attribute="Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_und;"/>
+ <DetectChar attribute="Normal Text" context="#pop" char="_"/>
+ </context>
+
+ <!-- Blockquote -->
+ <context name="blockquote" attribute="Blockquote: Normal Text" lineEndContext="#stay" lineEmptyContext="#pop">
+ <IncludeRules context="default-blockquote-1"/>
+ <!-- Find code block -->
+ <RegExpr attribute="Normal Text" context="#pop!find-code-block" String="&emptyline;" column="0"/>
+ <StringDetect attribute="Comment" context="#pop!find-code-block" String="&startcomment;" column="0" lookAhead="true"/>
+ <IncludeRules context="default-blockquote-2"/>
+ </context>
+ <!-- Blockquote within a list -->
+ <context name="blockquote-list" attribute="Blockquote: Normal Text" lineEndContext="#stay" lineEmptyContext="#pop">
+ <IncludeRules context="default-blockquote-1"/>
+ <!-- Don't find code block -->
+ <RegExpr attribute="Normal Text" context="#pop" String="&emptyline;" column="0"/>
+ <StringDetect attribute="Comment" context="#pop!comment" String="&startcomment;" firstNonSpace="true"/>
+ <IncludeRules context="default-blockquote-2"/>
+ </context>
+
+ <context name="default-blockquote-1" attribute="Blockquote: Normal Text" lineEndContext="#stay">
+ <DetectChar attribute="Blockquote" char="&gt;" firstNonSpace="true"/>
+ <!-- End with header, horizontal rule or list/numlist -->
+ <RegExpr context="#pop" String="(?:\s*(?:&listbullet;|[\d]+\.)\s|#{1,6}\s|&rulerregex;)" column="0" lookAhead="true"/>
+ </context>
+ <context name="default-blockquote-2" attribute="Blockquote: Normal Text" lineEndContext="#stay">
+ <!-- Strong, emphasis, strong-emphasis and strikethrough text -->
+ <AnyChar context="find-strong-emphasis-blockquote" String="*_" lookAhead="true"/>
+ <RegExpr attribute="Blockquote: Strikethrough Text" minimal="true" String="&strikeoutregex;"/>
+ <!-- Common -->
<IncludeRules context="inc"/>
+ <RegExpr attribute="Blockquote: Link" String="&implicitlink;"/>
+ </context>
+ <context name="find-strong-emphasis-blockquote" attribute="Blockquote: Normal Text" lineEndContext="#pop">
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und;"/>
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast;"/>
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und2;"/>
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast2;"/>
+ <RegExpr attribute="Blockquote: Strong Text" context="#pop" minimal="true" String="&strongregex_ast;"/>
+ <RegExpr attribute="Blockquote: Strong Text" context="#pop" minimal="true" String="&strongregex_und;"/>
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast;"/>
+ <RegExpr attribute="Blockquote: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und;"/>
+ <RegExpr attribute="Blockquote: Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_ast;" />
+ <RegExpr attribute="Blockquote: Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_und;"/>
+ <AnyChar attribute="Blockquote: Normal Text" context="#pop" String="*_"/>
+ </context>
+
+ <!-- List and Numbered List -->
+ <!-- NOTE: The indentation of the lists is captured. New paragraphs, code blocks, blockquotes or
+ horizontal rules must have an indentation equal to or greater than the list, to be part of it. -->
+ <!-- * list -->
+ <context name="list" attribute="List: Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="content-list">
+ <!-- Find indented code blocks, blockquotes and horizontal rules -->
+ <RegExpr attribute="Code" String="%1%2\s&indentedcodeblock;" column="0" dynamic="true"/>
+ <RegExpr attribute="Blockquote" context="blockquote-list" String="%1%2\s+&gt;" column="0" dynamic="true"/>
+ <RegExpr attribute="Horizontal Rule" String="%1%2\s+&rulerregex;" column="0" dynamic="true"/>
+ <RegExpr String="&emptyline;" column="0"/>
+ <!-- Text with the same indentation captured corresponds to the item list -->
+ <RegExpr context="content-list" String="%1%2\s" column="0" lookAhead="true" dynamic="true"/>
+ <!-- Finish when the text has a lower indentation than the list -->
+ <RegExpr context="#pop" String="^\s*\S" column="0" lookAhead="true"/>
+ <!-- Highlight checkbox at the start of the item (task list) -->
+ <RegExpr attribute="List: Checkbox" context="content-list" String="\s*&checkbox;"/>
</context>
- <context attribute="numlist" lineEndContext="#stay" lineEmptyContext="#pop" name="numlist">
- <RegExpr attribute="nl-strong" String="&strongregex;"/>
- <RegExpr attribute="nl-emphasis" String="&emphasisregex;"/>
+ <!-- 1. numlist (one digit) -->
+ <context name="numlist" attribute="List: Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="content-list">
+ <!-- Find indented code blocks, blockquotes and horizontal rules -->
+ <RegExpr attribute="Code" String="%1%2\s{2}&indentedcodeblock;" column="0" dynamic="true"/>
+ <RegExpr attribute="Blockquote" context="blockquote-list" String="%1%2\s{2,}&gt;" column="0" dynamic="true"/>
+ <RegExpr attribute="Horizontal Rule" String="%1%2\s{2,}&rulerregex;" column="0" dynamic="true"/>
+ <RegExpr String="&emptyline;" column="0"/>
+ <!-- Text with the same indentation captured -->
+ <RegExpr context="content-list" String="%1%2\s{2}" column="0" lookAhead="true" dynamic="true"/>
+ <!-- Finish when the text has a lower indentation than the list -->
+ <RegExpr context="#pop" String="^\s*\S" column="0" lookAhead="true"/>
+ </context>
+ <!-- 10. numlist (two or more digits) -->
+ <context name="numlist2" attribute="List: Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="content-list">
+ <!-- Find indented code blocks, blockquotes and horizontal rules -->
+ <RegExpr attribute="Code" String="%1%2\s{3}&indentedcodeblock;" column="0" dynamic="true"/>
+ <RegExpr attribute="Blockquote" context="blockquote-list" String="%1%2\s{3,}&gt;" column="0" dynamic="true"/>
+ <RegExpr attribute="Horizontal Rule" String="%1%2\s{3,}&rulerregex;" column="0" dynamic="true"/>
+ <RegExpr String="&emptyline;" column="0"/>
+ <!-- Text with the same indentation captured -->
+ <RegExpr context="content-list" String="%1%2\s{3}" column="0" lookAhead="true" dynamic="true"/>
+ <!-- Finish when the text has a lower indentation than the list -->
+ <RegExpr context="#pop" String="^\s*\S" column="0" lookAhead="true"/>
+ </context>
+
+ <!-- NOTE: Empty lines, blockquotes and horizontal rules send to contexts "list", "numlist" or "numlist2" (#pop),
+ to check the indentation of the text and determine if the content of the list ends. -->
+ <context name="content-list" attribute="List: Normal Text" lineEndContext="#stay" lineEmptyContext="#pop">
+ <RegExpr context="#pop" String="&emptyline;" column="0"/>
+ <!-- Blockquote and horzontal rule (check indentation) -->
+ <RegExpr context="#pop" String="^\s*(?:&gt;|&rulerregex;)" column="0" lookAhead="true"/>
+ <!-- End with header or new list/numlist -->
+ <RegExpr context="#pop#pop" String="(?:\s*(?:&listbullet;|[\d]+\.)\s|#{1,6}\s)" column="0" lookAhead="true"/>
+ <!-- Strong, emphasis, strong-emphasis and strikethrough text -->
+ <AnyChar context="find-strong-emphasis-list" String="*_" lookAhead="true"/>
+ <RegExpr attribute="List: Strikethrough Text" minimal="true" String="&strikeoutregex;"/>
+ <!-- Common -->
<IncludeRules context="inc"/>
+ <RegExpr attribute="List: Link" String="&implicitlink;"/>
</context>
- <context attribute="comment" lineEndContext="#stay" name="comment">
- <RegExpr String="--&gt;" attribute="comment" context="#pop" endRegion="comment"/>
+ <context name="find-strong-emphasis-list" attribute="List: Normal Text" lineEndContext="#pop">
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und;"/>
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast;"/>
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast_und2;"/>
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und_ast2;"/>
+ <RegExpr attribute="List: Strong Text" context="#pop" minimal="true" String="&strongregex_ast;"/>
+ <RegExpr attribute="List: Strong Text" context="#pop" minimal="true" String="&strongregex_und;"/>
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_ast;"/>
+ <RegExpr attribute="List: Strong-Emphasis Text" context="#pop" minimal="true" String="&strongemphasisregex_und;"/>
+ <RegExpr attribute="List: Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_ast;" />
+ <RegExpr attribute="List: Emphasis Text" context="#pop" minimal="true" String="&emphasisregex_und;"/>
+ <AnyChar attribute="List: Normal Text" context="#pop" String="*_"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="bash-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+
+ <!-- Comments -->
+ <context name="comment" attribute="Comment" lineEndContext="#stay">
+ <StringDetect attribute="Comment" context="#pop" String="&endcomment;" endRegion="comment"/>
+ <IncludeRules context="##Alerts"/>
+ <IncludeRules context="##Modelines"/>
+ </context>
+
+ <!-- Fenced Code Blocks -->
+ <context name="find-lang-fenced-code" attribute="Normal Text" lineEndContext="#pop">
+ <!-- Apply syntax highlighting to fenced code blocks for some languages -->
+ <RegExpr attribute="Fenced Code" context="#pop!code" String="&fcode;&end;"/>
+ <RegExpr attribute="Fenced Code" context="#pop!bash-code" String="&fcode;\s*(?:bash(?:rc|_profile|_login|_logout)?|shell|sh|zsh|profile|PKGBUILD|APKBUILD|ebuild|eclass|nix)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!cpp-code" String="&fcode;\s*(?:[ch]pp|[ch]\+\+|[ch]xx|h?cc|hh|cuh?|ino|pde|moc)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!csharp-code" String="&fcode;\s*(?:cs|csharp|c\#)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!cmake-code" String="&fcode;\s*(?:cmake|CMakeLists(?:\.txt)?)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!css-code" String="&fcode;\s*css&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!c-code" String="&fcode;\s*[ch]&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!doxygen-code" String="&fcode;\s*doxygen&end;" insensitive="true"/> <!-- Block comment of Doxygen -->
+ <RegExpr attribute="Fenced Code" context="#pop!email-code" String="&fcode;\s*(?:email|emlx?|mbo?x)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!go-code" String="&fcode;\s*go(?:lang)?&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!hamlet-code" String="&fcode;\s*[wxs]?hamlet&end;" insensitive="true"/> <!-- Included in the Haskell definition -->
+ <RegExpr attribute="Fenced Code" context="#pop!haskell-code" String="&fcode;\s*(?:haskell|c?hs|hs\-boot)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!html-code" String="&fcode;\s*(?:[sx]?html?|inc|tmpl|tpl)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!java-code" String="&fcode;\s*(?:java|bsh)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!javascript-code" String="&fcode;\s*(?:javascript|m?js|es6|kwinscript|julius)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!jsx-code" String="&fcode;\s*(?:jsx|tsx|(?:java|type)script\-react)&end;" insensitive="true"/> <!-- Included in the HTML definition. Also apply for TSX. -->
+ <RegExpr attribute="Fenced Code" context="#pop!json-code" String="&fcode;\s*(?:json5?|gltf)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!matlab-code" String="&fcode;\s*matlab&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!markdown-code" String="&fcode;\s*(?:markdown|m?md)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!mustache-code" String="&fcode;\s*(?:handlebars|hbs|mustache|mst|ractive|hogan|hulk)&end;" insensitive="true"/> <!-- Included in the HTML definition -->
+ <RegExpr attribute="Fenced Code" context="#pop!perl-code" String="&fcode;\s*(?:perl|p[lm]|pod|psgi|vcl|perl6|p[lm]?6|nqp)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!php-code" String="&fcode;\s*(?:php[3457t]?|wml|phtml?|aw|ctp)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!python-code" String="&fcode;\s*(?:python[23]?|py[23w]?|[rc]py|sconstruct|gypi?)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!qml-code" String="&fcode;\s*qml(?:types)?&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!r-code" String="&fcode;\s*(?:r|rprofile|rscript)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!rest-code" String="&fcode;\s*(?:rst|rest|restructuredtext)&end;" insensitive="true"/> <!-- Included in the CMake definition -->
+ <RegExpr attribute="Fenced Code" context="#pop!ruby-code" String="&fcode;\s*(?:ruby|rbx?|rjs|rake|f?cgi|gemspec|irbrc|ru|prawn|Appraisals|(?:Rake|Cap|Chef|Gem|Guard|Hobo|Vagrant||Rant|Berks|Thor|Puppet)file|rxml|(?:xml|js)\.erb)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!rust-code" String="&fcode;\s*(?:rust|rs)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!mysql-code" String="&fcode;\s*(?:mysql|sql|ddl)&end;" insensitive="true"/> <!-- Included in the PHP definition -->
+ <RegExpr attribute="Fenced Code" context="#pop!typescript-code" String="&fcode;\s*(?:typescript|ts)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!xml-code" String="&fcode;\s*(?:xml|xsd|xspf|tld|jsp|c?pt|dtml|rss|opml|svg|daml|rdf|ui|kcfg|qrc|wsdl|scxml|xbel|dae|sch|brd|docbook)&end;" insensitive="true"/>
+ <RegExpr attribute="Fenced Code" context="#pop!code" String="&fcode;.*$"/>
+ </context>
+ <context name="code" attribute="Code" lineEndContext="#stay"> <!-- Unknown language -->
+ <RegExpr attribute="Fenced Code" context="#pop" String="%1[~`]*(?=&end;)" firstNonSpace="true" dynamic="true" endRegion="code-block"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="bash-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##Bash" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="cmake-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="cmake-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##CMake" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="cpp-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="c-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##C" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="cpp-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##C++" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="css-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="csharp-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##C#" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="css-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##CSS" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="email-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="doxygen-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="BlockComment##Doxygen" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="email-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##Email" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="haskell-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="go-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Go" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="hamlet-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Hamlet" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="haskell-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##Haskell" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="html-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="html-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##HTML" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="json-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="java-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Java" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="javascript-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="jsx-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="Normal##JavaScript React" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="json-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##JSON" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="php-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" lineEmptyContext="find-code-block" name="markdown-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="Normal Text"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="matlab-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Matlab" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="mustache-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Mustache/Handlebars (HTML)" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="perl-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Perl" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="php-code">
+ <IncludeRules context="code"/>
<IncludeRules context="phpsource##PHP/PHP" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="python-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="python-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##Python" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="qml-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="qml-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##QML" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="rust-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="r-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##R Script" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="rest-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##reStructuredText" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="ruby-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##Ruby" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="rust-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##Rust" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="xml-code">
- <WordDetect attribute="code" context="#pop" String="```"/>
+ <context attribute="Normal Text" lineEndContext="#stay" name="mysql-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="##SQL (MySQL)" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="typescript-code">
+ <IncludeRules context="code"/>
+ <IncludeRules context="Normal##TypeScript" includeAttrib="true"/>
+ </context>
+ <context attribute="Normal Text" lineEndContext="#stay" name="xml-code">
+ <IncludeRules context="code"/>
<IncludeRules context="##XML" includeAttrib="true"/>
</context>
- <context attribute="code" lineEndContext="#stay" name="code">
- <WordDetect attribute="code" context="#pop" String="```"/>
- </context>
- <context attribute="common" name="inc" lineEndContext="#stay">
- <RegExpr attribute="code" String="`[^`]+`"/>
- <RegExpr context="comment" String="&lt;!--" beginRegion="comment"/>
- <RegExpr attribute="reflink" String="&reflinkregex;"/>
- <RegExpr attribute="footnote" String="&footnoteregex;"/>
- <RegExpr attribute="inlinelink" String="&inlinelinkregex;"/>
- <RegExpr attribute="reflinktarget" String="&reflinktargetregex;"/>
- <RegExpr attribute="inlineimage" String="&inlineimageregex;"/>
- <RegExpr attribute="refimage" String="&refimageregex;"/>
- <RegExpr attribute="autolink" String="&autolinkregex;"/>
- <RegExpr attribute="mailtolink" String="&mailtolinkregex;"/>
- <RegExpr attribute="strikeout" minimal="true" String="&strikeoutregex;"/>
- <RegExpr attribute="linebreak" minimal="true" String="&linebreakregex;"/>
- <WordDetect attribute="code" context="bash-code" String="```bash"/>
- <WordDetect attribute="code" context="cmake-code" String="```cmake"/>
- <WordDetect attribute="code" context="cpp-code" String="```cpp"/>
- <WordDetect attribute="code" context="css-code" String="```css"/>
- <WordDetect attribute="code" context="email-code" String="```email"/>
- <WordDetect attribute="code" context="haskell-code" String="```haskell"/>
- <WordDetect attribute="code" context="html-code" String="```html"/>
- <WordDetect attribute="code" context="json-code" String="```json"/>
- <WordDetect attribute="code" context="php-code" String="```php"/>
- <WordDetect attribute="code" context="python-code" String="```python"/>
- <WordDetect attribute="code" context="qml-code" String="```qml"/>
- <WordDetect attribute="code" context="rust-code" String="```rust"/>
- <WordDetect attribute="code" context="xml-code" String="```xml"/>
- <StringDetect attribute="code" context="code" String="```"/>
+
+ <!-- Common -->
+ <context name="inc" attribute="Normal Text" lineEndContext="#stay">
+ <!-- Code -->
+ <RegExpr attribute="Code" String="`[^`]+`(?!`)"/>
+ <RegExpr attribute="Code" minimal="true" String="`{2}[^`](?:.*[^`])?`{2}(?!`)"/>
+ <RegExpr attribute="Code" minimal="true" String="`{3}[^`](?:.*[^`])?`{3}(?!`)"/>
+ <RegExpr attribute="Code" minimal="true" String="`{4}[^`](?:.*[^`])?`{4}(?!`)"/>
+ <RegExpr attribute="Code" minimal="true" String="`{5,}[^`](?:.*[^`])?`{5,}"/>
+ <!-- Find Fenced Code Block -->
+ <RegExpr attribute="Fenced Code" context="find-lang-fenced-code" String="`{3,}(?=[^`]*$)" firstNonSpace="true" lookAhead="true" beginRegion="code-block"/>
+ <RegExpr attribute="Fenced Code" context="find-lang-fenced-code" String="~{3,}(?=[^~]*$)" firstNonSpace="true" lookAhead="true" beginRegion="code-block"/>
+ <!-- Comment -->
+ <StringDetect attribute="Comment" context="comment" String="&startcomment;" beginRegion="comment"/>
+ <!-- Links and References -->
+ <RegExpr attribute="Reference-Link Target" context="reflinktarget" String="&reflinktargetregex;" firstNonSpace="true"/>
+ <RegExpr attribute="Footnote" String="&footnoteregex;"/>
+ <RegExpr attribute="Reference-Link" context="find-reflink" String="&reflinkregex;"/>
+ <RegExpr attribute="Inline Image" context="inlineimage" String="&inlineimageregex;"/>
+ <RegExpr attribute="Reference Image" String="&refimageregex;"/>
+ <RegExpr attribute="Auto-Link" context="autolink" String="&autolinkregex;" lookAhead="true"/>
+ <RegExpr attribute="Mailto-Link" context="mailtolink" String="&mailtolinkregex;"/>
+ <!-- Line Break -->
+ <RegExpr attribute="Line Break" minimal="true" String="&linebreakregex;"/>
+ <!-- Backslash Escapes -->
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="\"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="`"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="*"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="_"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="{"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="}"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="["/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="]"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="("/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1=")"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="#"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="+"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="-"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="."/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="!"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="&lt;"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="&gt;"/>
+ <Detect2Chars attribute="Backslash Escape" char="\" char1="&amp;"/>
+ <!-- Inline HTML -->
+ <RegExpr attribute="EntityRef" String="&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&htmlname;);"/>
+ <RegExpr context="find-html-block" String="&lt;/?&htmlname;(?:[\s&gt;]|/&gt;|$)" lookAhead="true"/>
+ </context>
+ <context name="find-html-block" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <IncludeRules context="FindSpecialHTMLTags##HTML"/>
+ <IncludeRules context="FindHTMLTags##HTML"/>
+ </context>
+
+ <!-- Links and email: <https://example.com>, <example@kde.org> -->
+ <context name="autolink" attribute="Auto-Link" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Auto-Link" char="&lt;"/>
+ <DetectChar attribute="Auto-Link" context="#pop" char="&gt;"/>
+ <RegExpr attribute="Link" String="&startlink;[^&quot;&gt;\s]+"/>
+ </context>
+ <context name="mailtolink" attribute="Email" lineEndContext="#pop">
+ <DetectChar attribute="Mailto-Link" context="#pop" char="&gt;"/>
+ </context>
+
+ <!-- References: [example][id], [example](http://example.com) -->
+ <context name="find-reflink" attribute="Reference-Link Name" lineEndContext="#pop">
+ <Detect2Chars attribute="Reference-Link Name" char="\" char1="]"/>
+ <RegExpr attribute="Reference-Link" context="#pop!find-reflink-id" String="\](?=&reflinkidregex;)"/> <!-- Find id -->
+ <DetectChar attribute="Reference-Link" context="#pop" char="]"/>
+ <!-- Image as link or reference -->
+ <RegExpr attribute="Inline Image" context="inlineimage" String="&startinlineimage;(?=&endinlineimage;&refchar;*\])"/>
+ <RegExpr attribute="Reference Image" String="&refimageregex;(?=&refchar;*\])"/>
+ <RegExpr attribute="Reference-Link Name" context="#stay" String="(?:\[(?:\\.|[^\[\]\\])*\](?:\\.|[^\[\]\\])*)+(?=\])" minimal="true"/>
+ </context>
+ <context name="find-reflink-id" attribute="Reference-Link" lineEndContext="#pop">
+ <DetectSpaces />
+ <!-- Ref.: [an example][id] "Optional title" -->
+ <DetectChar attribute="Reference-Link" context="#pop!reflink-id" char="["/>
+ <!-- Inline Ref.: [an example](http://example.com/ "Title") -->
+ <DetectChar attribute="Reference-Link" context="#pop!reflink-inline-id" char="("/>
+ </context>
+ <context name="reflink-inline-id" attribute="Reference-Link" lineEndContext="#pop">
+ <Detect2Chars attribute="Reference-Link" char="\" char1=")"/>
+ <DetectChar attribute="Reference-Link" context="#pop" char=")"/>
+ <RegExpr attribute="Reference-Link: Link" String="\b&startlink;(?:\\.|[^&quot;&gt;\s\)\\])+"/>
+ <RegExpr attribute="Reference-Link: Email" String="\b&email;\b"/>
+ </context>
+ <context name="reflink-id" attribute="Reference-Link ID" lineEndContext="#pop">
+ <Detect2Chars attribute="Reference-Link ID" char="\" char1="]"/>
+ <DetectChar attribute="Reference-Link" context="#pop!reflink-title" char="]"/>
+ <RegExpr attribute="Reference-Link: Link" String="\b&startlink;(?:\\.|[^&quot;&gt;\s\]\\])+"/>
+ </context>
+ <!-- [an example][id] "title" -->
+ <context name="reflink-title" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr attribute="Reference-Link" context="#pop" String="\s+&quot;(?:\\.|[^&quot;\\])*&quot;"/>
+ </context>
+
+ <!-- Target Ref.: [foo]: http://example.com/ "Optional Title Here" -->
+ <context name="reflinktarget" attribute="Reference-Link Target" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr attribute="Reference-Link Target: Link" context="#pop!reflinktarget-title" String="\s*&link;(?=\s|$)"/>
+ <RegExpr attribute="Reference-Link Target" context="#pop!reflinktarget-link" String="\s*&lt;(?=&link;&gt;(?:\s|$))"/>
+ <RegExpr attribute="Reference-Link Target" context="#pop!reflinktarget-title" String="\s*#[\w\.\:\-]+\b"/>
+ </context>
+ <context name="reflinktarget-link" attribute="Reference-Link Target" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <DetectChar attribute="Reference-Link Target" context="#pop!reflinktarget-title" char="&gt;"/>
+ <RegExpr attribute="Reference-Link Target: Link" String="&link;"/>
+ </context>
+ <context name="reflinktarget-title" attribute="Reference-Link Target" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+ <DetectSpaces attribute="Reference-Link Target"/>
+ <RegExpr attribute="Reference-Link Target" context="#pop" String="&quot;(?:\\.|[^&quot;\\])*&quot;"/>
+ <RegExpr attribute="Reference-Link Target" context="#pop" String="&apos;(?:\\.|[^&apos;\\])*&apos;"/>
+ <RegExpr attribute="Reference-Link Target" context="#pop" String="\((?:\\.|[^\)\\])*\)"/>
+ </context>
+
+ <!-- Image -->
+ <context name="inlineimage" attribute="Inline Image" lineEndContext="#pop">
+ <DetectChar attribute="Inline Image" context="#pop" char=")"/>
+ <Detect2Chars attribute="Inline Image" char="\" char1=")"/>
+ <RegExpr attribute="Inline Image: Link" String="\b&startlink;(?:\\.|[^&quot;&gt;\s\)\\])+"/>
</context>
</contexts>
<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
- <itemData name="common" defStyleNum="dsNormal"/>
- <itemData name="strongemphasis" defStyleNum="dsNormal" italic="true" bold="true"/>
- <itemData name="emphasis" defStyleNum="dsNormal" italic="true"/>
- <itemData name="strong" defStyleNum="dsNormal" bold="true"/>
- <itemData name="ruler" defStyleNum="dsNormal" bold="true"/>
- <itemData name="strikeout" defStyleNum="dsNormal" strikeOut="true"/>
- <itemData name="linebreak" defStyleNum="dsNormal" underline="true" color="#999999"/>
- <itemData name="h1" defStyleNum="dsFunction" bold="true"/>
- <itemData name="h2" defStyleNum="dsFunction" bold="true"/>
- <itemData name="h3" defStyleNum="dsFunction" bold="true"/>
- <itemData name="h4" defStyleNum="dsFunction" bold="true"/>
- <itemData name="h5" defStyleNum="dsFunction" bold="true"/>
- <itemData name="h6" defStyleNum="dsFunction" bold="true"/>
- <itemData name="blockquote" defStyleNum="dsDataType"/>
- <itemData name="bq-emphasis" defStyleNum="dsDataType" italic="true"/>
- <itemData name="bq-strong" defStyleNum="dsDataType" bold="true"/>
- <itemData name="bullet" defStyleNum="dsString"/>
- <itemData name="bl-emphasis" defStyleNum="dsString" italic="true"/>
- <itemData name="bl-strong" defStyleNum="dsString" bold="true"/>
- <itemData name="numlist" defStyleNum="dsString"/>
- <itemData name="nl-emphasis" defStyleNum="dsString" italic="true"/>
- <itemData name="nl-strong" defStyleNum="dsString" bold="true"/>
- <itemData name="comment" defStyleNum="dsComment"/>
- <itemData name="code" defStyleNum="dsBaseN"/>
- <itemData name="reflink" defStyleNum="dsOthers" underline="true"/>
- <itemData name="inlinelink" defStyleNum="dsOthers" underline="true"/>
- <itemData name="autolink" defStyleNum="dsOthers" underline="true"/>
- <itemData name="mailtolink" defStyleNum="dsOthers" underline="true"/>
- <itemData name="footnote" defStyleNum="dsOthers" italic="true"/>
- <itemData name="meta" defStyleNum="dsComment"/>
- <itemData name="reflinktarget" defStyleNum="dsOthers" italic="false" bold="false"/>
- <itemData name="inlineimage" defStyleNum="dsAlert" italic="false" bold="false"/>
- <itemData name="refimage" defStyleNum="dsAlert" italic="false" bold="false"/>
+ <itemData name="Emphasis Text" defStyleNum="dsNormal" italic="true"/>
+ <itemData name="Strong Text" defStyleNum="dsNormal" bold="true"/>
+ <itemData name="Strong-Emphasis Text" defStyleNum="dsNormal" italic="true" bold="true"/>
+ <itemData name="Strikethrough Text" defStyleNum="dsNormal" strikeOut="true"/>
+ <itemData name="Normal Text: Link" defStyleNum="dsNormal" underline="true" spellChecking="false"/>
+ <itemData name="Horizontal Rule" defStyleNum="dsNormal" bold="true" spellChecking="false"/>
+ <itemData name="Line Break" defStyleNum="dsNormal" underline="true" color="#999999" spellChecking="false"/>
+ <itemData name="Header H1" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Header H2" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Header H3" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Header H4" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Header H5" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Header H6" defStyleNum="dsFunction" bold="true"/>
+ <itemData name="Blockquote" defStyleNum="dsAttribute" spellChecking="false"/>
+ <itemData name="Blockquote: Normal Text" defStyleNum="dsAttribute"/>
+ <itemData name="Blockquote: Emphasis Text" defStyleNum="dsAttribute" italic="true"/>
+ <itemData name="Blockquote: Strong Text" defStyleNum="dsAttribute" bold="true"/>
+ <itemData name="Blockquote: Strong-Emphasis Text" defStyleNum="dsAttribute" italic="true" bold="true"/>
+ <itemData name="Blockquote: Strikethrough Text" defStyleNum="dsAttribute" strikeOut="true"/>
+ <itemData name="Blockquote: Link" defStyleNum="dsAttribute" underline="true" spellChecking="false"/>
+ <itemData name="List" defStyleNum="dsSpecialString" bold="1" spellChecking="false"/>
+ <itemData name="Number List" defStyleNum="dsSpecialString" spellChecking="false"/>
+ <itemData name="List: Normal Text" defStyleNum="dsNormal"/>
+ <itemData name="List: Emphasis Text" defStyleNum="dsNormal" italic="true"/>
+ <itemData name="List: Strong Text" defStyleNum="dsNormal" bold="true"/>
+ <itemData name="List: Strong-Emphasis Text" defStyleNum="dsNormal" italic="true" bold="true"/>
+ <itemData name="List: Strikethrough Text" defStyleNum="dsNormal" strikeOut="true"/>
+ <itemData name="List: Link" defStyleNum="dsNormal" underline="true" spellChecking="false"/>
+ <itemData name="List: Checkbox" defStyleNum="dsVariable" spellChecking="false"/>
+ <itemData name="Comment" defStyleNum="dsComment"/>
+ <itemData name="Code" defStyleNum="dsInformation"/>
+ <itemData name="Fenced Code" defStyleNum="dsInformation" spellChecking="false"/>
+ <itemData name="Auto-Link" defStyleNum="dsOthers" spellChecking="false"/>
+ <itemData name="Link" defStyleNum="dsOthers" underline="true" spellChecking="false"/>
+ <itemData name="Mailto-Link" defStyleNum="dsOthers" spellChecking="false"/>
+ <itemData name="Email" defStyleNum="dsOthers" italic="true" underline="true" spellChecking="false"/>
+ <itemData name="Footnote" defStyleNum="dsOthers" italic="true"/>
+ <itemData name="Reference-Link" defStyleNum="dsComment" italic="false"/>
+ <itemData name="Reference-Link Name" defStyleNum="dsOthers" underline="true" italic="false"/>
+ <itemData name="Reference-Link ID" defStyleNum="dsComment" italic="false"/>
+ <itemData name="Reference-Link: Link" defStyleNum="dsComment" underline="true" italic="false" spellChecking="false"/>
+ <itemData name="Reference-Link: Email" defStyleNum="dsComment" italic="true" underline="true" spellChecking="false"/>
+ <itemData name="Reference-Link Target" defStyleNum="dsOthers" italic="false" bold="false"/>
+ <itemData name="Reference-Link Target: Link" defStyleNum="dsOthers" underline="true" spellChecking="false"/>
+ <itemData name="Inline Image" defStyleNum="dsAlert" italic="false" bold="false"/>
+ <itemData name="Reference Image" defStyleNum="dsAlert" italic="false" bold="false"/>
+ <itemData name="Inline Image: Link" defStyleNum="dsAlert" italic="false" bold="false" underline="true"/>
+ <itemData name="Metadata Title" defStyleNum="dsAnnotation"/>
+ <itemData name="Metadata" defStyleNum="dsComment" italic="0"/>
+ <itemData name="Backslash Escape" defStyleNum="dsSpecialChar" spellChecking="false"/>
+ <itemData name="EntityRef" defStyleNum="dsDecVal" spellChecking="false"/>
</itemDatas>
</highlighting>
<general>
+ <keywords additionalDeliminator="`"/>
<comments>
- <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment"/>
+ <comment name="multiLine" start="&startcomment;" end="&endcomment;" region="comment"/>
</comments>
</general>
</language>
+<!-- kate: replace-tabs on; indent-width 2; tab-width 2; -->
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/perl.xml
index 0d1931649c5..c2d366d1f30 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.
-->
-<language name="Perl" version="8" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm;*.pl6;*.PL6;*.p6;*.pm6;" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
+<language name="Perl" version="9" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
<highlighting>
<list name="keywords">
<item>if</item>
diff --git a/src/libs/3rdparty/syntax-highlighting/data/syntax/perl6.xml b/src/libs/3rdparty/syntax-highlighting/data/syntax/perl6.xml
new file mode 100644
index 00000000000..71ea0a80e81
--- /dev/null
+++ b/src/libs/3rdparty/syntax-highlighting/data/syntax/perl6.xml
@@ -0,0 +1,1785 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+ <!--
+ identifier:
+ Alphabetic characters include characters with the Unicode General Category value Letter (L), and the underscore _.
+ Alphanumeric characters additionally include characters with the Unicode General Category value Number, Decimal Digit (Nd).
+ -->
+ <!-- Large values -->
+ <!ENTITY rangealphabetic "_A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{2c1}\x{2C6}-\x{2D1}\x{2E0}-\x{2EE}\x{370}-\x{588}\x{5d0}-\x{17dc}\x{1820}-\x{1aa7}\x{1b05}-\x{2139}\x{2c00}-\x{31ff}\x{3400}\x{4db5}\x{4db5}\x{4e00}-\x{ac00}\x{d7a3}-\x{d7fb}\x{f900}-\x{FD3D}\x{FF64}\x{100fa}\x{10000}-\x{100fa}\x{10280}-\x{20000}\x{2a6d6}-\x{2fa1d}">
+ <!ENTITY rangenumeric "0-9">
+ <!ENTITY alphabetic "[&rangealphabetic;]">
+ <!ENTITY numeric "[&rangenumeric;]">
+ <!ENTITY alnum "[&rangealphabetic;&rangenumeric;]">
+ <!ENTITY ident "(?:&alphabetic;(?:&alnum;+|[-']&alphabetic;)*)">
+
+ <!ENTITY prefixdollarvarname "(?:[&rangealphabetic;0-9/!]|\(\))">
+ <!ENTITY dollarvarname "(?:&ident;|[0-9]+|[/!]|\(\))">
+ <!ENTITY twigils "*?!.&lt;^:=~">
+
+ <!ENTITY podfmt "BCEIKLMNPRTUVXZ">
+ <!ENTITY allnopodfmt "(?:[^&podfmt;]+|[&podfmt;](?![&lt;«]))+">
+ <!ENTITY allnopodfmt1 "(?:[^&podfmt;&lt;>]+|[&podfmt;](&lt;(?:&lt;*(?=&lt;))|(?![&lt;«])))+">
+ <!ENTITY allnopodfmt2 "(?:[^&podfmt;«»]+|[&podfmt;](?![&lt;«]))+">
+ <!ENTITY allnopodfmt3 "(?:[^&podfmt;&lt;>]+|[&podfmt;](?![&lt;«])|>(?!>)|&lt;(?!&lt;))+">
+
+ <!ENTITY quotingform_q "(?:q?(?::?[xsahfcb]|:?ww?|:(?:v|exec|words|quotewords|scalar|array|hash|function|closure|backslash|to|heredoc)|)(?::[xsahfcbv]|ww?|exec|words|quotewords|scalar|array|hash|function|closure|backslash|to|heredoc)*)">
+ <!ENTITY quotingform_q_assert "(?:\s+(?=\()|\s*(?=[^()>」\]}a-zA-Z0-9]|$))">
+ <!ENTITY quotingconstruct "q&quotingform_q;&quotingform_q_assert;">
+
+ <!ENTITY int10 "(?:[0-9]+(?:_[0-9]+)*)">
+ <!ENTITY intN "(?:[0-9a-zA-Z]+(?:_[0-9a-zA-Z]+)*)">
+
+ <!-- <!ENTITY operators "(?:\b(?:X[*~]|Z=|xx=)|\((?:[&lt;>][+=]|[-&amp;+.&lt;>|^]|cont|elem)\)|\+[&amp;+&lt;=>^|]?|~[&amp;&lt;>^|~]?|\.(?::&lt;[^>]+>|\.\.?\^?|[=?^*+.])?|\^(?:fff?\b|\.\.)?\^?|(?:[?…]|f?ff)\^|\[[*+]\]|=(?:==?|=>>?|>|~=)?|&lt;(?:&lt;==|=[=>]?)?|\*\*=?|\?[?|]?|!(?:[=]|eqv\b)?|&#37;&#37;?|&amp;&amp;?|//?|\|\|?|>=?|-[-=]?|::|[−∈∉∋∌∘∩∪≅≠≤≥≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖×÷∖*…])"> -->
+ <!-- <!ENTITY hyperoperators "(?:[«»]|&lt;&lt;|&gt;&gt;)"> -->
+ <!ENTITY safesymboloperators "−∈∉∋∌∘∩∪≅≠≤≥≼≽⊂⊃⊄⊅⊆⊇⊈⊉⊍⊎⊖×÷∖*…?.+-/=!~&amp;|^&#37;">
+ <!ENTITY unsafesymboloperators "&lt;>«»">
+ <!ENTITY symboloperators "&safesymboloperators;&unsafesymboloperators;">
+ <!ENTITY bracehyperoperator "(?:\[[^\s]+\]|\([^\s]+\))">
+ <!ENTITY prefixoperator "R?(?:[XZ]|xx)?">
+ <!ENTITY extrasymboloperators "(?:\^fff?\b\^?|\bf?ff\^|\((?:[&lt;>][+=]|[-&amp;+.&lt;>|^]|cont|elem)\))">
+ <!ENTITY hyperoperators1 "[«»]&prefixoperator;(?:&amp;&ident;|[&safesymboloperators;&lt;>]+|&bracehyperoperator;)[«»]">
+ <!ENTITY hyperoperators2 "(?:&lt;&lt;|&gt;&gt;)&prefixoperator;(?:&amp;&ident;|[&safesymboloperators;«»]+|&bracehyperoperator;)(?:&lt;&lt;|&gt;&gt;)">
+ <!ENTITY hyperoperators "&hyperoperators1;|&hyperoperators2;">
+ <!ENTITY startstringasoperator "&prefixoperator;&lt;[&symboloperators;]*(?=\s|$)">
+ <!ENTITY funcoperator "\[\[\&amp;&ident;\]\]">
+ <!ENTITY reductionoperator "\[&prefixoperator;[&symboloperators;]+\]">
+ <!ENTITY innerbraceoperator "[&symboloperators;'&quot;]+">
+ <!ENTITY operators "&prefixoperator;(?:(?:[&safesymboloperators;>]|&extrasymboloperators;)[&symboloperators;]*|\(&innerbraceoperator;\)|\[&innerbraceoperator;\]|&lt;[&safesymboloperators;'&quot;]+>)">
+
+ <!-- <!ENTITY regadverb "(?!\()\s*(?::\w+\s*)*(?=[^\w\s])"> -->
+ <!ENTITY regadverb "(?!\()\s*(?=[^\w\s])">
+]>
+<language name="Perl6" version="1" kateversion="5.53" section="Scripts" extensions="*.pl6;*.PL6;*.p6;*.pm6;*.pod6" mimetype="application/x-perl;text/x-perl" priority="5" author="Jonathan Poelen (jonathan.poelen@gmail.com)" license="MIT">
+ <highlighting>
+
+ <list name="pod">
+ <item>begin</item>
+ <item>end</item>
+ <item>finish</item>
+ <item>for</item>
+ <include>podtypename</include>
+ </list>
+
+ <list name="podblocktypename">
+ <item>pod</item>
+ <include>podtypename</include>
+ </list>
+
+ <list name="podvalue">
+ <item>True</item>
+ <item>False</item>
+ </list>
+
+ <list name="podtypename">
+ <item>head1</item>
+ <item>head2</item>
+ <item>head3</item>
+ <item>head4</item>
+ <item>head5</item>
+ <item>head6</item>
+ <item>item</item>
+ <item>item1</item>
+ <item>item2</item>
+ <item>item3</item>
+ <item>item4</item>
+ <item>item5</item>
+ <item>item6</item>
+ <item>para</item>
+ <item>code</item>
+ <item>defn</item>
+ <item>comment</item>
+ <item>table</item>
+ <item>input</item>
+ <item>output</item>
+ </list>
+
+ <list name="quoting">
+ <item>exec</item>
+ <item>words</item>
+ <item>quotewords</item>
+ <item>scalar</item>
+ <item>array</item>
+ <item>hash</item>
+ <item>function</item>
+ <item>closure</item>
+ <item>backslash</item>
+ <item>heredoc</item>
+ <item>val</item>
+ </list>
+
+ <list name="declareRoutine">
+ <item>macro</item>
+ <item>sub</item>
+ <item>submethod</item>
+ <item>method</item>
+ <item>multi</item>
+ <item>proto</item>
+ <item>only</item>
+ <item>category</item>
+ </list>
+
+ <list name="regexKeyword">
+ <item>rule</item>
+ <item>token</item>
+ <item>regex</item>
+ </list>
+
+ <list name="value">
+ <include>podvalue</include>
+ <item>self</item>
+ </list>
+
+ <list name="varStorage">
+ <item>let</item>
+ <item>my</item>
+ <item>our</item>
+ <item>state</item>
+ <item>temp</item>
+ <item>has</item>
+ <item>constant</item>
+ </list>
+
+ <list name="controlFlow">
+ <!-- conditional -->
+ <item>if</item>
+ <item>else</item>
+ <item>elsif</item>
+ <item>unless</item>
+ <!-- repeat -->
+ <item>for</item>
+ <item>loop</item>
+ <item>repeat</item>
+ <item>while</item>
+ <item>until</item>
+ <item>gather</item>
+ <item>given</item>
+ <!-- control flow -->
+ <item>take</item>
+ <item>do</item>
+ <item>when</item>
+ <item>next</item>
+ <item>last</item>
+ <item>redo</item>
+ <item>return</item>
+ <item>contend</item>
+ <item>maybe</item>
+ <item>defer</item>
+ <item>default</item>
+ <item>exit</item>
+ <item>make</item>
+ <item>continue</item>
+ <item>break</item>
+ <item>goto</item>
+ <item>leave</item>
+ <item>async</item>
+ <item>lift</item>
+ <!-- exception -->
+ <item>die</item>
+ <item>fail</item>
+ <item>try</item>
+ <item>warn</item>
+ </list>
+
+ <list name="keyword">
+ <!-- include -->
+ <item>no</item>
+ <item>use</item>
+ <item>require</item>
+ <!-- typeConstraint -->
+ <item>is</item>
+ <item>as</item>
+ <item>but</item>
+ <item>trusts</item>
+ <item>of</item>
+ <item>returns</item>
+ <item>handles</item>
+ <item>where</item>
+ <item>augment</item>
+ <item>supersede</item>
+ <!-- module -->
+ <item>module</item>
+ <item>class</item>
+ <item>role</item>
+ <item>package</item>
+ <item>enum</item>
+ <item>grammar</item>
+ <item>slang</item>
+ <item>subset</item>
+ <!-- closure trait -->
+ <item>BEGIN</item>
+ <item>CHECK</item>
+ <item>INIT</item>
+ <item>START</item>
+ <item>FIRST</item>
+ <item>ENTER</item>
+ <item>LEAVE</item>
+ <item>KEEP</item>
+ <item>UNDO</item>
+ <item>NEXT</item>
+ <item>LAST</item>
+ <item>PRE</item>
+ <item>POST</item>
+ <item>END</item>
+ <item>CATCH</item>
+ <item>CONTROL</item>
+ <item>TEMP</item>
+ </list>
+
+ <list name="property">
+ <item>prec</item>
+ <item>irs</item>
+ <item>ofs</item>
+ <item>ors</item>
+ <item>export</item>
+ <item>deep</item>
+ <item>binary</item>
+ <item>unary</item>
+ <item>reparsed</item>
+ <item>rw</item>
+ <item>parsed</item>
+ <item>cached</item>
+ <item>readonly</item>
+ <item>defequiv</item>
+ <item>will</item>
+ <item>ref</item>
+ <item>copy</item>
+ <item>inline</item>
+ <item>tighter</item>
+ <item>looser</item>
+ <item>equiv</item>
+ <item>assoc</item>
+ <item>required</item>
+ </list>
+
+ <list name="isProperty">
+ <include>property</include>
+ <item>signature</item>
+ <item>context</item>
+ <item>also</item>
+ <item>shape</item>
+ </list>
+
+ <list name="Number">
+ <item>NaN</item>
+ <item>Inf</item>
+ </list>
+
+ <list name="type">
+ <item>Object</item>
+ <item>Any</item>
+ <item>Junction</item>
+ <item>Whatever</item>
+ <item>Capture</item>
+ <item>Match</item>
+ <item>Signature</item>
+ <item>Proxy</item>
+ <item>Matcher</item>
+ <item>Package</item>
+ <item>Module</item>
+ <item>Class</item>
+ <item>Grammar</item>
+ <item>Scalar</item>
+ <item>Array</item>
+ <item>Hash</item>
+ <item>KeyHash</item>
+ <item>KeySet</item>
+ <item>KeyBag</item>
+ <item>Pair</item>
+ <item>List</item>
+ <item>Seq</item>
+ <item>Range</item>
+ <item>Set</item>
+ <item>Bag</item>
+ <item>Mapping</item>
+ <item>Void</item>
+ <item>Undef</item>
+ <item>Failure</item>
+ <item>Exception</item>
+ <item>Code</item>
+ <item>Block</item>
+ <item>Routine</item>
+ <item>Sub</item>
+ <item>Macro</item>
+ <item>Method</item>
+ <item>Submethod</item>
+ <item>Regex</item>
+ <item>Str</item>
+ <item>Blob</item>
+ <item>Char</item>
+ <item>Byte</item>
+ <item>Codepoint</item>
+ <item>Grapheme</item>
+ <item>StrPos</item>
+ <item>StrLen</item>
+ <item>Version</item>
+ <item>Num</item>
+ <item>Complex</item>
+ <item>num</item>
+ <item>complex</item>
+ <item>Bit</item>
+ <item>bit</item>
+ <item>bool</item>
+ <item>True</item>
+ <item>False</item>
+ <item>Increasing</item>
+ <item>Decreasing</item>
+ <item>Ordered</item>
+ <item>Callable</item>
+ <item>AnyChar</item>
+ <item>Positional</item>
+ <item>Associative</item>
+ <item>Ordering</item>
+ <item>KeyExtractor</item>
+ <item>Comparator</item>
+ <item>OrderingPair</item>
+ <item>IO</item>
+ <item>KitchenSink</item>
+ <item>Role</item>
+ <item>Int</item>
+ <item>int</item>
+ <item>int1</item>
+ <item>int2</item>
+ <item>int4</item>
+ <item>int8</item>
+ <item>int16</item>
+ <item>int32</item>
+ <item>int64</item>
+ <item>Rat</item>
+ <item>rat</item>
+ <item>rat1</item>
+ <item>rat2</item>
+ <item>rat4</item>
+ <item>rat8</item>
+ <item>rat16</item>
+ <item>rat32</item>
+ <item>rat64</item>
+ <item>Buf</item>
+ <item>buf</item>
+ <item>buf1</item>
+ <item>buf2</item>
+ <item>buf4</item>
+ <item>buf8</item>
+ <item>buf16</item>
+ <item>buf32</item>
+ <item>buf64</item>
+ <item>UInt</item>
+ <item>uint</item>
+ <item>uint1</item>
+ <item>uint2</item>
+ <item>uint4</item>
+ <item>uint8</item>
+ <item>uint16</item>
+ <item>uint32</item>
+ <item>uint64</item>
+ <item>Abstraction</item>
+ <item>utf8</item>
+ <item>utf16</item>
+ <item>utf32</item>
+ </list>
+
+ <list name="operator">
+ <item>X</item>
+ <item>gcd</item>
+ <item>ge</item>
+ <item>gt</item>
+ <item>lcm</item>
+ <item>le</item>
+ <item>leg</item>
+ <item>let</item>
+ <item>lt</item>
+ <item>map</item>
+ <item>max</item>
+ <item>min</item>
+ <item>minmax</item>
+ <item>mod</item>
+ <item>ne</item>
+ <item>not</item>
+ <item>notandthen</item>
+ <item>o</item>
+ <item>or</item>
+ <item>orelse</item>
+ <item>print</item>
+ <item>push</item>
+ <item>say</item>
+ <item>so</item>
+ <item>substr</item>
+ <item>temp</item>
+ <item>unicmp</item>
+ <item>x</item>
+ <item>xor</item>
+ <item>xx</item>
+ <item>Xeqv</item>
+ <item>Z</item>
+ <item>and</item>
+ <item>andthen</item>
+ <item>any</item>
+ <item>but</item>
+ <item>cmp</item>
+ <item>coll</item>
+ <item>die</item>
+ <item>div</item>
+ <item>does</item>
+ <item>eq</item>
+ <item>eqv</item>
+ <item>ff</item>
+ <item>fff</item>
+ </list>
+
+ <list name="unicodeGeneralCategories">
+ <item>L</item> <item>Letter</item>
+ <item>LC</item> <item>Cased_Letter</item>
+ <item>Lu</item> <item>Uppercase_Letter</item>
+ <item>Ll</item> <item>Lowercase_Letter</item>
+ <item>Lt</item> <item>Titlecase_Letter</item>
+ <item>Lm</item> <item>Modifier_Letter</item>
+ <item>Lo</item> <item>Other_Letter</item>
+ <item>M</item> <item>Mark</item>
+ <item>Mn</item> <item>Nonspacing_Mark</item>
+ <item>Mc</item> <item>Spacing_Mark</item>
+ <item>Me</item> <item>Enclosing_Mark</item>
+ <item>N</item> <item>Number</item>
+ <item>Nd</item> <item>Decimal_Number</item> <item>digit</item>
+ <item>Nl</item> <item>Letter_Number</item>
+ <item>No</item> <item>Other_Number</item>
+ <item>P</item> <item>Punctuation</item> <item>punct</item>
+ <item>Pc</item> <item>Connector_Punctuation</item>
+ <item>Pd</item> <item>Dash_Punctuation</item>
+ <item>Ps</item> <item>Open_Punctuation</item>
+ <item>Pe</item> <item>Close_Punctuation</item>
+ <item>Pi</item> <item>Initial_Punctuation</item>
+ <item>Pf</item> <item>Final_Punctuation</item>
+ <item>Po</item> <item>Other_Punctuation</item>
+ <item>S</item> <item>Symbol</item>
+ <item>Sm</item> <item>Math_Symbol</item>
+ <item>Sc</item> <item>Currency_Symbol</item>
+ <item>Sk</item> <item>Modifier_Symbol</item>
+ <item>So</item> <item>Other_Symbol</item>
+ <item>Z</item> <item>Separator</item>
+ <item>Zs</item> <item>Space_Separator</item>
+ <item>Zl</item> <item>Line_Separator</item>
+ <item>Zp</item> <item>Paragraph_Separator</item>
+ <item>C</item> <item>Other</item>
+ <item>Cc</item> <item>Control</item> <item>cntrl</item>
+ <item>Cf</item> <item>Format</item>
+ <item>Cs</item> <item>Surrogate</item>
+ <item>Co</item> <item>Private_Use</item>
+ <item>Cn</item> <item>Unassigned</item>
+ </list>
+
+ <list name="assertion">
+ <item>before</item>
+ <item>after</item>
+ </list>
+
+ <contexts>
+
+ <context name="Shebang" attribute="Comment" lineEndContext="#pop!base" fallthrough="1" fallthroughContext="#pop!base">
+ <RegExpr attribute="Keyword" context="#pop!base" String="^#!\/.*" column="0"/>
+ </context>
+
+ <context name="base" attribute="Normal Text" lineEndContext="#stay">
+ <DetectSpaces/>
+ <DetectChar attribute="Comment" context="StartComment" char="#"/>
+ <!-- <DetectChar attribute="Unspace" context="#stay" char="\"/> -->
+ <DetectChar attribute="String Delimiter" context="qq_RawString" char="&quot;"/>
+ <DetectChar attribute="String Delimiter" context="q_RawString" char="'"/>
+ <DetectChar char="{" context="Interpolation" attribute="Operator" beginRegion="block"/>
+ <RegExpr String="(?:s|tr|TR)&regadverb;" context="RegexSubstitution" attribute="Operator"/>
+ <RegExpr String="(?:rx|m)&regadverb;" context="Regex" attribute="Operator"/>
+ <IncludeRules context="find_Variable"/>
+ <DetectChar attribute="Pod" context="StartPod" char="=" firstNonSpace="1"/>
+ <RegExpr String="»\.|&lt;&lt;\.|&hyperoperators;|&startstringasoperator;|&funcoperator;|&reductionoperator;|&operators;" context="MaybeRegex" attribute="Operator"/>
+ <DetectChar char="(" context="SubExpression(" attribute="Operator" beginRegion="block"/>
+ <DetectChar char="[" context="SubExpression[" attribute="Operator" beginRegion="block"/>
+ <AnyChar String=",;" context="#stay" attribute="Separator Symbol"/>
+ <DetectChar attribute="String Delimiter" context="qq_String«" char="«"/>
+ <Detect2Chars attribute="String Delimiter" context="qq_String&lt;&lt;" char="&lt;" char1="&lt;"/>
+ <DetectChar attribute="String Delimiter" context="q_String&lt;" char="&lt;"/>
+ <DetectChar attribute="String Delimiter" context="Q_String「" char="「"/>
+ <DetectChar attribute="Operator" context="Q_String" char="Q" lookAhead="1"/>
+ <DetectChar char=":" context="MaybeAttribute" attribute="Operator"/>
+ <AnyChar String="0123456789." context="Number" lookAhead="1"/>
+ <RegExpr attribute="Operator" context="q_QuotingForm" String="q(?=&quotingform_q;&quotingform_q_assert;)"/>
+ <keyword String="operator" context="#stay" attribute="Operator"/>
+ <keyword String="varStorage" context="#stay" attribute="Variable Storage"/>
+ <keyword String="type" context="#stay" attribute="Data Type"/>
+ <keyword String="controlFlow" context="#stay" attribute="Control Flow"/>
+ <WordDetect String="is" context="Is" attribute="Keyword"/>
+ <keyword String="keyword" context="#stay" attribute="Keyword"/>
+ <keyword String="declareRoutine" context="#stay" attribute="Declare Routine"/>
+ <keyword String="property" context="#stay" attribute="Property"/>
+ <keyword String="regexKeyword" context="RegexKeyword" attribute="Keyword"/>
+ <keyword String="value" context="#stay" attribute="Keyword Value"/>
+ <keyword String="Number" context="#stay" attribute="Float"/>
+ <RegExpr String="[A-Z](?:[a-z]+[a-zA-Z0-9]*)+" context="#stay" attribute="Data Type"/>
+ <RegExpr String="&ident;" context="#stay" attribute="Normal Text"/>
+ </context>
+
+ <context name="Is" attribute="Normal Text" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <DetectSpaces/>
+ <keyword String="isProperty" context="#pop" attribute="Property"/>
+ </context>
+
+ <context name="Interpolation" attribute="Normal Text" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop" attribute="Operator" endRegion="block"/>
+ <IncludeRules context="base"/>
+ </context>
+
+ <context name="SubExpression(" attribute="Normal Text" lineEndContext="#stay">
+ <IncludeRules context="base"/>
+ <DetectChar char=")" context="#pop" attribute="Operator" endRegion="block"/>
+ </context>
+
+ <context name="SubExpression[" attribute="Normal Text" lineEndContext="#stay">
+ <IncludeRules context="base"/>
+ <DetectChar char="]" context="#pop" attribute="Operator" endRegion="block"/>
+ </context>
+
+ <context name="find_Variable" attribute="Normal Text" lineEndContext="#stay">
+ <RegExpr String="[%&amp;](?=[?*]&alphabetic;)|(?:\$[&twigils;]|::\?)(?=&alphabetic;)" context="Twigil" attribute="Variable"/>
+ <RegExpr String="[$@]\(\)|[%@]?\$/|\$!|\$[0-9]+|[\\@%&amp;$]&ident;" context="#stay" attribute="Variable"/>
+ </context>
+
+ <context name="MaybeRegex" attribute="Normal Text" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+ <DetectSpaces/>
+ <DetectChar char="/" context="#pop!Regex" attribute="Operator" lookAhead="1"/>
+ </context>
+
+ <context name="Twigil" attribute="Variable" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <AnyChar String="&twigils;" context="#stay" attribute="Twigil"/>
+ <RegExpr String="&ident;" context="#pop" attribute="Variable"/>
+ </context>
+
+ <context name="RegexKeyword" attribute="Normal Text" lineEndContext="#pop">
+ <DetectChar char="{" context="#pop!Pattern{" attribute="Operator" beginRegion="regex"/>
+ </context>
+
+ <!-- Regex -->
+
+ <context name="Regex" attribute="Pattern" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+ <IncludeRules context="find_RegexClosure"/>
+ <RegExpr String="([^\w\s])" context="Pattern" attribute="Operator" beginRegion="regex"/>
+ </context>
+
+ <context name="find_RegexClosure" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char=":" context="RegexModifier" attribute="Pattern Modifier"/>
+ <DetectChar char="{" context="Pattern{" attribute="Operator" beginRegion="regex"/>
+ <DetectChar char="(" context="Pattern(" attribute="Operator" beginRegion="regex"/>
+ <DetectChar char="[" context="Pattern[" attribute="Operator" beginRegion="regex"/>
+ <DetectChar char="&lt;" context="Pattern&lt;" attribute="Operator" beginRegion="regex"/>
+ <DetectSpaces/>
+ </context>
+
+ <context name="RegexModifier" attribute="Pattern Modifier" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <StringDetect String="P5" context="RegexPerl5" attribute="Pattern Modifier"/>
+ <StringDetect String="Perl5" context="RegexPerl5" attribute="Pattern Modifier"/>
+ <DetectIdentifier context="#pop" attribute="Pattern Modifier"/>
+ </context>
+
+ <context name="RegexPerl5" attribute="Pattern Modifier" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop!IsRegexPerl5">
+ <DetectSpaces/>
+ </context>
+
+ <context name="IsRegexPerl5" attribute="Pattern" lineEndContext="#stay">
+ <IncludeRules context="find_pattern##Perl"/>
+ </context>
+
+ <context name="Pattern{" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop#pop" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="Pattern[" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop#pop" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="Pattern(" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop#pop" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="Pattern&lt;" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char=">" context="#pop#pop" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="Pattern" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char="1" dynamic="1" context="#pop#pop" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="find_Pattern" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar attribute="Operator" context="SubPattern" char="("/>
+ <DetectChar char="\" context="PatternMetaChar" attribute="Pattern Character Class"/>
+ <DetectChar attribute="String Delimiter" context="qq_RawString" char="&quot;"/>
+ <DetectChar attribute="String Delimiter" context="q_RawString" char="'"/>
+ <DetectChar attribute="Pattern Modifier" context="PatternModifier" char=":" lookAhead="1"/>
+ <DetectChar char="{" context="Interpolation" attribute="Operator" beginRegion="block"/>
+ <Detect2Chars attribute="Operator" context="RecursivePattern" char="&lt;" char1="("/>
+ <Detect2Chars attribute="Operator" context="PatternAssertion" char="&lt;" char1="?"/>
+ <Detect2Chars attribute="Operator" context="PatternAssertion" char="&lt;" char1="!"/>
+ <Detect2Chars attribute="Operator" context="#stay" char="&lt;" char1="&lt;"/>
+ <Detect2Chars attribute="Operator" context="#stay" char=">" char1=">"/>
+ <DetectChar attribute="Pattern Meta Character" context="RegexClass" char="&lt;"/>
+ <AnyChar attribute="Pattern Quantifier" context="#stay" String="?*+%"/>
+ <Detect2Chars attribute="Pattern Quantifier" context="#stay" char="." char1="."/>
+ <AnyChar attribute="Operator" context="#stay" String="[]«»~"/>
+ <DetectChar attribute="Pattern Special Character" context="#stay" char="."/>
+ <Detect2Chars attribute="Variable" context="PatternVariable" char="$" char1="&lt;"/>
+ <AnyChar attribute="Pattern Control Flow" context="#stay" String="&amp;|^$"/>
+ <DetectChar attribute="Comment" context="StartComment" char="#"/>
+ <IncludeRules context="find_Variable"/>
+ <RegExpr String="[&rangealphabetic;&rangenumeric;\s]+" context="#stay" attribute="Pattern"/>
+ </context>
+
+ <context name="SubPattern" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop" attribute="Operator"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="RecursivePattern" attribute="Variable" lineEndContext="#stay">
+ <Detect2Chars attribute="Operator" context="#pop" char=")" char1=">"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="PatternModifier" attribute="Pattern Modifier" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <RegExpr context="#pop" attribute="Pattern Modifier" String=":\w+"/>
+ <DetectChar attribute="Pattern Control Flow" context="#pop" char=":"/>
+ </context>
+
+ <context name="PatternVariable" attribute="Variable" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <RegExpr String="&ident;>?" context="#pop" attribute="Variable"/>
+ </context>
+
+ <context name="PatternAssertion" attribute="Normal Text" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!RegexClass">
+ <DetectChar attribute="Operator" context="#pop" char=">"/>
+ <DetectChar attribute="Operator" context="PatternAssertionCond" char="{"/>
+ <keyword attribute="Keyword" String="assertion" context="SubPatternAssertion"/>
+ </context>
+ <context name="SubPatternAssertion" attribute="Pattern" lineEndContext="#stay">
+ <DetectChar char=">" context="#pop#pop" attribute="Operator"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="PatternAssertionCond" attribute="Normal Text" lineEndContext="#stay">
+ <Detect2Chars attribute="Operator" context="#pop#pop" char="}" char1=">"/>
+ <IncludeRules context="base"/>
+ </context>
+
+ <context name="PatternMetaChar" attribute="Pattern Meta Character" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop!CharError">
+ <AnyChar attribute="Pattern Character Class" context="#pop" String="nthvsdwNTHVSDW"/>
+ <RegExpr String="[^&rangealphabetic;&rangenumeric;]" context="#pop" attribute="Pattern Meta Character"/>
+ </context>
+
+
+ <!-- Pattern Character Classes -->
+
+ <context name="RegexClass" attribute="Pattern Meta Character" lineEndContext="#stay">
+ <DetectSpaces/>
+ <AnyChar attribute="Operator" context="#stay" String="-!+()"/>
+ <DetectChar attribute="Pattern Meta Character" context="RegexClassRange" char="["/>
+ <DetectChar attribute="Pattern Unicode Property" context="RegexClassName" char=":"/>
+ <DetectChar attribute="Pattern Meta Character" context="#pop" char=">"/>
+ <DetectChar attribute="String Delimiter" context="q_RawString" char="'"/>
+ <DetectChar attribute="String Delimiter" context="qq_RawString" char="&quot;"/>
+ <DetectChar attribute="String Delimiter" context="Q_String「" char="「"/>
+ <DetectChar attribute="String Delimiter" context="q_String&lt;" char="&lt;"/>
+ <DetectChar attribute="String Delimiter" context="qq_String«" char="«"/>
+ <RegExpr attribute="String" context="#stay" String="[^-!+()?:&lt;>'&quot;「«]+"/>
+ </context>
+
+ <context name="RegexClassName" attribute="Pattern Unicode Property" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+ <RegExpr String="\w+" context="#pop" attribute="Pattern Unicode Property"/>
+ <!-- auto-completion only -->
+ <keyword attribute="Pattern Unicode Property" context="#pop" String="unicodeGeneralCategories"/>
+ </context>
+
+ <context name="RegexClassRange" attribute="Pattern Character" lineEndContext="#stay">
+ <DetectSpaces/>
+ <DetectChar char="\" context="RegexClassRangeMetaChar" attribute="Pattern Character Class"/>
+ <Detect2Chars char="." char1="." context="#stay" attribute="Pattern Quantifier"/>
+ <DetectChar attribute="Pattern Meta Character" context="#pop" char="]"/>
+ </context>
+
+ <context name="RegexClassRangeMetaChar" attribute="Pattern Meta Character" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+ <DetectSpaces/>
+ <IncludeRules context="find_SpecialChar"/>
+ <IncludeRules context="PatternMetaChar"/>
+ </context>
+
+
+ <!-- Regex Substitution -->
+
+ <context name="RegexSubstitution" attribute="Operator" lineEndContext="#stay">
+ <IncludeRules context="find_RegexClosure"/>
+ <RegExpr String="([^\w\s])" context="RegexSubstitutionPattern" attribute="Operator" beginRegion="regex"/>
+ </context>
+
+ <context name="RegexSubstitutionPattern" attribute="Pattern" lineEndContext="#stay">
+ <RegExpr String="(%1)" dynamic="1" context="RegexSubstitutionString" attribute="Operator" endRegion="regex"/>
+ <IncludeRules context="find_Pattern"/>
+ </context>
+
+ <context name="RegexSubstitutionString" attribute="String" lineEndContext="#stay">
+ <DetectChar char="1" dynamic="1" context="#pop#pop#pop" attribute="Operator"/>
+ </context>
+
+
+ <!-- Number -->
+
+ <context name="Number" attribute="Decimal" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!CharErrorIfNoSep">
+ <RegExpr String="&int10;(?:\.&int10;(?:[eE][+-]?&int10;)?|[eE][+-]?&int10;)i?|\.&int10;(?:[eE][+-]?&int10;)?i?" context="CheckNumberError" attribute="Float"/>
+ <Detect2Chars char="0" char1="x" context="HexNumber" attribute="Hex"/>
+ <Detect2Chars char="0" char1="o" context="OctalNumber" attribute="Octal"/>
+ <RegExpr String="&int10;i?" context="CheckNumberError" attribute="Decimal"/>
+ <DetectChar char="." context="#pop" attribute="Operator"/>
+ </context>
+
+ <context name="HexNumber" attribute="Hex" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop!CharErrorIfNoSep">
+ <RegExpr String="[a-fA-F0-9]+(?:_[a-fA-F0-9]+)*i?" context="#pop!CheckNumberError" attribute="Hex"/>
+ </context>
+
+ <context name="OctalNumber" attribute="Octal" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop!CharErrorIfNoSep">
+ <RegExpr String="[0-7]+(?:_[0-7]+)*i?" context="#pop!CheckNumberError" attribute="Octal"/>
+ </context>
+
+ <context name="BaseNumber" attribute="Decimal" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop!CharErrorIfNoSep">
+ <DetectChar char="&gt;" context="#pop#pop#pop" attribute="Error"/>
+ <RegExpr String="&intN;\.&intN;|\.&intN;" context="#pop#pop!BaseNumberClose" attribute="Float"/>
+ <RegExpr String="&intN;" context="#pop#pop!BaseNumberClose" attribute="Decimal"/>
+ </context>
+ <context name="BaseNumberClose" attribute="Decimal" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop!CharErrorIfNoSep">
+ <DetectChar char="&gt;" context="#pop#pop" attribute="Operator"/>
+ <IncludeRules context="CheckNumberError"/>
+ </context>
+
+ <context name="CheckNumberError" attribute="Octal" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <RegExpr String="&alnum;+" context="#pop#pop" attribute="Error"/>
+ </context>
+
+
+ <!-- Attribute or Key -->
+
+ <context name="MaybeAttribute" attribute="Normal Text" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <Int context="MaybeAttribute2" attribute="Decimal"/>
+ <DetectChar char="!" context="#pop" attribute="Operator"/>
+ <RegExpr String="&ident;" context="#pop" attribute="Attribute"/>
+ </context>
+
+ <context name="MaybeAttribute2" attribute="Decimal" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <DetectChar char="&lt;" context="BaseNumber" attribute="Operator"/>
+ </context>
+
+
+ <!-- Pod -->
+
+ <context name="StartPod" attribute="Pod Typename" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop">
+ <WordDetect String="begin" context="PodBegin" attribute="Pod Block"/>
+ <WordDetect String="for" context="PodFor" attribute="Pod Typename"/>
+ <keyword String="pod" context="PodTypenameValue" attribute="Pod Typename"/>
+ <RegExpr String="[_A-Z][-_A-Z0-9]*\b" context="PodTypenameValue" attribute="Pod Typename"/>
+ <RegExpr String="&ident;" context="PodTypenameValue" attribute="Pod Unknown"/>
+ </context>
+
+ <context name="PodTypenameValue" attribute="Pod Typename Value" lineEndContext="PodTypenameValueNextLine" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Typename Value" context="#stay" String="&allnopodfmt;"/>
+ </context>
+
+ <context name="PodTypenameValueNextLine" attribute="Pod Typename Value" lineEndContext="#stay" lineEmptyContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop">
+ <DetectSpaces attribute="Normal Text" context="PodTypenameValueOrEmpty"/>
+ <DetectChar attribute="Pod" context="#pop#pop#pop" char="=" lookAhead="true"/>
+ </context>
+
+ <context name="PodTypenameValueOrEmpty" attribute="Pod Typename Value" lineEndContext="#pop#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <DetectChar attribute="Pod" context="#pop#pop#pop#pop" char="=" lookAhead="true"/>
+ </context>
+
+
+ <!-- Pod formatting -->
+
+ <context name="PodFormat" attribute="Pod Typename Value" lineEndContext="#stay">
+ <Detect2Chars char="B" char1="&lt;" attribute="Pod Bold" context="#pop!PodFormatB"/>
+ <Detect2Chars char="B" char1="«" attribute="Pod Bold" context="#pop!PodFormatB2"/>
+ <Detect2Chars char="I" char1="&lt;" attribute="Pod Italic" context="#pop!PodFormatI"/>
+ <Detect2Chars char="I" char1="«" attribute="Pod Italic" context="#pop!PodFormatI2"/>
+ <Detect2Chars char="L" char1="&lt;" attribute="Pod Link" context="#pop!PodFormatL"/>
+ <Detect2Chars char="L" char1="«" attribute="Pod Link" context="#pop!PodFormatL2"/>
+ <Detect2Chars char="N" char1="&lt;" attribute="Pod Note" context="#pop!PodFormatN"/>
+ <Detect2Chars char="N" char1="«" attribute="Pod Note" context="#pop!PodFormatN2"/>
+ <Detect2Chars char="P" char1="&lt;" attribute="Pod Link" context="#pop!PodFormatL"/>
+ <Detect2Chars char="P" char1="«" attribute="Pod Link" context="#pop!PodFormatL2"/>
+ <Detect2Chars char="Z" char1="&lt;" attribute="Pod Comment" context="#pop!PodFormatZ"/>
+ <Detect2Chars char="Z" char1="«" attribute="Pod Comment" context="#pop!PodFormatZ2"/>
+ <Detect2Chars char="U" char1="&lt;" attribute="Pod Underline" context="#pop!PodFormatU"/>
+ <Detect2Chars char="U" char1="«" attribute="Pod Underline" context="#pop!PodFormatU2"/>
+ <Detect2Chars char="C" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
+ <Detect2Chars char="C" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
+ <Detect2Chars char="E" char1="&lt;" attribute="Pod Unicode" context="#pop!PodFormatE"/>
+ <Detect2Chars char="E" char1="«" attribute="Pod Unicode" context="#pop!PodFormatE2"/>
+ <Detect2Chars char="K" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
+ <Detect2Chars char="K" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
+ <Detect2Chars char="R" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
+ <Detect2Chars char="R" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
+ <Detect2Chars char="T" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
+ <Detect2Chars char="T" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
+ <Detect2Chars char="V" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatV"/>
+ <Detect2Chars char="V" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatV2"/>
+ <Detect2Chars char="X" char1="&lt;" attribute="Pod Indexed Terms" context="#pop!PodFormatX"/>
+ <Detect2Chars char="X" char1="«" attribute="Pod Indexed Terms" context="#pop!PodFormatX2"/>
+ <Detect2Chars char="M" char1="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT"/>
+ <Detect2Chars char="M" char1="«" attribute="Pod Verbatim" context="#pop!PodFormatVT2"/>
+ </context>
+
+ <context name="PodFormatB" attribute="Pod Bold" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatB1">
+ <DetectChar char="&lt;" attribute="Pod Bold" context="#pop!PodFormatB3"/>
+ </context>
+ <context name="PodFormatB1" attribute="Pod Bold" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Bold" context="PodFormatB1"/>
+ <DetectChar char=">" attribute="Pod Bold" context="#pop"/>
+ </context>
+ <context name="PodFormatB2" attribute="Pod Bold" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Bold" context="PodFormatB2"/>
+ <DetectChar char="»" attribute="Pod Bold" context="#pop"/>
+ </context>
+ <context name="PodFormatB3" attribute="Pod Bold" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Bold" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Bold" context="PodFormatB3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Bold" context="#pop"/>
+ </context>
+
+ <context name="PodFormatE" attribute="Pod Unicode" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatE1">
+ <DetectChar char="&lt;" attribute="Pod Unicode" context="#pop!PodFormatE3"/>
+ </context>
+ <context name="PodFormatE1" attribute="Pod Unicode" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Unicode" context="PodFormatE1"/>
+ <DetectChar char=">" attribute="Pod Unicode" context="#pop"/>
+ </context>
+ <context name="PodFormatE2" attribute="Pod Unicode" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Unicode" context="PodFormatE2"/>
+ <DetectChar char="»" attribute="Pod Unicode" context="#pop"/>
+ </context>
+ <context name="PodFormatE3" attribute="Pod Unicode" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Unicode" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Unicode" context="PodFormatE3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Unicode" context="#pop"/>
+ </context>
+
+ <context name="PodFormatI" attribute="Pod Italic" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatI1">
+ <DetectChar char="&lt;" attribute="Pod Italic" context="#pop!PodFormatI3"/>
+ </context>
+ <context name="PodFormatI1" attribute="Pod Italic" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Italic" context="PodFormatI1"/>
+ <DetectChar char=">" attribute="Pod Italic" context="#pop"/>
+ </context>
+ <context name="PodFormatI2" attribute="Pod Italic" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Italic" context="PodFormatI2"/>
+ <DetectChar char="»" attribute="Pod Italic" context="#pop"/>
+ </context>
+ <context name="PodFormatI3" attribute="Pod Italic" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Italic" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Italic" context="PodFormatI3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Italic" context="#pop"/>
+ </context>
+
+ <context name="PodFormatL" attribute="Pod Link" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatL1">
+ <DetectChar char="&lt;" attribute="Pod Link" context="#pop!PodFormatL3"/>
+ </context>
+ <context name="PodFormatL1" attribute="Pod Link" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;&lt;>|]+|[&podfmt;](?![&lt;«]))+"/>
+ <DetectChar char="|" attribute="Pod Operator" context="#stay"/>
+ <DetectChar char=">" attribute="Pod Link" context="#pop"/>
+ </context>
+ <context name="PodFormatL2" attribute="Pod Link" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;«»|]+|[&podfmt;](?![&lt;«]))+"/>
+ <DetectChar char="|" attribute="Pod Operator" context="#stay"/>
+ <DetectChar char="»" attribute="Pod Link" context="#pop"/>
+ </context>
+ <context name="PodFormatL3" attribute="Pod Link" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;&lt;>|]+|[&podfmt;](?![&lt;«])|>(?!>)|&lt;(?!&lt;))+"/>
+ <DetectChar char="|" attribute="Pod Operator" context="#stay"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Link" context="#pop"/>
+ </context>
+
+ <context name="PodFormatN" attribute="Pod Note" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatN1">
+ <DetectChar char="&lt;" attribute="Pod Note" context="#pop!PodFormatN3"/>
+ </context>
+ <context name="PodFormatN1" attribute="Pod Note" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Note" context="PodFormatN1"/>
+ <DetectChar char=">" attribute="Pod Note" context="#pop"/>
+ </context>
+ <context name="PodFormatN2" attribute="Pod Note" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Note" context="PodFormatN2"/>
+ <DetectChar char="»" attribute="Pod Note" context="#pop"/>
+ </context>
+ <context name="PodFormatN3" attribute="Pod Note" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Note" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Note" context="PodFormatN3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Note" context="#pop"/>
+ </context>
+
+ <context name="PodFormatU" attribute="Pod Underline" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatU1">
+ <DetectChar char="&lt;" attribute="Pod Underline" context="#pop!PodFormatU3"/>
+ </context>
+ <context name="PodFormatU1" attribute="Pod Underline" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Underline" context="PodFormatU1"/>
+ <DetectChar char=">" attribute="Pod Underline" context="#pop"/>
+ </context>
+ <context name="PodFormatU2" attribute="Pod Underline" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Underline" context="PodFormatU2"/>
+ <DetectChar char="»" attribute="Pod Underline" context="#pop"/>
+ </context>
+ <context name="PodFormatU3" attribute="Pod Underline" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Underline" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Underline" context="PodFormatU3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Underline" context="#pop"/>
+ </context>
+
+ <context name="PodFormatV" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatV1">
+ <DetectChar char="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatV3"/>
+ </context>
+ <context name="PodFormatV1" attribute="Pod Verbatim" lineEndContext="#stay">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Verbatim" context="PodFormatV1"/>
+ <DetectChar char=">" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+ <context name="PodFormatV2" attribute="Pod Verbatim" lineEndContext="#stay">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Verbatim" context="PodFormatV2"/>
+ <DetectChar char="»" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+ <context name="PodFormatV3" attribute="Pod Verbatim" lineEndContext="#stay">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Verbatim" context="PodFormatV3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+
+ <context name="PodFormatVT" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatVT1">
+ <DetectChar char="&lt;" attribute="Pod Verbatim" context="#pop!PodFormatVT3"/>
+ </context>
+ <context name="PodFormatVT1" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Verbatim" context="PodFormatVT1"/>
+ <DetectChar char=">" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+ <context name="PodFormatVT2" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Verbatim" context="PodFormatVT2"/>
+ <DetectChar char="»" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+ <context name="PodFormatVT3" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Verbatim" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Verbatim" context="PodFormatVT3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Verbatim" context="#pop"/>
+ </context>
+
+ <context name="PodFormatZ" attribute="Pod Comment" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatZ1">
+ <DetectChar char="&lt;" attribute="Pod Comment" context="#pop!PodFormatZ3"/>
+ </context>
+ <context name="PodFormatZ1" attribute="Pod Comment" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt1;"/>
+ <DetectChar char="&lt;" attribute="Pod Comment" context="PodFormatZ1"/>
+ <DetectChar char=">" attribute="Pod Comment" context="#pop"/>
+ </context>
+ <context name="PodFormatZ2" attribute="Pod Comment" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt2;"/>
+ <DetectChar char="«" attribute="Pod Comment" context="PodFormatZ2"/>
+ <DetectChar char="»" attribute="Pod Comment" context="#pop"/>
+ </context>
+ <context name="PodFormatZ3" attribute="Pod Comment" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Comment" context="#stay" String="&allnopodfmt3;"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Comment" context="PodFormatZ3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Comment" context="#pop"/>
+ </context>
+
+ <context name="PodFormatX" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!PodFormatX1">
+ <DetectChar char="&lt;" attribute="Pod Indexed Terms" context="#pop!PodFormatX3"/>
+ </context>
+ <context name="PodFormatX1" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;&lt;>|;,]+|[&podfmt;](?![&lt;«]))+"/>
+ <AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
+ <DetectChar char=">" attribute="Pod Indexed Terms" context="#pop"/>
+ </context>
+ <context name="PodFormatX2" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;«»|;,]+|[&podfmt;](?![&lt;«]))+"/>
+ <AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
+ <DetectChar char="«" attribute="Pod Indexed Terms" context="PodFormatX2"/>
+ <DetectChar char="»" attribute="Pod Indexed Terms" context="#pop"/>
+ </context>
+ <context name="PodFormatX3" attribute="Pod Indexed Terms" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodFormat">
+ <RegExpr attribute="Pod Link" context="#stay" String="(?:[^&podfmt;&lt;>|;,]+|[&podfmt;](?![&lt;«])|>(?!>)|&lt;(?!&lt;))+"/>
+ <AnyChar String="|;," attribute="Pod Operator" context="#stay"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Pod Indexed Terms" context="PodFormatX3"/>
+ <Detect2Chars char=">" char1=">" attribute="Pod Indexed Terms" context="#pop"/>
+ </context>
+
+ <!-- Pod =begin -->
+
+ <context name="PodBegin" attribute="Pod Typename Value" lineEndContext="#pop#pop!Error">
+ <DetectSpaces attribute="Normal Text"/>
+ <WordDetect String="code" context="PodBeginCode" attribute="Pod Typename Value" beginRegion="pod"/>
+ <WordDetect String="comment" context="PodBeginComment" attribute="Pod Typename Value" beginRegion="pod"/>
+ <RegExpr String="(&ident;)" context="PodBeginTypename" attribute="Pod Typename Value" beginRegion="pod"/>
+ <!-- auto-completion only -->
+ <keyword String="podblocktypename" context="#stay" attribute="Pod Typename Value"/>
+ </context>
+
+ <context name="PodBeginCode" attribute="Error" lineEndContext="PodInnerCode">
+ <DetectSpaces attribute="Normal Text"/>
+ <DetectChar char=":" context="PodBlockConfigKey" attribute="Pod Operator"/>
+ <DetectChar char="=" context="PodEndCode" attribute="Pod" firstNonSpace="1"/>
+ </context>
+
+ <context name="PodInnerCode" attribute="Pod Verbatim" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodCode">
+ <RegExpr String="^\s*=end\s+code\s*$" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
+ </context>
+ <context name="PodCode" attribute="Pod Verbatim" lineEndContext="#pop"/>
+
+ <context name="PodEndCode" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
+ <StringDetect String="end" context="PodEndCodeName" attribute="Pod Block" endRegion="pod"/>
+ </context>
+ <context name="PodEndCodeName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop#pop!Error">
+ <DetectSpaces attribute="Normal Text"/>
+ <StringDetect String="code" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
+ </context>
+
+
+ <context name="PodBeginComment" attribute="Error" lineEndContext="PodInnerComment">
+ <DetectSpaces attribute="Normal Text"/>
+ <DetectChar char="=" context="PodEndComment" attribute="Pod" firstNonSpace="1"/>
+ </context>
+
+ <context name="PodInnerComment" attribute="Comment" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodComment">
+ <RegExpr String="^\s*=end\s+comment\s*$" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
+ </context>
+ <context name="PodComment" attribute="Comment" lineEndContext="#pop"/>
+
+ <context name="PodEndComment" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
+ <StringDetect String="end" context="PodEndCommentName" attribute="Pod Block" endRegion="pod"/>
+ </context>
+ <context name="PodEndCommentName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop#pop!Error">
+ <DetectSpaces attribute="Normal Text"/>
+ <StringDetect String="comment" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
+ </context>
+
+
+ <context name="PodBeginTypename" attribute="Error" lineEndContext="PodInnerBlock">
+ <RegExpr String="^\s*=end\s+%1\b" dynamic="1" context="PodEnd" attribute="Pod" column="0" lookAhead="1"/>
+ <DetectSpaces attribute="Normal Text"/>
+ <DetectChar char=":" context="PodBlockConfigKey" attribute="Pod Operator"/>
+ <DetectChar char="=" context="PodEndError" attribute="Pod" firstNonSpace="1"/>
+ </context>
+
+ <context name="PodInnerBlock" attribute="Pod Paragraph" lineEndContext="#stay" fallthrough="1" fallthroughContext="PodInnerBlockFormat">
+ <RegExpr String="^\s*=end\b" context="#pop" attribute="Pod" column="0" lookAhead="1"/>
+ <DetectSpaces/>
+ <DetectChar char="=" context="StartPod" attribute="Pod" firstNonSpace="1"/>
+ <RegExpr attribute="Pod Paragraph" context="#stay" String="&allnopodfmt;"/>
+ </context>
+
+ <context name="PodInnerBlockFormat" attribute="Pod Paragraph" lineEndContext="#stay">
+ <IncludeRules context="PodFormat"/>
+ </context>
+
+ <context name="PodEnd" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
+ <DetectSpaces attribute="Normal Text"/>
+ <DetectChar char="=" context="#stay" attribute="Pod"/>
+ <StringDetect String="end" context="PodEndName" attribute="Pod Block" endRegion="pod"/>
+ </context>
+ <context name="PodEndName" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop#pop">
+ <DetectSpaces attribute="Normal Text"/>
+ <RegExpr String="&ident;" context="#pop#pop#pop#pop!Error" attribute="Pod Typename Value"/>
+ </context>
+
+ <context name="PodEndError" attribute="Pod Paragraph" lineEndContext="#pop#pop#pop">
+ <StringDetect String="end" attribute="Pod Block" context="#pop#pop#pop!Error" endRegion="pod"/>
+ </context>
+
+ <!-- Pod configuration for =begin -->
+
+ <context name="PodBlockConfigError" attribute="Error" lineEndContext="#pop#pop!PodInnerBlock"/>
+
+ <context name="PodBlockConfigKey" attribute="Pod Key" lineEndContext="#pop!PodInnerBlock" fallthrough="1" fallthroughContext="PodBlockConfigError">
+ <DetectChar char="!" context="#pop!PodBlockConfigKeyName" attribute="Pod Operator"/>
+ <Int context="PodBlockConfigKeyIntName" attribute="Decimal"/>
+ <DetectIdentifier context="PodBlockConfigParam" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodBlockConfigKeyName" attribute="Pod Key" lineEndContext="#pop!PodTypenameValue" fallthrough="1" fallthroughContext="PodBlockConfigError">
+ <DetectIdentifier context="PodBlockConfigParam" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodBlockConfigKeyIntName" attribute="Pod Key" lineEndContext="#pop#pop!PodBlockConfigError" fallthrough="1" fallthroughContext="#pop!PodBlockConfigError">
+ <DetectIdentifier context="#pop#pop" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodBlockConfigParam" attribute="Pod Key" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop">
+ <AnyChar String="&lt;" context="PodParamSequence" attribute="Pod Operator"/>
+ <DetectChar char="{" context="PodParamHash" attribute="Pod Operator"/>
+ <AnyChar String="([" context="PodParamList" attribute="Pod Operator"/>
+ </context>
+
+
+ <!-- Pod =for -->
+
+ <context name="PodFor" attribute="Pod Typename" lineEndContext="#pop#pop!Error" fallthrough="1" fallthroughContext="#pop#pop!Error">
+ <DetectSpaces attribute="Normal Text"/>
+ <keyword String="podtypename" context="#pop!PodConfig" attribute="Pod Typename"/>
+ </context>
+
+ <!-- Pod configuration for =for -->
+
+ <context name="PodConfigError" attribute="Error" lineEndContext="#pop#pop!PodTypenameValue"/>
+
+ <context name="PodConfig" attribute="Normal Text" lineEndContext="#pop!PodTypenameValue" fallthrough="1" fallthroughContext="PodConfigError">
+ <DetectSpaces/>
+ <DetectChar char=":" context="PodConfigKey" attribute="Pod Operator"/>
+ </context>
+
+ <context name="PodConfigKey" attribute="Pod Key" lineEndContext="#pop#pop!PodTypenameValue" fallthrough="1" fallthroughContext="#pop!PodConfigError">
+ <DetectChar char="!" context="#pop!PodConfigKeyName" attribute="Pod Operator"/>
+ <Int context="PodConfigKeyIntName" attribute="Decimal"/>
+ <DetectIdentifier context="PodConfigParam" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodConfigKeyName" attribute="Pod Key" lineEndContext="#pop#pop!PodTypenameValue" fallthrough="1" fallthroughContext="#pop!PodConfigError">
+ <DetectIdentifier context="PodConfigParam" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodConfigKeyIntName" attribute="Pod Key" lineEndContext="#pop#pop#pop!PodConfigError" fallthrough="1" fallthroughContext="#pop#pop!PodConfigError">
+ <DetectIdentifier context="#pop#pop" attribute="Pod Key"/>
+ </context>
+
+ <context name="PodConfigParam" attribute="Pod Key" lineEndContext="#pop#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <AnyChar String="&lt;" context="PodParamSequence" attribute="Pod Operator"/>
+ <DetectChar char="{" context="PodParamHash" attribute="Pod Operator"/>
+ <AnyChar String="([" context="PodParamList" attribute="Pod Operator"/>
+ </context>
+
+ <context name="PodParamSequence" attribute="Pod Config" lineEndContext="#stay">
+ <DetectSpaces/>
+ <keyword String="podvalue" context="#stay" attribute="Data Type"/>
+ <DetectIdentifier/>
+ <AnyChar String="0123456789." context="Number" lookAhead="1"/>
+ <DetectChar char=">" context="#pop#pop#pop" attribute="Pod Operator"/>
+ <DetectChar char="'" context="PodSQString" attribute="String"/>
+ <DetectChar char="&quot;" context="PodQString" attribute="String"/>
+ </context>
+
+ <context name="PodParamHash" attribute="Pod Config" lineEndContext="#stay">
+ <DetectSpaces/>
+ <Detect2Chars char="=" char1=">" context="#stay" attribute="Pod Operator"/>
+ <DetectChar char="," context="#stay" attribute="Pod Operator"/>
+ <keyword String="podvalue" context="#stay" attribute="Data Type"/>
+ <DetectIdentifier/>
+ <DetectChar char="'" context="PodSQString" attribute="String"/>
+ <DetectChar char="&quot;" context="PodQString" attribute="String"/>
+ <AnyChar String="0123456789." context="Number" lookAhead="1"/>
+ <DetectChar char="}" context="#pop#pop#pop" attribute="Pod Operator"/>
+ </context>
+
+ <context name="PodParamList" attribute="Pod Config" lineEndContext="#stay">
+ <DetectSpaces/>
+ <DetectChar char="," context="#stay" attribute="Pod Operator"/>
+ <keyword String="podvalue" context="#stay" attribute="Data Type"/>
+ <DetectIdentifier/>
+ <DetectChar char="'" context="PodSQString" attribute="String"/>
+ <DetectChar char="&quot;" context="PodQString" attribute="String"/>
+ <AnyChar String="0123456789." context="Number" lookAhead="1"/>
+ <AnyChar String="])" context="#pop#pop#pop" attribute="Pod Operator"/>
+ </context>
+
+
+ <!-- Pod String -->
+
+ <context name="PodSQString" attribute="String" lineEndContext="#stay">
+ <Detect2Chars char="\" char1="'" context="#stay" attribute="String Special Character"/>
+ <DetectChar char="'" context="#pop" attribute="String Delimiter"/>
+ <RegExpr String="(?:[^\\']*|\\[^']|\\$)*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="PodQString" attribute="String" lineEndContext="#stay">
+ <DetectChar char="&quot;" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="\" context="SpecialChar" attribute="String Special Character"/>
+ <RegExpr String="(?:[^&quot;\\]*|\\$)*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="find_SpecialChar" attribute="String Special Character" lineEndContext="#stay">
+ <Detect2Chars char="c" char1="[" context="UnicodeCodepoint" attribute="String Special Character"/>
+ <DetectChar char="c" context="UnicodeCodepointDecimal" attribute="String Special Character"/>
+ <DetectChar char="x" context="HexaString" attribute="String Special Character"/>
+ <DetectChar char="o" context="OctalString" attribute="String Special Character"/>
+ </context>
+
+ <context name="SpecialChar" attribute="String Special Character" lineEndContext="#pop">
+ <IncludeRules context="find_SpecialChar"/>
+ <RegExpr String="." context="#pop" attribute="String"/>
+ </context>
+
+ <context name="UnicodeCodepoint" attribute="String Special Character" lineEndContext="#stay">
+ <DetectSpaces/>
+ <DetectIdentifier/>
+ <DetectChar char="]" context="#pop#pop" attribute="String Special Character"/>
+ <DetectChar char="," context="#stay" attribute="Separator Symbol"/>
+ </context>
+
+ <context name="UnicodeCodepointDecimal" attribute="String Special Character" lineEndContext="#pop#pop">
+ <!-- 0 to 1114111 -->
+ <RegExpr String="0*(?:1(?:0\d{5}|1(?:O\d{4}|(?:1[0-3]\d{3}|4(?:0\d\d|1(?:0\d|1[01]))))))|\d{1,6}|0+" context="UnicodeCodepointDecimalCheck" attribute="String Special Character"/>
+ <RegExpr String="[^&quot;]" context="#pop" attribute="Error"/>
+ </context>
+ <context name="UnicodeCodepointDecimalCheck" attribute="Error" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop">
+ <AnyChar String="0123456789" context="#pop#pop#pop" attribute="Error"/>
+ </context>
+
+ <context name="HexaString" attribute="String Special Character" lineEndContext="#pop#pop">
+ <DetectChar char="[" context="HexaStringBracket" attribute="String Special Character"/>
+ <!-- 0 to 0x10FFFF -->
+ <RegExpr String="0*(?:10[0-9a-fA-F]{4}|[0-9a-fA-F]{1,5})|0+" context="HexaStringCheck" attribute="String Special Character"/>
+ <RegExpr String="[^&quot;]" context="#pop#pop" attribute="Error"/>
+ </context>
+ <context name="HexaStringCheck" attribute="Error" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop">
+ <AnyChar String="0123456789abcdefABCDEF" context="#pop#pop#pop" attribute="Error"/>
+ </context>
+ <context name="HexaStringBracket" attribute="String Special Character" lineEndContext="#stay">
+ <DetectSpaces/>
+ <DetectChar char="]" context="#pop#pop#pop" attribute="Error"/>
+ <!-- 0 to 0x10FFFF -->
+ <RegExpr String="0*(?:10[0-9a-fA-F]{4}|[0-9a-fA-F]{1,5})|0+" context="HexaStringBracketCheck" attribute="String Special Character"/>
+ </context>
+ <context name="HexaStringBracketCheck" attribute="String Special Character" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop#pop">
+ <DetectChar char="]" context="#pop#pop#pop#pop" attribute="String Special Character"/>
+ <DetectChar char="," context="#pop" attribute="Separator Symbol"/>
+ <RegExpr String="[^]&quot;]" context="#stay" attribute="Error"/>
+ </context>
+
+ <context name="OctalString" attribute="String Special Character" lineEndContext="#pop#pop">
+ <DetectChar char="[" context="OctalStringBracket" attribute="String Special Character"/>
+ <!-- 0 to 0o4177777 -->
+ <RegExpr String="0*(?:[0-3][0-7]{6}|4[01]|[0-7])[0-7]{0,5}|0+" context="OctalStringCheck" attribute="String Special Character"/>
+ <RegExpr String="[^&quot;]" context="#stay" attribute="Error"/>
+ </context>
+ <context name="OctalStringCheck" attribute="Error" lineEndContext="#pop#pop#pop" fallthrough="1" fallthroughContext="#pop#pop#pop">
+ <AnyChar String="01234567" context="#pop#pop#pop" attribute="Error"/>
+ </context>
+ <context name="OctalStringBracket" attribute="String Special Character" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop#pop#pop" attribute="Error"/>
+ <!-- 0 to 0o4177777 -->
+ <RegExpr String="0*(?:[0-3][0-7]{6}|4[01]|[0-7])[0-7]{0,5}|0+" context="OctalStringBracketCheck" attribute="String Special Character"/>
+ </context>
+ <context name="OctalStringBracketCheck" attribute="String Special Character" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop#pop#pop">
+ <DetectChar char="]" context="#pop#pop#pop#pop" attribute="String Special Character"/>
+ <DetectChar char="," context="#pop" attribute="Separator Symbol"/>
+ <RegExpr String="[^]&quot;]" context="#stay" attribute="Error"/>
+ </context>
+
+
+ <!-- Q String -->
+
+ <context name="Q_String" attribute="String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop">
+ <RegExpr String="Q\s+(?=['(])|Q\s*(?=[^()>」\]}'a-zA-Z0-9])" context="Q_StringOpen" attribute="String"/>
+ <RegExpr String="Q\s*$" context="Q_String2" attribute="String"/>
+ </context>
+
+ <context name="Q_String2" attribute="String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!Q_StringOpen">
+ <DetectSpaces/>
+ </context>
+
+ <context name="Q_StringOpen" attribute="String" lineEndContext="#stay">
+ <DetectChar char=":" context="#pop#pop!Q_StringModifier" attribute="Operator"/>
+ <DetectChar char="(" context="#pop#pop!Q_String(" attribute="String Delimiter"/>
+ <DetectChar char="[" context="#pop#pop!Q_String[" attribute="String Delimiter"/>
+ <DetectChar char="{" context="#pop#pop!Q_String{" attribute="String Delimiter"/>
+ <DetectChar char="「" context="#pop#pop!Q_String「" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="#pop#pop!Q_String&lt;" attribute="String Delimiter"/>
+ <RegExpr String="(.)" context="#pop#pop!Q_StringAny" attribute="String Delimiter"/>
+ </context>
+
+ <context name="Q_String(" attribute="String" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="(" context="Q_String(" attribute="String Delimiter"/>
+ <RegExpr String="[^()]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="Q_String[" attribute="String" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="[" context="Q_String[" attribute="String Delimiter"/>
+ <RegExpr String="[^\[\]]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="Q_String{" attribute="String" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="{" context="Q_String{" attribute="String Delimiter"/>
+ <RegExpr String="[^{}]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="Q_String「" attribute="String" lineEndContext="#stay">
+ <DetectChar char="」" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="「" context="Q_String「" attribute="String Delimiter"/>
+ <RegExpr String="[^「」]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="Q_String&lt;" attribute="String" lineEndContext="#stay">
+ <DetectChar char=">" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="Q_String&lt;" attribute="String Delimiter"/>
+ <RegExpr String="[^&lt;>]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="Q_StringAny" attribute="String" lineEndContext="#stay">
+ <DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
+ <RegExpr String="[^%1]*" dynamic="1" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="q_Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop!q_String">
+ <DetectChar char=":" context="#pop#pop!q_QuotingForm2" attribute="Operator"/>
+ </context>
+
+ <context name="qq_Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop!qq_String">
+ <DetectChar char=":" context="#pop!qq_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="Q_StringModifier" attribute="Operator" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop!q_QuotingForm2">
+ <DetectChar char="q" context="#pop!q_QuotingForm" attribute="Operator"/>
+ <DetectChar char="'" context="q_Q_StringModifier" attribute="Operator"/>
+ <DetectChar char="&quot;" context="qq_Q_StringModifier" attribute="Operator"/>
+ </context>
+
+ <context name="q_QuotingForm" attribute="Operator" lineEndContext="#pop" fallthrough="1" fallthroughContext="#pop!q_QuotingForm2">
+ <DetectChar char="q" context="#pop!qq_QuotingForm" attribute="Operator"/>
+ <DetectChar char=":" context="#pop!q_QuotingForm2" attribute="Operator"/>
+ </context>
+ <context name="q_QuotingForm2" attribute="Operator" lineEndContext="#pop" fallthrough="1" fallthroughContext="q_String">
+ <AnyChar String="wvx:sahfb" context="#stay" attribute="Operator"/>
+ <!-- :closure as qq -->
+ <DetectChar char="c" context="#pop!qq_QuotingForm" attribute="Operator"/>
+ <Detect2Chars char="t" char1="o" context="q_Heredoc" attribute="Operator"/>
+ <WordDetect String="heredoc" context="q_Heredoc" attribute="Operator"/>
+ <keyword String="quoting" context="#stay" attribute="Operator"/>
+ </context>
+
+ <context name="qq_QuotingForm" attribute="Operator" lineEndContext="#pop" fallthrough="1" fallthroughContext="qq_String">
+ <AnyChar String="wvx:sahfcb" context="#stay" attribute="Operator"/>
+ <Detect2Chars char="t" char1="o" context="qq_Heredoc" attribute="Operator"/>
+ <WordDetect String="heredoc" context="qq_Heredoc" attribute="Operator"/>
+ <keyword String="quoting" context="#stay" attribute="Operator"/>
+ </context>
+
+
+ <!-- q and qq Heredoc -->
+
+ <context name="q_Heredoc" attribute="String" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <RegExpr String="/([^/]+)/" context="q_HeredocTerminator" attribute="String Delimiter"/>
+ </context>
+ <context name="q_HeredocTerminator" attribute="String" lineEndContext="#stay">
+ <DetectSpaces/>
+ <StringDetect String="%1" dynamic="1" context="#pop#pop#pop" attribute="String Delimiter" firstNonSpace="1"/>
+ <RegExpr String="(?:[^\\]*|\\(?![\\%1]|&quotingconstruct;|$))*" dynamic="1" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="qq_Heredoc" attribute="String" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <RegExpr String="/([^/]+)/" context="qq_HeredocTerminator" attribute="String Delimiter"/>
+ </context>
+ <context name="qq_HeredocTerminator" attribute="String" lineEndContext="#stay">
+ <DetectSpaces/>
+ <StringDetect String="%1" dynamic="1" context="#pop#pop#pop" attribute="String Delimiter" firstNonSpace="1"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^\\${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+
+ <!-- q String -->
+
+ <context name="q_String" attribute="String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop">
+ <DetectSpaces/>
+ <DetectChar char="(" context="#pop#pop!q_String(" attribute="String Delimiter"/>
+ <DetectChar char="[" context="#pop#pop!q_String[" attribute="String Delimiter"/>
+ <DetectChar char="{" context="#pop#pop!q_String{" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="#pop#pop!q_String&lt;" attribute="String Delimiter"/>
+ <RegExpr String="([^a-zA-Z0-9])" context="#pop#pop!q_StringAny" attribute="String Delimiter"/>
+ </context>
+
+ <context name="q_String(" attribute="String" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="(" context="q_String(" attribute="String Delimiter"/>
+ <Detect2Chars char="\" char1="(" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1=")" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^()\\]*|\\(?![()\\]|&quotingconstruct;|$))*" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="q_String[" attribute="String" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="[" context="q_String[" attribute="String Delimiter"/>
+ <Detect2Chars char="\" char1="[" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="]" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^\[\]\\]*|\\(?![\[\]\\]|&quotingconstruct;|$))*" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="q_String{" attribute="String" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="{" context="q_String{" attribute="String Delimiter"/>
+ <Detect2Chars char="\" char1="{" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="}" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^{}\\]*|\\(?![{}\\]|&quotingconstruct;|$))*" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="q_String&lt;" attribute="String" lineEndContext="#stay">
+ <DetectChar char=">" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="q_String&lt;" attribute="String Delimiter"/>
+ <Detect2Chars char="\" char1="&lt;" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1=">" context="#stay" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="\" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^&lt;>\\]*|\\(?![&lt;>\\]|&quotingconstruct;|$))*" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="q_StringAny" attribute="String" lineEndContext="#stay">
+ <DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
+ <StringDetect String="\%1" dynamic="1" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^\\%1]*|\\(?![\\%1]|&quotingconstruct;|$))*" dynamic="1" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <context name="q_RawString" attribute="String" lineEndContext="#stay">
+ <DetectChar char="'" context="#pop" attribute="String Delimiter"/>
+ <Detect2Chars char="\" char1="'" context="#stay" attribute="String Special Character"/>
+ <RegExpr String="(?:[^\\']*|\\(?![\\']|&quotingconstruct;|$))*" context="#stay" attribute="String"/>
+ <Detect2Chars char="\" char1="q" context="q_QuotingForm" attribute="Operator"/>
+ </context>
+
+ <!-- qq String -->
+
+ <context name="qq_String" attribute="String" lineEndContext="#stay" fallthrough="1" fallthroughContext="#pop#pop">
+ <DetectSpaces/>
+ <DetectChar char="(" context="#pop#pop!qq_String(" attribute="String Delimiter"/>
+ <DetectChar char="[" context="#pop#pop!qq_String[" attribute="String Delimiter"/>
+ <DetectChar char="{" context="#pop#pop!qq_String{" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="#pop#pop!qq_String&lt;" attribute="String Delimiter"/>
+ <RegExpr String="([^a-zA-Z0-9])" context="#pop#pop!qq_StringAny" attribute="String Delimiter"/>
+ </context>
+
+ <context name="qq_String(" attribute="String" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="(" context="qq_String(" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^()\\${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_String[" attribute="String" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="[" context="qq_String[" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^\[\]\\${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_String{" attribute="String" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="{" context="qq_String{" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^{}\\$@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_String&lt;" attribute="String" lineEndContext="#stay">
+ <DetectChar char=">" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="&lt;" context="qq_String&lt;" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^&lt;>\\${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_String«" attribute="String" lineEndContext="#stay">
+ <DetectChar char="»" context="#pop" attribute="String Delimiter"/>
+ <DetectChar char="«" context="qq_String«" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^«»\\${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_String&lt;&lt;" attribute="String" lineEndContext="#stay">
+ <Detect2Chars char=">" char1=">" context="#pop" attribute="String Delimiter"/>
+ <Detect2Chars char="&lt;" char1="&lt;" context="qq_String&lt;&lt;" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="([^&lt;>\\${@&amp;]*|&lt;(?!&lt;)|>(?!>))" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_StringAny" attribute="String" lineEndContext="#stay">
+ <DetectChar char="1" dynamic="1" context="#pop" attribute="String Delimiter"/>
+ <StringDetect String="\%1" dynamic="1" context="#stay" attribute="String Special Character"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^%1\\${@&amp;]*" dynamic="1" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="qq_RawString" attribute="String" lineEndContext="#stay">
+ <DetectChar char="&quot;" context="#pop" attribute="String Delimiter"/>
+ <IncludeRules context="find_qq_StringCommon"/>
+ <RegExpr String="[^\\&quot;${@&amp;]*" context="#stay" attribute="String"/>
+ </context>
+
+ <context name="find_qq_StringCommon" attribute="String" lineEndContext="#stay">
+ <DetectChar char="\" context="qq_StringEscape" attribute="Operator" lookAhead="1"/>
+ <DetectChar char="{" context="qq_Interpolation" attribute="String (interpolated)"/>
+ <DetectChar char="$" context="qq_StringMaybeVar$" attribute="String" lookAhead="1"/>
+ <AnyChar String="@%" context="qq_StringMaybeVar" attribute="String" lookAhead="1"/>
+ <DetectChar char="&amp;" context="qq_StringSigil" attribute="String" lookAhead="1"/>
+ </context>
+
+ <context name="qq_StringEscape" attribute="String Special Character" lineEndContext="#pop">
+ <Detect2Chars char="\" char1="q" context="#pop!q_QuotingForm" attribute="Operator"/>
+ <Detect2Chars char="\" char1="x" context="HexaString" attribute="String Special Character"/>
+ <StringDetect String="\c[" context="UnicodeCodepoint" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="c" context="UnicodeCodepointDecimal" attribute="String Special Character"/>
+ <Detect2Chars char="\" char1="o" context="OctalString" attribute="String Special Character"/>
+ <RegExpr String="\\.?" context="#pop" attribute="String Special Character"/>
+ </context>
+
+ <context name="qq_Interpolation" attribute="String (interpolated)" lineEndContext="#stay">
+ <DetectChar char="}" context="#pop" attribute="String (interpolated)"/>
+ <IncludeRules context="base"/>
+ </context>
+
+ <context name="qq_StringSigil" attribute="Function" lineEndContext="#stay">
+ <RegExpr String="&amp;&ident;\(" context="#pop!FunctionParameters" attribute="Function"/>
+ <DetectChar char="&amp;" context="#pop" attribute="String"/>
+ </context>
+
+ <context name="qq_StringMaybeVar$" attribute="String" lineEndContext="#stay">
+ <RegExpr String="\$(?=[&twigils;]?&prefixdollarvarname;)" context="qq_InterpolationVar" attribute="Variable"/>
+ <DetectChar char="$" context="#pop" attribute="String"/>
+ </context>
+
+ <context name="qq_StringMaybeVar" attribute="String" lineEndContext="#stay">
+ <RegExpr String="@\(\)|[%@]\$/|[@%]&ident;" context="qq_Interpolation1" attribute="Variable"/>
+ <AnyChar String="@%" context="#pop" attribute="String"/>
+ </context>
+
+ <context name="qq_InterpolationVar" attribute="String" lineEndContext="#stay">
+ <AnyChar String="&twigils;" context="#stay" attribute="Twigil"/>
+ <RegExpr String="&dollarvarname;" context="#pop!qq_Interpolation1" attribute="Variable"/>
+ </context>
+
+ <context name="qq_Interpolation1" attribute="String" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop">
+ <DetectChar char="[" context="qq_InterpolationIndex" attribute="Function"/>
+ <DetectChar char="." context="qq_InterpolationFunction" attribute="Function" lookAhead="1"/>
+ </context>
+
+ <context name="qq_InterpolationIndex" attribute="String" lineEndContext="#stay">
+ <DetectChar char="]" context="#pop#pop#pop" attribute="Function"/>
+ <IncludeRules context="base"/>
+ </context>
+
+ <context name="qq_InterpolationFunction" attribute="String" lineEndContext="#stay">
+ <RegExpr String="(?:\.&ident;)*\.&ident;\(" context="#pop#pop#pop!FunctionParameters" attribute="Function"/>
+ <DetectChar char="." context="#pop#pop#pop" attribute="String"/>
+ </context>
+
+ <context name="FunctionParameters" attribute="String" lineEndContext="#stay">
+ <DetectChar char=")" context="#pop" attribute="Function"/>
+ <DetectChar char="(" context="FunctionParameters" attribute="Function"/>
+ <IncludeRules context="base"/>
+ </context>
+
+
+ <!-- Comment -->
+
+ <context name="StartComment" attribute="Comment" lineEndContext="#pop" fallthrough="1" fallthroughContext="SingleLineComment">
+ <DetectChar attribute="Comment" context="MultilineComment" char="`"/>
+ <AnyChar attribute="Pod Operator" context="MultilineComment" String="=|"/>
+ </context>
+
+ <context name="MultilineComment" attribute="Comment" lineEndContext="#pop#pop" fallthrough="1" fallthroughContext="#pop#pop!SingleLineComment">
+ <!-- TODO a new rule is needed to find the corresponding closures -->
+ <StringDetect attribute="Comment" context="#pop#pop!MultilineComment(((" String="(((" beginRegion="comment"/>
+ <StringDetect attribute="Comment" context="#pop#pop!MultilineComment[[[" String="[[[" beginRegion="comment"/>
+ <StringDetect attribute="Comment" context="#pop#pop!MultilineComment{{{" String="{{{" beginRegion="comment"/>
+ <StringDetect attribute="Comment" context="#pop#pop!MultilineComment«««" String="«««" beginRegion="comment"/>
+ <StringDetect attribute="Comment" context="#pop#pop!MultilineComment&lt;&lt;&lt;" String="&lt;&lt;&lt;" beginRegion="comment"/>
+ <Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment((" char="(" char1="(" beginRegion="comment"/>
+ <Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment[[" char="[" char1="[" beginRegion="comment"/>
+ <Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment{{" char="{" char1="{" beginRegion="comment"/>
+ <Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment««" char="«" char1="«" beginRegion="comment"/>
+ <Detect2Chars attribute="Comment" context="#pop#pop!MultilineComment&lt;&lt;" char="&lt;" char1="&lt;" beginRegion="comment"/>
+ <DetectChar attribute="Comment" context="#pop#pop!MultilineComment(" char="(" beginRegion="comment"/>
+ <DetectChar attribute="Comment" context="#pop#pop!MultilineComment[" char="[" beginRegion="comment"/>
+ <DetectChar attribute="Comment" context="#pop#pop!MultilineComment{" char="{" beginRegion="comment"/>
+ <DetectChar attribute="Comment" context="#pop#pop!MultilineComment«" char="«" beginRegion="comment"/>
+ <DetectChar attribute="Comment" context="#pop#pop!MultilineComment&lt;" char="&lt;" beginRegion="comment"/>
+ <!-- etc -->
+ </context>
+
+ <context name="MultilineComment(((" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <StringDetect String=")))" attribute="Comment" context="#pop" endRegion="comment"/>
+ <StringDetect String="(((" attribute="Comment" context="MultilineComment(((" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment[[[" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <StringDetect String="]]]" attribute="Comment" context="#pop" endRegion="comment"/>
+ <StringDetect String="[[[" attribute="Comment" context="MultilineComment[[[" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment{{{" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <StringDetect String="}}}" attribute="Comment" context="#pop" endRegion="comment"/>
+ <StringDetect String="{{{" attribute="Comment" context="MultilineComment{{{" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment«««" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <StringDetect String="»»»" attribute="Comment" context="#pop" endRegion="comment"/>
+ <StringDetect String="«««" attribute="Comment" context="MultilineComment«««" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment&lt;&lt;&lt;" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <StringDetect String=">>>" attribute="Comment" context="#pop" endRegion="comment"/>
+ <StringDetect String="&lt;&lt;&lt;" attribute="Comment" context="MultilineComment&lt;&lt;&lt;" beginRegion="comment"/>
+ </context>
+
+ <context name="MultilineComment((" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <Detect2Chars char=")" char1=")" attribute="Comment" context="#pop" endRegion="comment"/>
+ <Detect2Chars char="(" char1="(" attribute="Comment" context="MultilineComment((" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment[[" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <Detect2Chars char="]" char1="]" attribute="Comment" context="#pop" endRegion="comment"/>
+ <Detect2Chars char="[" char1="[" attribute="Comment" context="MultilineComment[[" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment{{" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <Detect2Chars char="}" char1="}" attribute="Comment" context="#pop" endRegion="comment"/>
+ <Detect2Chars char="{" char1="{" attribute="Comment" context="MultilineComment{{" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment««" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <Detect2Chars char="»" char1="»" attribute="Comment" context="#pop" endRegion="comment"/>
+ <Detect2Chars char="«" char1="«" attribute="Comment" context="MultilineComment««" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment&lt;&lt;" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <Detect2Chars char=">" char1=">" attribute="Comment" context="#pop" endRegion="comment"/>
+ <Detect2Chars char="&lt;" char1="&lt;" attribute="Comment" context="MultilineComment&lt;&lt;" beginRegion="comment"/>
+ </context>
+
+ <context name="MultilineComment(" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <DetectChar char=")" attribute="Comment" context="#pop" endRegion="comment"/>
+ <DetectChar char="(" attribute="Comment" context="MultilineComment(" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment[" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <DetectChar char="]" attribute="Comment" context="#pop" endRegion="comment"/>
+ <DetectChar char="[" attribute="Comment" context="MultilineComment[" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment{" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <DetectChar char="}" attribute="Comment" context="#pop" endRegion="comment"/>
+ <DetectChar char="{" attribute="Comment" context="MultilineComment{" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment«" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <DetectChar char="»" attribute="Comment" context="#pop" endRegion="comment"/>
+ <DetectChar char="«" attribute="Comment" context="MultilineComment«" beginRegion="comment"/>
+ </context>
+ <context name="MultilineComment&lt;" attribute="Comment" lineEndContext="#stay">
+ <IncludeRules context="SingleLineComment"/>
+ <DetectChar char=">" attribute="Comment" context="#pop" endRegion="comment"/>
+ <DetectChar char="&lt;" attribute="Comment" context="MultilineComment&lt;" beginRegion="comment"/>
+ </context>
+
+ <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop#pop">
+ <DetectSpaces/>
+ <IncludeRules context="##Alerts"/>
+ <DetectIdentifier/>
+ </context>
+
+
+ <!-- Error -->
+
+ <context name="Error" attribute="Error" lineEndContext="#pop"/>
+
+ <context name="CharErrorIfNoSep" attribute="Error" lineEndContext="#pop">
+ <RegExpr String="[^;)]" context="#pop" attribute="Error"/>
+ </context>
+
+ <context name="CharError" attribute="Error" lineEndContext="#pop">
+ <RegExpr String="." context="#pop" attribute="Error"/>
+ </context>
+
+ </contexts>
+
+ <itemDatas>
+ <itemData name="Normal Text" defStyleNum="dsNormal"/>
+ <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Keyword Value" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
+ <itemData name="Twigil" defStyleNum="dsAttribute" spellChecking="false"/>
+ <itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
+ <itemData name="Variable Storage" defStyleNum="dsKeyword" spellChecking="false" bold="1"/>
+ <itemData name="Property" defStyleNum="dsBuiltIn" spellChecking="false" italic="1"/>
+ <itemData name="Declare Routine" defStyleNum="dsBuiltIn" spellChecking="false"/>
+ <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
+ <itemData name="Operator" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Separator Symbol" defStyleNum="dsNormal" spellChecking="false"/>
+ <itemData name="Data Type" defStyleNum="dsDataType" spellChecking="false"/>
+ <itemData name="Attribute" defStyleNum="dsAttribute" spellChecking="false"/>
+ <itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false"/>
+ <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+ <itemData name="String" defStyleNum="dsString"/>
+ <itemData name="String Delimiter" defStyleNum="dsChar" spellChecking="false"/>
+ <itemData name="String (interpolated)" defStyleNum="dsString"/>
+ <itemData name="String Special Character" defStyleNum="dsChar"/>
+ <itemData name="Pattern" defStyleNum="dsOthers" spellChecking="false"/>
+ <itemData name="Pattern Meta Character" defStyleNum="dsChar" spellChecking="false"/>
+ <itemData name="Pattern Character Class" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Pattern Unicode Property" defStyleNum="dsBaseN" spellChecking="false"/>
+ <itemData name="Pattern Character" defStyleNum="dsChar" spellChecking="false"/>
+ <itemData name="Pattern Modifier" defStyleNum="dsKeyword" spellChecking="false"/>
+ <itemData name="Pattern Quantifier" defStyleNum="dsControlFlow" spellChecking="false"/>
+ <itemData name="Pattern Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
+ <itemData name="Pattern Special Character" defStyleNum="dsBuiltIn" spellChecking="false"/>
+ <itemData name="Comment" defStyleNum="dsComment"/>
+ <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
+ <itemData name="Pod" defStyleNum="dsDocumentation" spellChecking="false"/>
+ <itemData name="Pod Paragraph" defStyleNum="dsDocumentation"/>
+ <itemData name="Pod Block" defStyleNum="dsRegionMarker" spellChecking="false"/>
+ <itemData name="Pod Typename" defStyleNum="dsAnnotation" spellChecking="false"/>
+ <itemData name="Pod Typename Value" defStyleNum="dsCommentVar" spellChecking="false"/>
+ <itemData name="Pod Unknown" defStyleNum="dsError" spellChecking="false"/>
+ <itemData name="Pod Operator" defStyleNum="dsOperator" spellChecking="false"/>
+ <itemData name="Pod Key" defStyleNum="dsAttribute" spellChecking="false"/>
+ <itemData name="Pod Config" defStyleNum="dsCommentVar" spellChecking="false"/>
+ <itemData name="Pod Bold" defStyleNum="dsDocumentation" bold="1"/>
+ <itemData name="Pod Italic" defStyleNum="dsDocumentation" italic="1"/>
+ <itemData name="Pod Underline" defStyleNum="dsDocumentation" underline="1"/>
+ <itemData name="Pod Link" defStyleNum="dsOthers" underline="1"/>
+ <itemData name="Pod Note" defStyleNum="dsInformation"/>
+ <itemData name="Pod Comment" defStyleNum="dsComment"/>
+ <itemData name="Pod Verbatim" defStyleNum="dsInformation" spellChecking="false"/>
+ <itemData name="Pod Unicode" defStyleNum="dsChar" spellChecking="false"/>
+ <itemData name="Pod Indexed Terms" defStyleNum="dsOthers" spellChecking="false"/>
+ </itemDatas>
+ </highlighting>
+ <general>
+ <comments>
+ <comment name="singleLine" start="#"/>
+ </comments>
+ <keywords casesensitive="1" weakDeliminator="-'"/>
+ </general>
+</language>
+<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
diff --git a/src/libs/3rdparty/syntax-highlighting/src/cli/kate-syntax-highlighter.cpp b/src/libs/3rdparty/syntax-highlighting/src/cli/kate-syntax-highlighter.cpp
index 8334dd32e9d..92df89dc46e 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/cli/kate-syntax-highlighter.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/cli/kate-syntax-highlighter.cpp
@@ -32,7 +32,6 @@
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QFile>
-#include <QVector>
#include <iostream>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp b/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp
index 3534cfde904..2a2ea0081ec 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/indexer/katehighlightingindexer.cpp
@@ -24,7 +24,6 @@
#include <QCoreApplication>
#include <QFile>
#include <QFileInfo>
-#include <QTextStream>
#include <QVariant>
#include <QXmlStreamReader>
#include <QJsonDocument>
@@ -59,6 +58,7 @@ QStringList readListing(const QString &fileName)
if (xml.hasError()) {
qWarning() << "XML error while reading" << fileName << " - "
<< qPrintable(xml.errorString()) << "@ offset" << xml.characterOffset();
+ listing.clear();
}
return listing;
@@ -69,7 +69,7 @@ QStringList readListing(const QString &fileName)
* @param extensions extensions string to check
* @return valid?
*/
-bool checkExtensions(QString extensions)
+bool checkExtensions(const QString &extensions)
{
// get list of extensions
const QStringList extensionParts = extensions.split(QLatin1Char(';'), QString::SkipEmptyParts);
@@ -163,6 +163,7 @@ bool checkSingleChars(const QString &hlFilename, QXmlStreamReader &xml)
const QString c = xml.attributes().value(QLatin1String("char")).toString();
if (c.size() != 1) {
qWarning() << hlFilename << "line" << xml.lineNumber() << "'char' must contain exactly one char:" << c;
+ return false;
}
}
@@ -170,6 +171,7 @@ bool checkSingleChars(const QString &hlFilename, QXmlStreamReader &xml)
const QString c = xml.attributes().value(QLatin1String("char1")).toString();
if (c.size() != 1) {
qWarning() << hlFilename << "line" << xml.lineNumber() << "'char1' must contain exactly one char:" << c;
+ return false;
}
}
@@ -285,6 +287,7 @@ public:
const QString name = xml.attributes().value(QLatin1String("name")).toString();
if (m_existingNames.contains(name)) {
qWarning() << m_filename << "list duplicate:" << name;
+ m_success = false;
}
m_existingNames.insert(name);
} else if (xml.name() == QLatin1String("keyword")) {
@@ -296,7 +299,7 @@ public:
bool check() const
{
- bool success = true;
+ bool success = m_success;
const auto invalidNames = m_usedNames - m_existingNames;
if (!invalidNames.isEmpty()) {
qWarning() << m_filename << "Reference of non-existing keyword list:" << invalidNames;
@@ -306,6 +309,7 @@ public:
const auto unusedNames = m_existingNames - m_usedNames;
if (!unusedNames.isEmpty()) {
qWarning() << m_filename << "Unused keyword lists:" << unusedNames;
+ success = false;
}
return success;
@@ -315,14 +319,27 @@ private:
QString m_filename;
QSet<QString> m_usedNames;
QSet<QString> m_existingNames;
+ bool m_success = true;
};
/**
- * Helper class to search for non-existing contexts
+ * Helper class to search for non-existing contexts and invalid version
*/
class ContextChecker
{
public:
+ void setKateVersion(const QStringRef &verStr, const QString &hlFilename, const QString &hlName)
+ {
+ const auto idx = verStr.indexOf(QLatin1Char('.'));
+ if (idx <= 0) {
+ qWarning() << hlFilename << "invalid kateversion" << verStr;
+ m_success = false;
+ } else {
+ auto &language = m_contextMap[hlName];
+ language.version = {verStr.left(idx).toInt(), verStr.mid(idx + 1).toInt()};
+ }
+ }
+
void processElement(const QString &hlFilename, const QString &hlName, QXmlStreamReader &xml)
{
if (xml.name() == QLatin1String("context")) {
@@ -336,22 +353,28 @@ public:
if (language.existingContextNames.contains(name)) {
qWarning() << hlFilename << "Duplicate context:" << name;
+ m_success = false;
} else {
language.existingContextNames.insert(name);
}
if (xml.attributes().value(QLatin1String("fallthroughContext")).toString() == QLatin1String("#stay")) {
qWarning() << hlFilename << "possible infinite loop due to fallthroughContext=\"#stay\" in context " << name;
+ m_success = false;
}
processContext(hlName, xml.attributes().value(QLatin1String("lineEndContext")).toString());
processContext(hlName, xml.attributes().value(QLatin1String("lineEmptyContext")).toString());
processContext(hlName, xml.attributes().value(QLatin1String("fallthroughContext")).toString());
+ } else if (xml.name() == QLatin1String("include")) {
+ // <include> tag inside <list>
+ processVersion(hlFilename, hlName, xml, {5, 53}, QLatin1String("<include>"));
} else {
if (xml.attributes().hasAttribute(QLatin1String("context"))) {
const QString context = xml.attributes().value(QLatin1String("context")).toString();
if (context.isEmpty()) {
qWarning() << hlFilename << "Missing context name in line" << xml.lineNumber();
+ m_success = false;
} else {
processContext(hlName, context);
}
@@ -361,7 +384,30 @@ public:
bool check() const
{
- bool success = true;
+ bool success = m_success;
+
+ // recursive search for the required miximal version
+ struct GetRequiredVersion
+ {
+ QHash<const Language*, Version> versionMap;
+
+ Version operator()(const QHash<QString, Language> &contextMap, const Language &language)
+ {
+ auto& version = versionMap[&language];
+ if (version < language.version) {
+ version = language.version;
+ for (auto &languageName : language.usedLanguageName) {
+ auto it = contextMap.find(languageName);
+ if (it != contextMap.end()) {
+ version = std::max(operator()(contextMap, *it), version);
+ }
+ }
+ }
+ return version;
+ };
+ };
+ GetRequiredVersion getRequiredVersion;
+
for (auto &language : m_contextMap) {
const auto invalidContextNames = language.usedContextNames - language.existingContextNames;
if (!invalidContextNames.isEmpty()) {
@@ -374,6 +420,12 @@ public:
qWarning() << language.hlFilename << "Unused contexts:" << unusedNames;
success = false;
}
+
+ auto requiredVersion = getRequiredVersion(m_contextMap, language);
+ if (language.version < requiredVersion) {
+ qWarning().nospace() << language.hlFilename << " depends on a language in version " << requiredVersion.majorRevision << "." << requiredVersion.minorRevision << ". Please, increase kateversion.";
+ success = false;
+ }
}
return success;
@@ -405,6 +457,7 @@ private:
} else if (list.size() == 2) {
// specific context of other language, e.g. Comment##ISO C++
m_contextMap[list[1]].usedContextNames.insert(list[0]);
+ m_contextMap[language].usedLanguageName.insert(list[1]);
}
return;
}
@@ -418,6 +471,34 @@ private:
}
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);
+ }
+ };
+
+ void processVersion(const QString &hlFilename, const QString &hlName, QXmlStreamReader &xml, Version const& requiredVersion, QLatin1String item)
+ {
+ auto &language = m_contextMap[hlName];
+
+ if (language.version < requiredVersion) {
+ qWarning().nospace() << hlFilename << " " << item << " in line " << xml.lineNumber() << " is only available since version " << requiredVersion.majorRevision << "." << requiredVersion.minorRevision << ". Please, increase kateversion.";
+ // update the version to cancel future warnings
+ language.version = requiredVersion;
+ m_success = false;
+ }
+ }
+
class Language
{
public:
@@ -435,6 +516,12 @@ private:
// holds all existing context names
QSet<QString> existingContextNames;
+
+ // holds all existing language names
+ QSet<QString> usedLanguageName;
+
+ // kateversion language attribute
+ Version version;
};
/**
@@ -442,6 +529,7 @@ private:
* Example key: "Doxygen"
*/
QHash<QString, Language> m_contextMap;
+ bool m_success = true;
};
/**
@@ -461,6 +549,7 @@ public:
if (!name.isEmpty()) {
if (m_existingAttributeNames.contains(name)) {
qWarning() << m_filename << "itemData duplicate:" << name;
+ m_success = false;
} else {
m_existingAttributeNames.insert(name);
}
@@ -469,6 +558,7 @@ public:
const QString name = xml.attributes().value(QLatin1String("attribute")).toString();
if (name.isEmpty()) {
qWarning() << m_filename << "specified attribute is empty:" << xml.name();
+ m_success = false;
} else {
m_usedAttributeNames.insert(name);
}
@@ -477,7 +567,7 @@ public:
bool check() const
{
- bool success = true;
+ bool success = m_success;
const auto invalidNames = m_usedAttributeNames - m_existingAttributeNames;
if (!invalidNames.isEmpty()) {
qWarning() << m_filename << "Reference of non-existing itemData attributes:" << invalidNames;
@@ -487,6 +577,7 @@ public:
auto unusedNames = m_existingAttributeNames - m_usedAttributeNames;
if (!unusedNames.isEmpty()) {
qWarning() << m_filename << "Unused itemData:" << unusedNames;
+ success = false;
}
return success;
@@ -496,6 +587,7 @@ private:
QString m_filename;
QSet<QString> m_usedAttributeNames;
QSet<QString> m_existingAttributeNames;
+ bool m_success = true;
};
}
@@ -594,8 +686,11 @@ int main(int argc, char *argv[])
AttributeChecker attributeChecker(hlFilename);
KeywordChecker keywordChecker(hlFilename);
+
const QString hlName = hl[QStringLiteral("name")].toString();
+ contextChecker.setKateVersion(xml.attributes().value(QStringLiteral("kateversion")), hlFilename, hlName);
+
// scan for broken regex or keywords with spaces
while (!xml.atEnd()) {
xml.readNext();
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/CMakeLists.txt b/src/libs/3rdparty/syntax-highlighting/src/lib/CMakeLists.txt
index 95bf4c349e5..9e95772f6e3 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/CMakeLists.txt
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/CMakeLists.txt
@@ -69,6 +69,8 @@ if(BUILD_QCH)
LINK_QCHS
Qt5Core_QCH
Qt5Gui_QCH
+ INCLUDE_DIRS
+ ${CMAKE_CURRENT_BINARY_DIR}
BLANK_MACROS
KSYNTAXHIGHLIGHTING_EXPORT
KSYNTAXHIGHLIGHTING_DEPRECATED
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/context.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/context.cpp
index 9887b959d0c..9d5597e7d28 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/context.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/context.cpp
@@ -61,10 +61,8 @@ void Context::load(QXmlStreamReader& reader)
m_attribute = reader.attributes().value(QStringLiteral("attribute")).toString();
m_lineEndContext.parse(reader.attributes().value(QStringLiteral("lineEndContext")));
m_lineEmptyContext.parse(reader.attributes().value(QStringLiteral("lineEmptyContext")));
- m_fallthrough = Xml::attrToBool(reader.attributes().value(QStringLiteral("fallthrough")));
m_fallthroughContext.parse(reader.attributes().value(QStringLiteral("fallthroughContext")));
- if (m_fallthroughContext.isStay())
- m_fallthrough = false;
+ m_fallthrough = !m_fallthroughContext.isStay();
m_noIndentationBasedFolding = Xml::attrToBool(reader.attributes().value(QStringLiteral("noIndentationBasedFolding")));
reader.readNext();
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/definition.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/definition.cpp
index ae95a6b235f..6a204dc3ac0 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/definition.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/definition.cpp
@@ -39,7 +39,6 @@
#include "xml_p.h"
#include <QCoreApplication>
-#include <QDebug>
#include <QFile>
#include <QHash>
#include <QJsonObject>
@@ -234,6 +233,19 @@ QStringList Definition::keywordList(const QString& name) const
return list ? list->keywords() : QStringList();
}
+bool Definition::setKeywordList(const QString& name, const QStringList& content)
+{
+ d->load(DefinitionData::OnlyKeywords(true));
+ KeywordList* list = d->keywordList(name);
+ if (list)
+ {
+ list->setKeywordList(content);
+ return true;
+ }
+ else
+ return false;
+}
+
QVector<Format> Definition::formats() const
{
d->load();
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/definition.h b/src/libs/3rdparty/syntax-highlighting/src/lib/definition.h
index 6f0dba9a454..3ba5be9a7a2 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/definition.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/definition.h
@@ -26,9 +26,8 @@
#include "ksyntaxhighlighting_export.h"
-#include <QTypeInfo>
#include <QPair>
-
+#include <QVector>
#include <memory>
QT_BEGIN_NAMESPACE
@@ -329,11 +328,29 @@ public:
/**
* Returns the list of keywords for the keyword list @p name.
* @since 5.49
- * @see keywordLists()
+ * @see keywordLists(), setKeywordList()
*/
QStringList keywordList(const QString& name) const;
/**
+ * Set the contents of the keyword list @p name to @p content.
+ * Only existing keywordLists() can be changed. For non-existent keyword lists,
+ * false is returned.
+ *
+ * Whenever you change a keyword list, make sure to trigger a rehighlight of
+ * your documents. In case you are using QSyntaxHighlighter via SyntaxHighlighter,
+ * this can be done by calling SyntaxHighlighter::rehighlight().
+ *
+ * @note In general, changing keyword lists via setKeywordList() is discouraged,
+ * since if a keyword list name in the syntax highlighting definition
+ * file changes, the call setKeywordList() may suddenly fail.
+ *
+ * @see keywordList(), keywordLists()
+ * @since 5.62
+ */
+ bool setKeywordList(const QString& name, const QStringList& content);
+
+ /**
* Returns a list of all Format items used by this definition.
* The order of the Format items equals the order of the itemDatas in the xml file.
* @since 5.49
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h b/src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h
index 9bbf59691c1..c73ca86eb95 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h
@@ -101,7 +101,7 @@ public:
QVector<QPair<QChar, QString>> characterEncodings;
QString fileName;
- QString name = QStringLiteral(QT_TRANSLATE_NOOP("Syntax highlighting", "None"));
+ QString name = QStringLiteral(QT_TRANSLATE_NOOP("Language", "None"));
QString section;
QString style;
QString indenter;
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/definitiondownloader.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/definitiondownloader.cpp
index 4c3e5f5f1e4..89a5952a3e4 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/definitiondownloader.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/definitiondownloader.cpp
@@ -27,7 +27,6 @@
#include "ksyntaxhighlighting_logging.h"
#include "ksyntaxhighlighting_version.h"
-#include <QDebug>
#include <QDir>
#include <QFile>
#include <QNetworkAccessManager>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/format.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/format.cpp
index d1808cafefc..3407fee9f3e 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/format.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/format.cpp
@@ -30,7 +30,6 @@
#include "xml_p.h"
#include <QColor>
-#include <QDebug>
#include <QMetaEnum>
#include <QXmlStreamReader>
@@ -207,6 +206,46 @@ bool Format::spellCheck() const
return d->spellCheck;
}
+bool Format::hasBoldOverride() const
+{
+ return d->style.hasBold;
+}
+
+bool Format::hasItalicOverride() const
+{
+ return d->style.hasItalic;
+}
+
+bool Format::hasUnderlineOverride() const
+{
+ return d->style.hasUnderline;
+}
+
+bool Format::hasStrikeThroughOverride() const
+{
+ return d->style.hasStrikeThrough;
+}
+
+bool Format::hasTextColorOverride() const
+{
+ return d->style.textColor;
+}
+
+bool Format::hasBackgroundColorOverride() const
+{
+ return d->style.backgroundColor;
+}
+
+bool Format::hasSelectedTextColorOverride() const
+{
+ return d->style.selectedTextColor;
+}
+
+bool Format::hasSelectedBackgroundColorOverride() const
+{
+ return d->style.selectedBackgroundColor;
+}
+
void FormatPrivate::load(QXmlStreamReader& reader)
{
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/format.h b/src/libs/3rdparty/syntax-highlighting/src/lib/format.h
index 24c58e73f65..7c1b9602bab 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/format.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/format.h
@@ -28,7 +28,6 @@
#include "theme.h"
#include <QExplicitlySharedDataPointer>
-#include <QTypeInfo>
QT_BEGIN_NAMESPACE
class QColor;
@@ -139,6 +138,70 @@ public:
*/
bool spellCheck() const;
+ /** Returns @c true if the syntax definition file sets a value for the bold text
+ * attribute and, therefore, overrides the theme and the default formatting
+ * style. If the return is @p true, this value is obtained by isBold().
+ * @see isBold()
+ * @since 5.62
+ */
+ bool hasBoldOverride() const;
+
+ /** Returns @c true if the syntax definition file sets a value for the italic text
+ * attribute and, therefore, overrides the theme and the default formatting style.
+ * If the return is @p true, this value is obtained by isItalic().
+ * @see isItalic()
+ * @since 5.62
+ */
+ bool hasItalicOverride() const;
+
+ /** Returns @c true if the syntax definition file sets a value for the underlined
+ * text attribute and, therefore, overrides the theme and the default formatting
+ * style. If the return is @p true, this value is obtained by isUnderline().
+ * @see isUnderline()
+ * @since 5.62
+ */
+ bool hasUnderlineOverride() const;
+
+ /** Returns @c true if the syntax definition file specifies a value for the
+ * struck through text attribute. If the return is @p true, this value
+ * is obtained by isStrikeThrough().
+ * @see isStrikeThrough()
+ * @since 5.62
+ */
+ bool hasStrikeThroughOverride() const;
+
+ /** Returns @c true if the syntax definition file sets a value for the foreground
+ * text color attribute and, therefore, overrides the theme and the default formatting
+ * style. If the return is @p true, this value is obtained by textColor().
+ * @see textColor(), hasTextColor()
+ * @since 5.62
+ */
+ bool hasTextColorOverride() const;
+
+ /** Returns @c true if the syntax definition file sets a value for the background
+ * color attribute and, therefore, overrides the theme and the default formatting
+ * style. If the return is @p true, this value is obtained by backgroundColor().
+ * @see backgroundColor(), hasBackgroundColor()
+ * @since 5.62
+ */
+ bool hasBackgroundColorOverride() const;
+
+ /** Returns @c true if the syntax definition file specifies a value for the
+ * selected text color attribute. If the return is @p true, this value is
+ * obtained by selectedTextColor().
+ * @see selectedTextColor()
+ * @since 5.62
+ */
+ bool hasSelectedTextColorOverride() const;
+
+ /** Returns @c true if the syntax definition file specifies a value for the
+ * selected background color attribute. If the return is @p true, this
+ * value is obtained by selectedBackgroundColor().
+ * @see selectedBackgroundColor()
+ * @since 5.62
+ */
+ bool hasSelectedBackgroundColorOverride() const;
+
private:
friend class FormatPrivate;
QExplicitlySharedDataPointer<FormatPrivate> d;
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/htmlhighlighter.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/htmlhighlighter.cpp
index 4ebd465b779..224fb72c34d 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/htmlhighlighter.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/htmlhighlighter.cpp
@@ -29,7 +29,6 @@
#include "theme.h"
#include "ksyntaxhighlighting_logging.h"
-#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist.cpp
index f042baac27d..144ced2c00c 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist.cpp
@@ -26,7 +26,6 @@
#include "definition_p.h"
#include "ksyntaxhighlighting_logging.h"
-#include <QDebug>
#include <QXmlStreamReader>
#include <algorithm>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist_p.h b/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist_p.h
index 25d0022dbef..f99a027823e 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist_p.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/keywordlist_p.h
@@ -24,9 +24,8 @@
#ifndef KSYNTAXHIGHLIGHTING_KEYWORDLIST_P_H
#define KSYNTAXHIGHLIGHTING_KEYWORDLIST_P_H
-#include <QSet>
#include <QString>
-#include <QVector>
+#include <QStringList>
#include <vector>
@@ -60,6 +59,14 @@ public:
return m_keywords;
}
+ void setKeywordList(const QStringList& keywords)
+ {
+ m_keywords = keywords;
+ m_keywordsSortedCaseSensitive.clear();
+ m_keywordsSortedCaseInsensitive.clear();
+ initLookupForCaseSensitivity(m_caseSensitive);
+ }
+
/** Checks if @p str is a keyword in this list. */
bool contains(const QStringRef &str) const
{
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/repository.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/repository.cpp
index aaba9616dcf..c4e4889fa29 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/repository.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/repository.cpp
@@ -30,7 +30,6 @@
#include "ksyntaxhighlighting_logging.h"
#include "wildcardmatcher_p.h"
-#include <QDebug>
#include <QDirIterator>
#include <QFile>
#include <QFileInfo>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/rule.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/rule.cpp
index d9cf5eb2116..79b110d70a3 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/rule.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/rule.cpp
@@ -101,9 +101,6 @@ Definition Rule::definition() const
void Rule::setDefinition(const Definition &def)
{
m_def = def;
-
- // cache for DefinitionData::wordDelimiters, is accessed VERY often
- m_wordDelimiter = &DefinitionData::get(m_def.definition())->wordDelimiters;
}
bool Rule::load(QXmlStreamReader &reader)
@@ -140,6 +137,9 @@ bool Rule::load(QXmlStreamReader &reader)
void Rule::resolveContext()
{
m_context.resolve(m_def.definition());
+
+ // cache for DefinitionData::wordDelimiters, is accessed VERY often
+ m_wordDelimiter = &DefinitionData::get(m_def.definition())->wordDelimiters;
}
void Rule::resolveAttributeFormat(Context *lookupContext)
@@ -612,8 +612,10 @@ MatchResult RegExpr::doMatch(const QString& text, int offset, const QStringList
/**
* no match
+ * the pattern of a dynamic regex depends on the previous contexts
+ * so that skipOffset cannot be computed
*/
- return MatchResult(offset, result.capturedStart());
+ return MatchResult(offset, m_dynamic ? 0 : result.capturedStart());
}
@@ -650,13 +652,17 @@ MatchResult WordDetect::doMatch(const QString& text, int offset, const QStringLi
if (text.size() - offset < m_word.size())
return offset;
- if (offset > 0 && !isWordDelimiter(text.at(offset - 1)))
+ /**
+ * detect delimiter characters on the inner and outer boundaries of the string
+ * NOTE: m_word isn't empty
+ */
+ if (offset > 0 && !isWordDelimiter(text.at(offset - 1)) && !isWordDelimiter(text.at(offset)))
return offset;
if (text.midRef(offset, m_word.size()).compare(m_word, m_caseSensitivity) != 0)
return offset;
- if (text.size() == offset + m_word.size() || isWordDelimiter(text.at(offset + m_word.size())))
+ if (text.size() == offset + m_word.size() || isWordDelimiter(text.at(offset + m_word.size())) || isWordDelimiter(text.at(offset + m_word.size() - 1)))
return offset + m_word.size();
return offset;
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/rule_p.h b/src/libs/3rdparty/syntax-highlighting/src/lib/rule_p.h
index 538fdeda8a9..4ddee3cbfd9 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/rule_p.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/rule_p.h
@@ -34,7 +34,6 @@
#include <QRegularExpression>
#include <QString>
-#include <QVector>
#include <memory>
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/state.h b/src/libs/3rdparty/syntax-highlighting/src/lib/state.h
index fce4bc71e8c..865589f28e6 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/state.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/state.h
@@ -27,7 +27,6 @@
#include "ksyntaxhighlighting_export.h"
#include <QExplicitlySharedDataPointer>
-#include <QTypeInfo>
namespace KSyntaxHighlighting {
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/syntaxhighlighter.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/syntaxhighlighter.cpp
index 4987dc95f08..89663d8af31 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/syntaxhighlighter.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/syntaxhighlighter.cpp
@@ -29,7 +29,6 @@
#include "state.h"
#include "theme.h"
-#include <QDebug>
Q_DECLARE_METATYPE(QTextBlock)
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/textstyledata_p.h b/src/libs/3rdparty/syntax-highlighting/src/lib/textstyledata_p.h
index 40c5ef679ed..50980e0aa02 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/textstyledata_p.h
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/textstyledata_p.h
@@ -24,7 +24,6 @@
#ifndef KSYNTAXHIGHLIGHTING_TEXTSTYLEDATA_P_H
#define KSYNTAXHIGHLIGHTING_TEXTSTYLEDATA_P_H
-#include <QColor>
namespace KSyntaxHighlighting {
diff --git a/src/libs/3rdparty/syntax-highlighting/src/lib/themedata.cpp b/src/libs/3rdparty/syntax-highlighting/src/lib/themedata.cpp
index eac9a92264a..9e9f7b913c0 100644
--- a/src/libs/3rdparty/syntax-highlighting/src/lib/themedata.cpp
+++ b/src/libs/3rdparty/syntax-highlighting/src/lib/themedata.cpp
@@ -32,7 +32,6 @@
#include <QJsonValue>
#include <QMetaEnum>
-#include <QDebug>
using namespace KSyntaxHighlighting;