Last active
November 11, 2024 19:59
-
-
Save fichtennadel/2fd33e35a34fcdd9ada68bb7133048c4 to your computer and use it in GitHub Desktop.
Binnen-I be gone
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Binnen-I be gone | |
// @namespace https://gist.github.com/fichtennadel/2fd33e35a34fcdd9ada68bb7133048c4 | |
// @description Removes BinnenI | |
// @version 2.1 | |
// @license CC by Attribution-Noncommercial-No Derivative Works 3.0 Unported (http://creativecommons.org/licenses/by-nc-nd/3.0/) | |
// @include *://d*standard.at/* | |
// @include *://*.d*standard.at/* | |
// ==/UserScript== | |
// from https://gist.github.com/fichtennadel/2fd33e35a34fcdd9ada68bb7133048c4/raw/BinnenI.user.js | |
(function () { | |
//Suche ob Doppelformen auf der Seite vorhanden sind | |
if (document.body != null && document.body.textContent.search(/( und |innen | oder | bzw)/) != -1) { | |
var textnodes = document.evaluate("//*[not(self::textarea) and not(self::script) and not(self::style) and not(descendant-or-self::code)]/text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); | |
for (var i = 0; i < textnodes.snapshotLength; i++) { | |
var node = textnodes.snapshotItem(i); | |
var s = node.data; | |
s = s.replace(/\bsie\/er|er\/sie\b/ig, "er"); | |
s = s.replace(/\bihr\/ihm|ihm\/ihr\b/ig, "ihm"); | |
s = s.replace(/\bsie\/ihn|ihn\/sie\b/ig, "ihn"); | |
s = s.replace(/\bihre?[rnms]?\/(seine?[rnms]?)|(seine?[rnms]?)\/ihre?[rnms]?\b/ig, "$1$2"); | |
s = s.replace(/\jede[rnms]?\/(jede[rnms]?)\b/ig, "$1"); | |
s = s.replace(/\b(deren\/dessen|dessen\/deren)\b/ig, "dessen"); | |
s = s.replace(/\bdiese[r]?\/(diese[rnms])|(diese[rnms])\/diese[r]?\b/ig, "$1$2"); | |
s = s.replace(/\b((von |für |mit )?((d|jed|ein|ihr|zum|sein)(e[rn]?|ie) )?([a-zäöüß]{4,20} )?)([a-zäöüß]{2,})innen( und | oder | & | bzw.? |\/)\2?((d|jed|ein|ihr|zum|sein)(e[rmns]?|ie) )?\6?(\7(e?n?))\b/ig, "$1$12"); //Bürgerinnen und Bürger | |
s = s.replace(/\b(von |für |mit |als )?(((zu )?d|jed|ein|ihr|zur|sein)(e|er|ie) )?(([a-zäöüß]{4,20}[en]) )?([a-zäöüß]{2,})(en?|in)( und | oder | & | bzw.? |\/)(\1|vom )?((((zu )?d|jed|ein|ihr|zum|sein)(e[nrms])? )?(\7[nrms]? )?(\8(e?(s|n|r)?)))\b/ig, "$1$12"); //die Bürgerin und der Bürger | |
s = s.replace(/\b((von |für |mit |als )?((d|jed|ein|ihr|zum|sein)(e[rnms]?|ie) )?([a-zäöüß]{4,20}[en] )?([a-zäöüß]{2,})(e?(n|s|r)?))( und | oder | & | bzw.? |\/)(\2|von der )?(((von |zu )?d|jed|ein|ihr|zur|sein)(e[rn]?|ie) )?\6?\7(in(nen)?|en?)\b/ig, "$1"); //Bürger und Bürgerinnen, Bürger und Bürgerin | |
node.data = s; | |
} | |
} | |
//Suche ob Binnen-Is auf der Seite vorhanden sind | |
if (document.body != null && document.body.textContent.search(/[a-zäöüß]{2}((\/-?|_|\*| und -)?In|(\/-?|_|\*| und -)in|\([Ii]n*(en\)|\)en)?)(?!(\w{1,2}\b)|[cf]o|stance|te[gr]|dex|dia|dia|put|vent|vit)|[A-ZÄÖÜß]{3}(\/-?|_|\*)IN[(NEN)\b]|\b(frau\/m|man\/frau)\b/) != -1) { //SchülerIn,Schüler/in,Schüler(in),SCHÜLER/IN | |
var textnodes = document.evaluate("//*[not(self::textarea) and not(self::script) and not(self::style) and not(descendant-or-self::code)]/text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); | |
for (var i = 0; i < textnodes.snapshotLength; i++) { | |
var node = textnodes.snapshotItem(i); | |
//Untersuche Text genau auf alles was gefiltert werden soll, zur Weiterverarbeitung... | |
if (node !== null && /[a-zäöüß]{2}((\/-?|_|\*| und -)?In|(\/-?|_|\*| und -)in(n\*en)?|\([Ii]n*(en\)|\)en)?)(?!(\w{1,2}\b)|[cf]o|stance|te[gr]|dex|dia|dia|put|vent|vit)|[A-ZÄÖÜß]{3}(\/-?|_|\*)IN\b|der\/|die\/|den\/|dem\/|ein[Ee]?\/|zur\/|zum\/|sie|eR |em?\/e?r |em?\(e?r\) |frau\/m|man+\/frau/.test(node.nodeValue)) { | |
var s = node.data; | |
//Prüfung auf Ersetzung | |
if (s.search(/[a-zäöüß](\/-?|_|\*| und -)in(n(\*|\))en)?\b/i) || s.search(/[a-zäöüß]\(in/i) != -1) { | |
s = s.replace(/(\/-?|_|\*)inn\*?en\b/ig, "Innen"); //Schüler/innen | |
s = s.replace(/([a-zäöüß])\(inn(en\)|\)en)/i, "$1Innen"); //Schüler(innen) | |
s = s.replace(/ und -innen\b/ig, ""); //und -innen | |
s = s.replace(/(\/-?|_|\*)in\b/ig, "In"); //Schüler/in | |
s = s.replace(/([a-zäöüß])\(in\)/i, "$1In"); //Schüler(in) | |
} | |
//Plural | |
if (s.search(/[a-zäöüß]Innen/i) != -1) { | |
//Prüfung auf Sonderfälle | |
if (s.search(/(chef|gött|verbesser|äur|äs)innen/i) != -1) { | |
s = s.replace(/(C|c)hefInnen/g, "$1hefs"); | |
s = s.replace(/([Gg]ött|verbesser)(?=Innen)/g, "$1er"); | |
s = s.replace(/äurInnen/g, "auern"); | |
s = s.replace(/äsInnen/g, "asen"); | |
} | |
s = s.replace(/\b(([Dd]en|[Aa]us|[Aa]ußer|[Bb]ei|[Dd]ank|[Gg]egenüber|[Ll]aut|[Mm]it(samt)?|[Nn]ach|[Ss]amt|[Vv]on|[Zz]u) ([a-zäöüß]+en )?[A-ZÄÖÜ][a-zäöüß]+)erInnen\b/g, "$1ern"); //unregelmäßiger Dativ bei Wörtern auf ...erInnen | |
s = s.replace(/(er?|ER?)Innen/g, "$1"); | |
s = s.replace(/([Aa]nwält|[Ää]rzt|e[iu]nd|rät|amt|äst|würf|äus|[ai(eu)]r|irt)Innen/g, "$1e"); | |
s = s.replace(/([nrtsmdfghpbklvwNRTSMDFGHPBKLVW])Innen/g, "$1en"); | |
} | |
//Singular | |
if (s.search(/[a-zäöüß]In/) != -1 && s.search(/([Pp]lug|[Ll]og|[Aa]dd|Linked)In\b/) == -1) { | |
//Prüfung auf Sonderfälle | |
if (s.search(/amtIn|stIn\B|verbesser(?=In)/) != -1) { | |
s = s.replace(/verbesser(?=In)/g, "verbesserer"); | |
s = s.replace(/amtIn/g, "amter"); | |
s = s.replace(/stIn\B/g, "sten"); //JournalistInfrage | |
} | |
//Prüfung auf Umlaute | |
if (s.search(/[äöüÄÖÜ][a-z]{0,3}In/) != -1) { | |
s = s.replace(/ä(?=s(t)?In|tIn|ltIn|rztIn)/g, "a"); | |
s = s.replace(/ÄrztIn/g, "Arzt"); | |
s = s.replace(/ö(?=ttIn|chIn)/g, "o"); | |
s = s.replace(/ü(?=rfIn)/g, "u"); | |
s = s.replace(/ündIn/g, "und"); | |
s = s.replace(/äurIn/g, "auer"); | |
} | |
s = s.replace(/([skgvwzSKGVWZ]|ert|[Bb]rit|[Kk]und|ach)In(?!(\w{1,2}\b)|[cf]o|stance|te[gr]|dex|dia|dia|put|vent|vit)/g, "$1e"); //ExpertIn, BritIn, KundIn, WachIn | |
s = s.replace(/([nrtmdbplhfcNRTMDBPLHFC])In(?!(\w{1,2}\b)|[cf]o|stance|te[gr]|dex|dia|dia|put|vent|vit)/g, "$1"); | |
} | |
//Artikel | |
if (s.search(/\/der |\/die |ein(\/|\()e|zu[rm] /i) != -1) { | |
s = s.replace(/\b(die\/der|der\/die)\b/ig, "der"); | |
s = s.replace(/\b(den\/die|die\/den)\b/ig, "den"); | |
s = s.replace(/\b(des\/der|der\/des)\b/ig, "des"); | |
s = s.replace(/\b(der\/dem|dem\/der)\b/ig, "dem"); | |
s = s.replace(/\bein(\/e |\(e\) |E )/g, "ein "); | |
s = s.replace(/\beine(\/n |\(n\) |N )/g, "einen "); | |
s = s.replace(/\b(zum\/zur|zur\/zum)\b/ig, "zum"); | |
} | |
//Stuff | |
if (s.search(/eR |em?\/e?r |em?\(e?r\) /) != -1) { | |
s = s.replace(/e\/r|e\(r\)|eR\b/g, "er"); //jede/r,jede(r),jedeR, | |
s = s.replace(/em\(e?r\)|em\/r\b/g, "em"); //jedem/r | |
s = s.replace(/er\(e?s\)|es\/r\b/g, "es"); //jedem/r | |
} | |
//man | |
if (s.search(/\/(frau|man|mensch)/) != -1) { | |
s = s.replace(/\b(frau|man+|mensch)+\/(frau|man+|mensch|\/)*/, "man"); | |
} | |
node.data = s; }} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Damit es auf allen Internetseiten funktioniert habe ich dem Userscript folgende Zeile hinzugefügt:
"// @include *"
Aber leider sind immer noch einige innen im Text vorhanden z.B. auf dieser Internetseite:
https://www.gentechnikfreie-regionen.de/
Aus dem Wort "Bäuerinnen" wird "Bäuer".
Ein Beispielsatz wie er nun etwas sonderlich angezeigt wird:
"Die Gründung einer Gentechnikfreien Region kommt vor allem durch die Aktivitäten von Land- und Forstwirte, Gärtnerinnen und Imkerinnen zustande."
Ich verwende den Firfox-Fork Iceraven auf einem LineageOS-Gerät. Vielleicht wäre es neben einem Update des Userscripts auch möglich das Add-on zur von diesem Browser verwendeten Sammlung der unterstützten Erweiterungen hinzuzufügen?