There are 28 previous versions of this script.
// ==UserScript==
// @name LSL Style
// @namespace http://home.comcast.net/~mailerdaemon/
// @include https://wiki.secondlife.com/*
// @include http://wiki.secondlife.com/*
// @include http://lslwiki.net/lslwiki/wakka.php?wakka=*
// @include http://www.lslwiki.net/lslwiki/wakka.php?wakka=*
// @version 1.3
// ==/UserScript==
if(!GM_addStyle)
GM_addStyle = function(css){
style = document.createElement("style");
style.type = "text/css";
style.innerHTML = css;
document.getElementsByTagName('head')[0].appendChild(style);
return style;
};
var functions = ["LinkParticleSystem", "Request(?:DisplayName|Username)","CastRay"];
var get_funcs = ["Link(?:PrimitiveParams|NumberOfSides)", "Username", "DisplayName","Env"];
var set_funcs = [];
var constants = ["PRIM_(?:TEXT|NAME|DESC|ROT_LOCAL|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS(?:_(?:MINI|STANDARD)|)|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|"+
"FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE|)|PERMS_(?:INTERACT|CONTROL)|PERM_(?:NONE|OWNER|GROUP|ANYONE)))",
"CHANGED_MEDIA", "STATUS_BLOCK_GRAB_OBJECT", "AGENT_BY_(?:LEGACY_|USER)NAME","OBJECT_(?:(?:RUNNING|TOTAL)_SCRIPT_COUNT|SCRIPT_MEMORY)",
"RC(?:_(?:REJECT_(?:AGENTS|TYPES|LAND|PHYSICAL|NONPHYSICAL)|DATA_FLAGS|MAX_HITS|DETECT_PHANTOM)|ERR_(?:SIM_PERF_LOW|CAST_TIME_EXCEEDED))"];
var events = [];
var control = [];
var search = "";
var constfind, constreplace;
var prefixed = false;
if($X("//head/meta[@name='generator' and starts-with(@content,'MediaWiki ')]"))
{
GM_addStyle("table.diff td div {overflow:visible;} pre.code a{ text-decoration:none; }");
GM_addStyle(".pBody { padding:0pt 0.8em 0.3em 0.5em; border:1px solid #AAAAAA; } .portlet h5 {background: transparent;}");
//GM_addStyle("#p-logo a { background-image:url(http://mailerdaemon.home.comcast.net/SL_logo_small.png)!important; }")
prefixs = ["/wiki/","/wiki/Special:Search?search="];
search = "//pre[@class='code' or @class='lsl']";
if((breadcrumbs = $X("//div[@id='contentSub']")))
{
if(!(title = unsafeWindow.realTitleText))
if(title = $X("//div[@id='ReatTitleBanner']/span[@id='RealTitle']"))
title = title.textContent;
if(title)
$Z(".//text()[contains(.,'"+unsafeWindow.wgTitle+"')]",function(r,i,p){
r.data = r.data.replace(unsafeWindow.wgTitle, title);
}, breadcrumbs);
}
//constfind = "&go=Go&search=LSL_";
//constreplace = "?search=";
constants = constants.concat(["PERMISSION_TAKE_CONTROLS", "PSYS_SRC_(?:ACCEL|TEXTURE|MAX_AGE|OMEGA|TARGET_KEY)", "FALSE"])
//functions = functions.concat([])
//get_funcs = get_funcs.concat([])
set_funcs = set_funcs.concat(["Link(?:PrimitiveParamsFast|TextureAnim)", "PrimMediaParams"])
GM_addStyle([//{
".lsl a {font-weight: bold; text-decoration: none;}",
".lsl .imp {font-weight: bold; color: red;}",
".lsl .kw1 {color: rgb(0, 0, 255);}",
".lsl .kw2 {color: rgb(0, 119, 0);}",
".lsl .kw3 {color: rgb(0, 160, 160);}",
".lsl .kw4 {color: rgb(0, 0, 160);}",
".lsl .kw5 {color: rgb(160, 0, 0);}",
".lsl .co1 {color: #FF7700;}",
".lsl .es0 {color: #FF7700;}",
".lsl .br0 {color: #66cc66;}",
".lsl .st0 {color: #00A000;}",
".lsl .nu0 {color: rgb(0, 0, 0);}",
".lsl .me1 {color: #006600;}",
".lsl .me2 {color: #006600;}",
""].join("\n"));//}
}
else if($X("//div[@class='copyright']/a[starts-with(text(),'WakkaWiki ')]"))
{//I don't beleive I'm supporting this crappy wiki and it's very out of date syntax highlighter.
GM_addStyle([//{
// ".code .imp {font-weight: bold; color: red;}",
".code .kw1 {color: rgb(0, 0, 255);}",
".code .kw2 {color: rgb(0, 119, 0);}",
".code .kw3 {color: rgb(0, 160, 160);}",
".code .kw4 {color: rgb(0, 0, 160);}",
".code .kw5 {color: rgb(160, 0, 0);}",
// ".code .co1 {color: #FF7700;}",
// ".code .es0 {color: #FF7700;}",
// ".code .br0 {color: #66cc66;}",
// ".code .st0 {color: #00A000;}",
// ".code .nu0 {color: rgb(0, 0, 0);}",
// ".code .me1 {color: #006600;}",
// ".code .me2 {color: #006600;}",
""].join("\n"));//}
prefixs = ["/lslwiki/wakka.php?wakka=","/lslwiki/wakka.php?wakka=TextSearch&phrase="];
functions = functions.concat(["ModPow","MapDestination","AddToLandBanList","ClearCameraParams","ListStatistics","XorBase64StringsCorrect","HTTP(?:Request|Response)",
"(?:Load|RefreshPrim|Escape|Unescape)URL","RemoveFromLand(?:Pass|Ban)List","ParcelMedia(?:CommandList|Query)", "StringTrim","TextBox",
"RegionSay","DetectedTouch(?:UV|ST|Face|Pos|Normal|Binormal)","SHA1String","ResetLand(?:Ban|Pass)List","Re(?:lease|quest(?:Secure|))URL"]);
get_funcs = get_funcs.concat(["InventoryType","Camera(?:Pos|Rot)","UnixTime","AgentLanguage","Region(?:Flags|AgentCount)","Parcel(?:Flags|PrimCount)","FreeURLs",
"HTTPHeader","Object(?:Details|PrimCount)",]);
set_funcs = set_funcs.concat(["PayPrice","Prim(?:URL|MediaParams)","CameraParams","ClickAction","Link(?:PrimitiveParams(?:Fast|)|Texture(?:Anim|))"]);
constants = constants.concat(["PARCEL_FLAG_(?:"+["USE_(?:ACCESS_GROUP|(?:ACCESS|BAN|LAND_PASS)_LIST)", "LOCAL_SOUND_ONLY", "RESTRICT_PUSHOBJECT",
"ALLOW_(?:FLY|(?:GROUP_|)SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|(?:CREATE_|GROUP_|)OBJECTS|(?:ALL|GROUP)_OBJECT_ENTRY)"].join("|")+")",
"REGION_FLAG_(?:"+["ALLOW_(?:DAMAGE|DIRECT_TELEPORT)", "DISABLE_(?:COLLISIONS|PHYSICS)", "FIXED_SUN", "BLOCK_TERRAFORM","SANDBOX",
"BLOCK_FLY","RESTRICT_PUSHOBJECT"].join("|")+")", "CAMERA_(?:"+["POSITION(?:|_(?:L(?:AG|OCKED)|THRESHOLD))","PITCH",
"FOCUS(?:|_(?:L(?:AG|OCKED)|OFFSET|THRESHOLD))","BEHINDNESS_(?:ANGLE|LAG)", "DISTANCE", "ACTIVE"].join("|")+")", "PAY_(?:HIDE|DEFAULT)",
"LIST_STAT_(?:RANGE|M(?:IN|AX)|(?:|GEOMETRIC_)ME(?:AN|DIAN)|S(?:TD_DEV|UM(?:|_SQUARES))|NUM_COUNT)", "INVENTORY_NONE",
"HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|VERIFY_CERT)", "PERMISSION_(?:TRACK|CONTROL)_CAMERA",
"PARCEL_MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP(?:_SET|)|T(?:EXTURE|IME|YPE)|AGENT|U(?:RL|NLOAD)|AUTO_ALIGN|SIZE|DESC)",
"OBJECT_(?:NAME|DESC|POS|ROT|VELOCITY|OWNER|CREATOR|GROUP)", "TEXTURE_(?:DEFAULT|TRANSPARENT|PLYWOOD|BLANK|MEDIA)",
"PRIM_(?:TYPE_SCULPT|FULLBRIGHT|TEXGEN|GLOW|SCULPT_TYPE_(?:SPHERE|TORUS|CYLINDER|PLANE))", "STRING_TRIM(?:_(?:HEAD|TAIL)|)",
"TOUCH_INVALID_(?:FACE|TEXCOORD|VECTOR)", "URL_REQUEST_(?:GRANTED|DENIED)","CHANGED_REGION_START"]);
events = events.concat(["http_request", "http_response"]);
search = "//div[@class='code']/pre";
constfind = "?wakka=TextSearch?phrase=";
constreplace = "?wakka=TextSearch&phrase=";
}
if(get_funcs.length) functions = functions.concat("Get(?:"+get_funcs.join("|")+")");
if(set_funcs.length) functions = functions.concat("Set(?:"+set_funcs.join("|")+")");
const types = [ "integer", "float", "string", "key", "vector", "rotation", "quaternion", "list" ];
//*
function generate(c,v,r){return {r:r, c:c, v:v, toString: function(){return this.r;}};}
var groups = [generate("nu0", -1, "(0[xX][0-9a-fA-F]+|\\.[0-9]*[Ee][0-9]*|[0-9]+[Ee][0-9]*)")];
if(control.length) groups.push(generate("kw1", 0, "("+control.join("|")+")"));
if(types.length) groups.push(generate("kw2", 0, "("+types.join("|")+")"));
if(events.length) groups.push(generate("kw3", 0, "("+events.join("|")+")"));
if(constants.length) groups.push(generate("kw4", 1, "("+constants.join("|")+")"));
if(functions.length) groups.push(generate("kw5", 0, "(ll(?:"+functions.join("|")+"))"));
const gl = groups.length;
var missed = new RegExp("^(|[\\W\\w]*?\\W)(?:"+groups/*.map(function(f){return f.r;})*/.join("|")+")([\\W][\\W\\w]*|)$");
var lang = $X("//div[@id='PageLanguage']");
lang = (lang && lang.innerHTML) || "";
$Z(search, function(r,i,p){
for(var a = 0; b = r.childNodes[a]; ++a)
if(b.nodeName == "#text" && (c = missed.exec(b.nodeValue)))
{
var s, v;
if((v = c[gl+2]) && (v != ""))//whitespace after
insertAfter(document.createTextNode(v), b);
for(p=0; p < gl; p++)
{
if((v = c[p+2]) && (v != ""))//one of the groups
{
var n = groups[p];
if(n.v >= 0)
{
s = document.createElement("a");
s.href = prefixs[n.v] + v + lang;
}
else
s = document.createElement("span");
s.className=n.c;
s.innerHTML=v;
insertAfter(s, b);
break;
}
}
if(!(v = c[1]) || (v == ""))//whitespace before
b.parentNode.removeChild(b);
else
b.nodeValue = c[1];
//++a;
}
if((b = r.childNodes[0]) && b.nodeName == "#text" && b.nodeValue.substring(0,7) == " \n")
b.nodeValue = b.nodeValue.substring(7);
if((b = r.childNodes[r.childNodes.length - 1]) && b.nodeName == "#text" && b.nodeValue.substr(-2) == "\n ")
b.nodeValue = b.nodeValue.substring(0, b.nodeValue.length - 2);
if(constfind) $Z("./a[contains(@href, '"+constfind+"')]", function(ir,ii,ip){var t = ir.attributes.getNamedItem("href"); t.value = t.value.replace(constfind, constreplace)+lang;}, r);
if(lang) $Z("./a[span[starts-with(@class,'kw')]]", function(ir,ii,ip){ir.attributes.getNamedItem("href").value += lang;}, r);
});
$Z("//a[starts-with(@title, 'Ll') and starts-with(@title, text())]", function(r,i,p){
var m = "l" + r.title.substring(1);
if(r.title == r.innerHTML)
r.innerHTML = m;
r.title = m;
});
//*
if(m = $X("//li[@id='n-editingdiscussion']")){
n = document.createElement("li");
n.id = "n-randompage";
n.innerHTML = "<a accesskey='x' title='Load a random article [alt-shift-x]' href='/wiki/Special:Random'>Random Page</a>";
insertAfter(n, m);
}
/**/
function $X(_xpath, node){//to search in a frame, you must traverse it's .contentDocument attribute.
var doc = (node)?(node.ownerDocument || node):(node = document);
return doc.evaluate(_xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
}
function $Y(_xpath, node){
var doc = (node)?(node.ownerDocument || node):(node = document);
return doc.evaluate(_xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}
function $Z(_xpath, func, node){
var doc = (node)?(node.ownerDocument || node):(node = document);
var res = doc.evaluate(_xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var args = Array.prototype.slice.call(arguments, 3);
var i = 0;
for (; i < res.snapshotLength; ++i)
func.apply(func, [res.snapshotItem(i), i].concat(args));
return i;
}
function insertAfter(insert, after){return after.parentNode.insertBefore(insert, after.nextSibling);}
function insertBefore(insert, before){return before.parentNode.insertBefore(insert, before);}
function log()
{
var arg;
switch(arguments.length)
{
case 1:
arg = arguments[0];
break;
case 0:
arg = null;
break;
default:
arg = arguments;
break;
}
var f = JSON.stringify(arg);
if(typeof(unsafeWindow.console) != "undefined" && typeof(unsafeWindow.console.log) != "undefined")
unsafeWindow.console.log(f);
else
GM_log(f);
return arg;
}