2,040 bytes added
, 5 years ago
local entities_prefixes = "PQ" ;
local pq_pattern = "[" .. entities_prefixes .. "][1-9][0-9]*" ;
local q_pattern = "[" .. "Q" .. "][1-9][0-9]*" ;
local pattern = "^" .. pq_pattern .."$" ;
local entities_uri_pattern = { "https?://www.wikidata.org/wiki/", "https?://www.wikidata.org/entity/"};
local entities_wikilink_pattern_bounds = { "[[][[]", "|.*[]][]]"};
p = {
entities_prefixes = entities_prefixes;
pq_pattern = pq_pattern ;
pattern = pattern ;
entities_uri_pattern = entities_uri_pattern;
}
p.is_validID = function(id)
return mw.ustring.match(mw.text.trim(id), p.pattern) ~= nil
end
p.is_numberID = function(id)
return mw.ustring.match(mw.text.trim(id), "^[1-9][0-9]*$") ~= nil
end
p.is_uriID = function(id)
return mw.ustring.match(mw.text.trim(id),
"^https?://www.wikidata.org/(entity|wiki)/" .. p.pq_pattern .. "$" ) ~= nil;
end
p.is_wikilinkQID = function(id)
return mw.ustring.match(mw.text.trim(id),
entities_wikilink_pattern_bounds[1] .. q_pattern .. entities_wikilink_pattern_bounds[2] ) ~= nil;
end
p.raw_number_from_StringID = function(id)
-- string_id assumed to be valid
return mw.ustring.gmatch(mw.text.trim(id), "[0-9]*$")()
end
p.id_normalize = function(idstring)
id = mw.text.trim(idstring)
id = mw.ustring.gsub(id, p.entities_uri_pattern[1], "")
id = mw.ustring.gsub(id, p.entities_uri_pattern[2], "")
if p.is_wikilinkQID(id) then
id = mw.ustring.gsub(id, "^" .. entities_wikilink_pattern_bounds[1], "")
id = mw.ustring.gsub(id, entities_wikilink_pattern_bounds[2] .. "$", "")
end
return id
end
p.number = function(frame)
return p.raw_number_from_StringID(frame.args[1])
end
p.valid = function(frame)
id = p.id_normalize(frame.args[1])
if p.is_validID(id) then
return "OK"
else
return nil
end
end
-- returns a P/Q number from a supposed to be entity id
p.isNumberID = function(frame)
if p.is_numberID(frame.args[1]) then
return "OK"
else
return nil
end
end
p.normalize = function(frame)
return p.id_normalize(frame.args[1]);
end
return p;