Benutzer:Bernardissimo/monobook.js/markup.js

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche

Wichtig: Nach dem Speichern musst Du deinem Browser sagen, dass er die neue Version laden soll: Mozilla/Firefox: Strg-Shift-R, IE: Strg-F5, Safari: Cmd-Shift-R, Konqueror: F5.

// Quelle: de.wp:Benutzer:Benutzer:BLueFiSH.as/JS/markup.js

// führt allgemeine Ersetzungen und Rechtschreibänderungen durch

// FUNKTION !!!NICHT!!! OHNE NACHKONTROLLE ÜBER "Änderungen zeigen" AUSFÜHREN !!!

function ReplaceMarkup()
{ var tv = document.editform.wpTextbox1.value;
  
  /* ============================== unnötige Leerzeichen ============================== */
  // Tabulatoren im Quelltext in Leerzeichen verwandeln
  tv = tv.replace(/\t/g, " ");

  // mehrfache Leerzeichen auf einzelne reduzieren.
  tv = tv.replace(/ +/g, " ");
  
  // unnötige Leerzeichen an Zeilenenden entfernen
  tv = tv.replace(/ \n/g, "\n");
  
  // mehrfache Leerzeilen auf einzelne reduzieren.
  tv = tv.replace(/\<p\>/gi, "\n\n");   tv = tv.replace(/\<\/p\>/gi, "\n\n");
  tv = tv.replace(/\n{3,}/g, "\n\n");  
  
  /* ============================== Vandalismusüberbleibsel entfernen ============================== */
  tv = tv.replace(/\'\'\'Fetter\sText\'\'\'/g, "");
  tv = tv.replace(/\'\'Kursiver\sText\'\'/g, "");
  tv = tv.replace(/\[\[Link\-Text\]\]/g, "");
  tv = tv.replace(/\[\[Verweistext\]\]/g, "");
  tv = tv.replace(/\[http\:\/\/www\.beispiel\.de\sLink\-Text\]/g, "");
  tv = tv.replace(/\=\=\sÜberschrift\s\=\=/g, "");
  tv = tv.replace(/\[\[Bild\:Beispiel\.jpg\]\]/g, "");
  tv = tv.replace(/\[\[Datei\:Beispiel\.jpg\]\]/g, "");
  tv = tv.replace(/\[\[Media\:Beispiel\.ogg\]\]/g, "");
  tv = tv.replace(/\<math\>Formel\shier\seinfügen\<\/math\>/g, "");
  tv = tv.replace(/Formel\shier\seinfügen/g, "");
  tv = tv.replace(/\<nowiki\>Unformatierten\sText\shier\seinfügen\<\/nowiki\>/g, "");
  tv = tv.replace(/Unformatierten\sText\shier\seinfügen/g, "");
  
  /* ============================== Überschriften formatieren ============================== */
  // vor und hinter dem Überschriftstext mit Leerzeichen auffüllen
  tv = tv.replace(/\n=====/g, "\n<h5>");    tv = tv.replace(/=====\n/g, "<sh5>\n");
  tv = tv.replace(/\n====/g, "\n<h4>");    tv = tv.replace(/====\n/g, "<sh4>\n");
  tv = tv.replace(/\n===/g, "\n<h3>");     tv = tv.replace(/===\n/g, "<sh3>\n");
  tv = tv.replace(/\n==/g, "\n<h2>");      tv = tv.replace(/==\n/g, "<sh2>\n");
  tv = tv.replace(/\n<h5>/g, "\n===== ");   tv = tv.replace(/<sh5>\n/g, " =====\n");
  tv = tv.replace(/\n<h4>/g, "\n==== ");   tv = tv.replace(/<sh4>\n/g, " ====\n");
  tv = tv.replace(/\n<h3>/g, "\n=== ");    tv = tv.replace(/<sh3>\n/g, " ===\n");
  tv = tv.replace(/\n<h2>/g, "\n== ");     tv = tv.replace(/<sh2>\n/g, " ==\n");
  
  // unnötige Fettschreibung in Überschriften entfernen
  tv = tv.replace(/== '''/g, "== ");   tv = tv.replace(/''' ==/g, " ==");
  
  // Doppelpunkte werden nicht in Überschriften verwendet
  tv = tv.replace(/: ==/g, " ==");
  
  // Weblinks immer als Weblinks nicht als Externe Links, Links oder Webseiten
  tv = tv.replace(/== Externe Links ==/gi, "== Weblinks ==");
  tv = tv.replace(/== external links ==/gi, "== Weblinks ==");
  tv = tv.replace(/== Links ==/gi, "== Weblinks ==");
  tv = tv.replace(/== Webseiten ==/gi, "== Weblinks ==");
  tv = tv.replace(/== Websites ==/gi, "== Weblinks ==");
  tv = tv.replace(/== Weblink ==/gi, "== Weblinks ==");
  
  /* ==================== "proaktiv" [[Wikipedia:Selbstlinks]] vermeiden =================== */
  reg = new RegExp("\\[\\["+wgTitle+"\\]\\]", "g");     // damit lässt sich aber nicht "[[wgTitle|blaaa]]" finden
  // Links werden zu fett umgewandelt, das in vermutlich >80% der Fälle das Lemma nur 1x (am Anfang) in Klammern steht.
  tv = tv.replace(reg, "\'\'\'"+wgTitle+"\'\'\'");
  
  /* ============================== Sonstiges  ============================== */
  // [[Hamburg | Berliner]] zu [[Hamburg|Berliner]], [[Berlin|Berliner]] zu [[Berlin]]er
  // [[Commerzbank|Commerzbank AG]] aber soll so bleiben
  // very special Dank an Benutzer:D!!
  tv = tv.replace(/\[\[[ \t]*([^\]|]+?)[ \t]*\|[ \t]*([^\] \t]+?)[ \t]*\]\]/g, "[[$1|$2]]"); 
  tv = tv.replace(/\[\[([^|\]]+)\|\1([^|\] \t]+)\]\]/g, "[[$1]]$2");
  
  //doppeltes Gänsefüßchen reduziert  
  tv = tv.replace(/\"\"/g, "\"");
  
  // entfernen da unnötig
  tv = tv.replace(/\|\|thumb\|/g, "|thumb|"); // welche Idis machen sowas...
  tv = tv.replace(/\|thumb\|\|/g, "|thumb|"); // noch mehr Idis...
  tv = tv.replace(/\|\|miniatur\|/g, "|miniatur|");
  tv = tv.replace(/\|miniatur\|\|/g, "|miniatur|");
  tv = tv.replace(/style=\"\"/g, "");
  tv = tv.replace(/<\!-- GEOnet -->/g, "");
  tv = tv.replace(/\{\{Vorlage: /gi, "{{");
  tv = tv.replace(/\{\{Vorlage:/gi, "{{");
  
  // Leerzeichen vor und hinter doppelten Pipes, bessere Editierbarkeit in Tabellen
  tv = tv.replace(/\|\|/g, " || ");
  
  // im Artikelraum (zumindest nicht in Städteartikeln) nicht zu verwendende <tt> und <code> entfernen
  tv = tv.replace(/<tt>/gi, "");   tv = tv.replace(/<\/tt>/gi, "");
  tv = tv.replace(/<code>/gi, "");   tv = tv.replace(/<\/code>/gi, "");
  
  // die verschiedensten Formen der Zeilenumbrüche durch korrekte ersetzen
  tv = tv.replace(/<br>/gi, "<br />");
  tv = tv.replace(/<\/br>/gi, "<br />");   tv = tv.replace(/<br\/>/gi, "<br />");
  tv = tv.replace(/<\/br\s>/gi, "<br />");  tv = tv.replace(/<br\/\s>/gi, "<br />");
  
  // korrekte Groß-Schreibung, deutsche Namen für Namensräume
  tv = tv.replace(/\{\{koordinate/g, "{{Koordinate");
  tv = tv.replace(/\{\{Koordinate_Text/g, "{{Koordinate Text");
  tv = tv.replace(/\{\{Koordinate_Artikel/g, "{{Koordinate Artikel");
  tv = tv.replace(/\{\{Koordinate_Text_Artikel/g, "{{Koordinate Text Artikel");
  tv = tv.replace(/\[\[category:/gi, "[[Kategorie:");
  tv = tv.replace(/\[\[kategorie:/g, "[[Kategorie:");
  tv = tv.replace(/\[\[Kategorie: /g, "[[Kategorie:");
  tv = tv.replace(/\[\[Kategorie:ge/g, "[[Kategorie:Ge");
  tv = tv.replace(/\[\[File:/gi, "[[Datei:");
  tv = tv.replace(/\[\[datei:/g, "[[Datei:");
  tv = tv.replace(/\[\[Datei: /g, "[[Datei:");
  // oder jetzt alles auf Datei: ?
  tv = tv.replace(/\[\[Image:/gi, "[[Bild:");
  tv = tv.replace(/\[\[bild:/g, "[[Bild:");
  tv = tv.replace(/\[\[Bild: /g, "[[Bild:");
  
  // unnötiges rausschmeißen (thumb ist ohne Angabe immer right)
  tv = tv.replace(/\|\|thumb\|/g, "|thumb|");
  tv = tv.replace(/\|right\|thumb\|/g, "|thumb|");
  tv = tv.replace(/\|thumb\|right\|/g, "|thumb|");
  tv = tv.replace(/px\|right\|/g, "px|");
  tv = tv.replace(/\|left\|thumb\|/g, "|thumb|left|"); // einfach nur Reihenfolge: wie-wo

  // und dasselbe in grün
  tv = tv.replace(/\|\|miniatur\|/g, "|miniatur|");
  tv = tv.replace(/\|right\|miniatur\|/g, "|miniatur|");
  tv = tv.replace(/\|miniatur\|right\|/g, "|miniatur|");
  tv = tv.replace(/\|left\|miniatur\|/g, "|miniatur|left|"); // einfach nur Reihenfolge: wie-wo
  
  // "z.B." immer zu "zum Beispiel", etc.
  tv = tv.replace(/\[\[1\. Weltkrieg/g, "[[Erster Weltkrieg|Ersten Weltkrieg");
  tv = tv.replace(/\[\[2\. Weltkrieg/g, "[[Zweiter Weltkrieg|Zweiten Weltkrieg");
  tv = tv.replace(/1\. Weltkrieg/g, "Ersten Weltkrieg");
  tv = tv.replace(/2\. Weltkrieg/g, "Zweiten Weltkrieg");
  
  /* [[Wikipedia:Datumskonventionen]] umsetzen */
  tv = tv.replace(/\.01\.(\d{4})/g, ". Januar $1"); tv = tv.replace(/\.1\.(\d{4})/g, ". Januar $1");
  tv = tv.replace(/\.02\.(\d{4})/g, ". Februar $1"); tv = tv.replace(/\.2\.(\d{4})/g, ". Februar $1");
  tv = tv.replace(/\.03\.(\d{4})/g, ". März $1"); tv = tv.replace(/\.3\.(\d{4})/g, ". März $1");
  tv = tv.replace(/\.04\.(\d{4})/g, ". April $1"); tv = tv.replace(/\.4\.(\d{4})/g, ". April $1");
  tv = tv.replace(/\.05\.(\d{4})/g, ". Mai $1"); tv = tv.replace(/\.5\.(\d{4})/g, ". Mai $1");
  tv = tv.replace(/\.06\.(\d{4})/g, ". Juni $1"); tv = tv.replace(/\.6\.(\d{4})/g, ". Juni $1");
  tv = tv.replace(/\.07\.(\d{4})/g, ". Juli $1"); tv = tv.replace(/\.7\.(\d{4})/g, ". Juli $1");
  tv = tv.replace(/\.08\.(\d{4})/g, ". August $1"); tv = tv.replace(/\.8\.(\d{4})/g, ". August $1");
  tv = tv.replace(/\.09\.(\d{4})/g, ". September $1"); tv = tv.replace(/\.9\.(\d{4})/g, ". September $1");
  tv = tv.replace(/\.10\.(\d{4})/g, ". Oktober $1");
  tv = tv.replace(/\.11\.(\d{4})/g, ". November $1"); 
  tv = tv.replace(/\.12\.(\d{4})/g, ". Dezember $1"); 
  tv = tv.replace(/(\s|\()0(\d)\.\s/g, "$1$2. ");  // 01. und 02. etc. zu 1. und 2.

  tv = tv.replace(/Jh\.\)\]\]/g, "JJJJHHHH.)]]"); // workaround für "Kategorie:Britisches Königshaus (20. Jh.)"
  tv = tv.replace(/Jh\.\)\|/g, "JJJJHHHH.)|"); // workaround für "Kategorie:Britisches Königshaus (20. Jh.)"
  tv = tv.replace(/Jh\.\|/g, "JJJJHHHH.|"); // workaround für Link "Britisches Königshaus (20. Jh.)|blablub"
  tv = tv.replace(/\.Jh\./g, ". Jahrhundert"); tv = tv.replace(/\.\sJh\./g, ". Jahrhundert"); 
  tv = tv.replace(/\.Jhd\./g, ". Jahrhundert"); tv = tv.replace(/\.\sJhd\./g, ". Jahrhundert");
  tv = tv.replace(/JJJJHHHH\.\)\]\]/g, "Jh.)]]"); // workaround für "Kategorie:Britisches Königshaus (20. Jh.)"
  tv = tv.replace(/JJJJHHHH\.\)\|/g, "Jh.)|"); // workaround für "Kategorie:Britisches Königshaus (20. Jh.)"
  tv = tv.replace(/JJJJHHHH\.\|/g, "Jh.|"); // workaround für Link "Britisches Königshaus (20. Jh.)|blablub"
  
  // diverses
  tv = tv.replace(/\| \]\]/g, "|&&]]");
  
  tv = tv.replace(/\[\[ /g, "[[");  // fix für z.b. "[Kategorie:Eis| ]"
  tv = tv.replace(/ \]\]/g, "]]");
  tv = tv.replace(/\|\&\&\]\]/g, "| ]]"); // rückfix für z.b. "[Kategorie:Eis| ]"
  
  tv = tv.replace(/\( /g, "\(");    tv = tv.replace(/ \)/g, "\)");
  tv = tv.replace(/\&auml\;/g, "ä");
  tv = tv.replace(/\&Auml\;/g, "Ä");
  tv = tv.replace(/\&ouml\;/g, "ö");
  tv = tv.replace(/\&Ouml\;/g, "Ö");
  tv = tv.replace(/\&uuml\;/g, "ü");
  tv = tv.replace(/\&Uuml\;/g, "Ü");
  tv = tv.replace(/\&szlig\;/g, "ß");
  tv = tv.replace(/\&dagger\;/g, "†");
  tv = tv.replace(/\&ndash\;/g, "–");
  tv = tv.replace(/\&mdash\;/g, "—");
  tv = tv.replace(/\&rarr\;/g, "→");
  tv = tv.replace(/\&larr\;/g, "←");
  tv = tv.replace(/\&sup2\;/g, "²");
  tv = tv.replace(/\&sup3\;/g, "³");
  tv = tv.replace(/\&raquo\;/g, "»");
  tv = tv.replace(/\&laquo\;/g, "«");
  tv = tv.replace(/\&rt\;/g, ">");
  tv = tv.replace(/\&lt\;/g, "<");
  tv = tv.replace(/\&hellip\;/g, "…");
  tv = tv.replace(/\.\.\./g, "…");
  tv = tv.replace(/(\d)\&nbsp\;\%/g, "$1 %"); // % braucht kein nbsp mehr, macht Mediawiki automatisch wenn leerzeichen davor
  
  tv = tv.replace(/\%27/g, "'");
  tv = tv.replace(/\%2C/g, ",");
  tv = tv.replace(/\.2C/g, ",");
  tv = tv.replace(/\.3B/g, ";");
  //tv = tv.replace(/(\D)\.28/g, "$1("); // führt zu fehlersetzungen
  //tv = tv.replace(/(\D)\.29/g, "$1)"); // führt zu fehlersetzungen
  tv = tv.replace(/\.C3\.A4/g, "ä");
  tv = tv.replace(/\.C3\.B6/g, "ö");
  tv = tv.replace(/\.C3\.BC/g, "ü");
  tv = tv.replace(/\.C3\.9F/g, "ß");
  tv = tv.replace(/\%28/g, "(");
  tv = tv.replace(/\%29/g, ")");
  tv = tv.replace(/\%C3\%A4/g, "ä");
  tv = tv.replace(/\%C3\%B6/g, "ö");
  tv = tv.replace(/\%C3\%BC/g, "ü");
  tv = tv.replace(/\%C3\%9F/g, "ß");
  tv = tv.replace(/<li>/g, "*"); tv = tv.replace(/<\/li>/g, "");
  tv = tv.replace(/<ul>/g, "");  tv = tv.replace(/<\/ul>/g, "");
  tv = tv.replace(/<br \/>\n\n/g, "\n\n");
  tv = tv.replace(/<b>/g, "'''"); tv = tv.replace(/<\/b>/g, "'''");
  tv = tv.replace(/<i>/g, "''");  tv = tv.replace(/<\/i>/g, "''");
  
//    (muss erstmal noch genau beobachtet werden, wie fehlerfrei das ist)
if (wgUserName == "BLueFiSH.as") 
{
  // Setzen geschützter Leerzeichen
  tv = tv.replace(/(\d)[\s]{0,1}(m|g|t|mm|cm|km|kg|ha)(\,|\.|\n|\)|\s|²|³)/g, "$1&nbsp;$2$3");
  // Ausnahmen rückgängig machen
  tv = tv.replace(/\&nbsp\;\|/g, "|");

  // Tausenderpunkte (genaue Nachkontrolle erforderlich)
  // für Millionen auch amerikanische Tausenderkomma ersetzen (bei 100.000ern sind Nachkommastellen unwahrscheinlich
  //tv = tv.replace(/(\d{1,3})[\s|,|\&nbsp\;]{1,6}(\d{3})[\s|,|\&nbsp\;]{1,6}(\d{3})/g, "$1.$2.$3");
  // bei 100.000ern kein Komma ersetzen, da bei 1000ern dort Nachkommastellen wahrscheinlich
  //tv = tv.replace(/(\d{1,3})[\s|\&nbsp\;]{1,6}(\d{3})/g, "$1.$2");
}
  // entplenken
  tv = tv.replace(/ \,/g, ", ");
  tv = tv.replace(/ \./g, ". ");
  tv = tv.replace(/ \;/g, ";");
  tv = tv.replace(/ \:/g, ":");
  
  // und nochmal das vom Anfang
  tv = tv.replace(/ +/g, " ");
  tv = tv.replace(/\n{3,}/g, "\n\n");
  
// TODO: alert() bei diversen Sachen, die von Hand korrigiert werden müssen.
// TODO: alert() bei Koordinate mit 60er Sekunden! 
// TODO: wenn nur Überschriften Ebene 3/Ebene 1 vorhanden, und keine Ebene 2, alle Ebenen eins rauf/runter setzen
  
  document.editform.wpTextbox1.value = tv;
  if (wgUserName != "BLueFiSH.as") {document.editform.wpDiff.click();}
}

Linktipps: Faditiva und 3DPresso