모듈:델링크
Module| 이 모듈은 페이지 보호 대상입니다.매우 많은 페이지에서 사용하는 눈에 잘 띄는 모듈이거나 매우 자주 교체됩니다.파손이나 실수는 많은 페이지에 영향을 미치며 사소한 편집에도 서버에 상당한 부하가 걸릴 수 있기 때문에 편집으로부터 보호됩니다. |
| 이 루아 모듈은 전체 페이지의 약 4%인 2,090,000개 이상의 페이지에 사용됩니다. 중대한 중단과 서버 부하를 방지하기 위해 모듈의 /샌드박스 또는 /테스트 케이스 하위 페이지 또는 자체 모듈 샌드박스에서 변경 사항을 테스트해야 합니다.테스트된 변경 내용을 한 번의 편집으로 이 페이지에 추가할 수 있습니다.실행하기 전에 토크 페이지에서 변경 사항에 대해 논의하는 것을 고려합니다. |
이 모듈은 {{delink}} 템플릿을 구현합니다.설명서는 템플릿 페이지를 참조하시기 바랍니다.
-- 이 모듈은 대부분의 위키텍스트 링크를 해제합니다. 요구하다(strict) 현지의 p = {} 현지의 getArgs 현지의 기능. delink 역방향 파이프 트릭(s) 한다면 s:경기("^%[%[ .*[\n]") 그리고나서 -- 새 선이나 여러 파이프가 있는지 확인합니다. 돌아가다 s 끝. 돌아가다 s:경기("%[%[ (.*)%]%]") 끝. 현지의 기능. 디링크 파이프 트릭(s) -- [도움말]에 따라 콜론, 대괄호 및 쉼표를 처리해야 합니다.파이프 트릭]]. -- 먼저 첫 번째 콜론 앞에 있는 텍스트를 제거합니다. 한다면 s:경기(":") 그리고나서 s = s:경기("%[%[.-:(.*) %]%]") -- 콜론이 없으면 대괄호와 파이프를 제외한 모든 텍스트를 잡습니다. 또 다른 s = s:경기("%[%[(.*) %]%]") 끝. -- 다음으로 괄호와 쉼표. 한다면 s:경기("%(.-%)$") 그리고나서 -- 대괄호는 쉼표보다 깁니다. s = s:경기("(.-) ?%(.-%)$") 그 외의 경우에는 s:경기(",") 그리고나서 -- 대괄호가 없으면 첫 번째 쉼표 앞에 텍스트만 표시합니다. s = s:경기("(.-),.*$") 끝. 돌아가다 s 끝. -- wikilink target wikilinks= target 반환 현지의 기능. 연결 해제 대상 가져오기(s) 현지의 결과 = s -- 역 파이프 트릭을 처리합니다. 한다면 결과:경기("%[%[ ") 그리고나서 돌아가다 delink 역방향 파이프 트릭(결과) 끝. 결과 = mw.uri.해독하다(결과, "PATH") -- %-encoded 엔티티를 디코딩합니다.밑줄과 더하기 기호를 남깁니다. 결과 = mw.본문.해독하다(결과, 진실의) -- HTML 엔티티를 해독합니다. -- 제목이 나쁜지 확인합니다.이를 위해서는 우리가 필요한 것은 -- 링크의 제목 영역, 즉 파이프 앞 부분. 현지의 대상_면적 한다면 결과:경기(" ") 그리고나서 -- 우리가 파이프 연결을 다루고 있는지 알아봅니다. 대상_면적 = 결과:경기("^%[%[(.-) .*%]%]") 또 다른 대상_면적 = 결과:경기("^%[%[(.-)%]%]") 끝. -- 나쁜 캐릭터가 있는지 확인합니다. 한다면 mw.utstring.경기(대상_면적, "[%[%]<>{}% %c\n]") 그리고. mw.utstring.경기(대상_면적, "[%[%]<>{}% %c\n]") ~= "?" 그리고나서 돌아가다 s 끝. 돌아가다 대상_면적 끝. 현지의 기능. 연결 해제된 레이블 가져오기(s) 현지의 결과 = s -- 역 파이프 트릭을 처리합니다. 한다면 결과:경기("%[%[ ") 그리고나서 돌아가다 delink 역방향 파이프 트릭(결과) 끝. 결과 = mw.uri.해독하다(결과, "PATH") -- %-encoded 엔티티를 디코딩합니다.밑줄과 더하기 기호를 남깁니다. 결과 = mw.본문.해독하다(결과, 진실의) -- HTML 엔티티를 해독합니다. -- 제목이 나쁜지 확인합니다.이를 위해서는 우리가 필요한 것은 -- 링크의 제목 영역, 즉 파이프 앞 부분. 현지의 대상_면적 한다면 결과:경기(" ") 그리고나서 -- 우리가 파이프 연결을 다루고 있는지 알아봅니다. 대상_면적 = 결과:경기("^%[%[(.-) .*%]%]") 또 다른 대상_면적 = 결과:경기("^%[%[(.-)%]%]") 끝. -- 나쁜 캐릭터가 있는지 확인합니다. 한다면 mw.utstring.경기(대상_면적, "[%[%]<>{}% %c\n]") 그리고. mw.utstring.경기(대상_면적, "[%[%]<>{}% %c\n]") ~= "?" 그리고나서 돌아가다 s 끝. -- 카테고리, 인터위키 및 파일을 확인합니다. 현지의 대장_ = 결과:경기("%[%[(.-):.*%]%]") 아니면 "" -- 첫번째 콜론 앞에 텍스트를 가져옵니다. 현지의 ns = mw.위치.네임스페이스[대장_] -- 알려진 네임스페이스인지 확인합니다. 한다면 mw.언어.isKnown LanguageTag(대장_) 아니면 (ns 그리고. (ns.표준 이름 == "파일" 아니면 ns.표준 이름 == "카테고리")) 그리고나서 돌아가다 "" 끝. -- 링크가 [[도움말:]을 사용하는 경우 콜론을 제거합니다.대장 속임수]. 한다면 결과:경기("%[%[:") 그리고나서 결과 = "[[" .. 결과:경기("%[%[:(.*%]%])") 끝. -- [[도움말:]을 사용하여 링크를 처리합니다.파이프 트릭]]. 한다면 mw.utstring.경기(결과, "^%[%[[^ ]* %]%]") 그리고나서 돌아가다 디링크 파이프 트릭(결과) 끝. -- 위키링크의 표시 영역 찾기 한다면 결과:경기(" ") 그리고나서 -- 우리가 파이프 연결을 다루고 있는지 알아봅니다. 결과 = 결과:경기("^%[%[.- (.+)%]%]") -- 다중 줄 연결 표시에서 새 줄을 제거합니다. -- 파이프가 첫번째 새 줄 앞에 있는 곳입니다. 결과 = 결과:gsub("\n", "") 또 다른 결과 = 결과:경기("^%[%[(.-)%]%]") 끝. 돌아가다 결과 끝. 현지의 기능. delink URL(s) -- 우리가 이미 내부 위키링크를 해제했다고 가정해 보겠습니다. -- 우리는 두 대괄호 사이에 약간의 텍스트를 전달받았습니다. -- 텍스트에 줄 바꿈이 포함되어 있으면 다른 내용에 관계없이 URL 형식으로 지정되지 않습니다. 한다면 s:경기("\n") 그리고나서 돌아가다 s 끝. -- 텍스트에 유효한 URL 접두사와 하나 이상의 유효한 URL 문자가 있는지 확인합니다. 현지의 유효_url_prefix = {"//", "http://", "https://", "ftp://", "gopher://", "메일 수신인:", "뉴스:", "irc://"} 현지의 url_ 위해서 _ ,v 인에 짝을 짓다(유효_url_prefix) 하다 한다면 mw.utstring.경기(s, '^%[' .. v ..'[^"%s ].*%]' ) 그리고나서 url_ = v 브레이크. 끝. 끝. -- 표시 텍스트 가져오기 한다면 것은 아니다. url_ 그리고나서 돌아가다 s 끝. s = s:경기("^%[" .. url_ .. "(.*)%]") -- URL 접두사 뒤와 마지막 대괄호 앞에 있는 텍스트를 모두 잡습니다. s = s:경기('^-(["<> ).*)') 아니면 "" -- 첫 번째 URL 구분 문자 뒤에 있는 모든 텍스트("<>)를 잡습니다. s = mw.utstring.경기(s, "^%s*(%S.*)$") 아니면 "" -- 구분 문자가 공백인 경우 잘라냅니다. 현지의 s_ = mw.본문.해독하다(s, 진실의) 한다면 mw.utstring.경기(s_, "%c") 그리고나서 돌아가다 s 끝. 돌아가다 s_ 끝. 현지의 기능. delinkLinkClass(본문, 양식, delink 함수) 한다면 유형(본문) ~= "스트링" 그리고나서 오류를(" 문자열이 아닌 입력의 링크 해제를 시도합니다.", 2) 끝. 한다면 유형(양식) ~= "스트링" 아니면 mw.utstring.후보선수(양식, 1, 1) ~= "^" 그리고나서 오류를('잘못된 패턴이 탐지되었습니다'패턴은 "^"로 시작해야 합니다., 2) 끝. -- 텍스트 문자열을 반복하고 일치하는 텍스트를 바꿉니다.사용중 -- 디링크 함수우리는 오히려 성격별로 반복할 필요가 있습니다. -- gsub만 사용하는 것이 아니라, 그렇지 않으면 중첩된 링크가 제대로 감지되지 않습니다. 현지의 결과 = "" 하는 동안에 본문 ~= "" 하다 -- gsub의 한 번의 반복을 사용하여 텍스트를 바꿉니다. 본문 = mw.utstring.gsub(본문, 양식, delink 함수, 1) -- 결과 문자열에 맨 왼쪽 문자를 추가합니다. 결과 = 결과 .. mw.utstring.후보선수(본문, 1, 1) 본문 = mw.utstring.후보선수(본문, 2, -1) 끝. 돌아가다 결과 끝. 기능. p._delink(아그스) 현지의 본문 = 아그스[1] 아니면 "" 한다면 아그스.참조. == "네" 그리고나서 -- [도움말:Strip markers]]]는 ref 태그를 나타냅니다.대부분의 상황에서 -- 이것은 좋은 생각이 아닙니다. 여러분이 무엇을 하고 있는지 알 때만 사용하세요! 본문 = mw.utstring.gsub(본문, "UNIQ%%w*~ref%-%d*~QinU ", "") 끝. 한다면 아그스.평. ~= "아니오" 그리고나서 본문 = 본문:gsub("<!%-%-.-%-%->", "") -- html 주석을 제거합니다. 끝. 한다면 아그스.위키링크 ~= "아니오" 그리고. 아그스.위키링크 ~= "표적" 그리고나서 -- wikilinks의 링크를 해제하고 wikilink의 레이블 부분을 반환합니다. 본문 = delinkLinkClass(본문, "^%[%[.-%]%]", 연결 해제된 레이블 가져오기) 그 외의 경우에는 아그스.위키링크 == "표적" 그리고나서 -- wikilinks의 링크를 해제하고 wikilink의 대상 부분을 반환합니다. 본문 = delinkLinkClass(본문, "^%[%[.-%]%]", 연결 해제 대상 가져오기) 끝. 한다면 아그스.urls ~= "아니오" 그리고나서 본문 = delinkLinkClass(본문, "^%[.-%]", delink URL) -- URL 링크 해제. 끝. 한다면 아그스.여백 ~= "아니오" 그리고나서 -- 새 줄을 하나의 공백으로 바꾸되 새 줄을 두 개로 남깁니다. -- 새 줄은 두 번째 새 줄 앞에 공백 또는 탭만 포함합니다. 본문 = mw.utstring.gsub(본문, "([^\n \t][\t]*)\n([\t]*[^\n \t])", "%1 %2") 본문 = 본문:gsub("[\t]+", " ") -- 여분의 탭과 공간을 제거합니다. 끝. 돌아가다 본문 끝. 기능. p.술을 마시다(틀) 한다면 것은 아니다. getArgs 그리고나서 getArgs = 요구하다('모듈:논쟁').getArgs 끝. 돌아가다 p._delink(getArgs(틀, {포장지 = '템플릿:델링크'})) 끝. 돌아가다 p