Module:Delink: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(split the search algorithm out into its own function, add data type checks)
(Try parsing wikilinks and URLs on the same pass)
Line 115: Line 115:
end
end


local function delinkLinkClass(s, pattern, delinkFunction)
local function _delink(args)
if not type(s) == "string" then
local text = args[1] or ""
-- Iterate over the text string, and replace any matched text with the
error("Attempt to de-link non-string input.", 2)
end
if not ( type(pattern) == "string" and mw.ustring.sub(pattern, 1, 1) == "^" ) then
error('Invalid pattern detected. Patterns must begin with "^".', 2)
end
-- Iterate over the text string, and replace any matched text. using the
-- delink function. We need to iterate character by character rather
-- delink function. We need to iterate character by character rather
-- than just use gsub, otherwise nested links aren't detected properly.
-- than just use gsub, otherwise nested links aren't detected properly.
local result = ""
local result = ""
while mw.ustring.len(s) > 0 do
while mw.ustring.len(text) > 0 do
-- Replace text using one iteration of gsub.
-- Replace text using one iteration of gsub.
s = mw.ustring.gsub(s, pattern, delinkFunction, 1)
text = mw.ustring.gsub(text, "^%[%[.-%]%]", delinkWikilink, 1) -- De-link wikilinks.
text = mw.ustring.gsub(text, "^%[.-%]", delinkURL, 1) -- De-link URLs
-- Append the left-most character to the result string.
-- Append the left-most character to the result string.
result = result .. mw.ustring.sub(s, 1, 1)
result = result .. mw.ustring.sub(text, 1, 1)
s = mw.ustring.sub(s, 2, -1)
text = mw.ustring.sub(text, 2, -1)
end
end
result = mw.ustring.gsub(result, "%s+", " ") -- Remove extra whitespace.
return result
return result
end

local function _delink(args)
local text = args[1] or ""
text = delinkLinkClass(text, "^%[%[.-%]%]", delinkWikilink) -- De-link wikilinks.
text = delinkLinkClass(text, "^%[.-%]", delinkURL) -- De-link URLs.
text = mw.ustring.gsub(text, "%s+", " ") -- Remove extra whitespace.
return text
end
end


Line 159: Line 148:
args = frame
args = frame
end
end
return _delink(args)
return _delink(args)
end
end