모듈:딜링크/샌드박스

Module
-- 이 모듈은 대부분의 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