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 |