모듈:Hatnote 목록/샌드박스

Module
-------------------------------------------------------------------------------- -- 모듈:Hatnote 목록 -- --                                                                            -- -- 이 모듈은 해트노트에서 사용할 목록을 만들고 형식을 지정합니다.특히-- -- 「X 의 경우는, Y 를 참조해 주세요」라고 하는, 참조용의 리스트를 실장합니다. -- {{about}}, {{variant}}, 및 그 변종에서 사용되고 있습니다.또, 소개 -- -- 는, 이러한 접속으로 리스트의 포맷을 실시하는andList & orList 도우미입니다. --------------------------------------------------------------------------------  현지의 mArguments(인수) --게으른 초기화 현지의 mFormatLink = 요구하다('모듈:링크 포맷') 현지의 mHatnote = 요구하다('모듈:해트노트') 현지의 라이브러리 Util = 요구하다('라이브러리 유틸') 현지의 체크 타입 = 라이브러리 Util.체크 타입 현지의 p = {}  -------------------------------------------------------------------------------- -- 문자열화 도우미 함수 나열 -- --이러한 함수는 목록(일반적으로 페이지 목록 내부)을 문자열화하는 데 사용됩니다. -- "X의 경우, Y를 참조하십시오"의 "Y" 부분을 참조하십시오. --------------------------------------------------------------------------------  -- 목록 문자열화 함수 전체에서 사용되는 기본 옵션 테이블 현지의 스트링화하다List Default 옵션 = {  접속사 = "그리고",  분리기 = ",",  altSeparator = ";",  공간 = " ",  포맷했다 = 거짓의 }  --검색은 텍스트만 표시합니다. 현지의 기능. 검색 디스프(건초 더미, 바늘로 찌르다)  돌아가다 string.find(   스트링.서브(건초 더미, (string.find(건초 더미, ' ') 또는 0) + 1), 바늘로 찌르다  ) 끝.  -- 리스트를 일반적으로 문자열화합니다.직접 사용하지 않는 것이 좋습니다. 현지의 기능. 스트링화하다목록.(목록., 옵션들)  -- 유형 검사, 기본값 및 바로 가기  체크 타입("stringify List", 1, 목록., "테이블")  한다면 #목록. == 0 그리고나서 돌아가다 제로 끝.  체크 타입("stringify List", 2, 옵션들, "테이블", 진실의)  옵션들 = 옵션들 또는 {}  위해서 k, v  쌍들(스트링화하다List Default 옵션) 하다   한다면 옵션들[k] == 제로 그리고나서 옵션들[k] = v 끝.  끝.  현지의 s = 옵션들.공간  -- 요청 시 목록 형식을 지정합니다.  한다면 옵션들.포맷했다 그리고나서   목록. = mFormatLink.포맷 페이지(    {categorizeMissing = mHatnote.missingTargetCat}, 목록.   )  끝.  -- 구분 기호를 설정합니다. 항목이 있는 경우 대체 구분 기호를 사용하십시오.  현지의 분리기 = 옵션들.분리기  위해서 k, v  쌍들(목록.) 하다   한다면 검색 디스프(v, 분리기) 그리고나서    분리기 = 옵션들.altSeparator    브레이크.   끝.  끝.  -- 접속사를 설정하고 Oxford 콤마를 적용하고 #1에 """이 있으면 콤마를 붙입니다.  현지의 접속사 = s .. 옵션들.접속사 .. s  한다면 #목록. == 2 그리고. 검색 디스프(목록.[1], "§") 또는 #목록. > 2 그리고나서   접속사 = 분리기 .. 접속사  끝.  -- 포맷된 문자열을 반환합니다.  돌아가다 .본문.list To(목록., 분리기 .. s, 접속사) 끝.  ·DRY 기능 기능. p.consa 리스트 (요술, 목록., fmt)  돌아가다 스트링화하다목록.(목록., {접속사 = 요술, 포맷했다 = fmt}) 끝.  -- "and" 또는 "or"로 목록을 문자열화합니다. 기능. p.리스트 (...) 돌아가다 p.consa 리스트("그리고", ...) 끝. 기능. p.or (...) 돌아가다 p.consa 리스트("또는", ...) 끝.  -------------------------------------------------------------------------------- -- 를 참조해 주세요. -- -- raw 파라미터에서 "X의 경우 [Y] 참조" 목록을 만듭니다.용도의 -- {{about}} 및 {{built}} 템플릿 및 그 변형. --------------------------------------------------------------------------------  -- for 전체에서 사용되는 기본 옵션테이블 기능 패밀리 참조 현지의 for '디폴트 옵션' 참조 = {  키워드 = '그리고',  제목 = .제목.get Current Title(전류 제목)().본문,  기타 텍스트 = '기타 용도',  forSeeForm = '%s에 대해서는 %s을 참조하십시오.', }  -- 중복된 구두점을 접습니다. 현지의 기능. punctuationCollapse (본문)  현지의 교환품 = {   ["%.%.$"] = ".",   ["%?%.$"] = "?",   ["%!%.$"] = "!",   ["%.%]%]%.$"] = ".]]",   ["%?%]%]%.$"] = "?]]",   ["%!%]%]%.$"] = "!]]"  }  위해서 k, v  쌍들(교환품) 하다 본문 = string.gsub(본문, k, v) 끝.  돌아가다 본문 끝.  -- 인수를 문자열화 및 옵션 테이블로 구성합니다. 기능. p.for "Args To Table" 참조 (args, 부터, 옵션들)  -- 유형 검사 및 기본값  체크 타입("ForArgsToTable" 참조, 1, args, '테이블')  체크 타입("ForArgsToTable" 참조, 2, 부터, '숫자', 진실의)  부터 = 부터 또는 1  체크 타입("ForArgsToTable" 참조, 3, 옵션들, '테이블', 진실의)  옵션들 = 옵션들 또는 {}  위해서 k, v  쌍들(for '디폴트 옵션' 참조) 하다   한다면 옵션들[k] == 제로 그리고나서 옵션들[k] = v 끝.  끝.  -- getArgs()와 table.maxn은 친구가 아니기 때문에 maxArg는 수동으로 취득했습니다.  현지의 maxArg = 0  위해서 k, v  쌍들(args) 하다   한다면 유형(k) == '숫자' 그리고. k > maxArg 그리고나서 maxArg = k 끝.  끝.  -- 파라미터 리스트에서 데이터를 구조화합니다.  -- * forTable은 래퍼 테이블로 forRow 행이 있습니다.  -- * 행은 "사용" 문자열 테이블과 pagename 문자열의 "페이지" 테이블입니다.  -- * 공백은 다른 곳에서 기본값으로 사용할 수 있도록 비워두지만 목록을 종료할 수 있습니다.  현지의 테이블 = {}  현지의 i = 부터  현지의 종료했다 = 거짓의  -- 추가 텍스트가 있고 인수가 지정되지 않은 경우 0 값을 지정합니다.  -- "기타 용도의 경우 foo를 참조하십시오(구체적 명확화)"의 기본값을 생성하지 않습니다.  한다면 옵션들.외부 속도 그리고. i > maxArg 그리고나서 돌아가다 제로 끝.  -- 행을 생성하기 위해 루프  따라하다   -- 빈 행이 새로 만들기   현지의  = {}   -- 블랭크 사용의 경우, 리스트가 종료되어 이 루프의 마지막에 끊어진다고 가정합니다.   .사용하다 = args[i]   한다면 것은 아니다. args[i] 그리고나서 종료했다 = 진실의 끝.   -- 새로운 빈 페이지 목록   .페이지 = {}   -- 있는 경우 첫 페이지 항목을 삽입합니다.   table.insert(.페이지, args[i + 1])   -- 다음 파라미터가 "and"인 경우 내부 루프를 실행하여 파라미터를 수집합니다.   'and'가 멈출 때까지요공백은 무시됩니다. "1 및 3" → {1, 3)   하는 동안에 args[i + 2] == 옵션들.키워드 하다    한다면 args[i + 3] 그리고나서      table.insert(.페이지, args[i + 3])    끝.    -- 다음 "and"로 증분합니다.    i = i + 2   끝.   -- 다음 사용 시 증가   i = i + 2   -- 행을 추가합니다.   table.insert(테이블, )  까지 종료했다 또는 i > maxArg    돌아가다 테이블 끝.  -- 테이블 형식을 forSeeArgsToTable로 지정합니다. 기능. p.for 'TableToString' 참조 (표 참조, 옵션들)  -- 유형 검사 및 기본값  체크 타입("ForTableToString", 1, 표 참조, "테이블", 진실의)  체크 타입("ForTableToString", 2, 옵션들, "테이블", 진실의)  옵션들 = 옵션들 또는 {}  위해서 k, v  쌍들(for '디폴트 옵션' 참조) 하다   한다면 옵션들[k] == 제로 그리고나서 옵션들[k] = v 끝.  끝.  -- 참조할 각 항목을 목록으로 문자열화합니다.  현지의 strList = {}  한다면 표 참조 그리고나서   위해서 k, v  쌍들(표 참조) 하다    현지의 useStr = v.사용하다 또는 옵션들.기타 텍스트    현지의 pagesStr =     p.리스트(v.페이지, 진실의) 또는     mFormatLink._formatLink{      categorizeMissing = mHatnote.missingTargetCat,      링크 = mHatnote.차이를 분명히 보여 주다(옵션들.제목)     }    현지의 forSeeStr = string.format(옵션들.forSeeForm, useStr, pagesStr)    forSeeStr = punctuationCollapse(forSeeStr)    table.insert(strList, forSeeStr)   끝.  끝.  한다면 옵션들.외부 속도 그리고나서 table.insert(strList, punctuationCollapse(옵션들.외부 속도..'.')) 끝.  -- 연결된 목록을 반환합니다.  돌아가다 table.concat(strList, ' ') 끝.  -- 인수에서 "X의 경우 [Y] 참조" 문자열을 생성합니다.예상 지수 격차 -- 단, 공백/공백 값은 사용할 수 없습니다.이름 있는 args 및 args < "from"을 무시합니다. 기능. p._를 참조해 주세요. (args, 부터, 옵션들)  현지의 표 참조 = p.for "Args To Table" 참조(args, 부터, 옵션들)  돌아가다 p.for 'TableToString' 참조(표 참조, 옵션들) 끝.  -- _forSee로 지정되지만 프레임을 사용합니다. 기능. p.를 참조해 주세요. (, 부터, 옵션들)  mArguments(인수) = 요구하다('모듈:인수')  돌아가다 p._를 참조해 주세요.(mArguments(인수).취득하다(), 부터, 옵션들) 끝.  돌아가다 p