95 lines
32 KiB
JavaScript
95 lines
32 KiB
JavaScript
|
module.exports = function(hljs) {
|
||
|
var allCommands = ['!', '-', '+', '!=', '%', '&&', '*', '/', '=', '==', '>', '>=', '<', '<=', 'or', 'plus', '^', ':', '>>', 'abs', 'accTime', 'acos', 'action', 'actionKeys', 'actionKeysImages', 'actionKeysNames', 'actionKeysNamesArray', 'actionName', 'activateAddons', 'activatedAddons', 'activateKey', 'addAction', 'addBackpack', 'addBackpackCargo', 'addBackpackCargoGlobal', 'addBackpackGlobal', 'addCamShake', 'addCuratorAddons', 'addCuratorCameraArea', 'addCuratorEditableObjects', 'addCuratorEditingArea', 'addCuratorPoints', 'addEditorObject', 'addEventHandler', 'addGoggles', 'addGroupIcon', 'addHandgunItem', 'addHeadgear', 'addItem', 'addItemCargo', 'addItemCargoGlobal', 'addItemPool', 'addItemToBackpack', 'addItemToUniform', 'addItemToVest', 'addLiveStats', 'addMagazine', 'addMagazine array', 'addMagazineAmmoCargo', 'addMagazineCargo', 'addMagazineCargoGlobal', 'addMagazineGlobal', 'addMagazinePool', 'addMagazines', 'addMagazineTurret', 'addMenu', 'addMenuItem', 'addMissionEventHandler', 'addMPEventHandler', 'addMusicEventHandler', 'addPrimaryWeaponItem', 'addPublicVariableEventHandler', 'addRating', 'addResources', 'addScore', 'addScoreSide', 'addSecondaryWeaponItem', 'addSwitchableUnit', 'addTeamMember', 'addToRemainsCollector', 'addUniform', 'addVehicle', 'addVest', 'addWaypoint', 'addWeapon', 'addWeaponCargo', 'addWeaponCargoGlobal', 'addWeaponGlobal', 'addWeaponPool', 'addWeaponTurret', 'agent', 'agents', 'AGLToASL', 'aimedAtTarget', 'aimPos', 'airDensityRTD', 'airportSide', 'AISFinishHeal', 'alive', 'allControls', 'allCurators', 'allDead', 'allDeadMen', 'allDisplays', 'allGroups', 'allMapMarkers', 'allMines', 'allMissionObjects', 'allow3DMode', 'allowCrewInImmobile', 'allowCuratorLogicIgnoreAreas', 'allowDamage', 'allowDammage', 'allowFileOperations', 'allowFleeing', 'allowGetIn', 'allPlayers', 'allSites', 'allTurrets', 'allUnits', 'allUnitsUAV', 'allVariables', 'ammo', 'and', 'animate', 'animateDoor', 'animationPhase', 'animationState', 'append', 'armoryPoints', 'arrayIntersect', 'asin', 'ASLToAGL', 'ASLToATL', 'assert', 'assignAsCargo', 'assignAsCargoIndex', 'assignAsCommander', 'assignAsDriver', 'assignAsGunner', 'assignAsTurret', 'assignCurator', 'assignedCargo', 'assignedCommander', 'assignedDriver', 'assignedGunner', 'assignedItems', 'assignedTarget', 'assignedTeam', 'assignedVehicle', 'assignedVehicleRole', 'assignItem', 'assignTeam', 'assignToAirport', 'atan', 'atan2', 'atg', 'ATLToASL', 'attachedObject', 'attachedObjects', 'attachedTo', 'attachObject', 'attachTo', 'attackEnabled', 'backpack', 'backpackCargo', 'backpackContainer', 'backpackItems', 'backpackMagazines', 'backpackSpaceFor', 'behaviour', 'benchmark', 'binocular', 'blufor', 'boundingBox', 'boundingBoxReal', 'boundingCenter', 'breakOut', 'breakTo', 'briefingName', 'buildingExit', 'buildingPos', 'buttonAction', 'buttonSetAction', 'cadetMode', 'call', 'callExtension', 'camCommand', 'camCommit', 'camCommitPrepared', 'camCommitted', 'camConstuctionSetParams', 'camCreate', 'camDestroy', 'cameraEffect', 'cameraEffectEnableHUD', 'cameraInterest', 'cameraOn', 'cameraView', 'campaignConfigFile', 'camPreload', 'camPreloaded', 'camPrepareBank', 'camPrepareDir', 'camPrepareDive', 'camPrepareFocus', 'camPrepareFov', 'camPrepareFovRange', 'camPreparePos', 'camPrepareRelPos', 'camPrepareTarget', 'camSetBank', 'camSetDir', 'camSetDive', 'camSetFocus', 'camSetFov', 'camSetFovRange', 'camSetPos', 'camSetRelPos', 'camSetTarget', 'camTarget', 'camUseNVG', 'canAdd', 'canAddItemToBackpack', 'canAddItemToUniform', 'canAddItemToVest', 'cancelSimpleTaskDestination', 'canFire', 'canMove', 'canSlingLoad', 'canStand', 'canUnloadInCombat', 'captive', 'captiveNum', 'case', 'catch', 'cbChecked', 'cbSetChecked', 'ceil', 'cheatsEnabled', 'checkAIFeature', 'civilian', 'className', 'clearAllItemsFromBackpack', 'clearBackpackCargo', 'clearBackpackCargoGlobal', 'clearGroupIcons', 'clearItemCargo', 'clearItemCargoGlobal', 'clearItemPool', 'clearMagazineCargo', 'clearMagazineCargoGlobal', 'clearMagazinePool', 'clearOverlay', 'clearRadio', 'clearWeaponCargo', 'clearWeaponCargoGlob
|
||
|
var control = ['case', 'catch', 'default', 'do', 'else', 'exit', 'exitWith|5', 'for', 'forEach', 'from', 'if', 'switch', 'then', 'throw', 'to', 'try', 'while', 'with'];
|
||
|
var operators = ['!', '-', '+', '!=', '%', '&&', '*', '/', '=', '==', '>', '>=', '<', '<=', '^', ':', '>>'];
|
||
|
var specials = ['_forEachIndex|10', '_this|10', '_x|10'];
|
||
|
var literals = ['true', 'false', 'nil'];
|
||
|
var builtins = allCommands.filter(function (command) {
|
||
|
return control.indexOf(command) == -1 &&
|
||
|
literals.indexOf(command) == -1 &&
|
||
|
operators.indexOf(command) == -1;
|
||
|
});
|
||
|
//Note: operators will not be treated as builtins due to the lexeme rules
|
||
|
builtins = builtins.concat(specials);
|
||
|
|
||
|
// In SQF strings, quotes matching the start are escaped by adding a consecutive.
|
||
|
// Example of single escaped quotes: " "" " and ' '' '.
|
||
|
var STRINGS = {
|
||
|
className: 'string',
|
||
|
relevance: 0,
|
||
|
variants: [
|
||
|
{
|
||
|
begin: '"',
|
||
|
end: '"',
|
||
|
contains: [{begin: '""'}]
|
||
|
},
|
||
|
{
|
||
|
begin: '\'',
|
||
|
end: '\'',
|
||
|
contains: [{begin: '\'\''}]
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
|
||
|
var NUMBERS = {
|
||
|
className: 'number',
|
||
|
begin: hljs.NUMBER_RE,
|
||
|
relevance: 0
|
||
|
};
|
||
|
|
||
|
// Preprocessor definitions borrowed from C++
|
||
|
var PREPROCESSOR_STRINGS = {
|
||
|
className: 'string',
|
||
|
variants: [
|
||
|
hljs.QUOTE_STRING_MODE,
|
||
|
{
|
||
|
begin: '\'\\\\?.', end: '\'',
|
||
|
illegal: '.'
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
|
||
|
var PREPROCESSOR = {
|
||
|
className: 'preprocessor',
|
||
|
begin: '#', end: '$',
|
||
|
keywords: 'if else elif endif define undef warning error line ' +
|
||
|
'pragma ifdef ifndef',
|
||
|
contains: [
|
||
|
{
|
||
|
begin: /\\\n/, relevance: 0
|
||
|
},
|
||
|
{
|
||
|
beginKeywords: 'include', end: '$',
|
||
|
contains: [
|
||
|
PREPROCESSOR_STRINGS,
|
||
|
{
|
||
|
className: 'string',
|
||
|
begin: '<', end: '>',
|
||
|
illegal: '\\n',
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
PREPROCESSOR_STRINGS,
|
||
|
NUMBERS,
|
||
|
hljs.C_LINE_COMMENT_MODE,
|
||
|
hljs.C_BLOCK_COMMENT_MODE
|
||
|
]
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
aliases: ['sqf'],
|
||
|
case_insensitive: true,
|
||
|
keywords: {
|
||
|
keyword: control.join(' '),
|
||
|
built_in: builtins.join(' '),
|
||
|
literal: literals.join(' ')
|
||
|
},
|
||
|
contains: [
|
||
|
hljs.C_LINE_COMMENT_MODE,
|
||
|
hljs.C_BLOCK_COMMENT_MODE,
|
||
|
NUMBERS,
|
||
|
STRINGS,
|
||
|
PREPROCESSOR
|
||
|
]
|
||
|
};
|
||
|
};
|