<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd"
[
	<!ENTITY identifier        "[a-zA-Z][\w\-]*(?:\.?[\w\-])*">
	<!ENTITY versionIdentifier "\d+(?:\.[\d_\.]*)?">
	<!-- Documentation -->
	<!ENTITY tagName           "(?:[a-zA-Z_](?:[\w\-\.]*\w)?\:)?[a-zA-Z_](?:[\w\-\.]*\w)?">
	<!-- PCRE 2 RegExp -->
	<!ENTITY specialChars      "*?.+">
	<!ENTITY capGroup          "\?(?:&lt;[\=!]|P?&lt;\w+&gt;|&apos;\w+&apos;|[\=!:&gt;\|R&amp;\-#])"> <!-- Capturing & Groups -->
	<!-- M4 Macros -->
	<!ENTITY m4Args            "\$(?:[1-9]\d*|0|[\#\*\@]|\{(?:[1-9]\d*|0)\})">
	<!ENTITY m4Quotes          "`'‘’“”"> <!-- Default Quotes (`') & Other Common Quotes -->
	<!-- For File Contexts -->
	<!ENTITY identifierWithArg "(?:[a-zA-Z]|&m4Args;)(?:\.?(?:[\w\-]|&m4Args;))*">
	<!ENTITY mlsLevel          "&identifierWithArg;(?:\:&identifierWithArg;(?:\s*,\s*&identifierWithArg;)*)?">

	<!ENTITY url               "\bhttps?://[^\s&lt;&gt;&quot;&apos;`]*[^\s&lt;&gt;&quot;&apos;`\}\)\]\.,;\|]">
	<!ENTITY email             "(?:(?:[^&lt;&gt;\(\)\[\]\\\.,;:\s@&quot;]+(?:\.[^&lt;&gt;\(\)\[\]\\\.,;:\s@&quot;]+)*)|(?:&quot;[^&quot;]+&quot;))@(?:(?:\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}])|(?:(?:[a-zA-Z\-\d]+\.)+[a-zA-Z]{2,}))\b">

	<!ENTITY ipv4              "\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b">
	<!-- IPv6 (Source: https://community.helpsystems.com/forums/intermapper/miscellaneous-topics/5acc4fcf-fa83-e511-80cf-0050568460e4 ) -->
	<!ENTITY ipv6              "(?:(?:\b(?:[0-9A-Fa-f]{1,4}\:){7}(?:[0-9A-Fa-f]{1,4}|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){6}(?:\:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){5}(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,2})|\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){4}(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,3})|(?:(?:\:[0-9A-Fa-f]{1,4})?\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){3}(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,4})|(?:(?:\:[0-9A-Fa-f]{1,4}){0,2}\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){2}(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,5})|(?:(?:\:[0-9A-Fa-f]{1,4}){0,3}\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|\:))|(?:\b(?:[0-9A-Fa-f]{1,4}\:){1}(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,6})|(?:(?:\:[0-9A-Fa-f]{1,4}){0,4}\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|\:))|(?:\:(?:(?:(?:\:[0-9A-Fa-f]{1,4}){1,7})|(?:(?:\:[0-9A-Fa-f]{1,4}){0,5}\:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|\:)))"> <!-- End: (\%\w+\b)? -->

	<!-- Hexadecimal -->
	<!ENTITY escape1           "\\x(?:\{[\da-fA-F]+\}|[\da-fA-F]{2})">
	<!-- Octal. NOTE: only ASCII chars. for \ddd -->
	<!ENTITY escape2           "\\(?:o\{[0-7]+\}|[0-3][0-7]{0,2}|[4-7][0-7]?)">
	<!-- References -->
	<!ENTITY escape3           "\\[kg](?:&lt;\w+&gt;|&apos;\w+&apos;|\{\w+\})">
	<!ENTITY escape4           "\\g(?:&lt;[\+\-]?\d+&gt;|&apos;[\+\-]?\d+&apos;|\{[\+\-]?\d+\}|[\+\-]?\d)">
	<!-- Category Properties -->
	<!ENTITY escape5           "\\[pP](?:C[cfnos]?|L[lmotu&amp;]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?)">
	<!ENTITY escape6           "\\[pP]\{(?:Xan|Xps|Xsp|Xuc|Xwd|C[cfnos]?|L[lmotu&amp;]?|M[cen]?|N[dlo]?|P[cdefios]?|S[ckmo]?|Z[lps]?)\}">
	<!-- Script Names -->
	<!ENTITY escape7           "\\[pP]\{(?:Ahom|Anatolian_Hieroglyphs|Arabic|Armenian|Avestan|Balinese|Bamum|Bassa_Vah|Batak|Bengali|Bopomofo|Brahmi|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Caucasian_Albanian|Chakma|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Duployan|Egyptian_Hieroglyphs|Elbasan|Ethiopic|Georgian|Glagolitic|Gothic|Grantha|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hatran|Hebrew|Hiragana|Imperial_Aramaic|Inherited|Inscriptional_Pahlavi|Inscriptional_Parthian|Javanese|Kaithi|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Khojki|Khudawadi|Lao|Latin|Lepcha|Limbu|Linear_A|Linear_B|Lisu|Lycian|Lydian|Mahajani|Malayalam|Mandaic|Manichaean|Meetei_Mayek|Mende_Kikakui|Meroitic_Cursive|Meroitic_Hieroglyphs|Miao|Modi|Mongolian|Mro|Multani|Myanmar|Nabataean|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Hungarian|Old_Italic|Old_North_Arabian|Old_Permic|Old_Persian|Old_South_Arabian|Old_Turkic|Oriya|Osmanya|Pahawh_Hmong|Palmyrene|Pau_Cin_Hau|Phags_Pa|Phoenician|Psalter_Pahlavi|Rejang|Runic|Samaritan|Saurashtra|Sharada|Shavian|Siddham|SignWriting|Sinhala|Sora_Sompeng|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tai_Tham|Tai_Viet|Takri|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Tirhuta|Ugaritic|Vai|Warang_Citi|Yi)\}">
	<!-- Escaped Characters -->
	<!ENTITY escape8           "\\(?:Q.*\\E|c[a-zA-Z])">
	<!-- Reserved characters -->
	<!ENTITY escape9           "\\[\ssSdDwWbBAZcCtrnaefvxhGHKNQRVXpPz\d]">
	<!-- Punctuation Characters -->
	<!ENTITY escape10          "\\[[:punct:]]">
	<!ENTITY escape11          "\\[\041-\057\072-\100\133-\140\173-\176]">

	<!-- References & Option Settings -->
	<!ENTITY group_bracket1    "\?(?:&amp;|P[&gt;\=])\w+(?=\))">
	<!ENTITY group_bracket2    "\?(?:xx|[iJmnsUxR]|C\d*|C&quot;[^\s&quot;]*&quot;|[\-\+]?\d+)(?=\))">
	<!-- Conditional Patterns -->
	<!ENTITY group_bracket3    "\?\((?:Rn?|R&amp;\w+|[\+\-]?\d+|&lt;\w+&gt;|&apos;\w+&apos;|VERSION&gt;?\=\d+(?:\.\d+)*|\w+)\)">
	<!ENTITY group_bracket4    "\?(?=\()">

	<!ENTITY mls_level_range_ident "&identifierWithArg;(?:\s*\:\s*&identifierWithArg;(?:\s*,\s*&identifierWithArg;)*)?">
]>

<!--
   SELinux Security Policies Syntax Highlighting Definition
  ===========================================================================

   This file is part of the KDE's KSyntaxHighlighting framework.

   SPDX-FileCopyrightText: 2018-2020 Nibaldo González S. <nibgonz@gmail.com>

   SPDX-License-Identifier: MIT

  ===========================================================================

  Last update: checkpolicy 3.0
  Obtained from the SELinux checkpolicy parser:
    https://github.com/SELinuxProject/selinux/blob/master/checkpolicy/policy_parse.y
    https://github.com/SELinuxProject/selinux/blob/master/checkpolicy/policy_scan.l
  More details:
    https://selinuxproject.org/page/PolicyLanguage#Kernel_Policy_Language
    https://selinuxproject.org/page/Category:Notebook

  NOTE:
  - This file is required by "selinux-cil.xml" and "selinux-fc.xml".
  - This file depends on "m4.xml" and "apparmor.xml" (used only to include keywords).
  - About file extensions: Only the most relevant policy build files and config. files
    are highlighted by default, since some have very generic names. Files with
    definition of file contexts are highlighted by "selinux-fc.xml".

  Change log:
   * Version 5 [30-Sep-2020]: Use include-keywods and other minor changes.
   * Version 4 [09-Feb-2020]: Use non-capturing groups in RegExpr.
   * Version 3 [10-Dec-2019]:
      - Add "glblub" keyword (default_range).
      - Update permissions list.
   * Version 2 [09-Sep-2018]:
      - Update itemData's style for the new Solarized color schemes.
   * Version 1 [28-Aug-2018, by Nibaldo González]:
      - Initial version. Syntax based on checkpolicy v2.8.
-->

<language name="SELinux Policy"
          version="9"
          kateversion="5.53"
          section="Sources"
          extensions="*.te;*.if;*.spt;policy.conf;access_vectors;mls;mcs;mls_macros;te_macros;policy_capabilities;seapp_contexts;port_contexts"
          priority="6"
          mimetype=""
          author="Nibaldo González (nibgonz@gmail.com)"
          license="MIT">

<highlighting>

	<list name="self">
		<item>SELF</item>
		<item>self</item>
	</list>
	<list name="booleans">
		<item>FALSE</item>
		<item>false</item>
		<item>TRUE</item>
		<item>true</item>
	</list>

	<!-- Statements -->
	<list name="statements_access">
		<item>ALLOW</item>
		<item>allow</item>
		<item>NEVERALLOW</item>
		<item>neverallow</item>
		<item>AUDITALLOW</item>
		<item>auditallow</item>
		<item>AUDITDENY</item>
		<item>auditdeny</item>
		<item>DONTAUDIT</item>
		<item>dontaudit</item>
		<item>ALLOWXPERM</item>
		<item>allowxperm</item>
		<item>AUDITALLOWXPERM</item>
		<item>auditallowxperm</item>
		<item>DONTAUDITXPERM</item>
		<item>dontauditxperm</item>
		<item>NEVERALLOWXPERM</item>
		<item>neverallowxperm</item>
	</list>
	<list name="statements">
		<item>ATTRIBUTE</item>
		<item>attribute</item>
		<item>ATTRIBUTE_ROLE</item>
		<item>attribute_role</item>
		<item>BOOL</item>
		<item>bool</item>
		<item>CATEGORY</item>
		<item>category</item>
		<item>COMMON</item>
		<item>common</item>
		<item>DOMINANCE</item>
		<item>dominance</item>
		<item>EXPANDATTRIBUTE</item>
		<item>expandattribute</item>
		<item>MODULE</item>
		<item>module</item>
		<item>PERMISSIVE</item>
		<item>permissive</item>
		<item>ROLE</item>
		<item>role</item>
		<item>ROLEATTRIBUTE</item>
		<item>roleattribute</item>
		<item>SENSITIVITY</item>
		<item>sensitivity</item>
		<item>TUNABLE</item>
		<item>tunable</item>
		<item>TYPE</item>
		<item>type</item>
		<item>TYPEALIAS</item>
		<item>typealias</item>
		<item>TYPEATTRIBUTE</item>
		<item>typeattribute</item>
		<item>TYPEBOUNDS</item>
		<item>typebounds</item>
		<item>USER</item>
		<item>user</item>
		<!-- Conditional -->
		<item>IF</item>
		<item>if</item>
		<item>ELSE</item>
		<item>else</item>
		<item>require</item>
		<item>REQUIRE</item>
		<item>optional</item>
		<item>OPTIONAL</item>
	</list>
	<!-- Statements that contain definition of file contexts -->
	<list name="statements_fc">
		<item>DEVICETREECON</item>
		<item>devicetreecon</item>
		<item>FS_USE_TASK</item>
		<item>fs_use_task</item>
		<item>FS_USE_TRANS</item>
		<item>fs_use_trans</item>
		<item>FS_USE_XATTR</item>
		<item>fs_use_xattr</item>
		<item>FSCON</item>
		<item>fscon</item>
		<item>GENFSCON</item>
		<item>genfscon</item>
		<item>IBENDPORTCON</item>
		<item>ibendportcon</item>
		<item>IBPKEYCON</item>
		<item>ibpkeycon</item>
		<item>IOMEMCON</item>
		<item>iomemcon</item>
		<item>IOPORTCON</item>
		<item>ioportcon</item>
		<item>NETIFCON</item>
		<item>netifcon</item>
		<item>NODECON</item>
		<item>nodecon</item>
		<item>PCIDEVICECON</item>
		<item>pcidevicecon</item>
		<item>PIRQCON</item>
		<item>pirqcon</item>
		<item>PORTCON</item>
		<item>portcon</item>
		<item>SID</item>
		<item>sid</item>
	</list>
	<list name="statements_def">
		<item>CLASS</item>
		<item>class</item>
	</list>
	<list name="statements_mls_level_def">
		<item>LEVEL</item>
		<item>level</item>
	</list>
	<!-- Statements with special contexts -->
	<list name="statements_policycap">
		<item>POLICYCAP</item>
		<item>policycap</item>
	</list>
	<list name="statements_type">
		<item>TYPE_CHANGE</item>
		<item>type_change</item>
		<item>TYPE_MEMBER</item>
		<item>type_member</item>
		<item>TYPE_TRANSITION</item>
		<item>type_transition</item>
	</list>
	<list name="statements_role_transition">
		<item>ROLE_TRANSITION</item>
		<item>role_transition</item>
	</list>
	<list name="statements_range_transition">
		<item>RANGE_TRANSITION</item>
		<item>range_transition</item>
	</list>
	<list name="statements_default">
		<item>DEFAULT_USER</item>
		<item>default_user</item>
		<item>DEFAULT_ROLE</item>
		<item>default_role</item>
		<item>DEFAULT_TYPE</item>
		<item>default_type</item>
	</list>
	<list name="statements_default_range">
		<item>DEFAULT_RANGE</item>
		<item>default_range</item>
	</list>
	<list name="statements_cexpr">
		<item>CONSTRAIN</item>
		<item>constrain</item>
		<item>VALIDATETRANS</item>
		<item>validatetrans</item>
		<item>MLSCONSTRAIN</item>
		<item>mlsconstrain</item>
		<item>MLSVALIDATETRANS</item>
		<item>mlsvalidatetrans</item>
	</list>

	<!-- Other reserved keywords -->
	<list name="keywords">
		<item>ALIAS</item>
		<item>alias</item>
		<item>CLONE</item> <!-- Deprecated -->
		<item>clone</item>
		<item>INHERITS</item>
		<item>inherits</item>
		<item>ROLES</item>
		<item>roles</item>
		<item>TYPES</item>
		<item>types</item>
	</list>
	<list name="mls_range_def">
		<item>RANGE</item>
		<item>range</item>
	</list>

	<list name="source_target">
		<item>SOURCE</item>
		<item>source</item>
		<item>TARGET</item>
		<item>target</item>
	</list>
	<list name="sameuser">
		<item>SAMEUSER</item>
		<item>sameuser</item>
	</list>
	<list name="range">
		<item>low-high</item>
		<item>LOW-HIGH</item>
		<item>high</item>
		<item>HIGH</item>
		<item>low</item>
		<item>LOW</item>
		<item>glblub</item>
		<item>GLBLUB</item>
	</list>

	<list name="cond_operators">
		<item>OR</item>
		<item>or</item>
		<item>AND</item>
		<item>and</item>
		<item>NOT</item>
		<item>not</item>
		<item>xor</item>
		<item>XOR</item>
		<item>eq</item>
		<item>EQ</item>
	</list>
	<list name="cexpr_operators">
		<item>eq</item>
		<item>EQ</item>
		<item>dom</item>
		<item>DOM</item>
		<item>domby</item>
		<item>DOMBY</item>
		<item>INCOMP</item>
		<item>incomp</item>
	</list>
	<list name="cexpr_keywords">
		<item>r1</item>
		<item>R1</item>
		<item>r2</item>
		<item>R2</item>
		<item>r3</item>
		<item>R3</item>
		<item>u1</item>
		<item>U1</item>
		<item>u2</item>
		<item>U2</item>
		<item>u3</item>
		<item>U3</item>
		<item>t1</item>
		<item>T1</item>
		<item>t2</item>
		<item>T2</item>
		<item>t3</item>
		<item>T3</item>
		<item>l1</item>
		<item>L1</item>
		<item>l2</item>
		<item>L2</item>
		<item>h1</item>
		<item>H1</item>
		<item>h2</item>
		<item>H2</item>
	</list>

	<!-- Policy Capabilities: /sys/fs/selinux/policy_capabilities/
	     More details: https://selinuxproject.org/page/NB_LSM#SELinux_Filesystem -->
	<list name="policy_capabilities">
		<item>always_check_network</item>
		<item>always_use_network</item>
		<item>cgroup_seclabel</item>
		<item>extended_socket_class</item>
		<item>network_peer_controls</item>
		<item>nnp_nosuid_transition</item>
		<item>open_perms</item>
		<item>redhat1</item>
	</list>

	<!-- Access Vectors Permissions.
	     More details:
	       https://selinuxproject.org/page/ObjectClassesPerms
	     Permissions & Classes:
	       https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/security/selinux/include/classmap.h
	       https://github.com/SELinuxProject/refpolicy/blob/master/policy/flask/access_vectors -->
	<list name="av_permissions">
		<item>accept</item>
		<item>acceptfrom</item>
		<item>access</item>
		<item>acquire_svc</item>
		<item>add</item>
		<item>add_child</item>
		<item>add_color</item>
		<item>add_glyph</item>
		<item>add_name</item>
		<item>admin</item>
		<item>append</item>
		<item>associate</item>
		<item>association</item>
		<item>attach_queue</item>
		<item>audit_access</item>
		<item>audit_control</item>
		<item>audit_read</item>
		<item>audit_write</item>
		<item>bell</item>
		<item>bind</item>
		<item>blend</item>
		<item>block_suspend</item>
		<item>call</item>
		<item>check_context</item>
		<item>chfn</item>
		<item>chown</item>
		<item>chsh</item>
		<item>compute_av</item>
		<item>compute_create</item>
		<item>compute_member</item>
		<item>compute_relabel</item>
		<item>compute_user</item>
		<item>connect</item>
		<item>connectto</item>
		<item>contains</item>
		<item>copy</item>
		<item>create</item>
		<item>create_files_as</item>
		<item>crontab</item>
		<item>dac_override</item>
		<item>dac_read_search</item>
		<item>dccp_recv</item>
		<item>dccp_send</item>
		<item>debug</item>
		<item>delete</item>
		<item>destroy</item>
		<item>disable</item>
		<item>drop</item>
		<item>dyntransition</item>
		<item>egress</item>
		<item>enable</item>
		<item>enforce_dest</item>
		<item>enqueue</item>
		<item>entrypoint</item>
		<item>execheap</item>
		<item>execmem</item>
		<item>execmod</item>
		<item>execstack</item>
		<item>execute</item>
		<item>execute_no_trans</item>
		<item>expand</item>
		<item>export</item>
		<item>force_cursor</item>
		<item>fork</item>
		<item>forward_in</item>
		<item>forward_out</item>
		<item>fowner</item>
		<item>freeze</item>
		<item>fsetid</item>
		<item>get_property</item>
		<item>get_value</item>
		<item>getattr</item>
		<item>getcap</item>
		<item>getfocus</item>
		<item>getgrp</item>
		<item>gethost</item>
		<item>getopt</item>
		<item>getpgid</item>
		<item>getpwd</item>
		<item>getrlimit</item>
		<item>getsched</item>
		<item>getserv</item>
		<item>getsession</item>
		<item>getstat</item>
		<item>grab</item>
		<item>halt</item>
		<item>hide</item>
		<item>hide_cursor</item>
		<item>impersonate</item>
		<item>implement</item>
		<item>import</item>
		<item>ingress</item>
		<item>insert</item>
		<item>install</item>
		<item>install_module</item>
		<item>ioctl</item>
		<item>ipc_info</item>
		<item>ipc_lock</item>
		<item>ipc_owner</item>
		<item>kill</item>
		<item>lease</item>
		<item>link</item>
		<item>linux_immutable</item>
		<item>list_child</item>
		<item>list_property</item>
		<item>listen</item>
		<item>load_module</item>
		<item>load_policy</item>
		<item>lock</item>
		<item>mac_admin</item>
		<item>mac_override</item> <!-- Unused by SELinux -->
		<item>manage</item>
		<item>manage_subnet</item>
		<item>map</item>
		<item>map_create</item>
		<item>map_read</item>
		<item>map_write</item>
		<item>mknod</item>
		<item>mmap_zero</item>
		<item>module_load</item>
		<item>module_request</item>
		<item>mount</item>
		<item>mounton</item>
		<item>name_bind</item>
		<item>name_connect</item>
		<item>net_admin</item>
		<item>net_bind_service</item>
		<item>net_broadcast</item>
		<item>net_raw</item>
		<item>newconn</item>
		<item>next_value</item>
		<item>nlmsg_read</item>
		<item>nlmsg_readpriv</item>
		<item>nlmsg_relay</item>
		<item>nlmsg_tty_audit</item>
		<item>nlmsg_write</item>
		<item>nnp_transition</item>
		<item>noatsecure</item>
		<item>node_bind</item>
		<item>nosuid_transition</item>
		<item>open</item>
		<item>override</item>
		<item>passwd</item>
		<item>paste</item>
		<item>paste_after_confirm</item>
		<item>polmatch</item>
		<item>prog_load</item>
		<item>prog_run</item>
		<item>ptrace</item>
		<item>query</item>
		<item>quotaget</item>
		<item>quotamod</item>
		<item>quotaon</item>
		<item>rawip_recv</item>
		<item>rawip_send</item>
		<item>read</item>
		<item>read_policy</item>
		<item>reboot</item>
		<item>receive</item>
		<item>record</item>
		<item>recv</item>
		<item>recv_msg</item>
		<item>recvfrom</item>
		<item>relabelfrom</item>
		<item>relabelto</item>
		<item>reload</item>
		<item>remount</item>
		<item>remove</item>
		<item>remove_child</item>
		<item>remove_color</item>
		<item>remove_glyph</item>
		<item>remove_name</item>
		<item>rename</item>
		<item>reparent</item>
		<item>rlimitinh</item>
		<item>rmdir</item>
		<item>rootok</item>
		<item>saver_getattr</item>
		<item>saver_hide</item>
		<item>saver_setattr</item>
		<item>saver_show</item>
		<item>search</item>
		<item>select</item>
		<item>send</item>
		<item>send_msg</item>
		<item>sendto</item>
		<item>set_context_mgr</item>
		<item>set_property</item>
		<item>set_value</item>
		<item>setattr</item>
		<item>setbool</item>
		<item>setcap</item>
		<item>setcheckreqprot</item>
		<item>setcontext</item>
		<item>setcurrent</item>
		<item>setenforce</item>
		<item>setexec</item>
		<item>setfcap</item>
		<item>setfocus</item>
		<item>setfscreate</item>
		<item>setgid</item>
		<item>setkeycreate</item>
		<item>setopt</item>
		<item>setpcap</item>
		<item>setpgid</item>
		<item>setrlimit</item>
		<item>setsched</item>
		<item>setsecparam</item>
		<item>setsockcreate</item>
		<item>setuid</item>
		<item>share</item>
		<item>shmemgrp</item>
		<item>shmemhost</item>
		<item>shmempwd</item>
		<item>shmemserv</item>
		<item>show</item>
		<item>show_cursor</item>
		<item>shutdown</item>
		<item>sigchld</item>
		<item>siginh</item>
		<item>sigkill</item>
		<item>signal</item>
		<item>signull</item>
		<item>sigstop</item>
		<item>start</item>
		<item>status</item>
		<item>stop</item>
		<item>swapon</item>
		<item>sys_admin</item>
		<item>sys_boot</item>
		<item>sys_chroot</item>
		<item>sys_module</item>
		<item>sys_nice</item>
		<item>sys_pacct</item>
		<item>sys_ptrace</item>
		<item>sys_rawio</item>
		<item>sys_resource</item>
		<item>sys_time</item>
		<item>sys_tty_config</item>
		<item>syslog</item>
		<item>syslog_console</item>
		<item>syslog_mod</item>
		<item>syslog_read</item>
		<item>tcp_recv</item>
		<item>tcp_send</item>
		<item>transfer</item>
		<item>transition</item>
		<item>udp_recv</item>
		<item>udp_send</item>
		<item>uninstall</item>
		<item>unix_read</item>
		<item>unix_write</item>
		<item>unlink</item>
		<item>unmount</item>
		<item>unused_perm</item>
		<item>update</item>
		<item>use</item>
		<item>use_as_override</item>
		<item>validate_trans</item>
		<item>view</item>
		<item>wake_alarm</item>
		<item>watch</item>
		<item>watch_mount</item>
		<item>watch_reads</item>
		<item>watch_sb</item>
		<item>watch_with_perm</item>
		<item>write</item>
		<!-- Deprecated: flow_in, flow_out, get_param, set_param -->
	</list>

	<!-- Additional AV Permissions for Android.
	     Permissions & Classes:
	       https://android.googlesource.com/platform/system/sepolicy/+/master/private/access_vectors
	       https://android.googlesource.com/platform/system/security/+/master/keystore/permissions.cpp
	     More details:
	       https://selinuxproject.org/page/NB_SEforAndroid_1#Android_Classes_and_Permissions -->
	<list name="av_permissions_android">
		<item>add_auth</item>
		<item>clear_uid</item>
		<item>closeDecryptSession</item>
		<item>consumeRights</item>
		<item>decrypt</item>
		<item>duplicate</item>
		<item>exist</item>
		<item>finalizeDecryptUnit</item>
		<item>find</item>
		<item>gen_unique_id</item>
		<item>get</item>
		<item>get_state</item>
		<item>grant</item>
		<item>initializeDecryptUnit</item>
		<item>is_empty</item>
		<item>list</item>
		<item>openDecryptSession</item>
		<item>password</item>
		<item>pread</item>
		<item>reset</item>
		<item>set</item>
		<item>setPlaybackStatus</item>
		<item>sign</item>
		<item>unlock</item>
		<item>user_changed</item>
		<item>verify</item>
	</list>

	<!-- FS & VFS Types -->
	<list name="filesystem">
		<include>rule_mount_fstypes##AppArmor Security Profile</include>
	</list>

	<!-- Keywords/Functions provided by SELinux Reference Policy -->
	<list name="refpolicy_keywords">
		<item>policy_module</item>
		<item>gen_require</item>
		<item>template</item>
		<item>interface</item>
		<item>optional_policy</item>
		<item>gen_tunable</item>
		<item>tunable_policy</item>
		<item>gen_user</item>
		<item>gen_context</item>
		<item>gen_bool</item>
		<item>gen_cats</item>
		<item>gen_sens</item>
		<item>gen_levels</item>
		<item>mls_systemlow</item>
		<item>mls_systemhigh</item>
		<item>mcs_systemlow</item>
		<item>mcs_systemhigh</item>
		<item>mcs_allcats</item>
		<item>ifndef</item>
	</list>

	<!-- M4 Built-in Keywords (obtained from "m4.xml") -->
	<list name="m4_builtin">
		<include>builtins##GNU M4</include>
		<include>m4_builtins##GNU M4</include>
	</list>
	<list name="m4_builtin_regexp">
		<item>regexp</item>
		<item>patsubst</item>
		<item>m4_regexp</item>
		<item>m4_patsubst</item>
	</list>

	<contexts>

		<context name="_normal" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_m4_preprocessor"/>
			<IncludeRules context="_find_all_comments"/>
			<IncludeRules context="_m4_special_arguments"/>

			<!-- Content Quoted (M4).
			     NOTE: The default quotes (`text') are highlighted,
			     but another type of quotation mark can be used. -->
			<IncludeRules context="_m4_string_simple"/> <!-- `simple text' -->
			<IncludeRules context="_m4_quotes"/> <!-- &m4Quotes; -->

			<DetectChar context="_quoted" attribute="Text Quoted" char="&quot;"/>
			<DetectChar context="_path" attribute="Path" char="/"/>
			<RegExpr context="_input_sel" attribute="Input Selector" String="\b&identifier;(?=\s*\=\s*[^\s\=,;\}\)\]#!\^:])"/>

			<!-- Keywords & Statements -->
			<keyword context="#stay" attribute="Booleans" String="booleans"/>
			<keyword context="#stay" attribute="Special Keys" String="self"/>
			<keyword context="_statement_policycap" attribute="Policy Config. Statements" String="statements_policycap"/>
			<!-- Highlight class -->
			<keyword context="_statement_find_class" attribute="Access Keys" String="statements_access"/>
			<keyword context="_statement_find_class" attribute="Statements" String="statements_type"/>
			<keyword context="_statement_find_class" attribute="Statements" String="statements_role_transition"/>
			<!-- Special contexts in statements -->
			<keyword context="_statement_range_transition" attribute="Statements" String="statements_range_transition"/>
			<keyword context="_statement_default" attribute="Statements" String="statements_default"/>
			<keyword context="_statement_default_range" attribute="Statements" String="statements_default_range"/>
			<keyword context="_statement_cexpr" attribute="Statements" String="statements_cexpr"/>
			<!-- Detect identifier after statement -->
			<keyword context="_find_identifier" attribute="Statements" String="statements_def"/>
			<keyword context="_find_mls_level" attribute="Statements" String="statements_mls_level_def"/>
			<keyword context="_find_mls_level_range" attribute="Statements" String="mls_range_def"/>

			<keyword context="#stay" attribute="Statements" String="statements"/>
			<keyword context="#stay" attribute="Statements" String="statements_fc"/>
			<keyword context="#stay" attribute="Statements" String="keywords"/>
			<keyword context="#stay" attribute="Expression Keys" String="cond_operators"/>

			<!-- Keywords/Functions of M4 & Reference Policy -->
			<WordDetect context="_function_gen_context" attribute="Refpolicy Keywords" String="gen_context"/>
			<keyword context="#stay" attribute="Refpolicy Keywords" String="refpolicy_keywords"/>
			<IncludeRules context="_m4_builtin_keywords"/>
			<RegExpr context="#stay" attribute="Function" String="\b&identifier;(?=\()"/>

			<!-- IP Addresses -->
			<IncludeRules context="_ip_addr"/>

			<!-- Keywords: Access Vectors Permissions & Filesystem -->
			<IncludeRules context="_av_permissions"/>
			<keyword context="#stay" attribute="Filesystem" String="filesystem"/>

			<!-- Boolean Operators -->
			<Detect2Chars context="#stay" attribute="Boolean Operators" char="=" char1="="/>
			<Detect2Chars context="#stay" attribute="Boolean Operators" char="!" char1="="/>
			<Detect2Chars context="#stay" attribute="Boolean Operators" char="&amp;" char1="&amp;"/>
			<Detect2Chars context="#stay" attribute="Boolean Operators" char="|" char1="|"/>
			<AnyChar context="#stay" attribute="Boolean Operators" String="!^"/>

			<!-- Symbols/Operators -->
			<DetectChar context="#stay" attribute="Operator" char="{" beginRegion="Bracket"/>
			<DetectChar context="#stay" attribute="Operator" char="}" endRegion="Bracket"/>
			<DetectChar context="#stay" char="(" beginRegion="ParenthesesBlock"/>
			<DetectChar context="#stay" char=")" endRegion="ParenthesesBlock"/>

			<Detect2Chars context="#stay" attribute="Operator" char="-" char1="&gt;"/>
			<AnyChar context="#stay" attribute="Operator" String="~[]"/>
			<AnyChar context="#stay" attribute="Symbol" String=",;:-"/>

			<IncludeRules context="_common_special_char"/>
			<IncludeRules context="_line_continue_escape"/>

			<!-- File Contexts -->
			<RegExpr context="_file_contexts" attribute="File Contexts" String="\b&identifierWithArg;(?:\:&identifierWithArg;){2}(?:\:&mlsLevel;(?:\s*\-\s*&mlsLevel;)?)?\b" lookAhead="true"/>

			<!-- This avoids highlighting numbers in identifiers -->
			<RegExpr context="#stay" String="&identifier;"/>
			<!-- Numbers -->
			<RegExpr context="#stay" attribute="Number" String="\b&versionIdentifier;"/>
			<HlCHex context="#stay" attribute="Hexadecimal"/>
			<Float context="#stay" attribute="Number"/>
			<Int context="#stay" attribute="Number"/>

			<RegExpr context="#stay" attribute="Reserved Keywords" String="(?:\s|^)\-[bcdpls\-](?=\s|$)"/>
			<DetectChar context="#stay" attribute="Symbol" char="."/>
		</context>

		<!-- Statements -->

		<!-- Highlight class after ":", in some statements -->
		<context name="_statement_find_class" attribute="Normal Text" lineEndContext="#stay">
			<DetectChar context="#pop!_class" attribute="Symbol" char=":"/>
			<DetectChar context="#pop" attribute="Symbol" char=";" lookAhead="true"/> <!-- End rule -->
			<IncludeRules context="_normal"/>
		</context>
		<context name="_class" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<!-- Class -->
			<RegExpr context="#pop" attribute="Class" String="\s*&identifier;(?=[^:\w\-\.,]|$)"/>
		</context>

		<!-- Special keywords in some statements -->
		<context name="_statement_default" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="#stay" attribute="Reserved Keywords" String="source_target"/>
			<DetectChar context="#pop" attribute="Symbol" char=";" lookAhead="true"/>
			<IncludeRules context="_normal"/>
		</context>
		<context name="_statement_default_range" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="#stay" attribute="Range" String="range"/>
			<IncludeRules context="_statement_default"/>
		</context>
		<context name="_statement_cexpr" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="#stay" attribute="Expression Keys" String="cexpr_operators"/>
			<keyword context="#stay" attribute="Special Keys" String="cexpr_keywords"/>
			<keyword context="#stay" attribute="Reserved Keywords" String="source_target"/>
			<keyword context="#stay" attribute="Reserved Keywords" String="sameuser"/>
			<DetectChar context="#pop" attribute="Symbol" char=";" lookAhead="true"/>
			<IncludeRules context="_normal"/>
		</context>
		<context name="_statement_policycap" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="#stay" attribute="Policy Capability" String="policy_capabilities"/>
			<DetectChar context="#pop" attribute="Symbol" char=";" lookAhead="true"/>
			<IncludeRules context="_normal"/>
		</context>

		<!-- RANGE_TRANSITION: Highlight level/range and fix class after ":" -->
		<context name="_statement_range_transition" attribute="Normal Text" lineEndContext="#stay">
			<DetectChar context="#pop" attribute="Symbol" char=";" lookAhead="true"/>
			<RegExpr context="_class_range_transition_statement" String="&identifierWithArg;\s*:\s*&identifierWithArg;\s+[a-zA-Z\$]" lookAhead="true"/>

			<RegExpr context="#pop!_mls_level_range" String="&mls_level_range_ident;\s+\-\s+&identifierWithArg;|&mls_level_range_ident;(?:\s*\-\s*&mls_level_range_ident;)?(?=\s*;)" lookAhead="true" minimal="1"/>
			<IncludeRules context="_normal"/>
		</context>
		<context name="_class_range_transition_statement" attribute="Normal Text" lineEndContext="#pop">
			<DetectChar context="#pop!_class" attribute="Symbol" char=":"/>
			<IncludeRules context="_m4_special_arguments"/>
			<keyword context="#stay" attribute="Special Keys" String="self"/>
		</context>

		<!-- Detect identifier (highlight it as "Normal Text") -->
		<context name="_find_identifier" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
			<IncludeRules context="_default_find_identifier"/>
			<RegExpr context="#pop" attribute="Normal Text" String="&identifier;"/>
		</context>
		<context name="_default_find_identifier" attribute="Normal Text" lineEndContext="#stay">
			<DetectSpaces context="#stay"/>
			<IncludeRules context="_m4_preprocessor"/>
			<IncludeRules context="_find_all_comments"/>
			<RegExpr context="#pop" attribute="Function" String="\b&identifier;(?=\()" lookAhead="true"/>
		</context>

		<!-- Detect MLS/MCS Level (s0.s1:c0,c1) -->
		<context name="_find_mls_level" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
			<IncludeRules context="_default_find_identifier"/>
			<RegExpr context="#pop!_mls_level" String="&identifierWithArg;" lookAhead="true" minimal="1"/>
		</context>
		<!-- Detect MLS/MCS Range (s0:c0 - s1:c1) -->
		<context name="_find_mls_level_range" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
			<IncludeRules context="_default_find_identifier"/>
			<RegExpr context="#pop!_mls_level_range" String="&identifierWithArg;" lookAhead="true" minimal="1"/>
		</context>
		<!-- MLS/MCS Range: Sensitivity:Category - Sensitivity:Category -->
		<context name="_mls_level_range" attribute="MLS/MCS Level/Range" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#pop!_mls_level_range_cat" attribute="Symbol" String=":(?=&identifierWithArg;)"/> <!-- Find Category -->
			<RegExpr context="#pop!_mls_level" attribute="Symbol" String="\s*\-\s*(?=&mlsLevel;)"/> <!-- Find Range -->
			<RegExpr context="#stay" attribute="Symbol" String="\.(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_mls_level"/>
		</context>
		<context name="_mls_level_range_cat" attribute="MLS/MCS Level/Range" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#pop!_mls_level" attribute="Symbol" String="\s*\-\s*(?=&mlsLevel;)"/> <!-- Find Range -->
			<RegExpr context="#stay" attribute="Symbol" String="(?:\.|\s*,\s*)(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_mls_level"/>
		</context>
		<!-- MLS/MCS Level: Sensitivity:Category -->
		<context name="_mls_level" attribute="MLS/MCS Level/Range" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#pop!_mls_level_cat" attribute="Symbol" String=":(?=&identifierWithArg;)"/> <!-- Find Category -->
			<RegExpr context="#stay" attribute="Symbol" String="\.(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_mls_level"/>
		</context>
		<context name="_mls_level_cat" attribute="MLS/MCS Level/Range" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#stay" attribute="Symbol" String="(?:\.|\s*,\s*)(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_mls_level"/>
		</context>
		<context name="_default_mls_level" attribute="MLS/MCS Level/Range" lineEndContext="#pop">
			<RegExpr context="#stay" attribute="MLS/MCS Level/Range" String="\w+"/>
			<DetectChar context="#stay" attribute="MLS/MCS Level/Range" char="-"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>

		<!-- Double Quotes String (does not support line breaks and line continuation escape) -->
		<context name="_quoted" attribute="Text Quoted"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_filename_quoted">
			<RegExpr context="#pop!_path_quoted" attribute="Text Quoted" String="[^&quot;/]*/" lookAhead="true"/> <!-- Find path -->
		</context>
		<context name="_filename_quoted" attribute="Text Quoted" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="Text Quoted" char="&quot;"/>
			<IncludeRules context="_m4_special_arguments"/>
			<RegExpr context="#stay" attribute="Text Quoted Open" String="[^\s&quot;\\](?=\s*$)"/>
		</context>
		<context name="_path_quoted" attribute="Text Quoted" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="Text Quoted" char="&quot;"/>
			<!-- Quote escaped is not allowed? (see line 260-261 in "selinux/checkpolicy/policy_scan.l") -->
			<IncludeRules context="_m4_special_arguments"/>
			<IncludeRules context="_regex_quoted"/>
			<RegExpr context="#stay" attribute="Text Quoted Open" String="[^\s&quot;\[\(\\](?=\s*$)"/>
		</context>

		<!-- Path -->
		<context name="_path" attribute="Path" lineEndContext="#pop">
			<DetectSpaces context="#pop" lookAhead="true"/>
			<IncludeRules context="_m4_special_arguments"/>
			<IncludeRules context="_regex"/>
		</context>

		<!-- Input Selectors: selector=value
		     NOTE: "seapp_contexts" in the Android policy use this. -->
		<context name="_input_sel" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<DetectSpaces context="#stay"/>
			<DetectChar context="#stay" attribute="Symbol" char="="/>
			<keyword context="#pop" attribute="Booleans" String="booleans"/>
			<keyword context="#pop" attribute="Special Keys" String="self"/>
			<DetectChar context="#pop" char="&quot;" lookAhead="true"/>
			<RegExpr context="#pop" attribute="Normal Text" String="&identifier;(?=[,;]?(?:\s|$))"/>
			<!-- Find RegExp -->
			<AnyChar context="#pop!_path" String="[(" lookAhead="true"/>
			<RegExpr context="#pop!_path" String="[^\=\s&quot;\{\}\[\]\(\);#]+[\{\[\(\*\+\?]|[^\=\s&quot;\{\}\[\]\(\);#\d]+\." lookAhead="true"/>
		</context>

		<!-- Special functions of Refpolicy -->
		<context name="_function_gen_context" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<DetectChar context="#pop!_function_gen_context_find_fc" attribute="Normal Text" char="("  beginRegion="ParenthesesBlock"/>
		</context>
		<context name="_function_gen_context_find_fc" attribute="File Contexts"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_function_gen_context_content">
			<RegExpr context="_file_contexts" String="&identifierWithArg;(?:\:&identifierWithArg;){2}\b" lookAhead="true"/>
			<DetectSpaces context="#stay"/>
		</context>
		<context name="_function_gen_context_content" attribute="File Contexts" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="Normal Text" char=")" endRegion="ParenthesesBlock"/>
			<AnyChar context="#stay" attribute="Normal Text" String=".:-"/>
			<AnyChar context="#stay" attribute="Symbol" String=",;"/>
			<IncludeRules context="_m4_special_arguments"/>
			<IncludeRules context="_find_all_comments"/>
			<IncludeRules context="_common_special_char"/>
			<IncludeRules context="_line_continue_escape"/>
		</context>

		<!-- File Contexts.
		     NOTE: File contexts with spaces before and after each ":" are not highlighted. -->
		<!-- user:role:type -->
		<context name="_file_contexts" attribute="File Contexts" lineEndContext="#pop">
			<DetectChar context="#pop!_fc_role" attribute="Symbol" char=":"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>
		<context name="_fc_role" attribute="File Contexts" lineEndContext="#pop">
			<DetectChar context="#pop!_fc_type" attribute="Symbol" char=":"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>
		<context name="_fc_type" attribute="File Contexts (Type Enforcement)" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_after_fc">
			<RegExpr context="#pop!_fc_level_range" attribute="Symbol" String=":(?=&mlsLevel;)"/> <!-- Find Level/Range -->
			<RegExpr context="#stay" attribute="File Contexts (Type Enforcement)" String="\.?[\w\-]+|\.(?=\$)"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>
		<!-- (MLS/MCS) user:role:type:level -->
		<context name="_fc_level_range" attribute="File Contexts" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_after_fc">
			<RegExpr context="#pop!_fc_level_range_cat" attribute="Symbol" String=":(?=&identifierWithArg;)"/> <!-- Find Category -->
			<RegExpr context="#pop!_fc_level" attribute="Symbol" String="\s*\-\s*(?=&mlsLevel;)"/> <!-- Find Range -->
			<RegExpr context="#stay" attribute="Symbol" String="\.(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_fc_level"/>
		</context>
		<context name="_fc_level_range_cat" attribute="File Contexts" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_after_fc">
			<RegExpr context="#pop!_fc_level" attribute="Symbol" String="\s*\-\s*(?=&mlsLevel;)"/> <!-- Find Range -->
			<RegExpr context="#stay" attribute="Symbol" String="(?:\.|\s*,\s*)(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_fc_level"/>
		</context>
		<!-- (MLS/MCS) user:role:type:level-level -->
		<context name="_fc_level" attribute="File Contexts" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_after_fc">
			<RegExpr context="#pop!_fc_level_cat" attribute="Symbol" String=":(?=&identifierWithArg;)"/> <!-- Find Category -->
			<RegExpr context="#stay" attribute="Symbol" String="\.(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_fc_level"/>
		</context>
		<context name="_fc_level_cat" attribute="File Contexts" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_after_fc">
			<RegExpr context="#stay" attribute="Symbol" String="(?:\.|\s*,\s*)(?=&identifierWithArg;)"/>
			<IncludeRules context="_default_fc_level"/>
		</context>
		<context name="_default_fc_level" attribute="File Contexts" lineEndContext="#pop">
			<RegExpr context="#stay" attribute="File Contexts" String="\w+"/>
			<DetectChar context="#stay" attribute="File Contexts" char="-"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>

		<context name="_after_fc" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#stay" attribute="Symbol" String=":(?=&identifierWithArg;)"/>
			<RegExpr context="#stay" attribute="Normal Text" String="&identifier;"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>

		<!--
		========================================
		        Comments & Documentation
		======================================== -->

		<context name="_find_comments" attribute="Normal Text" lineEndContext="#stay">
			<Detect2Chars context="_doc_comment" attribute="Documentation" char="#" char1="#"/>
			<DetectChar context="_comment" attribute="Comment" char="#"/>
		</context>
		<context name="_find_all_comments" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_find_comments"/>
			<!-- For Macros -->
			<RegExpr context="_comment" attribute="Comment" String="\bdnl(?!\.?[\w\-])"/>
		</context>

		<context name="_comment" attribute="Comment" lineEndContext="#pop">
			<DetectSpaces />
			<LineContinue context="#pop" attribute="Comment"/>
			<IncludeRules context="##Comments"/>
			<IncludeRules context="_default_comment"/>
		</context>
		<context name="_doc_comment" attribute="Documentation" lineEndContext="#pop">
			<IncludeRules context="_find_tags"/>
			<IncludeRules context="_find_entityrefs"/>
			<LineContinue context="#pop" attribute="Documentation"/>
			<IncludeRules context="_comment"/>
		</context>

		<context name="_find_tags" attribute="Documentation" lineEndContext="#pop">
			<RegExpr context="_element_tag" attribute="Doc. Element Tag" String="&lt;\s*&tagName;" beginRegion="DocElement"/>
			<RegExpr context="#stay" attribute="Doc. Element Tag" String="&lt;/\s*&tagName;\s*&gt;" endRegion="DocElement"/>
		</context>
		<context name="_find_entityrefs" attribute="Documentation" lineEndContext="#pop">
			<RegExpr context="#stay" attribute="Doc. EntityRef" String="&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|[a-zA-Z_](?:[\w\-]*\w)?);"/>
		</context>

		<context name="_element_tag" attribute="Documentation" lineEndContext="#pop">
			<Detect2Chars context="#pop" attribute="Doc. Element Tag" char="/" char1="&gt;" endRegion="DocElement"/>
			<DetectChar context="#pop" attribute="Doc. Element Tag" char="&gt;"/>
			<RegExpr context="_attribute" attribute="Doc. Attribute" String="\s&tagName;"/>
			<RegExpr context="#pop" attribute="Error" String="\S"/>
		</context>
		<context name="_attribute" attribute="Documentation" lineEndContext="#pop">
			<DetectChar context="#pop!_value" attribute="Documentation" char="="/>
			<RegExpr context="#stay" attribute="Doc. Attribute" String="\s&tagName;"/>
			<RegExpr context="#pop" attribute="Error" String="\S"/>
		</context>
		<context name="_value" attribute="Documentation" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<RegExpr context="#pop!_value_dq" attribute="Doc. Value" String="\s*&quot;"/>
			<RegExpr context="#pop!_value_sq" attribute="Doc. Value" String="\s*&apos;"/>
			<RegExpr context="#stay" attribute="Error" String="\s*\S+"/>
		</context>
		<context name="_value_dq" attribute="Doc. Value" lineEndContext="#pop">
			<RegExpr context="#pop" attribute="Error" String="\S(?=\s*$)"/>
			<DetectChar context="#pop" attribute="Doc. Value" char="&quot;"/>
			<IncludeRules context="_find_entityrefs"/>
		</context>
		<context name="_value_sq" attribute="Doc. Value" lineEndContext="#pop">
			<RegExpr context="#pop" attribute="Error" String="\S(?=\s*$)"/>
			<DetectChar context="#pop" attribute="Doc. Value" char="&apos;"/>
			<IncludeRules context="_find_entityrefs"/>
		</context>

		<!--
		====================================================================
		      Common Rules for Syntax Highlighting of SELinux Policies
		====================================================================
		NOTE: The following contexts are also used by "selinux-fc.xml"
		and "selinux-cil.xml". -->

		<!-- Default Comment (only for single line comments!) -->
		<context name="_default_comment" attribute="Normal Text" lineEndContext="#pop">
			<RegExpr context="#stay" attribute="URL in Comment" String="&url;|&email;"/>
		</context>

		<!-- IP Addresses -->
		<context name="_ip_addr" attribute="Normal Text" lineEndContext="#stay">
			<RegExpr context="#stay" attribute="IP Address" String="&ipv4;|&ipv6;"/>
			<!-- NOTE: IPv6 in the SELinux parser ("selinux/checkpolicy/policy_scan.l"): "(?:[\da-fA-F]{0,4}\:){2}[\da-fA-F:\.]*" -->
		</context>

		<!-- AV Permissions Keywords -->
		<context name="_av_permissions" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="#stay" attribute="AV Permissions" String="av_permissions"/>
			<keyword context="#stay" attribute="Android AV Permissions" String="av_permissions_android"/>
		</context>

		<!-- Special Characters -->
		<context name="_common_special_char" attribute="Normal Text" lineEndContext="#stay">
			<DetectChar context="#stay" attribute="Special Char" char="*"/>
		</context>
		<!-- Line-Continuation Escape -->
		<context name="_line_continue_escape" attribute="Normal Text" lineEndContext="#stay">
			<LineContinue context="#stay" attribute="Escape Char"/>
		</context>

		<!-- SELinux M4 Macros -->

		<context name="_m4_special_arguments" attribute="Normal Text" lineEndContext="#stay">
			<RegExpr context="#stay" attribute="M4 Special Arguments" String="&m4Args;"/>
		</context>
		<context name="_m4_quotes" attribute="Normal Text" lineEndContext="#stay">
			<AnyChar context="#stay" attribute="Default M4 Quote" String="&m4Quotes;"/>
		</context>

		<context name="_m4_builtin_keywords" attribute="Normal Text" lineEndContext="#stay">
			<keyword context="_function_regexp" attribute="M4 Built-in Keywords" String="m4_builtin_regexp"/>
			<keyword context="#stay" attribute="M4 Built-in Keywords" String="m4_builtin"/>
		</context>

		<!-- #line -->
		<context name="_m4_preprocessor" attribute="Normal Text" lineEndContext="#stay">
			<RegExpr context="_m4_preprocessor_line_num" attribute="M4 Preprocessor" String="#line[ ](?=\d)"/>
		</context>
		<context name="_m4_preprocessor_line_num" attribute="M4 Preprocessor" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<!-- #line 1 "source" -->
			<Detect2Chars context="_m4_preprocessor_line_source_file" attribute="M4 Preprocessor" char="1" char1=" "/>
			<Int context="#pop" attribute="M4 Preprocessor"/>
		</context>
		<context name="_m4_preprocessor_line_source_file" attribute="M4 Preprocessor"
		         lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
			<RangeDetect context="#pop#pop" attribute="M4 Preprocessor" char="&quot;" char1="&quot;"/>
		</context>

		<!-- "regexp" function in M4 -->
		<context name="_function_regexp" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
			<DetectChar context="#pop!_function_regexp_content" attribute="Normal Text" char="(" beginRegion="ParenthesesBlock"/>
		</context>
		<context name="_function_regexp_content" attribute="Normal Text" lineEndContext="#stay">
			<DetectChar context="#pop" attribute="Normal Text" char=")" endRegion="ParenthesesBlock"/>
			<DetectChar context="#stay" attribute="Normal Text" char=","/>
			<!-- Default Quote: `text' -->
			<RegExpr context="_simple_string_regexp" attribute="Text Quoted" String="`(?=(?:&m4Args;|[\w\-\s])*')"/>
			<IncludeRules context="_m4_quotes"/>

			<IncludeRules context="_m4_special_arguments"/>
			<IncludeRules context="_regex_general_otherquote"/>
			<IncludeRules context="_find_all_comments"/>
		</context>
		<context name="_simple_string_regexp" attribute="Text Quoted" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="Text Quoted" char="&apos;"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>

		<!-- Highlight simple string using the default quotes: `text' -->
		<context name="_m4_string_simple" attribute="Normal Text" lineEndContext="#stay">
			<DetectChar context="_find_m4_string_simple" char="`" lookAhead="true"/>
		</context>
		<context name="_find_m4_string_simple" attribute="Text Quoted" lineEndContext="#pop">
			<RegExpr context="#pop!_block_quoted_simple" attribute="Text Quoted" String="`(?=(?:&m4Args;|[\w\-\.\s]|\(\))*&apos;)"/>
			<DetectChar context="#pop" attribute="Default M4 Quote" char="`"/> <!-- &m4Quotes; -->
		</context>
		<context name="_block_quoted_simple" attribute="Text Quoted" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="Text Quoted" char="&apos;"/>
			<IncludeRules context="_m4_special_arguments"/>
		</context>

		<!--
		=================================
		          PCRE2 RegExp
		================================= -->

		<context name="_default_regex" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_special_chars"/>
			<IncludeRules context="_brackets_error"/>
			<IncludeRules context="_quantification_brackets"/>
		</context>

		<!-- SELinux RegExp -->
		<!-- For paths: not allow spaces & line breaks -->
		<context name="_regex" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_default_regex"/>
			<DetectChar context="_square_brackets" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets" attribute="RegExp Brackets" char="("/>
		</context>
		<!-- For double quote string ("str"): allow spaces, but not line breaks -->
		<context name="_regex_quoted" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_default_regex"/>
			<DetectChar context="_square_brackets_quoted" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets_quoted" attribute="RegExp Brackets" char="("/>
		</context>

		<!-- General RegExp:
		     - Allow escapes unsupported by SELinux.
		     - Do not end with a quote.
		     - Allow spaces & line breaks.
		     - Allow comments in round brackets. -->
		<context name="_regex_general_otherquote" attribute="Normal Text" lineEndContext="#stay">
			<IncludeRules context="_line_continue_escape"/>
			<IncludeRules context="_fix_escape"/>
			<IncludeRules context="_default_regex"/>
			<DetectChar context="_square_brackets_otherquote" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets_otherquote" attribute="RegExp Brackets" char="("/>
		</context>

		<context name="_special_chars" attribute="Normal Text" lineEndContext="#stay">
			<AnyChar context="#stay" attribute="Special Char" String="&specialChars;"/>
			<IncludeRules context="_escape"/>
		</context>

		<!-- Escapes -->
		<context name="_escape" attribute="Normal Text" lineEndContext="#stay">
			<!-- Escapes Not Supported by SELinux -->
			<RegExpr context="#stay" attribute="Error" String="\\(?:[LlUu]|N\{\w+\})"/>
			<RegExpr context="#stay" attribute="Escape Char" String="&escape1;|&escape2;|&escape3;|&escape4;|&escape5;|&escape6;|&escape7;|&escape8;|&escape9;|&escape10;|&escape11;"/>
		</context>
		<context name="_fix_escape" attribute="Normal Text" lineEndContext="#stay">
			<AnyChar context="#stay" attribute="Special Char" String="^$"/>
			<RegExpr context="#stay" attribute="Escape Char" String="\\(?:u[\da-fA-F]{4}|[LlUu]|N\{\w+\}|[0-7]{1,3})"/>
		</context>

		<!-- Special Characters in Groups: (?...). Also see: &capGroup; -->
		<context name="_special_group_round_brackets" attribute="Normal Text" lineEndContext="#stay">
			<RegExpr context="#stay" attribute="Special Char of Brackets" String="&group_bracket1;|&group_bracket2;|&group_bracket3;|&group_bracket4;"/>
		</context>

		<!-- {n} {min,} {,max} {min,max} -->
		<context name="_quantification_brackets" attribute="Normal Text" lineEndContext="#stay">
			<RegExpr context="_quantification_brackets_content" attribute="RegExp Brackets" String="\{(?=(?:\d+(?:,\d*)?|,\d+)\})"/>
		</context>
		<context name="_quantification_brackets_content" attribute="RegExp Brackets Content" lineEndContext="#pop">
			<DetectChar context="#stay" attribute="Special Char of Brackets" char=","/>
			<DetectChar context="#pop" attribute="RegExp Brackets" char="}"/>
		</context>

		<!-- Groups: [ ] and ( ) -->
		<context name="_default_square_brackets" attribute="RegExp Brackets Content" lineEndContext="#stay">
			<DetectChar context="#stay" attribute="Error" char="["/>
			<IncludeRules context="_special_chars"/>
		</context>
		<context name="_default_round_brackets" attribute="RegExp Brackets Content" lineEndContext="#stay">
			<DetectChar context="#stay" attribute="Special Char of Brackets" char="|"/>
			<IncludeRules context="_default_regex"/>
		</context>
		<context name="_brackets_error" attribute="Normal Text" lineEndContext="#stay">
			<Detect2Chars context="#stay" attribute="Error" char="[" char1="]"/>
		</context>

		<!-- Groups Brackets in Paths (do not allow spaces and line breaks) -->
		<context name="_square_brackets" attribute="RegExp Brackets Content"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_square_brackets_content">
			<!-- Negative Characters -->
			<RegExpr context="#pop!_square_brackets_content" attribute="Special Char of Brackets" String="\^(?=[^\s\]])"/>
		</context>
		<context name="_square_brackets_content" attribute="RegExp Brackets Content" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="RegExp Brackets" char="]"/>
			<DetectSpaces context="#pop" lookAhead="true"/>
			<RegExpr context="#stay" attribute="Open RegExp Brackets" String="[^\s\[\]\\](?=\s|$)"/>
			<IncludeRules context="_default_square_brackets"/>
		</context>

		<context name="_round_brackets" attribute="RegExp Brackets Content"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_round_brackets_content">
			<IncludeRules context="_special_group_round_brackets"/>
			<RegExpr context="#pop!_round_brackets_content" attribute="Special Char of Brackets" String="&capGroup;(?=[^\)\s])"/>
			<DetectChar context="#pop!_round_brackets_content" char="?"/>
		</context>
		<context name="_round_brackets_content" attribute="RegExp Brackets Content" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="RegExp Brackets" char=")"/>
			<DetectSpaces context="#pop" lookAhead="true"/>
			<RegExpr context="#stay" attribute="Open RegExp Brackets" String="[^\s\[\(\)\\](?=\s|$)"/>
			<IncludeRules context="_default_round_brackets"/>
			<DetectChar context="_square_brackets" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets" attribute="RegExp Brackets" char="("/>
		</context>

		<!-- Groups Brackets in Double Quoted Strings (allow spaces, but not line breaks) -->
		<context name="_square_brackets_quoted" attribute="RegExp Brackets Content"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_square_brackets_quoted_content">
			<RegExpr context="#pop!_square_brackets_quoted_content" attribute="Special Char of Brackets" String="\^(?=[^\]])"/>
		</context>
		<context name="_square_brackets_quoted_content" attribute="RegExp Brackets Content" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="RegExp Brackets" char="]"/>
			<DetectChar context="#pop" char="&quot;" lookAhead="true"/>
			<RegExpr context="#stay" attribute="Open RegExp Brackets" String="[^\s\[\]&quot;\\](?=\s*(?:&quot;|$))"/>
			<IncludeRules context="_default_square_brackets"/>
		</context>

		<context name="_round_brackets_quoted" attribute="RegExp Brackets Content"
		         lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!_round_brackets_quoted_content">
			<IncludeRules context="_special_group_round_brackets"/>
			<RegExpr context="#pop!_round_brackets_quoted_content" attribute="Special Char of Brackets" String="&capGroup;(?=[^\)])"/>
			<DetectChar context="#pop!_round_brackets_quoted_content" char="?"/>
		</context>
		<context name="_round_brackets_quoted_content" attribute="RegExp Brackets Content" lineEndContext="#pop">
			<DetectChar context="#pop" attribute="RegExp Brackets" char=")"/>
			<DetectChar context="#pop" char="&quot;" lookAhead="true"/>
			<RegExpr context="#stay" attribute="Open RegExp Brackets" String="[^\s\[\(\)&quot;\\](?=\s*(?:&quot;|$))"/>
			<IncludeRules context="_default_round_brackets"/>
			<DetectChar context="_square_brackets_quoted" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets_quoted" attribute="RegExp Brackets" char="("/>
		</context>

		<!-- Groups Brackets in Unknown Quotes (allow spaces and line breaks) -->
		<context name="_square_brackets_otherquote" attribute="RegExp Brackets Content"
		         lineEndContext="#pop!_square_brackets_otherquote_content" fallthrough="true" fallthroughContext="#pop!_square_brackets_otherquote_content">
			<RegExpr context="#pop!_square_brackets_otherquote_content" attribute="Special Char of Brackets" String="\^(?=[^\]]|$)"/>
		</context>
		<context name="_square_brackets_otherquote_content" attribute="RegExp Brackets Content" lineEndContext="#stay">
			<DetectChar context="#pop" attribute="RegExp Brackets" char="]"/>
			<IncludeRules context="_default_square_brackets"/>
		</context>

		<context name="_round_brackets_otherquote" attribute="RegExp Brackets Content"
		         lineEndContext="#pop!_round_brackets_otherquote_content" fallthrough="true" fallthroughContext="#pop!_round_brackets_otherquote_content">
			<IncludeRules context="_special_group_round_brackets"/>
			<RegExpr context="#pop!_round_brackets_otherquote_content" attribute="Special Char of Brackets" String="&capGroup;(?=[^\)]|$)"/>
			<DetectChar context="#pop!_round_brackets_otherquote_content" char="?"/>
		</context>
		<context name="_round_brackets_otherquote_content" attribute="RegExp Brackets Content" lineEndContext="#stay">
			<DetectChar context="#pop" attribute="RegExp Brackets" char=")"/>
			<IncludeRules context="_fix_escape"/>
			<IncludeRules context="_default_round_brackets"/>
			<IncludeRules context="_line_continue_escape"/>
			<DetectChar context="_square_brackets_otherquote" attribute="RegExp Brackets" char="["/>
			<DetectChar context="_round_brackets_otherquote" attribute="RegExp Brackets" char="("/>
			<RegExpr context="_comment" attribute="Comment" String="(?:^|\s)\#"/>
		</context>

	</contexts>

	<itemDatas>
		<itemData name="Normal Text"    defStyleNum="dsNormal"  spellChecking="false"/>
		<itemData name="Comment"        defStyleNum="dsComment"/>
		<itemData name="URL in Comment" defStyleNum="dsComment" underline="1" spellChecking="false"/>
		<itemData name="Path"           defStyleNum="dsNormal"  spellChecking="false"/>
		<itemData name="Text Quoted"    defStyleNum="dsString"  spellChecking="false"/>

		<itemData name="IP Address"             defStyleNum="dsFloat"          spellChecking="false"/>
		<itemData name="AV Permissions"         defStyleNum="dsVerbatimString" spellChecking="false"/>
		<itemData name="Android AV Permissions" defStyleNum="dsVerbatimString" italic="1" spellChecking="false"/>
		<itemData name="Policy Capability"      defStyleNum="dsPreprocessor"   bold="0" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Filesystem"             defStyleNum="dsNormal"         italic="1" spellChecking="false"/>

		<itemData name="Statements"        defStyleNum="dsKeyword"  bold="1" spellChecking="false"/>
		<itemData name="Policy Config. Statements" defStyleNum="dsPreprocessor" bold="1" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Access Keys"       defStyleNum="dsWarning"  bold="1" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Expression Keys"   defStyleNum="dsVariable" bold="1" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Boolean Operators" defStyleNum="dsVariable" bold="1" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Special Keys"      defStyleNum="dsOthers"   spellChecking="false"/>
		<itemData name="Reserved Keywords" defStyleNum="dsKeyword"  spellChecking="false"/>

		<itemData name="Booleans"            defStyleNum="dsExtension"     bold="1" underline="0" spellChecking="false"/>
		<itemData name="Range"               defStyleNum="dsDecVal"        bold="1" spellChecking="false"/>
		<itemData name="Class"               defStyleNum="dsDataType"      bold="0" underline="0" spellChecking="false"/>
		<itemData name="MLS/MCS Level/Range" defStyleNum="dsDocumentation" bold="0" italic="0" underline="0" spellChecking="false"/>
		<itemData name="File Contexts"       defStyleNum="dsPreprocessor"  bold="0" italic="0" underline="0" spellChecking="false"/>
		<itemData name="File Contexts (Type Enforcement)" defStyleNum="dsChar" bold="0" italic="0" underline="0" spellChecking="false"/>
		<itemData name="Input Selector"      defStyleNum="dsAttribute"     spellChecking="false"/>
		<itemData name="Operator"            defStyleNum="dsKeyword"       spellChecking="false"/>
		<itemData name="Symbol"              defStyleNum="dsOperator"      spellChecking="false"/>
		<itemData name="Number"              defStyleNum="dsDecVal"        spellChecking="false"/>
		<itemData name="Hexadecimal"         defStyleNum="dsBaseN"         spellChecking="false"/>

		<!-- Documentation -->
		<itemData name="Documentation"    defStyleNum="dsComment"/>
		<itemData name="Doc. Element Tag" defStyleNum="dsAnnotation"  bold="1" spellChecking="false"/>
		<itemData name="Doc. EntityRef"   defStyleNum="dsInformation" spellChecking="false"/>
		<itemData name="Doc. Attribute"   defStyleNum="dsAttribute"   spellChecking="false"/>
		<itemData name="Doc. Value"       defStyleNum="dsString"      spellChecking="false"/>

		<!-- Reference Policy -->
		<itemData name="Function"             defStyleNum="dsFunction" spellChecking="false"/>
		<itemData name="Refpolicy Keywords"   defStyleNum="dsFunction" italic="1" spellChecking="false"/>
		<!-- M4 Macros -->
		<itemData name="M4 Built-in Keywords" defStyleNum="dsBuiltIn"  spellChecking="false"/>
		<itemData name="M4 Special Arguments" defStyleNum="dsVariable" spellChecking="false"/>
		<itemData name="M4 Preprocessor"      defStyleNum="dsPreprocessor" spellChecking="false"/>
		<itemData name="Default M4 Quote"     defStyleNum="dsString"   bold="1" spellChecking="false"/>

		<!-- RegExp -->
		<itemData name="Escape Char"              defStyleNum="dsChar"          spellChecking="false"/>
		<itemData name="Special Char"             defStyleNum="dsSpecialChar"   spellChecking="false"/>
		<itemData name="Special Char of Brackets" defStyleNum="dsAnnotation"    bold="0" italic="0" underline="0" spellChecking="false"/>
		<itemData name="RegExp Brackets"          defStyleNum="dsSpecialString" spellChecking="false"/>
		<itemData name="RegExp Brackets Content"  defStyleNum="dsSpecialString" spellChecking="false"/>
		<itemData name="Open RegExp Brackets"     defStyleNum="dsSpecialString" underline="1" spellChecking="false"/>
		<itemData name="Text Quoted Open"         defStyleNum="dsString"        underline="1" spellChecking="false"/>

		<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
	</itemDatas>

</highlighting>

<general>
	<keywords casesensitive="true" additionalDeliminator="&quot;&apos;&#096;" weakDeliminator="-"/>
	<comments>
		<comment name="singleLine" start="#"/>
	</comments>
</general>

</language>
<!-- kate: replace-tabs off; tab-width 3; indent-width 3; remove-trailing-spaces mod; dynamic-word-wrap off; -->
