| Line 1: |
Line 1: |
| | -- This module de-links most wikitext. | | -- This module de-links most wikitext. |
| | | | |
| − | require('Module:No globals')
| + | p = {} |
| − | | |
| − | local p = {}
| |
| − | | |
| − | local getArgs
| |
| | | | |
| | local function delinkReversePipeTrick(s) | | local function delinkReversePipeTrick(s) |
| − | if s:match("^%[%[|.*[|\n]") then -- Check for newlines or multiple pipes. | + | if mw.ustring.match(s, "^%[%[|.*[|\n]") then -- Check for newlines or multiple pipes. |
| | return s | | return s |
| | else | | else |
| − | return s:match("%[%[|(.*)%]%]") | + | return mw.ustring.match(s, "%[%[|(.*)%]%]") |
| | end | | end |
| | end | | end |
| Line 20: |
Line 16: |
| | | | |
| | -- First, remove the text before the first colon, if any. | | -- First, remove the text before the first colon, if any. |
| − | if s:match(":") then | + | if mw.ustring.match(s, ":") then |
| − | s = s:match("%[%[.-:(.*)|%]%]") | + | s = mw.ustring.match(s, "%[%[.-:(.*)|%]%]") |
| | -- If there are no colons, grab all of the text apart from the square brackets and the pipe. | | -- If there are no colons, grab all of the text apart from the square brackets and the pipe. |
| | else | | else |
| − | s = s:match("%[%[(.*)|%]%]") | + | s = mw.ustring.match(s, "%[%[(.*)|%]%]") |
| | end | | end |
| | | | |
| | -- Next up, brackets and commas. | | -- Next up, brackets and commas. |
| − | if s:match("%(.-%)$") then -- Brackets trump commas. | + | if mw.ustring.match(s, "%(.-%)$") then -- Brackets trump commas. |
| − | s = s:match("(.-) ?%(.-%)$") | + | s = mw.ustring.match(s, "(.-) ?%(.-%)$") |
| − | elseif s:match(",") then -- If there are no brackets, display only the text before the first comma. | + | elseif mw.ustring.match(s, ",") then -- If there are no brackets, display only the text before the first comma. |
| − | s = s:match("(.-),.*$") | + | s = mw.ustring.match(s, "(.-),.*$") |
| | end | | end |
| | return s | | return s |
| Line 39: |
Line 35: |
| | local result = s | | local result = s |
| | -- Deal with the reverse pipe trick. | | -- Deal with the reverse pipe trick. |
| − | if result:match("%[%[|") then | + | if mw.ustring.match(result, "%[%[|") then |
| | return delinkReversePipeTrick(result) | | return delinkReversePipeTrick(result) |
| | end | | end |
| Line 49: |
Line 45: |
| | -- title area of the link, i.e. the part before any pipes. | | -- title area of the link, i.e. the part before any pipes. |
| | local titlearea | | local titlearea |
| − | if result:match("|") then -- Find if we're dealing with a piped link. | + | if mw.ustring.match(result, "|") then -- Find if we're dealing with a piped link. |
| − | titlearea = result:match("^%[%[(.-)|.*%]%]") | + | titlearea = mw.ustring.match(result, "^%[%[(.-)|.*%]%]") |
| | else | | else |
| − | titlearea = result:match("^%[%[(.-)%]%]") | + | titlearea = mw.ustring.match(result, "^%[%[(.-)%]%]") |
| | end | | end |
| | -- Check for bad characters. | | -- Check for bad characters. |
| Line 60: |
Line 56: |
| | | | |
| | -- Check for categories, interwikis, and files. | | -- Check for categories, interwikis, and files. |
| − | local colonprefix = result:match("%[%[(.-):.*%]%]") or "" -- Get the text before the first colon. | + | local colonprefix = mw.ustring.match(result, "%[%[(.-):.*%]%]") or "" -- Get the text before the first colon. |
| | local ns = mw.site.namespaces[colonprefix] -- see if this is a known namespace | | local ns = mw.site.namespaces[colonprefix] -- see if this is a known namespace |
| | if mw.language.isKnownLanguageTag(colonprefix) | | if mw.language.isKnownLanguageTag(colonprefix) |
| Line 68: |
Line 64: |
| | | | |
| | -- Remove the colon if the link is using the [[Help:Colon trick]]. | | -- Remove the colon if the link is using the [[Help:Colon trick]]. |
| − | if result:match("%[%[:") then | + | if mw.ustring.match(result, "%[%[:") then |
| − | result = "[[" .. result:match("%[%[:(.*%]%])") | + | result = "[[" .. mw.ustring.match(result, "%[%[:(.*%]%])") |
| | end | | end |
| | | | |
| Line 78: |
Line 74: |
| | | | |
| | -- Find the display area of the wikilink | | -- Find the display area of the wikilink |
| − | if result:match("|") then -- Find if we're dealing with a piped link. | + | if mw.ustring.match(result, "|") then -- Find if we're dealing with a piped link. |
| − | result = result:match("^%[%[.-|(.+)%]%]") | + | result = mw.ustring.match(result, "^%[%[.-|(.+)%]%]") |
| | -- Remove new lines from the display of multiline piped links, | | -- Remove new lines from the display of multiline piped links, |
| | -- where the pipe is before the first new line. | | -- where the pipe is before the first new line. |
| − | result = result:gsub("\n", "") | + | result = mw.ustring.gsub(result, "\n", "") |
| | else | | else |
| − | result = result:match("^%[%[(.-)%]%]") | + | result = mw.ustring.match(result, "^%[%[(.-)%]%]") |
| | end | | end |
| | | | |
| Line 95: |
Line 91: |
| | | | |
| | -- If the text contains a line break it is not formatted as a URL, regardless of other content. | | -- If the text contains a line break it is not formatted as a URL, regardless of other content. |
| − | if s:match("\n") then | + | if mw.ustring.match(s, "\n") then |
| | return s | | return s |
| | end | | end |
| Line 113: |
Line 109: |
| | return s | | return s |
| | end | | end |
| − | s = s:match("^%[" .. url_prefix .. "(.*)%]") -- Grab all of the text after the URL prefix and before the final square bracket. | + | s = mw.ustring.match(s, "^%[" .. url_prefix .. "(.*)%]") -- Grab all of the text after the URL prefix and before the final square bracket. |
| − | s = s:match('^.-(["<> ].*)') or "" -- Grab all of the text after the first URL separator character ("<> ). | + | s = mw.ustring.match(s, '^.-(["<> ].*)') or "" -- Grab all of the text after the first URL separator character ("<> ). |
| | s = mw.ustring.match(s, "^%s*(%S.*)$") or "" -- If the separating character was a space, trim it off. | | s = mw.ustring.match(s, "^%s*(%S.*)$") or "" -- If the separating character was a space, trim it off. |
| | | | |
| − | local s_decoded = mw.text.decode(s, true) | + | s_decoded = mw.text.decode(s, true) |
| | if mw.ustring.match(s_decoded, "%c") then | | if mw.ustring.match(s_decoded, "%c") then |
| | return s | | return s |
| Line 136: |
Line 132: |
| | -- 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 s ~= '' do | + | while mw.ustring.len(s) > 0 do |
| | -- Replace text using one iteration of gsub. | | -- Replace text using one iteration of gsub. |
| | s = mw.ustring.gsub(s, pattern, delinkFunction, 1) | | s = mw.ustring.gsub(s, pattern, delinkFunction, 1) |
| Line 154: |
Line 150: |
| | end | | end |
| | if not (args.comments == "no") then | | if not (args.comments == "no") then |
| − | text = text:gsub("<!%-%-.-%-%->", "") -- Remove html comments. | + | text = mw.ustring.gsub(text, "<!%-%-.-%-%->", "") -- Remove html comments. |
| | end | | end |
| | if not (args.wikilinks == "no") then | | if not (args.wikilinks == "no") then |
| Line 166: |
Line 162: |
| | -- and new lines only containing spaces or tabs before a second new line. | | -- and new lines only containing spaces or tabs before a second new line. |
| | text = mw.ustring.gsub(text, "([^\n \t][ \t]*)\n([ \t]*[^\n \t])", "%1 %2") | | text = mw.ustring.gsub(text, "([^\n \t][ \t]*)\n([ \t]*[^\n \t])", "%1 %2") |
| − | text = text:gsub("[ \t]+", " ") -- Remove extra tabs and spaces. | + | text = mw.ustring.gsub(text, "[ \t]+", " ") -- Remove extra tabs and spaces. |
| | end | | end |
| | return text | | return text |
| Line 172: |
Line 168: |
| | | | |
| | function p.delink(frame) | | function p.delink(frame) |
| − | if not getArgs then | + | local args |
| − | getArgs = require('Module:Arguments').getArgs
| + | if frame == mw.getCurrentFrame() then |
| | + | -- We're being called via #invoke. If the invoking template passed any args, use |
| | + | -- them. Otherwise, use the args that were passed into the template. |
| | + | args = frame:getParent().args |
| | + | for k, v in pairs(frame.args) do |
| | + | args = frame.args |
| | + | break |
| | + | end |
| | + | else |
| | + | -- We're being called from another module or from the debug console, so assume |
| | + | -- the args are passed in directly. |
| | + | args = frame |
| | end | | end |
| − | return p._delink(getArgs(frame, {wrappers = 'Template:Delink'})) | + | return p._delink(args) |
| | end | | end |
| | | | |
| | return p | | return p |