<?php
/*************************************************************************************
 * uscript.php
 * ---------------------------------
 * Author: pospi (pospi@spadgos.com)
 * Copyright: (c) 2007 pospi (http://pospi.spadgos.com)
 * Release Version: 1.0.9.0
 * Date Started: 2007/05/21
 *
 * UnrealScript language file for GeSHi.
 *
 * Comments:
 * * Main purpose at this time is for Unreal Engine 2 / 2.5
 * * Mostly taken from UltraEdit unrealScript wordfile.
 *
 * CHANGES
 * -------
 * 2007/05/21 (1.0.8.10)
 *  -  First Release
 *
 * TODO (updated 2007/05/21)
 * -------------------------
 * * Update to feature any UE3 classes / keywords when UT3 comes out
 *
 *************************************************************************************
 *
 *     This file is part of GeSHi.
 *
 *   GeSHi is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   GeSHi is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with GeSHi; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 ************************************************************************************/

$language_data = array (
    'LANG_NAME' => 'Unreal Script',
    'COMMENT_SINGLE' => array(
            1 => '//',
            2 => '#'
            ),
    'COMMENT_MULTI' => array('/*' => '*/'),
    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
    'QUOTEMARKS' => array("'", '"'),
    'ESCAPE_CHAR' => '\\',
    'KEYWORDS' => array(
        1 => array(        //declaration keywords
            'simulated', 'state', 'class', 'function', 'event', 'var', 'local',
            'ignores', 'globalconfig', 'config', 'abstract', 'nativereplication', 'native',
            'auto', 'coerce', 'const', 'default',
            'defaultproperties',
            'enum', 'extends', 'expands', 'final', 'guid', 'latent', 'localized',
            'new', 'noexport', 'operator', 'preoperator', 'optional', 'out',
            'private', 'public', 'protected', 'reliable', 'replication',
            'singular', 'static', 'struct', 'transient', 'unreliable',
            'hidedropdown', 'cacheexempt', 'exec', 'delegate', 'import', 'placeable', 'exportstructs'
            ),
        2 => array(        //control flow keywords
            'for', 'while', 'do', 'if', 'else', 'switch', 'case', 'return', 'break', 'continue',
            'begin', 'loop', 'assert',
            'foreach', 'AllActors', 'DynamicActors', 'ChildActors', 'BasedActors', 'TouchingActors',
            'TraceActors', 'RadiusActors', 'VisibleActors', 'CollidingActors', 'VisibleCollidingActors'
            ),
        3 => array(        //global (object) functions
            'log', 'warn', 'rot', 'vect', 'Rand', 'Min', 'Max', 'Clamp', 'Abs', 'Sin', 'ASin',
            'Cos', 'ACos', 'Tan', 'ATan', 'Exp', 'Loge', 'Sqrt', 'Square', 'FRand', 'FMin', 'FMax', 'FClamp',
            'Lerp', 'Smerp', 'Ceil', 'Round', 'VSize', 'Normal', 'Invert', 'VRand', 'MirrorVectorByNormal',
            'GetAxes', 'GetUnAxes', 'RotRand', 'OrthoRotation', 'Normalize', 'ClockwiseFrom',
            'Len', 'InStr', 'Mid', 'Left', 'Right', 'Caps', 'Chr', 'Asc', 'Locs',
            'Divide', 'Split', 'StrCmp', 'Repl', 'Eval',
            'InterpCurveEval', 'InterpCurveGetOutputRange', 'InterpCurveGetInputDomain',
            'QuatProduct', 'QuatInvert', 'QuatRotateVector', 'QuatFindBetween', 'QuatFromAxisAndAngle',
            'QuatFromRotator', 'QuatToRotator', 'QuatSlerp',
            'Localize', 'GotoState', 'IsInState', 'GetStateName',
            'ClassIsChildOf', 'IsA', 'Enable', 'Disable',
            'GetPropertyText', 'SetPropertyText', 'GetEnum', 'DynamicLoadObject', 'FindObject',
            'SaveConfig', 'ClearConfig', 'StaticSaveConfig', 'ResetConfig', 'StaticClearConfig',
            'GetPerObjectNames', 'RandRange', 'StopWatch', 'IsOnConsole', 'IsSoaking',
            'PlatformIsMacOS', 'PlatformIsUnix', 'PlatformIsWindows', 'PlatformIs64Bit',
            'BeginState', 'EndState', 'Created', 'AllObjects', 'GetReferencers', 'GetItemName',
            'ReplaceText', 'EatStr'
            ),
        4 => array(        //common almost-global (actor) functions
            'ClientMessage', 'ConsoleCommand', 'CopyObjectToClipboard', 'TextToSpeech',
            'Error', 'Sleep', 'SetCollision', 'SetCollisionSize', 'SetDrawScale', 'SetDrawScale3D',
            'SetStaticMesh', 'SetDrawType', 'Move', 'SetLocation', 'SetRotation',
            'SetRelativeLocation', 'SetRelativeRotation', 'MoveSmooth', 'AutonomousPhysics',
            'SetBase', 'SetOwner', 'IsJoinedTo', 'GetMeshName', 'PlayAnim', 'LoopAnim', 'TweenAnim',
            'IsAnimating', 'FinishAnim', 'HasAnim', 'StopAnimating', 'FreezeFrameAt', 'SetAnimFrame',
            'IsTweening', 'AnimStopLooping', 'AnimEnd', 'LinkSkelAnim', 'LinkMesh', 'BoneRefresh',
            'GetBoneCoords', 'GetBoneRotation', 'GetRootLocation', 'GetRootRotation', 'AttachToBone',
            'DetachFromBone', 'SetBoneScale', 'UpdateURL', 'GetURLOption', 'SetPhysics', 'KAddImpulse',
            'KImpact', 'KApplyForce', 'Clock', 'UnClock', 'Destroyed', 'GainedChild', 'LostChild',
            'Tick', 'PostNetReceive', 'ClientTrigger', 'Trigger', 'UnTrigger', 'BeginEvent', 'EndEvent',
            'Timer', 'HitWall', 'Falling', 'Landed', 'ZoneChange', 'PhysicsVolumeChange', 'Touch',
            'PostTouch', 'UnTouch', 'Bump', 'BaseChange', 'Attach', 'Detach', 'SpecialHandling',
            'EncroachingOn', 'EncroachedBy', 'RanInto', 'FinishedInterpolation', 'EndedRotation',
            'UsedBy', 'FellOutOfWorld', 'KilledBy', 'TakeDamage', 'HealDamage', 'Trace', 'FastTrace',
            'TraceThisActor', 'spawn', 'Destroy', 'TornOff', 'SetTimer', 'PlaySound', 'PlayOwnedSound',
            'GetSoundDuration', 'MakeNoise', 'BeginPlay', 'GetAllInt', 'RenderOverlays', 'RenderTexture',
            'PreBeginPlay', 'PostBeginPlay', 'PostNetBeginPlay', 'HurtRadius', 'Reset', 'Crash'
            ),
        5 => array(        //data types
            'none', 'null',
            'float', 'int', 'bool', 'byte', 'char', 'double', 'iterator', 'name', 'string',    //primitive
            'plane', 'rotator', 'vector', 'spline',    'coords', 'Quat', 'Range', 'RangeVector', //structs
            'Scale', 'Color', 'Box', 'IntBox', 'FloatBox', 'BoundingVolume', 'Matrix', 'InterpCurvePoint',
            'InterpCurve', 'CompressedPosition', 'TMultiMap', 'PointRegion',
            'KRigidBodyState', 'KSimParams', 'AnimRep', 'FireProperties',
            'lodmesh', 'skeletalmesh', 'mesh', 'StaticMesh', 'MeshInstance',    //3d resources
            'sound',    //sound resources
            'material', 'texture', 'combiner', 'modifier', 'ColorModifier', 'FinalBlend',    //2d resources
            'MaterialSequence', 'MaterialSwitch', 'OpacityModifier', 'TexModifier', 'TexEnvMap',
            'TexCoordSource', 'TexMatrix', 'TexOscillator', 'TexPanner', 'TexRotator', 'TexScaler',
            'RenderedMaterial', 'BitmapMaterial', 'ScriptedTexture', 'ShadowBitmapMaterial', 'Cubemap',
            'FractalTexture', 'FireTexture', 'IceTexture', 'WaterTexture', 'FluidTexture', 'WaveTexture',
            'WetTexture', 'ConstantMaterial', 'ConstantColor', 'FadeColor', 'ParticleMaterial',
            'ProjectorMaterial', 'Shader', 'TerrainMaterial', 'VertexColor'
            ),
        6 => array(        //misc keywords
            'false', 'true', 'self', 'super', 'MaxInt', 'Pi'
            ),
        7 => array(        //common actor enums & variables
            'DT_None', 'DT_Sprite', 'DT_Mesh', 'DT_Brush', 'DT_RopeSprite',
            'DT_VerticalSprite', 'DT_TerraForm', 'DT_SpriteAnimOnce', 'DT_StaticMesh', 'DT_DrawType',
            'DT_Particle', 'DT_AntiPortal', 'DT_FluidSurface',
            'PHYS_None', 'PHYS_Walking', 'PHYS_Falling', 'PHYS_Swimming', 'PHYS_Flying',
            'PHYS_Rotating', 'PHYS_Projectile', 'PHYS_Interpolating', 'PHYS_MovingBrush', 'PHYS_Spider',
            'PHYS_Trailer', 'PHYS_Ladder', 'PHYS_RootMotion', 'PHYS_Karma', 'PHYS_KarmaRagDoll',
            'PHYS_Hovering', 'PHYS_CinMotion',
            'ROLE_None', 'ROLE_DumbProxy', 'ROLE_SimulatedProxy',
            'ROLE_AutonomousProxy', 'ROLE_Authority',
            'STY_None', 'STY_Normal', 'STY_Masked', 'STY_Translucent', 'STY_Modulated', 'STY_Alpha',
            'STY_Additive', 'STY_Subtractive', 'STY_Particle', 'STY_AlphaZ',
            'OCCLUSION_None', 'OCCLUSION_BSP', 'OCCLUSION_Default', 'OCCLUSION_StaticMeshes',
            'SLOT_None', 'SLOT_Misc', 'SLOT_Pain', 'SLOT_Interact', 'SLOT_Ambient', 'SLOT_Talk',
            'SLOT_Interface', 'MTRAN_None', 'MTRAN_Instant', 'MTRAN_Segue', 'MTRAN_Fade',
            'MTRAN_FastFade', 'MTRAN_SlowFade',

            'DrawType', 'Physics', 'Owner', 'Base', 'Level', 'Game', 'Instigator', 'RemoteRole', 'Role',
            'LifeSpan', 'Tag', 'Event', 'Location', 'Rotation', 'Velocity', 'Acceleration',
            'RelativeLocation', 'RelativeRotation', 'DrawScale', 'DrawScale3D', 'Skins', 'Style',
            'SoundVolume', 'SoundPitch', 'SoundRadius', 'TransientSoundVolume', 'TransientSoundRadius',
            'CollisionRadius', 'CollisionHeight', 'Mass', 'Buoyancy', 'RotationRate', 'DesiredRotation'
            ),
        8 => array(        //common non-actor uscript classes
            'Object',
            'CacheManager', 'CameraEffect', 'Canvas', 'CheatManager', 'Commandlet', 'DecoText', 'GUI',
            'InteractionMaster', 'Interactions', 'Interaction', 'KarmaParamsCollision', 'KarmaParamsRBFull',
            'KarmaParamsSkel', 'KarmaParams', 'LevelSummary', 'Locale', 'Manifest', 'MaterialFactory',
            'MeshObject', 'ObjectPool', 'Pallete',
            'ParticleEmitter', 'MeshEmitter', 'BeamEmitter', 'SpriteEmitter', 'SparkEmitter', 'TrailEmitter',
            'Player', 'PlayerInput', 'PlayInfo', 'ReachSpec', 'Resource', 'LatentScriptedAction', 'ScriptedAction',
            'speciesType', 'StreamBase', 'Stream', 'EditorEngine', 'Engine', 'Time', 'WeaponFire',
            'WebApplication', 'WebRequest', 'WebResponse', 'WebSkin', 'xPawnGibGroup', 'xPawnSoundGroup',
            'xUtil'
            ),
        9 => array(        //common actor-based uscript classes
            'Actor',
            'Controller', 'AIController', 'ScriptedController', 'Bot', 'xBot',
            'PlayerController', 'UnrealPlayer', 'xPlayer',
            'DamageType', 'WeaponDamageType', 'Effects', 'Emitter', 'NetworkEmitter',
            'Gib', 'HUD', 'HudBase', 'Info', 'FluidSurfaceInfo', 'Combo',
            'GameInfo', 'UnrealMPGameInfo', 'DeathMatch', 'TeamGame', 'CTFGame',
            'xCTFGame', 'xBombingRun', 'xDoubleDom', 'xTeamGame',
            'ASGameInfo', 'Invasion', 'ONSOnslaughtGame', 'xDeathmatch',
            'Mutator', 'Inventory', 'Ammunition', 'KeyInventory', 'Powerups', 'Armor', 'Weapon',
            'InventoryAttachment', 'WeaponAttachment',
            'KActor', 'KConstraint', 'KBSJoint', 'KCarWheelJoint', 'KConeLimit', 'KHinge', 'KTire',
            'KVehicleFactory', 'Keypoint', 'AIScript', 'ScriptedSequence', 'ScriptedTrigger',
            'AmbientSound', 'Light', 'SpotLight', 'SunLight', 'TriggerLight',
            'MeshEffect', 'NavigationPoint', 'GameObjective', 'DestroyableObjective',
            'PathNode', 'FlyingPathNode', 'RoadPathNode', 'InventorySpot', 'PlayerStart',
            'Pawn', 'Vehicle', 'UnrealPawn', 'xPawn', 'Monster', 'ASVehicle', 'KVehicle', 'KCar',
            'ONSWeaponPawn', 'SVehicle', 'ONSVehicle', 'ONSChopperCraft', 'ONSHoverCraft',
            'ONSPlaneCraft', 'ONSTreadCraft', 'ONSWheeledCraft',
            'Pickup', 'Ammo', 'UTAmmoPickup', 'ArmorPickup', 'KeyPickup', 'TournamentPickup',
            'Projectile', 'Projector', 'DynamicProjector', 'ShadowProjector', 'xScorch',
            'xEmitter', 'xPickupBase', 'xProcMesh', 'xWeatherEffect', 'PhysicsVolume', 'Volume'
            ),
        10 => array(    //symbol-like operators
            'dot','cross'
            )
        ),
    'SYMBOLS' => array(
        '+','-','=','/','*','-','%','>','<','&','^','!','|','`','(',')','[',']','{','}',
        '<<','>>','$','@'
        ),
    'CASE_SENSITIVE' => array(
        GESHI_COMMENTS => false,
        1 => false,
        2 => false,
        3 => false,
        4 => false,
        5 => false,
        6 => false,
        7 => false,
        8 => false,
        9 => false,
        10 => false,
        ),
    'STYLES' => array(
        'KEYWORDS' => array(
            1 => 'color: #0000FF;',
            2 => 'color: #0000FF;',
            3 => 'color: #0066AA;',
            4 => 'color: #0088FF;',
            5 => 'color: #E000E0;',
            6 => 'color: #900000;',
            7 => 'color: #888800;',
            8 => 'color: #AA6600;',
            9 => 'color: #FF8800;',
            10 => 'color: #0000FF;'
            ),
        'COMMENTS' => array(
            1 => 'color: #008080; font-style: italic;',
            2 => 'color: #000000; font-weight: bold;',
            'MULTI' => 'color: #008080; font-style: italic;'
            ),
        'ESCAPE_CHAR' => array(
            0 => ''
            ),
        'BRACKETS' => array(
            0 => 'color: #000000;'
            ),
        'STRINGS' => array(
            0 => 'color: #999999;'
            ),
        'NUMBERS' => array(
            0 => 'color: #FF0000;'
            ),
        'METHODS' => array(
            0 => 'color: #006600;'
            ),
        'SYMBOLS' => array(
            0 => 'color: #669966;'
            ),
        'REGEXPS' => array(
            0 => 'color: #E000E0;',
            1 => 'color: #E000E0;'
            ),
        'SCRIPT' => array(
            0 => ''
            )
        ),
    'URLS' => array(
        1 => '',
        2 => '',
        3 => '',
        4 => '',
        5 => '',
        6 => '',
        7 => '',
        8 => 'http://wiki.beyondunreal.com/wiki?search={FNAME}',
        9 => 'http://wiki.beyondunreal.com/wiki?search={FNAME}',
        10 => ''
        ),
    'OOLANG' => true,
    'OBJECT_SPLITTERS' => array('.'),
    'REGEXPS' => array(            //handle template-style variable definitions
        0 => array(
            GESHI_SEARCH => '(class\s*)<(\s*(\w+)\s*)>',
            GESHI_REPLACE => "\${1}",
            GESHI_MODIFIERS => 'i',
            GESHI_BEFORE => '',
            GESHI_AFTER => "< \${3} >"
            ),
        1 => array(
            GESHI_SEARCH => '(array\s*)<(\s*(\w+)\s*)>',
            GESHI_REPLACE => "\${1}",
            GESHI_MODIFIERS => 'i',
            GESHI_BEFORE => '',
            GESHI_AFTER => "< \${3} >"
            )
        ),
    'STRICT_MODE_APPLIES' => GESHI_NEVER,
    'SCRIPT_DELIMITERS' => array(
        ),
    'HIGHLIGHT_STRICT_BLOCK' => array(
        ),
    'PARSER_CONTROL' => array(
        'KEYWORDS' => array(
            10 => array(
                'DISALLOWED_BEFORE' => '(?<!<)(?=DOT>)'
                )
            )
        )
);
