Uncensor The Internet Plus

By FinalDoom Last update Oct 15, 2007 — Installed 741 times. Daily Installs: 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0
// Uncensor The Internet Plus
// Version 0.6.6
// 2007-08-12

// -----------------------------------Information------------------------------------
// Original based on Jmaxxz Vulgar Word Blocker, 
// which can be found at: http://userscripts.org/scripts/show/2287
//
// Updated by FinalDoom from Uncensor the Internet, 
// which can be found at: http://userscripts.org/scripts/show/8891
//
// Now includes additional words and sophisticated filters.
// Compatible with Pagerization script,
// which can be found at: http://userscripts.org/scripts/show/7623
// See Options section to enable.
// ----------------------------------------------------------------------------------

// -------------------------------------Options--------------------------------------
// Enable or disable Pagerization compatibility
var pagerization = false; // true = compatibility on; false = off (default)
// ----------------------------------------------------------------------------------

// --------------------------------------WARNING-------------------------------------
//
//                               DO NOT SCROLL DOWN 
//
//            this script contains language that may be offensive.
//
// ----------------------------------------------------------------------------------

// ==UserScript==
// @name Uncensor The Internet Plus
// @namespace uncensorTheInternetPlus
// @description Uncensors the bad words on the web
// @include *
// ==/UserScript==

// ----------------------------------Do Not Modify-----------------------------------
var regex = [], replacements = [];
// ----------------------------------------------------------------------------------

// --------------------Case Sensitive Custom Word Replacements-----------------------
// This list is case SENSITIVE, i.e. uppercase and lowcase are treated differently
//
// Terms are listed as comma separated couples of words, in the form:
// "Censored Word": "replacement", // Optional result word listings
//
// "Censored Word" and "replacement" can both contain Regular Expressions
// "Censored Word" is a string representing a RegExp search
// "replacement" is a string representing a RegExp replacement
//
// Place additional case SENSITIVE custom words in the list below:
// ----------------------------------------------------------------------------------
makeRegExp({
//A
	"(\\b)([Aa])[^\\s\\w]{2}hole": "$1$2sshole", // Asshole asshole
	"(\\b)A[^\\s\\w]{2}HOLE": "$1ASSHOLE", // ASSHOLE
	"(\\b|\\w)([Aa])[^\\s\\w]{2}": "$1$2ss", // Ass ass
	"(\\b)@\\$\\$": "$1ass", // ass
  

//B
	"(\\b)([Bb])[^\\s\\w]tch": "$1$2itch", // Bitch bitch
	"(\\b)B[^\\s\\w]TCH": "$1BITCH", // BITCH
	"(\\b)([Bb])(?:(?:o|[^\\s\\w]){2}b|(?:o|[^\\s\\w]){2}[^\\s\\w](s|ies))": "$1$2oob$3", // Boob boob Boobs boobs Boobies boobies
	"(\\b)B(?:(?:O|[^\\s\\w]){2}B|(?:O|[^\\s\\w]){2}[^\\s\\w](S|IES))": "$1BOOB$2", // BOOB BOOBS BOOBIES
	"(\\b)([Bb])ull(?:\\*{4}|[^\\s]{3}t)": "$1$2ullshit", // Bullshit bullshit
	"(\\b)BULL(?:\\*{4}|[^\\s]{3}T)": "$1BULLSHIT", // BULLSHIT

//C
	"(\\b)([Cc])[^\\s\\w]{2}k": "$1$2ock", // Cock cock
	"(\\b)C[^\\s\\w]{2}K": "$1COCK", // COCK
	"(\\b)([Cc])l[^\\s\\w]t": "$1$2lit", // Clit clit
	"(\\b)CL[^\\s\\w]T": "$1CLIT", // CLIT
	"(\\b)([Cc])[^\\s\\w]m": "$1$2um", // Cum cum
	"(\\b)C[^\\s\\w]M": "$1CUM", // CUM
	"(\\b)([Cc])[^\\s\\w]nt": "$1$2unt", // Cunt cunt
	"(\\b)C[^\\s\\w]NT": "$1CUNT", // CUNT

//D
	"(\\b|\\w)([Dd])(?:a|[^\\s\\w])(?:m|[^\\s\\w])n": "$1$2amn", // Damn damn
	"(\\b|\\w)D(?:A|[^\\s\\w])(?:M|[^\\s\\w])N": "$1DAMN", // DAMN
	"(\\b)([Dd])(?:[^\\s\\w](?:c|[^\\s\\w])k|[^\\s\\w]{3}(s))": "$1$2ick$3", // Dick dick Dicks dicks
	"(\\b)D(?:[^\\s\\w](?:C|[^\\s\\w])K|[^\\s\\w]{3}(S))": "$1DICK$2", // DICK DICKS
	"(\\b)([Dd])[^\\s\\w]ldo": "$1$2ildo", // Dildo dildo
	"(\\b)D[^\\s\\w]LDO": "$1DILDO", // DILDO
	"(\\b)([Dd])[^\\s\\w]ke": "$1$2yke", // Dyke dyke
	"(\\b)D[^\\s\\w]KE": "$1DYKE", // DYKE

//F
	"(\\b|\\w)([Ff])(?:[^\\s](?:[^\\s\\w]|c)k|[^\\s\\w]{3})([0-9a-z]{2,}\\b)": "$1$2uck$3", // Fucker fucker Fucking fucking Fuckin' fuckin' etc.
	"(\\b|\\w)F(?:[^\\s](?:[^\\s\\w]|C)K|[^\\s\\w]{3})([0-9A-Z]{2,}\\b)": "$1FUCK$2", // FUCKER FUCKING FUCKIN' etc.
	"(\\b|\\w)([Ff])(?:[^\\s](?:[^\\s\\w]|c)k|[^\\s\\w]{3})": "$1$2uck", // Fuck fuck
	"(\\b|\\w)F(?:[^\\s](?:[^\\s\\w]|C)K)": "$1FUCK", // FUCK

//M
	"(\\b)([Mm])(?:ast(?:[^\\s\\w]rb(?:[^\\s\\w]|a)t|urb[^\\s\\w]t)|[^\\s\\w]st(?:[^\\s\\w]|u)rb(?:[^\\s\\w]|a)t)(e|ing|ion)": "$1$2asturbat$3", // Masturbate masturbate Masturbating masturbating Masturbation masturbation
	"(\\b)M(?:AST(?:[^\\s\\w]RB(?:[^\\s\\w]|A)T|URB[^\\s\\w]T)|[^\\s\\w]ST(?:[^\\s\\w]|U)RB(?:[^\\s\\w]|A)T)(E|ING|ION)": "$1MASTURBAT$2", // MASTURBATE MASTURBATING MASTURBATION
	"(\\b)([Mm])other(?:\\*{6}|[^\\s]{4})([0-9a-z]{2,}\\b)": "$1$2otherfuck$3", // Motherfucker motherfucker Motherfucking motherfucking etc.
	"(\\b)MOTHER(?:\\*{6}|[^\\s]{4})([0-9A-Z]{2,}\\b)": "$1MOTHERFUCK$2", // MOTHERFUCKER MOTHERFUCKING etc.

//N
	"(\\b)([Nn])[^\\s\\w]ked": "$1$2aked",
	"(\\b)N[^\\s\\w]KED": "$1NAKED",
	"(\\b)([Nn])(?:i(?:g[^\\s\\w]|[^\\s\\w]g|[^\\s\\w]{2})|[^\\s\\w](?:g[^\\s\\w]|[^\\s\\w]g|gg))(a|er)": "$1$2igg$3", // Nigga nigga Nigger nigger
	"(\\b)N(?:I(?:G[^\\s\\w]|[^\\s\\w]G|[^\\s\\w]{2})|[^\\s\\w](?:G[^\\s\\w]|[^\\s\\w]G|GG))(A|ER)": "$1NIGG$2",// NIGGA NIGGER

//P
	"(\\b)([Pp])(?:i(?:s[^\\s\\w]|[^\\s\\w]s|[^\\s\\w][^\\s\\w])|[^\\s\\w.](?:ss|s[^\\s\\w.]|[^\\s\\w]s))([^y])": "$1$2iss$3", // Piss piss
	"(\\b)P(?:I(?:S[^\\s\\w]|[^\\s\\w]S|[^\\s\\w][^\\s\\w])|[^\\s\\w.](?:SS|S[^\\s\\w.]|[^\\s\\w]S))([^Y])": "$1PISS$2", // PISS
	"(\\b)([Pp])[^\\s\\w]rn": "$1$2orn", // Porn porn
	"(\\b)P[\\s\\w]RN": "$1PORN", // PORN
	"(\\b)([Pp])(?:u(?:s[^\\s\\w]|[^\\s\\w]s|[^\\s\\w]{2})|[^\\s\\w](?:ss|s[^\\s\\w]|[^\\s\\w]s))(y|ies)": "$1$2uss$3", // Pussy pussy Pussies pussies
	"(\\b)P(U(?:S[^\\s\\w]|[^\\s\\w]S|[^\\s\\w]{2})|[^\\s\\w](?:SS|S[^\\s\\w]|[^\\s\\w]S))(Y|IES)": "$1PUSS$3", // PUSSY PUSSIES

//S
	"(\\b)([Ss])(?:h(?:[^\\s\\w]t|i[^\\s\\w]|[^\\s\\w]{2})|[^\\s\\w](?:[^\\s\\w]t|i[^\\s\\w]))": "$1$2hit", // Shit shit
	"(\\b)S(?:H(?:[^\\s\\w]T|I[^\\s\\w]|[^\\s\\w]{2})|[^\\s\\w](?:[^\\s\\w]T|I[^\\s\\w]))": "$1SHIT", //SHIT

//T
	"(\\b|\\w)([Tt])(?:i|[^\\s\\w])(ts?|ty|ties)": "$1$2i$3", // Tit tit Tits tits Titty titty Titties titties
	"(\\b|\\w)T(?:I|[^\\s\\w])(TS?|TTY|TTIES)": "$1TI$2", // TIT TITS TITTY TITTIES
	
//V
	"(\\b)([Vv])[^\\s\\w]gina": "$1$2agina", // Vagina vagina
	"(\\b)V[^\\s\\w]GINA": "$1VAGINA", // VAGINA
	
//W
	"(\\b)([Ww])(?:h[^\\s\\w]r)(e|es|ing)": "$1$2hor$3", // Whore whore Whores whores Whoring whoring
	"(\\b)W(?:H[^\\s\\w]R)(E|ES|ING)": "$1WHOR$2", // WHORE WHORES WHORING

// ----------------------------Bonus Word Replacement Fun----------------------------
// I just couldn't bring myself to making these word replacements default.
// But, you can turn them on by removing the leading slashes.
//
//	"(\\b)President Bush": "$1President Douchebag",
//	"(\\b)George W\\. Bush": "$1George W\\. Douchebag",
//	"(\\b)George W Bush": "$1George W Douchebag",
// ----------------------------------------------------------------------------------
}, "g");


// ---------------------Case Inensitive Custom Word Replacements---------------------
// This list is case INSENSITIVE, i.e. uppercase and lowcase are considered the same.
//
// Terms are listed as comma separated couples of words, same as above.
//
// Place additional case INSENSITIVE custom words in the list below:
// ----------------------------------------------------------------------------------
makeRegExp({
//F
	"(\\b)the f.word": "$1Fuck", // Fuck
	"(\\b)the \"f\".word": "$1Fuck", // Fuck

// ----------------------------Bonus Word Replacement Fun----------------------------
// I just couldn't bring myself to making these word replacements default.
// But, you can turn them on by removing the leading slashes.
//
//	"(\\b)the Bush administration": "$1the Douchebag administration",
// ----------------------------------------------------------------------------------
}, "ig");


// ---------------------------End Of Configurable Section----------------------------
// Don't touch anything below, unless you know what you're doing.
// ----------------------------------------------------------------------------------

function makeRegExp(replacers, flags) {
	for(var key in replacers)
	{
		regex.push(new RegExp(key, flags));
		replacements.push(replacers[key]);
	}
} 

// Uncensoring Function
function uncensor(text)
{
	for (var j = 0; j < regex.length; j++)
	{
		text = text.replace(regex[j], replacements[j]);
	}
	return text;
}

function main()
{
	// Replace In Title
	if(document.title) document.title = uncensor(document.title);

	// Replace In Body Text
	var textnodes = document.evaluate( "//body//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i = 0; i < textnodes.snapshotLength; i++)
	{
		node = textnodes.snapshotItem(i);
		node.data = uncensor(node.data);
	}
}

main();

// Compatibility with Pagerization
if (pagerization) addFilter(function () {main();});

function addFilter(func, i) {
	i = i || 4;
	if (window.AutoPagerize && window.AutoPagerize.addFilter) {
		window.AutoPagerize.addFilter(func);
	}
	else if (i > 1) {
		setTimeout(arguments.callee, 1000, func, i - 1);
	}
	else {
		(function () {
			func(document);
			setTimeout(arguments.callee, 200);
		})();
	}
}