Benutzer:Euku/persDaten.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Euku
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 12. Februar 2021 um 12:41 Uhr durch imported>Ladsgroup(567577) (Maintenance: Replacing legacy global variable (phab:T72470)).
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
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/************************************************************************
* von [[:de:User:Euku]]
* 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.
*
* Läuft gut in Firefox 3.6
*
* Lizenz: CC-by-sa: Dieser Quellcode wurde unter den Bedingungen der Creative Commons Attribution-ShareAlike
* Lizenz: (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 {{SORTIERUNG, 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("'''"+mw.config.get('wgTitle')+"'''"); // korrekt formatierter Name und gleiches Lemma
offsetBeschreibung = (offsetBeschreibung == -1 ? quellTextRein.search(/\'\'\'([^']*?)\'\'\'/) : offsetBeschreibung); // erstes fette Wort
offsetBeschreibung = (offsetBeschreibung == -1 ? quellTextRein.indexOf(mw.config.get('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 = mw.config.get('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);
// {{SORTIERUNG:...}}-Baustein schon drin?
defaultSortErl = (quellText.search(/\{\{(DEFAULTSORT|SORTIERUNG)\:/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 {{SORTIERUNG}} bzw. ersten Interwikilink setzen, sonst Ende
tmpPos = document.editform.wpTextbox1.value.search(/\[\[(?:Kategorie|Category)\:/);
if (tmpPos == -1) {
tmpPos = document.editform.wpTextbox1.value.search(/\{\{(DEFAULTSORT|SORTIERUNG)\:/);
if (tmpPos == -1)
tmpPos = document.editform.wpTextbox1.value.search(/\[\[(ab|af|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 != mw.config.get('wgTitle')))
insertTags('\n{{SORTIERUNG:'+ nameSort +'}}\n','','');
if (staat != '') // Angehörigkeit ist klar
insertTags('[[Kategorie:' + staat + ']]\n', '', '');
if ((!gebKatErl) && (gebDatum != ''))
insertTags('[[Kategorie:Geboren '+ extrahiere(/(\d+)$/, gebDatum) +']]\n','','');
if ((!sterbeKatErl) && (sterbeDatum != ''))
insertTags('[[Kategorie:Gestorben '+ extrahiere(/(\d+)$/, sterbeDatum) +']]\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 (!persDatenErl) {
// Cursor vor Interwikilinks setzen
tmpPos = document.editform.wpTextbox1.value.search(/\[\[(ab|af|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 Kategorieangaben bereinigen da {{SORTIERUNG 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>