Benutzer:Nw520/AutoReplace.Replacements.js

Aus Wikivoyage

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
//<nowiki>
window.nw520_config.autoReplace_replacements = ( window.nw520_config.autoReplace_replacements !== undefined ? window.nw520_config.autoReplace_replacements : [] ).concat( [
	// # Automatisch
	{ // Entferne überzählige Leerzeichen am Ende einer Zeile
		find: /(?<!(=|\|))( +)$/gm,
		replace: ''
	},
	{ // Schreibe das erste Wort gewisser Überschriften anfangend mit „auf“ mit Majuskel als Anfangsbuchstaben
		find: /^=== ?auf der Straße ?===$/gm,
		replace: '=== Auf der Straße ==='
	},
	{ // Schreibe das erste Wort gewisser Überschriften anfangend mit „mit“ mit Majuskel als Anfangsbuchstaben
		find: /^=== ?mit (der Bahn|dem Bus|dem Flugzeug|dem Schiff) ?===$/gm,
		replace: '=== Mit $1 ==='
	},
	{ // Entferne explizite Bildbreiten, soweit sie ∈ [200, 300]
		find: /^\[\[(?:(?<prefix>(?:[Bb]ild|[Dd]atei|[Ff]ile|[Ii]mage)):(?<filename>[^\]|]+?))\|(?:(?<pre>[^\]]+?)\|)?(?<size>[23]\d{2}px)\|?(?:|(?<post>[^\]]+?))\]\]$/gm,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			const pre = groups.pre ?? '';
			const post = groups.post ?? '';

			if ( ![
				...pre.split( '|' ),
				...post.split( '|' )
			].map( ( x ) => x.trim() ).includes( 'thumb' ) ) {
				return arguments[ 0 ];
			}

			const prefix = [ 'Bild', 'bild', 'Image', 'image' ].includes( groups.prefix ) ? 'File' : groups.prefix;

			return `[[${prefix}:${groups.filename}|${pre}${pre !== '' && post !== '' ? '|' : ''}${post}]]`;
		},
		comment: [ 'Dateien', '-explizite Breite' ]
	},
	
	// ## Automatisch » Syntax
	{ // Ersetze Unterstriche in Dateinamen durch Leerzeichen
		find: /(?<pre>(?:[Bb]ild|[Dd]atei|[Ff]ile|[Ii]mage):|Image *= *)(?<filename>[^|\]]+)(?=[|\]])/g,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			return groups.pre + groups.filename.replace( /_/g, ' ' );
		},
		trivial: true
	},
	{ // Entferne Namensraum-Angaben bei Vorlagenaufrufen
		find: /\{\{[Vv]orlage:/g,
		replace: '{{',
		comment: 'Vorlagenaufruf vereinfacht'
	},
	{ // Vereinheitliche den Namensraum bei Bildeinbindungen von „Bild“ oder „Image“ zu „File“
	  // Gemäß [[Special:Permalink/1556706#Worauf du achten solltest|Hilfe:Bilder einfügen#Worauf du achten solltest]]
		find: /\[\[ *([Bb]ild|[Ii]mage):/g,
		replace: '[[File:',
		comment: [ 'Dateien', '[[Hilfe:Bilder einfügen#Allgemeine Wiki-Syntax|Präfix]]' ]
	},

	// ## Automatisch » Typografie
	{ // Ersetze „&#x00a0;“ durch die lesbarere Alternativschreibweise „&nbsp;“
		find: /&#x00a0;/g,
		replace: '&nbsp;',
		comment: '#x00a0⇒nbsp'
	},
	{ // Ersetze Matrixmultiplikationszeichen durch Multiplikationszeichen
		find: /⨉/g,
		replace: '×',
		comment: [ 'Typografie', '×' ],
		trivial: true
	},
	{ // Ersetze „x“, welches zur Multiplikation zwischen zwei Zahlen steht, durch Multiplikationszeichen
		find: /(?<=\d) x (?=\d)/g,
		replace: ' × ',
		comment: [ 'Typografie', '×' ],
		trivial: false,
		manual: '×'
	},
	{ // ## Ziehe das schließende Anführungszeichen hinter einem Komma (amerikanischer Stil) vor das Komma
		find: /„(?<content>[^\n„“”]+),“/g,
		replace: '„$<content>“,',
		comment: [ 'Typografie', 'Anführungszeichen' ]
	},

	// ### Automatisch » Typografie » Whitespace
	{ // Füge zwischen Zahl und Maßeinheit (g, l, m, m², km, km², qm) ein schmales geschütztes Leerzeichen ein; ersetze dabei ggf. NBSPs
		find: /(?<=[\/ =,(])(?<number>\d+|\d+(?:\.\d{3})+)( |&nbsp;)?(?<unit>k?m²?|qm|g|l)(?=[.,\/?!) ]|$)/gm,
		replace: '$<number>&#x202F;$<unit>',
		comment: [ 'Typografie', 'Maßangabe' ]
	},
	{ // Füge bei „d. h.“ ein schmales geschütztes Leerzeichen ein; ersetze dabei ggf. NBSPs
		find: /(?<=[ (])d\.( |&nbsp;)?h\.(?= )/g,
		replace: 'd.&#x202F;h.',
		comment: [ 'Typografie', 'd. h.' ]
	},
	{ // Füge bei „u. a.“ ein schmales geschütztes Leerzeichen ein; ersetze dabei ggf. NBSPs und ersetze ggf. ein großes „A“ durch ein kleines
		find: /(?<=[ (])u\.( |&nbsp;)?[aA]\.(?= )/g,
		replace: 'u.&#x202F;a.',
		comment: [ 'Typografie', 'u. a.' ],
		trivial: true
	},
	{ // Füge bei „z. B.“ ein schmales geschütztes Leerzeichen ein; ersetze dabei ggf. NBSPs
		find: /(?<=[ (])z\.( |&nbsp;)?B\.(?= )/g,
		replace: 'z.&#x202F;B.',
		comment: [ 'Typografie', 'z. B.' ],
		trivial: true
	},
	{ // Füge bei Preisangaben in Euro ein schmales geschütztes Leerzeichen ein; ersetze dabei ggf. NBSPs
		find: new RegExp( '(?<number>\\d)( |&nbsp;)?€', 'gm' ),
		replace: '$<number>&#x202F;€',
		comment: [ 'Typografie', '€' ]
	},

	// ## Automatisch » Parameter/Vorlagen
	{ // Entferne bei vCard-Aufrufen leere selten verwendete Parameter
		find: /\| *(alt|comment|facebook|fax|image|mobile|name-local|skype|subtype|twitter|youtube) *= *(?=[\|}])/g,
		replace: '',
		iterative: 3
	},
	{ // Ersetze Klammern um einen Sprachvorlagenaufruf durch den Parameter `inKlammern` der Vorlage
		find: /\(\{\{(?<inner>(?<langcode>(?:[A-Za-z][a-z]{1,2}|Cop)S?)\|[^}]+)\}\}\)/g,
		replace: function() {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			if ( groups.langcode.toLowerCase() === 'abk' ) {
				return arguments[ 0 ];
			}

			return '{{' + groups.inner + '|inKlammern=ja}}';
		},
		comment: [ 'Fremdsprache', 'inKlammern' ],
		trivial: true
	},
	{ // Verschiebe Facebook-URLs im `url`-Parameter der vCard-Vorlage in den `facebook`-Parameter
		find: /(?<preamble>\{\{[vV]Card[^}]*?)(?<param>\|(?<paramname_pre>\s*)url(?<paramname_post>\s*)=(?<url_pre>\s*)(?<url>https?:\/\/[^.\s]*\.facebook\.com\/(?<facebookname>[^/?\s]+)[^\s}|]*))/gm,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			if ( groups.facebookname !== 'pages' && groups.facebookname !== 'pg' ) {
				return groups.preamble + '|' + groups.paramname_pre + 'facebook' + groups.paramname_post + '=' + groups.url_pre + decodeURIComponent( groups.facebookname );
			} else {
				return Array.from( arguments )[ 0 ];
			}
		},
		comment: [ 'vCard', 'Facebook-URL⇒Facebook-Parameter' ]
	},
	{ // Ersetze Facebook-URLs im `facebook`-Parameter der vCard-Vorlage durch den Facebook-Benutzernamen
		find: /(?<preamble>\{\{[vV]Card[^}]*?)(?<param>(?<paramkeyequal>\|\s*facebook\s*=\s*)(?<url>https?:\/\/([^.\s]*\.)?facebook\.com\/(?<facebookname>[^/?\s]+)[^\s}|]*))/gm,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			if ( groups.facebookname !== 'pages' && groups.facebookname !== 'pg' ) {
				return groups.preamble + groups.paramkeyequal + decodeURIComponent( groups.facebookname );
			} else {
				return Array.from( arguments )[ 0 ];
			}
		},
		comment: [ 'vCard', 'Facebook-URL⇒Facebook-Benutzername' ]
	},
	{ // Ersetze Twitter-URLs im `twitter`-Parameter der vCard-Vorlage durch den Twitter-Benutzernamen
		find: /(?<preamble>\{\{[vV]Card[^}]*?)(?<param>(?<paramkeyequal>\|\s*twitter\s*=\s*)(?<url>https?:\/\/([^.\s]*\.)?twitter\.com\/(?<twittername>[^/?\s]+)[^\s}|]*))/gm,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			return groups.preamble + groups.paramkeyequal + groups.twittername;
		},
		comment: [ 'vCard', 'Twitter-URL⇒Twitter-Benutzername' ]
	},
	{ // Ersetze Vorlagenaufrufe von „Autoquickbar Ort“ durch „Quickbar Ort“
		find: /\{\{ *[aA]utoquickbar Ort/g,
		replace: '{{Quickbar Ort',
		comment: [ 'Quickbar', '-auto' ]
	},

	// ## Automatisch » Sprache
	{ // Schreibe „Schweizer“ groß
	  // Gemäß § 61 Deutsche Rechtschreibung
		find: /(?<=[\/ ])schweizer(?=[.,-\/?! ])/g,
		replace: 'Schweizer',
		comment: [ 'Tippo', 'schweizer⇒Schweizer (gem. § 61 Deutsche Rechtschreibung)' ]
	},
	{ // Schreibe „wie viel“ getrennt
	  // Gemäß § 39 E2 (2) (2.4) Deutsche Rechtschreibung
		find: /(?<=[\/ ])(?<case>[Ww])ieviel(?=[.,-\/?! ])/g,
		replace: '$<case>ie viel',
		comment: [ 'Tippo', 'alte Rechtschreibung/wieviel' ],
		trivial: true
	},
	{ // Schreibe „𝑛{jährig, jährlich, mal, monatig, monatlich, stöckig, tägig, täglich, wöchentlich, wöchig} mit Bindestrich
	  // Gemäß § 40 (3) Deutsche Rechtschreibung
		find: /(?<=[\/ ])(?<n>\d+) ?(?<word>jähr(?:ig(?:e[mnrs]?)?|lich(?:e[mnrs]?)?)|monat(?:ig(?:e[mnrs]?)?|lich(?:e[mnrs]?])?)|täg(?:ig(?:e[mnrs]?)?|lich(?:e[mnrs]?)?)|stöckig(?:e[mnrs]?)|wöch(?:entlich(?:e[mnrs]?)|ig(?:e[mnrs]?)?))(?=[.,-\/?! ])/g,
		replace: '$<n>-$<word>',
		comment: [ 'Tippo', 'Zusammensetzung mit Ziffern' ],
		trivial: true
	},

	// # Manuell
	// ## Manuell » „“
	{ // Ersetze Schreibmaschinenanführungszeichen durch typografische Anführungszeichen
		find: /^(?<prefix>[^\n]*?)(?<!=)"(?<match>[\wÀ-ž'](?:[^|]*?[^ "])?)"(?!>)/gm,
		replace: function () {
			const groups = Array.from( arguments )[ arguments.length - 1 ];
			
			if ( groups.prefix.match( /^\[\[(Bild|Datei|File|Image):/i ) && !groups.prefix.includes( '|' ) ) {
				return arguments[ 0 ];
			}

			return `${groups.prefix}${groups.match}“`;
		},
		comment: [ 'Typografie', 'Anführungszeichen' ],
		manual: '„“'
	},
	
	// ## Manuell » €-Postfix
	{ // Verschiebe bei Preisspannen vorangestellte €-Zeichen hinter die zweite Zahl der Spanne
	  // Gemäß [[Special:Permalink/1505752#Währungsangaben|Wikivoyage:Maßangaben#Währungsangaben]]
		find: /€(?:&nbsp;|&#x202F;| )?0*?(?<from>(?:0|[1-9]\d*)(?:,\d{2})?) ?[-–](?: €)? ?0*?(?<to>(?:0|[1-9]\d*)(?:,\d{2})?)/g,
		replace: '$<from>–$<to>&#x202F;€',
		comment: [ '[[Wikivoyage:Maßangaben|Maßangaben]]/[[Hilfe:Angabe von Telefonnummern, Währungen und Öffnungszeiten|Nummern]]',  '€-Postfix' ],
		manual: '€-Post'
	},
	{ // Verschiebe bei Preisangaben vorangestellte €-Zeichen hinter die Zahl
	  // Gemäß [[Special:Permalink/1505752#Währungsangaben|Wikivoyage:Maßangaben#Währungsangaben]]
		find: /€(?:&nbsp;|&#x202F;| )?0*?(?<number>(?:0|[1-9]\d*)(?:,\d{2})?)/g,
		replace: '$<number>&#x202F;€',
		comment: [ '[[Wikivoyage:Maßangaben|Maßangaben]]/[[Hilfe:Angabe von Telefonnummern, Währungen und Öffnungszeiten|Nummern]]',  '€-Postfix' ],
		manual: '€-Post'
	},
	
	// ## Manuell » Koordinaten
	{ // Kürze unsinnig präzise Koordinaten (ab inklusive 7 Dezimalstellen) auf 5 Dezimalstellen
	  // Vergleiche https://xkcd.com/2170/
		find: /\|(?<predec> *(?:lat|long) *= *-?\d+)\.(?<postdec>\d{5})\d{2,}/g,
		replace: '|$<predec>.$<postdec>',
		comment: '[[d:Q66498778#P953|Koordinaten getrimmt]]',
		manual: 'Koordinaten'
	},

	// ## Manuell » vCard-Pflege
	{ // Wandel Marker zu vCards um
		find: /^(?<opener>\*+ *\{\{) ?[mM]arker ?(?<content>\|[^\n]+? *)\}\} *(?<munch>\n+(?=\n\*)|$)/gm,
		replace: '$<opener>vCard $<content>\n}}',
		comment: '[[Vorlage:vCard|vCard]]-fiziert',
		manual: 'vCard-Pflege'
	},
	{ // Kombiniere Listen von vCards, die durch Leerzeilen getrennt sind, in einer Liste.
	  // Dazu wird das schließende Doppelklammerpaar des Vorlagenaufrufs in die Leerzeile verschoben.
	  // Diese Regel ist fehleranfällig und ihr Ergebnis muss überprüft werden.
		find: /(^|\n)(\*+ *\{\{ ?[vV]Card *\|[^\n]+?) *\}\} *(?:\n+|$)(?!=)/g,
		replace: '$1$2\n}}\n',
		trivial: true,
		manual: 'vCard-Pflege',
		iterative: 3
	},
] );
//</nowiki>