LSL Style

By BlindWanderer Last update Jul 20, 2009 — Installed 103 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

There are 21 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.0
// ==/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); };

var functions = [];
var get_funcs = [];
var set_funcs = [];
var constants = [];
var events = [];
var control = [];
var search = "";
var constfind, constreplace;
var prefixed = false;

if($X("//head/meta[@name='generator' and starts-with(@content,'MediaWiki ')]"))
{
	constants = ["PERMISSION_TAKE_CONTROLS", "PSYS_SRC_(?:ACCEL|TEXTURE|MAX_AGE|OMEGA|TARGET_KEY)", "FALSE"];
    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']";
	
	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=";
}
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 = ["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 = ["InventoryType","Camera(?:Pos|Rot)","UnixTime","AgentLanguage","Region(?:Flags|AgentCount)","Parcel(?:Flags|PrimCount)","FreeURLs",
						"HTTPHeader","Object(?:Details|PrimCount)",];
    set_funcs = ["PayPrice","PrimURL","CameraParams","ClickAction","Link(?:PrimitiveParams|Texture)"];
    constants = ["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(?:|_(?:LAG|LOCKED|THRESHOLD))","PITCH",
						"FOCUS(?:|_(?:LAG|LOCKED|OFFSET|THRESHOLD))","BEHINDNESS_(?:ANGLE|LAG)", "DISTANCE", "ACTIVE"].join("|")+")", "PAY_(?:HIDE|DEFAULT)",
						"LIST_STAT_(?:RANGE|MIN|MAX|(?:|GEOMETRIC_)MEAN|MEDIAN|STD_DEV|SUM(?:|_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)|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC)",
						"OBJECT_(?:NAME|DESC|POS|ROT|VELOCITY|OWNER|CREATOR|GROUP)", "TEXTURE_(?:DEFAULT|TRANSPARENT|PLYWOOD|BLANK|MEDIA)",
						"PRIM_(?:TYPE_SCULPT|GLOW|SCULPT_TYPE_(?:SPHERE|TORUS|CYLINDER|PLANE))", "STRING_TRIM(?:_(?:HEAD|TAIL)|)",
						"TOUCH_INVALID_(?:FACE|TEXCOORD|VECTOR)", "URL_REQUEST_(?:GRANTED|DENIED)","CHANGED_REGION_START"];
    events = ["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(t,c,v,r){return {r:r, t:t, c:c, v:v, toString: function(){return this.r;}};}

var groups = [generate("span", "nu0", function(s, v){;}, "(0[xX][0-9a-fA-F]+|\\.[0-9]*[Ee][0-9]*|[0-9]+[Ee][0-9]*)")];
if(control.length)		groups.push(generate("a", "kw1", function(s,v){s.href = prefixs[0]+v+lang;}, "("+control.join("|")+")"));
if(types.length)			groups.push(generate("a", "kw2", function(s,v){s.href = prefixs[0]+v+lang;}, "("+types.join("|")+")"));
if(events.length)		groups.push(generate("a", "kw3", function(s,v){s.href = prefixs[0]+v+lang;}, "("+events.join("|")+")"));
if(constants.length)	groups.push(generate("a", "kw4", function(s,v){s.href = prefixs[1]+v+lang;}, "("+constants.join("|")+")"));
if(functions.length)		groups.push(generate("a", "kw5", function(s,v){s.href = prefixs[0]+v+lang;}, "(ll(?:"+functions.join("|")+"))"));
const gl = groups.length;
var missed = new RegExp("^(|[\\W\\w]*?\\W)(?:"+groups.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(d = b.nodeValue)))
            {
                var s, v;
                if((v = c[gl+2]) && (v != ""))
                    insertAfter(document.createTextNode(v), b);
				for(p=0; p < gl; p++)
				{
					if((v = c[p+2]) && (v != ""))
					{
						var n = groups[p];
						s = document.createElement(n.t);
						s.className=n.c;
						s.innerHTML=v;
						n.v(s, v);
						s = insertAfter(s, b);
						break;
					}
				}
                if(!(v = c[1]) || (v == ""))
                    b.parentNode.removeChild(b);
                else
                    b.nodeValue = c[1];
                //++a;
            }
        if((b = r.childNodes[0]) && b.nodeName == "#text" && b.nodeValue.substring(0,7) == "&nbsp;\n")
            b.nodeValue = b.nodeValue.substring(7);
        if((b = r.childNodes[r.childNodes.length]) && 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){return document.evaluate(_xpath, node?node:document, null,	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);}
function $Y(_xpath, node){return document.evaluate(_xpath, node?node:document, null,	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);}
function $Z(_xpath, func, node, payload){
    var res = document.evaluate(_xpath, node?node:document, null,	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    var i, j;
    for (i = j = 0; link = res.snapshotItem(i); ++i)
        j += func(link, i, payload);
    return j;
}
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;
}