Module:Link
From Neodyland Wiki
More actions
This documentation is transcluded from Module:Link/doc.
local p = {}
--[=[
forEachLink
Parses wikilinks and returns information about them
Usage:
require( 'Module:Link' ).forEachLink("wikitext", function(linkInfo) end)
Parameters:
wikitext: String of wikitextformatted links. E.g. "[[Main Page]][[Main page]][[does not exist]]"
callback: Function that will be called on each wikilink with linkInfo as first parameter
linkInfo is a table consisting of the following properties:
.isRedir (boolean)
.isRed (boolean)
.text (String)
.link (String or nil)
.title (String or nil)
Returns:
A table (array-like) of all links
Example:
require( 'Module:Link' ).forEachLink("[[Main Page]][[Main page]][[does not exist]]", function(li)
mw.log(li.text .. " points to " .. li.link .. " and has title " .. title)
end)
]=]
function p.forEachLink(wikitext, callback)
local msg = mw.message.newRawMessage( wikitext )
local parsed = msg:parse()
local matches = parsed:gmatch( '<a.-</a>' )
local cbType = type(callback)
local cbCompat= cbType == 'function' or ( cbType == 'table' and getmetatable(callback).__call )
local allLinkInfos = {}
for link in matches do
local linkInfo = {
isRedir = not not link:find('class="mw-redirect"', 1, true),
isRed = not not link:find('class="new"', 1, true),
text = link:match('>(.-)</a>'),
link = link:match('href="(.-)"'),
title = link:match('title="(.-)"')
}
if text and cbCompat then
callback( linkInfo )
end
table.insert( allLinkInfos, linkInfo )
end
return allLinkInfos
end
return p