둘러보기 메뉴
검색
바뀐글
임의글
개인 도구
가입하기
로그인
도움말
도움말
질문게시판
자주 묻는 질문
커뮤니티
실시간 채팅방
가입인사게시판
자유게시판
뉴스게시판
제재안게시판
최근 토론
페미위키
공지사항
개선 요청
바뀐글
임의글
파일 올리기
다면 분류 목록
특수 문서 목록
모듈:Category 문서 원본 보기
이름공간
모듈
토론
주시
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
위키베이스 항목
행위
보기
읽기
원본 보기
역사 보기
←
모듈:Category
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요.
요청한 명령은 다음 중 하나의 권한을 가진 사용자에게 제한됩니다:
사용자
,
Seeders
.
문서를 고치려면 이메일 인증 절차가 필요합니다.
사용자 환경 설정
에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.
문서의 원본을 보거나 복사할 수 있습니다.
local p = {} --- 주어진 분류들로 문서를 분류하고 분류들을 표시하기 위한 위키텍스트를 만듭니다. -- 만약 '{{#invoke:Category|categorize|성격/단체, 성향/페미니즘}}'과 같이 -- 호출되었다면 다음 작업을 수행합니다: -- 1. 반환값에 '[[분류:성격/단체]]'를 추가합니다. -- 2. '분류:성격/단체'라는 문서가 있는지, 있다면 상위분류가 있는지를 확인합니다. -- 둘다 맞다면 반환값에 '분류:성격/단체'를 전개하여 추가합니다. -- (해당 틀은 이 함수를 재귀호출합니다.) -- 3. '성향/페미니즘'에 대해서도 같은 작업을 수행합니다. -- @param frame 호출되면서 자동으로 만들어진 frame 객체. -- @return 문서를 분류해 주는 위키텍스트, 오류가 있었다면 빈 문자열. function p.categorize(frame) local args = safeArgs(frame) if args[1] == nil or args[1] == '' then return error('분류를 입력해 주세요', 0) end return _categorize(safeCategories(args), frame) end --- 다면분류에서 패싯을 찾습니다. 예를 들어 'A/B'를 인자로 받으면 A를 반환합니다. -- @param frame 호출되면서 자동으로 만들어진 frame 객체. -- @return 패싯 문자열. function p.facet(frame) local text = '' if type(frame) == 'string' then text = frame else text = frame.args[1] end local slash = string.find(text, '/') if slash == nil then return text end return string.sub(text, 1, slash-1) end --- 다면분류에서 멤버를 찾습니다. 예를 들어 'A/B'를 인자로 받으면 B를 반환합니다. -- @param frame 호출되면서 자동으로 만들어진 frame 객체. -- @return 멤버 문자열. function p.member(frame) local text = '' if type(frame) == 'string' then text = frame else text = frame.args[1] end local slash = string.find(text, '/') if slash == nil then return text end return string.sub(text, slash+1, #text) end --- 주어진 분류들로 문서를 분류하고 분류들을 표시하기 위한 위키텍스트를 반환합니다. -- @param categories 표시할 분류들. -- @param frame 호출되면서 자동으로 만들어진 frame 객체. -- @return 문서를 분류해 주는 위키텍스트, 오류가 있었다면 빈 문자열. function _categorize(categories, frame) local returnText = '' for i, v in ipairs(categories) do if v == nil then error('사용하신 분류 문법이 잘못되었습니다.' .. '[[도움말:문서 분류하기]]를 참고해 주세요', 0) return '' elseif v == mw.title.getCurrentTitle().text then error('자기자신으로 분류할 수 없습니다.' .. '[[도움말:문서 분류하기]]를 참고해 주세요', 0) end returnText = returnText .. '[[분류:' .. v .. ']]\n' end return returnText end --- 전달인자들이 포함하고 있는 분류 정보를 묶어 정해진 형태의 배열로 만듭니다. -- @param args args은 다음 중 하나의 형태일 수 있습니다. -- { 'A/B' } (권장) -- { 'A/B, C/D' } (권장) -- { 'A/B|C/D' } -- { 'A|B|C|D' } -- { 'A', 'B', 'C', 'D' } -- { 'A/B', 'C/D' } -- @return 'A/B' 형식의 문자열들을 담은 배열. function safeCategories(args) if type( args ) == 'string' then args = { args } end local temp = {} -- 첫 번재 전달인자에 '|'가 있다면 '|'를 기준으로 분리시킵니다 -- (예: 'A|B|C|D'이나 'A|B') if string.match(args[1], '|') ~= nil then for word in string.gmatch(args[1], '%s*([^%|]+)%s*') do temp[#temp+1] = word end args = temp end --1. 첫 번재 전달인자에 슬래시가 없는데 전달인자가 하나라면 오류(예: 'A') --2. 첫 번재 전달인자에 슬래시가 없으면서 여럿이라면 -- 슬래시를 추가하여 둘씩 묶습니다(예: 'A', 'B', 'C', 'D'). if string.find(args[1], '/') == nil then if #args == 1 then error( '사용하신 구문은 다면분류가 아닙니다.' .. '[[도움말:문서 분류하기]]를 참고해 주세요', 0) else temp = {} for i, v in ipairs(args) do if i % 2 ~= 0 then temp[#temp+1] = string.match(v, '^%s*(.-)%s*$') else temp[#temp] = temp[#temp] .. '/' .. string.match(v, '^%s*(.-)%s*$') end end args = temp end end -- 첫 번재 전달인자에 쉼표가 있다면 쉼표를 기준으로 각각을 분리합니다. -- 예시: 'A/B, C/D' if string.match(args[1], ',') ~= nil then temp = {} for word in string.gmatch(args[1], '%s*([^,]+)%s*') do temp[#temp+1] = word end args = temp end --전체적으로 trim 합니다. for i in ipairs(args) do args[i] = string.match(args[i], '^%s*(.-)%s*$') end return args end function hasValue(tab, val) for index, value in ipairs(tab) do if value == val then return true end end return false end --- frame 객체가 틀에서 호출되어 생긴 frame인지 바로 모듈이 호출되어 생긴 -- frame인지와 무관하게 args를 찾습니다. -- @param frame 호출되면서 자동으로 만들어진 frame 객체. -- @return args 호출되면서 전달받은 전달인자. function safeArgs(frame) --frame은 metatable이라 next(frame.args)가 안 된다고 합니다. --@reference https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame.args if frame.args[1] ~= nil then return frame.args else return frame:getParent().args end end return p
이 문서에서 사용한 틀:
모듈:Category/설명문서
(
원본 보기
)
모듈:Category
문서로 돌아갑니다.
다른 언어