<?xml version="1.0" encoding="UTF-8"?>

<!--
    SPDX-FileCopyrightText: 2024 Stefan Staeglich <sstaeglich@kdemail.net>

    SPDX-License-Identifier: LGPL
-->

<language name="opsi-script" version="1" kateversion="5.0" section="Sources" extensions="*.opsiinc;*.opsiscript" author="Stefan Staeglich (sstaeglich@kdemail.net)" license="LGPL">

	<highlighting>
		<list name="control structures">
			<item>else</item>
			<item>elseif</item>
			<item>for</item>
			<item>do</item>
		</list>
		<list name="operators">
			<item>and</item>
			<item>not</item>
			<item>or</item>
			<item>in</item>
		</list>
        <list name="primary section import">
			<item>importLib</item>
			<item>Sub</item>
		</list>
		<list name="primary section keywords">
			<item>DefStringList</item>
			<item>DefVar</item>
			<item>set</item>
		</list>
		<list name="primary section builtin">
			<!--             opsi-script control -->
			<item>encoding</item>
			<item>SetLogLevel</item>
			<item>ExitOnError</item>
			<item>ScriptErrorMessages</item>
			<item>FatalOnSyntaxError</item>
			<item>FatalOnRuntimeError</item>
			<item>AutoActivityDisplay</item>
			<item>CheckTargetPath</item>
			<item>forceLogInAppendMode</item>
			<item>Message</item>
			<item>ShowMessageFile</item>
			<item>ShowBitMap</item>
			<item>comment</item>
			<item>LogError</item>
			<item>LogWarning</item>
			<item>includelog</item>
			<item>SetConfidential</item>
			<item>asConfidential</item>
			<item>Pause</item>
			<item>Stop</item>
			<item>include_insert</item>
			<item>include_append</item>
			<item>NormalizeWinst</item>
			<item>IconizeWinst</item>
			<item>MaximizeWinst</item>
			<item>RestoreWinst</item>
			<item>SetSkinDirectory</item>
			<item>runningInWanMode</item>
			<item>reloadProductList</item>
			<item>LogWarning</item>
			<!--             String functions -->
			<item>GetOS</item>
			<item>getLinuxDistroType</item>
			<item>GetMsVersionInfo</item>
			<item>GetMsVersionName</item>
			<item>GetSystemType</item>
			<item>getOSArchitecture</item>
			<item>getRegistryValue</item>
			<item>GetRegistrystringvalue</item>
			<item>GetRegistryStringValue32</item>
			<item>GetRegistryStringValue64</item>
			<item>GetRegistryStringValueSysNative</item>
			<item>GetValueFromInifile</item>
			<item>GetProductProperty</item>
			<item>GetConfidentialProductProperty</item>
			<item>trim</item>
			<item>lower</item>
			<item>upper</item>
			<item>unquote</item>
			<item>unquote2</item>
			<item>stringReplace</item>
			<item>strLength</item>
			<item>strPos</item>
			<item>strPart</item>
			<item>getValue</item>
			<item>getValueBySeparator</item>
			<item>setValueByKey</item>
			<item>getValueFromFile</item>
			<item>getValueFromFileBySeparator</item>
			<item>getLastExitCode</item>
			<item>DemandLicenseKey</item>
			<item>FreeLicense</item>
			<item>GetUserSID</item>
			<item>GetLoggedInUser</item>
			<item>GetUsercontext</item>
			<item>GetScriptMode</item>
			<item>saveVersionToProfile</item>
			<item>readVersionFromProfile</item>
			<item>scriptWasExecutedBefore</item>
			<item>GetHostsName</item>
			<item>GetHostsAddr</item>
			<item>ExtractFilePath</item>
			<item>calculate</item>
			<item>DecStrToHexStr</item>
			<item>HexStrToDecStr</item>
			<item>base64EncodeStr</item>
			<item>base64DecodeStr</item>
			<item>convert2Jsonstr</item>
			<item>RandomStr</item>
			<item>RandomStrWithParameters</item>
			<item>RandomIntStr</item>
			<item>CompareDotSeparatedStrings</item>
			<item>CompareDotSeparatedNumbers</item>
			<item>EnvVar</item>
			<item>ParamStr</item>
			<item>getDiffTimeSec</item>
			<item>SidToName</item>
			<item>GetMyIpByTarget</item>
			<item>GetIpByName</item>
			<item>reencodestr</item>
			<item>strLoadTextFile</item>
			<item>strLoadTextFileWithEncoding</item>
			<item>GetShortWinPathName</item>
			<item>stringinput</item>
			<item>which</item>
			<item>replaceOpsiConstants</item>
			<item>ReadTOMLFile</item>
			<item>GetTOMLAsString</item>
			<item>GetTOMLTableAsString</item>
			<item>GetValueFromTOML</item>
			<item>ModifyTOML</item>
			<item>DeleteTableFromTOML</item>
			<item>ConvertTOMLtoJSON</item>
			<!--             String list functions -->
			<item>splitString</item>
			<item>splitStringOnWhiteSpace</item>
			<item>loadTextFile</item>
			<item>loadUnicodeTextFile</item>
			<item>loadTextFileWithEncoding</item>
			<item>composeString</item>
			<item>takeString</item>
			<item>setStringInListAtIndex</item>
			<item>takeFirstStringContaining</item>
			<item>getOutStreamFromSection</item>
			<item>shellCall</item>
			<item>getReturnListFromSection</item>
			<item>getListContaining</item>
			<item>getListContainingList</item>
			<item>count</item>
			<item>emptylist</item>
			<item>GetProcessList</item>
			<item>getProductPropertyList</item>
			<item>getRegistryKeyList32</item>
			<item>getRegistryKeyList64</item>
			<item>getRegistryKeyListSysnative</item>
			<item>getRegistryKeyList</item>
			<item>getRegistryVarList32</item>
			<item>getRegistryVarList64</item>
			<item>getRegistryVarListSysnative</item>
			<item>getRegistryVarList</item>
			<item>getProfilesDirList</item>
			<item>listFiles</item>
			<item>replaceOpsiConstants</item>
			<item>GetLocaleInfoMap</item>
			<item>GetMSVersionMap</item>
			<item>getLinuxVersionMap</item>
			<item>getFileInfoMap</item>
			<item>getProductMap</item>
			<item>getRegistryVarMap32</item>
			<item>getRegistryVarMap64</item>
			<item>getRegistryVarMapSysnative</item>
			<item>getRegistryVarMap</item>
			<item>getHWBiosInfoMap</item>
			<item>editmap</item>
			<item>createStringList</item>
			<item>reverse</item>
			<item>getSectionNames</item>
			<item>retrieveSection</item>
			<item>getSubList</item>
			<item>getSubListByMatch</item>
			<item>getSubListByContaining</item>
			<item>getSubListByKey</item>
			<item>getKeyList</item>
			<item>addtolist</item>
			<item>addListToList</item>
			<item>reencodestrlist</item>
			<item>removeFromListByContaining</item>
			<item>removeFromListByMatch</item>
			<item>LoadTOMLFile</item>
			<item>GetTOMLAsStringList</item>
			<item>GetTOMLKeys</item>
			<item>GetTOMLTableNames</item>
			<item>GetTOMLTable</item>
			<!--             Boolean operators and functions -->
			<item>FileExists</item>
			<item>FileExists32</item>
			<item>FileExists64</item>
			<item>FileExistsSysNative</item>
			<item>DirectoryExists</item>
			<item>FileOrFolderExists</item>
			<item>fileIsSymlink</item>
			<item>LineExistsIn</item>
			<item>LineBeginning_ExistsIn</item>
			<item>LineContaining_ExistsIn</item>
			<item>HasMinimumSpace</item>
			<item>opsiLicenseManagementEnabled</item>
			<item>runningAsAdmin</item>
			<item>isLoginScript</item>
			<item>contains</item>
			<item>isNumber</item>
			<item>runningOnUefi</item>
			<item>runningInPE</item>
			<item>runningInWAnMode</item>
			<item>isDriveReady</item>
			<item>runningWithGui</item>
			<item>saveTextFile</item>
			<item>saveTextFileWithEncoding</item>
			<item>saveUnicodeTextFile</item>
			<item>CompareDotSeparatedNumbers</item>
			<item>CompareDotSeparatedStrings</item>
			<item>RegKeyExists</item>
			<item>RegVarExists</item>
			<item>isPingReachable</item>
			<item>isValidFQDN</item>
			<item>fileHasBom</item>
			<item>SaveToTOMLFile</item>
			<item>ConvertTOMLfileToJSONfile</item>
			<item>Killtask</item>
			<item>requiredOpsiscriptVersion</item>
			<item>requiredWinstVersion</item>
			<item>UpdateEnvironment</item>
			<!--         Flow control -->
			<item>isFatalError</item>
			<item>isSuccess</item>
			<item>isSuspended</item>
			<item>noUpdateScript</item>
			<item>ExitWindows</item>
			<item>Reboot</item>
			<item>ImmediateReboot</item>
			<item>ImmediateLogout</item>
			<item>ShutdownWanted</item>
			<item>RebootWanted</item>
			<item>sleepSeconds</item>
			<item>ChangeDirectory</item>
		</list>
		<list name="files section builtin">
			<item>copy</item>
			<item>del</item>
			<item>delete</item>
			<item>SourcePath</item>
			<item>CheckTargetPath</item>
			<item>chmod</item>
			<item>hardlink</item>
			<item>symlink</item>
			<item>rename</item>
			<item>move</item>
			<item>zipfile</item>
			<item>unzipfile</item>
		</list>
		<list name="ldapsearch section builtin">
			<item>targethost</item>
			<item>targetport</item>
			<item>user</item>
			<item>password</item>
			<item>dn</item>
			<item>typesonly</item>
			<item>filter</item>
			<item>attributes</item>
		</list>
		<list name="linkfolder section builtin">
			<item>delete_element</item>
			<item>delete_subfolder</item>
			<item>set_basefolder</item>
			<item>set_subfolder</item>
		</list>
		<list name="linkfolder section set_link builtin">
			<item>name</item>
			<item>target</item>
			<item>parameters</item>
			<item>working_dir</item>
			<item>icon_file</item>
			<item>icon_index</item>
			<item>shortcut</item>
		</list>
		<list name="patches section builtin">
			<item>add</item>
			<item>addnew</item>
			<item>change</item>
			<item>del</item>
			<item>delsec</item>
			<item>replace</item>
			<item>set</item>
		</list>
		<list name="patchhosts section builtin">
			<item>setAddr</item>
			<item>setName</item>
			<item>setAlias</item>
			<item>delAlias</item>
			<item>delHost</item>
			<item>setComment</item>
		</list>
		<list name="patchtextfile section builtin">
			<item>Set_Mozilla_Pref</item>
			<item>Set_Netscape_User_Pref</item>
			<item>AddStringListElement_To_Mozilla_Pref</item>
			<item>AddStringListElement_To_Netscape_User_Pref</item>
			<item>FindLine</item>
			<item>FindLine_StartingWith</item>
			<item>FindLine_Containing</item>
			<item>GoToTop</item>
			<item>AdvanceLine</item>
			<item>GoToBottom</item>
			<item>DeleteTheLine</item>
			<item>AddLine</item>
			<item>InsertLine</item>
			<item>AppendLine</item>
			<item>Append_File</item>
			<item>Subtract_File</item>
			<item>SaveToFile</item>
			<item>Sorted</item>
			<item>setKeyValueSeparator</item>
			<item>setValueByKey</item>
			<item>searchAndReplace</item>
		</list>
		<list name="registry section builtin">
			<item>OpenKey</item>
			<item>Set</item>
			<item>Add</item>
			<item>Supp</item>
			<item>GetMultiSZFromFile</item>
			<item>SaveValueToFile</item>
			<item>DeleteVar</item>
			<item>DeleteKey</item>
			<item>ReconstructFrom</item>
			<item>Flushkey</item>
			<item>openKey</item>
			<item>set</item>
			<item>add</item>
			<item>supp</item>
        </list>
		<list name="shellbatch section keywords">
			<item>break</item>
			<item>case</item>
			<item>continue</item>
			<item>do</item>
			<item>done</item>
			<item>elif</item>
			<item>else</item>
			<item>esac</item>
			<item>fi</item>
			<item>for</item>
			<item>function</item>
			<item>if</item>
			<item>in</item>
			<item>return</item>
			<item>select</item>
			<item>then</item>
			<item>until</item>
			<item>while</item>
		</list>
		<list name="shellbatch section builtin">
			<item>.</item>
			<item>:</item>
			<item>source</item>
			<item>alias</item>
			<item>bg</item>
			<item>bind</item>
			<item>builtin</item>
			<item>cd</item>
			<item>caller</item>
			<item>command</item>
			<item>compgen</item>
			<item>complete</item>
			<item>coproc</item>
			<item>dirs</item>
			<item>disown</item>
			<item>echo</item>
			<item>enable</item>
			<item>eval</item>
			<item>exec</item>
			<item>exit</item>
			<item>fc</item>
			<item>fg</item>
			<item>hash</item>
			<item>help</item>
			<item>history</item>
			<item>jobs</item>
			<item>kill</item>
			<item>logout</item>
			<item>popd</item>
			<item>printf</item>
			<item>pushd</item>
			<item>pwd</item>
			<item>set</item>
			<item>shift</item>
			<item>shopt</item>
			<item>suspend</item>
			<item>test</item>
			<item>time</item>
			<item>times</item>
			<item>trap</item>
			<item>type</item>
			<item>ulimit</item>
			<item>umask</item>
			<item>unalias</item>
			<item>wait</item>
		</list>
		<list name="shellbatch section builtin_vars">
			<item>export</item>
			<item>declare</item>
			<item>getopts</item>
			<item>let</item>
			<item>local</item>
			<item>read</item>
			<item>readonly</item>
			<item>typeset</item>
			<item>unset</item>
		</list>

		<list name="shellbatch section unixcommands">
			<!-- /bin -->
			<item>arch</item>
			<item>awk</item>
			<item>b2sum</item>
			<item>base32</item>
			<item>base64</item>
			<item>bash</item>
			<item>bunzip2</item>
			<item>bzcat</item>
			<item>bzcmp</item>
			<item>bzdiff</item>
			<item>bzegrep</item>
			<item>bzfgrep</item>
			<item>bzgrep</item>
			<item>bzip2</item>
			<item>bzip2recover</item>
			<item>bzless</item>
			<item>bzmore</item>
			<item>cat</item>
			<item>chattr</item>
			<item>chcon</item>
			<item>chgrp</item>
			<item>chmod</item>
			<item>chown</item>
			<item>chvt</item>
			<item>cksum</item>
			<item>cp</item>
			<item>crontab</item>
			<item>csplit</item>
			<item>date</item>
			<item>dd</item>
			<item>deallocvt</item>
			<item>df</item>
			<item>dir</item>
			<item>dircolors</item>
			<item>dmesg</item>
			<item>dnsdomainname</item>
			<item>domainname</item>
			<item>du</item>
			<item>dumpkeys</item>
			<item>ed</item>
			<item>egrep</item>
			<item>expand</item>
			<item>false</item>
			<item>fgconsole</item>
			<item>fgrep</item>
			<item>fold</item>
			<item>fuser</item>
			<item>gawk</item>
			<item>getkeycodes</item>
			<item>gocr</item>
			<item>grep</item>
			<item>groff</item>
			<item>groups</item>
			<item>gunzip</item>
			<item>gzexe</item>
			<item>gzip</item>
			<item>hostid</item>
			<item>hostname</item>
			<item>iconv</item>
			<item>igawk</item>
			<item>install</item>
			<item>kbd_mode</item>
			<item>kbdrate</item>
			<item>killall</item>
			<item>last</item>
			<item>lastb</item>
			<item>link</item>
			<item>ln</item>
			<item>loadkeys</item>
			<item>loadunimap</item>
			<item>login</item>
			<item>ls</item>
			<item>lsattr</item>
			<item>lsmod</item>
			<item>lsmod.old</item>
			<item>lzcat</item>
			<item>lzcmp</item>
			<item>lzdiff</item>
			<item>lzegrep</item>
			<item>lzfgrep</item>
			<item>lzgrep</item>
			<item>lzless</item>
			<item>lzma</item>
			<item>lzmainfo</item>
			<item>lzmore</item>
			<item>mapscrn</item>
			<item>md5sum</item>
			<item>mesg</item>
			<item>mkdir</item>
			<item>mkfifo</item>
			<item>mknod</item>
			<item>mktemp</item>
			<item>more</item>
			<item>mount</item>
			<item>mv</item>
			<item>nano</item>
			<item>netstat</item>
			<item>nisdomainname</item>
			<item>nproc</item>
			<item>nroff</item>
			<item>numfmt</item>
			<item>openvt</item>
			<item>paste</item>
			<item>pathchk</item>
			<item>pgawk</item>
			<item>pidof</item>
			<item>ping</item>
			<item>pinky</item>
			<item>printenv</item>
			<item>ps</item>
			<item>pstree</item>
			<item>ptx</item>
			<item>rbash</item>
			<item>readlink</item>
			<item>realpath</item>
			<item>red</item>
			<item>resizecons</item>
			<item>rm</item>
			<item>rmdir</item>
			<item>run-parts</item>
			<item>runcon</item>
			<item>sash</item>
			<item>sed</item>
			<item>setfont</item>
			<item>setkeycodes</item>
			<item>setleds</item>
			<item>setmetamode</item>
			<item>setserial</item>
			<item>sh</item>
			<item>sha1sum</item>
			<item>sha224sum</item>
			<item>sha256sum</item>
			<item>sha384sum</item>
			<item>sha512sum</item>
			<item>showkey</item>
			<item>shred</item>
			<item>shuf</item>
			<item>sleep</item>
			<item>ssed</item>
			<item>stat</item>
			<item>stdbuf</item>
			<item>stty</item>
			<item>su</item>
			<item>sync</item>
			<item>tar</item>
			<item>tempfile</item>
			<item>timeout</item>
			<item>touch</item>
			<item>tput</item>
			<item>troff</item>
			<item>true</item>
			<item>truncate</item>
			<item>tty</item>
			<item>umount</item>
			<item>uname</item>
			<item>unexpand</item>
			<item>unicode_start</item>
			<item>unicode_stop</item>
			<item>unlink</item>
			<item>unlzma</item>
			<item>unxz</item>
			<item>utmpdump</item>
			<item>uuidgen</item>
			<item>vdir</item>
			<item>vi</item>
			<item>wall</item>
			<item>wc</item>
			<item>xz</item>
			<item>xzcat</item>
			<item>ypdomainname</item>
			<item>zcat</item>
			<item>zcmp</item>
			<item>zdiff</item>
			<item>zegrep</item>
			<item>zfgrep</item>
			<item>zforce</item>
			<item>zgrep</item>
			<item>zless</item>
			<item>zmore</item>
			<item>znew</item>
			<item>zsh</item>

			<!-- some from /usr/bin -->
			<item>aclocal</item>
			<item>aconnect</item>
			<item>aplay</item>
			<item>apm</item>
			<item>apmsleep</item>
			<item>apropos</item>
			<item>ar</item>
			<item>arecord</item>
			<item>as</item>
			<item>as86</item>
			<item>autoconf</item>
			<item>autoheader</item>
			<item>automake</item>
			<item>basename</item>
			<item>bc</item>
			<item>bison</item>
			<item>c++</item>
			<item>cal</item>
			<item>cc</item>
			<item>cdda2wav</item>
			<item>cdparanoia</item>
			<item>cdrdao</item>
			<item>cd-read</item>
			<item>cdrecord</item>
			<item>chfn</item>
			<item>chroot</item>
			<item>chsh</item>
			<item>clear</item>
			<item>cmp</item>
			<item>co</item>
			<item>col</item>
			<item>comm</item>
			<item>cpio</item>
			<item>cpp</item>
			<item>cut</item>
			<item>dc</item>
			<item>diff</item>
			<item>diff3</item>
			<item>directomatic</item>
			<item>dirname</item>
			<item>env</item>
			<item>expr</item>
			<item>fbset</item>
			<item>file</item>
			<item>find</item>
			<item>flex</item>
			<item>flex++</item>
			<item>fmt</item>
			<item>free</item>
			<item>ftp</item>
			<item>funzip</item>
			<item>g++</item>
			<item>gc</item>
			<item>gcc</item>
			<item>clang</item>
			<item>clang++</item>
			<item>valgrind</item>
			<item>xdg-open</item>
			<item>cmake</item>
			<item>qmake</item>
			<item>svn</item>
			<item>git</item>
			<item>rsync</item>
			<item>gdb</item>
			<item>getent</item>
			<item>getopt</item>
			<item>gettext</item>
			<item>gettextize</item>
			<item>gimp</item>
			<item>gimp-remote</item>
			<item>gimptool</item>
			<item>gmake</item>
			<item>gs</item>
			<item>head</item>
			<item>hexdump</item>
			<item>id</item>
			<item>join</item>
			<item>ld</item>
			<item>ld86</item>
			<item>ldd</item>
			<item>less</item>
			<item>lex</item>
			<item>locate</item>
			<item>lockfile</item>
			<item>logname</item>
			<item>lp</item>
			<item>lpr</item>
			<item>lynx</item>
			<item>m4</item>
			<item>make</item>
			<item>man</item>
			<item>msgfmt</item>
			<item>namei</item>
			<item>nasm</item>
			<item>nawk</item>
			<item>nice</item>
			<item>nl</item>
			<item>nm</item>
			<item>nm86</item>
			<item>nmap</item>
			<item>nohup</item>
			<item>nop</item>
			<item>od</item>
			<item>passwd</item>
			<item>patch</item>
			<item>pcregrep</item>
			<item>pcretest</item>
			<item>perl</item>
			<item>perror</item>
			<item>pr</item>
			<item>procmail</item>
			<item>prune</item>
			<item>ps2ascii</item>
			<item>ps2epsi</item>
			<item>ps2frag</item>
			<item>ps2pdf</item>
			<item>ps2ps</item>
			<item>psbook</item>
			<item>psmerge</item>
			<item>psnup</item>
			<item>psresize</item>
			<item>psselect</item>
			<item>pstops</item>
			<item>rcs</item>
			<item>rev</item>
			<item>scp</item>
			<item>seq</item>
			<item>setterm</item>
			<item>size</item>
			<item>size86</item>
			<item>skill</item>
			<item>slogin</item>
			<item>snice</item>
			<item>sort</item>
			<item>sox</item>
			<item>split</item>
			<item>ssh</item>
			<item>ssh-add</item>
			<item>ssh-agent</item>
			<item>ssh-keygen</item>
			<item>ssh-keyscan</item>
			<item>strings</item>
			<item>strip</item>
			<item>sudo</item>
			<item>suidperl</item>
			<item>sum</item>
			<item>tac</item>
			<item>tail</item>
			<item>tee</item>
			<item>tr</item>
			<item>tsort</item>
			<item>uniq</item>
			<item>unzip</item>
			<item>updatedb</item>
			<item>updmap</item>
			<item>uptime</item>
			<item>users</item>
			<item>vmstat</item>
			<item>w</item>
			<item>wget</item>
			<item>whatis</item>
			<item>whereis</item>
			<item>which</item>
			<item>who</item>
			<item>whoami</item>
			<item>write</item>
			<item>xargs</item>
			<item>yacc</item>
			<item>yes</item>
			<item>zip</item>
			<item>zsoelim</item>

			<!-- others -->
			<item>dcop</item>
			<item>kdialog</item>
			<item>kfile</item>
			<item>xhost</item>
			<item>xmodmap</item>
			<item>xset</item>
		</list>
		<list name="xml2 section builtin">
			<item>strictMode</item>
			<item>openNode</item>
			<item>SetAttribute</item>
			<item>AddAttribute</item>
			<item>DeleteAttribute</item>
			<item>addNewNode</item>
			<item>setNodeText</item>
			<item>DeleteNode</item>
			<item>gotoParentNode</item>
			<item>rootNodeOnCreate</item>
		</list>
		<contexts>
			<context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
				<AnyChar attribute="Operator" String="+=&lt;&gt;" context="#stay" />
				<DetectChar attribute="String" context="StringDoubleQuotes" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes" char="'" />
				<RegExpr attribute="Variable" context="#stay" String="(\$[a-zA-Z0-9_-]+\$|\%[a-zA-Z0-9_-]+\%)" />
				<RegExpr attribute="Comment" context="#stay" String="[;#][^\n]*" />
				<RegExpr attribute="Control Structures" String="(?i)^\s*DefFunc\b" context="Func" beginRegion="func" />
				<RegExpr attribute="Section" context="Actions" String="(?i)^\s*\[(Actions|Sub_[A-Za-z0-9_]+)\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="Files" String="(?i)^\s*\[Files_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="LdapSearch" String="(?i)^\s*\[ldapsearch_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="LinkFolder" String="(?i)^\s*\[LinkFolder_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="Patches" String="(?i)^\s*\[Patches_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="PatchHosts" String="(?i)^\s*\[PatchHosts_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="PatchTextFile" String="(?i)^\s*\[PatchTextFile_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="Registry" String="(?i)^\s*\[Registry_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="ShellBatch" String="(?i)^\s*\[(ShellBatch|ShellInAnIcon|DosBatch|DosInAnIcon)_[A-Za-z0-9_]+\]\s*$$" beginRegion="section" endRegion="section" />
				<RegExpr attribute="Section" context="XML2" String="(?i)^\s*\[XML2_[A-Za-z0-9_]+\]\s*$" beginRegion="section" endRegion="section" />
				<Detect2Chars attribute="Section" context="OtherSection" char="[" char1="]" beginRegion="section" endRegion="section" />
			</context>
			<context name="StringDoubleQuotes" attribute="String" lineEndContext="#pop">
				<RegExpr attribute="Variable" context="#stay" String="\%[a-zA-Z0-9_-]+\%" />
				<DetectChar attribute="String" context="#pop" char="&quot;" />
			</context>
			<context name="StringSingleQuotes" attribute="String" lineEndContext="#pop">
				<RegExpr attribute="Variable" context="#stay" String="\%[a-zA-Z0-9_-]+\%" />
				<DetectChar attribute="String" context="#pop" char="'" />
			</context>
			<context name="StringDoubleQuotes Secondary" attribute="String" lineEndContext="#pop">
				<RegExpr attribute="Variable" context="#stay" String="\$[a-zA-Z0-9_-]+\$" />
				<IncludeRules context="StringDoubleQuotes" />
			</context>
			<context name="StringSingleQuotes Secondary" attribute="String" lineEndContext="#pop">
				<RegExpr attribute="Variable" context="#stay" String="\$[a-zA-Z0-9_-]+\$" />
				<IncludeRules context="StringSingleQuotes" />
			</context>
			<context name="StringDoubleQuotes Shell" attribute="String" lineEndContext="#stay">
				<IncludeRules context="StringDoubleQuotes Secondary" />
			</context>
			<context name="StringSingleQuotes Shell" attribute="String" lineEndContext="#stay">
				<IncludeRules context="StringSingleQuotes Secondary" />
			</context>
			<context name="Func" attribute="Normal Text" lineEndContext="#stay">
				<RegExpr attribute="Control Structures" String="(?i)^\s*EndFunc\b" context="#pop" endRegion="func" />
				<IncludeRules context="Actions" />
			</context>
			<context name="If" attribute="Normal Text" lineEndContext="#stay">
				<StringDetect attribute="Control Structures" String="endif" context="#pop" endRegion="if" />
				<IncludeRules context="Actions" />
			</context>
			<context name="Switch" attribute="Normal Text" lineEndContext="#stay">
				<RegExpr attribute="Control Structures" context="Case" String="(?i)^\s*(Case|DefaultCase)\b" beginRegion="Case" />
				<RegExpr attribute="Control Structures" String="(?i)^\s*EndSwitch\b" context="#pop" endRegion="Switch" />
				<IncludeRules context="Actions" />
			</context>
			<context name="Case" attribute="Normal Text" lineEndContext="#stay">
				<RegExpr attribute="Control Structures" String="(?i)^\s*EndCase\b" context="#pop" endRegion="Case" />
				<IncludeRules context="Switch" />
			</context>
			<context name="OtherSection" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'"/>
				<IncludeRules context="Normal Text" />
			</context>
			<context name="Actions" attribute="Normal Text" lineEndContext="#stay">
				<keyword attribute="Control Structures" context="#stay" String="control structures" />
				<StringDetect attribute="Control Structures" String="if" context="If" beginRegion="if" />
				<RegExpr attribute="Control Structures" String="(?i)^\s*Switch\b" context="Switch" beginRegion="Switch" />
                <keyword attribute="Import" context="#stay" String="primary section import" />
				<keyword attribute="Keyword" context="#stay" String="primary section keywords" />
				<keyword attribute="Builtin Function" context="#stay" String="primary section builtin" />
				<keyword attribute="Operator" context="#stay" String="operators" />
				<IncludeRules context="Normal Text" />
				<RegExpr attribute="Function" context="#stay" String="(?i)\s*(Sub|Files|LdapSearch|LinkFolder|Patches|PatchHosts|PatchTextFile|Registry|ShellBatch|ShellInAnIcon|DosBatch|DosInAnicon|ExecWith|XML2)_[A-Za-z0-9_]+\b\s*" />
			</context>
			<context name="Files" attribute="Normal Text" lineEndContext="#stay">
				<keyword attribute="Builtin Function" context="#stay" String="files section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="LdapSearch" attribute="Normal Text" lineEndContext="#stay">
				<keyword attribute="Builtin Function" context="#stay" String="ldapsearch section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="LinkFolder" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'" />
				<keyword attribute="Builtin Function" context="#stay" String="linkfolder section builtin" />
				<StringDetect attribute="Control Structures" String="set_link" context="Set_link" beginRegion="set_link" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="Set_link" attribute="Normal Text" lineEndContext="#stay">
				<keyword attribute="Builtin Function" context="#stay" String="linkfolder section set_link builtin" />
				<StringDetect attribute="Control Structures" String="end_link" context="#pop" endRegion="set_link" />
			</context>
			<context name="PatchHosts" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'" />
				<keyword attribute="Builtin Function" context="#stay" String="patchhosts section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="Patches" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'" />
				<keyword attribute="Builtin Function" context="#stay" String="patches section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="PatchTextFile" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'" />
				<keyword attribute="Builtin Function" context="#stay" String="patchtextfile section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="Registry" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'" />
				<keyword attribute="Builtin Function" context="#stay" String="registry section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="ShellBatch" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Shell" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Shell" char="'"/>
				<DetectChar attribute="Operator" char=";"/>
				<RegExpr attribute="Comment" String="#[^\n]*" />
				<RegExpr attribute="Variable" String="\$[\?\w]+" />
				<keyword attribute="Keyword" context="#stay" String="shellbatch section keywords" />
				<keyword attribute="Builtin Function" context="#stay" String="shellbatch section builtin" />
				<keyword attribute="Builtin Function" context="#stay" String="shellbatch section builtin_vars" />
				<keyword attribute="Function" context="#stay" String="shellbatch section unixcommands" />
				<IncludeRules context="Normal Text" />
			</context>
			<context name="XML2" attribute="Normal Text" lineEndContext="#stay">
				<DetectChar attribute="String" context="StringDoubleQuotes Secondary" char="&quot;" />
				<DetectChar attribute="String" context="StringSingleQuotes Secondary" char="'"/>
				<keyword attribute="Builtin Function" context="#stay" String="xml2 section builtin" />
				<IncludeRules context="Normal Text" />
			</context>
		</contexts>
		<itemDatas>
			<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false" />
			<itemData name="Builtin Function" defStyleNum="dsBuiltIn" spellChecking="false" />
			<itemData name="Comment" defStyleNum="dsComment" />
			<itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false" />
			<itemData name="Function" defStyleNum="dsFunction" spellChecking="false" />
			<itemData name="Operator" defStyleNum="dsOperator" spellChecking="false" />
            <itemData name="Import" defStyleNum="dsImport" spellChecking="false"/>
			<itemData name="String" defStyleNum="dsString" spellChecking="false" />
			<itemData name="Variable" defStyleNum="dsVariable" spellChecking="false" />
			<itemData name="Control Structures" defStyleNum="dsControlFlow" spellChecking="false" />
			<itemData name="Section" defStyleNum="dsDataType" spellChecking="false" />
		</itemDatas>
	</highlighting>
	<general>
		<comments>
			<comment name="singleLine" start=";" />
		</comments>
        <keywords casesensitive="0"/>
	</general>
</language>
