분류를 위키텍스트에서 지워주는 모듈입니다. “문자열[[분류:어떤 분류]]
”이라고 입력하면 “문자열”만 반환합니다.
쌍점(:
)을 이용한 분류나 >
등 잘못된 문자열을 포함한 분류에서도 작동합니다. 그러나 __TOC__
와 같은 특수 명령과 같은 복잡한 위키 문법은 지원하지 않습니다.
사용법편집
{{#invoke:Suppress categories|main|문자열 입력}}
예시편집
코드 | 결과 |
---|---|
{{#invoke:Suppress categories|main|foo}}
|
foo |
{{#invoke:Suppress categories|main|foo[[분류:어떤 분류]]}}
|
foo |
{{#invoke:Suppress categories|main|foo[[분류:어떤 분류]]bar[[분류:또 다른 분류]]}}
|
foobar |
{{#invoke:Suppress categories|main|foo{{{인수|[[분류:Bar]]}}}}}
|
foo |
{{#invoke:Suppress categories|main|foo[[분류:잘못[]된 분류 링크]]}}
|
foo[[분류:잘못[]된 분류 링크]] |
{{#invoke:Suppress categories|main|foo[[:분류:쌍점 이용]]}}
|
foo분류:쌍점 이용 |
{{#invoke:Suppress categories|main|foo[[분류:파이프|이용]]}}
|
foo |
{{#invoke:Suppress categories|main|foo[[분류:파이프|이[]용]]}}
|
foo |
{{#invoke:Suppress categories|main|foo[[분류가 아닌 링크]]}}
|
foo분류가 아닌 링크 |
{{#invoke:Suppress categories|main|foo[[ 분류 : 공백이 있는 분류 ]]}}
|
foo |
같이 보기편집
-- This is a simple module to strip categories from wikitext. It does
-- not support nested links or magic words like __TOC__, etc. Even so,
-- it should still handle most categories.
local p = {}
-- Detects if a category link is valid or not. If it is valid,
-- the function returns the blank string. If not, the input
-- is returned with no changes.
local function processCategory( all, submatch )
local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' )
beforePipe = beforePipe or submatch
if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then
return all
else
return ''
end
end
-- Preprocess the content if we aren't being called from #invoke,
-- and pass it to gsub to remove valid category links.
local function suppress( content, isPreprocessed )
if not isPreprocessed then
content = mw.getCurrentFrame():preprocess( content )
end
content = mw.ustring.gsub(
content,
'(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])',
processCategory
)
return content
end
-- Get the content to suppress categories from, and find
-- whether the content has already been preprocessed. (If the
-- module is called from #invoke, it has been preprocessed already.)
function p.main( frame )
local content, isPreprocessed
if frame == mw.getCurrentFrame() then
content = frame:getParent().args[1]
if frame.args[1] then
content = frame.args[1]
end
isPreprocessed = true
else
content = frame
isPreprocessed = false
end
return suppress( content, isPreprocessed )
end
return p