LSL posting tool for community.secondlife.com

Add or remove colors for LSL code in pre blocks

当前为 2015-03-13 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name LSL posting tool for community.secondlife.com
  3. // @namespace http://sites.google.com/site/cerisesorbet/
  4. // @description Add or remove colors for LSL code in pre blocks
  5. // @include http://community.secondlife.com/*
  6. // @include https://community.secondlife.com/*
  7. // @version 20150312
  8. // ==/UserScript==
  9.  
  10. /*
  11. ©2011 Cerise Sorbet. This work is licensed under a Creative Commons
  12. Attribution-ShareAlike 3.0 United States License. For details see
  13. http://creativecommons.org/licenses/by-sa/3.0/us
  14. */
  15.  
  16. /*
  17. --- CHANGES ---
  18. 2011-05-15 Temporarily remove wrapping fix because the new editor does not like it.
  19. 2011-04-17 llGetEnv and prerelease functions, plus related constants
  20. 2011-04-17 special case reserved words print, event; special highlights for jump, @, default, state; typos
  21. 2011-04-16 move decimal ints to end of list, to capture floats w/trailing period
  22. ---------------
  23. */
  24.  
  25. // Maybe set 'other' and 'word' to '' to save
  26. // more space.
  27. var lslColors = {
  28. comment: '#C7622B', // burnt orange
  29. bad: '#FF0000', // bright red
  30. number: '#6666FF', // light bright blue
  31. string: '#008888', // turquoise blue
  32. type: '#339933', // mid green
  33. keyword: '#0000CC', // medium blue
  34. state: '#660099', // deep violet
  35. statename: '#BF00FF', // bright purple
  36. jump: '#0892D0', // deep electric blue
  37. constant: '#CC0099', // pinkish magenta
  38. word: '#555555', // 33% gray
  39. punctuation: '', // picked up by div color
  40. llfunction: '#A8090D', // Ferrari red
  41. other: ''
  42. };
  43.  
  44. // I double dog dare you to say this ten times fast.
  45. var lslTokens = {
  46. comment: /^(\/\/(?:.|[\r\n]*\s*\/\/)*|\/\*(?:.|[\r\n])*?\*\/)/,
  47. bad: /^\/\*(?:.|[\r\n])*?$/, // dangling /*
  48. number: /^(?:0[xX][a-fA-F\d]+|\d+[Ee][+-]?\d+|\d*\.\d+(?:[Ee][+-]?\d+)?[fF]?|^\d+\.\d*(?:[Ee][+-]?\d+)?[fF]?|\d+)/,
  49. string: /^\"(?:\\.|[^\\\"])*\"/,
  50. punctuation: /^(?:\+\+|--|\+=|-=|\*=|\/=|%=|&&|\|\||<<|>>|==|\!=|>=|<=|;|\{|\}|,|=|\(|\)|-|\+|\*|\/|%|:|>|<|\]|\[|&|\||\^|~|\!)/,
  51. word: /^([a-zA-Z_]\w*|@)/,
  52. space: /^\s+/
  53. };
  54.  
  55. // Second pass matches for lslTokens['word']
  56. var lslWords = {
  57. bad: ['event', 'print'],
  58. statename: ['default', 'state'],
  59. jump: ['jump', '@'],
  60. type: ['integer', 'float', 'string', 'key', 'vector', 'quaternion', 'rotation', 'list'],
  61. keyword: ['return', 'if', 'else', 'for', 'do', 'while'],
  62. state: [
  63. 'state_entry', 'state_exit', 'touch_start', 'touch', 'touch_end', 'collision_start', 'collision',
  64. 'collision_end', 'land_collision_start', 'land_collision', 'land_collision_end', 'timer', 'listen',
  65. 'sensor', 'no_sensor', 'control', 'at_target', 'not_at_target', 'at_rot_target',
  66. 'not_at_rot_target', 'money', 'email', 'run_time_permissions', 'changed', 'attach', 'dataserver',
  67. 'moving_start', 'moving_end', 'link_message', 'on_rez', 'object_rez', 'remote_data',
  68. 'http_response', 'http_request'
  69. ],
  70. // The SL editor colors constants differently by type, but this is already big enough.
  71. constant: [
  72. 'TRUE', 'FALSE',
  73. 'STATUS_PHYSICS', 'STATUS_ROTATE_X', 'STATUS_ROTATE_Y', 'STATUS_ROTATE_Z', 'STATUS_PHANTOM',
  74. 'STATUS_SANDBOX', 'STATUS_BLOCK_GRAB', 'STATUS_DIE_AT_EDGE', 'STATUS_RETURN_AT_EDGE',
  75. 'STATUS_CAST_SHADOWS',
  76. 'AGENT_FLYING', 'AGENT_ATTACHMENTS', 'AGENT_SCRIPTED', 'AGENT_MOUSELOOK', 'AGENT_SITTING',
  77. 'AGENT_ON_OBJECT', 'AGENT_AWAY', 'AGENT_WALKING', 'AGENT_IN_AIR', 'AGENT_TYPING',
  78. 'AGENT_CROUCHING', 'AGENT_BUSY', 'AGENT_ALWAYS_RUN', 'AGENT_AUTOPILOT',
  79. 'CAMERA_PITCH', 'CAMERA_FOCUS_OFFSET', 'CAMERA_POSITION_LAG', 'CAMERA_FOCUS_LAG', 'CAMERA_DISTANCE',
  80. 'CAMERA_BEHINDNESS_ANGLE', 'CAMERA_BEHINDNESS_LAG', 'CAMERA_POSITION_THRESHOLD', 'CAMERA_FOCUS_THRESHOLD',
  81. 'CAMERA_ACTIVE', 'CAMERA_POSITION', 'CAMERA_FOCUS', 'CAMERA_POSITION_LOCKED', 'CAMERA_FOCUS_LOCKED',
  82. 'ANIM_ON', 'LOOP', 'REVERSE', 'PING_PONG', 'SMOOTH', 'ROTATE', 'SCALE',
  83. 'ALL_SIDES', 'LINK_ROOT', 'LINK_SET', 'LINK_ALL_OTHERS', 'LINK_ALL_CHILDREN', 'LINK_THIS',
  84. 'AGENT', 'ACTIVE', 'PASSIVE', 'SCRIPTED',
  85. 'CONTROL_FWD', 'CONTROL_BACK', 'CONTROL_LEFT', 'CONTROL_RIGHT', 'CONTROL_ROT_LEFT', 'CONTROL_ROT_RIGHT',
  86. 'CONTROL_UP', 'CONTROL_DOWN', 'CONTROL_LBUTTON', 'CONTROL_ML_LBUTTON',
  87. 'PERMISSION_DEBIT', 'PERMISSION_TAKE_CONTROLS', 'PERMISSION_REMAP_CONTROLS',
  88. 'PERMISSION_TRIGGER_ANIMATION', 'PERMISSION_ATTACH', 'PERMISSION_RELEASE_OWNERSHIP',
  89. 'PERMISSION_CHANGE_LINKS', 'PERMISSION_CHANGE_JOINTS', 'PERMISSION_CHANGE_PERMISSIONS',
  90. 'PERMISSION_TRACK_CAMERA', 'PERMISSION_CONTROL_CAMERA',
  91. 'INVENTORY_TEXTURE', 'INVENTORY_SOUND', 'INVENTORY_OBJECT', 'INVENTORY_SCRIPT', 'INVENTORY_LANDMARK',
  92. 'INVENTORY_CLOTHING', 'INVENTORY_NOTECARD', 'INVENTORY_BODYPART', 'INVENTORY_ANIMATION',
  93. 'INVENTORY_GESTURE', 'INVENTORY_ALL', 'INVENTORY_NONE',
  94. 'CHANGED_INVENTORY', 'CHANGED_COLOR', 'CHANGED_SHAPE', 'CHANGED_SCALE', 'CHANGED_TEXTURE', 'CHANGED_LINK',
  95. 'CHANGED_ALLOWED_DROP', 'CHANGED_OWNER', 'CHANGED_REGION', 'CHANGED_TELEPORT', 'CHANGED_REGION_START',
  96. 'CHANGED_MEDIA',
  97. 'OBJECT_UNKNOWN_DETAIL', 'OBJECT_NAME', 'OBJECT_DESC', 'OBJECT_POS', 'OBJECT_ROT', 'OBJECT_VELOCITY',
  98. 'OBJECT_OWNER', 'OBJECT_GROUP', 'OBJECT_CREATOR',
  99. 'TYPE_INTEGER', 'TYPE_FLOAT', 'TYPE_STRING', 'TYPE_KEY', 'TYPE_VECTOR', 'TYPE_ROTATION', 'TYPE_INVALID',
  100. 'NULL_KEY', 'EOF',
  101. 'URL_REQUEST_GRANTED', 'URL_REQUEST_DENIED',
  102. 'PI', 'TWO_PI', 'PI_BY_TWO', 'DEG_TO_RAD', 'RAD_TO_DEG', 'SQRT2',
  103. 'DEBUG_CHANNEL', 'PUBLIC_CHANNEL',
  104. 'ZERO_VECTOR', 'ZERO_ROTATION',
  105. 'ATTACH_CHEST', 'ATTACH_HEAD', 'ATTACH_LSHOULDER', 'ATTACH_RSHOULDER', 'ATTACH_LHAND', 'ATTACH_RHAND',
  106. 'ATTACH_LFOOT', 'ATTACH_RFOOT', 'ATTACH_BACK', 'ATTACH_PELVIS', 'ATTACH_MOUTH', 'ATTACH_CHIN',
  107. 'ATTACH_LEAR', 'ATTACH_REAR','ATTACH_LEYE', 'ATTACH_REYE', 'ATTACH_NOSE', 'ATTACH_RUARM', 'ATTACH_RLARM',
  108. 'ATTACH_LUARM', 'ATTACH_LLARM', 'ATTACH_RHIP', 'ATTACH_RULEG', 'ATTACH_RLLEG', 'ATTACH_LHIP',
  109. 'ATTACH_LULEG', 'ATTACH_LLLEG', 'ATTACH_BELLY', 'ATTACH_RPEC', 'ATTACH_LPEC', 'ATTACH_HUD_CENTER_2',
  110. 'ATTACH_HUD_TOP_RIGHT', 'ATTACH_HUD_TOP_CENTER', 'ATTACH_HUD_TOP_LEFT', 'ATTACH_HUD_CENTER_1',
  111. 'ATTACH_HUD_BOTTOM_LEFT', 'ATTACH_HUD_BOTTOM', 'ATTACH_HUD_BOTTOM_RIGHT',
  112. 'LAND_LEVEL', 'LAND_RAISE', 'LAND_LOWER', 'LAND_SMOOTH', 'LAND_NOISE', 'LAND_REVERT',
  113. 'LAND_SMALL_BRUSH', 'LAND_MEDIUM_BRUSH', 'LAND_LARGE_BRUSH',
  114. 'DATA_ONLINE', 'DATA_NAME', 'DATA_BORN', 'DATA_RATING', 'DATA_SIM_POS', 'DATA_SIM_STATUS',
  115. 'DATA_SIM_RATING', 'DATA_PAYINFO',
  116. 'PAYMENT_INFO_ON_FILE', 'PAYMENT_INFO_USED',
  117. 'REMOTE_DATA_CHANNEL', 'REMOTE_DATA_REQUEST', 'REMOTE_DATA_REPLY',
  118. 'PSYS_PART_FLAGS', 'PSYS_PART_START_COLOR', 'PSYS_PART_START_ALPHA', 'PSYS_PART_START_SCALE',
  119. 'PSYS_PART_END_COLOR', 'PSYS_PART_END_ALPHA', 'PSYS_PART_END_SCALE', 'PSYS_PART_MAX_AGE',
  120. 'PSYS_PART_WIND_MASK', 'PSYS_PART_INTERP_COLOR_MASK', 'PSYS_PART_INTERP_SCALE_MASK',
  121. 'PSYS_PART_BOUNCE_MASK', 'PSYS_PART_FOLLOW_SRC_MASK', 'PSYS_PART_FOLLOW_VELOCITY_MASK',
  122. 'PSYS_PART_TARGET_POS_MASK', 'PSYS_PART_EMISSIVE_MASK', 'PSYS_PART_TARGET_LINEAR_MASK',
  123. 'PSYS_SRC_MAX_AGE', 'PSYS_SRC_PATTERN', 'PSYS_SRC_INNERANGLE', 'PSYS_SRC_OUTERANGLE',
  124. 'PSYS_SRC_ANGLE_BEGIN', 'PSYS_SRC_ANGLE_END', 'PSYS_SRC_BURST_RATE', 'PSYS_SRC_BURST_PART_COUNT',
  125. 'PSYS_SRC_BURST_RADIUS', 'PSYS_SRC_BURST_SPEED_MIN', 'PSYS_SRC_BURST_SPEED_MAX', 'PSYS_SRC_ACCEL',
  126. 'PSYS_SRC_TEXTURE', 'PSYS_SRC_TARGET_KEY', 'PSYS_SRC_OMEGA',
  127. 'PSYS_SRC_OBJ_REL_MASK',
  128. 'PSYS_SRC_PATTERN_DROP', 'PSYS_SRC_PATTERN_EXPLODE', 'PSYS_SRC_PATTERN_ANGLE',
  129. 'PSYS_SRC_PATTERN_ANGLE_CONE', 'PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY',
  130. 'VEHICLE_TYPE_NONE', 'VEHICLE_TYPE_SLED', 'VEHICLE_TYPE_CAR', 'VEHICLE_TYPE_BOAT',
  131. 'VEHICLE_TYPE_AIRPLANE', 'VEHICLE_TYPE_BALLOON',
  132. 'VEHICLE_REFERENCE_FRAME', 'VEHICLE_LINEAR_FRICTION_TIMESCALE', 'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
  133. 'VEHICLE_LINEAR_MOTOR_DIRECTION', 'VEHICLE_ANGULAR_MOTOR_DIRECTION', 'VEHICLE_LINEAR_MOTOR_OFFSET',
  134. 'VEHICLE_HOVER_HEIGHT', 'VEHICLE_HOVER_EFFICIENCY', 'VEHICLE_HOVER_TIMESCALE', 'VEHICLE_BUOYANCY',
  135. 'VEHICLE_LINEAR_DEFLECTION_EFFICIENCY', 'VEHICLE_LINEAR_DEFLECTION_TIMESCALE',
  136. 'VEHICLE_LINEAR_MOTOR_TIMESCALE', 'VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE',
  137. 'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY', 'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
  138. 'VEHICLE_ANGULAR_MOTOR_TIMESCALE', 'VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE',
  139. 'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY', 'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
  140. 'VEHICLE_BANKING_EFFICIENCY', 'VEHICLE_BANKING_MIX', 'VEHICLE_BANKING_TIMESCALE',
  141. 'VEHICLE_FLAG_NO_FLY_UP', 'VEHICLE_FLAG_NO_DEFLECTION_UP', 'VEHICLE_FLAG_LIMIT_ROLL_ONLY',
  142. 'VEHICLE_FLAG_HOVER_WATER_ONLY', 'VEHICLE_FLAG_HOVER_TERRAIN_ONLY', 'VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT',
  143. 'VEHICLE_FLAG_HOVER_UP_ONLY', 'VEHICLE_FLAG_LIMIT_MOTOR_UP', 'VEHICLE_FLAG_MOUSELOOK_STEER',
  144. 'VEHICLE_FLAG_MOUSELOOK_BANK', 'VEHICLE_FLAG_CAMERA_DECOUPLED',
  145. 'PRIM_TYPE', 'PRIM_MATERIAL', 'PRIM_PHYSICS', 'PRIM_FLEXIBLE', 'PRIM_POINT_LIGHT', 'PRIM_TEMP_ON_REZ',
  146. 'PRIM_PHANTOM', 'PRIM_CAST_SHADOWS', 'PRIM_POSITION', 'PRIM_SIZE', 'PRIM_ROTATION', 'PRIM_TEXTURE',
  147. 'PRIM_COLOR', 'PRIM_BUMP_SHINY', 'PRIM_FULLBRIGHT', 'PRIM_TEXGEN', 'PRIM_GLOW',
  148. 'PRIM_TYPE_BOX', 'PRIM_TYPE_CYLINDER', 'PRIM_TYPE_PRISM', 'PRIM_TYPE_SPHERE', 'PRIM_TYPE_TORUS',
  149. 'PRIM_TYPE_TUBE', 'PRIM_TYPE_RING', 'PRIM_TYPE_SCULPT',
  150. 'PRIM_HOLE_DEFAULT', 'PRIM_HOLE_CIRCLE', 'PRIM_HOLE_SQUARE', 'PRIM_HOLE_TRIANGLE',
  151. 'PRIM_MATERIAL_STONE', 'PRIM_MATERIAL_METAL', 'PRIM_MATERIAL_GLASS', 'PRIM_MATERIAL_WOOD',
  152. 'PRIM_MATERIAL_FLESH', 'PRIM_MATERIAL_PLASTIC', 'PRIM_MATERIAL_RUBBER', 'PRIM_MATERIAL_LIGHT',
  153. 'PRIM_SHINY_NONE', 'PRIM_SHINY_LOW', 'PRIM_SHINY_MEDIUM', 'PRIM_SHINY_HIGH',
  154. 'PRIM_BUMP_NONE', 'PRIM_BUMP_BRIGHT', 'PRIM_BUMP_DARK', 'PRIM_BUMP_WOOD', 'PRIM_BUMP_BARK',
  155. 'PRIM_BUMP_BRICKS', 'PRIM_BUMP_CHECKER', 'PRIM_BUMP_CONCRETE', 'PRIM_BUMP_TILE', 'PRIM_BUMP_STONE',
  156. 'PRIM_BUMP_DISKS', 'PRIM_BUMP_GRAVEL', 'PRIM_BUMP_BLOBS', 'PRIM_BUMP_SIDING', 'PRIM_BUMP_LARGETILE',
  157. 'PRIM_BUMP_STUCCO', 'PRIM_BUMP_SUCTION', 'PRIM_BUMP_WEAVE',
  158. 'PRIM_TEXGEN_DEFAULT', 'PRIM_TEXGEN_PLANAR',
  159. 'PRIM_SCULPT_TYPE_SPHERE', 'PRIM_SCULPT_TYPE_TORUS', 'PRIM_SCULPT_TYPE_PLANE',
  160. 'PRIM_SCULPT_TYPE_CYLINDER', 'PRIM_SCULPT_TYPE_MASK', 'PRIM_SCULPT_FLAG_MIRROR',
  161. 'PRIM_SCULPT_FLAG_INVERT', 'PRIM_DESC', 'PRIM_TEXT', 'PRIM_NAME',
  162. 'MASK_BASE', 'MASK_OWNER', 'MASK_GROUP', 'MASK_EVERYONE', 'MASK_NEXT',
  163. 'PERM_TRANSFER', 'PERM_MODIFY', 'PERM_COPY', 'PERM_MOVE', 'PERM_ALL',
  164. 'PARCEL_MEDIA_COMMAND_STOP', 'PARCEL_MEDIA_COMMAND_PAUSE', 'PARCEL_MEDIA_COMMAND_PLAY',
  165. 'PARCEL_MEDIA_COMMAND_LOOP', 'PARCEL_MEDIA_COMMAND_TEXTURE', 'PARCEL_MEDIA_COMMAND_URL',
  166. 'PARCEL_MEDIA_COMMAND_TIME', 'PARCEL_MEDIA_COMMAND_AGENT', 'PARCEL_MEDIA_COMMAND_UNLOAD',
  167. 'PARCEL_MEDIA_COMMAND_AUTO_ALIGN', 'PARCEL_MEDIA_COMMAND_TYPE', 'PARCEL_MEDIA_COMMAND_SIZE',
  168. 'PARCEL_MEDIA_COMMAND_DESC', 'PARCEL_MEDIA_COMMAND_LOOP_SET',
  169. 'LIST_STAT_MAX', 'LIST_STAT_MIN', 'LIST_STAT_MEAN', 'LIST_STAT_MEDIAN', 'LIST_STAT_STD_DEV',
  170. 'LIST_STAT_SUM', 'LIST_STAT_SUM_SQUARES', 'LIST_STAT_NUM_COUNT', 'LIST_STAT_GEOMETRIC_MEAN',
  171. 'LIST_STAT_RANGE',
  172. 'PAY_HIDE', 'PAY_DEFAULT',
  173. 'PARCEL_FLAG_ALLOW_FLY', 'PARCEL_FLAG_ALLOW_GROUP_SCRIPTS', 'PARCEL_FLAG_ALLOW_SCRIPTS',
  174. 'PARCEL_FLAG_ALLOW_LANDMARK', 'PARCEL_FLAG_ALLOW_TERRAFORM', 'PARCEL_FLAG_ALLOW_DAMAGE',
  175. 'PARCEL_FLAG_ALLOW_CREATE_OBJECTS', 'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
  176. 'PARCEL_FLAG_USE_ACCESS_GROUP', 'PARCEL_FLAG_USE_ACCESS_LIST', 'PARCEL_FLAG_USE_BAN_LIST',
  177. 'PARCEL_FLAG_USE_LAND_PASS_LIST', 'PARCEL_FLAG_LOCAL_SOUND_ONLY', 'PARCEL_FLAG_RESTRICT_PUSHOBJECT',
  178. 'PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY', 'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
  179. 'REGION_FLAG_ALLOW_DAMAGE', 'REGION_FLAG_FIXED_SUN', 'REGION_FLAG_BLOCK_TERRAFORM',
  180. 'REGION_FLAG_SANDBOX', 'REGION_FLAG_DISABLE_COLLISIONS', 'REGION_FLAG_DISABLE_PHYSICS',
  181. 'REGION_FLAG_BLOCK_FLY', 'REGION_FLAG_ALLOW_DIRECT_TELEPORT', 'REGION_FLAG_RESTRICT_PUSHOBJECT',
  182. 'HTTP_METHOD', 'HTTP_MIMETYPE', 'HTTP_BODY_MAXLENGTH', 'HTTP_BODY_TRUNCATED', 'HTTP_VERIFY_CERT',
  183. 'PARCEL_COUNT_TOTAL', 'PARCEL_COUNT_OWNER', 'PARCEL_COUNT_GROUP', 'PARCEL_COUNT_OTHER',
  184. 'PARCEL_COUNT_SELECTED', 'PARCEL_COUNT_TEMP',
  185. 'PARCEL_DETAILS_NAME', 'PARCEL_DETAILS_DESC', 'PARCEL_DETAILS_OWNER', 'PARCEL_DETAILS_GROUP',
  186. 'PARCEL_DETAILS_AREA',
  187. 'STRING_TRIM_HEAD', 'STRING_TRIM_TAIL', 'STRING_TRIM',
  188. 'CLICK_ACTION_NONE', 'CLICK_ACTION_TOUCH', 'CLICK_ACTION_SIT', 'CLICK_ACTION_BUY', 'CLICK_ACTION_PAY',
  189. 'CLICK_ACTION_OPEN', 'CLICK_ACTION_PLAY', 'CLICK_ACTION_OPEN_MEDIA', 'CLICK_ACTION_ZOOM',
  190. 'TEXTURE_BLANK', 'TEXTURE_DEFAULT', 'TEXTURE_MEDIA', 'TEXTURE_PLYWOOD', 'TEXTURE_TRANSPARENT',
  191. 'TOUCH_INVALID_FACE', 'TOUCH_INVALID_VECTOR', 'TOUCH_INVALID_TEXCOORD',
  192. 'PRIM_MEDIA_ALT_IMAGE_ENABLE', 'PRIM_MEDIA_CONTROLS', 'PRIM_MEDIA_CURRENT_URL', 'PRIM_MEDIA_HOME_URL',
  193. 'PRIM_MEDIA_AUTO_LOOP', 'PRIM_MEDIA_AUTO_PLAY', 'PRIM_MEDIA_AUTO_SCALE', 'PRIM_MEDIA_AUTO_ZOOM',
  194. 'PRIM_MEDIA_FIRST_CLICK_INTERACT', 'PRIM_MEDIA_WIDTH_PIXELS', 'PRIM_MEDIA_HEIGHT_PIXELS',
  195. 'PRIM_MEDIA_WHITELIST_ENABLE', 'PRIM_MEDIA_WHITELIST', 'PRIM_MEDIA_PERMS_INTERACT',
  196. 'PRIM_MEDIA_PERMS_CONTROL', 'PRIM_MEDIA_PARAM_MAX',
  197. 'PRIM_MEDIA_CONTROLS_STANDARD', 'PRIM_MEDIA_CONTROLS_MINI', 'PRIM_MEDIA_PERM_NONE',
  198. 'PRIM_MEDIA_PERM_OWNER', 'PRIM_MEDIA_PERM_GROUP', 'PRIM_MEDIA_PERM_ANYONE',
  199. 'PRIM_MEDIA_MAX_URL_LENGTH', 'PRIM_MEDIA_MAX_WHITELIST_SIZE', 'PRIM_MEDIA_MAX_WHITELIST_COUNT',
  200. 'PRIM_MEDIA_MAX_WIDTH_PIXELS', 'PRIM_MEDIA_MAX_HEIGHT_PIXELS',
  201. 'STATUS_OK', 'STATUS_MALFORMED_PARAMS', 'STATUS_TYPE_MISMATCH', 'STATUS_BOUNDS_ERROR',
  202. 'STATUS_NOT_FOUND', 'STATUS_NOT_SUPPORTED', 'STATUS_INTERNAL_ERROR', 'STATUS_WHITELIST_FAILED',
  203. // functions in development, names could change or they could be dropped.
  204. 'RC_REJECT_TYPES', 'RC_DATA_FLAGS' , 'RC_MAX_HITS' , 'RC_DETECT_PHANTOM',
  205. 'RC_REJECT_AGENTS', 'RC_REJECT_PHYSICAL', 'RC_REJECT_NONPHYSICAL', 'RC_REJECT_LAND',
  206. 'RC_GET_NORMAL', 'RC_GET_ROOT_KEY', 'RC_GET_LINK_NUM' ,'RCERR_SIM_PERF_LOW', 'RCERR_CAST_TIME_EXCEEDED',
  207. 'PROFILE_NONE', 'PROFILE_SCRIPT_MEMORY'
  208. ],
  209. llfunction: [
  210. 'llSin', 'llCos', 'llTan', 'llAtan2', 'llSqrt', 'llPow', 'llAbs', 'llFabs', 'llFrand', 'llFloor',
  211. 'llCeil', 'llRound', 'llVecMag', 'llVecNorm', 'llVecDist', 'llRot2Euler', 'llEuler2Rot', 'llAxes2Rot',
  212. 'llRot2Fwd', 'llRot2Left', 'llRot2Up', 'llRotBetween', 'llWhisper', 'llSay', 'llShout', 'llListen',
  213. 'llListenControl', 'llListenRemove', 'llSensor', 'llSensorRepeat', 'llSensorRemove', 'llDetectedName',
  214. 'llDetectedKey', 'llDetectedOwner', 'llDetectedType', 'llDetectedPos', 'llDetectedVel',
  215. 'llDetectedGrab', 'llDetectedRot', 'llDetectedGroup', 'llDetectedLinkNumber', 'llDie', 'llGround',
  216. 'llCloud', 'llWind', 'llSetStatus', 'llGetStatus', 'llSetScale', 'llGetScale', 'llSetColor',
  217. 'llGetAlpha', 'llSetAlpha', 'llGetColor', 'llSetTexture', 'llScaleTexture', 'llOffsetTexture',
  218. 'llRotateTexture', 'llGetTexture', 'llSetPos', 'llGetPos', 'llGetLocalPos', 'llSetRot', 'llGetRot',
  219. 'llGetLocalRot', 'llSetForce', 'llGetForce', 'llTarget', 'llTargetRemove', 'llRotTarget',
  220. 'llRotTargetRemove', 'llMoveToTarget', 'llStopMoveToTarget', 'llApplyImpulse',
  221. 'llApplyRotationalImpulse', 'llSetTorque', 'llGetTorque', 'llSetForceAndTorque', 'llGetVel',
  222. 'llGetAccel', 'llGetOmega', 'llGetTimeOfDay', 'llGetWallclock', 'llGetTime', 'llResetTime',
  223. 'llGetAndResetTime', 'llSound', 'llPlaySound', 'llLoopSound', 'llLoopSoundMaster', 'llLoopSoundSlave',
  224. 'llPlaySoundSlave', 'llTriggerSound', 'llStopSound', 'llPreloadSound', 'llGetSubString',
  225. 'llDeleteSubString', 'llInsertString', 'llToUpper', 'llToLower', 'llGiveMoney', 'llMakeExplosion',
  226. 'llMakeFountain', 'llMakeSmoke', 'llMakeFire', 'llRezObject', 'llLookAt', 'llStopLookAt',
  227. 'llSetTimerEvent', 'llSleep', 'llGetMass', 'llCollisionFilter', 'llTakeControls', 'llReleaseControls',
  228. 'llAttachToAvatar', 'llDetachFromAvatar', 'llTakeCamera', 'llReleaseCamera', 'llGetOwner',
  229. 'llInstantMessage', 'llEmail', 'llGetNextEmail', 'llGetKey', 'llSetBuoyancy', 'llSetHoverHeight',
  230. 'llStopHover', 'llMinEventDelay', 'llSoundPreload', 'llRotLookAt', 'llStringLength',
  231. 'llStartAnimation', 'llStopAnimation', 'llPointAt', 'llStopPointAt', 'llTargetOmega',
  232. 'llGetStartParameter', 'llGodLikeRezObject', 'llRequestPermissions', 'llGetPermissionsKey',
  233. 'llGetPermissions', 'llGetLinkNumber', 'llSetLinkColor', 'llCreateLink', 'llBreakLink',
  234. 'llBreakAllLinks', 'llGetLinkKey', 'llGetLinkName', 'llGetInventoryNumber', 'llGetInventoryName',
  235. 'llSetScriptState', 'llGetEnergy', 'llGiveInventory', 'llRemoveInventory', 'llSetText', 'llWater',
  236. 'llPassTouches', 'llRequestAgentData', 'llRequestInventoryData', 'llSetDamage', 'llTeleportAgentHome',
  237. 'llModifyLand', 'llCollisionSound', 'llCollisionSprite', 'llGetAnimation', 'llResetScript',
  238. 'llMessageLinked', 'llPushObject', 'llPassCollisions', 'llGetScriptName', 'llGetNumberOfSides',
  239. 'llAxisAngle2Rot', 'llRot2Axis', 'llRot2Angle', 'llAcos', 'llAsin', 'llAngleBetween',
  240. 'llGetInventoryKey', 'llAllowInventoryDrop', 'llGetSunDirection', 'llGetTextureOffset',
  241. 'llGetTextureScale', 'llGetTextureRot', 'llSubStringIndex', 'llGetOwnerKey', 'llGetCenterOfMass',
  242. 'llListSort', 'llGetListLength', 'llList2Integer', 'llList2Float', 'llList2String', 'llList2Key',
  243. 'llList2Vector', 'llList2Rot', 'llList2List', 'llDeleteSubList', 'llGetListEntryType', 'llList2CSV',
  244. 'llCSV2List', 'llListRandomize', 'llList2ListStrided', 'llGetRegionCorner', 'llListInsertList',
  245. 'llListFindList', 'llGetObjectName', 'llSetObjectName', 'llGetDate', 'llEdgeOfWorld', 'llGetAgentInfo',
  246. 'llAdjustSoundVolume', 'llSetSoundQueueing', 'llSetSoundRadius', 'llKey2Name', 'llSetTextureAnim',
  247. 'llTriggerSoundLimited', 'llEjectFromLand', 'llParseString2List', 'llOverMyLand', 'llGetLandOwnerAt',
  248. 'llGetNotecardLine', 'llGetAgentSize', 'llSameGroup', 'llUnSit', 'llGroundSlope', 'llGroundNormal',
  249. 'llGroundContour', 'llGetAttached', 'llGetFreeMemory', 'llGetRegionName', 'llGetRegionTimeDilation',
  250. 'llGetRegionFPS', 'llParticleSystem', 'llGroundRepel', 'llGiveInventoryList', 'llSetVehicleType',
  251. 'llSetVehicleFloatParam', 'llSetVehicleVectorParam', 'llSetVehicleRotationParam', 'llSetVehicleFlags',
  252. 'llRemoveVehicleFlags', 'llSitTarget', 'llAvatarOnSitTarget', 'llAddToLandPassList', 'llSetTouchText',
  253. 'llSetSitText', 'llSetCameraEyeOffset', 'llSetCameraAtOffset', 'llDumpList2String', 'llScriptDanger',
  254. 'llDialog', 'llVolumeDetect', 'llResetOtherScript', 'llGetScriptState', 'llRemoteLoadScript',
  255. 'llSetRemoteScriptAccessPin', 'llRemoteLoadScriptPin', 'llOpenRemoteDataChannel', 'llSendRemoteData',
  256. 'llRemoteDataReply', 'llCloseRemoteDataChannel', 'llMD5String', 'llSetPrimitiveParams',
  257. 'llStringToBase64', 'llBase64ToString', 'llXorBase64Strings', 'llRemoteDataSetRegion', 'llLog10',
  258. 'llLog', 'llGetAnimationList', 'llSetParcelMusicURL', 'llGetRootPosition', 'llGetRootRotation',
  259. 'llGetObjectDesc', 'llSetObjectDesc', 'llGetCreator', 'llGetTimestamp', 'llSetLinkAlpha',
  260. 'llGetNumberOfPrims', 'llGetNumberOfNotecardLines', 'llGetBoundingBox', 'llGetGeometricCenter',
  261. 'llGetPrimitiveParams', 'llIntegerToBase64', 'llBase64ToInteger', 'llGetGMTclock',
  262. 'llGetSimulatorHostname', 'llSetLocalRot', 'llParseStringKeepNulls', 'llRezAtRoot',
  263. 'llGetObjectPermMask', 'llSetObjectPermMask', 'llGetInventoryPermMask', 'llSetInventoryPermMask',
  264. 'llGetInventoryCreator', 'llOwnerSay', 'llRequestSimulatorData', 'llForceMouselook',
  265. 'llGetObjectMass', 'llListReplaceList', 'llLoadURL', 'llParcelMediaCommandList', 'llParcelMediaQuery',
  266. 'llModPow', 'llGetInventoryType', 'llSetPayPrice', 'llGetCameraPos', 'llGetCameraRot', 'llSetPrimURL',
  267. 'llRefreshPrimURL', 'llEscapeURL', 'llUnescapeURL', 'llMapDestination', 'llAddToLandBanList',
  268. 'llRemoveFromLandPassList', 'llRemoveFromLandBanList', 'llSetCameraParams', 'llClearCameraParams',
  269. 'llListStatistics', 'llGetUnixTime', 'llGetParcelFlags', 'llGetRegionFlags',
  270. 'llXorBase64StringsCorrect', 'llHTTPRequest', 'llResetLandBanList', 'llResetLandPassList',
  271. 'llGetObjectPrimCount', 'llGetParcelPrimOwners', 'llGetParcelPrimCount', 'llGetParcelMaxPrims',
  272. 'llGetParcelDetails', 'llSetLinkPrimitiveParams', 'llSetLinkTexture', 'llStringTrim', 'llRegionSay',
  273. 'llGetObjectDetails', 'llSetClickAction', 'llGetRegionAgentCount', 'llTextBox', 'llGetAgentLanguage',
  274. 'llDetectedTouchUV', 'llDetectedTouchFace', 'llDetectedTouchPos',
  275. 'llDetectedTouchNormal', 'llDetectedTouchBinormal', 'llDetectedTouchST', 'llSHA1String',
  276. 'llGetFreeURLs', 'llRequestURL', 'llRequestSecureURL', 'llReleaseURL', 'llHTTPResponse',
  277. 'llGetHTTPHeader', 'llSetPrimMediaParams', 'llGetPrimMediaParams', 'llClearPrimMedia',
  278. 'llSetLinkPrimitiveParamsFast', 'llGetLinkPrimitiveParams', 'llLinkParticleSystem',
  279. 'llSetLinkTextureAnim', 'llGetLinkNumberOfSides', 'llGetUsername', 'llRequestUsername',
  280. 'llGetDisplayName', 'llRequestDisplayName', 'llGetEnv', 'llRegionSayTo',
  281. // functions in development, names could change or they could be dropped.
  282. 'llCastRay', 'llGetSPMaxMemory', 'llScriptProfiler', 'llGetUsedMemory'
  283. ]
  284. };
  285.  
  286.  
  287.  
  288. // Minimal entity escaping, about what Lithium appears to use.
  289. function EscapeHTML(s) {
  290. // Keep /&/ first, else other entities will be mangled
  291. return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  292. }
  293.  
  294.  
  295. // A simplistic tokenizer. Matches with lslToknes, and lslWords
  296. // within 'word' tokens, are wrapped in styled spans per lslColors
  297. function AddColor(s)
  298. {
  299. var t, i, match, lastToken;
  300. var rv = "";
  301. var badWords = lslWords['bad'];
  302. var jumpWords = lslWords['jump'];
  303. var wordColor = lslColors['word'] || '';
  304.  
  305. while(s.length) {
  306. for (t in lslTokens) {
  307. if (match = s.match(lslTokens[t]))
  308. break;
  309. }
  310.  
  311. if (!match) {
  312. match = [s[0]];
  313. t = 'other';
  314. }
  315.  
  316. if (t == 'word') {
  317. var color = wordColor;
  318. if (~badWords.indexOf(match[0]))
  319. color = lslColors['bad'];
  320. else if (~jumpWords.indexOf(lastToken))
  321. color = lslColors['jump'];
  322. else if (lastToken == 'state')
  323. color = lslColors['statename'];
  324. else {
  325. for (wordType in lslWords) {
  326. if (~lslWords[wordType].indexOf(match[0])) {
  327. color = lslColors[wordType];
  328. break;
  329. }
  330. }
  331. }
  332. rv += color ? '<span style="color:' + color + '">' + EscapeHTML(match[0]) + '</span>' : EscapeHTML(match[0]);
  333. }
  334. else
  335. rv += lslColors[t] ? '<span style="color:' + lslColors[t] + '">' + EscapeHTML(match[0]) + '</span>' : EscapeHTML(match[0]);
  336.  
  337. if (!~['space', 'comment'].indexOf(t))
  338. lastToken = match[0];
  339. s = s.substr(match[0].length);
  340. }
  341. return rv;
  342. }
  343.  
  344.  
  345. // Show highlight buttons, only if in TinyMCE mode
  346. function SetButtonVisibility() {
  347. var activeRichTab = document.getElementsByClassName('lia-tabs-active lia-tabs rich-tab');
  348. var buttons = ['cerise-plain-pre-button', 'cerise-lsl-pre-button'];
  349. for (var i in buttons) {
  350. var button = document.getElementById(buttons[i]);
  351. if (button)
  352. button.style.display = activeRichTab.length ? '' : 'none';
  353. }
  354. }
  355.  
  356. function HighlightPre(useColor) {
  357. var mceframe = document.getElementById('tinyMceEditor_ifr');
  358. if (!mceframe)
  359. return;
  360. var mceContent = mceframe.contentDocument;
  361. if (!mceContent)
  362. return;
  363.  
  364. var pre = mceContent.getElementsByTagName('pre');
  365. var k; for (k = 0; k < pre.length; k++) {
  366. var source = 'textContent' in pre[k] ? pre[k].textContent : pre[k].innerText;
  367. if (useColor)
  368. pre[k].innerHTML = /* '<span style="white-space:pre;">' + */ AddColor(source) /* + '</span>' */;
  369. else
  370. pre[k].innerHTML = /* '<span style="white-space:pre;">' + */ EscapeHTML(source) /* + '</span>' */;
  371. }
  372. }
  373.  
  374.  
  375. // Create LSL highlight buttons and install listeners
  376. function MakeButtons() {
  377. var messageEditor = document.getElementById('messageEditor');
  378. if (messageEditor) {
  379. var controls = document.getElementsByClassName('message-editor-controls');
  380. if (controls.length) {
  381. var buttonGroup = controls[0].getElementsByClassName('lia-form-submit lia-button-group');
  382. if (buttonGroup.length) {
  383. var lslButton = document.createElement('span');
  384. lslButton.className = 'lia-button-wrapper lia-button-wrapper-secondary';
  385. lslButton.id = 'cerise-plain-pre-button';
  386. lslButton.innerHTML = '<a class="lia-button lia-button-secondary">- LSL</span>';
  387. buttonGroup[0].appendChild(lslButton);
  388. lslButton.addEventListener('click', function(){HighlightPre(false)}, false);
  389.  
  390. lslButton = document.createElement('span');
  391. lslButton.className = 'lia-button-wrapper lia-button-wrapper-secondary';
  392. lslButton.id = 'cerise-lsl-pre-button';
  393. lslButton.innerHTML = '<a class="lia-button lia-button-secondary">+ LSL</span>';
  394. buttonGroup[0].appendChild(lslButton);
  395. lslButton.addEventListener('click', function(){HighlightPre(true)}, false);
  396.  
  397. SetButtonVisibility();
  398. var tabGroup = document.getElementById('tabgroup');
  399. if (tabGroup)
  400. tabGroup.addEventListener('DOMSubtreeModified', SetButtonVisibility, false);
  401. }
  402. }
  403. }
  404. }
  405.  
  406. MakeButtons();