Benutzer:Euku/persDaten.js
aus Wikipedia, der freien Enzyklopädie
Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen zu sehen: Mozilla/Firefox: Shift-Strg-R, Internet Explorer: Strg-F5, Opera: F5, Safari: ⌘-R (bzw. Strg-R), Konqueror: Strg-R.
/************************************************************************ * von [[:de:User:Spongo]] * 8. März 2007 <nowiki> * * ACHTUNG nicht ohne Nachkontrolle ausführen! * Insbesondere bei Russen ist auf das Datum zu achten. * * Fügt automatisch Personen-Kategorien und {{Personendaten}} ein. Wenn * Daten/Kategorien schon vorhanden sind bleiben sie bestehen bzw. * werden mitgenutzt. * * Wie man das Skript übernimmt steht auf der Diskussionseite. * * TODO: Test in anderen Browsern. Bisher nur: Firefox 2.0 * * Licence: CC-by-sa: Dieser Quellcode wurde unter den Bedingungen der Creative Commons Attribution-ShareAlike * License (http://creativecommons.org/licenses/by-sa/2.5/) (abgekürzt „cc-by-sa“) in der Version 2.5 veröffentlicht. *************************************************************************/ function addPersData() { StaatsAdj = new Array("deutsche", "britische", "französische", "polnische", "dänische", "US-amerikanische", "schweizer", "österreichische", "spanische", "japanische", "italienische", "russische", "türkische", "niederländische", "italienische", "griechische", "chinesische", "tschechische", "slowakische", "ungarische"); KatBez = new Array("Deutscher", "Brite", "Franzose", "Pole", "Däne", "US-Amerikaner", "Schweizer", "Österreicher", "Spanier", "Japaner", "Italiener", "Russe", "Türke", "Niederländer", "Italiener", "Grieche", "Chinese", "Tscheche", "Slowake", "Ungar"); // Memo: Abschnitt "Kategorie zur Staatsangehörigkeit schon drin?" updaten //regExVollstDatum = /\d\d\.?\ ?(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|(?:[012]\d|3[01]\.))\ ?(?:\d+)/; //regExDatum = /(?:\d\d\.?\ ?)?(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|(?:[012]\d|3[01]\.))?\ ?(?:\d+)/; /* name: der Name, Vorname für Personendaten, kann Umlaute und Sonderzeichen enthalten nameSort: nur für DEFAULTSORT, ohne Umlaute und Sonderzeichen */ geschlecht = name = nameSort = alias = beschreibung = gebDatum = gebOrt = sterbeDatum = sterbeOrt = staat = ''; // entsprechende Aufgabe erledigt oder schon im Artikel geschlKatErl = gebKatErl = sterbeKatErl = defaultSortErl = persDatenErl = staatsKatErl = false; // quellTextRein ist der gesäuberte Quelltext; quellText das Original quellTextRein = quellText = document.editform.wpTextbox1.value; quellTextRein = quellTextRein.replace(/\n/g, " "); // keine Umbrüche quellTextRein = quellTextRein.replace(/\<\!\-\-.*?\-\-\>/g, "") // alle Kommentare entfernen quellTextRein = quellTextRein.replace(/\{\|.*?\|\}/g, "") // alle Tabellen entfernen quellTextRein = quellTextRein.replace(/(\[\[([^\|\]]*?\|)?|\]\])/g, "") // alle [[Link|Links]] entfernen // suche möglichen Anfang offsetBeschreibung = quellTextRein.indexOf("'''"+wgTitle+"'''"); // korrekt formatierter Name und gleiches Lemma offsetBeschreibung = (offsetBeschreibung == -1 ? quellTextRein.search(/\'\'\'([^']*?)\'\'\'/) : offsetBeschreibung); // erstes fette Wort offsetBeschreibung = (offsetBeschreibung == -1 ? quellTextRein.indexOf(wgTitle) : offsetBeschreibung); // nur Lemma offsetBeschreibung = (offsetBeschreibung == -1 ? 0 : offsetBeschreibung); // nichts gefunden quellTextRein = quellTextRein.slice(offsetBeschreibung, quellTextRein.length); // den ersten Teil abschneiden // suche Geschlecht wenn nötig geschlKatErl = (quellText.search(/\[\[(Kategorie|Category)\:(Mann|Frau)(\|[^\]]*)?\]\]/gi) != -1); // Geschlechtskategorie schon drin? if (!geschlKatErl && (quellTextRein.search(/((ist|war)\ eine|\]\]in)\ /) < 250) && (quellTextRein.search(/((ist|war)\ eine|\]\]in)\ /) != -1)) geschlecht = 'w'; // Namen, Vornamen bestimmen nameArray = wgTitle.replace(/\ \(.*\)$/, "").split(" "); // " (Sportler)" aus [[Max Muster (Sportler)]] entfernen name = (nameArray.length == 1 ? nameArray[0] : nameArray[nameArray.length -1] + ","); for (i = 0; i < nameArray.length -1; ++i) name += " " + nameArray[i]; // Umlaute und andere Zeichen in lateinische umwandeln nameSort = name.replace(/ö/g,"o").replace(/Ö/g,"O").replace(/ä/g,"a").replace(/Ä/g,"A").replace(/ü/g,"u").replace(/Ü/g,"U") .replace(/ß/g,"s").replace(/ñ/g,"n").replace(/Ø/g,"O").replace(/ø/g,"o").replace(/õ/g,"o").replace(/ç/g,"c") .replace(/Ç/g,"C").replace(/É/g,"E").replace(/é/g,"e").replace(/Ó/g,"O").replace(/ó/g,"o").replace(/Í/g,"I") .replace(/í/g,"i").replace(/Ú/g,"U").replace(/ú/g,"u").replace(/Á/g,"A").replace(/á/g,"a").replace(/È/g,"e") .replace(/è/g,"e").replace(/Ò/g,"O").replace(/ò/g,"o").replace(/Ì/g,"I").replace(/ì/g,"i").replace(/Ù/g,"U") .replace(/ù/g,"u").replace(/À/g,"A").replace(/à/g,"a").replace(/č/g,"c").replace(/ő/g,"o").replace(/ń/g,"n") .replace(/ź/g,"z"); // {{Personendaten}} schon drin? persDatenErl = (quellText.search((/\{\{Personendaten/gi)) != -1); if (persDatenErl) { // nutze vorhandene Daten //beschreibung = extrahiere(/\|KURZBESCHREIBUNG\=([^|]*?)\ \|GEBURTSDATUM\=/, quellTextRein); gebDatum = extrahiere(/\|GEBURTSDATUM\=\ ?([^|]*?)\ \|GEBURTSORT\=/, quellTextRein); //gebOrt = extrahiere(/\|GEBURTSORT\=\ ?(.*?)\ \|STERBEDATUM\=/, quellTextRein); sterbeDatum = extrahiere(/\|STERBEDATUM\=\ ?([^|]*?)\ \|STERBEORT\=/, quellTextRein); //sterbeOrt = extrahiere(/\|STERBEORT\=\ ?(.*?)\ ?\}\}\=/, quellTextRein); } gebKatErl = (quellText.search(/\[\[(?:Kategorie|Category)\:Geboren\ \d{1,4}[^\]]*\]\]/gi) != -1); sterbeKatErl = (quellText.search(/\[\[(?:Kategorie|Category)\:Gestorben\ \d{1,4}[^\]]*\]\]/gi) != -1); // {{DEFAULTSORT:...}}-Baustein schon drin? defaultSortErl = (quellText.search(/\{\{DEFAULTSORT\:/i) != -1); // Kategorie zur Staatsangehörigkeit schon drin? staatsKatErl = (quellText.search(/\[\[(?:Kategorie|Category)\:(?:Deutscher|Brite|Franzose|Pole|Däne|US\-Amerikaner|Schweizer|Österreicher|Spanier|Japaner|Italiener|Russe|Türke|Niederländer|Italiener|Grieche|Chinese|Tscheche|Slowake|Ungar)[^\]]*\]\]/gi) != -1); // Beschreibung suchen beschreibung = extrahiere(/(?:(?:ist|war)|gilt\ als)\ (?:eine*|die|der)*\ *(.*?)\./, quellTextRein); // Satz beim Punkt abschneiden // Alias suchen alias = extrahiere(/(?:bürgerlicher\ Name|gebürtig|geboren\ als|bürgerlich|alias|bekannt\ als|Pseudonym\:?|eigentlich)\ *?\'\'\'?(.*?)\'\'\'?/i, quellTextRein); // Staatsangehörigkeit suchen for (i = 0; !staatsKatErl && i < StaatsAdj.length; ++i) if (beschreibung.indexOf(StaatsAdj[i]) != -1) { staat = KatBez[i]; break; } // Geburtsdaten suchen wenn nötig if ((!persDatenErl) || (persDatenErl && !gebKatErl)) { gebDatenPos = quellTextRein.search(/(\*|geb\.\ |geboren\ |von\ )*/); if ((gebDatenPos < 300) && (gebDatenPos != -1)) { tmp = quellTextRein.slice(gebDatenPos, 450); if (gebDatum.search(/\d\d\.?\ ?(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|(?:[012]\d|3[01]\.))\ ?(?:\d+)/) == -1) // bisheriges Datum ok? gebDatum = extrahiere(/(?:\(\ ?\*|geb\.|geboren|von)\ ?(\d[^;\-]*?\d\d)[ .,:;)†]/, tmp); // Datum finden if (gebDatum == "") // zweiter Versuch, Datum komplett gebDatum = extrahiere(/(?:\*|geb\.|geboren|von).{0,25}?((?:[0123]?\d)?\.?\ ?(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\ ?(?:\d+))[ .,:;)†]/, tmp); // Datum finden if (gebDatum == "") // dritter Versuch, Jahr vor Christi suchen gebDatum = extrahiere(/(?:\*|geb\.|geboren|von).{0,15}?(\d+\ (?:v\.\ Chr\.|v\.\ u\.\ Z\.))[ .,:;)†]/, tmp); // Datum finden if (gebDatum == "") // vierter Versuch, nur Jahr (n. Chr.) suchen gebDatum = extrahiere(/(?:\*|geb\.|geboren|von).{0,15}?(\d+)[ .,:;)†]/, tmp); // Datum finden if (gebOrt == "") gebOrt = extrahiere(/(?:\*|geb\.|geboren|von)\ ?\d[^;\-†]*\d\d\ (?:i[nm]|\;|\,)\ ([^\.;)]*?)[.;)†]\ ./, tmp); // Ort finden } } // Sterbedaten suchen wenn nötig if ((!persDatenErl) || (persDatenErl && !sterbeKatErl)) { strDatenPos = quellTextRein.search(/(\-\ ?\d\d+|\|gestorben\ |starb\ |bis\ )/); if ((strDatenPos < 365) && (strDatenPos != -1)) { tmp = quellTextRein.slice(strDatenPos, 450); if (sterbeDatum.search(/\d\d\.?\ ?(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|(?:[012]\d|3[01]\.))\ ?(?:\d+)/) == -1) // bisheriges Datum ok? sterbeDatum = extrahiere(/(?:\-|\|\†|gestorben\ |starb\ |bis\ )\ ?(\d[^;\-]*?\d\d)[ .,:;)]/, tmp); // Datum finden if (tmp.search(/(?:\|\†|gestorben\ |starb\ |bis\ )\ *.*?ebenda.*?(?:\)[,;. ]|[,;. ]\ )/) != -1) // TODO: begrenzung der suche sterbeOrt = gebOrt; // "ebenda" else sterbeOrt = extrahiere(/(?:\-|\|\†|gestorben\ |starb\ |bis\ )\ *?.*?\d\d[,; \)]?\ i[nm]\ ([^,;\.\)]*?)(?:\)[,;. ]|[,;. ]\ )/, tmp); // Ort finden } } // Cursor vor erste "[[Kategorie:", vor {{DEFAULTSORT}} bzw. ersten Interwikilink setzen, sonst Ende tmpPos = document.editform.wpTextbox1.value.search(/\[\[(?:Kategorie|Category)\:/); if (tmpPos == -1) { tmpPos = document.editform.wpTextbox1.value.search(/\{\{DEFAULTSORT\:/); if (tmpPos == -1) tmpPos = document.editform.wpTextbox1.value.search(/\[\[(als|ar|cs|da|el|en|es|fi|fr|fy|he|hsb|hu|it|ja|ksh|la|lb|nds|nl|no|pl|pt|ru|sk|sl|sv|tr|zh)\:/); tmpPos = (tmpPos == -1 ? quellText.length : tmpPos); } document.editform.wpTextbox1.selectionStart = tmpPos; // in Artikel einfügen if (!defaultSortErl && (nameSort != wgTitle)) insertTags('\n{{DEFAULTSORT:'+ nameSort +'}}\n','',''); if (!geschlKatErl) { if (geschlecht == "w") insertTags('[[Kategorie:Frau]]\n','',''); else // auch wenn es kein Mann ist, ist die Wahrscheinlichkeit hoch, dass es trotzdem stimmt insertTags('[[Kategorie:Mann]]\n','',''); } if ((!gebKatErl) && (gebDatum != '')) insertTags('[[Kategorie:Geboren '+ extrahiere(/(\d+)$/, gebDatum) +']]\n','',''); if ((!sterbeKatErl) && (sterbeDatum != '')) insertTags('[[Kategorie:Gestorben '+ extrahiere(/(\d+)$/, sterbeDatum) +']]\n','',''); if (staat != '') // Angehörigkeit ist klar insertTags('[[Kategorie:' + staat + ']]\n', '', ''); if (!persDatenErl) { // Cursor vor Interwikilinks setzen tmpPos = document.editform.wpTextbox1.value.search(/\[\[(als|ar|cs|da|el|en|es|fi|fr|fy|he|hsb|hu|it|ja|ksh|la|lb|nds|nl|no|pl|pt|ru|sk|sl|sv|tr|zh)\:/); if (tmpPos != -1) document.editform.wpTextbox1.selectionStart = tmpPos; insertTags('\n{{Personendaten\n'+ '|NAME=' + name + '\n'+ '|ALTERNATIVNAMEN='+ alias +'\n'+ '|KURZBESCHREIBUNG=' + beschreibung + '\n'+ '|GEBURTSDATUM=' + gebDatum + '\n'+ '|GEBURTSORT=' + gebOrt + '\n'+ '|STERBEDATUM=' + sterbeDatum + '\n'+ '|STERBEORT=' + sterbeOrt + '\n}}\n','',''); } //andere Kategorien glätten: da {{DEFAULTSORT drin ist, kann die klassische Sortiervorgabe entfernt werden quellText = document.editform.wpTextbox1.value; tmp = quellText.replace(/\[\[(?:Kategorie|Category)\:([^|\]]*?)\|[^\]]*\]\]/gi, "[[Kategorie:$1]]"); if (quellText != tmp) // nur zuweisen bei Aenderungen, da der Fokus verloren geht document.editform.wpTextbox1.value = tmp; document.editform.wpSummary.value += " +Personendaten"; document.editform.wpTextbox1.focus(); } /* * gibt die erste zu speichernde Klammer des regulaeren Ausdrucks aus also "$1" */ function extrahiere(regEx, text) { return (regEx.exec(text) == null ? "" : regEx.exec(text)[1]); } // </nowiki>