/**
 * Aus ]
 * Einbinden mit    importScript("Benutzer:Revolus/Datei-syntax-updater.js");   in deine ]
 */

function rev_syntax() {
	var eb = document.getElementById("wpTextbox1");
	if(!eb || eb.getAttribute("readonly")) return;
	
	function vllt(s) { return "(?:" + s + ")?"; }
	function trim(s) { return "\\s*" + s + "\\s*"; }
	function link(s) { return "\\\\]"; }
	function extl(s) { return "\\"; }
	function oder(a) { return "(?:" + a.join("|") + ")"; }
	
	var plainZeichen = "\\{\\}]";
	var htmlZeichen  = "\\{\\}]";
	
	var dateiPattern    = "*"+ oder(", "", "", ""]) + "*:*" + "(" + plainZeichen + "+?)*";
	var extlinkPattern  = extl(plainZeichen+"+" + vllt(" "   + plainZeichen+"*"));
	var wikilinkPattern = link(plainZeichen+"+" + vllt("\\|" + plainZeichen+"*"));
	var paramPattern    = oder();
	
	var innerRegex = new RegExp(trim("(" + paramPattern + "*?)") + "(\\||$)", "g");
	var outerRegex = new RegExp(link(dateiPattern + vllt("\\|(" + vllt(oder()+"*") + ")")), "g");
	
	function bildHandler(_, file, attrs) {
		var nowiki = false;
		var texts = ;
		
		var attribute = {
			"miniatur":  false,
			"gerahmt":   false,
			"rahmenlos": false,
			"rand":      false,
			"links":     false,
			"rechts":    false,
			"ohne":      false,
			"zentriert": false,
			
			"pixel":     "",
			"seite":     "",
			"hochkant" : "",
			"verweis":   "",
			"alternativtext": ""
		};
		
		function deepReplace(_, str, delim) {
			if((str.length <= 0) || nowiki) {
				return "";
			}
			if(str.indexOf("<nowiki") >= 0) {
				nowiki = true;
				return "";
			}
			
			switch(str) {
				case("thumb"): case("thumbnail"): case("miniatur"):
					attribute = true;
					return "";
				case("left"): case("links"):
					attribute = true;
					return "";
				case("right"): case("rechts"):
					attribute = true;
					return "";
				case("none"): case("ohne"):
					attribute = true;
					return "";
				case("center"): case("centre"): case("zentriert"):
					attribute = true;
					return "";
				case("frame"): case("framed"): case("enframed"): case("gerahmt"):
					attribute = true;
					return "";
				case("frameless"): case("rahmenlos"):
					attribute = true;
					return "";
				case("border"): case("rand"):
					attribute = true;
					return "";
				case("upright"): case("hochkant"):
					attribute = true;
					return "";
				default: {
					var e = /^(page|seite|upright|hochkant|alt(?:ernativtext)?|link|verweis)=\s*(.*?)\s*$/.exec(str);
					if(e) {
						switch(e) {
							case("page"):
							case("seite"):
								// ignorieren: ich konnte noch nicht herausfinden,
								// was das überhaupt ist ...
								break;
							case("upright"):
							case("hochkant"):
								attribute = "hochkant=" + e;
								return "";
							case("alt"):
							case("alternativtext"):
								attribute = "alternativtext=" + e;
								return "";
							case("link"):
							case("verweis"):
								attribute = "verweis=" + e;
								return "";
						}
					}
					e = /^\s*(\d*x?\d+px)\s*$/.exec(str);
					if(e) {
						attribute = e;
						return "";
					}
				}
			}
			texts.push(str);
			return "";
		}
		
		if(!attrs || (attrs.length == 0)) {
			return "]";
		} else {
			attrs.replace(innerRegex, deepReplace);
			if(nowiki) {
				return "]";
			} else {
				var mitte = "";
				if(attribute) {
					attribute = false;
				}
				for(var i in attribute) {
					var mitteAlt = mitte;
					switch(typeof(attribute)) {
						case("boolean"): if(attribute) {
							mitte += "|" + i;
						} break;
						case("string"): if(attribute.length > 0) {
							mitte += "|" + attribute;
						} break;
					}
				}
				var rechts = "";
				for(var i = 0; i < texts.length; ++i) {
					rechts += "|" + texts;
				}
				return "]";
			}
		}
	}
	
	eb.value = eb.value.replace(outerRegex, bildHandler);
}

if(
	(mw.config.get('wgAction') === "edit") &&
	(mw.config.get('wgNamespaceNumber') === 0) &&
	("x".replace(/x/, function() {
		 /* schlechte IE-Versionen verstehen das evtl. nicht */
		return "y";
	}) === "y")
) {
	$(rev_syntax);
}