I search for solutions in this order: Past Code, Unreal Source, Wiki, BUF, groups.yahoo, google, screaming at monitor. – RegularX

User:00zX/UScript.xml

From Unreal Wiki, The Unreal Engine Documentation Site
< User:00zX
Revision as of 15:17, 23 March 2010 by 00zX (Talk | contribs) (Created page with '<pre> <?xml version="1.0"?> <!DOCTYPE MODE SYSTEM "xmode.dtd"> <MODE> <!-- UnrealScript edit mode. Put this file to your .jedit/modes/ directory and add the following line to…')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
<?xml version="1.0"?>
<!DOCTYPE MODE SYSTEM "xmode.dtd">
<MODE>
        <!--
        UnrealScript edit mode.
        Put this file to your .jedit/modes/ directory and add the following line
        to your .jedit/modes/catalog file:

        <MODE NAME="unrealscript" FILE="unrealscript.xml" FILE_NAME_GLOB="*.{uc,puc,uci}"/>
        -->

        <!--
        db: add support for the new timers
                function SetTimer(float inRate, optional bool inbLoop, optional Name inTimerFunc);
                ClearTimer(optional Name inTimerFunc);
                bool IsTimerActive(optional Name inTimerFunc);
                float GetTimerCount(optional Name inTimerFunc);
                float GetTimerRate(optional name TimerFuncName = 'Timer');
        -->
        <PROPS>
                <PROPERTY NAME="commentStart" VALUE="/*" />
                <PROPERTY NAME="commentEnd" VALUE="*/" />
                <PROPERTY NAME="lineComment" VALUE="//" />
                <PROPERTY NAME="newlineComment" VALUE="///" />
                <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />

                <!-- Auto indent -->
                <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
                <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
                <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
                <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
                <PROPERTY NAME="indentNextLine"
                        VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for(?:each)?\s*\(.*\))[^{;]*)" />
                <PROPERTY NAME="unindentThisLine"
                        VALUE="^.*(default:\s*|case.*:.*)$" />
        </PROPS>

        <RULES ESCAPE="\" IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE"
                DIGIT_RE="0x[\p{XDigit}]+|\d+(\.\d*)?(e[+-]?\d+)?[fF]?">

                <!-- doc comments -->
<!--         <SPAN TYPE="COMMENT3" DELEGATE="DOCCOMMENT">
                        <BEGIN>/**</BEGIN>
                        <END>*/</END>
                </SPAN>-->

                <SPAN TYPE="COMMENT2" DELEGATE="COMMENT">
                        <BEGIN>/**</BEGIN>
                        <END>*/</END>
                </SPAN>

                <!-- multi line comments -->
                <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">
                        <BEGIN>/*</BEGIN>
                        <END>*/</END>
                </SPAN>

                <!-- end of line comments -->
                <EOL_SPAN TYPE="COMMENT1" DELEGATE="EOLCOMMENT">//</EOL_SPAN>
                <EOL_SPAN TYPE="COMMENT2" DELEGATE="EOLCOMMENT">///</EOL_SPAN>

                <!-- string literals -->
                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
                        <BEGIN>"</BEGIN>
                        <END>"</END>
                </SPAN>

                <!-- name and object literals -->
                <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" ESCAPE="\">
                        <BEGIN>'</BEGIN>
                        <END>'</END>
                </SPAN>

<!--         <SPAN_REGEXP AT_WORD_START="TRUE" TYPE="LITERAL2" NO_LINE_BREAK="TRUE">
                        <BEGIN>\w*\s*'</BEGIN>
                        <END>'</END>
                </SPAN_REGEXP>-->

                <!-- UE1/2 compiler directives and UCPP pragmas -->
                <EOL_SPAN AT_WHITESPACE_END="TRUE" DELEGATE="DIRECTIVE" TYPE="KEYWORD2">#</EOL_SPAN>

                <!-- UE3 compiler macros -->
                <!-- macro in braces -->
                <SPAN TYPE="MARKUP" MATCH_TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">
                        <BEGIN>`{</BEGIN>
                        <END>}</END>
                </SPAN>

                <!-- special UE3 compiler macros -->
                <EOL_SPAN_REGEXP HASH_CHAR="`" AT_WHITESPACE_END="TRUE" DELEGATE="MAIN"
                        TYPE="KEYWORD4">`(define|else|endif|if|debug)\b</EOL_SPAN_REGEXP>

                <SPAN AT_WHITESPACE_END="TRUE" TYPE="LITERAL4" MATCH_TYPE="KEYWORD4">
                        <BEGIN>`include(</BEGIN>
                        <END>)</END>
                </SPAN>

                <SEQ_REGEXP HASH_CHAR="`" TYPE="KEYWORD4">`(isdefined|notdefined)\b</SEQ_REGEXP>

                <!-- in-line macro -->
                <MARK_FOLLOWING MATCH_TYPE="KEYWORD2" TYPE="MARKUP">`</MARK_FOLLOWING>

                <!-- GoTo labels -->
                <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR" AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>

                <!-- UE3 native replacements -->
                <SEQ_REGEXP HASH_CHAR="{" TYPE="COMMENT4">\{[^}]+}</SEQ_REGEXP>

                <!-- operators, separators and brackets -->
                <SEQ TYPE="OPERATOR">~</SEQ>
                <SEQ TYPE="OPERATOR">!</SEQ>
                <SEQ TYPE="OPERATOR">@</SEQ>
                <SEQ TYPE="OPERATOR">#</SEQ>
                <SEQ TYPE="OPERATOR">$</SEQ>
                <SEQ TYPE="OPERATOR">^</SEQ>
                <SEQ TYPE="OPERATOR">&</SEQ>
                <SEQ TYPE="OPERATOR">*</SEQ>
                <SEQ TYPE="OPERATOR">-</SEQ>
                <SEQ TYPE="OPERATOR">=</SEQ>
                <SEQ TYPE="OPERATOR">+</SEQ>
                <SEQ TYPE="OPERATOR">|</SEQ>
                <SEQ TYPE="OPERATOR">:</SEQ>
                <SEQ TYPE="OPERATOR"><</SEQ>
                <SEQ TYPE="OPERATOR">></SEQ>
                <SEQ TYPE="OPERATOR">/</SEQ>
                <SEQ TYPE="OPERATOR">?</SEQ>
                <SEQ TYPE="OPERATOR">\</SEQ>
                <SEQ TYPE="OPERATOR">)</SEQ>
                <SEQ TYPE="OPERATOR">{</SEQ>
                <SEQ TYPE="OPERATOR">}</SEQ>

                <!-- functions -->
                <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>

                <!-- static modifier -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="s"
                        TYPE="KEYWORD1">static\b(?!\s*\.)</SEQ_REGEXP>

                <!-- static function call -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="s"
                        TYPE="KEYWORD2">static\b(?=\s*\.)</SEQ_REGEXP>

                <!-- switch keyword -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="s"
                        TYPE="KEYWORD1">switch\b(?=\s*\()</SEQ_REGEXP>

                <!-- default switch case -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="d"
                        TYPE="KEYWORD1">default\b(?=\s*\:)</SEQ_REGEXP>
                <!-- default value access -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="d"
                        TYPE="KEYWORD2">default\b(?=\s*\.)</SEQ_REGEXP>

                <!-- input variable modifier -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="i"
                        TYPE="KEYWORD1">input\b(?=\s*[\w>])</SEQ_REGEXP>

                <!-- name datatype -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="n"
                        TYPE="KEYWORD3">name\b(?=\s*[\w>])</SEQ_REGEXP>

                <!-- class keyword -->
<!--         <SEQ_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHAR="c"
                        TYPE="KEYWORD1">class\b(?=\s*[\w])</SEQ_REGEXP>-->
                <!-- class identifier?? -->
<!--         <SEQ_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHAR="c"
                        TYPE="KEYWORD1">class\b(?=[\s*\w'])</SEQ_REGEXP>-->
                <!-- class datatype -->
<!--         <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="c"
                        TYPE="KEYWORD1">class\b(?=\s*[\w<>])</SEQ_REGEXP>-->

                <!-- delegate keyword -->
                <SEQ_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHAR="d"
                        TYPE="KEYWORD1">delegate\b(?=\s*[\w])</SEQ_REGEXP>
                <!-- delegate datatype -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="d"
                        TYPE="KEYWORD3">delegate\b(?=\s*[\w<>])</SEQ_REGEXP>

                <!-- default values section for class and structs -->
                <SPAN_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHARS="ds" NO_LINE_BREAK="FALSE" MATCH_TYPE="KEYWORD1" DELEGATE="DEFAULTS">
                        <BEGIN>(struct)?defaultproperties\s*$</BEGIN>
                        <END>}</END>
                </SPAN_REGEXP>

                <KEYWORDS>

                <!-- Class Syntax -->
                        <KEYWORD1>Class</KEYWORD1><!--db: added test-->
                        <INVALID>Expands</INVALID><!-- only early UE1, shouldn't really be used -->
                        <KEYWORD1>Extends</KEYWORD1>

                <!-- Class Syntax: Optional Specifiers -->
                        <!-- General -->
                        <KEYWORD1>Abstract</KEYWORD1>
                        <KEYWORD1>Config</KEYWORD1><!-- used for both class and var -->
                        <KEYWORD1>Native</KEYWORD1>
                        <KEYWORD1>NativeReplication</KEYWORD1>
                        <KEYWORD1>NoExport</KEYWORD1>
                        <KEYWORD1>NoImport</KEYWORD1>
                        <KEYWORD1>NotTransient</KEYWORD1><!-- since UE2 -->
                                <KEYWORD4>PerObjectConfig</KEYWORD4>

                <!-- Class Syntax: Secondary Specifiers -->
                        <!-- Editor -->
                        <KEYWORD4>AutoExpandCategories</KEYWORD4><!-- since UE3? -->
                        <KEYWORD4>CollapseCatergories</KEYWORD4><!-- since UE2 -->
                        <KEYWORD4>DontCollapseCategories</KEYWORD4>
                        <KEYWORD4>HideCategories</KEYWORD4><!-- since UE2 -->
                        <KEYWORD4>HideDropDown</KEYWORD4><!-- since UE2 -->
                        <KEYWORD4>NotEditInlineNew</KEYWORD4><!-- since UE2 -->
                        <KEYWORD4>NotPlaceable</KEYWORD4><!-- since UE2 -->
                        <KEYWORD4>Placeable</KEYWORD4>

                        <KEYWORD4>ExportStructs</KEYWORD4>
                        <KEYWORD1>SafeReplace</KEYWORD1>
<!--                 <KEYWORD1>HideCategories</KEYWORD1>--><!-- since UE2 -->

                        <KEYWORD1>DontCollapseCategories</KEYWORD1><!-- since UE2 -->

                        <!-- Advanced -->
                        <KEYWORD4>Inherits</KEYWORD4><!-- native effect, since UE3 -->
                        <KEYWORD1>Implements</KEYWORD1><!-- since UE3 -->

                        <KEYWORD1>Assert</KEYWORD1>
                        <KEYWORD1>Auto</KEYWORD1>
                        <KEYWORD1>Automated</KEYWORD1><!-- only UE2 -->

                        <KEYWORD1>Break</KEYWORD1>

                        <KEYWORD1>Cache</KEYWORD1><!-- only UE2 -->
                        <KEYWORD1>CacheExempt</KEYWORD1><!-- only UE2 -->
                        <KEYWORD1>Case</KEYWORD1>
                        <KEYWORD1>Client</KEYWORD1><!-- since UE3 -->
                        <KEYWORD1>Coerce</KEYWORD1>

                        <KEYWORD1>Const</KEYWORD1>
                        <KEYWORD1>Continue</KEYWORD1>

                        <KEYWORD1>cpptext</KEYWORD1><!-- only UE2? -->
                        <KEYWORD1>cppstruct</KEYWORD1><!-- only UE2? -->

                        <KEYWORD1>DataBinding</KEYWORD1><!-- since UE3 -->
                        <KEYWORD1>DependsOn</KEYWORD1><!-- since UE2 -->
                        <LABEL>Deprecated</LABEL><!-- since UE2, marks variables that should no longer be used -->
                        <KEYWORD1>Do</KEYWORD1>

                        <KEYWORD1>DuplicateTransient</KEYWORD1><!-- since UE3 -->

                        <KEYWORD1>EdFindable</KEYWORD1>
                        <KEYWORD1>EditConst</KEYWORD1>
                        <KEYWORD1>EditConstArray</KEYWORD1><!-- only UE2 -->
                        <KEYWORD1>EditFixedSize</KEYWORD1><!-- since UE3 -->
                        <KEYWORD1>EditInline</KEYWORD1><!-- since UE2 -->
                        <KEYWORD1>EditInlineNew</KEYWORD1><!-- Editor --><!-- since UE2 -->
                        <KEYWORD1>EditInlineNotify</KEYWORD1><!-- only UE2 -->
                        <KEYWORD1>EditInlineUse</KEYWORD1><!-- since UE2 -->
                        <KEYWORD1>Else</KEYWORD1>
                        <KEYWORD1>Enum</KEYWORD1>
                        <KEYWORD1>Event</KEYWORD1>
                        <KEYWORD1>Exec</KEYWORD1>

                        <KEYWORD1>Export</KEYWORD1>
                        <KEYWORD1>ExportStructs</KEYWORD1><!-- only UE2 -->

<!--                 <KEYWORD1>Final</KEYWORD1>-->
                        <KEYWORD1>For</KEYWORD1>
                        <KEYWORD1>ForEach</KEYWORD1>
                        <KEYWORD1>Function</KEYWORD1>

                        <KEYWORD1>GlobalConfig</KEYWORD1>
                        <KEYWORD1>Goto</KEYWORD1>

                        <KEYWORD1>If</KEYWORD1>
                        <KEYWORD1>Ignores</KEYWORD1>
                        <KEYWORD1>Immutable</KEYWORD1><!-- since UE3 -->
                        <KEYWORD1>Import</KEYWORD1>

                        <KEYWORD1>Init</KEYWORD1>
                        <KEYWORD1>Instanced</KEYWORD1><!-- since UE2 -->
                        <KEYWORD1>Interface</KEYWORD1>
                        <KEYWORD1>Intrinsic</KEYWORD1><!-- only early UE1, replaced by "native" -->
                        <KEYWORD1>Iterator</KEYWORD1>

                        <KEYWORD1>Latent</KEYWORD1>
                        <KEYWORD1>Local</KEYWORD1>
                        <KEYWORD1>Localized</KEYWORD1>
                        <KEYWORD1>Long</KEYWORD1><!-- since UE2, struct modifier -->

                        <KEYWORD1>Operator</KEYWORD1>
<!--                 <KEYWORD1>Optional</KEYWORD1>-->>
<!--                 <KEYWORD1>Out</KEYWORD1>-->

                        <KEYWORD1>ParseConfig</KEYWORD1>
<!--                 <KEYWORD1>PerObjectConfig</KEYWORD1>-->
<!--                 <KEYWORD1>Placeable</KEYWORD1>--><!-- since UE2 -->
                        <KEYWORD1>PostOperator</KEYWORD1>
                        <KEYWORD1>PreOperator</KEYWORD1>
<!--                 <KEYWORD1>Private</KEYWORD1>
                        <KEYWORD1>Protected</KEYWORD1>-->
                        <KEYWORD1>Public</KEYWORD1><!-- redundant, members are always public unless marked private or protected -->

                        <KEYWORD1>Reliable</KEYWORD1>
                        <KEYWORD1>Replication</KEYWORD1>
<!--                 <KEYWORD1>RepNotify</KEYWORD1>--><!-- since UE3 -->
                        <KEYWORD1>Return</KEYWORD1>

                        <KEYWORD1>Server</KEYWORD1><!-- since UE3 -->
                        <KEYWORD1>ShowCategories</KEYWORD1><!-- since UE2 -->
                        <KEYWORD1>Simulated</KEYWORD1>
                        <KEYWORD1>Singular</KEYWORD1>
                        <KEYWORD1>Skip</KEYWORD1>
                        <KEYWORD1>State</KEYWORD1>
                        <KEYWORD1>Stop</KEYWORD1>
                        <KEYWORD1>Struct</KEYWORD1>

<!--                 <KEYWORD1>Transient</KEYWORD1>-->
                        <KEYWORD1>Travel</KEYWORD1>

                        <KEYWORD1>Unreliable</KEYWORD1>
                        <KEYWORD1>Until</KEYWORD1>

                        <KEYWORD1>Var</KEYWORD1>

                        <KEYWORD1>While</KEYWORD1>
                        <KEYWORD1>Within</KEYWORD1><!-- since UE2 -->

                <!-- literals and special function calls -->
                        <KEYWORD2>False</KEYWORD2>
                        <KEYWORD2>Global</KEYWORD2>
<!--                 <KEYWORD2>Self</KEYWORD2>-->
                        <KEYWORD2>Super</KEYWORD2>
                        <KEYWORD2>True</KEYWORD2>
                        <KEYWORD2>New</KEYWORD2>
                        <KEYWORD2>None</KEYWORD2>

                                <!-- literals -->
                                <KEYWORD2>Vect2D</KEYWORD2>
                                <KEYWORD2>Vect</KEYWORD2>
                                <KEYWORD2>Rot</KEYWORD2>
                        <KEYWORD2>Normal</KEYWORD2>
                        <KEYWORD2>VSize</KEYWORD2>

                                <KEYWORD2>ArrayCount</KEYWORD2>
                                <KEYWORD2>EnumCount</KEYWORD2>
                                <KEYWORD2>Length</KEYWORD2><!-- UE2+ -->

                                <!-- Dynamic Arrays -->
                                <KEYWORD2>Find</KEYWORD2><!-- (since UE3) -->
                                <KEYWORD2>Add</KEYWORD2><!-- (since UE3) -->
                                <KEYWORD2>AddItem</KEYWORD2><!-- (since UE3) -->
                                <KEYWORD2>Insert</KEYWORD2><!-- (since UE2) -->
                                <KEYWORD2>InsertItem</KEYWORD2><!-- (since UE3) -->
                                <KEYWORD2>Remove</KEYWORD2><!-- UE2+ -->
                                <KEYWORD2>RemoveItem</KEYWORD2><!-- UE+ -->

                        <!-- built-in type names -->
                        <!-- db: modifed these to be keyword 1 from 3 -->
                        <!-- Variable Primary (Syntax)Flags -->
                        <KEYWORD1>Bool</KEYWORD1>
                        <KEYWORD1>Byte</KEYWORD1>
                        <KEYWORD1>Float</KEYWORD1>
                        <KEYWORD1>Int</KEYWORD1>
                        <KEYWORD1>String</KEYWORD1>
                        <KEYWORD1>Pointer</KEYWORD1><!-- UE2+ -->
                        <KEYWORD1>Array</KEYWORD1>

                        <KEYWORD1>Vector</KEYWORD1>
                        <KEYWORD1>Rotator</KEYWORD1>
                        <KEYWORD1>vector2d</KEYWORD1>
                        <KEYWORD1>color</KEYWORD1>

                <!-- UE3 property tags -->
                        <!-- db: moved these to keyword 3 instead of 4 to make room -->
<!--
                        <KEYWORD3>AllowAbstract</KEYWORD3>
                        <KEYWORD3>AutoComment</KEYWORD3>
                        <KEYWORD3>DisplayName</KEYWORD3>
                        <KEYWORD3>EditCondition</KEYWORD3>
                        <KEYWORD3>Tooltip</KEYWORD3>
-->

                        <!-- Major Classes / Enums -->
                        <KEYWORD3>Weapon</KEYWORD3>
<!--                 <KEYWORD3>Other</KEYWORD3>
                        <KEYWORD3>Instigator</KEYWORD3>-->
                        <KEYWORD3>Actor</KEYWORD3>
                        <KEYWORD3>Controller</KEYWORD3>
                        <KEYWORD3>LightType</KEYWORD3><!-- UE3 -->
                        <KEYWORD3>Level</KEYWORD3><!-- UE2 -->
                        <KEYWORD3>WorldInfo</KEYWORD3><!-- UE3 -->
                        <KEYWORD3>Pawn</KEYWORD3>
                        <KEYWORD3>PlayerController</KEYWORD3>
                        <KEYWORD3>Material</KEYWORD3>
                        <KEYWORD3>Texture</KEYWORD3>
                        <KEYWORD3>Effects</KEYWORD3>
                        <KEYWORD3>Info</KEYWORD3>

                                <!-- User Interface -->
                                <KEYWORD3>Canvas</KEYWORD3>
                                <KEYWORD3>HUD</KEYWORD3>
                                <KEYWORD3>UIRoot</KEYWORD3><!-- UE3 -->
                                <KEYWORD3>UIScene</KEYWORD3><!-- UE3 -->
                                <KEYWORD3>UIObject</KEYWORD3>
                                <KEYWORD3>UIImage</KEYWORD3>

                        <KEYWORD3>Emitter</KEYWORD3>
                        <KEYWORD3>Projector</KEYWORD3><!-- UE2+ -->
                        <KEYWORD3>DamageType</KEYWORD3>
                        <KEYWORD3>GameInfo</KEYWORD3>
                        <KEYWORD3>GameRules</KEYWORD3>
                        <KEYWORD3>PlayerReplicationInfo</KEYWORD3><!-- UE2+ -->
                        <KEYWORD3>GameReplicationInfo</KEYWORD3><!-- UE2+ -->
                        <KEYWORD3>Inventory</KEYWORD3>
                        <KEYWORD3>Vehicle</KEYWORD3><!-- UE2.5+ -->
                        <KEYWORD3>StaticMesh</KEYWORD3><!-- UE2+ -->

                        <KEYWORD3>NavigationPoint</KEYWORD3>
                        <KEYWORD3>PhysicsVolume</KEYWORD3>
                        <KEYWORD3>Mutator</KEYWORD3>

                                <!--Components UE3-->
                                <KEYWORD3>Component</KEYWORD3>
                                <KEYWORD3>ActorComponent</KEYWORD3>
                                <KEYWORD3>PrimitiveComponent</KEYWORD3>
                                <KEYWORD3>SVehicleSimBase</KEYWORD3>
                                <KEYWORD3>StaticMeshComponent</KEYWORD3>
                                <KEYWORD3>SkeletalMeshComponent</KEYWORD3>
                                <KEYWORD3>UTSkeletalMeshComponent</KEYWORD3><!--UT3 specific-->

                                <!--Sound, was changed-->
                                <KEYWORD3>Sound</KEYWORD3>
                                <KEYWORD3>SoundNode</KEYWORD3><!-- UE3 -->
                                <KEYWORD3>SoundCue</KEYWORD3><!-- UE3 -->

                        <!-- db: Secondary Keywords - grey/italic (like uncodex)-->
                        <KEYWORD4>Self</KEYWORD4>
                        <KEYWORD4>Owner</KEYWORD4><!--common-->
                        <KEYWORD4>Optional</KEYWORD4>
                        <KEYWORD4>Out</KEYWORD4>
                        <KEYWORD4>Object</KEYWORD4>
                        <KEYWORD4>Native</KEYWORD4>
                                <!-- Variable Secondary (Syntax)Flags-->
                                <KEYWORD4>Private</KEYWORD4>
                                <KEYWORD4>Protected</KEYWORD4>
                                <KEYWORD4>Localized</KEYWORD4>
                                <KEYWORD4>Config</KEYWORD4><!--is also a class flag-->
                                <KEYWORD4>GlobalConfig</KEYWORD4>
                                <KEYWORD4>RepNotify</KEYWORD4>
                                <KEYWORD4>Transient</KEYWORD4>
                                <!-- Function Secondary (Syntax)Flags-->
                                <KEYWORD4>Static</KEYWORD4>
                                <KEYWORD4>Final</KEYWORD4>
                                <KEYWORD4>Server</KEYWORD4>
                                <KEYWORD4>Client</KEYWORD4>
                                <KEYWORD4>Simulated</KEYWORD4>
                                <KEYWORD4>Iterator</KEYWORD4>

                        <KEYWORD4>FindChild</KEYWORD4>
                        <KEYWORD4>IsA</KEYWORD4>
                        <KEYWORD4>ClassIsChild</KEYWORD4>
                        <KEYWORD4>Draw3DLine</KEYWORD4>
                        <KEYWORD4>DeProject</KEYWORD4>
                        <KEYWORD4>ReplicateMove</KEYWORD4>
                        <KEYWORD4>ProcessMove</KEYWORD4>
                        <KEYWORD4>PlayerTick</KEYWORD4>
                        <KEYWORD4>Tick</KEYWORD4>
                        <KEYWORD4>PostRender</KEYWORD4>
                        <KEYWORD4>PostBeginPlay</KEYWORD4>
                        <KEYWORD4>PreBeginPlay</KEYWORD4>
                        <KEYWORD4>Trace</KEYWORD4>
                        <KEYWORD4>Spawn</KEYWORD4>
                </KEYWORDS>
        </RULES>

        <RULES IGNORE_CASE="TRUE" SET="DIRECTIVE">
                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>

                <!-- exec directives -->
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">exec</EOL_SPAN>
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">alwaysexec</EOL_SPAN>
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">forceexec</EOL_SPAN>
                <!-- source include -->
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">include</EOL_SPAN>
                <!-- execute command file -->
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">call</EOL_SPAN>
                <EOL_SPAN DELEGATE="EXEC_COMMAND" TYPE="KEYWORD1">alwayscall</EOL_SPAN>

                <!-- throw compiler error -->
                <EOL_SPAN DELEGATE="IGNORED" TYPE="KEYWORD1">error</EOL_SPAN>

                <!-- UCPP directives -->
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">ifdef</EOL_SPAN>
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">ifndef</EOL_SPAN>
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">if</EOL_SPAN>
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">elif</EOL_SPAN>
                <EOL_SPAN DELEGATE="IGNORED" TYPE="KEYWORD1">else</EOL_SPAN>
                <EOL_SPAN DELEGATE="IGNORED" TYPE="KEYWORD1">endif</EOL_SPAN>

                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">define</EOL_SPAN>
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">undef</EOL_SPAN>
                <EOL_SPAN DELEGATE="MAIN" TYPE="KEYWORD1">linenumber</EOL_SPAN>

                <EOL_SPAN DELEGATE="PRAGMA" TYPE="KEYWORD1">pragma</EOL_SPAN>
                <EOL_SPAN DELEGATE="PRAGMA" TYPE="KEYWORD1">ucpp</EOL_SPAN>
        </RULES>

        <RULES DEFAULT="COMMENT1" SET="COMMENT">
        <!-- UE3 @tags in all kinds of comments -->
                <SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR="@" TYPE="LABEL">(?<!\w)@\w+</SEQ_REGEXP>
        </RULES>

        <RULES DEFAULT="COMMENT3" SET="DOCCOMMENT">
                <IMPORT DELEGATE="COMMENT"/>
        </RULES>

        <RULES DEFAULT="COMMENT2" SET="EOLCOMMENT">
                <IMPORT DELEGATE="COMMENT"/>
        </RULES>

        <RULES DEFAULT="COMMENT1" SET="IGNORED">
                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
        </RULES>

        <RULES DEFAULT="MARKUP" SET="PRAGMA">
        <!-- UCPP pragmas -->

                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>

                <KEYWORDS>
                        <KEYWORD1>ucpp</KEYWORD1>

                        <KEYWORD3>notice</KEYWORD3>
                        <KEYWORD3>rename</KEYWORD3>
                        <KEYWORD3>include</KEYWORD3>
                        <KEYWORD3>warning</KEYWORD3>
                        <KEYWORD3>config</KEYWORD3>

                        <LITERAL2>true</LITERAL2>
                        <LITERAL2>false</LITERAL2>
                        <LITERAL2>on</LITERAL2>
                        <LITERAL2>off</LITERAL2>
                </KEYWORDS>
        </RULES>

        <RULES IGNORE_CASE="TRUE" SET="EXEC_COMMAND" NO_WORD_SEP="_\\.,+-<>/?^&*">
        <!-- exec directive markup -->

                <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>

                <!-- quoted strings -->
                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
                        <BEGIN>"</BEGIN>
                        <END>"</END>
                </SPAN>

                <!-- numbers -->
                <SEQ_REGEXP HASH_CHARS="0123456789" TYPE="DIGIT">\b(0x[\p{XDigit}]+|\d+(\.\d*)?(e[+-]?\d+)?[fF]?)\b</SEQ_REGEXP>

                <!-- parameters -->
                <MARK_PREVIOUS MATCH_TYPE="OPERATOR" TYPE="MARKUP">=</MARK_PREVIOUS>

                <!-- boolean values -->
                <KEYWORDS>
                        <LITERAL2>true</LITERAL2>
                        <LITERAL2>false</LITERAL2>
                        <LITERAL2>yes</LITERAL2>
                        <LITERAL2>no</LITERAL2>
                        <LITERAL2>on</LITERAL2>
                        <LITERAL2>off</LITERAL2>
                </KEYWORDS>
        </RULES>

        <RULES SET="DEFAULTS" ESCAPE="\" IGNORE_CASE="TRUE">
        <!-- defaultproperties and structdefaultproperties -->

        <!--
                highlight initial opening brace like final closing brace
                (there are no others in defprops, so this shouldn't be a problem
        -->
                <SEQ TYPE="KEYWORD1">{</SEQ>

                <!-- multi line comments -->
                <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">
                        <BEGIN>/*</BEGIN>
                        <END>*/</END>
                </SPAN>

                <!-- end of line comments -->
                <EOL_SPAN TYPE="COMMENT2" DELEGATE="EOLCOMMENT">//</EOL_SPAN>

                <!-- string literals -->
                <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
                        <BEGIN>"</BEGIN>
                        <END>"</END>
                </SPAN>

                <!-- name and object literals -->
                <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" ESCAPE="\">
                        <BEGIN>'</BEGIN>
                        <END>'</END>
                </SPAN>

<!--         <SPAN_REGEXP AT_WORD_START="TRUE" TYPE="LITERAL2" NO_LINE_BREAK="TRUE">
                        <BEGIN>\w*\s*'</BEGIN>
                        <END>'</END>
                </SPAN_REGEXP>-->

                <!-- subobjects -->
                <EOL_SPAN_REGEXP HASH_CHAR="b" AT_WHITESPACE_END="TRUE" DELEGATE="BEGINOBJECT" MATCH_TYPE="KEYWORD1">begin\s+object\s*</EOL_SPAN_REGEXP>
                <EOL_SPAN_REGEXP HASH_CHAR="e" AT_WHITESPACE_END="TRUE" MATCH_TYPE="KEYWORD1">end\s+object\s*</EOL_SPAN_REGEXP>

                <!-- regular expression for hexadecimal and decimal numbers, including sign -->
                <SEQ_REGEXP HASH_CHARS="+-0123456789" TYPE="DIGIT">\b0x[\p{XDigit}]+|[+-]?\b\d+(\.\d*)?([eE][+-]?\d+)?[fF]?\b</SEQ_REGEXP>

                <!-- everything before "=", ".", "(" or "[" is a variable name -->
                <MARK_PREVIOUS AT_WORD_START="TRUE" MATCH_TYPE="OPERATOR" TYPE="MARKUP">=</MARK_PREVIOUS>
                <MARK_PREVIOUS AT_WORD_START="TRUE" MATCH_TYPE="OPERATOR" TYPE="MARKUP">.</MARK_PREVIOUS>
                <MARK_PREVIOUS AT_WORD_START="TRUE" MATCH_TYPE="OPERATOR" TYPE="MARKUP">(</MARK_PREVIOUS>
                <MARK_PREVIOUS AT_WORD_START="TRUE" MATCH_TYPE="OPERATOR" TYPE="MARKUP">[</MARK_PREVIOUS>

                <!-- closing brackets -->
                <SEQ TYPE="OPERATOR">]</SEQ>
                <SEQ TYPE="OPERATOR">)</SEQ>

                <!-- comma for dynarray and struct values -->
                <SEQ TYPE="OPERATOR">,</SEQ>

                <!-- variable names can be separated from "=" by whitespace, so highlight that case separately -->
                <SEQ_REGEXP AT_WHITESPACE_END="TRUE" HASH_CHARS="abcdefghijklmnopqrstuvwxyz" TYPE="MARKUP">\w+</SEQ_REGEXP>

                <KEYWORDS>
                        <!-- dynamic array operations -->
                        <KEYWORD1>Add</KEYWORD1>
                        <KEYWORD1>Empty</KEYWORD1>
                        <KEYWORD1>Remove</KEYWORD1>

                        <!-- literals -->
                        <KEYWORD2>False</KEYWORD2>
                        <KEYWORD2>None</KEYWORD2>
                        <KEYWORD2>True</KEYWORD2>
                </KEYWORDS>
        </RULES>

        <RULES SET="BEGINOBJECT">
        <!-- special highlighting for "Begin Object" lines -->
                <SEQ TYPE="OPERATOR">=</SEQ>

                <!-- multi line comments -->
                <SPAN TYPE="COMMENT1" DELEGATE="COMMENT">
                        <BEGIN>/*</BEGIN>
                        <END>*/</END>
                </SPAN>

                <!-- name and object literals -->
                <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" ESCAPE="\">
                        <BEGIN>'</BEGIN>
                        <END>'</END>
                </SPAN>

                <KEYWORDS>
                        <KEYWORD1>Class</KEYWORD1>
                        <KEYWORD1>Name</KEYWORD1>
                        <KEYWORD1>LegacyClassName</KEYWORD1><!-- UE3 -->
                        <KEYWORD1>ObjName</KEYWORD1>
                        <KEYWORD1>Archetype</KEYWORD1><!-- UE3 -->
                </KEYWORDS>
        </RULES>
</MODE>