Zum Inhalt springen

Benutzer:Schnark/js/antispoof.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 31. Januar 2011 um 10:21 Uhr durch Schnark (Diskussion | Beiträge) (NBSP auf Spezialseiten raus, kombinierende nur grau und ungezählt, sind eignentlich alle in Ordnung). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//Dokumentation unter [[Benutzer:Schnark/js/antispoof]] <nowiki>

var antispoof = {
rot: '#FF8080',
grau: '#C0C0C0',

unsichtbar: '\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F\u00AD\u2000-\u2008\u200A-\u200D\u200F\u2028-\u202F\u205F-\u206F', //unsichtbare Zeichen außer TAB (kommt in Versionsunterschieden vor), LF, CR, SPACE, NBSP, THINSPACE, LRM (nur für Spezialseiten)
punkt: '\u0009\u000A\u000D\u0020-\u0040\u005B-\u0060\u007B-\u007E\u00A0-\u00AC\u00AE-\u00BF\u00D7\u00F7\u02B0-\u02FF\u2009\u2010-\u2027\u2030-\u205E\u2070\u2074-\u2079\u2080-\u2089\u2190-\u22FF', //Satz- und Leerzeichen, Zahlen, Abstandsbestimmung u. ä.
latein: '\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02AF\u1E00-\u1EFF\u2C60-\u2C7F\uA720-\uA7FF', //lateinische Buchstaben (ink. IPA)
sonstiges: '\u0530-\u1DBF\u2071-\u2073\u207A-\u207F\u208A-\u20CF\u2100-\u218F\u2300-\u2C5F\u2C80-\uA71F\uA800-\uD7FF\uF900-\uFE1F\uFE30-\uFFEF', //Buchstaben aus anderen Alphabeten und sonstige Zeichen
griechisch: '\u0370-\u03FF\u1F00-\u1FFF', //griechische Buchstaben
kyrillisch: '\u0400-\u052F', //kyrillische Buchstaben
kombinierend: '\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F', //kombinierende Zeichen
privat: '\uE000-\uF8FF', //privater Gebrauch
unerwuenscht: '\u2010\u2011\u2012\u2015\u2043\u2155-\u218F\u2625-\u2629\u2670\u2671\u2716\u2719-\u271F\u2757-\u275E\u2762\u2763\u2768-\u2775\u2794-\u27BF\uFE50-\uFE6F\uFF00-\uFFFD', //aus irgendwelchen Gründen nicht erwünscht, aber oben nicht erfasst (komische Striche (Geviertstrich nur in NS 0), Darstellungsvarianten, Dingbats, etc.)
benennen: '\u0250-\u02AF\u2009\u2013\u2212\u2500', //nur mit Tooltip benennen (auf Nicht-Spezialseiten NBSP zusätzlich)

rtl: '\u0590-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF',
zwj_ok: '\u0590-\u109F',

regexp_unsichtbar: null, // /()((?:^|.)[unsichtbar](?:.|$))/g
regexp_privat: null, // /()([privat]+)/g
regexp_kombinierend: null, // /()([kombinierend].)/g
regexp_latein: null, // /([^latein punkt unsichtbar kombinierend])([latein]+)/g
regexp_griechisch: null, // /([^griechisch punkt unsichtbar kombinierend])([griechisch]+)/g
regexp_kyrillisch: null, // /([^kyrillisch punkt unsichtbar kombinierend])([kyrillisch]+)/g
regexp_sonstiges: null, // /([^sonstiges punkt unsichtbar kombinierend])([sonstiges]+)/g
regexp_unerwuenscht: null, // /()([unerwuenscht])/g
regexp_benennen: null, // /()([benennen])/g

regexp_rtl1: null, // /(^|[^rtl])RLM([rtl]|$)/
regexp_rtl2: null, // /(^|[rtl])LRM([^rtl]|$)/
regexp_zwj_ok: null, // /[zwj_ok][\u200C\u200D][zwj_ok]/

init: function() {
with (antispoof) {
if (wgNamespaceNumber != -1) { //!RL!
   unsichtbar += '\u200E';
   benennen += '\u00A0'; }
if (wgNamespaceNumber == 0) unerwuenscht += '\u2014'; //!RL!
regexp_unsichtbar = new RegExp ('()((?:^|.)[' + unsichtbar + '](?:.|$))', 'g');
regexp_privat = new RegExp ('()([' + privat + ']+)', 'g');
regexp_kombinierend = new RegExp ('()(.[' + kombinierend + '])', 'g');
regexp_latein = new RegExp ('([^' + latein + punkt + unsichtbar + kombinierend + '])([' + latein + ']+)', 'g');
regexp_griechisch = new RegExp ('([^' + griechisch + punkt + unsichtbar + kombinierend + '])([' + griechisch + ']+)', 'g');
regexp_kyrillisch = new RegExp ('([^' + kyrillisch + punkt + unsichtbar + kombinierend + '])([' + kyrillisch + ']+)', 'g');
regexp_sonstiges = new RegExp ('([^' + sonstiges + punkt + unsichtbar + kombinierend + '])([' + sonstiges + ']+)', 'g');
regexp_unerwuenscht = new RegExp ('()([' + unerwuenscht + '])', 'g');
regexp_benennen = new RegExp ('()([' + benennen + '])', 'g');

regexp_rtl1 = new RegExp ('(^|[^' + rtl + '])\u200F([' + rtl + ']|$)');
regexp_rtl2 = new RegExp ('(^|[' + rtl + '])\u200E([^' + rtl + ']|$)');
regexp_zwj_ok = new RegExp ('[' + zwj_ok + '][\u200C\u200D][' + zwj_ok + ']');

$j(mark); //!RL!
}
},

mark: function() {
var count = 0;
count += highlight.highlight(antispoof.regexp_unsichtbar, function (x) {
 if (x.indexOf('\u00AD') != -1) return 'An dieser Stelle steht ein weiches Trennzeichen!';
 if (x.indexOf('\u200B') != -1) return 'An dieser Stelle steht ein nullbreites Leerzeichen!';
 if (x.indexOf('\u200C') != -1) return 'An dieser Stelle steht ein nullbreiter Nichtverbinder!';
 if (x.indexOf('\u200D') != -1) return 'An dieser Stelle steht ein nullbreiter Verbinder!';
 if (x.indexOf('\u200E') != -1) return 'An dieser Stelle steht ein Links-nach-rechts-Zeichen!';
 if (x.indexOf('\u200F') != -1) return 'An dieser Stelle steht ein Rechts-nach-links-Zeichen!';
 return 'Dieses unsichtbare Zeichen ist kein normales Leerzeichen!';
}, function (x) {
 if (x.match(antispoof.regexp_rtl1)) return antispoof.grau;
 if (x.match(antispoof.regexp_rtl2)) return antispoof.grau;
 if (x.match(antispoof.regexp_zwj_ok)) return antispoof.grau;
 return antispoof.rot;
}, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_privat, 'Dieses Zeichen gehört Unicode-Block "Privater Gebrauch" und hat daher in einem Text normalerweise nichts verloren!', antispoof.rot, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_unerwuenscht, function (x) {
 if (x.indexOf('\u2010') != -1) return 'Dies ist ein Unicode-Bindestrich!';
 if (x.indexOf('\u2011') != -1) return 'Dies ist ein nicht-umbrechender Bindestrich!';
 if (x.indexOf('\u2012') != -1) return 'Dies ist ein ziffernbreiter Bindestrich!';
 if (x.indexOf('\u2014') != -1) return 'Dies ist ein Geviertstrich!';
 if (x.indexOf('\u2015') != -1) return 'Dies ist ein horizontaler Strich!';
 if (x.indexOf('\u2043') != -1) return 'Dies ist ein Aufzählungsstrich!';
 return 'Dieses Zeichen ist normalerweise in Texten nicht erwünscht!';
}, antispoof.rot, 'antispoof-mark');
highlight.highlight(antispoof.regexp_kombinierend, 'Dieses Zeichen ist aus zwei Zeichen zusammengesetzt, einem Akzent und einem Buchstaben!', antispoof.grau, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_griechisch, 'Dieses Zeichen ist ein griechischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_kyrillisch, 'Dieses Zeichen ist ein kyrillischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_sonstiges, 'Dieses Zeichen ist ein Buchstabe aus einem sonstigen Alphabet, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
count += highlight.highlight(antispoof.regexp_latein, 'Dieses Zeichen ist ein lateinischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
highlight.highlight(antispoof.regexp_benennen, function (x) {
 if (x == '\u00A0') return 'nbsp';
 if (x == '\u2009') return 'thinspace';
 if (x == '\u2013') return 'Gedanken-/Bis-/etc. -strich';
 if (x == '\u2212') return 'Minus';
 if (x == '\u2500') return 'horizontale Linie';
 if (x.search(/[\u0250-\u02AF]/) > -1) return 'IPA-Zeichen';
 return '\\u' + x.charCodeAt(0).toString(16);
}, antispoof.grau);
if (count > 0) {
   $j('#firstHeading').after('<span class="antispoof-count noprint">' + count + ' verdächtige Stelle' + (count == 1 ? '' : 'n') + ' gefunden!</span>'); //!RL!
   appendCSS('.antispoof-mark {z-index: 20; position: relative;}'); //!RL!
   $j(document.body).append('<div id="antispoof-overlay" style="position:absolute; top:0; left:0; z-index:10; width:100%; height:100%; background-color:#000; filter:alpha(opacity=60); opacity:0.60;"></div>'); //!RL!
   $j('#antispoof-overlay').hide(); //!RL!
   $j('.antispoof-count, #antispoof-overlay').click(function(){$j('#antispoof-overlay').css('height', $j(document).height()).toggle();}); //!RL!
}
}
};

if (typeof jsmodules != 'undefined') jsmodules.after('[[Benutzer:Schnark/js/antispoof.js]]');
antispoof.init();

//</nowiki>