<?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%3AImport_table</id>
	<title>Module:Import table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AImport_table"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Import_table&amp;action=history"/>
	<updated>2026-04-09T06:23:51Z</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:Import_table&amp;diff=136877&amp;oldid=prev</id>
		<title>imported&gt;MSGJ: more robust tidying of text</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Import_table&amp;diff=136877&amp;oldid=prev"/>
		<updated>2022-11-04T14:46:12Z</updated>

		<summary type="html">&lt;p&gt;more robust tidying of text&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function resolveqid(label)&lt;br /&gt;
	local resolveEntity = require(&amp;quot;Module:ResolveEntityId&amp;quot;)._id&lt;br /&gt;
	local qid&lt;br /&gt;
	local rawlabel&lt;br /&gt;
	if label then&lt;br /&gt;
		rawlabel = string.match(label,&amp;#039;%[%[([^%|%]]+)%|&amp;#039;) or string.match(label,&amp;#039;%[%[([^%|%]]+)%]%]&amp;#039;)&lt;br /&gt;
		if rawlabel then&lt;br /&gt;
			qid = resolveEntity(rawlabel)&lt;br /&gt;
		else&lt;br /&gt;
			rawlabel = label&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return qid,rawlabel&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidystring(string)&lt;br /&gt;
	local tidy = mw.ustring.gsub(string,&amp;quot;%&amp;lt;ref.+%&amp;lt;%/ref%&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) -- remove any references with &amp;lt;ref .. &amp;lt;/ref&amp;gt;&lt;br /&gt;
	tidy = mw.ustring.gsub(tidy,&amp;quot;%&amp;lt;ref.+%/%&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) -- remove any references with &amp;lt;ref .. /&amp;gt;&lt;br /&gt;
	tidy = mw.text.trim(tidy) -- trim spaces&lt;br /&gt;
	return tidy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.import(frame)&lt;br /&gt;
	local tab = &amp;quot;|&amp;quot;&lt;br /&gt;
	local wikiqid = &amp;quot;Q328&amp;quot; -- QID for English Wikipedia&lt;br /&gt;
	local eol = &amp;quot;&amp;lt;br&amp;gt;&amp;quot; -- end of line string&lt;br /&gt;
	local coord2text = require(&amp;quot;Module:Coordinates/sandbox&amp;quot;)._coord2text&lt;br /&gt;
	local args = frame.args or frame:getParent().args&lt;br /&gt;
	if not args.page then&lt;br /&gt;
		return &amp;quot;No page specified.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if not args.config then&lt;br /&gt;
		return &amp;quot;No configuation.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local config = {}&lt;br /&gt;
	for c1,col in ipairs(mw.text.split(args.config,&amp;quot;,&amp;quot;)) do&lt;br /&gt;
		config[c1] = mw.text.split(col,&amp;quot;-&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local common = {}&lt;br /&gt;
	if args.common then&lt;br /&gt;
		for c1,prop in ipairs(mw.text.split(args.common,&amp;quot;,&amp;quot;)) do&lt;br /&gt;
			common[c1] = mw.text.split(prop,&amp;quot;-&amp;quot;)&lt;br /&gt;
			common[common[c1][1]] = common[c1][2] -- create index, e.g. common[&amp;quot;P31&amp;quot;]=Q39715&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local content = mw.title.new(args.page):getContent() -- read page specified&lt;br /&gt;
	content = string.match(content,&amp;quot;%{%|(.+)%|%}&amp;quot;) -- keep table only&lt;br /&gt;
	content = string.gsub(content,&amp;quot;||&amp;quot;,&amp;quot;\n|&amp;quot;) -- use \n| for column breaks&lt;br /&gt;
	local rows = mw.text.split(content,&amp;quot;|-&amp;quot;,true) -- split table into rows&lt;br /&gt;
	table.remove(rows,1) -- remove table definition&lt;br /&gt;
	table.remove(rows,1) -- remove heading row&lt;br /&gt;
	local output = &amp;quot;&amp;quot;&lt;br /&gt;
	local v2 = &amp;quot;&amp;quot;&lt;br /&gt;
	for rn,row in ipairs(rows) do&lt;br /&gt;
		local columns = mw.text.split(row,&amp;quot;\n|&amp;quot;) -- split table rom into columns&lt;br /&gt;
		table.remove(columns,1) -- remove content before the first \n| character&lt;br /&gt;
		local label = columns[1]&lt;br /&gt;
		if label then&lt;br /&gt;
			label = tidystring(label)&lt;br /&gt;
			local qid&lt;br /&gt;
			qid,label = resolveqid(label) -- resolve qid if first column is link&lt;br /&gt;
			if not qid then&lt;br /&gt;
				qid = string.match(label,&amp;quot;Q%d+&amp;quot;) -- check if QID is specified in first column&lt;br /&gt;
			end&lt;br /&gt;
			local entity&lt;br /&gt;
			if qid then&lt;br /&gt;
				entity = mw.wikibase.getEntity(qid)&lt;br /&gt;
			else&lt;br /&gt;
				v2 = v2 .. &amp;quot;CREATE&amp;quot; .. eol&lt;br /&gt;
				qid = &amp;quot;LAST&amp;quot; -- creating new item, so use LAST&lt;br /&gt;
				v2 = v2 .. qid .. tab .. &amp;#039;Len&amp;#039; .. tab .. &amp;#039;&amp;quot;&amp;#039; .. label .. &amp;#039;&amp;quot;&amp;#039; .. eol&lt;br /&gt;
				if common[&amp;quot;P31&amp;quot;] then -- create auto-description&lt;br /&gt;
					v2 = v2 .. qid .. tab .. &amp;#039;Den&amp;#039; .. tab .. &amp;#039;&amp;quot;&amp;#039; .. mw.wikibase.getLabel(common[&amp;quot;P31&amp;quot;])&lt;br /&gt;
					if common[&amp;quot;P17&amp;quot;] then -- add country&lt;br /&gt;
						v2 = v2 .. &amp;#039; in &amp;#039; .. mw.wikibase.getLabel(common[&amp;quot;P17&amp;quot;])&lt;br /&gt;
					end&lt;br /&gt;
					v2 = v2  .. &amp;#039;&amp;quot;&amp;#039; .. eol&lt;br /&gt;
				end&lt;br /&gt;
				for c = 1,#common do&lt;br /&gt;
					v2 = v2 .. qid .. tab .. common[c][1] .. tab .. common[c][2] .. eol&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			local function addtov2(prop,val)&lt;br /&gt;
				v2 = v2 .. qid .. tab .. prop .. tab .. val .. tab .. &amp;quot;S143&amp;quot; .. tab .. wikiqid .. eol&lt;br /&gt;
				return v2&lt;br /&gt;
			end&lt;br /&gt;
			for cn,col in ipairs(columns) do&lt;br /&gt;
				if config[cn] then&lt;br /&gt;
					local import = true&lt;br /&gt;
					if entity then&lt;br /&gt;
						if config[cn][2] then&lt;br /&gt;
							if entity:getAllStatements(config[cn][2])[1] then -- statement already present for this property&lt;br /&gt;
								import = false&lt;br /&gt;
							end&lt;br /&gt;
						else -- no property specified to import to&lt;br /&gt;
							import = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if import then&lt;br /&gt;
						col = tidystring(col)&lt;br /&gt;
						if  config[cn][1] == &amp;quot;wikilink&amp;quot; then&lt;br /&gt;
							local val = resolveqid(col)&lt;br /&gt;
							if val then&lt;br /&gt;
								v2 = addtov2(config[cn][2],val)&lt;br /&gt;
							end&lt;br /&gt;
						elseif config[cn][1] == &amp;quot;year&amp;quot; then&lt;br /&gt;
							local val = string.match(col,&amp;quot;%d%d%d%d&amp;quot;)&lt;br /&gt;
							if val then&lt;br /&gt;
								v2 = addtov2(config[cn][2],&amp;quot;+&amp;quot; ..val .. &amp;quot;-00-00T00:00:00Z/9&amp;quot;)&lt;br /&gt;
							end&lt;br /&gt;
						elseif config[cn][1] == &amp;quot;quantity&amp;quot; then&lt;br /&gt;
							local val = string.gsub(col,&amp;quot;,&amp;quot;,&amp;quot;&amp;quot;) -- remove any commas&lt;br /&gt;
							val = string.match(val,&amp;quot;%d+%.?%d*&amp;quot;) -- extract value, possibly from inside convert template&lt;br /&gt;
							if val then&lt;br /&gt;
								if string.upper(string.sub(config[cn][3],1,1)) == &amp;quot;Q&amp;quot; then&lt;br /&gt;
									config[cn][3] = string.sub(config[cn][3],2)&lt;br /&gt;
								end&lt;br /&gt;
								v2 = addtov2(config[cn][2],val .. &amp;quot;U&amp;quot; .. config[cn][3])&lt;br /&gt;
							end&lt;br /&gt;
						elseif config[cn][1] == &amp;quot;text&amp;quot; then&lt;br /&gt;
							if col ~= &amp;quot;&amp;quot; then&lt;br /&gt;
								v2 = addtov2(config[cn][2],&amp;#039;&amp;quot;&amp;#039; .. col .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
							end&lt;br /&gt;
						elseif config[cn][1] == &amp;quot;coord&amp;quot; then&lt;br /&gt;
							if col ~= &amp;quot;&amp;quot; then&lt;br /&gt;
								local val = mw.getCurrentFrame():preprocess(col)&lt;br /&gt;
								v2 = addtov2(config[cn][2],&amp;quot;@&amp;quot; .. coord2text(val,&amp;quot;lat&amp;quot;) .. &amp;quot;/&amp;quot; .. coord2text(val,&amp;quot;long&amp;quot;))&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return v2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;MSGJ</name></author>
	</entry>
</feed>