모듈:네임스페이스 검출/샌드박스

Module
--[[ -------------------------------------------------------------------------------- --                                                                            -- -- 네임스페이스 검출 -- --                                                                            -- -- 이 모듈은 Lua에서 {{namespace detect} 템플릿을 구현합니다. -- 몇 가지 개선사항: 모든 네임스페이스와 모든 네임스페이스 에일리어스가 지원됩니다. -- 및 네임스페이스 이름은 로컬 Wiki에서 자동으로 탐지됩니다.그... -- 모듈에서는 대응하는 서브젝트네임스페이스 값도 사용할 수 있습니다. --토크 페이지에서 사용됩니다.매개 변수 이름은 다른 Wiki에 대해 구성할 수 있습니다. -- 의 "cfg" 테이블의 값을 변경합니다. -- 모듈:네임스페이스 검출/구성. -- --                                                                            -- -------------------------------------------------------------------------------- --]]  현지의 데이터. = .로드 데이터('모듈:네임스페이스 검출/데이터') 현지의 arg키 = 데이터..arg키 현지의 cfg = 데이터..cfg 현지의 매핑 = 데이터..매핑  현지의 네, 아니요 = 요구하다('모듈:네, 아니요.) 현지의 mArguments(인수) -- 모듈 초기화:논쟁들 현지의 mTable툴 -- 게으른 초기화 모듈:표 도구 현지의 ustring Lower(아래쪽) = .스트링.더 낮게  현지의 p = {}  현지의 기능. fetch 값(t1, t2)  -- 어레이 t2의 첫 번째 키에 대한 값을 테이블 t1에서 가져옵니다.  -- t1이라는 비표준값이 존재합니다.  위해서 i, 열쇠  아이페어(t2) 하다   현지의 가치 = t1[열쇠]   한다면 가치 ~= 제로 그리고나서    돌아가다 가치   끝.  끝.  돌아가다 제로 끝.  현지의 기능. 등가 어레이 값(t, 가치)  -- 값이 배열 t의 값과 같으면 true를 반환합니다.그렇지않으면  -- false를 반환합니다.  위해서 i, 어레이 값  아이페어(t) 하다   한다면 가치 == 어레이 값 그리고나서    돌아가다 진실의   끝.  끝.  돌아가다 거짓의 끝.  기능. p.get Page Object(페이지 오브젝트)(페이지입니다.)  -- 페이지 오브젝트를 취득하여 pcall을 통해 기능을 전달합니다.  -- 예를 들어 고가의 함수 수 제한을 초과하는 오류.  한다면 페이지입니다. 그리고나서   현지의 성공., page Object(페이지 오브젝트) = pcall(.직함.신규, 페이지입니다.)   한다면 성공. 그리고나서    돌아가다 page Object(페이지 오브젝트)   또 다른    돌아가다 제로   끝.  또 다른   돌아가다 .직함.get Current Title(전류 제목)()  끝. 끝.  -- 다른 모듈과의 하위 호환성을 위해 제공됨 기능. p.getParamMappings()  돌아가다 매핑 끝.  현지의 기능. get Namespace(args)  -- 이 함수는 페이지 개체에서 네임스페이스 이름을 가져옵니다.  현지의 페이지입니다. = fetch 값(args, arg키.디모피지)  한다면 페이지입니다. == '' 그리고나서   페이지입니다. = 제로  끝.  현지의 데스페이스 = fetch 값(args, arg키.데스페이스)  한다면 데스페이스 == '' 그리고나서   데스페이스 = 제로  끝.  현지의 서브젝트 = fetch 값(args, arg키.서브젝트)  현지의 리트  한다면 데스페이스 그리고나서   -- 「demospace=main」을 적절히 취급한다.   한다면 등가 어레이 값(arg키.주된, ustring Lower(아래쪽)(데스페이스)) 그리고나서    리트 = .위치.네임스페이스[0].이름.   또 다른    리트 = 데스페이스   끝.  또 다른   현지의 page Object(페이지 오브젝트) = p.get Page Object(페이지 오브젝트)(페이지입니다.)   한다면 page Object(페이지 오브젝트) 그리고나서    한다면 page Object(페이지 오브젝트).isTalkPage 그리고나서     -- 옵션이 설정되어 있는 경우는, 서브젝트 네임스페이스를 가져옵니다.     --그렇지 않으면 "talk"를 사용합니다.     한다면 네, 아니요(서브젝트) 그리고나서      리트 = .위치.네임스페이스[page Object(페이지 오브젝트).네임스페이스].주제.이름.     또 다른      리트 = '말하다'     끝.    또 다른     리트 = page Object(페이지 오브젝트).nsText    끝.   또 다른    돌아가다 제로 -- 페이지 오브젝트가 존재하지 않으면 0을 반환합니다.   끝.  끝.  리트 = 리트:서브('_', ' ')  돌아가다 ustring Lower(아래쪽)(리트) 끝.  기능. p.메인(args)  -- 매핑 테이블에 저장되어 있는 파라미터에 일치하는 것이 없는지 확인합니다.  현지의 네임스페이스 = get Namespace(args) 또는 '기타' -- "other"는 테이블 키가 0이 되지 않도록 합니다.  현지의 파라미터 = 매핑[네임스페이스] 또는 {}  현지의 리트 = fetch 값(args, 파라미터)  --[[ -- 일치하는 항목이 없는 경우 다른 네임스페이스에 대한 매개변수를 반환합니다. -- 이것은 네임스페이스에 지정된 텍스트가 없는 경우에 발생합니다. --가 검출되었거나 demospace 파라미터가 유효하지 않은 경우 -- 네임스페이스.탐지된 네임스페이스의 매개 변수는 다음과 같아야 합니다. --이러한 일이 일어나려면, 아무것도 없는 것 뿐만이 아니라, 전혀 없습니다. --]]  한다면 리트 == 제로 그리고나서   리트 = fetch 값(args, arg키.다른.)  끝.  돌아가다 리트 끝.  기능. p.주된()  mArguments(인수) = 요구하다('모듈:인수')  현지의 args = mArguments(인수).취득하다(, {공백 제거 = 거짓의})  현지의 리트 = p.메인(args)  돌아가다 리트 또는 '' 끝.  기능. p.테이블()  --[[ -- 모든 서브젝트 네임스페이스 파라미터의 Wikable을 만듭니다. -- 문서의 목적.talk 파라미터는 옵션입니다. -- 매뉴얼에서 제외해야 합니다. --]]    -- 모듈을 로드하고 변수를 초기화합니다.  mTable툴 = 요구하다('모듈:테이블 도구')  현지의 네임스페이스 = .위치.네임스페이스  현지의 cfg = 데이터..cfg  현지의 useTalk = 유형() == '테이블'    그리고. 유형(.args) == '테이블'    그리고. 네, 아니요(.args.말해라.) -- talk 파라미터를 사용할지 여부.    -- 헤더 이름을 가져옵니다.  현지의 기능. 체크밸류(가치, 체납)   한다면 유형(가치) == '문자열 그리고나서    돌아가다 가치   또 다른    돌아가다 체납   끝.  끝.  현지의 nsheader = 체크밸류(cfg.wikable Namespace Header, '네임스페이스')  현지의 에일리어스 헤더 = 체크밸류(cfg.Wikiable의에일리어스 헤더, '에일리어스')   -- 네임스페이스를 정렬합니다.  현지의 매핑 순서 = {}  위해서 nsname, 파라미터  쌍들(매핑) 하다   한다면 useTalk 또는 nsname ~= '말하다' 그리고나서    현지의 nsid = 네임스페이스[nsname].아이디    -- 어레이는 1로 시작해야 하므로 1을 추가합니다.그렇지 않으면 nsid 0이 손실됩니다.    nsid = nsid + 1     매핑 순서[nsid] = 파라미터   끝.  끝.  매핑 순서 = mTable툴.compressSparseArray(매핑 순서)   -- 테이블을 작성합니다.  현지의 리트 = '{ class='불가능''   .. '\n-'   .. '\n! ' .. nsheader   .. '\n! ' .. 에일리어스 헤더  위해서 i, 파라미터  아이페어(매핑 순서) 하다   위해서 j, PARAM.  아이페어(파라미터) 하다    한다면 j == 1 그리고나서     리트 = 리트 .. '\n-'      .. '\n<코드>' .. PARAM. .. '/code>'      .. '\n'    그렇지 않으면 j == 2 그리고나서     리트 = 리트 .. '<코드>' .. PARAM. .. '/code>'    또 다른     리트 = 리트 .. ', <코드> .. PARAM. .. '/code>'    끝.   끝.  끝.  리트 = 리트 .. '\n-'   .. '\n}'  돌아가다 리트 끝.  돌아가다 p