Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
/**
Config for [[w:User:PerfektesChaos/js/WikiSyntaxTextMod|WSTM]]

<nowiki>
**/
/* jshint curly:false, strict:true*/

(function () {
'use strict';
var ns = mw.config.get('wgNamespaceNumber'),
// var user = mw.config.get('wgUserName');

// var RE_URL = "(https?://)(www[1-9]?\\.)?([^:/|]+)(:\\d+)?/?([^ }<>\n]*)";
romDig = '[IVXLCDM]', // roman digit
refSatzzeichen = [
	[
		['[ \n,.]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>)\\.'],
		['.$1', false, '$1']
	],
	[
		['[ \n,.]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>),'],
		[',$1', false, '$1']
	],
	[
		['[ \n]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>);'],
		[';$1', false, '$1']
	],
	[
		['[ \n]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>):'],
		[':$1', false, '$1']
	],
	[
		['[ \n]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>)\\?'],
		['?$1', false, '$1']
	],
	[
		['[ \n]*(<ref\\b[^<\n]+)', '.+', '([^<>\n]*</ref>)!'],
		['!$1', false, '$1']
	]
],

Striche = String.fromCharCode(45, 173, 8208, 8209, 8210, 8211, 8212, 8213, 8722),

B_Jahr = '(?:(?:1[789]\\d{2}|20[0-3]\\d)|\\((?:1[789]\\d{2}|20[0-3]\\d)\\))',

cfg = { mod: {
	tested: true,
	plain: [
		['(\\n[*#:;]+)([^*#:;\\s\\|\\}])', '$1 $2'], // Leerzeichen nach Listen
		// ['\u00A0', "&nbsp;"], //unsichtbare NBSPs sichtbar machen
		// ['\u00AD', "&shy;"], //unsichtbare SHYs sichtbar machen
		['&#160;', ' '], // verstecktes, geschütztes Leerzeichen
		['(\u2010|\u2011)', '-'], // HYPHEN
		// TEST
		['([^-\\w](?:1\\d|20)\\d{2})\\s*[-‐‑‒—―⁃─━−]\\s*((?:1\\d|20)\\d{2}[^-\\w])', '$1–$2'], // Zeiträume mit Bis-Strich schreiben
		['(\\([^-0-9]*(1\\d|20)\\d{2})[-—−]((1\\d|20)\\d{2}[^-0-9]*\\))', '$1–$3'], // Bis-Strich
		[' - (\\D)', ' – $1'], // Gedankenstrich
		['(\\D) - ', '$1 – '], // Minus ist hoffentlich hiermit ausgeschlossen

		// TEST table-headcell
		['^\\| *(style="?text-align: ?center"? *\\|) *(\'{3})([^\n\|]+)\\2$', '! $3'],

		[' -, ', ' –, '],

		['<sup>[-–](\\d*)</sup>', '<sup>−$1</sup>'], // Negativer Exponent

		// veraltetes HTML (nocht weitgehend ungestestet)
		['<strike', '<s'],
		['</strike\\s*>', '</s>'],
		['<tt\\b', '<code'],
		['</tt\\s*>', '</code>'], // not yet recommended
		['<big\\b', '<span style="font-size:large;"'], ['</big\\s*>', '</span>'], // not until [[phab:T40487]] is solved
		['<center', '<div class="center"'],
		['</center\\s*>', '</div>'], // Achtung: von Hand korrigieren bei Tabellen etc.
		['<font\\s+color\\s*=\\s*("?)([^>]*?)\\1\\s*>', '<span style="color:$2;">'],
		['<font\\s+size\\s*=\\s*("?)\\+\\d+\\1\\s*>', '<span style="font-size:large;">'],
		['<font\\s+size\\s*=\\s*("?)-\\d+\\1\\s*>', '<span style="font-size:small;">'],
		['<font\\b', '<span'], // Achtung: evtl. von Hand korrigieren
		['</font\\s*>', '</span>'],
		['<span\\s+style="font-size:\\s*(small|[78]\\d%);?"\\s*>([^<\n]+)</span>', '<small>$2</small>'],

		['^({\\|[^\\n|]*)align\\s?=\\s?("?)\\s?right\\2', '$1class="floatright"<!--Attention: check!-->'], // Achtung Test, bei Tabellen etc.
		['\\balign\\s?=\\s?("?)\\s?(\\w*)\\1', 'style="text-align:$2;"'],
		['\\bvalign\\s?=\\s?("?)\\s?(\\w*)\\1', 'style="vertical-align:$2;"'],
		['\\bbgcolor\\s?=\\s?("?)\\s?([#\\w]*)\\1', 'style="background:$2;"'],

		['\\bstyle="([^"]*)"\\s+style\\s*=\\s*"\\s*', 'style="$1 '], // doppelte style zusammenfassen

		[' , ?', ', '], // Komma verrutscht?
		['\\n{3}', '\n\n'], // Doppelte Leerzeilen?
		[' {2,}', ' '], // Doppelte Leerzeichen?

		// Apostroph, Quelle </nowiki>[[Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/replace/plain/typogr#Apostroph]]<nowiki>
		["([a-zéäöü])['´`′]s\\b", '$1’s'],
		["([hsßtxz])['´`′] ", '$1’ '],
		["([a-z])['´`′](ne?)\\b", '$1’$2'],
		[" ['´`′]([ns])\\b", ' ’$1'],
		["([a-zéäöüß])['´`′]sch", '$1’sch'],

		['(<ref\\b[^>\n]*)\/>([?!;:,.])', '$2$1\/>'], // wiederholendes ref nach Satzzeichen

		// Fußnotenzeichen, Quelle </nowiki>[[Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/replace/plain/typogr#udef.ref]]<nowiki>
		//* (PC) Lückenschluss zwischen <ref> und dem vorhergehenden Zeichen/Wort
		// ["(([^=]) *\n +| +)<ref\\b", "$2<ref"],
		['([^=|]\n?) +<ref\\b', '$1<ref'],
		['([^,.?!;:“])(<ref\\b[^>\n]*>[^<\n]+</ref>)([,.?!;:])', '$1$3$2'], // es folgt also einem Fußnotenzeichen kein Satzzeichen
		//* Lücke nach </ref> und <ref name=hhhh group=gggg />
		['(</ref>|<ref [^\n]+> /)([^ \n<,.;:)])', '$1 $2'],

		//* Leerzeichen nach </ref> und <ref name=hhhh group=gggg />
		// ["(</ref>|<ref [^\n]+> /)([^ \n<,.;:])",  "$1 $2"],

		// Avoid HTML ( according to standard format )
		["<div style=[\"']clear:both;?[\"']></div>", '{{-}}'],

		// Webcolor shorthand
		['#([0-9A-F])\\1([0-9A-F])\\2([0-9A-F])\\3', '#$1$2$3', 'i'],

		// (PC) Steht im Text sowohl vor als auch nach der Fußnote ein Satzzeichen,
		// wird das führende belassen und das nachfolgende entfernt:
		['([,.?!;:“]<ref\\b[^>\n]*>[^<\n]+</ref>)[,.?!;:]', '$1'],
		// ["([.,;:!?])(<ref(?:[^<\n]+)</ref>|<ref(?:(?: name=| group=)\"[^/\n<>\"]+\")+(?:>| />))([.,;:!?])", "$1$2"],
		// Verschieben des Satzzeichens vom ref-Ende vor die ref-Anweisung
		['([^.,;:!?])(<ref(?:[^<\n]+)</ref>|<ref(?:(?: name=| group=)"[^/\n<>"]+")+(?:>| />))([.,;:!?])', '$1$3$2'],

		// Whitespaces on ref
		['(<ref(?: (?:name|group) *= *"[^\n<>]*"){0,2}) +((?:/ )?>)', '$1$2'],
		// <ref name="Peter" Meier="???">
		['<ref name="(.+)" (.+)="[\?]{3}">', '<ref name="$1 $2">'],
		// <ref name="???????" Ernst Roth''>
		["<ref name=\"(?:\\?)+\" ([^'<>\n]+)''( /)?>", '<ref name="$1"$2>'],
		// <ref name="???????">
		['<ref name="(?:\\?)+">', '<ref>'],
		// ["\\.\n<ref(>| name| group)",  ".<ref$1"],
		// == Einzelnachweise ==
		['\n\n<references />', '\n<references />'],

		// von  User:RonMeier
		['\\.[“”]\\.', '.“'], // Wenn ein Zitat mit einem Punkt endet, steht nach dem abschließenden Anführungszeichen kein Punkt

		// sinnfreie <br /> entfernen
		['<br ?/?>\n\n', '\n\n'],
		['<br ?/?>(\n[|*#:;])', '$1'],
		['<br ?/?>', '<br>'],

		// Bis-Strich bei Jahreszahlen
		['([^=] +' + B_Jahr + ') ?[' + Striche + '] ?(' + B_Jahr + '[^0-9(])', '$1–$2'],
		['\\((' + B_Jahr + ') ?[' + Striche + '] ?(' + B_Jahr + ')\\)', '($1–$2)'],

		//* Normierung Quadrat/Kubik(kilo/dezi/zenti/milli)meter
		['([/0-9])( |&nbsp;|&thinsp;|/)*([Kkcdm]?m)2([- .,;/)\n])', '$1$2$3²$4'],
		['([/0-9])( |&nbsp;|&thinsp;|/)*([Kkcdm]?m)3([- .,;/)\n])', '$1$2$3³$4']
	],

	wikilink: [
		[
			['\\[\\[', '(.*\\b' + romDig + '+\\.)', '\\]\\]\\.'],
			[false, '$1', ']]']
		],
		// Datum entlinken
		[
			['([b-mo-z] |\n([*]+ )?|\\, | ?[' + Striche + '] ?|[(])\\[\\[', '^(1\\d{3}|20[01]\\d)$[^\n]', '\\]\\]'],
			['$1', false, '', true]
		]
	],

	url: [],
	template: [{
		detect: { title: 'COAInformation' },
		// https://de.wikipedia.org/wiki/Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/replace/template#style
		format: { style: {
			indent: 1,
				// lastline: true,
			later: true,
			leave: true,
			linebreak: true,
			lineup: true
		} }
	}]
} };

cfg.portlet = {
	scope: 'p-tb',
	stick: '#t-whatlinkshere'
};

cfg.mod.wikilink = cfg.mod.wikilink.concat(refSatzzeichen);
cfg.mod.url = cfg.mod.url.concat(refSatzzeichen);

var text = $('#wpTextbox1').val(),
	 quotations = [
			['=( *)"([^"\\n]*)"', '=$1\t§§\t$2\t§§\t']
		]; // TEST alle Anführungszeichen maskieren
if (ns === 4) {
	if (/header\/de/.test(text)) { // de
		quotations = quotations.concat([
			['([->\(\\s](?:\'\'+)?)["„](\\w[^"“]*\\w)["”]((?:\'\'+)?[-.,;:!?<\)\\s])', '$1„$2“$3'],
			[' ["„]([^"“]+)["”](\\W)', ' „$1“$2'],
			[" ['‚,]([^'‚‘’]+)['’](\\W)", ' ‚$1‘$2'] // de vorsichtig auch einfache behandeln
		]);
	} else {
		quotations = quotations.concat([ // en
			['([->\(\\s](?:\'\'+)?)["“](\\w[^"“]*\\w)["”]((?:\'\'+)?[-.,;:!?<\)\\s])', '$1“$2”$3'],
			[' ["“]([^"”]+)["”“](\\W)', ' “$1”$2'],
			[" '([^'‘]+)'(\\W)", ' ‘$1’$2']
		]);
	}
}
	/* else if (ns === 6 || ns === 10) {
	cfg.mod.template = [
		{ detect: { title: "de" },
		rename: { params: [
			["([->\(\\s](?:''+)?)[\"„](\\w[^\"“]*\\w)[\"”]((?:''+)?[-.,;:!?<\)\\s])", '$1„$2“$3'],
			[' [\"„]([^"“]+)[\"”](\\W)', ' „$1“$2'],
			[" ['‚,]([^'‚‘’]+)['’](\\W)", ' ‚$1‘$2']
			]
		},
		{ detect: { title: "en" },
		rename: { params: [	['([->\(\\s](?:\'\'+)?)[\"“](\\w[^\"“]*\\w)[\"”]((?:\'\'+)?[-.,;:!?<\)\\s])', '$1“$2”$3'],
			[' [\"“]([^"”]+)[\"”“](\\W)', ' “$1”$2'],
			[" '([^'‘]+)'(\\W)", ' ‘$1’$2']
			]
		}
	]
}*/
quotations.push(['\\t§§\\t', '"']); // typographische Anführungszeichen zurückverwandeln
cfg.mod.plain = cfg.mod.plain.concat(quotations);

function mergeConfig(WSTM) { // extend overwrites duplicates... so merge.
	if (WSTM.config.mod.plain)
		$.merge(cfg.mod.plain, WSTM.config.mod.plain);
	if (WSTM.config.mod.hook)
		cfg.mod.hook = WSTM.config.mod.hook; // save before extend (no deep copy)
	$.extend(WSTM.config, cfg);
	mw.libs.WikiSyntaxTextMod = WSTM;
	if (ns === 6) {
		if (!WSTM.config.load)
			WSTM.config.load = {};
			// WSTM.config.load.inhibit = 0;
		WSTM.config.diffPage = false;
	}
}

var WSTM = mw.libs.WikiSyntaxTextMod; // .cfg predefinied in global.js

if (WSTM && WSTM.config) {
	return mergeConfig(WSTM);
} else {
	$(document).on('loadWSTMConfig', function (e, name, WSTM) {
		if (name === 'WSTM') return mergeConfig(WSTM);
	});
}
console.warn('Global WSTM.config not exists!?!');
// mw.libs.WikiSyntaxTextMod.config.mod.plain = [ [' ', ' '] ]
}());
// EOF </nowiki>