Permanently protected module

모듈:링크

Module

현지의 링크 = { 스위트  = "윙크",                 시리얼 = "2016-10-05" }; --[=[ ansiPercent() 포맷 URL() getArticleBase() getBaseTitle() 이스케이프제목() get Extension() get File() get Fragment() get Language() get Namespace() getPlain() get Project() get Target() get Target Page() getTitle() get Weblink() isBracketedLink() isBracketedURL() is Categoryization() isExternalLink() isInterlanguage() isInterwiki() is Media() isTitledLink() isValidLink() isWikilink() wikilink() 페일 세이프() ]=]    -- 지역 대회 현지의 URLutil = 거짓의;    현지의 util URL = 기능. ()     -- URLutil 라이브러리 모듈 연결     -- 사후 조건:     -- URLutil 라이브러리와 함께 테이블을 반환합니다.     -- 사용할 수 없는 경우 오류를 발생시킵니다.     한다면 것은 아니다. URLutil 그리고나서         현지의 행운의, 이용하다 = pcall( 요구하다, "모듈:URLutil" );         한다면 행운의 그리고나서             한다면 유형( 이용하다 ) == "테이블" 그리고나서                 URLutil = 이용하다.URLutil();             끝.             이용하다 = "라이브러리 URLutil이 잘못되었습니다.";         끝.         한다면 유형( URLutil ) ~= "테이블" 그리고나서             에러( 이용하다, 0 );         끝.     끝.     돌아가다 URLutil; 끝. -- utilURL()    현지의 콘텐츠 익스링크 = 기능. ( 시도 )     -- 괄호 사이의 외부 링크 스팬을 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링, 추정 링크 포함     -- 첫 번째 글자는 ""가 될 것으로 예상됩니다.     -- 사후 조건:     -- 문자열, 숫자, 숫자를 반환합니다.     -- 공백이 포함된 문자열     -- 관련 ""의 인덱스를 가진 번호     -- 관련 "] 뒤에 인덱스가 붙은 번호     -- 아무것도 발견되지 않으면 false.     현지의 r1 = 거짓의;     현지의 r2 = 거짓의;     현지의 r3 = 시도:발견하다( "]", 2, 진실의 );     한다면 r3 그리고나서         현지의 s = 시도:후보선수( 2,  r3 - 1 );         현지의 i = s:발견하다( "[", 1, 진실의 );         한다면 i 그리고나서             r1 = s:후보선수( i + 1 );             r2 = i;         또 다른             r1 = s;             r2 = 1;         끝.     또 다른         r3 = 거짓의;     끝.     돌아가다 r1, r2, r3; 끝. --내용Extlink()    현지의 콘텐츠 Wikilink = 기능. ( 시도 )     -- 괄호 사이의 Wikilink 스팬을 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링, 추정 링크 포함     --처음 두 글자는 "["가 될 것으로 예상됩니다.     -- 사후 조건:     -- 문자열, 숫자, 숫자를 반환합니다.     -- 공백이 포함된 문자열     -- 관련 인덱스가 있는 번호[[]     -- 관련 "]]" 뒤에 인덱스가 붙은 번호     -- 아무것도 발견되지 않으면 false.     현지의 r1 = 거짓의;     현지의 r2 = 거짓의;     현지의 r3 = 시도:발견하다( "]]", 3, 진실의 );     한다면 r3 그리고나서         현지의 s = 시도:후보선수( 3,  r3 - 1 );         현지의 i = s:발견하다( "[[", 1, 진실의 );         한다면 i 그리고나서             r1 = s:후보선수( i + 2 );             r2 = i;         또 다른             r1 = s;             r2 = 1;         끝.     끝.     돌아가다 r1, r2, r3; 끝. --내용Wikilink()    현지의 extract Extlink(익스트링크) = 기능. ( 시도 )     --외부 링크 취득     -- 전제 조건:     -- attempt -- 스트링, 추정 링크 포함     -- 첫 번째 글자는 ""가 될 것으로 예상됩니다.     -- 사후 조건:     -- 문자열, 문자열을 반환합니다.     --처음에는 타겟과 타이틀이 기재되어 있습니다.     --제목이 없는 경우 두 번째 결과가 false입니다.     -- 아무것도 발견되지 않으면 false.     현지의 r1 = 거짓의;     현지의 r2 = 거짓의;     현지의 s = 콘텐츠 익스링크( 시도 );     한다면 s 그리고나서         현지의 i = s:발견하다( %s, 1 );         한다면 i 그리고나서             r1 = s:후보선수( 1,  i - 1 );             r2 = .본문.다듬다( s:후보선수( i + 1 ) );             한다면 r2 == "" 그리고나서                 r2 = 거짓의;             끝.         또 다른             r1 = s;         끝.         한다면 r1 그리고나서             r1 = .본문.다듬다( r1 );             한다면 r1 == ""  또는                것은 아니다. util URL().자원URL( r1 ) 그리고나서                 r1 = 거짓의;             끝.         끝.         한다면 것은 아니다. r1 그리고나서             r2 = 거짓의;         끝.     끝.     돌아가다 r1, r2; 끝. -- 추출Extlink()    현지의 추출 Wikilink = 기능. ( 시도 )     -- Wikilink를 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링, 추정 링크 포함     --처음 두 글자는 "["가 될 것으로 예상됩니다.     -- 사후 조건:     -- 문자열, 문자열을 반환합니다.     --처음에는 타겟이 있습니다.     --두 번째 결과 제목 또는 파이프가 없는 경우 false     -- 아무것도 발견되지 않으면 false.     현지의 r1 = 거짓의;     현지의 r2 = 거짓의;     현지의 s = 콘텐츠 Wikilink( 시도 );     한다면 s 그리고나서         현지의 i = s:발견하다( " ", 1, 진실의 );         한다면 i 그리고나서             r1 = s:후보선수( 1,  i - 1 );             r2 = s:후보선수( i + 1 );         또 다른             r1 = s;         끝.         r1 = .본문.다듬다( r1 );         한다면 r1 == "" 그리고나서             r1 = 거짓의;         또 다른             r1 = r1:서브( "_",        " " )                    :서브( "&nbsp;",   " " )                    :서브( "&thinsp;", " " )                    :서브( "&#160;",   " " )                    :서브( "&#8239;",  " " )                    :서브( "  +",      " " );             r1 = .본문.해독하다( r1 );         끝.     끝.     돌아가다 r1, r2; 끝. -- 추출Wikilink()    현지의 접두사 = 기능. ( 물어보다, 앞서. )     -- 언어 또는 프로젝트 유형의 접두사 삽입     -- 전제 조건:     -- ask -- 문자열, 추정 프레픽스가 붙습니다.     --앞서 --첫 번째 세그먼트가 true일 경우     -- 사후 조건:     -- 문자열, 문자열 또는 0을 반환합니다.     -- "lead", "filename", "project"의 첫 번째 문자열 1     -- 두 번째 문자열은 형식화된 값입니다.     -- type은 "lead", "read", "project" 중 하나입니다.     -- 아무것도 찾을 수 없는 경우 0     현지의 r1, r2;     현지의 프리픽스 = { b           = 진실의,                        c           = "실패",                        d           = 진실의,                        공통의     = 진실의,                        m           = "실패",                        미디어위키   = "MW",                                  = 진실의,                        메타        = 진실의,                        n           = 진실의,                        q           = 진실의,                        s           = 진실의,                        간단하죠.      = 거짓의,                        v           = 진실의,                        보이         = 진실의,                        w           = 진실의,                        위키북   = "b",                        위키데이터    = "d",                        위키    = "n",                        위키백과   = "w",                        위키 인용문   = "q",                        위키소스  = "s",                        위키 다양성 = "v",                        키보드  = "실패",                        키보드        = 진실의,                        사전  = "불필요한"                      };     현지의 s = .본문.다듬다( 물어보다 );     한다면 s == "" 그리고나서         한다면 앞서. 그리고나서             r1 = '리드";             r2 = 진실의;         끝.     또 다른         현지의 p;         s = s:더 낮게();         p = 프리픽스[ s ];         한다면 p == 진실의 그리고나서             r1 = '프로젝트';             r2 = s;         그렇지 않으면 p 그리고나서             r1 = '프로젝트';             r2 = p;         그렇지 않으면 p == 거짓의 그리고나서             r1 = "실패";             r2 = s;         그렇지 않으면 s:경기( "^%l%l%l?$" )                그리고.  .언어.is Supported Language(지원 언어)( s ) 그리고나서             r1 = "실패";             r2 = s;         끝.     끝.     돌아가다 r1, r2; 끝. -- prefix()    현지의 타깃 = 기능. ( 시도, 외로워 )     -- 첫 번째 타깃(wikilink 또는 URL) 또는 전체 문자열을 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- lonely -- true인 경우 fragment를 삭제합니다.     -- 사후 조건:     -- 문자열, 번호를 반환합니다.     -- string, 검출된 링크타깃 또는 전체     -- number(각괄호(검출된 경우)) 또는 2     현지의 r1, r2 = 링크.타겟을 취득하다( 시도 );     한다면 것은 아니다. r1 그리고나서         r1 = .본문.다듬다( 시도 );         r2 = 2;     끝.     한다면 외로워 그리고나서         현지의 i = r1:발견하다( "#", 1, 진실의 );         한다면 i == 1 그리고나서             r1 = "";         그렇지 않으면 i 그리고나서             r1 = r1:후보선수( 1, i - 1 );         끝.     끝.     돌아가다 r1, r2; 끝. -- target()    기능. 링크.ANSI 퍼센트( 시도, 바꾸다 )     -- UTF-8 인코딩이 아닌 ANSI 인코딩으로 문자열을 변환합니다.     -- 전제 조건:     -- attempt -- 추정 ANSI 문자를 포함하는 문자열     -- alter - %20 대신 공백에 사용할 문자열 또는 0     -- 사후 조건:     -- 인코딩된 문자열을 반환합니다.     현지의 k, s;     현지의 r = 시도;     한다면 바꾸다 그리고나서         r = r:서브( " ", 바꾸다 );     끝.     위해서 i = .스트링.( r ), 1, -1 하다         k = .스트링.코드 포인트( r, i, i );         한다면 k <=> 32  또는  k > 126 그리고나서             한다면 k > 255 그리고나서                 s = .스트링.후보선수( r, i, i );                 한다면 k > 2047 그리고나서                     s = string.format( %%2X%%%2X%%%2X",                                        s:바이트( 1, 1 ),                                        s:바이트( 2, 2 ),                                        s:바이트( 3, 3 ) );                 또 다른                     s = string.format( %%2X%%%2X,                                        s:바이트( 1, 1 ),                                        s:바이트( 2, 2 ) );                 끝.             또 다른                 s = string.format( %%2X, k );             끝.             r = string.format( %s%s%s,                                .스트링.후보선수( r,  1,  i - 1 ),                                s,                                .스트링.후보선수( r,  i + 1 ) );         끝.     끝. ---i의 경우     r = .스트링.서브(r, '^%*', %%2A')     돌아가다 r; 끝. -- WLink.ansiPercent()    기능. 링크.포맷 URL( 조정한다. )     -- 괄호로 묶인 링크를 만듭니다(아직 작성되지 않은 경우).     -- 전제 조건:     -- adjust -- URL 또는 도메인/경로 또는 괄호로 둘러싸인 링크를 포함하는 문자열     -- 사후 조건:     -- 괄호로 묶인 링크가 포함된 문자열을 반환합니다.     -- 비활성 형식일 경우 false     현지의 r;     한다면 유형( 조정한다. ) == "문자열' 그리고나서         한다면 링크.isBracketedLink( 조정한다. ) 그리고나서             r = 조정한다.;         또 다른             현지의 url = .본문.다듬다( 조정한다. );             현지의 주인;             util URL();             주인 = URLutil.호스트 취득( 조정한다. );             한다면 것은 아니다. 주인 그리고나서                 url  = "param://" .. 조정한다.;                 주인 = URLutil.호스트 취득( url );             끝.             한다면 주인 그리고나서                 현지의 경로. = URLutil.getRelativePath(상대 경로)( url );                 현지의 표시하다;                 한다면 경로. == "/" 그리고나서                     한다면 것은 아니다. url:경기( "/$" ) 그리고나서                         url = url .. "/";                     끝.                     표시하다 = 주인;                 또 다른                     현지의 i = 경로.:발견하다( "#" );                     한다면 i 그리고나서                         경로. = 경로.:후보선수( 1,  i - 1 );                     끝.                     표시하다 = 주인 .. 경로.;                 끝.                 r = string.format( [%s %s], url, 표시하다 );             또 다른                 r = 조정한다.;             끝.         끝.     또 다른         r = 거짓의;     끝.     돌아가다 r; 끝. -- WLink.formatURL()    기능. 링크.기사 베이스의 취득( 시도 )     -- fragment도 괄호도 없는 범용 기사 제목을 가져옵니다.     -- 전제 조건:     -- attempt -- wikilink 또는 페이지 제목을 가진 문자열     -- 현재 페이지 제목(없을 경우     -- 사후 조건:     -- 식별된 lema 또는 all을 포함한 문자열을 반환합니다.     -- 비활성 형식일 경우 false     현지의 r;     한다면 시도 그리고나서         현지의 m;         r, m = 타깃( 시도, 진실의 );         한다면 m ~= 2 그리고나서             r = 거짓의;         끝.     또 다른         r = .직함.get Current Title(전류 제목)().본문;     끝.     한다면 r 그리고나서         현지의 후보선수 = r:경기( "^(.%S) *%(.+%)$" );         한다면 후보선수 그리고나서             r = 후보선수;         끝.     끝.     돌아가다 r; 끝. -- WLink.getArticleBase()    기능. 링크.getBaseTitle( 시도 )     -- 하위 페이지의 마지막 세그먼트를 가져옵니다(프래그먼트 없음).     -- 전제 조건:     -- attempt -- wikilink 또는 페이지 제목을 가진 문자열     -- 사후 조건:     -- 식별된 세그먼트 또는 모든 문자열을 반환합니다.     현지의 r;     현지의 s, m = 타깃( 시도, 진실의 );     한다면 m == 2 그리고나서         현지의 후보선수 = s:경기( "/([^/]+)$" );         한다면 후보선수 그리고나서             r = 후보선수;         또 다른             r = s;         끝.     또 다른         r = 거짓의;     끝.     돌아가다 r; 끝. -- WLink.getBaseTitle()  기능. 링크.이스케이프제목( 시도 )     -- 이스케이프된 링크 제목 가져오기     -- 전제 조건:     -- attempt -- 추정 링크 제목을 가진 문자열     -- 사후 조건:     -- 적절한 링크 제목을 가진 문자열을 반환합니다.     현지의 s = .본문.다듬다( 시도 );     돌아가다 s:서브( "\n", " " )             :서브( "%[", "&#91;" )             :서브( "%]", "&#93;" )             :서브( " ",  "&#p;" ); 끝. -- WLink.getescape제목()  기능. 링크.확장 기능 취득( 시도 )     -- 미디어 확장자를 가져옵니다.     -- 전제 조건:     -- attempt -- wikilink(미디어 링크) 또는 페이지 제목을 가진 문자열     -- URL 의 경우는, PDF 가 검출될 가능성이 있습니다.     -- 사후 조건:     -- 검색된 다운된 미디어 유형을 포함하는 문자열을 반환합니다.     --내선번호를 찾을 수 없는 경우 false.     현지의 r = 거짓의;     현지의 s, m = 타깃( 시도 );     한다면 m == 2 그리고나서         s = s:경기( "%a+" );         한다면 s 그리고나서             r = s:더 낮게();         끝.     그렇지 않으면 s:위쪽의():경기( "%/](PDF)%W?" ) 그리고나서         r = "pdf";     끝.     돌아가다 r; 끝. -- WLink.get Extension()    기능. 링크.get 파일( 시도 )     -- 미디어 페이지 식별자를 가져옵니다.     -- 전제 조건:     -- attempt -- wikilink(미디어 링크) 또는 페이지 제목을 가진 문자열     -- 사후 조건:     -- 탐지된 파일 제목이 포함된 문자열을 반환합니다.     -- 네임스페이스도 프로젝트도 없습니다.     -- 파일을 찾을 수 없는 경우 false.     현지의 r = 거짓의;     현지의 s, m = 타깃( 시도 );     한다면 m == 2 그리고나서         현지의 느리다    = ":" .. s:더 낮게();         현지의 발견하다 = 기능. ( a )                          현지의 추구한다. = string.format( ":%s:().+%%.%%a+$",                                                      a:더 낮게() );                          현지의 합류하다 = 느리다:발견하다( 추구한다. );                          현지의 리트;                          한다면 합류하다 그리고나서                              리트 = s:후보선수( 합류하다 + #a + 1 );                          끝.                          돌아가다 리트;                      끝.;         r = 발견하다( "파일 );         한다면 것은 아니다. r 그리고나서             현지의 트러블 = .위치.네임스페이스[6];             r = 발견하다( 트러블.이름. );             한다면 것은 아니다. r 그리고나서                 트러블 = 트러블.에일리어스;                 위해서 k, v  쌍들( 트러블 ) 하다                     r = 발견하다( v );                     한다면 r 그리고나서                         브레이크.; -- k, v의 경우                     끝.                 끝. -- k, v의 경우             끝.         끝.     끝.     돌아가다 r; 끝. -- WLink.get File()    기능. 링크.fragment를 취득하다( 시도 )     -- fragment를 취득     -- 전제 조건:     -- attempt -- 추정 fragment가 있는 문자열     -- 사후 조건:     -- 검출된 fragment를 포함한 문자열을 반환합니다.     -- 주소를 찾을 수 없는 경우 false.     현지의 r = 거짓의;     현지의 s, m = 타깃( 시도 );     한다면 s 그리고나서         현지의 i = s:발견하다( "#", 1, 진실의 );         한다면 i 그리고나서             한다면 i > 1 그리고나서                 s = s:후보선수( i - 1 );                 i = 2;             끝.             한다면 s:발견하다( "&#", 1, 진실의 ) 그리고나서                 s = .본문.해독하다( s );                 i = s:발견하다( "#", 1, 진실의 );                 한다면 것은 아니다. i 그리고나서                    s = "";                    i = 0;                 끝.             끝.             s = s:후보선수( i + 1 );             r = .본문.다듬다( s );             한다면 r == "" 그리고나서                 r = 거짓의;             그렇지 않으면 m == 2 그리고나서                 r = r:서브( "%x%x", "%%%1" )                      :서브( "_", " " );                 r = .uri.해독하다( r, '패스' );             끝.         끝.     끝.     돌아가다 r; 끝. -- WLink.get Fragment()    기능. 링크.get Language( 시도 )     -- 언어 프로젝트 식별자 검색     -- 전제 조건:     -- attempt -- wikilink 또는 페이지 제목을 가진 문자열     -- 사후 조건:     -- 검색된 다운캐시된 언어 식별자를 포함하는 문자열을 반환합니다.     -- 프로젝트 언어를 찾을 수 없는 경우 false     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  w.언어 그리고나서             r = w.언어;         끝.     끝.     돌아가다 r; 끝. -- WLink.getLanguage()    기능. 링크.get Namespace( 시도 )     -- 네임스페이스 번호를 검색합니다.     -- 전제 조건:     -- attempt -- wikilink 또는 페이지 제목을 가진 문자열     -- 사후 조건:     -- 탐지된 네임스페이스의 번호를 반환합니다.     -- 네임스페이스를 찾을 수 없는 경우 false     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  것은 아니다. w.언어  그리고.  것은 아니다. w.프로젝트.  그리고.  w.ns 그리고나서             r = w.ns;         끝.     끝.     돌아가다 r; 끝. -- WLink.get Namespace()    기능. 링크.겟플레인( 시도 )     -- 모든 링크가 링크 제목으로 대체된 텍스트를 검색합니다.     -- 전제 조건:     -- attempt -- 문자열, Wikitext 사용     -- 사후 조건:     -- 링크 없이 수정된 Wikitext가 포함된 문자열을 반환합니다.     현지의 r = 시도;     현지의 i = 1;     현지의 j, k, n, 기울다, s, 교대하다, 공간, 접미사;     하는 동안에 ( 진실의 ) 하다         j = r:발견하다( "[", i, 진실의 );         한다면 j 그리고나서             접미사 = r:후보선수( j );             i      = j + 1;             기울다   = ( r:바이트( i, i ) == 91 );             한다면 기울다 그리고나서                 s, k, n = 콘텐츠 Wikilink( 접미사 );             또 다른                 s, k, n = 콘텐츠 익스링크( 접미사 );             끝.             한다면 s 그리고나서                 한다면 k > 1 그리고나서                     n      = n - k;                     i      = j + k;                     j      = i - 1;                     접미사 = r:후보선수( j );                 끝.                 한다면 기울다 그리고나서                     s, 교대하다 = 추출 Wikilink( 접미사 );                     한다면 s 그리고나서                         공간 = s:경기( "^([^:]+):" );                         한다면 공간 그리고나서                             공간 = .위치.네임스페이스[ 공간 ];                             한다면 공간 그리고나서                                 공간 = 공간.아이디;                             끝.                         끝.                         한다면 공간 == 6  또는  공간 == 14 그리고나서                             교대하다 = "";                         그렇지 않으면 것은 아니다. 교대하다 그리고나서                             교대하다 = s;                         끝.                     또 다른                         s     = "";                         교대하다 = "";                     끝.                 또 다른                     s, 교대하다 = extract Extlink(익스트링크)( 접미사 );                     한다면 것은 아니다. s 그리고나서                         s = "";                     끝.                     한다면 것은 아니다. 교대하다 그리고나서                         교대하다 = "";                     끝.                     i = i - 1;                 끝.                 한다면 j > 1 그리고나서                     s = r:후보선수( 1, j - 1 );                 또 다른                     s = "";                 끝.                 r = string.format( %s%s%s,                                    s,  교대하다,  r:후보선수( n + i ) );                 i = i + #교대하다;             또 다른                 브레이크.; -- 사실이지만             끝.         또 다른             브레이크.; -- 사실이지만         끝.     끝. -- 사실이지만     돌아가다 r; 끝. -- WLink.getPlain()    기능. 링크.프로젝트 취득( 시도 )     -- Wikifarm 프로젝트 식별자를 가져옵니다.     -- 전제 조건:     -- attempt -- wikilink 또는 페이지 제목을 가진 문자열     -- 사후 조건:     -- 검색된 다운캐시된 프로젝트 식별자를 포함하는 문자열을 반환합니다.     -- 프로젝트 식별자를 찾을 수 없는 경우 false.     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  w.프로젝트. 그리고나서             r = w.프로젝트.;         끝.     끝.     돌아가다 r; 끝. -- WLink.get Project()    기능. 링크.타겟을 취득하다( 시도 )     -- 첫 번째 타깃 취득(wikilink 또는 URL)     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 문자열, 번호를 반환합니다.     -- string(최초로 검출된 링크타깃 포함)     --number(검출된 경우)와 괄호 수(검출된 경우)     -- 아무것도 발견되지 않으면 false.     현지의 r1 = 거짓의;     현지의 r2 = 거짓의;     현지의 i  = 시도:발견하다( "[", 1, 진실의 );     한다면 i 그리고나서         현지의 m;         r1 = 시도:후보선수( i );         한다면 r1:바이트( 2, 2 ) == 91 그리고나서             m  = 2;             r1 = 추출 Wikilink( r1 );         또 다른             m  = 1;             r1 = extract Extlink(익스트링크)( r1 );         끝.         한다면 r1 그리고나서             r2 = m;         끝.     또 다른         r1 = 시도:경기( %A?([hf]t?tps?//%S+)%s? );         한다면 r1 그리고나서             한다면 util URL().자원URL( r1 ) 그리고나서                 r2 = 0;             또 다른                 r1 = 거짓의;             끝.         또 다른             r1 = 거짓의;         끝.     끝.     돌아가다 r1, r2; 끝. -- WLink.getTarget()    기능. 링크.get Target Page(대상 페이지)( 시도 )     -- 첫 번째 대상 페이지(페이지 이름 또는 페이지 URL)를 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 처음 검색된 링크된 페이지가 포함된 문자열을 반환합니다.     -- 아무것도 발견되지 않으면 false.     현지의 r1, r2 = 링크.타겟을 취득하다( 시도 );     한다면 r1 그리고나서         현지의 i = r1:발견하다( "#", 1, 진실의 );         한다면 i 그리고나서             한다면 i == 1 그리고나서                 r1 = 거짓의;             또 다른                 r1 = .본문.다듬다( r1:후보선수( 1,  i - 1 ) );             끝.         끝.     끝.     돌아가다 r1, r2; 끝. -- WLink.getTargetPage()    기능. 링크.getTitle(제목)( 시도 )     -- 첫 번째 링크 제목(wikilink 또는 URL) 또는 Wikilink 타깃을 가져옵니다.     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 처음 탐지된 링크 대상을 포함하는 문자열을 반환합니다.     -- 아무것도 발견되지 않으면 false.     현지의 r = 거짓의;     현지의 i = 시도:발견하다( "[", 1, 진실의 );     한다면 i 그리고나서         현지의 s1, s2;         r = 시도:후보선수( i );         한다면 r:바이트( 2, 2 ) == 91 그리고나서             s1, s2 = 추출 Wikilink( r );             한다면 s2 그리고나서                 r = s2;             또 다른                 r = s1;             끝.         또 다른             s1, r = extract Extlink(익스트링크)( r );         끝.     끝.     돌아가다 r; 끝. -- WLink.getTitle()    기능. 링크.get Weblink( 시도, URLutil )     -- 리소스 URL에서 괄호로 묶인 링크를 가져옵니다.     -- 전제 조건:     -- attempt -- 문자열, URL 또는 다른 것     -- anURLutil -- 라이브러리 모듈 객체 또는 0     -- 사후 조건:     -- 처음 탐지된 링크 대상을 포함하는 문자열을 반환합니다.     -- 아무것도 발견되지 않으면 false.     현지의 둘째 = ".ac.co.go.gv.or.";     현지의 r;     한다면 유형( URLutil ) == "테이블" 그리고나서         URLutil = URLutil;     또 다른         util URL();     끝.     한다면 URLutil.자원URL( 시도 ) 그리고나서         현지의 위치 = URLutil.권한 취득( 시도 );         현지의 표시하다;         한다면 #시도 == #위치 그리고나서            위치 = 위치 .. "/";         끝.         표시하다 = URLutil.get Top 3 도메인( "//" .. 위치 );         한다면 표시하다 그리고나서             현지의 스캔   = "[%/]"(%a+)(%)%l%l%(%a+)$";             현지의 서치 = "." .. 표시하다;             현지의 s1, s2, s3 = 서치:경기( 스캔 );             한다면 s2 그리고나서                 한다면 것은 아니다. 둘째:발견하다( s2, 1, 진실의 ) 그리고나서                     표시하다 = string.format( %s.%s, s2, s3 );                 끝.             또 다른                 표시하다 = 거짓의;             끝.         끝.         한다면 것은 아니다. 표시하다 그리고나서             표시하다 = URLutil.get Top2 domain( "//" .. 위치 );             한다면 것은 아니다. 표시하다 그리고나서                 표시하다 = URLutil.호스트 취득( "//" .. 위치 );             끝.         끝.         r = string.format( [%s %s], 시도, 표시하다 );     또 다른         r = 시도;     끝.     돌아가다 r; 끝. -- WLink.get Weblink()    기능. 링크.isBracketedLink( 시도 )     -- 괄호로 묶인 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 i = 시도:발견하다( "[", 1, 진실의 );     한다면 i 그리고나서         현지의 s = 시도:후보선수( i );         한다면 s:바이트( 2, 2 ) == 91 그리고나서             s = 추출 Wikilink( s );         또 다른             s = extract Extlink(익스트링크)( s );         끝.         한다면 s 그리고나서             r = 진실의;         끝.     끝.     돌아가다 r; 끝. -- WLink.isBracketedLink()    기능. 링크.브라켓URL( 시도 )     -- 괄호로 묶은 URL과 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 s, r = 링크.타겟을 취득하다( 시도 );     돌아가다 ( r == 1 ); 끝. -- WLink.isBracketedURL()    기능. 링크.분류( 시도 )     -- 분류와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  w.ns == 14               그리고.  것은 아니다. ( w.이끌다 또는 w.언어 또는 w.프로젝트. )               그리고.  w.직함 ~= "" 그리고나서             r = 진실의;         끝.     끝.     돌아가다 r; 끝. -- WLink.is Categoryization()    기능. 링크.isExternalLink( 시도 )     -- 외부 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 s, r = 링크.타겟을 취득하다( 시도 );     한다면 r 그리고나서         r = ( r < > 2 );     끝.     돌아가다 r; 끝. -- WLink.isExternalLink()    기능. 링크.인터언어( 시도 )     -- 언어간 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w 그리고. w.언어 그리고. 것은 아니다. w.프로젝트. 그리고. 것은 아니다. w.이끌다              그리고.  w.직함 ~= "" 그리고나서             r = 진실의;         끝.     끝.     돌아가다 r; 끝. -- WLink.isInterlanguage()    기능. 링크.인터위키( 시도 )     -- Wiki팜 내의 인터위키 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  ( w.언어 또는 w.프로젝트. )  그리고.  w.직함 ~= "" 그리고나서             r = 진실의;         끝.     끝.     돌아가다 r; 끝. -- WLink.isInterwiki()    기능. 링크.미디어( 시도 )     --미디어 번역과 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 s, m = 링크.타겟을 취득하다( 시도 );     한다면 m == 2 그리고나서         현지의 w = 링크.링크( s );         한다면 w  그리고.  w.ns == 6            그리고.  것은 아니다. ( w.이끌다 또는 w.언어 또는 w.프로젝트. )            그리고.  w.직함 ~= ""            그리고.  링크.확장 기능 취득( w.직함 ) 그리고나서             r = 진실의;         끝.     끝.     돌아가다 r; 끝. -- WLink.is Media()    기능. 링크.isTitledLink(ISTitledLink)( 시도 )     --제목 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 r = 거짓의;     현지의 i = 시도:발견하다( "[", 1, 진실의 );     한다면 i 그리고나서         현지의 c, n;         현지의 s = 시도:후보선수( i );         한다면 s:바이트( 2, 2 ) == 91 그리고나서             n = s:발견하다( "%]%]", 5 );             c = " ";         또 다른             n = s:발견하다( "%]", 8 );             c = %s%S;         끝.         한다면 n 그리고나서             현지의 m = s:발견하다( c, 2 );             한다면 m  그리고.  m + 1 < > n  그리고.  링크.타겟을 취득하다( 시도 ) 그리고나서                 r = 진실의;             끝.         끝.     끝.     돌아가다 r; 끝. -- WLink.isTitledLink()    기능. 링크.isValidLink( 시도 )     -- 링크와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 s, r = 링크.타겟을 취득하다( 시도 );     한다면 r 그리고나서         r = 진실의;     끝.     돌아가다 r; 끝. -- WLink.isValidLink()    기능. 링크.와이키링크( 시도 )     -- Wikilink와 일치합니까?     -- 전제 조건:     -- attempt -- 스트링(어딘가에 링크가 있을 수 있습니다.     -- 사후 조건:     -- 부울을 반환합니다.     현지의 s, m = 링크.타겟을 취득하다( 시도 );     돌아가다 ( m == 2 ); 끝. -- WLink . is Wikilink ( )    기능. 링크.링크( 시도 )     -- Wikilink 컴포넌트 취득     -- 전제 조건:     -- attempt -- 스트링, 추정 링크 포함     -- "[" "]]" 에 동봉될 예정입니다.     --그렇지 않으면 wikilink     -- 사후 조건:     -- 테이블 또는 false를 반환합니다.     -- {type, value}의 할당 테이블     --type은 "lead"의 1개입니다.     -- "프로젝트", "프로젝트", "프로젝트",     -- "ns", "space", "flace"     -- 아무것도 발견되지 않으면 false.     현지의 s = 콘텐츠 Wikilink( 시도 );     현지의 얻었다, n, r;     한다면 것은 아니다. s 그리고나서         s = 시도;     끝.     i = s:발견하다( " ", 1, 진실의 );     한다면 i 그리고나서         s = s:후보선수( 1, i - 1 );     끝.     얻었다 = .본문.분열되다( s, ":" );     n   = 테이블.최대( 얻었다 );     한다면 n == 1 그리고나서         r = { 직함 = .본문.다듬다( s ) };     또 다른         현지의 j, k, o, v;         r = { 직함 = "" };         한다면 n > 4 그리고나서             k = 4;         또 다른             k = n - 1;         끝.         j = k;         위해서 i = 1, j 하다             s = .본문.다듬다( 얻었다[ i ] );             한다면 s ~= "" 그리고나서                 o = .위치.네임스페이스[ .본문.다듬다( 얻었다[ i ] ) ];                 한다면 o 그리고나서                     r.ns    = o.아이디;                     r.공간 = o.이름.;                     k = i + 1;                     j = i - 1;                     브레이크.; -- i의 경우                 끝.             끝.         끝. -- i의 경우         위해서 i = 1, j 하다             o, v = 접두사( 얻었다[ i ],  ( i == 1 ) );             한다면 o 그리고나서                 한다면 r[ o ] 그리고나서                     k = i;                     브레이크.; -- i의 경우                 또 다른                     r[ o ] = v;                 끝.             또 다른                 k = i;                 브레이크.; -- i의 경우             끝.         끝. -- i의 경우         위해서 i = k, n 하다             r.직함 = r.직함 .. 얻었다[ i ];             한다면 i < > n 그리고나서                 r.직함 = r.직함 .. ":";             끝.         끝. -- i의 경우     끝.     한다면 r.이끌다 그리고.        ( r.프로젝트.  또는  것은 아니다. r.직함  또는          ( 것은 아니다. r.언어  그리고.  r.ns ~= 6  그리고.  r.ns ~= 14 ) ) 그리고나서         r.이끌다 = 거짓의;     끝.     돌아가다 r; 끝. -- WLINK 。wikilink()    기능. 링크.페일 세이프( 주장하다 )     --버전 관리를 취득하여 컴플라이언스를 확인합니다.     -- 전제 조건:     -- assert -- 필요한 버전의 문자열 또는 false     -- 사후 조건:     -- 적절한 버전의 문자열을 반환하거나 false를 반환합니다.     현지의 r;     한다면 주장하다  그리고.  주장하다 > 링크.시리얼 그리고나서         r = 거짓의;     또 다른         r = 링크.시리얼;     끝.     돌아가다 r 끝. -- WLink.failsafe()    현지의 기능. 템플릿( , 액션., 떠나, 외톨이 )     -- 템플릿 변환에서 실제 코드 실행     -- 전제 조건:     --frame --개체     -- action -- 함수 이름을 가진 문자열     -- leave -- true: 주위에 공백 유지     -- lone -- true: 파라미터 없이 콜을 허용합니다.     -- 사후 조건:     -- 문자열 반환(오류 메시지일 수 있음)     현지의 행운의 = 진실의;     현지의 s = 거짓의;     현지의 r = 거짓의;     현지의 공간;     위해서 k, v  쌍들( .args ) 하다         한다면 k == 1 그리고나서             한다면 떠나 그리고나서                 s = v;             또 다른                 s = .본문.다듬다( v );             끝.         그렇지 않으면 액션. == "AnsiPercent"  그리고.  k == "공간" 그리고나서             한다면 v ~= "" 그리고나서                 공간 = v;             끝.         그렇지 않으면 k ~= "실패" 그리고나서             행운의 = 거짓의;             한다면 r 그리고나서                 r = r .. " ";             또 다른                 r = "알 수 없는 매개 변수: ";             끝.             r = string.format( %s%s=, r, k );         끝.     끝. -- k, v의 경우     한다면 행운의 그리고나서         한다면 s 또는 외톨이 그리고나서             행운의, r = pcall( 링크[ 액션. ],  s,  공간 );         또 다른             r = "매개변수 누락";             행운의 = 거짓의;         끝.     끝.     한다면 행운의 그리고나서         한다면 유형( r ) == "실패" 그리고나서             한다면 r 그리고나서                 r = "1";             또 다른                 r = "";             끝.         끝.     또 다른         r = string.format( "<span 클래스=\"에러\"%s </span>", r );     끝.     돌아가다 r; 끝. -- 템플릿()    -- 내보내기 현지의 p = { };  p.ANSI 퍼센트 = 기능. (  )     돌아가다 템플릿( , "AnsiPercent" ); 끝. p.포맷 URL = 기능. (  )     돌아가다 템플릿( , "URL 포맷" ); 끝. p.기사 베이스의 취득 = 기능. (  )     돌아가다 템플릿( , "GetArchiticle Base", 거짓의, 진실의 ); 끝. p.getBaseTitle = 기능. (  )     돌아가다 템플릿( , "getBaseTitle" ); 끝. p.이스케이프제목 = 기능. (  )     돌아가다 템플릿( , "도피하다제목" ); 끝. p.확장 기능 취득 = 기능. (  )     돌아가다 템플릿( , "연장" ); 끝. p.get 파일 = 기능. (  )     돌아가다 템플릿( , "파일 가져오기" ); 끝. p.fragment를 취득하다 = 기능. (  )     돌아가다 템플릿( , "파편화" ); 끝. p.인터위키를 취득하다 = 기능. (  )     돌아가다 템플릿( , "인터위키 가져오기" ); 끝. p.get Language = 기능. (  )     돌아가다 템플릿( , "get Language" ); 끝. p.get Namespace = 기능. (  )     돌아가다 스트링( 템플릿( , "get 네임스페이스" ) ); 끝. p.겟플레인 = 기능. (  )     돌아가다 템플릿( , "일반" ); 끝. p.프로젝트 취득 = 기능. (  )     돌아가다 템플릿( , "프로젝트 가져오기" ); 끝. p.타겟을 취득하다 = 기능. (  )     돌아가다 템플릿( , "타깃 가져오기" ); 끝. p.get Target Page(대상 페이지) = 기능. (  )     돌아가다 템플릿( , "Get Target Target Page" ); 끝. p.getTitle(제목) = 기능. (  )     돌아가다 템플릿( , "제목 가져오기" ); 끝. p.get Weblink = 기능. (  )     돌아가다 템플릿( , "웹링크 가져오기" ); 끝. p.isBracketedLink = 기능. (  )     돌아가다 템플릿( , "isBracketedLink" ); 끝. p.브라켓URL = 기능. (  )     돌아가다 템플릿( , "브래킷이 있는URL" ); 끝. p.분류 = 기능. (  )     돌아가다 템플릿( , "등분" ); 끝. p.isExternalLink = 기능. (  )     돌아가다 템플릿( , "isExternalLink" ); 끝. p.인터언어 = 기능. (  )     돌아가다 템플릿( , "인터언어" ); 끝. p.인터위키 = 기능. (  )     돌아가다 템플릿( , "isInterwiki" ); 끝. p.미디어 = 기능. (  )     돌아가다 템플릿( , "미디어" ); 끝. p.isTitledLink(ISTitledLink) = 기능. (  )     돌아가다 템플릿( , "isTitledLink" ); 끝. p.isValidLink = 기능. (  )     돌아가다 템플릿( , "isValidLink" ); 끝. p.웹 링크 = 기능. (  )     돌아가다 템플릿( , "is Weblink" ); 끝. p.와이키링크 = 기능. (  )     돌아가다 템플릿( , "isWikilink" ); 끝. p.페일 세이프 = 기능. (  )     현지의 부터 = .args[ 1 ];     한다면 부터 그리고나서         부터 = .본문.다듬다( 부터 );         한다면 부터 == "" 그리고나서             부터 = 거짓의;         끝.     끝.     돌아가다 링크.페일 세이프( 부터 ) 또는 ""; 끝. p.링크 = 기능. ()     돌아가다 링크; 끝.  돌아가다 p;