Module:Link: Difference between revisions
From Neodyland Wiki
More actions
m upd |
m improved |
||
| Line 20: | Line 20: | ||
Returns: | Returns: | ||
The concatenated result of the results of the supplied callback or, | |||
if no callback function was supplied, a table of linkInfo tables | |||
Example: | Example: | ||
| Line 46: | Line 47: | ||
title = link:match('title="(.-)"') | title = link:match('title="(.-)"') | ||
} | } | ||
if text | if linkInfo.text then | ||
if cbCompat then | |||
table.insert( allLinkInfos, callback( linkInfo ) ) | |||
else | |||
table.insert( allLinkInfos, linkInfo ) | |||
end | |||
end | end | ||
end | end | ||
if cbCompat then allLinkInfos = table.concat(allLinkInfos, '') end | |||
return allLinkInfos | return allLinkInfos | ||
end | end | ||
return p | return p | ||
Revision as of 15:01, 16 May 2013
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:
.redir (boolean)
.red (boolean)
.text (String)
.link (String or nil)
.title (String or nil)
Returns:
The concatenated result of the results of the supplied callback or,
if no callback function was supplied, a table of linkInfo tables
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 = {
redir = not not link:find('class="mw-redirect"', 1, true),
red = not not link:find('class="new"', 1, true),
text = link:match('>(.-)</a>'),
link = link:match('href="(.-)"'),
title = link:match('title="(.-)"')
}
if linkInfo.text then
if cbCompat then
table.insert( allLinkInfos, callback( linkInfo ) )
else
table.insert( allLinkInfos, linkInfo )
end
end
end
if cbCompat then allLinkInfos = table.concat(allLinkInfos, '') end
return allLinkInfos
end
return p