text:
User:Edward the nice person/editor.js

//JsMwApi documentation is at http://en.wiktionary.org/wiki/User_talk:Conrad.Irwin/Api.js function JsMwApi (api_url, request_type) { if (!api_url) {		if (typeof(true) === 'undefined' || true == false) throw "Local API is not usable."; api_url = wgScriptPath + "/api.php"; }	if (!request_type) {		if (api_url.indexOf('http://') == 0 || api_url.indexOf('https://') == 0) request_type = "remote"; else request_type = "local"; }	function call_api (query, callback) {		if(!query || !callback) throw "Insufficient parameters for API call"; query = serialise_query(query); if(request_type == "remote") request_remote(api_url, query, callback, call_api.on_error || default_on_error); else request_local(api_url, query, callback, call_api.on_error || default_on_error); }	var default_on_error = JsMwApi.prototype.on_error || function (xhr, callback, res) {		if (typeof(console) != 'undefined') console.log([xhr, res]); callback(null); }	function get_xhr {		try{ return new XMLHttpRequest; }catch(e){ try { return new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try { return new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ throw "Could not create an XmlHttpRequest"; }}}	}	function request_local (url, query, callback, on_error) {		var xhr = get_xhr; xhr.open('POST', url + '?format=json', true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(query); xhr.onreadystatechange = function {			if (xhr.readyState == 4) {				var res; if (xhr.status != 200) res = {error: { code: '_badresponse', info: xhr.status + " " + xhr.statusText }};				else {					try {						res = JSON.parse("("+xhr.responseText+")"); }					catch(e) {						res = {error: { code: '_badresult', info: "The server returned an incorrectly formatted response" }};					}				}				if (!res || res.error || res.warnings) on_error(xhr, callback, res); else callback(res); }		}	}	function request_remote (url, query, callback, on_error) {		if(! window.__JsMwApi__counter) window.__JsMwApi__counter = 0; var cbname = '__JsMwApi__callback' + window.__JsMwApi__counter++; window[cbname] = function (res) {			if (res.error || res.warnings) on_error(null, callback, res); else callback(res); }		var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', url + '?format=json&callback=window.' + cbname + '&' + query); document.getElementsByTagName('head')[0].appendChild(script); }	function serialise_query (obj) {		var amp = ""; var out = ""; if (String(obj) === obj) {			out = obj; }		else if (obj instanceof Array) {			for (var i=0; i < obj.length; i++) {				out += amp + serialise_query(obj[i]); amp = (out == '' || out.charAt(out.length-1) == '&') ? '' : '&';			}		}		else if (obj instanceof Object) {			for (var k in obj) {				if (obj[k] === true) out += amp + encodeURIComponent(k) + '=1'; else if (obj[k] === false) continue; else if (obj[k] instanceof Array) out += amp + encodeURIComponent(k) + '=' + encodeURIComponent(obj[k].join('|')); else if (obj[k] instanceof Object) throw "API parameters may not be objects"; else out += amp + encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]); amp = '&'; }		}		else if (typeof(obj) !== 'undefined' && obj !== null) {			throw "An API query can only be a string or an object"; }		return out; }	// Make JSON.parse work var JSON = (typeof JSON == 'undefined' ? new Object : JSON); if (typeof JSON.parse != 'function') JSON.parse = function (json) { return eval('(' + json + ')'); }; // Allow .prototype. extensions if (JsMwApi.prototype) {		for (var i in JsMwApi.prototype) {			call_api[i] = JsMwApi.prototype[i]; }	}	return call_api; } JsMwApi.prototype.page = function (title) { function call_with_page (params, callback) {		call_with_page.api([params, {title: title, titles: title}], callback); }	call_with_page.api = this; call_with_page.edit = function (params, edit_function) {		if (typeof(params) == 'function') {			edit_function = params; params = null; }		params = [params, { action: "query", prop: ["info", "revisions"], intoken: "edit", rvprop: ["content", "timestamp"] }];		call_with_page(params, function (res)		{			if (!res || !res.query || !res.query.pages)				return edit_function(null);			// Get the first (and only) page from res.query.pages			for (var pageid in res.query.pages) break;			var page = res.query.pages[pageid];			var text = page.revisions ? page.revisions[0]['*'] : '';			function save_function (ntext, params, post_save)			{				if (typeof(params) == 'function')				{					post_save = params;					params = null;				}				params = [params, {					action: "edit",					text: ntext,					token: page.edittoken,					starttimestamp: page.starttimestamp,					basetimestamp: (page.revisions ? page.revisions[0].timestamp : false)				}];				call_with_page(params, post_save);			}			edit_function(text, save_function, res);		}); }	call_with_page.parse = function (to_parse, callback) {		if (typeof to_parse == "function") {			callback = to_parse; to_parse = null; }		var params = (to_parse == null ? {page: title} : {title: title, text: to_parse}); call_with_page.api([{action: "parse", pst: true}, params], function (res)		{			if (!res || !res.parse || !res.parse.text)				callback(null, res);			else				callback(res.parse.text['*'], res);		}) }	call_with_page.parseFragment = function (to_parse, callback) {		call_with_page.parse(" \n" + to_parse + " ", function (parsed, res)		{			callback(parsed ? parsed.replace(/^ \n?/,).replace(/(\s*\n)?<\/div>\n*(\s*)?$/,) : parsed, res);		}) }	return call_with_page; } /** * Storage of "string" preferences. */ function CookiePreferences (context) {	//Repeated calls with the same context should get the same preferences object. if (arguments.callee[context]) return arguments.callee[context]; else arguments.callee[context] = this; /**	 * Change the value of a preference and store into a cookie. */	this.set = function (name, value) {		if (value === null || storage[name] === value) return; storage[name] = value; updateCookie; }	/**	 * Get the value of a preference from the cookie or default *	 * If the preference isn't set, return the second argument or undefined. */	this.get = function (name, def) {		if (storage[name]) return storage[name]; else if (defaults[name]) return defaults[name]; else return def; }	/**	 * let the default for get(name) be value for this session */	this.setDefault = function(name, value) {		defaults[name] = value; }	var storage = {}; var defaults = {}; // Save storage into the cookie. function updateCookie {		var value = ""; for (var name in storage) {			value += '&' + encodeURIComponent(name) + "=" + encodeURIComponent(storage[name]); }		setCookie('preferences' + context, value) }	// Load storage from the cookie. // NOTE: If you wish to update the cookie format, both loading and storing // must continue to work for 30 days. function updateStorage {		var value = getCookie('preferences' + context, value) || ''; var pairs = value.split('&'); for (var i=1; i < pairs.length; i++) {			var val = pairs[i].split('='); if (storage[val[0]] === val[1]) continue; storage[val[0]] = val[1]; }	}	//__init__ updateStorage; } /** * A generic page editor for the current page. * * This is a singleton and it displays a small interface in the top left after * the first edit has been registered. * * @public * this.page * this.addEdit * this.error * */ function Editor {	//Singleton if (arguments.callee.instance) return arguments.callee.instance else arguments.callee.instance = this; // @public - the JsMwApi object for the current page this.page = JsMwApi.page(wgPageName); // get the current text of the article and call the callback with it // NOTE: This function also acts as a loose non-re-entrant lock to protect currentText. this.withCurrentText = function(callback) {		if (callbacks.length == 0) {			callbacks = [callback]; for (var i=0; i 0) {			return callbacks.push(callback); }		callbacks = [callback]; thiz.page.edit(function (text, _save)		{			if (text === null)				return thiz.error("Could not connect to server");			currentText = originalText = text;			saveCallback = _save;			for (var i=0; i<callbacks.length; i++)			{				callbacks[i](currentText);			}			callbacks = [];		}); }	// A decorator for withCurrentText function performSequentially(f) {		return (function 		{			var the_arguments = arguments;			thiz.withCurrentText(function {				f.apply(thiz, the_arguments); });		});	}	// add an edit to the editstack function addEdit(edit, node, fromRedo) {		withPresenceShowing(false, function 		{			if (node)			{				nodestack.push(node);				node.style.cssText = "border: 2px #00FF00 dashed;"			}			if (! fromRedo)				redostack = [];			var ntext = false;			try			{				ntext = edit.edit(currentText);				if (ntext && ntext != currentText)				{					edit.redo;					currentText = ntext;				}				else					return false;			}			catch (e)			{				this.error("ERROR:" + e);			}			editstack.push(edit);		}); }	this.addEdit = performSequentially(addEdit); // display an error to the user this.error = function (message) { 		if (!errorlog) {			errorlog = newNode('ul',{style: "background-color: #FFDDDD; margin: 0px -10px -10px -10px; padding: 10px;"}); withPresenceShowing(true, function (presence)			{				presence.appendChild(errorlog);			}); }		errorlog.appendChild(newNode('li', message)); }	var thiz = this; // this is set incorrectly when private functions are used as callbacks. var editstack = []; // A list of the edits that have been applied to get currentText var redostack = []; // A list of the edits that have been recently undone. var nodestack = []; // A lst of nodes to which we have added highlighting var callbacks = {}; // A list of onload callbacks (initially .length == undefined) var originalText = ""; // What was the contents of the page before we fiddled? var currentText = ""; // What is the contents now? var saveCallback; // The callback returned by the api's edit function to save. var errorlog; // The ul for sticking errors in. var savelog; // The ul for save messages. //Move an edit from the editstack to the redostack function undo {		if (editstack.length == 0) return false; var edit = editstack.pop; redostack.push(edit); edit.undo; var text = originalText; for (var i=0; i < editstack.length; i++) {			var ntext = false; try {				ntext = editstack[i].edit(text); }			catch (e) {				thiz.error("ERROR:" + e); }			if (ntext && ntext != text) {				text = ntext; }			else {				editstack[i].undo; editstack = editstack.splice(0, i); break; }		}		currentText = text; return true; }	this.undo = performSequentially(undo); //Move an edit from the redostack to the editstack function redo {		if (redostack.length == 0) return; var edit = redostack.pop; addEdit(edit, null, true); }	this.redo = performSequentially(redo); function withPresenceShowing(broken, callback) {		if (arguments.callee.presence) {			arguments.callee.presence.style.display = "block"; return callback(arguments.callee.presence); }		var presence = newNode('div',{'style':"position: fixed; top:0px; left: 0px; background-color: #00FF00; z-index: 10;padding: 30px;"}) //Fix fixed positioning for IE6/ /*@cc_on @if (@_jscript_version <= 5.6) presence.style.cssText = "position: absolute; top: expression((dummy = (document.documentElement.scrollTop || document.body.scrollTop || 0)) + 'px'); background-color: #00FF00; z-index: 10000; padding: 30px;" @end @*/		window.setTimeout(function {			presence.style.backgroundColor = "#CCCCFF";			presence.style.padding = "10px";		}, 400); presence.appendChild(newNode('div',{'style':"position: relative; top:0px; left:0px; margin: -10px; color: #0000FF;cursor:pointer;", click:performSequentially(close)},"X")) document.body.insertBefore(presence, document.body.firstChild); var contents = newNode('p', {style: 'text-align: center'},			newNode('b', "Page Editing"), newNode('br')); if (!broken) {			contents.appendChild(newNode('button',"Save Changes", {'click': save})); contents.appendChild(newNode('br')); contents.appendChild(newNode('button',"Undo", {'click': thiz.undo})); contents.appendChild(newNode('button', "Redo", {'click':thiz.redo})); }		presence.appendChild(contents); arguments.callee.presence = presence; callback(presence); }	// Remove the button function close {		while (undo) ;		withPresenceShowing(true, function (presence)		{			presence.style.display = "none";			if (errorlog)			{				errorlog.parentNode.removeChild(errorlog);				errorlog = false;			}		}); }	//Send the currentText back to the server to save. function save {		thiz.withCurrentText(function 		{			if (editstack.length == 0)				return;			var cleanup_callbacks = callbacks;			callbacks = [];			var sum = {};			for (var i=0; i<editstack.length; i++)			{				sum[editstack[i].summary] = true;				if (editstack[i].after_save)					cleanup_callbacks.push(editstack[i].after_save);			}			var summary = "";			for (var name in sum)			{				summary += name + " ";			}			editstack = [];			redostack = [];			var saveLi = newNode('li', 'Saving:' + summary + "...");			withPresenceShowing(false, function (presence) {				if (! savelog) {					savelog = newNode('ul', {style: "background-color: #DDFFDD; margin: 0px -10px -10px -10px; padding: 10px;"}); presence.appendChild(savelog); }				savelog.appendChild(saveLi); if (originalText == currentText) return thiz.error("No changes were made to the page."); else if (!currentText) return thiz.error("ERROR: page has become blank."); });			originalText = currentText;			var nst = []			var node;			while (node = nodestack.pop)			{				nst.push(node);			}			saveCallback(currentText, {summary: summary + "(Assisted)"}, function (res) {				if (res == null) return thiz.error("An error occurred while saving."); try { saveLi.appendChild(newNode('span', newNode('b', " Saved "), newNode('a', {'href': wgScript + 						'?title=' + encodeURIComponent(mw.config.get('wgPageName')) + 						'&diff=' + encodeURIComponent(res.edit.newrevid) +						'&oldid=' + encodeURIComponent(res.edit.oldrevid)}, "(Show changes)"))); }catch(e){ if (res.error) {						thiz.error("Not saved: " + String(res.error.info)); }					else {						thiz.error(newNode('p',String(e))); }				}				for (var i=0; i < nst.length; i++) nst[i].style.cssText = "background-color: #0F0;border: 2px #0F0 solid;"; window.setTimeout(function {					var node;					while (node = nst.pop)						node.style.cssText = "";				}, 400); // restore any callbacks that were waiting for currentText before we started for (var i=0; i < cleanup_callbacks.length; i++) thiz.withCurrentText(cleanup_callbacks[i]); });		});	} } var util = { getVanillaIndexOf: function (str, text, pos) {		if (!pos) pos = 0; var cpos = 0, tpos = 0, wpos = 0, spos = 0; do {			cpos = text.indexOf('', pos) + 3; else if (pos == wpos) pos = text.indexOf(' ', pos) + 9; else if (pos == tpos) //FIXME pos = text.indexOf('}}', pos) + 2; } while (pos < Infinity) return -1; },	validateNoWikisyntax: function(field, nonempty) {		return function(txt, error) {			if(/[\[\{\|#\}\]]/.test(txt)) return error("Please don't use wiki markup ([]{}#|) in the " + field +"."); if(nonempty && !txt) return error("Please specify a " + field + "."); return txt; }	},	escapeRe: function(txt) {		return txt.replace(/([\\{}(\|)[\].?*+])/g, "\\$1"); },	// pos is a position in the line containing the gloss getWikitextGloss: function (txt, pos) {		var g_start = txt.lastIndexOf('\n{'+'{trans-top', pos) + 1; var g_end = txt.indexOf('\n', pos); var g_line = txt.substr(g_start, g_end - g_start); g_line = g_line.replace("{"+"{trans-top}}", "{"+"{trans-top|Translations}}"); return g_line.replace(/\{\{trans-top\|(.*)\}\}/, "$1"); },	// get [start_pos, end_pos] of position of wikitext for trans_table containing node in text getTransTable: function (text, node, recursive) {		var gloss = util.getTransGloss(node); var pos = 0; var transect = []; while(pos > -1) {			pos = util.getVanillaIndexOf('{'+'{trans-top', text, pos+1)	// }} if (pos > -1 && util.matchGloss(util.getWikitextGloss(text, pos), gloss)) {				transect.push(pos); }		}		if (transect.length > 1) {			var poss = transect; transect = []; for (var i=0; i 1 && !recursive) transect = util.tieBreakTransTable(text, transect, node); }		if (transect.length == 1) {			pos = transect[0]; pos = util.getVanillaIndexOf("\n", text, pos) + 1; var endpos = text.indexOf('{'+'{trans-bottom}}', pos); if (endpos > -1 && pos > 0) return [pos, endpos]; }		return false; },	// try to narrow down the correct poss if multiple matching trans tables tieBreakTransTable: function (text, poss, node) {		if (node.nodeName.toLowerCase == 'div') {			while (node && !(node.className && node.className.indexOf('NavFrame') > -1)) node = node.parentNode; var nodes = node.getElementsByTagName('table'); if (! nodes.length) return poss; node = nodes[0]; }		else {			while (node && node.nodeName.toLowerCase != 'table') node = node.parentNode; }		var tables = document.getElementsByTagName('table'); var before_count = 0; var after_count = 0; var is_found = false; for (var i=0; i < tables.length; i++) {			if (tables[i].className.indexOf('translations') >= 0) {				var gloss = util.getTransGloss(tables[i]); if (gloss == "Translations to be checked") continue; if (tables[i] == node) {					is_found = true; continue; }				var pos = util.getTransTable(text, tables[i], true); if (pos) {					for (var j=0; j < poss.length; j++) {						if (poss[j] == pos) return util.tieBreakTransTable(poss.splice(j, 1), node); }				}				else {					var matched = 0; for (var j=0; j < poss.length; j++) {						if (util.matchGloss(util.getWikitextGloss(text, poss[j]), gloss) &&							 util.matchGloss(gloss, util.getWikitextGloss(text, poss[j]))) {							matched++; }					}					if (matched == poss.length) {						if (is_found) after_count++; else before_count++; }				}			}		}		if (before_count + 1 + after_count == poss.length) return [poss[before_count]]; else return poss; },	matchGloss: function (line, gloss) {		if (gloss.match(/^ *$/)) return !!(line.match(/\{\{trans-top\| *\}\}/) || line.match(/^ *$/)); var words = gloss.split(/\W+/); var pos = 0; for (var i=0; i < words.length; i++) {			pos = line.indexOf(words[i], pos); if (pos == -1) return false; }		return pos > -1; },	//User:Karelklic getTransGlossText: function (node) { var ret = ''; var children = node.childNodes; for (var i=0; i -1) ret += util.getTransGlossText(children[i]); else if (ret.match(/\w$/)) //Prevent new words from being created across node boundaries ret += " "; }		// all characters except a-zA-Z0-9 are changed to spaces return ret.replace(/\W/g, ' '); },	getTransGloss: function (ul) {		var node = ul; while (node && node.className.indexOf('NavFrame') == -1) node = node.parentNode; if (!node) return ''; var children = node.childNodes; for (var i=0; i< children.length; i++) {			if(children[i].className && children[i].className.indexOf('NavHead') > -1) return util.getTransGlossText(children[i]); }		return ''; },	isTrreq: function (li) {		var spans = li.getElementsByTagName('span'); return (spans && spans.length > 0 && spans[0].className.indexOf("trreq") > -1) } }; /** * A small amount of common code that can be usefully applied to adder forms. * * An adder is assumed to be an object that has: * * .fields A object mapping field names to either validation functions used *         for text fields, or the word 'checkbox' * * .createForm  A function  that returns a newNode('form') to be added to the *             document (by appending to insertNode) * * .onsubmit  A function (values, register (wikitext, callback)) that accepts *           the validated set of values and processes them, the register *           function accepts wikitext and a continuation function to be  *            called with the result of rendering it. * * Before onsubmit or any validation functions are called, but after running * createForm, a new property .elements will be added to the adder which is a * dictionary mapping field names to HTML input elements. * * @param {editor} The current editor. * @param {adder} The relevant adder. * @param {insertNode} Where to insert this in the document. * @param {insertSibling} Where to insert this within insertNode. */ function AdderWrapper (editor, adder, insertNode, insertSibling) {	var form = adder.createForm var status = newNode('span'); form.appendChild(status); if (insertSibling) insertNode.insertBefore(form, insertSibling); else insertNode.appendChild(form); adder.elements = {}; //This is all because IE doesn't reliably allow form.elements['name'] for (var i=0; i< form.elements.length; i++) {		adder.elements[form.elements[i].name] = form.elements[i]; }	form.onsubmit = function {		try {			var submit = true; var values = {} status.innerHTML = ""; for (var name in adder.fields) {				if (adder.fields[name] == 'checkbox') {					values[name] = adder.elements[name].checked ? name : false; }				else {					values[name] = adder.fields[name](adder.elements[name].value || '', function (msg) 					{						status.appendChild(newNode('span',{style:'color: red'}, msg, newNode('br'))); 						return false					}); if (values[name] === false) submit = false; }			}			if (!submit) return false; var loading = newNode('span', 'Loading...'); status.appendChild(loading); adder.onsubmit(values, function (text, callback)			{				editor.page.parseFragment(text, function (res) {					if (!res) return loading.appendChild(newNode('p', {style: 'color: red'}, "Could not connect to the server.")); callback(res); status.removeChild(loading); });			});  		}		catch(e) {			status.innerHTML = "ERROR:" + e.description; return false; }		return false; } } // An adder for translations on en.wikt function TranslationAdders (editor) {	function TranslationLabeller (insertDiv) {		var original_span; var adder_form; var initial_value; var edit_button; var editing = false; var adderInterface = { 'fields': { 'gloss': function (txt, error) { return util.validateNoWikisyntax('gloss', true)(txt, error) } },			'createForm': function {				var thisId = "a" + String(Math.random).replace(".",""); return adder_form = newNode('form', {style:'display: inline', width: 'auto', click: kill_event}, 					newNode('label', {'for': thisId}, "Gloss: "),					newNode('input', {type: 'text', name:'gloss', value: initial_value, style: 'width: 50%', title: 'Insert a summary of the relevant definition', id: thisId}),					newNode('input', {type: 'submit', name: 'preview', value: 'Preview'}),					newNode('a', {href: '/wiki/Help:Glosses'}, 'Help?!')					); },			'onsubmit': function (values, render) {				render(values.gloss, function (new_html) {					if (editing)						toggle_editing(false);					var old_html = original_span.innerHTML;					editor.addEdit({ 'undo': function { original_span.innerHTML = old_html; if(!editing) toggle_editing;}, 'redo': function { original_span.innerHTML = new_html; if(editing) toggle_editing;}, 'edit': function (text) { return perform_edit(text, values.gloss) }, 'summary': 'tgloss:"' + (values.gloss.length > 50 ? values.gloss.substr(0, 50) + '...' : values.gloss + '"') }, original_span);				}); }		};		// The actual modification to the wikitext function perform_edit(wikitext, gloss) {			var pos = util.getTransTable(wikitext, insertDiv)[0] - 4; var g_start = wikitext.lastIndexOf('\n{'+'{trans-top', pos) + 1; var g_end = wikitext.indexOf('}}\n', pos) + 2; if (g_start == 0 || wikitext.substr(g_start, g_end - g_start).indexOf("\n") > - 1) {				editor.error("Could not find translation table."); return wikitext; }			else {				return wikitext.substr(0, g_start) + '{'+'{trans-top|' + gloss + '}}' + wikitext.substr(g_end); }		}		// Don't open and close box when interacting with form. function kill_event(e) {			if (e && e.stopPropagation) e.stopPropagation; else window.event.cancelBubble = true; }		// What to do when the +/- button is clicked. function toggle_editing {			if (editing) {				adder_form.style.display = "none"; original_span.style.display = "inline"; editing = false; return; }			editing = true; edit_button.innerHTML = "Loading..."; editor.withCurrentText(function (currentText)			{				var pos = util.getTransTable(currentText, insertDiv);				edit_button.innerHTML = '±';				if (!pos)					return editor.error("Could not find translation table");				var gloss_line = currentText.substr(currentText.lastIndexOf('\n', pos[0] - 2) + 1);				gloss_line = gloss_line.substr(0, gloss_line.indexOf('\n'));				initial_value = gloss_line.replace(/^\{\{trans-top(\|(.*)|)\}\}\s*$/,"$2");				if (initial_value.indexOf("\n") > 0)					return editor.error("Internal error: guess spanning multiple lines");				if (!original_span)				{					original_span = newNode('span', {'class':'wt-edit-recurse'});					for (var i=0; i<insertDiv.childNodes.length; i++)					{						var child = insertDiv.childNodes[i];						if (child != edit_button && (!child.className || child.className != 'NavToggle'))						{							original_span.appendChild(insertDiv.removeChild(child)); i--; }					}					insertDiv.appendChild(original_span); new AdderWrapper(editor, adderInterface, insertDiv, original_span); }				original_span.style.display = "none"; adder_form.style.display = "inline"; });		}		edit_button = newNode('a', '±', {href: '#', click: function (e) { 			if (e && e.preventDefault) e.preventDefault; kill_event(e); toggle_editing; return false; }, title:"Edit table heading", style:"padding:2px; margin-left: -5px;"});		insertDiv.insertBefore(edit_button, insertDiv.firstChild.nextSibling);	}	function TranslationAdder (insertUl)	{		// Hippietrail		var langmetadata = new LangMetadata ;		this.fields = {			lang: function (txt, error)			{				if (txt == 'en') return error("Please choose a foreign language. (fr, es, aaa)")				if (/^[a-z]{2,3}(-[a-z\-]{1,7})?$/.test(txt)) return txt;				return error("Please use a language code. (fr, es, aaa)")			},			word: function (txt, error)			{				if (txt == '{'+'{trreq}}')					return txt;				if (txt.indexOf(',') == -1 || forceComma)				{					forceComma = false;					return util.validateNoWikisyntax('translation', true)(txt, error);				}				if (prefs.get('comma-knowledge', 'none') == 'none')				{					return error(newNode('span',						"You can only add one translation at a time. If this is one translation that contains a comma, you can ", newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function 							{								forceComma = true;								inputForm.onsubmit;								prefs.set('comma-knowledge', 'guru')							}}, "add it by clicking here."))) }				else {					var msg = newNode('span',						newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function {								prefs.set('comma-knowledge', 'none') try{ msg.parentNode.removeChild(msg); } catch(e) {} editor.undo }}, "Please click undo"), " if you were trying to create a list of translations in one go, this is currently not supported."); error(msg) return txt; }			},			qual: util.validateNoWikisyntax('qualifier'), tr: util.validateNoWikisyntax('transcription'), alt: util.validateNoWikisyntax('page name'), sc: function (txt, error) {				if (txt && !/^((?:[a-z][a-z][a-z]?-)?[A-Z][a-z][a-z][a-z]|polytonic|unicode)$/.test(txt)) return error(newNode('span', "Please use a ", newNode('a',{href: '/wiki/Category:Script templates'},"script template"), "(e.g. fa-Arab, Deva, polytonic)")) if (!txt) txt = prefs.get('script-' + thiz.elements.lang.value, langmetadata.guessScript(thiz.elements.lang.value) || ''); if (txt == 'Latn') txt = ''; return txt; },			nested: util.validateNoWikisyntax('nested'), m: 'checkbox', f: 'checkbox', n: 'checkbox', c: 'checkbox', p: 'checkbox' };		this.createForm = function {			var controls = { lang: newNode('input', {size:4, type:'text', name:'lang', value:prefs.get('curlang',''), title:'The two or three letter ISO 639 language code'}), transliteration: newNode('span', newNode('a', {href: '/wiki/Wiktionary:Transliteration'}, "Transliteration"), ": ", 									 newNode('input', {name: "tr", title: "The word transliterated into the Latin alphabet."}), " (e.g. ázbuka for азбука)"), qualifier: newNode('p', "Qualifier: ", newNode('input', {name: 'qual', title: "A qualifier for the word"}), " (e.g. literally, formally, slang)"), display: newNode('p',"Page name: ", newNode('input', {name: 'alt', title: "The word with all of the dictionary-only diacritics."}), " (e.g. amo for amō)"), script: newNode('p', newNode('a', {href: '/wiki/Category:Script_templates'},"Script template"),": ", 					newNode('input', {name: 'sc', size: 6, title: "The script template to render this word in."}), "(e.g. Cyrl for Cyrillic, Latn for Latin)", newNode('br')), nested: newNode('p', "Nesting: ", newNode('input', {name: 'nested', title: "The nesting of this language"}), " (e.g. Norwegian/Nynorsk)"), gender_m: newNode('span',newNode('input', {type: 'checkbox', name: 'm'}), 'masc. '), gender_f: newNode('span', newNode('input', {type: 'checkbox', name: 'f'}), 'fem. '), gender_n: newNode('span', newNode('input', {type: 'checkbox', name: 'n'}), 'neuter '), gender_c: newNode('span', newNode('input', {type: 'checkbox', name: 'c'}), 'common\u00A0gender '), plural: newNode('span', newNode('input', {type: 'checkbox', name: 'p'}), 'plural ', newNode('br')) };			controls.gender = newNode('p', controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c, controls.plural); langInput = controls.lang; var showButton = newNode('span',{'click': function 			{				if (!advancedMode)				{					advancedMode = true;					showButton.innerHTML = " Less";				}				else				{					advancedMode = false;					showButton.innerHTML = " More";				}				updateScriptGuess.call(langInput, true);			}, 'style':"color: #0000FF;cursor: pointer;"}, advancedMode ? " Less" : " More"); function autoTransliterate { if (thiz.elements.word.value == '{'+'{trreq}}') thiz.elements.alt.value = '' else thiz.elements.alt.value = langmetadata.generateAltForm(thiz.elements.lang.value, thiz.elements.word.value) || ''; }			function updateScriptGuess (preserve) { preserve = (preserve === true); //show all arguments function show {					for (var i=0; i<arguments.length; i++) {						if (arguments[i].nodeName.toLowerCase == 'p') arguments[i].style.display = "block"; else arguments[i].style.display = "inline"; }				}				//hide all arguments function hide {					for (var i=0; i < arguments.length; i++) arguments[i].style.display = "none"; }				//if the first argument is false hide the remaining arguments, otherwise show them. function toggle (condition) {					if (condition) //eww... show.apply(this, [].splice.call(arguments, 1, arguments.length - 1)); else hide.apply(this, [].splice.call(arguments, 1, arguments.length - 1)); }				if (!preserve) langInput.value = langmetadata.cleanLangCode(langInput.value); var guess = prefs.get('script-' + langInput.value, langmetadata.guessScript(langInput.value || '')); if (!preserve) {					if (guess) thiz.elements.sc.value = guess; else thiz.elements.sc.value = ''; thiz.elements.nested.value = langmetadata.getNested(langInput.value || ''); autoTransliterate; }				var lang = langInput.value; if (!advancedMode) {					var g = langmetadata.getGenders(lang); if (!lang) {						hide(controls.gender); }					else if (g == undefined) {						show(controls.gender,controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c); }					else {						toggle(g.indexOf('m') > -1, controls.gender); toggle(g.indexOf('m') > -1, controls.gender_m); toggle(g.indexOf('f') > -1, controls.gender_f); toggle(g.indexOf('n') > -1, controls.gender_n); toggle(g.indexOf('c') > -1, controls.gender_c); }					var p = langmetadata.hasPlural(lang); toggle(p !== false, controls.plural); toggle(g || p, controls.gender); toggle(guess && guess != 'Latn', controls.transliteration); var alt = langmetadata.needsAlt(lang); toggle(alt === true, controls.display); hide(controls.qualifier, controls.nested); //only in more hide(controls.script); //should be in less when array returned from .getScripts }				else {					show(controls.gender, controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c,						controls.plural, controls.transliteration, controls.qualifier, controls.display,						controls.script, controls.nested); }			} 			//In browsers other than IE this can be in the newNode function above langInput.onchange = updateScriptGuess; window.setTimeout(function {updateScriptGuess.call(langInput)}, 0); inputForm = newNode('form',						newNode('p', newNode('a',{href:"/wiki/User_talk:Conrad.Irwin/editor.js#Usage"},"Add translation"),' ', langInput, newNode('b',': '), newNode('input', {'name': 'word', size:20, change:autoTransliterate}), newNode('input',{'type': 'submit', 'value':'Preview translation'}), showButton ), 						controls.gender,						controls.transliteration,						controls.display,						controls.qualifier,						controls.script,						controls.nested					) return inputForm; }		this.onsubmit = function (values, render) {			// Use (no) for Bokmal per WT:ANO var wikt_lang = values.lang; if (wikt_lang == 'nb') wikt_lang = 'no'; var wikitext; if (values.word.indexOf('{'+'{trreq') == 0) wikitext = '{'+'{trreq|' + '{'+'{subst:' + values.lang + '|l=}}}}' else wikitext = '{'+'{subst:' + values.lang + '}}: ' + (values.qual? '{'+'{qualifier|' + values.qual + '}} ' : '') + '{'+'{t' + (langmetadata.hasWiktionary(wikt_lang) ? '' : 'ø') + '|' + (wikt_lang) + '|' + (values.alt ? values.alt : values.word) + (values.m ? '|m' : '') + (values.f ? '|f' : '') + (values.n ? '|n' : '') + (values.c ? '|c' : '') + (values.p ? '|p' : '') + (values.tr ? '|tr=' + values.tr : '') + ((values.alt && values.alt != values.word) ? '|alt=' + values.word : '') + (values.sc ? '|sc=' + values.sc : '') + '}}'; render(wikitext, function (html) { registerEdits(values, wikitext, html)}); if (!this.balancer) this.balancer = new TranslationBalancer(editor, insertUl.parentNode.parentNode.parentNode); }		var thiz = this; var prefs = new CookiePreferences('EditorJs'); var langInput; var inputForm; var advancedMode = prefs.get('more-display', 'none') != 'none'; var forceComma = false; //Reset elements to default values. function resetElements {			if (prefs.get('more-display', 'none') != advancedMode ? 'block' : 'none') prefs.set('more-display', advancedMode ? 'block' : 'none'); //named for compatibility thiz.elements.word.value = thiz.elements.tr.value = thiz.elements.alt.value = thiz.elements.qual.value = ''; thiz.elements.m.checked = thiz.elements.f.checked = thiz.elements.n.checked = thiz.elements.c.checked = thiz.elements.p.checked = false; prefs.set('curlang', thiz.elements.lang.value); if ((thiz.elements.sc.value || 'Latn') != (prefs.get('script-'+thiz.elements.lang.value, langmetadata.guessScript(thiz.elements.lang.value) || 'Latn'))) {				prefs.set('script-'+thiz.elements.lang.value, thiz.elements.sc.value); thiz.elements.lang.update; }		}		// This is onsubmit after the wikitext has been rendered to give content function registerEdits (values, wikitext, content) {			var li = newNode('li',{'class': 'trans-'+values.lang}); li.innerHTML = content; var lang = getLangName(li); var summary = 't+' + values.lang + ':| values.word) + ''; var insertBefore = null; var nextLanguage = null; var nestedHeading, nestedLang; var nestedLang; if (values.nested.indexOf('/') > -1) {				nestedLang = values.nested.replace(/.*\//, ''); nestedHeading = values.nested.replace(/\/.*/,''); if (nestedHeading == '') nestedHeading = lang; content = content.replace(/.*: /, nestedLang + ": "); wikitext = wikitext.replace("subst:", "").replace(/.*: /, nestedLang + ": "); }			else { 				nestedHeading = values.nested; nestedLang = lang; }			var nestedWikitext = "\n* " + nestedHeading + ":\n*: " + wikitext; function addEdit (edit, span) {				editor.addEdit({					'undo': function 					{						edit.undo;						if (thiz.elements.word.value == "" && thiz.elements.tr.value == "" && thiz.elements.alt.value == "" && thiz.elements.qual.value == "")						{							var fields = ["lang","word","alt","qual","tr","sc"];							var cb = "mnfcp".split("");							for (var i=0; i < fields.length; i++)							{								thiz.elements[fields[i]].value = values[fields[i]];							}							for (var i=0; i < cb.length; i++)							{								thiz.elements[fields[i]].checked = values[fields[i]];							}						}					},					'redo': function 					{ 						edit.redo;						var fields = ["lang","word","alt","qual","tr","sc"];						for (var i=0; i < fields.length; i++)						{							if (thiz.elements[fields[i]].value != values[fields[i]])								return;						}						resetElements;					},					'edit': edit.edit,					'summary': summary				}, span); }			if (lang) {				//Get all li's in this table row. var lis = []; var ls = insertUl.parentNode.parentNode.getElementsByTagName('li'); for (var j=0; j < ls.length; j++) lis.push(ls[j]); ls = insertUl.parentNode.parentNode.getElementsByTagName('dd'); for (var j=0; j < ls.length; j++) lis.push(ls[j]); for (var j=0; j < lis.length; j++) {					if (lis[j].getElementsByTagName('form').length > 0) continue; var ln = getLangName(lis[j]); if (ln == lang) {						if (values.word == '{'+'{trreq}}') { addEdit({								'redo': function {},								'undo': function  {},								'edit': function  {									return editor.error("Can not add a translation request for a language with translations");								}							}); return resetElements; }						var span = newNode('span'); var parent = lis[j]; if (util.isTrreq(parent)) {							span.innerHTML = content; var trspan = parent.getElementsByTagName('span')[0]; addEdit({								'redo': function { parent.removeChild(trspan); parent.appendChild(span); },								'undo': function  { parent.removeChild(span); parent.appendChild(trspan); },								'edit': getEditFunction(values, wikitext, ln, values.lang, true, function (text, ipos) {									//Converting a Translation request into a translation var lineend = text.indexOf('\n', ipos); return text.substr(0, ipos) + wikitext + text.substr(lineend); })							}, span); return resetElements; }						else {							if (parent.getElementsByTagName('ul').length + parent.getElementsByTagName('dl').length == 0) {								span.innerHTML = ", " + content.substr(content.indexOf(':') + 1); addEdit({									'redo': function { parent.appendChild(span) },									'undo': function  { parent.removeChild(span) },									'edit': getEditFunction(values, wikitext, ln, values.lang, false, function (text, ipos) {												 //We are adding the wikitext to a list of translations that already exists. var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + "," + wt + text.substr(lineend); })								}, span); return resetElements; }							else {								var node = parent.firstChild; var hastrans = false; while (node) {									if (node.nodeType == 1) {										var nn = node.nodeName.toUpperCase; if (nn == 'UL' || nn == 'DL') {											// If we want to use the dialectical nesting for orthographical nesting // then we need to skip this (otherwise perfect) match. if (!hastrans && nestedHeading == ln) {												node = node.nextSibling; continue; }											span.innerHTML = (hastrans ? ", ": " ") + content.substr(content.indexOf(':') + 1); addEdit({												'redo': function { parent.insertBefore(span, node) },												'undo': function  { parent.removeChild(span) },												'edit': getEditFunction(values, wikitext, ln, values.lang, false, function (text, ipos) {															//Adding the translation to a language that has nested translations under it															var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + (hastrans ? "," : "") + wt + text.substr(lineend); })											}, span); return resetElements; }										else {											hastrans = true; }									}									node = node.nextSibling; }							}						}					}					else if (ln && ln > lang && (!nextLanguage || ln < nextLanguage) && lis[j].parentNode.parentNode.nodeName.toLowerCase != 'li') {						nextLanguage = ln; var parent = lis[j]; insertBefore = [ {								'redo': function {parent.parentNode.insertBefore(li, parent);}, 'undo': function {parent.parentNode.removeChild(li)}, 'edit': getEditFunction(values, wikitext, ln, getLangCode(parent), util.isTrreq(parent), function (text, ipos)										{											//Adding a new language's translation before another language's translation											var lineend = text.lastIndexOf('\n', ipos);											return text.substr(0, lineend) + "\n* " + wikitext + text.substr(lineend);										}) },li]; }				}			}			if (values.nested) {				nextLanguage = null; insertBefore = null; li.innerHTML = nestedHeading + ":" + "" + content + ""; var lis = insertUl.parentNode.parentNode.getElementsByTagName('li'); for (var j = 0; j < lis.length; j++) {					//Ignore the editor form if (lis[j].getElementsByTagName('form').length > 0) continue; //Don't look at nested translations if (lis[j].parentNode.parentNode.nodeName.toLowerCase != 'td') continue; var ln = getLangName(lis[j]); if (ln == nestedHeading) {						var sublis = lis[j].getElementsByTagName('li'); if (! sublis.length) sublis = lis[j].getElementsByTagName('dd'); if (sublis.length == 0) {							var parent = lis[j]; var dd = newNode('dd', {'class': 'trans-'+values.lang}); var dl = newNode('dl', dd); dd.innerHTML = content; addEdit({								'redo': function {parent.appendChild(dl);},								'undo': function  {parent.removeChild(dl);},								'edit': getEditFunction(values, wikitext, nestedHeading, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {											//Adding a new dl to an existing translation line var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + "\n*: " + wikitext + text.substr(lineend); })							}, dd); return resetElements; }						else {							var dd = newNode(sublis[0].nodeName, {'class': 'trans-'+values.lang}); var linestart = dd.nodeName.toLowerCase == 'dd' ? '\n*: ' : '\n** '; dd.innerHTML = content; for (var k = 0; k < sublis.length; k++) {								var subln = getLangName(sublis[k]); var parent = sublis[k]; if (subln == nestedLang) { var span = newNode('span'); span.innerHTML = ", " + content.substr(content.indexOf(':') + 1); addEdit({										'redo': function { parent.appendChild(span) },										'undo': function  { parent.removeChild(span) },										'edit': getEditFunction(values, wikitext, nestedLang, values.lang, false, function (text, ipos) {													 // Adding the wikitext to a list of translations that already exists. var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + "," + wt + text.substr(lineend); })									}, span); return resetElements; } else if (langmetadata.nestsBefore(nestedLang, subln)) { addEdit({										'redo': function { parent.parentNode.insertBefore(dd, parent); },										'undo': function  { parent.parentNode.removeChild(dd); },										'edit': getEditFunction(values, wikitext, subln, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {													// Adding a nested translation in-order var lineend = text.lastIndexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); })									}, dd); return resetElements; }							}							addEdit({								'redo': function { parent.parentNode.appendChild(dd); },								'undo': function  { parent.parentNode.removeChild(dd); },								'edit': getEditFunction(values, wikitext, subln, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {											// Adding a nested translation at the end of its group var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); })							}, dd); return resetElements; }					}					else if (ln && ln > nestedHeading && (!nextLanguage || ln < nextLanguage)) {						nextLanguage = ln; var parent = lis[j]; insertBefore = [ {								'redo': function {parent.parentNode.insertBefore(li, parent);}, 'undo': function {parent.parentNode.removeChild(li)}, 'edit': getEditFunction(values, wikitext, ln, getLangCode(parent), util.isTrreq(parent), function (text, ipos)										{											//Adding a new nested translation section.											var lineend = text.lastIndexOf('\n', ipos);											return text.substr(0, lineend) + nestedWikitext + text.substr(lineend);										}) },li]; }				}				wikitext = nestedHeading + ":\n*: " + wikitext; }			li.className = "trans-" + values.lang; if (insertBefore) {				addEdit(insertBefore[0], insertBefore[1]); }			else {				//Append the translations to the end (no better way found) addEdit({					'redo': function {insertUl.appendChild(li);},					'undo': function  {insertUl.removeChild(li)},					'edit': getEditFunction(values, wikitext)				}, li); }			return resetElements; }		//Get the wikitext modification for the current form submission. function getEditFunction (values, wikitext, findLanguage, findLangCode, trreq, callback) {			return function(text) {				var p = util.getTransTable(text, insertUl); if (!p) return editor.error("Could not find translation table for '" + values.lang + ":" + values.word + "'. Glosses should be unique"); var stapos = p[0]; var endpos = p[1]; if (findLanguage) {					var ipos = 0; if (trreq) {						ipos = text.indexOf('{'+'{trreq|'+findLanguage+'}}', stapos); if (ipos < 0 || ipos > endpos) ipos = text.indexOf('{'+'{trreq|'+findLangCode+'}}', stapos); if (ipos < 0 || ipos > endpos) ipos = text.indexOf('{'+'{trreq|{'+'{subst:'+findLangCode+'|l=}}}}', stapos); }					// If we have a nested trreq, then we still need to look for the non-trreq form of the heading language if (!trreq || ipos < 0 || ipos > endpos ) {						ipos = text.substr(stapos).search(RegExp("\\*[:*]? ?\\[\\[" + util.escapeRe(findLanguage) + "\\]\\]:")) + stapos; if (ipos < stapos || ipos > endpos) ipos = text.substr(stapos).search(RegExp('\\*[:*]? ?' + util.escapeRe(findLanguage) + ':')) + stapos; if (ipos < stapos| ipos > endpos) ipos = text.indexOf('{'+'{subst:'+findLangCode+'}}:', stapos); }					if (ipos >= stapos && ipos < endpos) {						return callback(text, ipos, trreq); }					else {						return editor.error("Could not find translation entry for '" + values.lang + ":" +values.word + "'. Please reformat"); }				}				return text.substr(0, endpos) + "* " + wikitext + "\n" + text.substr(endpos); };		}		// For an  in well-formed translation sections, return the language name. function getLangName(li) {			var guess = li.textContent || li.innerText; if (guess) guess = guess.substr(0, guess.indexOf(':')); if (guess == 'Template') { return false; }			return guess.replace(/^[\s\n]*/,''); }		// Try to get the language code from an  containing { {t t+ or t-	// }} function getLangCode(li) {			if (li.className.indexOf('trans-') == 0) return li.className.substr(6); var spans = li.getElementsByTagName('span'); for (var i=0; i < spans.length; i++) {				if (spans[i].lang) { return spans[i].lang; }			}			return false; }	}	var tables = document.getElementsByTagName('table'); for (var i=0; i -1 && util.getTransGloss(tables[i]) != 'Translations to be checked') {			var _lists = tables[i].getElementsByTagName('ul'); var lists = []; for (var j=0; j<_lists.length; j++) if (_lists[j].parentNode.nodeName.toLowerCase == 'td') lists.push(_lists[j]); if (lists.length == 0) {				tables[i].getElementsByTagName('td')[0].appendChild(newNode('ul')); lists = tables[i].getElementsByTagName('ul'); }			if (lists.length == 1) {				var table = tables[i].getElementsByTagName('td')[2] if (table) {					table.appendChild(newNode('ul')); lists = tables[i].getElementsByTagName('ul'); }			}			if (lists) {				var li = newNode('li'); var ul = lists[lists.length - 1]; var table = tables[i]; if (table.getElementsByTagName('tbody').length > 0) table = table.getElementsByTagName('tbody')[0]; table.appendChild(newNode('tr', newNode('td'), newNode('td'), newNode('td', {'style':'text-align: left'},newNode('ul', li)))); new AdderWrapper(editor, new TranslationAdder(ul), li); if ((new CookiePreferences('EditorJs')).get('labeller') == 'true') {					var div = tables[i].parentNode.parentNode.getElementsByTagName('div')[0]; if (div.className.indexOf('NavHead') > -1) {						new TranslationLabeller(div) }				}			}		}	} } function TranslationBalancer (editor, insertTable) {	var status; //create the form function init {		var cns = insertTable.getElementsByTagName('tr')[0].childNodes; var tds = []; //Find all three table cells in the translation table. for (var i=0; i on the left side of the balancer. var left = tds[0].getElementsByTagName('ul'); if (left.length > 0) left = left[0]; else {			left = newNode('ul'); tds[0].appendChild(left); }		//Ensure that there is a  on the right side of the balancer. var right = tds[2].getElementsByTagName('ul'); if (right.length > 0) right = right[0]; else {			right = newNode('ul'); tds[2].appendChild(right); }		var moveLeft = newNode('input',{'type':'submit','name':'ml', 'value':'←', 'click': function{return prepareEdits('←', left, right)}}); var moveRight = newNode('input',{'type':'submit','name':'mr', 'value':'→', 'click': function{return prepareEdits('→', left, right)}}); status = newNode('span'); var form = newNode('form', moveLeft, newNode('br'), moveRight, newNode('br'), status); tds[1].appendChild(form); form.onsubmit = function { return false; } //Must be done after the appendChild for IE :(	}	function moveOneRight(left, right)	{		var li = left.lastChild;		while (li && li.nodeName.toLowerCase != 'li')			li = li.previousSibling;		if (li) 			right.insertBefore(left.removeChild(li), right.firstChild);	}	function moveOneLeft(left, right)	{		var li = right.firstChild;		while (li && li.nodeName.toLowerCase != 'li')			li = li.nextSibling;		if (li)			left.appendChild(right.removeChild(li));	}	//store the edit object with the editor	function prepareEdits(direction, left, right)	{		status.innerHTML = "Loading...";		editor.addEdit({ 'redo': function { (direction == '→' ? moveOneRight : moveOneLeft)(left, right) }, 'undo': function { (direction == '→' ? moveOneLeft : moveOneRight)(left, right) }, 'edit': function (text) {return editWikitext(right, direction, text);}, 'summary': 't-balance' });	}	//get the wikitext modification	function editWikitext(insertUl, direction, text)	{		status.innerHTML = "";		//Find the position of the translation table		var p = util.getTransTable(text, insertUl);		if (!p)			return editor.error("Could not find translation table, please improve glosses.");		var stapos = p[0];		var endpos = p[1];		//Find the start and end of the { {trans-mid}} in the table		var midpos = text.indexOf('{'+'{trans-mid}}', stapos);		var midstart = text.lastIndexOf("\n", midpos);		var midend = text.indexOf("\n", midpos);		if (midstart < stapos - 1 || midend > endpos)			return editor.error("Could not find {'+'{trans-mid}}, please correct page.");		if (direction == '→')		{			// Select the last list item of the left list (may be more than one line if nested translations are present)			var linestart = text.lastIndexOf("\n", midstart - 3);			while (/^[:*#;]$/.test(text.substr(linestart+2,1))) linestart = text.lastIndexOf("\n", linestart - 1); if (linestart < stapos - 1 || linestart >= endpos) return editor.error("No translations to move"); return text.substr(0, linestart) //Everything before the item we are moving + text.substr(midstart, midend - midstart) //Then { {trans-mid}} + text.substr(linestart, midstart - linestart) //Then the item we are moving + text.substr(midend); //Then everything after { {trans-mid}} }		else if (direction == '←') {			// Select the first list item of the right list (may be more than one line if nested translations are present) var lineend = text.indexOf("\n", midend + 3); while (/^[:*#;]$/.test(text.substr(lineend+2,1))) lineend = text.indexOf("\n", lineend + 1); if (lineend < stapos - 1 || lineend >= endpos) return editor.error("No translations to move"); return text.substr(0, midstart) //Everything before { {trans-mid}} + text.substr(midend, lineend - midend) //Then the item we are moving + text.substr(midstart, midend - midstart) //Then { {trans-mid}} + text.substr(lineend); //Then everything after the item we are moving }		return text; }	init; } function LangMetadata {	//Singleton if (arguments.callee.instance) return arguments.callee.instance else arguments.callee.instance = this; // 	// FIXME: merge into above var c = 'Chinese';var a = 'Arabic'; var nesting = { apj:'Apache',apm:'Apache',apw:'Apache', xcl:'Armenian',axm:'Armenian', // ang:'English',enm:'English', don't nest English (Encyclopetey) fro:'French',frm:'French', oge:'Georgian', gmh:'German',goh:'German',gsw:'German',ksh:'German',pfl:'German',sxu:'German', grc:'Greek/Ancient',gmy:'Greek/Mycenaean', //el:'Greek/Modern', don't nest modern greek (Atelaes) sga:'Irish',mga:'Irish', nb:'Norwegian/Bokmål',nn:'Norwegian/Nynorsk', mhr:'Mari',mrj:'Mari', cmg:'Mongolian', sro:'Sardinian',sdn:'Sardinian',src:'Sardinian',scd:'Sardinian', dsb:'Sorbian',hsb:'Sorbian', osp:'Spanish', owl:'Welsh',wlm:'Welsh', zh:c,yue:c,dng:c,gan:c,hak:c,czh:c,cjy:c,cmn:c,mnp:c,cdo:c,nan:c,czo:c,cpx:c,wuu:c,hsn:c,lzh:c, arq:a,aao:a,bbz:a,abv:a,shu:a,acy:a,adf:a,avl:a,arz:a,afb:a,ayh:a,acw:a,ayl:a,acm:a,ary:a, ars:a,apc:a,ayp:a,acx:a,aec:a,ayn:a,ssh:a,ajp:a,arb:a,apd:a,pga:a,acq:a,abh:a,aeb:a,auz:a }	var altForm = { ang: {from:"ĀāǢǣĊċĒēĠġĪīŌōŪūȲȳ", to:"AaÆæCcEeGgIiOoUuYy", strip:"\u0304\u0307"}, //macron and above dot ar: {strip:"\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652"}, he: {strip:"\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BF\u05C1\u05C2"}, hr: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪū", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUu", strip:"\u030F\u0300\u0311\u0301\u0304"}, la: {from:"ĀāĒēĪīŌōŪū", to:"AaEeIiOoUu",strip:"\u0304"}, //macron lt: {from:"áãàéẽèìýỹñóõòúù", to:"aaaeeeiyynooouu", strip:"\u0340\u0301\u0303"}, sh: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪū", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUu", strip:"\u030F\u0300\u0311\u0301\u0304"}, sr: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪū", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUu", strip:"\u030F\u0300\u0311\u0301\u0304"}, tr: {from:"ÂâÛû", to:"AaUu",strip:"\u0302"}, sl: {from: "áÁàÀâÂȃȂȁȀéÉèÈêÊȇȆȅȄíÍìÌîÎȋȊȉȈóÓòÒôÔȏȎȍȌŕŔȓȒȑȐúÚùÙûÛȗȖȕȔệỆộỘẹẸọỌ", to: "aAaAaAaAaAeEeEeEeEeEiIiIiIiIiIoOoOoOoOoOrRrRrRuUuUuUuUuUeEoOeEoO", strip: "\u0301\u0300\u0302\u0311\u030f\u0323"} }; 	//Returns true if the specified lang.wiktionary exists according to the meta list this.hasWiktionary = function(lang) {		if (metadata[lang]) return metadata[lang].hw; }	//Given a language code return a default script code. this.guessScript = function(lang) {		if (metadata[lang]) { // enwikt language template? (ur-Arab, polytonic) if (metadata[lang].wsc) { return metadata[lang].wsc; }			// ISO script code? (Arab, Grek) if (metadata[lang].sc) { if (typeof metadata[lang].sc == 'object') return metadata[lang].sc[0]; else return metadata[lang].sc; }		}		return false; }	//Returns a string of standard gender letters (mfnc) or an empty string this.getGenders = function(lang) {		if (metadata[lang]) return metadata[lang].g;	} //Returns true if the specified lang has the concept of plural nouns this.hasPlural = function(lang) {		if (metadata[lang]) return metadata[lang].p;	} //Returns true if the specified lang uses optional vowels or diacritics this.needsAlt = function(lang) {		if (metadata[lang]) return metadata[lang].alt && (!altForm[lang]); }	// Generates a form of the page name without any diacritics (for Latin, etc.) this.generateAltForm = function (lang, word) {		if (altForm[lang]) {			var alt = altForm[lang]; var map = {}; if (alt.from && alt.to) {				for (var i = 0; i < alt.from.length; i++) {					map[alt.from.charAt(i)] = alt.to.charAt(i); }			}			if (alt.strip) {				for (var i = 0; i < alt.strip.length; i++) {					map[alt.strip.charAt(i)] = ""; }			}			var input = word.split(""); var output = ""; for (var i = 0; i < input.length; i++) {				var repl = map[input[i]]; output += (repl == null) ? input[i] : repl; }			return output; }	}	//Given user input, return a language code. Normalises ISO 639-1 codes and names to 639-3. this.cleanLangCode = function(lang) {		var key = lang.toLowerCase.replace(' ',''); if (clean[key]) return clean[key]; else return lang; }	// Get the nesting for a given sub-language this.getNested = function (lang) {		if (nesting[lang]) return nesting[lang]; else return ""; }	function temporalSortKey(langname) {		return langname.replace(/^(Ancient|Classical|Old|Middle|Early Modern|Modern) (.*)/, function(m, modifier, name)			{				return ({Ancient: 0, Old: 1, Middle: 2, "Early Modern": 3, Modern: 4})[modifier] + name;			}); }	// For enforcing an ordering on nested languages. this.nestsBefore = function (a, b)	{ return temporalSortKey(a) < temporalSortKey(b); } } $(function {	// Check if we are on a sensible page	var actions = window.location.toString.replace(/.*\?/, '&');	if (wgAction != 'view' || actions.indexOf('&printable=yes') > -1 || actions.indexOf('&diff=') > -1 || actions.indexOf('&oldid=') > -1)		return;	// Check that we have not been disabled	var prefs = new CookiePreferences('EditorJs');	if (prefs.get('enabled', 'true') == 'true')	{		if (! window.loadedEditor)		{			prefs.setDefault('labeller', wgUserName ? 'true' : 'false' );			window.loadedEditor = true;			var editor = new Editor;			TranslationAdders(editor);		}	}	// The enable-disable button on WT:EDIT	var node = document.getElementById('editor-js-disable-button');	if (node)	{		node.innerHTML = "";		var toggle = newNode('span', {click: function {			if (prefs.get('enabled', 'true') == 'true') {				toggle.innerHTML = "Enable"; prefs.set('enabled', 'false'); }			else {				toggle.innerHTML = "Disable"; prefs.set('enabled', 'true'); }		} }, (prefs.get('enabled', 'true') == 'true' ? 'Disable' : 'Enable'))		node.appendChild(toggle);	}	var node = document.getElementById("editor-js-labeller-button");	if (node)	{		node.innerHTML = "";		var toggle2 = newNode('span', {click: function {			if (prefs.get('labeller') == 'true') {				toggle2.innerHTML = "Enable"; prefs.set('labeller', 'false'); }			else {				toggle2.innerHTML = "Disable"; prefs.set('labeller', 'true'); }		} }, (prefs.get('labeller') == 'true' ? 'Disable' : 'Enable'))		node.appendChild(toggle2);	} })

title: User:Edward the nice person/editor.js


text:
bekostnad

Noun

 * 1) expense
 * på någons bekostnad
 * at someone's expense

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: bekostnad


text: Category:French terms suffixed with -mane


text:
bekosta

Verb

 * 1) to pay the expenses for (something), to fund, to finance

title: bekosta


text: Category:Machining

title: Category:Machining


text: Category:Latin terms prefixed with super-


text: Category:Latin terms prefixed with ex-

title: Category:Latin terms prefixed with ex-


text: Category:Latin terms prefixed with sub-

title: Category:Latin terms prefixed with sub-


text: Category:German terms suffixed with -iert


text:
kvadda

Verb

 * 1)  to wreck, to total (destroy – often a vehicle, by crashing)

title: kvadda


text:
lammlik

Adjective

 * 1) lamblike

title: lammlik


text: lammlika

title: lammlika


text:
transfigurans

Etymology
Present active participle of

Participle

 * 1) transforming, transfiguring, metamorphosing

title: transfigurans


text: transfigurantes

title: transfigurantes


text: transfigurantia

title: transfigurantia


text: transfigurantis

title: transfigurantis


text: transfigurantium

title: transfigurantium


text: transfiguranti

title: transfiguranti


text: transfigurante

title: transfigurante


text: transfigurantibus

title: transfigurantibus


text: transfigurantem

title: transfigurantem


text: transfigurata

title: transfigurata


text: transfiguratum

title: transfiguratum


text: transfigurati

title: transfigurati


text: transfiguratae

title: transfiguratae


text: transfiguratorum

title: transfiguratorum


text: transfiguratarum

title: transfiguratarum


text: transfiguratam

title: transfiguratam


text: transfiguratos

title: transfiguratos


text: transfiguratas

title: transfiguratas


text:
espesseur

Noun

 * 1) thickness extent to which something is thick

title: espesseur


text: urget

title: urget


text: urgemus

title: urgemus


text: urgetis

title: urgetis


text: urgebo

title: urgebo


text: urgebis

title: urgebis


text: urgebit

title: urgebit


text: urgebimus

title: urgebimus


text: urgebitis

title: urgebitis


text: urgebunt

title: urgebunt


text: urgebam

title: urgebam


text: urgebas

title: urgebas


text: urgebat

title: urgebat


text: urgebamus

title: urgebamus


text: urgebatis

title: urgebatis


text: urgebant

title: urgebant


text: ursisti

title: ursisti


text:
ursit

Etymology
Past participle of.

Adjective

 * 1) predestined

title: ursit


text: ursimus

title: ursimus


text: ursistis

title: ursistis


text: urserunt

title: urserunt


text: ursero

title: ursero


text: urseris

title: urseris


text: urserit

title: urserit


text: urserimus

title: urserimus


text: urseritis

title: urseritis


text: urserint

title: urserint


text: urseram

title: urseram


text: urseras

title: urseras


text: urserat

title: urserat


text: urseramus

title: urseramus


text: urseratis

title: urseratis


text: urserant

title: urserant


text: urgeor

title: urgeor


text: urgeris

title: urgeris


text: urgetur

title: urgetur


text: urgemur

title: urgemur


text: urgemini

title: urgemini


text: urgentur

title: urgentur


text: urgebor

title: urgebor


text: urgeberis

title: urgeberis


text: urgebitur

title: urgebitur


text: urgebimur

title: urgebimur


text: urgebimini

title: urgebimini


text: urgebuntur

title: urgebuntur


text: urgebar

title: urgebar


text: urgebaris

title: urgebaris


text: urgebatur

title: urgebatur


text: urgebamur

title: urgebamur


text: urgebamini

title: urgebamini


text: urgebantur

title: urgebantur


text: urgeam

title: urgeam


text: urgeas

title: urgeas


text: urgeat

title: urgeat


text: urgeamus

title: urgeamus


text: urgeatis

title: urgeatis


text: urgerem

title: urgerem


text: urgeres

title: urgeres


text: urgeret

title: urgeret


text: urgeremus

title: urgeremus


text: urgeretis

title: urgeretis


text: urgerent

title: urgerent


text: urserim

title: urserim


text: ursissem

title: ursissem


text: ursisses

title: ursisses


text: ursisset

title: ursisset


text: ursissemus

title: ursissemus


text: ursissetis

title: ursissetis


text: ursissent

title: ursissent


text: urgear

title: urgear


text: urgearis

title: urgearis


text: urgeatur

title: urgeatur


text: urgeamur

title: urgeamur


text: urgeamini

title: urgeamini


text: urgeantur

title: urgeantur


text: urgerer

title: urgerer


text: urgereris

title: urgereris


text: urgeretur

title: urgeretur


text: urgeremur

title: urgeremur


text: urgeremini

title: urgeremini


text: urgerentur

title: urgerentur


text: urgeto

title: urgeto


text: urgetote

title: urgetote


text: urgento

title: urgento


text: urgetor

title: urgetor


text: urgentor

title: urgentor


text: ursisse

title: ursisse


text: urgeri

title: urgeri


text:
valefacio

Verb

 * 1) to say farewell

Conjugation

 * The verb has an irregular conjugation as for the passive voice.

title: valefacio


text:
børnesygdom

Etymology
From. Compare 🇨🇬, 🇨🇬 and 🇨🇬.

Noun

 * 1) childhood disease
 * 2) teething troubles

title: børnesygdom


text: valefacis

title: valefacis


text: valefacit

title: valefacit


text: valefacimus

title: valefacimus


text: valefacitis

title: valefacitis


text: valefaciunt

title: valefaciunt


text: børnesygdommen

title: børnesygdommen


text: valefaciam

title: valefaciam


text: valefacies

title: valefacies


text: valefaciet

title: valefaciet


text: valefaciemus

title: valefaciemus


text: valefacietis

title: valefacietis


text: valefacient

title: valefacient


text: valefaciebam

title: valefaciebam


text: valefaciebas

title: valefaciebas


text: børnesygdomme

title: børnesygdomme


text: valefaciebat

title: valefaciebat


text: valefaciebamus

title: valefaciebamus


text: valefaciebatis

title: valefaciebatis


text: valefaciebant

title: valefaciebant


text: valefeci

title: valefeci


text: valefecisti

title: valefecisti


text: valefecit

title: valefecit


text: valefecimus

title: valefecimus


text: valefecistis

title: valefecistis


text: børnesygdommene

title: børnesygdommene


text: valefecerunt

title: valefecerunt


text: valefecero

title: valefecero


text: valefeceris

title: valefeceris


text: valefecerit

title: valefecerit


text: valefecerimus

title: valefecerimus


text: valefeceritis

title: valefeceritis


text: valefecerint

title: valefecerint


text: valefeceram

title: valefeceram


text: børnesygdoms

title: børnesygdoms


text: valefeceras

title: valefeceras


text: valefecerat

title: valefecerat


text: valefeceramus

title: valefeceramus


text: valefeceratis

title: valefeceratis


text: valefecerant

title: valefecerant


text: valefio

title: valefio


text: valefis

title: valefis


text: valefit

title: valefit


text: børnesygdommens

title: børnesygdommens


text: valefimus

title: valefimus


text: valefitis

title: valefitis


text: valefiunt

title: valefiunt


text: valefiam

title: valefiam


text: valefies

title: valefies


text: valefiet

title: valefiet


text: valefiemus

title: valefiemus


text: valefietis

title: valefietis


text: valefient

title: valefient


text: valefiebam

title: valefiebam


text: valefiebas

title: valefiebas


text: valefiebat

title: valefiebat


text: valefiebamus

title: valefiebamus


text: børnesygdommes

title: børnesygdommes


text: valefiebatis

title: valefiebatis


text: valefiebant

title: valefiebant


text: valefacias

title: valefacias


text: valefaciat

title: valefaciat


text: valefaciamus

title: valefaciamus


text: valefaciatis

title: valefaciatis


text: valefaciant

title: valefaciant


text: valefacerem

title: valefacerem


text: valefaceres

title: valefaceres


text: børnesygdommenes

title: børnesygdommenes


text: valefaceret

title: valefaceret


text: valefaceremus

title: valefaceremus


text: valefaceretis

title: valefaceretis


text: valefacerent

title: valefacerent


text: valefecerim

title: valefecerim


text: valefecissem

title: valefecissem


text: valefecisses

title: valefecisses


text: valefecisset

title: valefecisset


text: valefecissemus

title: valefecissemus


text: valefecissetis

title: valefecissetis


text: valefecissent

title: valefecissent


text: valefias

title: valefias


text: valefiat

title: valefiat


text: valefiamus

title: valefiamus


text: valefiatis

title: valefiatis


text: valefiant

title: valefiant


text: valefierem

title: valefierem


text: valefieres

title: valefieres


text: valefieret

title: valefieret


text: valefieremus

title: valefieremus


text: valefieretis

title: valefieretis


text: valefierent

title: valefierent


text: valefac

title: valefac


text: valefacito

title: valefacito


text: valefacite

title: valefacite


text: valefacitote

title: valefacitote


text: valefaciunto

title: valefaciunto


text: valefi

title: valefi


text: valefito

title: valefito


text: valefite

title: valefite


text: valefitote

title: valefitote


text: valefacere

title: valefacere


text: valefecisse

title: valefecisse


text: valefieri

title: valefieri


text:
valefaciens

Etymology
Present participle of.

Participle

 * 1) saying farewell

title: valefaciens


text: valefacientes

title: valefacientes


text: valefacientia

title: valefacientia


text: valefacientis

title: valefacientis


text: valefacientium

title: valefacientium


text: valefacienti

title: valefacienti


text: valefacientibus

title: valefacientibus


text: valefacientem

title: valefacientem


text:
famishment

Etymology
From.

Noun

 * 1)  The state or process of being famished.
 * 2)  Famine.
 * 1)  Famine.
 * 1)  Famine.
 * 1)  Famine.
 * 1)  Famine.
 * 1)  Famine.

title: famishment


text:
Talk:geospace

The following terms have become somewhat controversial. NASA likes to use the term "heliophysics" to describe the topic of space physics within the context of the solar system (as oppsed to in the context of astronomy and astrophysics), despite the fact that the etymology of the word would indicate it only refers to the sun. Thus the NASA term heliophysics encompasses solar physics (from the interior of the sun to the coronoa, the solar wind and heliosphere, as well as planetary magnetospheres and ionospheres. The U.S. National Science Foundation uses the term "geospace" to include not only Earth's magnetosphere and ionosphere but also the mesosphere, thermosphere, magnetosheath, solar wind, and solar atmosphere. Bakerkb1 19:48, 6 January 2011 (UTC)

title: Talk:geospace


text:
velans

Etymology
Present participle of.

Participle

 * 1) covering, wrapping, veiling
 * 2) concealing

title: velans


text: velantes

title: velantes


text: velantia

title: velantia


text: velantis

title: velantis


text: velantium

title: velantium


text: velanti

title: velanti


text: velantibus

title: velantibus


text: velantem

title: velantem


text: Νέα Σκωτία

title: Νέα Σκωτία


text:
velatus

Etymology
Perfect passive participle of.

Participle

 * 1) covered, wrapped, veiled
 * 2) concealed

title: velatus


text: velatum

title: velatum


text: velatae

title: velatae


text: velatorum

title: velatorum


text: velatarum

title: velatarum


text: velatam

title: velatam


text: velatos

title: velatos


text: velatas

title: velatas


text:
baterie alcalină

Noun

 * 1) alkaline battery

title: baterie alcalină


text:
verberans

Etymology
Present participle of.

Participle

 * 1) lashing, scourging, whipping, beating

title: verberans


text: verberantes

title: verberantes


text: verberantia

title: verberantia


text: verberantis

title: verberantis


text: verberantium

title: verberantium


text: verberanti

title: verberanti


text: verberante

title: verberante


text:
skickelsediger

Adjective

 * 1) fateful, significant, (historically) important

title: skickelsediger


text: verberantibus

title: verberantibus


text: verberantem

title: verberantem


text:
skickelse

Etymology
, like German

Noun

 * 1) fate

title: skickelse


text: יבער

title: יבער


text:
viriliter

Etymology
From.

Adverb

 * 1) manfully

title: viriliter


text: virilius

title: virilius


text: virilissime

title: virilissime


text:
User talk:Bakerkb1

Welcome!
Hello, and welcome to Wiktionary. I thank you for your contributions and hope you enjoy contributing here.

If you have edited Wikipedia, you probably already know some basics, but Wiktionary operates in a very different manner from Wikipedia and you will have a better experience if you do not assume the two are similar in culture. Please remember that despite your experience on Wikipedia, you are inexperienced here. While you do not need to be an expert, or anything close to one, to contribute, please be as respectful of local policies and community practices as you can: being bold is not encouraged where it goes against any of those practices. Be aware that well-meaning Wikipedians have unfortunately found themselves blocked in the past for their actions taken without forethought. (You can get more of a glimpse of the Wiktionary mindset at Help:Interacting with humans.)

Our two main policy documents are Entry layout explained ("ELE") and Criteria for inclusion ("CFI"). ELE describes our standard layout; unlike on Wikipedia, all entries must follow this layout, even if they are not yet complete. (You can get a feel for our standard layout by looking at existing entries.) CFI describes what is allowed in the dictionary, and disallows (for example) most names of specific persons. We generally follow ELE and CFI closely.

If you do create a couple of entries that are not properly formatted, someone will be glad to clean up after you. But if you do it repeatedly, you might get blocked as a temporary measure to give you a chance to read ELE.

Some other differences between us and English Wikipedia:
 * Entry titles are case-sensitive and do not have their first letters capitalized unless, like proper nouns, they are ordinarily capitalized. So we have mercury for the substance and Mercury for the planet and the god. (We do not use parentheses in titles: there's no Mercury (planet).)
 * We just want definitions of words, not long-winded explanations worthy of Wikipedia.
 * Wiktionary has very different user-space policies from Wikipedia's. We are here to build a dictionary, and userpages exist only to facilitate that. In particular, we have voted to explicitly ban all userboxes with the exception of ; please do not create or use them.
 * Other policies, including on bots, blocks, redirects, interwiki links, and original research, are very different from English Wikipedia's. And we have no counterpart to Wikipedia's three-revert rule.
 * Various templates and shortcuts that you're used to using do not exist here, or have different names. For example, don't try to use  to refer to a template! ( will do the trick.)
 * Don't add an edit summary when creating a new entry here: the software will fill a useful one in automatically. (Edit summaries are good for other edits, though.)

Also, a "citation" on Wiktionary is the same as a "quotation" and is evidence of a word being used; we use these to construct dictionary definitions. See WT:QUOTE. A "reference", on the other hand, which is called a "citation" on Wikipedia, references another secondary source, such as a dictionary, and is used predominantly for verifying etymologies and usage notes, not the definitions themselves. (That we don't use another dictionary as our source for the existence of a word is largely so that we don't fall into the trap of adding "list words", words that, while often defined, are never used in practice.)

I hope you enjoy editing Wiktionary! If you have any questions, then see the help pages, add a question to one of the discussion rooms or ask me on my talk page. —msh210℠ (talk) 20:02, 6 January 2011 (UTC)

title: User talk:Bakerkb1


text:
fordull

Etymology
From, , equivalent to. Cognate with 🇨🇬.

Verb

 * 1)  To make dull; stupefy.

title: fordull


text: אליו

title: אליו


text: fordwine

title: fordwine


text:
kampuni ya ndege

Noun

 * 1) airline

title: kampuni ya ndege


text:
pombe kali

Noun

 * 1) hard alcohol

title: pombe kali


text:
ketunlenkki

Noun

 * 1)  A manoeuvre in which a chased patrol makes false paths in order to deceive their chasers.
 * 2) circumbendibus roundabout route or process

title: ketunlenkki


text: animaulx

title: animaulx


text: fordedes

title: fordedes


text:
User talk:Lionfish0

Welcome!
Hello, and welcome to Wiktionary. I thank you for your contributions and hope you enjoy contributing here.

If you have edited Wikipedia, you probably already know some basics, but Wiktionary operates in a very different manner from Wikipedia and you will have a better experience if you do not assume the two are similar in culture. Please remember that despite your experience on Wikipedia, you are inexperienced here. While you do not need to be an expert, or anything close to one, to contribute, please be as respectful of local policies and community practices as you can: being bold is not encouraged where it goes against any of those practices. Be aware that well-meaning Wikipedians have unfortunately found themselves blocked in the past for their actions taken without forethought. (You can get more of a glimpse of the Wiktionary mindset at Help:Interacting with humans.)

Our two main policy documents are Entry layout explained ("ELE") and Criteria for inclusion ("CFI"). ELE describes our standard layout; unlike on Wikipedia, all entries must follow this layout, even if they are not yet complete. (You can get a feel for our standard layout by looking at existing entries.) CFI describes what is allowed in the dictionary, and disallows (for example) most names of specific persons. We generally follow ELE and CFI closely.

If you do create a couple of entries that are not properly formatted, someone will be glad to clean up after you. But if you do it repeatedly, you might get blocked as a temporary measure to give you a chance to read ELE.

Some other differences between us and English Wikipedia:
 * Entry titles are case-sensitive and do not have their first letters capitalized unless, like proper nouns, they are ordinarily capitalized. So we have mercury for the substance and Mercury for the planet and the god. (We do not use parentheses in titles: there's no Mercury (planet).)
 * We just want definitions of words, not long-winded explanations worthy of Wikipedia.
 * Wiktionary has very different user-space policies from Wikipedia's. We are here to build a dictionary, and userpages exist only to facilitate that. In particular, we have voted to explicitly ban all userboxes with the exception of ; please do not create or use them.
 * Other policies, including on bots, blocks, redirects, interwiki links, and original research, are very different from English Wikipedia's. And we have no counterpart to Wikipedia's three-revert rule.
 * Various templates and shortcuts that you're used to using do not exist here, or have different names. For example, don't try to use  to refer to a template! ( will do the trick.)
 * Don't add an edit summary when creating a new entry here: the software will fill a useful one in automatically. (Edit summaries are good for other edits, though.)

Also, a "citation" on Wiktionary is the same as a "quotation" and is evidence of a word being used; we use these to construct dictionary definitions. See WT:QUOTE. A "reference", on the other hand, which is called a "citation" on Wikipedia, references another secondary source, such as a dictionary, and is used predominantly for verifying etymologies and usage notes, not the definitions themselves. (That we don't use another dictionary as our source for the existence of a word is largely so that we don't fall into the trap of adding "list words", words that, while often defined, are never used in practice.)

I hope you enjoy editing Wiktionary! If you have any questions, then see the help pages, add a question to one of the discussion rooms or ask me on my talk page. —msh210℠ (talk) 20:40, 6 January 2011 (UTC)

Your account will be renamed
Hello,

The developer team at Wikimedia is making some changes to how accounts work, as part of our on-going efforts to provide new and better tools for our users like cross-wiki notifications. These changes will mean you have the same account name everywhere. This will let us give you new features that will help you edit and discuss better, and allow more flexible user permissions for tools. One of the side-effects of this is that user accounts will now have to be unique across all 900 Wikimedia wikis. See the announcement for more information.

Unfortunately, your account clashes with another account also called Lionfish0. To make sure that both of you can use all Wikimedia projects in future, we have reserved the name Lionfish0~enwiktionary that only you will have. If you like it, you don't have to do anything. If you do not like it, you can pick out a different name.

Your account will still work as before, and you will be credited for all your edits made so far, but you will have to use the new account name when you log in.

Sorry for the inconvenience.

Yours, Keegan Peterzell Community Liaison, Wikimedia Foundation 23:55, 17 March 2015 (UTC)

title: User talk:Lionfish0


text:
rule of three

Alternative forms

 * the Rule of Three

Proper noun

 * 1)  A rule stating that, if two ratios are equal, then the denominator of the second equals its numerator times the reciprocal of the first ratio: if $$\frac ab=\frac cd$$ then $$d=\frac{bc}a$$.
 * 2)  A rule for clinical trials used for determining the rate of adverse side effects when no such side effects present during the course of the trial.
 * 3)  A rule which states that things which come in groups of three are inherently funnier or more effective than things which come in groups of other sizes.
 * 4)  Specifically, the technique of having a setup in advance, a reminder to keep it fresh in the audience's memory, and then a payoff.
 * 5)  A religious tenet stating that the energy a person puts out into the world, positive or negative, will be returned to that person threefold.
 * 6)  A rule of thumb in the C++ programming language, stating that any class that defines a destructor, a copy constructor, or a copy assignment operator should define all three of them.

Translations

 * Finnish: kolmen sääntö
 * French:
 * Polish: reguła trzech
 * Romanian:
 * Spanish: regla de tres

title: rule of three


text:
drudgy

Etymology
From.

Adjective

 * 1) Suggestive of drudgery; being excessively hard or requiring excessive effort.

Noun

 * 1) Drudgery; labour.

title: drudgy


text:
cerdo hormiguero

Etymology
From.

Noun

 * 1) aardvark

title: cerdo hormiguero


text:
jętka

Noun

 * 1) mayfly, insect of the order
 * 2) collar beam

title: jętka


text:
lagăr de concentrare

Noun

 * 1) concentration camp

title: lagăr de concentrare


text:
bark beetle

Noun

 * 1) Any of various beetles, of the subfamily, many of which reproduce in the inner bark of trees.

Translations

 * Belarusian: караед
 * Czech:
 * Danish: barkbille
 * French:
 * German:
 * Italian: scolitide
 * Norwegian:
 * Bokmål: typograf
 * Nynorsk: typograf
 * Polish:
 * Russian:
 * Ukrainian:

title: bark beetle


text:
kornik

Etymology
From.

Noun

 * 1) bark beetle

Etymology
.

title: kornik


text:
plån

Etymology
From, from , from. .

Noun

 * 1) a tablet (for writing and erasing)
 * 2) a striking surface on a matchbox
 * säkerhetständstickor - tändas endast mot lådans plån
 * safety matches - can only be lit [by striking] towards the surface of the box

title: plån


text: drudgey

title: drudgey


text: säkerhetständstickor

title: säkerhetständstickor


text:
säkerhetständsticka

Noun

 * 1) a safety match; a match that can only be lit by striking towards a prepared surface

title: säkerhetständsticka


text:
mszyca

Etymology
, diminutive of. .

Noun

 * 1) greenfly, aphid

title: mszyca


text:
Rule of Three

Alternative forms

 * the Three-Fold Law
 * the Law of Return

Proper noun

 * 1)  A religious tenet held by some Wiccans, stating that whatever energy, positive or negative, a person puts into the world will be returned threefold.

title: Rule of Three


text:
tändsticksask

Noun

 * 1) a matchbox

title: tändsticksask


text:
User:Yair rand/checktransremove.js

function addchecktransremovebuttons { var q=document.getElementsByClassName?document.getElementsByClassName('checktrans'):document.getElementsByTagName('div') for(var i = 0, c = 0; i < q.length; i++){ if(q[i].className == "checktrans"){ c++ var qq = q[i].nextSibling; if(qq.nodeName.toLowerCase!='div'){qq=qq.nextSibling} var qqq=qq.getElementsByTagName('li') for(var ii = 0; ii < qqq.length; ii++){ addchecktransremovebutton(qqq[ii], c, ii) }   }  }  function addchecktransremovebutton(q, c, i)  { q.appendChild(newNode('a','(−)',{'style':'padding-left:4px; cursor:pointer;', 'title':'Remove', 'click': function{ editor=new Editor; editor.addEdit({     edit:function(wikitext){return ccc=wikitext.replace(RegExp("^(([\\s\\S]*?\\{\\{checktrans-top\\}\\}){"+c+"}[\\s\\S]*?\n([\\s\\S]+?(?=\n\\*(?!:))){"+i+"})[\\s\\S]+?\n(?=\{|\\*(?!:))"),'$1\{\{subst:blank|\n*\}\}\n')},      redo:function{q.style.border="2px dashed #FF0000";q.style.opacity="0.6";q.style.backgroundColor="#FFEEEE";q.lastChild.style.display='none'},      undo:function{q.style.border="";q.style.opacity="1";q.style.backgroundColor="";q.lastChild.style.display='inline'},      summary:'rm checktrans',      after_save:function{q.style.backgroundColor="#F00"; setTimeout(function{q.parentNode.removeChild(q)}, 400)}      }) }})) } }

$(addchecktransremovebuttons)

title: User:Yair rand/checktransremove.js


text: 干活儿

title: 干活儿


text: 幹活兒

title: 幹活兒


text: 干活

title: 干活


text:
幹活

Verb

 * 1) to do physical work; to do manual labour; to toil
 * 2)  to work; to be employed
 * 1)  to work; to be employed

Usage notes
There are many equivalents for English to work in Chinese, the most common and generic being. Use for shift work,  for office or administration work and  for physical work.

title: 幹活


text:
cross-multiplication

Etymology
From.

Noun

 * 1)  An instance, or the process, of cross-multiplying.

Translations

 * Chinese:
 * Mandarin: 交叉相乘
 * Portuguese: regra de três
 * Tagalog: laktawang palaramihan
 * Ukrainian: перехре́сне мно́ження

title: cross-multiplication


text: cross-multiplications

title: cross-multiplications


text: 碰见

title: 碰见


text:
碰見

Verb

 * 1) to meet by chance; to bump into; to happen to meet someone

title: 碰見


text:
cross-multiply

Verb

 * 1) To set the product of the extremes of a proportion equal to the product of its means.
 * Cross-multiplying $$3/5=x/2$$ yields $$3\times2=5x$$.

title: cross-multiply


text: cross-multiplying

title: cross-multiplying


text: cross-multiplies

title: cross-multiplies


text: cross-multiplied

title: cross-multiplied


text:
clătina

Etymology
From.

Verb

 * 1) to sway, rock, stagger, shake, move to and fro

title: clătina


text:
bokstavlig

Adjective

 * 1) literal, true, veritable (not figurative, allegorical, or the like)
 * 2) literal (exactly matching or corresponding to the original word(s) (of for example a translation))
 * 1) literal (exactly matching or corresponding to the original word(s) (of for example a translation))
 * 1) literal (exactly matching or corresponding to the original word(s) (of for example a translation))

title: bokstavlig


text:
Thread:User talk:Yair rand/Usexeditor.js suggestion

I would love to use this for adding a new usex to a definition which currently lacks one. Maybe a +/- to the left of the def'n number (or right, or end of def, who knows).


text:
leagăn

Etymology
. Usually thought to be a back formation of, or from root *lecanis, from. Per Paliga, a word. Compare Aromanian.

Noun

 * 1) cradle
 * 2) swing

title: leagăn


text:
sinnebildlig

Adjective

 * 1) allegoric, symbolic

title: sinnebildlig


text:
symbolisk

Adjective

 * 1) symbolic

title: symbolisk


text:
proculdubio

Adverb

 * 1)  without doubt
 * 2) * 1708, The Works of Mr. Abraham Cowley, volume 3, parts 2 (8th edition) and 3, page 169:
 * "la"

- Scio te bona esse voce: proculdubio illum obrues, si tympana, bombardas, tubas & tintinnabula oris tui afferas.

title: proculdubio


text:
vivificans

Etymology
Present participle of.

Participle

 * 1) reviving, vivifying

title: vivificans


text: vivificantes

title: vivificantes


text: vivificantia

title: vivificantia


text: vivificantis

title: vivificantis


text: vivificantium

title: vivificantium


text: vivificanti

title: vivificanti


text: vivificantibus

title: vivificantibus


text: vivificantem

title: vivificantem


text:
bildstod

Etymology
From.

Noun

 * 1)  a statue

title: bildstod


text: Category:German terms suffixed with -ismus


text: Category:Translingual terms suffixed with -ia


text: Category:Norwegian Nynorsk present participles


text: Category:German terms prefixed with erz-


text:
Nationernas förbund

Proper noun

 * 1) the League of Nations

title: Nationernas förbund


text:
جزئیات

Etymology
.

Noun

 * 1) detail, details

title: جزئیات


text: Category:Tumbuka compound terms

title: Category:Tumbuka compound terms


text:
Appendix talk:Japanese verbs

Page revamp proposed
Hello anyone watching this --

This page looks like it could use a substantial reworking; I notice a few mistakes in the Stem forms intro para, the table could do with some visual reorganizing, and I find all the other sections a bit confusing, with the page as a whole suffering from a general sense of incompleteness and Rough-draft-osis. If no one objects, I'll create a private copy of the page under my User page, and see what I can do that might be useful. ご意見等がございましたら、何卒お書きください.

よろしくお願いいたします.

-- Eiríkr Útlendi | Tala við mig 23:14, 6 January 2011 (UTC)
 * Please do! —Μετάknowledge discuss/deeds 05:42, 20 March 2013 (UTC)

English terminology for godan
I confess that the quinquigrade term that recently appeared sounds awful to me -- I doubt most English readers will understand this clearly. I'm changing this to five-grade, as a much more immediately comprehensible term. ‑‑ Eiríkr Útlendi │Tala við mig 19:42, 20 April 2018 (UTC)
 * Thanks. By the way, what do you think about the current English terminology used in inflectional templates? for example presents -kereba as conditional and -kattara as the provisional, but in Bjarke Frellesvig's A History of the Japanese Language it is kereba which is the provisional, with the conditional being kattara ~ kutewa. I have no linguistic background to say anything about this, though. --Dine2016 (talk) 02:09, 21 April 2018 (UTC)
 * @Dine2016: I think it comes down to how one defines one's terms. :)  Even as English,  and  are not really all that usefully distinct without further context.  As usage,  [k]ereba   implies that the verb or adjective before the kereba (be it a verb or adjective) is a requirement of the result;   to   implies that the result is an inevitable outcome of the verb or adjective; and  [k]a[t]tara   implies a less strict causal relationship, and if the verb or adjective happened to be the case, then maybe the result happens.
 * FWIW, I disagree with Frellesvig's inclusion of kutewa here -- this is not a "form" per se, but rather kute + particle wa, as amply demonstrated by evidence of kute + other particles. Moreover, the usage patterns for kattara and kute wa are rather different.
 * Anyway, I hope that helps. Describing grammar is always difficult, even more so when describing grammar in another language.  ‑‑ Eiríkr Útlendi │Tala við mig 03:47, 22 April 2018 (UTC)

koyo as the imperative of k-irregular 来る
The page states that "-i and -yo are the k class' equivalent to -ro and -yo above, and follow the same distinction.", That is, it states that -i is the spoken imperative and -yo is the written imperative. However, the use of koyo, the form in 文語 (which should be interpreted as "Classical Japanese", not "the written register of Modern Japanese" in the first place) is pretty much dead in Modern Japanese. The -yo form for monograde verbs can be (not infrequently) found when trying to sound formal, archaic or stylistic, but in those contexts the imperative 来よ is never used, and instead is represented by suppletive 来たれ, the imperative of the godan verb 	来たる. Japanese textbooks that lists both -ro and -yo as the imperative of monograde verbs never list koyo as a possible form in Modern Japanese, and so is also the case for the table in Japanese Wiktionary. Hence I believe this koyo should be removed. https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%B4%BB%E7%94%A8 Hsjoihs (talk) 05:33, 20 February 2022 (UTC)

 * Note that the EN Wikt currently does not distinguish between modern JA and Classical JA (i.e. 口語 and 文語) in our language headings. Consequently, we do include Classical terms under a   heading.  So I don't think the koyo form should be outright removed from the table.
 * That said, I agree that usage for koyo is a bit different from the ~yo imperatives for the 一段 verbs, and thus the descriptive text should be improved to clarify that koyo is restricted to Classical (or at least deliberately archaic) contexts. If you have any clear ideas, please have a go at editing the page.  ‑‑ Eiríkr Útlendi │Tala við mig 01:13, 22 February 2022 (UTC)

Thank you. I understand that Modern Japanese and Classical Japanese is not distinguished in the language headings. I wasn't making myself clear enough, but I intended to only talk about https://en.wiktionary.org/wiki/Appendix:Japanese_verbs#k-irregular_(%E3%82%AB%E8%A1%8C%E5%A4%89%E6%A0%BC_ka-gy%C5%8D_henkaku) part, which is listed under the "Modern Japanese" heading. I do understand that, in the actual 来る page, both the modern conjugation table and the classical conjugation table are given, and (aptly) the modern one only has 来い and the Classical has 来 and 来よ. I will edit the page based on our discussion. Hsjoihs (talk) 13:17, 23 February 2022 (UTC)

title: Appendix talk:Japanese verbs


text:
zhį́ʼii

Etymology
From +, literally “the black one”.

Noun

 * 1) raven

title: zhį́ʼii


text:
User:Eirikr/Appendix:Japanese verbs

=Modern Japanese=

This section deals only with Japanese as written and spoken in 21st and late 20th centuries.

Stem forms
These are the basic forms of verbs as taught in Japan. Verbs have six associated stem forms; three of these each appear in two different ways that are not given separate names, but are used in disjoint contexts. The izenkei 已然形 (classical imperfective form) is also called the kateikei 仮定形 (hypothetical form). The shūshikei 終止形 (terminal form) and rentaikei 連体形 (attributive form) are identical for verbs in modern Japanese.

The ren'yōkei 連用形 (-i form), shūshikei 終止形 (terminal), rentaikei 連体形 (attributive), and meireikei 命令形 (imperative) forms can appear on their own; the others require suffixes.

Other forms
Currently incomplete

Suffixes to the continuative (-i) form
There are several suffixes that attach to the continuative (-i) form. These are some of the most common:

title: User:Eirikr/Appendix:Japanese verbs


text:
fornforskare

Noun

 * 1) an archaeologist

title: fornforskare


text:
fornkunskap

Noun

 * 1) archaeology

title: fornkunskap


text:
Copernican system

Etymology
From  +. After Polish astronomer Nicolaus Copernicus, who formulated and proposed the theory.

Proper noun

 * 1)  A heliocentric model of the solar system, proposed in the 16th century by the eponymous astronomer.

title: Copernican system


text:
crescent moon

Noun

 * 1) The Moon as it appears early in its first quarter or late in its last quarter, when only a small arc-shaped section of the visible portion is illuminated by the Sun.

Translations

 * Afrikaans: sekelmaan
 * Arabic: هِلَال
 * Egyptian Arabic: هلال
 * Burmese:
 * Chinese:
 * Mandarin:
 * Danish: halvmåne
 * Dutch:
 * Finnish:
 * French: croissant de lune
 * Galician:
 * German:
 * Greek:
 * Haitian Creole: lalin kwasan
 * Hungarian:
 * Icelandic: skarður máni
 * Indonesian:
 * Irish: corrán gealaí
 * Italian: luna crescente, fase di novilunio,
 * Japanese: 弦月,
 * Koasati: niłahasí hahpá
 * Lakota: wílečhala
 * Latin: luna corniculata
 * Middle English: bente mone
 * Norwegian: månesigd, halvmåne
 * Papiamentu: luna kresiente
 * Persian: هلال افزاینده
 * Polish: pierwsza kwadra
 * Portuguese: lua crescente
 * Spanish: luna creciente
 * Sumerian: 𒌓𒊬
 * Swedish:
 * Tagalog: bulang gasuklay
 * Turkish: ,
 * Ugaritic: 𐎅𐎍𐎍

title: crescent moon


text:
bagefter

Etymology
From the prepositional phrase, from and.

Adverb

 * 1) behind
 * 2) afterward, afterwards, subsequently
 * 3) slow behind in time

title: bagefter


text:
lansa

Etymology
, from, from.

Noun

 * 1) launch; large, open motorboat

Verb

 * 1) to travel by launch

Etymology
From, from , from , from or. Cognate of 🇨🇬 and.

Noun

 * 1) lance

Etymology
From. Cognate with 🇨🇬.

Verb

 * 1) to throw
 * 2) to launch

Etymology
From.

Verb

 * 1) to throw
 * 2) to launch

Etymology
From.

Noun

 * 1) lance (medieval weapon)

Etymology
.

Verb

 * 1) to pitch
 * 2) to launch

Etymology 1
From, possibly from , from. Compare 🇨🇬, 🇨🇬, 🇨🇬, and 🇨🇬.

Noun

 * 1) characteristic fishy odor or taste
 * 2) viscous substance covering the fish
 * 3) characteristic smell of blood
 * 4)  obscenity
 * 1)  obscenity

Etymology 2
, from, from , of origin.

Noun

 * 1) lance; spear

title: lansa


text: Förenta staterna

title: Förenta staterna


text: Förenta staternas

title: Förenta staternas


text: bibelns

title: bibelns


text:
blekbytta

Etymology
From.

Noun

 * 1) inkwell

title: blekbytta


text: Turkiets

title: Turkiets


text:
gula faran

Noun

 * 1) the yellow peril

title: gula faran


text:
vilddjur

Noun

 * 1) a beast; a wild animal, a monster (e.g. in biblical prophecies)

title: vilddjur


text: världsmakten

title: världsmakten


text:
katolsk

Adjective

 * 1) Catholic (relating to the Roman Catholic Church)

Adjective

 * 1) Catholic (as above)

Adjective

 * 1) Catholic, pertaining to the Roman Catholic Church

title: katolsk


text:
apostolisk

Adjective

 * 1) apostolic

Etymology
From, from. Equivalent to, last part from , from , from.

Cognate with 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬 and 🇨🇬.

Adjective

 * 1)  apostolic
 * 2)  apostolic, papal
 * 3)  honorable, venerable
 * 1)  apostolic, papal
 * 2)  honorable, venerable
 * 1)  apostolic, papal
 * 2)  honorable, venerable
 * 1)  apostolic, papal
 * 2)  honorable, venerable
 * 1)  apostolic, papal
 * 2)  honorable, venerable
 * 1)  honorable, venerable
 * 1)  honorable, venerable
 * 1)  honorable, venerable

Adjective

 * 1) apostolic

title: apostolisk


text: världsherraväldet

title: världsherraväldet


text:
världsherravälde

Etymology
From.

Noun

 * 1) world domination

title: världsherravälde


text:
herravälde

Noun

 * 1) dominion, superiority, (total) control, (major) influence

title: herravälde


text:
talande

Adjective

 * 1) speaking
 * 2) telling, revealing, indicative
 * en talande tystnad utbröt i rummet
 * the room went silent, a silence speaking for itself

Noun

 * 1) speaking, speech

title: talande


text:
M and M boys

Proper noun

 * 1)  Mickey Mantle and Roger Maris, who competed to break Babe Ruth's home-run record while on the same team.

title: M and M boys


text: rathering

title: rathering


text:
Citations:rathering

Noun

 * 1)  Preference.
 * 2) * 2009, Ron Rash, Serena: A Novel, page 267:
 * He filled a bowl and placed it on the table with a tin of cornbread. "You partial to sweet milk or buttermilk?"
 * "Buttermilk would be my rathering," Rachel said.

title: Citations:rathering


text: påvliga

title: påvliga


text:
påvlig

Adjective

 * 1) papal, pertaining to the pope

title: påvlig


text: katoliker

title: katoliker


text:
uppvaknande

Noun

 * 1) an awakening

title: uppvaknande


text:
zoranj

Etymology
From.

Noun

 * 1) orange (fruit)

Etymology
Derived from a plural —such as ', ', ', or '—and. In French, these determiners' final ⟨s⟩ or ⟨x⟩ is pronounced /z/ before vowels (and is otherwise silent). As a result, the /z/ was in Louisiana Creole as part of the noun and probably from there the adjective.

Adjective

 * 1) orange

Noun

 * 1) (an) orange

title: zoranj


text:
tsin naabąąs

Etymology
+

Noun

 * 1) wagon
 * 2) covered wagon

title: tsin naabąąs


text: hǎoyùn

title: hǎoyùn


text:
ivorià

Adjective

 * 1) Ivorian

Noun

 * 1) Ivorian

title: ivorià


text: ivorians

title: ivorians


text: ivorianes

title: ivorianes