모듈:딜링크/샌드박스
Module| 모듈 샌드박스 페이지는 다음과 같습니다.Delink(diff). 테스트 케이스에 대해서는, 부속의 서브 페이지도 참조해 주세요(실행). |
| 이 모듈은 페이지 보호 대상입니다.이 모듈은 매우 많은 페이지에서 사용 중이거나 매우 자주 교체됩니다.파손이나 실수는 많은 페이지에 영향을 미치고 사소한 편집이라도 서버에 큰 부하가 걸릴 수 있으므로 편집으로부터 보호됩니다. |
| 이 Lua 모듈은 전체 페이지의 약 1%인 800,000 페이지 이상에서 사용됩니다. 중대한 중단과 서버 로드를 방지하려면 모듈의 /sandbox 또는 /testcase 서브페이지 또는 자체 모듈 샌드박스에서 변경을 테스트해야 합니다.테스트한 변경은 한 번의 편집으로 이 페이지에 추가할 수 있습니다.변경을 실장하기 전에 토크 페이지에서 변경에 대해 논의해 주십시오. |
이 모듈에서는 {{delink}} 템플릿을 구현합니다.설명서에 대해서는 템플릿페이지를 참조해 주세요.
-- 이 모듈은 대부분의 Wikitext를 링크 해제합니다. 요구하다("모듈:글로벌 없음") 현지의 p = {} 현지의 취득하다 현지의 기능. delink Reverse Pipe Trick(파이프 트릭)(s) 한다면 s:경기("^%[%[ .*[\n]") 그리고나서 -- 새 라인 또는 여러 개의 파이프가 있는지 확인합니다. 돌아가다 s 끝. 돌아가다 s:경기("%[%[ (.*)%]%]") 끝. 현지의 기능. delinkPipe의 트릭(s) --[도움말]에 따라 콜론, 괄호, 콤마를 취급해야 합니다.파이프의 속임수] -- 첫 번째 콜론이 있는 경우 첫 번째 콜론 앞에 있는 텍스트를 삭제합니다. 한다면 s:경기(":") 그리고나서 s = s:경기("%[%[.-:(.*) %]%]") --콜론이 없는 경우는, 각 괄호나 파이프로부터 모든 텍스트를 떼어냅니다. 또 다른 s = s:경기("%[%[(.*) %]%]") 끝. --다음은 괄호와 쉼표입니다. 한다면 s:경기("%(.-%)$") 그리고나서 -- 괄호는 쉼표보다 우선합니다. s = s:경기("(.-) ?%(.-%)$") 그렇지 않으면 s:경기(",") 그리고나서 -- 괄호가 없는 경우 첫 번째 쉼표 앞에 텍스트만 표시합니다. s = s:경기("(.-),.*$") 끝. 돌아가다 s 끝. -- wikilink target wikilinks=target을 반환합니다. 현지의 기능. get Delinked Target(디링크 대상)(s) 현지의 결과 = s -- 역파이프의 속임수에 대처합니다. 한다면 결과:경기("%[%[ ") 그리고나서 돌아가다 delink Reverse Pipe Trick(파이프 트릭)(결과) 끝. 결과 = 음.uri.해독하다(결과, '패스') -- 퍼센티지 엔티티를 디코딩합니다.밑줄과 더하기 기호를 남깁니다. 결과 = 음.본문.해독하다(결과, 진실의) -- HTML 엔티티를 디코딩합니다. -- 부정한 제목이 없는지 확인합니다.그러기 위해서는, 그 유저희망과 -- 링크 제목 영역(파이프 앞 부분) 현지의 target_area 한다면 결과:경기(" ") 그리고나서 -- 파이프링크를 다루고 있는지 확인합니다. target_area = 결과:경기("^%[%[(.-) .*%]%]") 또 다른 target_area = 결과:경기("^%[%[(.-)%]%]") 끝. -- 불량 문자를 확인합니다. 한다면 음.스트링.경기(target_area, [%[%] <> {}%%%%pa %c\n]") 그리고. 음.스트링.경기(target_area, [%[%] <> {}%%%%pa %c\n]") ~= "?" 그리고나서 돌아가다 s 끝. 돌아가다 target_area 끝. 현지의 기능. get Delinked Label (get Delinked Label)(s) 현지의 결과 = s -- 역파이프의 속임수에 대처합니다. 한다면 결과:경기("%[%[ ") 그리고나서 돌아가다 delink Reverse Pipe Trick(파이프 트릭)(결과) 끝. 결과 = 음.uri.해독하다(결과, '패스') -- 퍼센티지 엔티티를 디코딩합니다.밑줄과 더하기 기호를 남깁니다. 결과 = 음.본문.해독하다(결과, 진실의) -- HTML 엔티티를 디코딩합니다. -- 부정한 제목이 없는지 확인합니다.그러기 위해서는, 그 유저희망과 -- 링크 제목 영역(파이프 앞 부분) 현지의 target_area 한다면 결과:경기(" ") 그리고나서 -- 파이프링크를 다루고 있는지 확인합니다. target_area = 결과:경기("^%[%[(.-) .*%]%]") 또 다른 target_area = 결과:경기("^%[%[(.-)%]%]") 끝. -- 불량 문자를 확인합니다. 한다면 음.스트링.경기(target_area, [%[%] <> {}%%%%pa %c\n]") 그리고. 음.스트링.경기(target_area, [%[%] <> {}%%%%pa %c\n]") ~= "?" 그리고나서 돌아가다 s 끝. -- 카테고리, 인터위키, 파일을 체크합니다. 현지의 colon_colon_colon_colon_colon의 = 결과:경기("%[%[(.-):.*%]%]") 또는 "" -- 첫 번째 콜론 앞에 텍스트를 가져옵니다. 현지의 ns = 음.위치.네임스페이스[colon_colon_colon_colon_colon의] -- 이것이 알려진 네임스페이스인지 확인합니다. 한다면 음.언어.isKnownLanguageTag(colon_colon_colon_colon_colon의) 또는 (ns 그리고. (ns.표준명 == "파일" 또는 ns.표준명 == "카테고리")) 그리고나서 돌아가다 "" 끝. -- 링크가 [도움말]를 사용하고 있는 경우는, 콜론을 삭제합니다.콜론 트릭] -- 결과: match % % [ % [ : ] -- result = "[" .. result : match : match % [ % [ : ( . . % ]% ] )" --종료 한다면 결과:후보선수(3,3) == ':' 그리고나서 결과 = "[[" .. 결과:후보선수(4,-1) 끝. -- [도움말]을 사용하여 링크를 처리합니다.파이프의 속임수] 한다면 음.스트링.경기(결과, "^%[%[[^ ]* %]%]") 그리고나서 돌아가다 delinkPipe의 트릭(결과) 끝. -- Wikilink 표시 영역을 찾습니다. 한다면 결과:경기(" ") 그리고나서 -- 파이프링크를 다루고 있는지 확인합니다. 결과 = 결과:경기("^%[%[.- (.+)%]%]") -- 여러 줄의 파이프가 연결된 링크 표시에서 새 행을 삭제합니다. -- 여기서 파이프는 첫 번째 새 줄 앞에 있습니다. 결과 = 결과:서브("\n", "") 또 다른 결과 = 결과:경기("^%[%[(.-)%]%]") 끝. 돌아가다 결과 끝. 현지의 기능. 링크 URL(s) -- 이미 내부 Wikilinks를 삭제했다고 가정하고, -- 2개의 대괄호 사이에 텍스트가 몇 개 전달되었습니다.[foo] -- 텍스트에 줄 바꿈이 포함되어 있는 경우, 다른 내용에 관계없이 URL로 포맷되지 않습니다. 한다면 s:경기("\n") 그리고나서 돌아가다 s 끝. -- 텍스트에 유효한 URL 접두사와 유효한 URL 문자가 하나 이상 있는지 확인합니다. 현지의 valid_url_syses = {"//", "param://", "param://", "param://", "gopher://", "메일 수신처:", "뉴스:", "irc://"} 현지의 url_module 위해서 _ ,v 에서 아이페어(valid_url_syses) 하다 한다면 음.스트링.경기(s, '^%[' .. v ..'[^"%s''*%]' ) 그리고나서 url_module = v 브레이크. 끝. 끝. -- 표시 텍스트를 가져옵니다. 한다면 것은 아니다. url_module 그리고나서 돌아가다 s 끝. s = s:경기("^%[" .. url_module .. "(.*)%]") -- URL 접두사 뒤에 있는 텍스트와 마지막 대괄호 앞에 있는 텍스트를 모두 가져옵니다. s = s:경기('^ - ([" < > ) 。*)') 또는 "" -- 첫 번째 URL 구분 문자("<>") 뒤에 있는 텍스트를 모두 가져옵니다. s = 음.스트링.경기(s, "^%s*(%S.*)") 또는 "" -- 구분 문자가 공백일 경우 잘라냅니다. 현지의 디코딩된 = 음.본문.해독하다(s, 진실의) 한다면 음.스트링.경기(디코딩된, %c) 그리고나서 돌아가다 s 끝. 돌아가다 디코딩된 끝. 현지의 기능. delink Link 클래스(본문, 양식, 기능) 한다면 유형(본문) ~= "문자열' 그리고나서 에러("비문자열 입력 링크 해제 시도", 2) 끝. -- 불필요한 체크 -- type(pattern) ~= "string" 또는 string.sub(pattern, 1, 1) ~= "^"인 경우 -- error('유효하지 않은 패턴이 검출되었습니다.패턴은 "^"로 시작해야 합니다. , 2) --종료 -- 텍스트 문자열을 반복하고 일치하는 텍스트를 바꿉니다.사용방법 -- delink 함수. 현지의 결과 = "" 현지의 어떤 일을 맡다 = 본문:발견하다('%[') 현지의 n 하는 동안에 어떤 일을 맡다 하다 결과 = 결과 .. 음.스트링.후보선수(본문, 1, 어떤 일을 맡다 - 1) 본문 = 음.스트링.후보선수(본문, 어떤 일을 맡다, -1) -- gsub를 1회 반복하여 텍스트를 바꿉니다. 본문, n = 음.스트링.서브(본문, 양식, 기능, 1) 어떤 일을 맡다 = 본문:발견하다('%[', 2) 끝. 결과 = 결과 .. 본문 돌아가다 결과 끝. 기능. p._delink(델링크)(args) 현지의 본문 = args[1] 또는 "" 한다면 args.참조 == "네" 그리고나서 -- [도움말]을 삭제합니다.스트립 마커]] 참조 태그를 나타냅니다.대부분의 경우 --이것은 좋은 생각이 아닙니다.- 무엇을 하고 있는지 알고 있는 경우에만 사용합니다. 본문 = 음.스트링.서브(본문, "UNIQ%w*%-ref%-%d*%-QINU", "") 끝. 한다면 args.평. ~= "아니요" 그리고나서 본문 = 본문:서브("<!%-%-.%-%->", "") -- HTML 코멘트를 삭제합니다. 끝. 한다면 본문:경기("%[") 그리고나서 --텍스트에 대괄호가 포함되어 있습니까? 한다면 args.링크 ~= "아니요" 그리고. args.링크 ~= "타깃" 그리고나서 -- Wikilinks의 링크를 해제하고 Wikilink의 라벨 부분을 반환합니다. 본문 = delink Link 클래스(본문, "^%[%[.-%]%]", get Delinked Label (get Delinked Label)) 그렇지 않으면 args.링크 == "타깃" 그리고나서 -- Wikilinks의 링크를 해제하고 Wikilink의 타깃 부분을 반환합니다. 본문 = delink Link 클래스(본문, "^%[%[.-%]%]", get Delinked Target(디링크 대상)) 끝. 한다면 args.URL ~= "아니요" 그리고나서 본문 = delink Link 클래스(본문, "^%[.-%]", 링크 URL) -- 링크 해제 URL. 끝. 끝. 한다면 args.공백 ~= "아니요" 그리고나서 -- 새 행 하나를 공백으로 바꾸되 새 행은 두 개 남깁니다. -- 새 행은 두 번째 새 행 앞에 공백 또는 탭만 포함합니다. 본문 = 음.스트링.서브(본문, "([^\n \t][\t]*)\n([\t]*[^\n \t])", "%1 %2") 본문 = 본문:서브("[\t]+", " ") -- 추가 탭 및 공백을 제거합니다. 끝. 돌아가다 본문 끝. 기능. p.링크(틀) 한다면 것은 아니다. 취득하다 그리고나서 취득하다 = 요구하다('모듈:인수').취득하다 끝. 돌아가다 p._delink(델링크)(취득하다(틀, {포장지 = '템플릿:링크})) 끝. 돌아가다 p