<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://battleint.net/index.php?action=history&amp;feed=atom&amp;title=Module%3APath</id>
	<title>Module:Path - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://battleint.net/index.php?action=history&amp;feed=atom&amp;title=Module%3APath"/>
	<link rel="alternate" type="text/html" href="https://battleint.net/index.php?title=Module:Path&amp;action=history"/>
	<updated>2026-11-12T23:26:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://battleint.net/index.php?title=Module:Path&amp;diff=176870&amp;oldid=prev</id>
		<title>imported&gt;Deadfire: creation</title>
		<link rel="alternate" type="text/html" href="https://battleint.net/index.php?title=Module:Path&amp;diff=176870&amp;oldid=prev"/>
		<updated>2024-11-10T00:46:07Z</updated>

		<summary type="html">&lt;p&gt;creation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;function split_path (path)&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	local len = 0&lt;br /&gt;
	for token in path:gmatch(&amp;quot;[^/]+&amp;quot;) do&lt;br /&gt;
		len = len + 1&lt;br /&gt;
		parts[len] = token&lt;br /&gt;
	end&lt;br /&gt;
	return parts, len&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function get_abs_path (current, page)&lt;br /&gt;
	local tbl_i, len_i = split_path(page)&lt;br /&gt;
	local tbl_o&lt;br /&gt;
	local len_o&lt;br /&gt;
	if tbl_i[1] == &amp;#039;.&amp;#039; or tbl_i[1] == &amp;#039;..&amp;#039; then&lt;br /&gt;
		tbl_o, len_o = split_path(current)&lt;br /&gt;
	else&lt;br /&gt;
		tbl_i[1] = tbl_i[1]:gsub(&amp;#039;^([^:]?)([^:]*)(:?)(.?)&amp;#039;,&lt;br /&gt;
			function (s1, s2, s3, s4)&lt;br /&gt;
				if s3 == &amp;#039;&amp;#039; then return s1:upper() .. s2 end&lt;br /&gt;
				return s1:upper() .. s2 .. s3 .. s4:upper()&lt;br /&gt;
			end,&lt;br /&gt;
			1&lt;br /&gt;
		)&lt;br /&gt;
		tbl_o = {}&lt;br /&gt;
		len_o = 0&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in ipairs(tbl_i) do&lt;br /&gt;
		if val == &amp;#039;..&amp;#039; then&lt;br /&gt;
			if len_o &amp;lt; 1 then&lt;br /&gt;
				error(&amp;#039;Module:Path: invalid path&amp;#039;, 0) end&lt;br /&gt;
			tbl_o[len_o] = nil&lt;br /&gt;
			len_o = len_o - 1&lt;br /&gt;
		elseif val ~= &amp;#039;.&amp;#039; then&lt;br /&gt;
			len_o = len_o + 1&lt;br /&gt;
			tbl_o[len_o] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if len_o &amp;lt; 1 then&lt;br /&gt;
		tbl_o[1] = &amp;#039;&amp;#039;&lt;br /&gt;
		len_o = 1&lt;br /&gt;
	end&lt;br /&gt;
	return tbl_o, len_o&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function get_rel_path (current, page, add_prefixes)&lt;br /&gt;
	local tbl_i, len_i = get_abs_path(current, page)&lt;br /&gt;
	local tbl_c, len_c = split_path(current)&lt;br /&gt;
	local tbl_o = {}&lt;br /&gt;
	local len_o = 0&lt;br /&gt;
	local minlen&lt;br /&gt;
	local new_at = 0&lt;br /&gt;
	if len_c &amp;lt; len_i then minlen = len_c else minlen = len_i end&lt;br /&gt;
	for idx = 1, minlen do&lt;br /&gt;
		if tbl_c[idx] ~= tbl_i[idx] then&lt;br /&gt;
			new_at = idx&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if new_at == 1 then return table.concat(tbl_i, &amp;#039;/&amp;#039;) end&lt;br /&gt;
	if add_prefixes then&lt;br /&gt;
		if new_at == 0 then&lt;br /&gt;
			tbl_o[1] = &amp;#039;.&amp;#039;&lt;br /&gt;
			new_at = minlen + 1&lt;br /&gt;
		end&lt;br /&gt;
		for idx = new_at, len_c do&lt;br /&gt;
			len_o = len_o + 1&lt;br /&gt;
			tbl_o[len_o] = &amp;#039;..&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if len_o &amp;lt; 1 then len_o = 1 end&lt;br /&gt;
	elseif new_at == 0 then new_at = minlen + 1 end&lt;br /&gt;
	for idx = new_at, len_i do&lt;br /&gt;
		len_o = len_o + 1&lt;br /&gt;
		tbl_o[len_o] = tbl_i[idx]&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(tbl_o, &amp;#039;/&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local iface = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iface.abs = function (frame)&lt;br /&gt;
	local page = frame.args[1]&lt;br /&gt;
	if page ~= nil then page = page:match&amp;#039;^%s*(.*%S)&amp;#039; end&lt;br /&gt;
	if page == nil then return mw.title.getCurrentTitle().prefixedText end&lt;br /&gt;
	local retval, _ = table.concat(get_abs_path(&lt;br /&gt;
		mw.title.getCurrentTitle().prefixedText,&lt;br /&gt;
		page:gsub(&amp;#039;^%s*/%s*&amp;#039;, &amp;#039;./&amp;#039;, 1)&lt;br /&gt;
	), &amp;#039;/&amp;#039;)&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iface.rel = function (frame)&lt;br /&gt;
	local page = frame.args[1]&lt;br /&gt;
	if page ~= nil then page = page:match&amp;#039;^%s*(.*%S)&amp;#039; end&lt;br /&gt;
	if page == nil then return &amp;#039;.&amp;#039; end&lt;br /&gt;
	return get_rel_path(mw.title.getCurrentTitle().prefixedText,&lt;br /&gt;
		page:gsub(&amp;#039;^%s*/%s*&amp;#039;, &amp;#039;./&amp;#039;, 1), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iface.sub = function (frame)&lt;br /&gt;
	local page = frame.args[1]&lt;br /&gt;
	if page ~= nil then page = page:match&amp;#039;^%s*(.*%S)&amp;#039; end&lt;br /&gt;
	if page == nil then return &amp;#039;&amp;#039; end&lt;br /&gt;
	return get_rel_path(mw.title.getCurrentTitle().prefixedText,&lt;br /&gt;
		page:gsub(&amp;#039;^%s*/%s*&amp;#039;, &amp;#039;./&amp;#039;, 1), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return iface&lt;/div&gt;</summary>
		<author><name>imported&gt;Deadfire</name></author>
	</entry>
</feed>