<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FKleptomaniacViolet%2FLanguage_families%2FAutotree</id>
	<title>Module:Sandbox/KleptomaniacViolet/Language families/Autotree - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FKleptomaniacViolet%2FLanguage_families%2FAutotree"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/KleptomaniacViolet/Language_families/Autotree&amp;action=history"/>
	<updated>2026-04-21T02:09:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/KleptomaniacViolet/Language_families/Autotree&amp;diff=145673&amp;oldid=prev</id>
		<title>imported&gt;KleptomaniacViolet at 19:54, 2 October 2013</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/KleptomaniacViolet/Language_families/Autotree&amp;diff=145673&amp;oldid=prev"/>
		<updated>2013-10-02T19:54:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function get_node (title)&lt;br /&gt;
	local title_data = mw.loadData(&amp;quot;Module:Sandbox/KleptomaniacViolet/Language families/Data&amp;quot;)&lt;br /&gt;
	local result = nil&lt;br /&gt;
	for n, page in pairs(title_data) do&lt;br /&gt;
		tab = mw.loadData(page).language_nodes&lt;br /&gt;
		if tab[title] ~= nil then&lt;br /&gt;
			result = tab[title]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function get_first_node_data (target_node_title, fallback_node_title, page_title, errors)	&lt;br /&gt;
	if fallback_node_title ~= &amp;quot;&amp;quot; and page_title == target_node_title then&lt;br /&gt;
		table.insert(errors, &amp;quot;redundant fallback&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if page_title ~= target_node_title then&lt;br /&gt;
		table.insert(errors, &amp;quot;node title mismatch&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local node_data = get_node(target_node_title)&lt;br /&gt;
	if node_data == nil then&lt;br /&gt;
		if fallback_node_title ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			node_data = get_node(fallback_node_title)&lt;br /&gt;
		end&lt;br /&gt;
		if node_data == nil then&lt;br /&gt;
			table.insert(errors, &amp;quot;no node data&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(errors, &amp;quot;using fallback&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return node_data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function show_errors (frame, errors)&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	for i, err in ipairs(errors) do&lt;br /&gt;
		res = res .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot; .. frame:expandTemplate{ title = &amp;quot;User:KleptomaniacViolet/Language family errors/&amp;quot; .. err, args = {} }&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.gen_tree (frame)&lt;br /&gt;
	local errors = {}&lt;br /&gt;
	&lt;br /&gt;
	local target_node_title = frame.args[&amp;quot;targetnode&amp;quot;]&lt;br /&gt;
	local expected_parent_article = frame.args[&amp;quot;expectedparentarticle&amp;quot;]&lt;br /&gt;
	if expected_parent_article == &amp;quot;&amp;quot; then&lt;br /&gt;
		expected_parent_article = nil&lt;br /&gt;
	end&lt;br /&gt;
	local fallback_node_title = frame.args[&amp;quot;fallbacknode&amp;quot;]&lt;br /&gt;
	local page_title = frame.args[&amp;quot;pagetitle&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	local node_data = get_first_node_data(target_node_title, fallback_node_title, page_title, errors)&lt;br /&gt;
	local nodes = {}&lt;br /&gt;
&lt;br /&gt;
	local count = 0&lt;br /&gt;
	while node_data ~= nil do&lt;br /&gt;
		display = node_data[&amp;#039;display&amp;#039;]&lt;br /&gt;
		link = node_data[&amp;#039;link&amp;#039;]&lt;br /&gt;
		if link ~= nil then&lt;br /&gt;
			wikitext = &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. mw.text.nowiki(display) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			wikitext = mw.text.nowiki(display)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(nodes, 1, wikitext)&lt;br /&gt;
		&lt;br /&gt;
		target_node_title = node_data[&amp;#039;parent&amp;#039;]&lt;br /&gt;
		if target_node_title == nil then&lt;br /&gt;
			node_data = nil&lt;br /&gt;
		elseif count &amp;gt; 30 then&lt;br /&gt;
			node_data = nil&lt;br /&gt;
			table.insert(errors, &amp;quot;tree too deep&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			count = count + 1&lt;br /&gt;
			node_data = get_node(target_node_title)&lt;br /&gt;
			if expected_parent_article ~= nil then&lt;br /&gt;
				if node_data == nil then&lt;br /&gt;
					table.insert(errors, &amp;quot;no parent found but one was expected&amp;quot;)&lt;br /&gt;
				elseif node_data[&amp;#039;link&amp;#039;] ~= nil then&lt;br /&gt;
					if node_data[&amp;#039;title&amp;#039;] ~= expected_parent_article then&lt;br /&gt;
						table.insert(errors, &amp;quot;expected parent mistmatch&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					expected_parent_article = nil&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	for n, text in ipairs(nodes) do&lt;br /&gt;
		result = result .. &amp;#039;&amp;lt;ul style=&amp;quot;line-height:100%; margin-left:5px;padding-left:0&amp;quot;&amp;gt;&amp;lt;li&amp;gt;&amp;#039;&lt;br /&gt;
		if n == #nodes then&lt;br /&gt;
			result = result .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. text .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			result = result .. text&lt;br /&gt;
		end&lt;br /&gt;
		result = result .. &amp;quot;\n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	for n = 1, #nodes do&lt;br /&gt;
		result = result .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result .. &amp;quot;\n&amp;quot; .. show_errors(frame, errors)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.gen_children (frame)&lt;br /&gt;
	local errors = {}&lt;br /&gt;
	&lt;br /&gt;
	local target_node_title = frame.args[&amp;quot;targetnode&amp;quot;]&lt;br /&gt;
	local fallback_node_title = frame.args[&amp;quot;fallbacknode&amp;quot;]&lt;br /&gt;
	local page_title = frame.args[&amp;quot;pagetitle&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	local node_data = get_first_node_data(target_node_title, fallback_node_title, page_title, errors)&lt;br /&gt;
&lt;br /&gt;
	local child_titles = {}&lt;br /&gt;
	&lt;br /&gt;
	if node_data ~= nil then&lt;br /&gt;
		child_titles = node_data[&amp;#039;children&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local children = {}&lt;br /&gt;
	for n, child_title in ipairs(child_titles) do&lt;br /&gt;
		node_data = get_node(child_title)&lt;br /&gt;
		if node_data ~= nil then&lt;br /&gt;
			display = node_data[&amp;#039;display&amp;#039;]&lt;br /&gt;
			link = node_data[&amp;#039;link&amp;#039;]&lt;br /&gt;
			if link ~= nil then&lt;br /&gt;
				wikitext = &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. mw.text.nowiki(display) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				wikitext = mw.text.nowiki(display)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(children, 1, wikitext)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	for n, text in ipairs(children) do&lt;br /&gt;
		result = result .. &amp;quot;* &amp;quot; .. text .. &amp;quot;\n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return result .. &amp;quot;\n&amp;quot; .. show_errors(frame, errors)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get_parent_article (frame)&lt;br /&gt;
	local target_node_title = frame.args[1]&lt;br /&gt;
	local node_data = get_node(target_node_title)&lt;br /&gt;
	local res = nil&lt;br /&gt;
	local count = 0&lt;br /&gt;
	while node_data ~= nil and res == nil and count &amp;lt; 30 do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
		if node_data[&amp;#039;link&amp;#039;] ~= nil then&lt;br /&gt;
			res = node_data[&amp;#039;title&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
		if node_data[&amp;#039;parent&amp;#039;] == nil then&lt;br /&gt;
			node_data = nil&lt;br /&gt;
		else&lt;br /&gt;
			node_data = get_node(node_data[&amp;#039;parent&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if res == nil then&lt;br /&gt;
		res = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;KleptomaniacViolet</name></author>
	</entry>
</feed>