<?php
# ersetzungen aus http://de.wikipedia.org/w/index.php?title=Benutzer:Codeispoetry/Kosmetika&oldid=54087955
# originalhinweis:
#textseite: nur auf textseiten, keine diskussionsseiten, keine scripte, keine pre-abschnitte.
#seite: kann überall gefahrlos gemacht werden
#automatisch: ohne nachkontrolle
#semiautomatisch: könnte noch kontrolle benötigen

function ersetze_kleinigkeiten($page, $content, $erzwinge_textseite=false){
  $content = intern_ersetze_kleinigkeiten($content);
  if($erzwinge_textseite || ist_textseite($page)){
    $content = hole_pre_tags($content);
    $content = intern_ersetze_kleinigkeiten_textseite($content);
    $content = setze_pre_tags($content);
  }
  return $content;
}

function ersetze_kleinigkeiten_semiautomatisch($page, $content, $erzwinge_textseite=false){
  $content = intern_ersetze_kleinigkeiten($content);
  $content = intern_ersetze_kleinigkeiten_semiautomatisch($content);
  if($erzwinge_textseite || ist_textseite($page)){
    $content = hole_pre_tags($content);
    $content = intern_ersetze_kleinigkeiten_textseite($content);
    $content = intern_ersetze_kleinigkeiten_semiautomatisch_textseite($content);
    $content = setze_pre_tags($content);
  }
  return $content;
}

function intern_ersetze_kleinigkeiten($content){
  #Leerzeichen am Ende erledigen; die Chemiker wollen in Vorlagen das Leerzeichen bei leeren Parametern behalten
  #RE: /([^=])[ \t]+\n/g
  #KO: '$1\n'
  #QA: seite, automatisch
  $content = preg_replace('!([^=])[ \t]+\n!', "$1\n", $content);

  #viele leerzeilen ersetzen
  #RE: /\n{3,}/g
  #KO: '\n\n'
  #QA: seite, automatisch
  $content = preg_replace('!\n{3,}!', "\n\n", $content);

  return $content;
}

function intern_ersetze_kleinigkeiten_textseite($content){
  #Mehrere Leerzeichen durch eins ersetzen
  #RE: /([^\n ]) +([^= ]|=+\n)/g
  #KO: '$1 $2'
  #QA: textseite, automatisch
  $content = preg_replace('!([^\n ]) +([^= ]|=+\n)!', '$1 $2', $content);

  #<p> ersetzen
  #RE: /\<\/?\s*[Pp]\s*\>/g
  #KO: '\n\n'
  #QA: textseite, automatisch
  $content = preg_replace('/\<\/?\s*[Pp]\s*\>/', "\n\n", $content);
// nicht getestet

  #diversen toolbar-müll beseitigen
  #RE: /\'\'\'Fetter\sText\'\'\'/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\'\'\'Fetter\sText\'\'\'/', '', $content);

  #RE: /\'\'Kursiver\sText\'\'/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\'\'Kursiver\sText\'\'/', '', $content);

  #RE: /\[\[Link\-Text\]\]/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[Link\-Text\]\]/', '', $content);

  #RE: /\[\[Verweistext\]\]/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[Verweistext\]\]/', '', $content);

  #RE: /\[http\:\/\/www\.example\.com\sLink\-Text\]/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\[http\:\/\/www\.example\.com\sLink\-Text\]/', '', $content);

  #RE: /\=\=\sÜberschrift\s\=\=/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\=\=\sÜberschrift\s\=\=/', '', $content);

  #RE: /\[\[Datei\:Beispiel\.jpg\]\]/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[Datei\:Beispiel\.jpg\]\]/', '', $content);

  #RE: /\[\[Media\:Beispiel\.ogg\]\]/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[Media\:Beispiel\.ogg\]\]/', '', $content);

  #RE: /\<math\>Formel\shier\seinfügen\<\/math\>/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\<math\>Formel\shier\seinfügen\<\/math\>/', '', $content);

  #RE: /Formel\shier\seinfügen/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/Formel\shier\seinfügen/', '', $content);

  #RE: /\<nowiki\>Unformatierten\sText\shier\seinfügen\<\/nowiki\>/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/\<nowiki\>Unformatierten\sText\shier\seinfügen\<\/nowiki\>/', '', $content);

  #RE: /Unformatierten\sText\shier\seinfügen/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/Unformatierten\sText\shier\seinfügen/', '', $content);

  #Unnötiges Angeben des Vorlage-Namensraums
  #RE: /\{\{\s*vorlage\s*:\s*/gi
  #KO: '{{'
  #QA: textseite, automatisch
  $content = preg_replace('/\{\{\s*vorlage\s*:\s*/i', '{{', $content);

  //englisch auch
  $content = preg_replace('/\{\{\s*template\s*:\s*/i', '{{', $content);

  #Leere Style-Angaben
  #RE: /style\s*=\s*\"\s*\"\s*/g
  #KO: ''
  #QA: textseite, automatisch
  $content = preg_replace('/style\s*=\s*\"\s*\"\s*/', '', $content);
//nicht getestet

  #Diverse falsche Formen eines Zeilenumbruchs
  #RE: /<\s*\/?\s*br\s*\/?\s*>/gi
  #KO: '<br />'
  #QA: textseite, automatisch
  $content = preg_replace('/<\s*\/?\s*br\s*\/?\s*>/i', '<br />', $content);
//nicht getestet

  #Häufige unschöne Kategorisierungen
  #RE: /\[\[\s*(category|kategorie)\s*:\s*/gi
  #KO: '[[Kategorie:'
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[\s*(category|kategorie)\s*:\s*/i', '[[Kategorie:', $content);
//nicht getestet

  #Dito für Bilder
  #RE: /\[\[\s*(image|bild|file|datei)\s*:\s*/gi
  #KO: '[[Datei:'
  #QA: textseite, automatisch
  $content = preg_replace('/\[\[\s*(image|bild|file|datei)\s*:\s*/i', '[[Datei:', $content);
//nicht getestet

  #Dito für DEFAULTSORT
  #RE: /\{\{\s*defaultsort\s*:\s*/gi
  #KO: '{{DEFAULTSORT:'
  #QA: textseite, automatisch
  $content = preg_replace('/\{\{\s*defaultsort\s*:\s*/i', '{{DEFAULTSORT:', $content);
//nicht getestet

  #Überschriften (Das [^ \t\n] ist nötig, um leerzeichen hinten loszuwerden
  #RE: /(={2,})[ \t]*([^\n]*[^ \t\n]):?[ \t]*\1/g
  #KO: '$1 $2 $1'
  #QA: textseite, automatisch
  $content = preg_replace('/(={2,})[ \t]*([^\n]*[^ \t\n]):?[ \t]*\1/', '$1 $2 $1', $content);

  # Komma vor Gestorben-Zeichen und Leerzeichen vor und danach, nur in Klammerausdrücken
  #RE: /(\([^\(\)]*)[,;]\s*†\s*([^\(\)]*\))/g
  #KO: '$1; † $2'
  #QA: textseite, automatisch
  $content = preg_replace('/(\([^\(\)]*)[,;]\s*†\s*([^\(\)]*\))/', '$1; † $2', $content);

  # Leerzeichen nach * oder # oder :
  #RE: /\n((?:\*|#|:)+)([\w\d\[\(])/g
  #KO: '\n$1 $2'
  #QA: textseite, automatisch
  $content = preg_replace('/\n((?:\*|#|:)+)([\w\d\[\(])/', "\n$1 $2", $content);

  # Leerzeichen am Ende einer ref
  #RE: / <\/ref>/g
  #KO: '</ref>'
  #QA: textseite, automatisch
  $content = preg_replace('/ <\/ref>/', '</ref>', $content);
//nicht getestet

  # Leerzeichen beim references-Tag
  #RE: /<references *\/>/gi
  #KO: '<references />'
  #QA: textseite, automatisch
  $content = preg_replace('/<references *\/>/i', '<references />', $content);
//nicht getestet

  # Mehrere Kategorien in einer Zeile
  #RE: /(\[\[Kategorie:[^\]]+\]\])[ \t]*\[/g
  #KO: '$1\n['
  #QA: textseite, automatisch
  $content = preg_replace('/(\[\[Kategorie:[^\]]+\]\])[ \t]*\[/', "$1\n[", $content);

  return $content;
}

function intern_ersetze_kleinigkeiten_semiautomatisch($content){
  #http://en.wikipedia.org/w/index.php?title=Wikipedia:Village_pump_(technical)&oldid=128295924#dontcountme.3Ds.3F
  #RE: /&dontcountme=s/g
  #KO: ''
  #QA: seite, semiautomatisch
  $content = preg_replace('!&dontcountme=s!', '', $content);

  return $content;
}

function intern_ersetze_kleinigkeiten_semiautomatisch_textseite($content){
  #Reihenfolge bei Bildern
  #RE: /(right|left)(\s*\|\s*)+thumb/g
  #KO: 'thumb|$1'
  #QA: textseite, semiautomatisch
  $content = preg_replace('!(right|left)(\s*\|\s*)+thumb!', "thumb|$1", $content);

  #Redundantes right
  #RE: /thumb(\s*\|\s*)+right\s*\|/g
  #KO: 'thumb|'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/thumb(\s*\|\s*)+right\s*\|/', 'thumb|', $content);
//nicht getestet

  #Wikilinks
  #RE: /\[\[[ \t]*([^\]| \t][^\]|]*[^\]| \t])[ \t]*\|[ \t]*([^\]| \t][^\]|]*[^\]| \t])[ \t]*\]\]/g
  #KO: '[[$1|$2]]'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\[\[[ \t]*([^\]| \t][^\]|]*[^\]| \t])[ \t]*\|[ \t]*([^\]| \t][^\]|]*[^\]| \t])[ \t]*\]\]/', '[[$1|$2]]', $content);
//nicht getestet

  #Wikilinks
  #RE: /\[\[([^|\]]+)\|\1([^|\] \t]*)\]\]/g
  #KO: '[[$1]]$2'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\[\[([^|\]]+)\|\1([^|\] \t]*)\]\]/', '[[$1]]$2', $content);
//nicht getestet

  #prettytable nach wikitable
  #RE: /prettytable/g
  #KO: 'wikitable'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/prettytable/', 'wikitable', $content);
//nicht getestet

  # Pipes an den Anfang in Infoboxen, dabei möglichst in Tabellen weder „||“ noch „{|“ zerstören.
  #RE: /([^\n|{])\|\n/g
  #KO: '$1\n|'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/([^\n|{])\|\n/', "$1\n|", $content);
//nicht getestet

  # Plenken
  #RE: / +([,;.:!?])/g
  #KO: '$1'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/ +([,;.:!?])/', '$1', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^ä]*)ä([^}^ä]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1a$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^ä]*)ä([^}^ä]*)\s*\}\}/', '{{DEFAULTSORT:$1a$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^Ä]*)Ä([^}^Ä]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1A$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^Ä]*)Ä([^}^Ä]*)\s*\}\}/', '{{DEFAULTSORT:$1A$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^ö]*)ö([^}^ö]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1o$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^ö]*)ö([^}^ö]*)\s*\}\}/', '{{DEFAULTSORT:$1o$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^Ö]*)Ö([^}^Ö]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1O$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^Ö]*)Ö([^}^Ö]*)\s*\}\}/', '{{DEFAULTSORT:$1O$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^ü]*)ü([^}^ü]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1u$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^ü]*)ü([^}^ü]*)\s*\}\}/', '{{DEFAULTSORT:$1u$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^Ü]*)Ü([^}^Ü]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1U$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^Ü]*)Ü([^}^Ü]*)\s*\}\}/', '{{DEFAULTSORT:$1U$2}}', $content);
//nicht getestet

  # falsche Zeichen in DEFAULTSORT
  #RE: /\{\{\s*DEFAULTSORT\s*:([^}^ß]*)ß([^}^ß]*)\s*\}\}/g
  #KO: '{{DEFAULTSORT:$1ss$2}}'
  #QA: textseite, semiautomatisch
  $content = preg_replace('/\{\{\s*DEFAULTSORT\s*:([^}^ß]*)ß([^}^ß]*)\s*\}\}/', '{{DEFAULTSORT:$1ss$2}}', $content);
//nicht getestet

  return $content;
}

function ist_textseite($page){
  //TODO
  return false;
}

function hole_pre_tags($content){
  return intern_pre_tags('hole', $content);
}

function setze_pre_tags($content){
  return intern_pre_tags('setze', $content);
}

function intern_pre_tags($funktion, $content){
  static $pre_tags = 'leer';
  $wort=
    // füge hier deinen lieblings-zufalls-string ein "3" ist schön, aber ungeeignet, da "3" in manchen artikeln vorkommt. nimm lieber diese
    //   http://random.org/strings/?num=2&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new
    // beiden und hänge sie hintereinander. also zum beispiel "vFycxauUoSwzLrvi8psAJY9fMIxc9QNoYh4xROVM".
    // "vFycxauUoSwzLrvi8psAJY9fMIxc9QNoYh4xROVM" ist ungeeignet, da er auf dieser seite vorkommt.
    // random.org ist auch geeignet, wenn du dich mal wieder irgendwo anmelden willst und dir fällt kein benutzername ein. achte aber darauf,
    // dass die zeichenkette die du auswählst nicht wie 'amok' klingt.

  if($funktion == "hole"){
    if($pre_tags != 'leer'){
      die("inter_pre_tags: hole: pre_tags war nicht leer.");
    }
    $pre_tags=array();
    $i=0;
    $regulaerer_ausdruck="!<pre>.*?</pre>!s"; // s sagt: . matcht auch \n
    while(preg_match($regulaerer_ausdruck, $content, $gefunden)){
      $pre_tags[$i] = $gefunden[0];
      $content = preg_replace($regulaerer_ausdruck, "$wort"."$i"."Z", $content, 1);
      $i++;
    }
  } else if($funktion == "setze"){
    foreach($pre_tags as $i => $pre_tag){
      $content = preg_replace("!$wort"."$i"."Z!", $pre_tags[$i], $content, 1);
    }
    $pre_tags='leer';
  } else {
    die("intern_pre_tags: fehler: parameter ($funktion)");
  }
  return $content;
}