Permanently protected module

모듈:템플릿파

Module:TemplatePar

--[=[ TemplatePar 2015-02-14] 템플릿 매개 변수 유틸리티 * 주장하다 *수표 *카운 * countNotMempty * 소문자 * 일치 * 유효 * verifyprovaluation * TemplatePar() ]=]    -- 모듈 글로벌 국부적 템플릿파 = { } 국부적 메시지프리픽스 = "lua-module-TemplatePar-" 국부적 L10nDef = {} L10nDef. = {     배드패턴  = "&#35;제보:TemplatePar 패턴 구문 오류",     듀프옵트      = "&#35;제보:TemplatePar 반복 옵션 매개 변수",     듀프룰     = "&#35;제보:TemplatePar 충돌 키/패턴",     텅 빈       = "템플릿의 오류 * 필수 항목에 대한 정의되지 않은 값",     무효의     = "템플릿의 오류 * 잘못된 매개 변수",     invalidPar  = "&#35;제보:TemplatePar 잘못된 매개 변수",     미니맥스      = "&#35;제보:TemplatePar min > max",     행방불명의     = "&#35;제보:TemplatePar 라이브러리 누락",     멀티스펠  = "템플릿의 오류 * 매개 변수의 여러 철자",     noMSGnoCAT  = "&#35;제보:템플리트파(TemplatePar) 메시지나 범주 없음",     동일하지 않은      = "&#35;제보:템플릿Par 누락 매개 변수 이름",     찾을 수 없음    = "템플릿의 오류 * 누락된 페이지",     너무 길다     = "템플릿 * 매개 변수가 너무 길 경우",     너무 짧다    = "템플릿 * 매개 변수가 너무 짧음",     정의되지 않은   = "템플릿의 오류 * 필수 매개 변수 누락",     알 수 없는     = "템플릿의 오류 * 알 수 없는 매개 변수 이름",     알 수 없는 규칙 = "&#35;제보:TemplatePar 알 수 없는 규칙" } L10nDef.  = {     배드패턴  = "&#35;제보:TemplatePar 구문fehler des pattern",     듀프옵트      = "&#35;제보:TemplatePar 옵션매개 변수 widerholt",     듀프룰     = "&#35;제보:TemplatePar Conflikt 키/패턴",     텅 빈       = "Feler bei Vorlage * Pflichteter ohne Wert",     무효의     = "Feller bei Vorlage * 매개변수 ungultig",     invalidPar  = "&#35;제보:TemplatePar Unguliltiger 매개변수",     미니맥스      = "&#35;제보:TemplatePar min > max",     멀티스펠  = "Feler bei Vorlage * Mehree 매개 변수-Schreibweisen",     noMSGnoCAT  = "&#35;제보:템플릿파 웨더 멜둥 노치 카테고리",     동일하지 않은      = "&#35;제보:템플릿파 매개변수 nicht angjeben",     찾을 수 없음    = "Feler bei Vorlage * Seite fehlt",     너무 길다     = "Feler bei Vorlage * 매개변수 zu lang",     너무 짧다    = "Feler bei Vorlage * 변수 Zu Kurz",     정의되지 않은   = "Feler bei Vorlage * Pflichtparameter fehlt",     알 수 없는     = "Feler bei Vorlage * 매개 변수 이름 Unbekannt",     알 수 없는 규칙 = "&#35;제보:템플리트파 언베칸테 레겔" } 국부적 패턴 = {     [ "ASCII" ]    = "^[ -~]*$",     [ "ASCII+" ]   = "^[ -~]+$",     [ "ASCII+1" ]  = "^[!-~]+$",     [ "n" ]        = "^[%-]?[0-9]*$",     [ "n>0" ]      = "^[0-9]*[1-9][0-9]*$",     [ "N+" ]       = "^[%-]?[1-9][0-9]*$",     [ "N>0" ]      = "^[1-9][0-9]*$",     [ "x" ]        = "^[0-9A-Fa-f]*$",     [ "x+" ]       = "^[0-9A-Fa-f]+$",     [ "X" ]        = "^[0-9A-F]*$",     [ "X+" ]       = "^[0-9A-F]+$",     [ "0,0" ]      = "^[%-]?[0-9]*,?[0-9]*$",     [ "0,0+" ]     = "^[%-]?[0-9]+,[0-9]+$",     [ "0,0+?" ]    = "^[%-]?[0-9]+,?[0-9]*$",     [ "0.0" ]      = "^[%-]?[0-9]*[%.]?[0-9]*$",     [ "0.0+" ]     = "^[%-]?[0-9]+%.[0-9]+$",     [ "0.0+?" ]    = "^[%-]?[0-9]+[%.]?[0-9]*$",     [ ".0+" ]      = "^[%-]?[0-9]*[%.]?[0-9]+$",     [ "ID" ]       = "^[A-Za-z]?[A-Za-z_0-9]*$",     [ "ID+" ]      = "^[A-Za-z][A-Za-z_0-9]*$",     [ "ABC" ]      = "^[A-Z]*$",     [ "ABC+" ]     = "^[A-Z]+$",     [ "abc" ]      = "^[A-Z]*[a-z]*$",     [ "Abc+" ]     = "^[A-Z][a-z]+$",     [ "abc" ]      = "^[a-z]*$",     [ "abc+" ]     = "^[a-z]+$",     [ "aBc+" ]     = "^[a-z]+[A-Z][A-Za-z]*$",     [ "w" ]        = "^%S*$",     [ "w+" ]       = "^%S+$",     [ "베이스64" ]   = "^[A-Za-z0-9%+/]*$",     [ "베이스64+" ]  = "^[A-Za-z0-9%+/]+$",     [ "aa" ]       = "[%a%a]*[%a%a]",     [ "이름" ] = 문자열.format( "^[^#<%[%] {}%c-%c]+$",                                     1, 31, 127 ),     [ "+" ]        = "%S" } 국부적 패턴CJK = 거짓의    국부적 기능을 하다 포함하다CJK( s )     --CJK 캐릭터가 있나?     -- 전제 조건:     -- s -- 문자열     -- 사후 조건:     - CJK가 없으면 거짓으로 반환     -- 사용:     -><패턴CJK     -- mw.ustring.charr()     -- mw.ustring.match()     국부적 r = 거짓의     만일 아닌 패턴CJK 그때         패턴CJK = mw.우스트링.마를 뜨다( 91,                                        13312, 45,  40959,                                       131072, 45, 178207,                                       93 )     종지부를 찍다     만일 mw.우스트링.짝을 맞추다( s, 패턴CJK ) 그때         r = 진실의     종지부를 찍다     돌아오다 r 종지부를 찍다 -- CJK() 포함    국부적 기능을 하다 시설( 받아들이다, 시도하다 )     -- 가능한 파일 이름 또는 기타 원본 페이지로 문자열 확인     -- 전제 조건:     -- 수락 -- 문자열; 요구 사항     -- 파일     -- file+     -- 파일:     -- 파일:+     -- 이미지     -- image+     -- 이미지:     -- 이미지:+     -- 시도 -- 문자열; 테스트 대상     -- 사후 조건:     -- 오류 키워드 반환 또는 거짓     -- 사용:     -- 모듈:파일미디어     -- FileMedia.isType()     국부적 r     만일 시도하다 그리고 시도하다 ~= "" 그때         국부적 행운의, 파일미디어 = 피콜( 요구하다, "모듈:파일미디어" )         만일 타자를 치다( 파일미디어 ) == "테이블" 그때             파일미디어 = 파일미디어.파일미디어()             국부적 s, 살림을 차리다 = 받아들이다:짝을 맞추다( "^([a-z]+)(:?)%+?$" )             만일 살림을 차리다 그때                 만일 파일미디어.isType( 시도하다, s ) 그때                     만일 파일미디어.is파일( 시도하다 ) 그때                         r = 거짓의                     다른                         r = "NotFound"                     종지부를 찍다                 다른                     r = "invalid"                 종지부를 찍다             그렇지 않으면 파일미디어.isType( 시도하다, s ) 그때                 r = 거짓의             다른                 r = "invalid"             종지부를 찍다         다른             r = "missing"         종지부를 찍다     그렇지 않으면 받아들이다:짝을 맞추다( "%+$" ) 그때         r = "empty"     다른         r = 거짓의     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 시설 관리    국부적 기능을 하다 공장 ( 라고 말하다 )     -- 내용 언어로 지역화된 메시지 문자열 검색     -- 전제 조건:     -- say -- 문자열; 메시지 ID     -- 사후 조건:     -- 일부 메시지 문자열 반환     -- 사용:     -- > 메시지프리픽스     -> L10nDef     -- mw.언어.getContentLanguage()     -- mw.mw.new()     국부적 c = mw.언어.getContentLanguage():get코드()     국부적 m = mw.메세지.새로운( 메시지프리픽스 .. 라고 말하다 )     국부적 r = 거짓의     만일 m:isblank() 그때         국부적 l10n = L10nDef[ c ]         만일 아닌 l10n 그때             l10n = L10nDef[ "엔" ]         종지부를 찍다         r = l10n[ 라고 말하다 ]     다른         m:언어가 있는( c )         r = m:평이한()     종지부를 찍다     만일 아닌 r 그때         r = 문자열.format( "((%s)", 라고 말하다 )     종지부를 찍다     돌아오다 r 종지부를 찍다 &shy; 공장 설립    국부적 기능을 하다 안전 장치를 하다( 이야기, 스캔하다 )     -- 일치 테스트(구문 오류가 있는 사용자 정의)     -- 전제 조건:     -- story -- 문자열; 매개 변수 값     -- 스캔 -- 문자열; 패턴     -- 사후 조건:     -- 반환 nil, 일치하지 않으면 nil, 기타 non-nil     -- 사용:     -- mw.ustring.match()     돌아오다  mw.우스트링.짝을 맞추다( 이야기, 스캔하다 ) 종지부를 찍다 -- failsafe.    국부적 기능을 하다 실패하다( 스펙을 붙이다, 의심을 품다, 옵션들 )     -- 지역화된 오류 메시지 제출     -- 전제 조건:     -- spec -- 문자열; 메시지 ID     -- 의심스러운 -- 문자열 또는 nil; 추가 정보     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- options.properties     -- 사후 조건:     -- 반환 문자열     -- 사용:     &shy; 공장 설립     국부적 r = 공장 ( 스펙을 붙이다 )     만일 타자를 치다( 옵션들 ) == "테이블" 그때         만일 타자를 치다( 옵션들.템플릿 ) == "끈" 그때             만일 #옵션들.템플릿 > 0 그때                 r = 문자열.format( "%s(%s)", r, 옵션들.템플릿 )             종지부를 찍다         종지부를 찍다     종지부를 찍다     만일 의심을 품다 그때         r = 문자열.format( "%s: %s", r, 의심을 품다 )     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 실패    국부적 기능을 하다 과실을 대다( 저장하다, 핵심을 )     -- 컬렉션 문자열에 키 추가 및 구분 기호 삽입     -- 전제 조건:     -- store -- 문자열, nil 또는 false, 수집 문자열     -- 키 -- 문자열 또는 번호; 추가할 항목     -- 사후 조건:     -- 반환 문자열, 확장     국부적 r     국부적 s     만일 타자를 치다( 핵심을 ) == "숫자" 그때         s = 토스트링( 핵심을 )     다른         s = 핵심을     종지부를 찍다     만일 저장하다 그때         r = 문자열.format( "%s; %s", 저장하다, s )     다른         r = s     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 오류 해결    국부적 기능을 하다 실현 가능한( 분석하다, 옵션들, 목구멍이브 )     -- 값의 내용 확인     -- 전제 조건:     -- 분석 -- 분석할 문자열     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- options.pattern     -- 선택사항.핵심을     -- 선택사항.라고 말하다     --abbr -- true: 약어 오류 메시지     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓이거나 답변이 허용되지 않는 경우     -- 사용:     -- > 패턴     -- 실패     -- mw.text.csnmp     -- 시설 관리     -- failsafe.     -- CJK() 포함     국부적 r    = 거짓의     국부적 s    = 거짓의     국부적 보여 주다 = 못을 박다     국부적 스캔하다 = 거짓의     만일 타자를 치다( 옵션들.무늬를 넣다 ) == "끈" 그때         만일 옵션들.핵심을 그때             r = 실패하다( "듀프 룰", 거짓의, 옵션들 )         다른             스캔하다 = 옵션들.무늬를 넣다         종지부를 찍다     다른         만일 타자를 치다( 옵션들.핵심을 ) == "끈" 그때             s = mw.문자 메시지를 보내다.다듬다( 옵션들.핵심을 )         다른             s = "+"         종지부를 찍다         만일 s ~= "*" 그때             스캔하다 = 패턴[ s ]         종지부를 찍다         만일 타자를 치다( 스캔하다 ) == "끈" 그때             만일 s == "n" 또는 s == "0,0" 또는 s == "0.0" 그때                 만일 아닌 분석하다:짝을 맞추다( "[0-9]" )  그리고                    아닌 분석하다:짝을 맞추다( "^%s*$" ) 그때                     스캔하다 = 거짓의                     만일 옵션들.라고 말하다 그때                         보여 주다 = 문자열.format( "%s", 옵션들.라고 말하다 )                     종지부를 찍다                     만일 목구멍이브 그때                         r = 보여 주다                     다른                         r = 실패하다( "invalid", 보여 주다, 옵션들 )                     종지부를 찍다                 종지부를 찍다             종지부를 찍다         그렇지 않으면 s ~= "*" 그때             국부적 op, n, 더하기 = s:짝을 맞추다( "([!=]=?"([-0-9][%S]*)(+?)" )             만일 op 그때                 n = 톤넘버( n )                 만일 n 그때                     국부적 i = 톤넘버( 분석하다 )                     만일 i 그때                         만일 op == "<" 그때                             i = ( i < n )                         그렇지 않으면 op == "<=" 그때                             i = ( i <= n )                         그렇지 않으면 op == ">" 그때                             i = ( i > n )                         그렇지 않으면 op == ">=" 그때                             i = ( i >= n )                         그렇지 않으면 op == "==" 그때                             i = ( i == n )                         그렇지 않으면 op == "!=" 그때                             i = ( i ~= n )                         다른                             n = 거짓의                         종지부를 찍다                     종지부를 찍다                     만일 아닌 i 그때                         r = "invalid"                     종지부를 찍다                 그렇지 않으면 더하기 그때                     r = "정의되지 않음"                 종지부를 찍다             그렇지 않으면 s:짝을 맞추다( "^image%+?:?$" )  또는                    s:짝을 맞추다( "^file%+?:?$" ) 그때                 r = 시설( s, 분석하다 )                 n = 진실의             그렇지 않으면 s:짝을 맞추다( "랭W?%+?" ) 그때                 n = "lang" -- 랑랑+ -- langW 랑W+             종지부를 찍다             만일 아닌 n 그리고 아닌 r 그때                 r = "알 수 없는 규칙"             종지부를 찍다             만일 r 그때                 만일 옵션들.라고 말하다 그때                     보여 주다 = 문자열.format( "%s" %s", 옵션들.라고 말하다, s )                 다른                     보여 주다 = s                 종지부를 찍다                 만일 목구멍이브 그때                     r = 보여 주다                 다른                     r = 실패하다( r, 보여 주다, 옵션들 )                 종지부를 찍다             종지부를 찍다         종지부를 찍다     종지부를 찍다     만일 스캔하다 그때         국부적 법률상의, 얻었다 = 피콜( 안전 장치를 하다, 분석하다, 스캔하다 )         만일 법률상의 그때             만일 아닌 얻었다 그때                 만일 s == "aa" 그때                     얻었다 = 포함하다CJK( 분석하다 )                 종지부를 찍다                 만일 아닌 얻었다 그때                     만일 옵션들.라고 말하다 그때                         보여 주다 = 문자열.format( "%s", 옵션들.라고 말하다 )                     종지부를 찍다                     만일 목구멍이브 그때                         r = 보여 주다                     다른                         r = 실패하다( "invalid", 보여 주다, 옵션들 )                     종지부를 찍다                 종지부를 찍다             종지부를 찍다         다른             r = 실패하다( "배드패턴",                          문자열.format( "%s *** %s", 스캔하다, 얻었다 ),                          옵션들 )         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 실현가능성    국부적 기능을 하다 먹였다( 건초 더미, 바늘을 꿰다 )     -- 건초더미 지도에서 바늘 찾기     -- 전제 조건:     -- 건초 더미 -- 표; 주요 값 맵     -- 바늘 -- any; 식별자     -- 사후 조건:     -- 검색된 경우 true 반환     국부적 k, v     을 위해 k, v  쌍들( 건초 더미 ) 하다         만일 k == 바늘을 꿰다 그때             돌아오다 진실의         종지부를 찍다     종지부를 찍다 - k, v의 경우     돌아오다 거짓의 종지부를 찍다 &shy; 연감    국부적 기능을 하다 을 가져오다( , 옵션들 )     -- 모든 매개 변수를 사용하여 일반 테이블 반환     -- 전제 조건:     -- light -- true: template translocation; false: #m     -- 옵션 - 테이블; 선택적 세부 정보     -- 선택사항.낮은     -- 사후 조건:     -- 반환 테이블; 공백 전용 값이 false인 경우     -- 사용:     -- TemplatePar.downcase()     -- mw.getCurrentFrame()     -- 프레임:getParent()     국부적 g, k, v     국부적 r = { }     만일 옵션들.낮은 그때         g = 템플릿파.다운케이스( 옵션들 )     다른         g = mw.getCurrentFrame()         만일  그때             g = g:getParent()         종지부를 찍다         g = g.아그     종지부를 찍다     만일 타자를 치다( g ) == "테이블"  그때         r = { }         을 위해 k, v  쌍들( g ) 하다             만일 타자를 치다( v ) == "끈" 그때                 만일 v:짝을 맞추다( "^%s*$" ) 그때                     v = 거짓의                 종지부를 찍다             다른                 v = 거짓의             종지부를 찍다             만일 타자를 치다( k ) == "숫자" 그때                 k = 토스트링( k )             종지부를 찍다             r[ k ] = v         종지부를 찍다 - k, v의 경우     다른         r = g     종지부를 찍다     돌아오다 r 종지부를 찍다 -- petcheput.    국부적 기능을 하다 형상을 나타내다( 덧셈을, 옵션들 )     -- #invoke 문자열에서 규칙으로 옵션 확장     -- 전제 조건:     -- add -- 문자열 또는 nil; 요청된 규칙     -- 옵션 - 테이블; 세부 정보     - ++ .key     - ++ .패턴     -- 사후 조건:     -- 시퀀스 테이블 반환     국부적 r = 옵션들     만일 타자를 치다( 덧셈을 ) == "끈" 그때         국부적 이야기 = mw.문자 메시지를 보내다.다듬다( 덧셈을 )         국부적 후보선수   = 이야기:짝을 맞추다( "^/(.*%S)/$" )         만일 타자를 치다( 후보선수 ) == "끈" 그때             후보선수             = 후보선수:gsub( "%%!", " " )             후보선수             = 후보선수:gsub( "%%%(%(", "{{" )             후보선수             = 후보선수:gsub( "%%%)%)", "}}" )             옵션들.무늬를 넣다 = 후보선수             옵션들.핵심을     = 못을 박다         다른             옵션들.핵심을     = 이야기             옵션들.무늬를 넣다 = 못을 박다         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 -- figured.    국부적 기능을 하다 채우다( 명시된 )     -- split requirement string을 '='로 구분     -- 전제 조건:     -- 지정 -- 문자열 또는 nil; 요청된 매개 변수 세트     -- 사후 조건:     -- 시퀀스 테이블 반환     -- 사용:     -- mw.text.csnmp     국부적 r     만일 명시된 그때         국부적 i, s         r = mw.문자 메시지를 보내다.갈라지다( 명시된, "%s*=%s*" )         을 위해 i = #r, 1, -1 하다             s = r[ i ]             만일 #s == 0 그때                 table.remove( r, i )             종지부를 찍다         종지부를 찍다 - 나, -1의 경우     다른         r = { }     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 채우기    국부적 기능을 하다 최종 결정하다( 제출하다, 옵션들, 액자에 넣다 )     -- 메시지 완료     -- 전제 조건:     -- 제출 -- 문자열, 거짓 또는 영(0); 비필수 오류 메시지     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- 선택사항.형식을 갖추다     -- options.properties     -- options.cat     -- options.properties     -- 프레임 -- 객체 또는 거짓     -- 사후 조건:     -- 반환 문자열 또는 거짓     -- 사용:     &shy; 공장 설립     국부적 r = 거짓의     만일 제출하다 그때         국부적 선택하다, s         국부적 게을러진 = 거짓의         국부적 보여 주다 = 거짓의         만일 타자를 치다( 옵션들 ) == "테이블" 그때             선택하다  = 옵션들             보여 주다 = 선택하다.형식을 갖추다             게을러진 = ( 보여 주다 == ""  또는  보여 주다 == "0"  또는  보여 주다 == "-" )             s    = 선택하다.미리보기             만일 타자를 치다( s ) == "끈"  그리고                 s ~= ""  그리고  s ~= "0"  그리고  s ~= "-" 그때                 만일 게을러진 그때                     보여 주다 = ""                     게을러진 = 거짓의                 종지부를 찍다                 만일 아닌 액자에 넣다 그때                     액자에 넣다 = mw.getCurrentFrame()                 종지부를 찍다                 만일 액자에 넣다:전처리하다( "{{REVISIONID}}" ) == "" 그때                     만일 s == "1" 그때                         보여 주다 = "*"                     다른                         보여 주다 = s                     종지부를 찍다                 종지부를 찍다             종지부를 찍다         다른             선택하다 = { }         종지부를 찍다         만일 게을러진 그때             만일 아닌 선택하다.고양이를 그때                 r = 문자열.format( "%s %s",                                    제출하다,  공장 ( "noMSGnoCAT" ) )             종지부를 찍다         다른             r = 제출하다         종지부를 찍다         만일 r  그리고  아닌 게을러진 그때             국부적 i             만일 아닌 보여 주다  또는  보여 주다 == "*" 그때                 보여 주다 = "<스팬 클래스=\"착오\">@@@[/span]"             종지부를 찍다             i = 보여 주다:찾아내다( "@@@", 1, 진실의 )             만일 i 그때                 -- r에 "%3"(예: URL)이 포함될 수 있으므로 gsub() 없음                 r = 문자열.format( "%s%s%s",                                    보여 주다:후보선수( 1,  i - 1 ),                                    r,                                    보여 주다:후보선수( i + 3 ) )             다른                 r = 보여 주다             종지부를 찍다         종지부를 찍다         s = 선택하다.고양이를         만일 타자를 치다( s ) == "끈" 그때             만일 선택하다.에른스 그때                 국부적 ns = mw.칭호를 붙이다.getCurrentTitle().네임스페이스                 국부적 세인트 = 타자를 치다( 선택하다.에른스 )                 만일 세인트 == "끈" 그때                     국부적 스페이스  = 문자열.format( ".*%s%d%s.*", ns )                     국부적 공간 = 문자열.format( " %s ", 선택하다.에른스 )                     만일 공간:짝을 맞추다( 스페이스 ) 그때                         선택하다.에른스 = 거짓의                     종지부를 찍다                 그렇지 않으면 세인트 == "테이블" 그때                     을 위해 i = 1, #선택하다.에른스 하다                         만일 선택하다.에른스[ i ] == ns 그때                             선택하다.에른스 = 거짓의                             부숴뜨리다    - 나로서는                         종지부를 찍다                     종지부를 찍다 - 나로서는                 종지부를 찍다             종지부를 찍다             만일 선택하다.에른스 그때                 r = ""             다른                 만일 아닌 r 그때                    r = ""                 종지부를 찍다                 만일 s:찾아내다( "@@@" ) 그때                     만일 타자를 치다( 선택하다.템플릿 ) == "끈" 그때                         s = s:gsub( "@@@", 선택하다.템플릿 )                     종지부를 찍다                 종지부를 찍다                 국부적 i                 국부적 고양이들 = mw.문자 메시지를 보내다.갈라지다( s, "%s*#%s*" )                 을 위해 i = 1, #고양이들 하다                     s = mw.문자 메시지를 보내다.다듬다( 고양이들[ i ] )                     만일 #s > 0 그때                         r = 문자열.format( "%s[Category:%s]", r, s )                     종지부를 찍다                 종지부를 찍다 - 나로서는             종지부를 찍다         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 - 최종 결정    국부적 기능을 하다 찾아내다( 건초 더미, 바늘을 꿰다 )     -- 건초더미에서 바늘 찾기     -- 전제 조건:     -- 건초 더미 -- 테이블; 키 이름 시퀀스, 낮을 경우 다운케이싱됨     -- 바늘 -- any; 키 이름     -- 사후 조건:     -- 검색된 경우 true 반환     국부적 i     을 위해 i = 1, #건초 더미 하다         만일 건초 더미[ i ] == 바늘을 꿰다 그때             돌아오다 진실의         종지부를 찍다     종지부를 찍다 - 나로서는     돌아오다 거짓의 종지부를 찍다 -- 파인더    국부적 기능을 하다 고치다( 유효의, 의무, 얻었다, 옵션들 )     -- 매개변수 분석 수행     -- 전제 조건:     -- 유효 -- 테이블; 알려진 매개 변수의 고유 시퀀스     -- duty -- 테이블; 필수 매개변수 순서     -- got -- table; 현재 매개변수 순서     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- 사후 조건:     -- 구성된 대로 문자열 반환, 유효한 경우 비어 있음     -- 사용:     -- 파인더     -- 오류 해결     -- 실패     &shy; 연감     국부적 k, v     국부적 r = 거짓의     을 위해 k, v  쌍들( 얻었다 ) 하다         만일 아닌 찾아내다( 유효의, k ) 그때             r = 과실을 대다( r, k )         종지부를 찍다     종지부를 찍다 - k, v의 경우     만일 r 그때         r = 실패하다( "unknown",                      문자열.format( "%s", r ),                      옵션들 )     다른 -- 모든 이름이 유효함         국부적 i, s         을 위해 i = 1, #의무 하다             s = 의무[ i ]             만일 아닌 먹였다( 얻었다, s ) 그때                 r = 과실을 대다( r, s )             종지부를 찍다         종지부를 찍다 - 나로서는         만일 r 그때             r = 실패하다( "정의되지 않음", r, 옵션들 )         다른 -- 모두 의무적으로 출석             을 위해 i = 1, #의무 하다                 s = 의무[ i ]                 만일 아닌 얻었다[ s ] 그때                     r = 과실을 대다( r, s )                 종지부를 찍다             종지부를 찍다 - 나로서는             만일 r 그때                 r = 실패하다( "empty", r, 옵션들 )             종지부를 찍다         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 수정    국부적 기능을 하다 납작한( 수집, 옵션들 )     -- 다운코싱된 문자열을 사용하여 모든 테이블 요소 반환     -- 전제 조건:     -- 컬렉션 -- 테이블; k=v 쌍     -- 선택사항 - 테이블 또는 영(0); 선택적 메시징 세부사항     -- 사후 조건:     -- 반환 테이블, 비어 있거나 오류 메시지가 있는 문자열.     -- 사용:     -- mw.ustring.lowerfloss     -- 오류 해결     -- 실패     국부적 k, v     국부적 r = { }     국부적 e = 거짓의     을 위해 k, v  쌍들( 수집 ) 하다         만일 타자를 치다 ( k ) == "끈" 그때             k = mw.우스트링.더 낮게( k )             만일 r[ k ] 그때                 e = 과실을 대다( e, k )             종지부를 찍다         종지부를 찍다         r[ k ] = v     종지부를 찍다 - k, v의 경우     만일 e 그때         r = 실패하다( "멀티 스피치", e, 옵션들 )     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 플랫슈즈    국부적 기능을 하다 접다( 옵션들 )     -- 두 테이블을 병합하고, 둘 다 비어 있지 않은 경우 새 시퀀스를 생성하십시오.     -- 전제 조건:     -- 옵션 - 테이블; 세부 정보     -- options.properties 시퀀스를 변경하지 않고 유지     -- options.추가할 옵션 순서     -- options.낮은 다운케이드 예상     -- 사후 조건:     -- 오류일 경우 병합된 테이블 또는 메시지 문자열 반환     -- 사용:     -- 파인더     -- 오류 해결     -- 실패     -- 플랫슈즈     국부적 i, e, r, s     국부적 밑의   = 옵션들.의무적인     국부적 연장하다 = 옵션들.선택적     만일 #밑의 == 0 그때         만일 #연장하다 == 0 그때             r = { }         다른             r = 연장하다         종지부를 찍다     다른         만일 #연장하다 == 0 그때             r = 밑의         다른             e = 거짓의             을 위해 i = 1, #연장하다 하다                 s = 연장하다[ i ]                 만일 찾아내다( 밑의, s ) 그때                     e = 과실을 대다( e, s )                 종지부를 찍다             종지부를 찍다 - 나로서는             만일 e 그때                 r = 실패하다( "dupopt", e, 옵션들 )             다른                 r = { }                 을 위해 i = 1, #밑의 하다                     table.insert( r, 밑의[ i ] )                 종지부를 찍다 - 나로서는                 을 위해 i = 1, #연장하다 하다                     table.insert( r, 연장하다[ i ] )                 종지부를 찍다 - 나로서는             종지부를 찍다         종지부를 찍다     종지부를 찍다     만일 옵션들.낮은  그리고  타자를 치다( r ) == "테이블" 그때         r = 납작한( r, 옵션들 )     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 접기    국부적 기능을 하다 형체를 이루다( , 옵션들, 액자에 넣다 )     -- 현재 환경에 대한 매개변수 분석 실행     -- 전제 조건:     -- light -- true: template translocation; false: #m     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- options.properties     -- 선택사항.선택사항     -- 프레임 -- 객체 또는 거짓     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓     -- 사용:     -- 접기     -- petcheput.     -- 수정     - 최종 결정     국부적 의무, r     만일 타자를 치다( 옵션들 ) == "테이블" 그때         만일 타자를 치다( 옵션들.의무적인 ) ~= "테이블" 그때             옵션들.의무적인 = { }         종지부를 찍다         의무 = 옵션들.의무적인         만일 타자를 치다( 옵션들.선택적 ) ~= "테이블" 그때             옵션들.선택적 = { }         종지부를 찍다         r = 접다( 옵션들 )     다른         옵션들 = { }         의무    = { }         r       = { }     종지부를 찍다     만일 타자를 치다( r ) == "테이블" 그때         국부적 얻었다 = 을 가져오다( , 옵션들 )         만일 타자를 치다( 얻었다 ) == "테이블" 그때             r = 고치다( r, 의무, 얻었다, 옵션들 )         다른             r = 얻었다         종지부를 찍다     종지부를 찍다     돌아오다 최종 결정하다( r, 옵션들, 액자에 넣다 ) 종지부를 찍다 -- 서식    국부적 기능을 하다 형식을 갖추다( 분석하다, 옵션들 )     -- 값의 유효성 확인     -- 전제 조건:     -- 분석 -- 분석할 문자열     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- 선택사항.라고 말하다     -- options.min     -- options.max     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓이거나 답변이 허용되지 않는 경우     -- 사용:     -- 실현가능성     -- 실패     국부적 r = 실현 가능한( 분석하다, 옵션들, 거짓의 )     국부적 보여 주다     만일 옵션들.  그리고  아닌 r 그때         만일 타자를 치다( 옵션들. ) == "숫자" 그때             만일 타자를 치다( 옵션들.맥스. ) == "숫자" 그때                 만일 옵션들.맥스. < 옵션들. 그때                     r = 실패하다( "minmax",                                  문자열.format( "%d > %d",                                                 옵션들.,                                                 옵션들.맥스. ),                                  옵션들 )                 종지부를 찍다             종지부를 찍다             만일 #분석하다 < 옵션들.  그리고  아닌 r 그때                 보여 주다 = "<" .. 옵션들.                 만일 옵션들.라고 말하다 그때                     보여 주다 = 문자열.format( "%s '%s'", 보여 주다, 옵션들.라고 말하다 )                 종지부를 찍다                 r = 실패하다( "너무 짧음", 보여 주다, 옵션들 )             종지부를 찍다         다른             r = 실패하다( "invalidPar", "min", 옵션들 )         종지부를 찍다     종지부를 찍다     만일 옵션들.맥스.  그리고  아닌 r 그때         만일 타자를 치다( 옵션들.맥스. ) == "숫자" 그때             만일 #분석하다 > 옵션들.맥스. 그때                 보여 주다 = ">" .. 옵션들.맥스.                 만일 옵션들.라고 말하다 그때                     보여 주다 = 문자열.format( "%s '%s'", 보여 주다, 옵션들.라고 말하다 )                 종지부를 찍다                 r = 실패하다( "너무 긴", 보여 주다, 옵션들 )             종지부를 찍다         다른             r = 실패하다( "invalidPar", "최대", 옵션들 )         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 형식 지정    국부적 기능을 하다 형식화된( 할당, 접근하다, 옵션들 )     -- 컬렉션에 있는 특정 매개 변수의 유효성을 확인하십시오.     -- 전제 조건:     -- 할당 -- 수집     -- access -- 컬렉션에 있는 매개 변수의 ID     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓이거나 답변이 허용되지 않는 경우     -- 사용:     -- mw.text.csnmp     -- 형식 지정     -- 실패     국부적 r = 거짓의     만일 타자를 치다( 할당 ) == "테이블" 그때         국부적 이야기 = 할당.아그[ 접근하다 ] 또는 ""         만일 타자를 치다( 접근하다 ) == "숫자" 그때             이야기 = mw.문자 메시지를 보내다.다듬다( 이야기 )          종지부를 찍다         만일 타자를 치다( 옵션들 ) ~= "테이블" 그때             옵션들 = { }         종지부를 찍다         옵션들.라고 말하다 = 접근하다         r = 형식을 갖추다( 이야기, 옵션들 )     종지부를 찍다     돌아오다 r 종지부를 찍다 -- 형식 지정    국부적 기능을 하다 가구를 비치하다( 액자에 넣다, 액션 )     -- .assert() 또는 .valid()의 #invoke 평가 준비     -- 전제 조건:     -- frame -- object; #complete 환경     - 액션 - "잘못된" 또는 "잘못된"     -- 사후 조건:     -- 오류 메시지 또는 ""와 함께 문자열 반환     -- 사용:     -- 서식     -- 실패     - 최종 결정     -- TemplatePar.valid()     -- TemplatePar.assert()     국부적 옵션들 = { 의무적인 = { "1" },                       선택적  = { "2",                                     "고양이",                                     "errNS",                                     "낮음",                                     "최대",                                     "min",                                     "형식",                                     "preview",                                     "template" },                       템플릿  = 문자열.format( "&#35;cs:%s %s ",                                                  "템플릿파",                                                  액션 )                     }     국부적 r       = 형체를 이루다( 거짓의, 옵션들, 액자에 넣다 )     만일 아닌 r 그때         국부적 s         옵션들 = { 고양이를      = 액자에 넣다.아그.고양이를,                     에른스    = 액자에 넣다.아그.에른스,                     낮은      = 액자에 넣다.아그.낮은,                     형식을 갖추다   = 액자에 넣다.아그.형식을 갖추다,                     미리보기  = 액자에 넣다.아그.미리보기,                     템플릿 = 액자에 넣다.아그.템플릿                   }         옵션들 = 형상을 나타내다( 액자에 넣다.아그[ 2 ], 옵션들 )         만일 타자를 치다( 액자에 넣다.아그. ) == "끈" 그때             s = 액자에 넣다.아그.:짝을 맞추다( "^%s*([0-9]+)%s*$" )             만일 s 그때                 옵션들. = 톤넘버( s )             다른                 r = 실패하다( "invalidPar",                              "min=" .. 액자에 넣다.아그.,                              옵션들 )             종지부를 찍다         종지부를 찍다         만일 타자를 치다( 액자에 넣다.아그.맥스. ) == "끈" 그때             s = 액자에 넣다.아그.맥스.:짝을 맞추다( "^%s*([1-9][0-9]*)%s*$" )             만일 s 그때                 옵션들.맥스. = 톤넘버( s )             다른                 r = 실패하다( "invalidPar",                              "max=" .. 액자에 넣다.아그.맥스.,                              옵션들 )             종지부를 찍다         종지부를 찍다         만일 r 그때             r = 최종 결정하다( r, 옵션들, 액자에 넣다 )         다른             s = 액자에 넣다.아그[ 1 ] 또는 ""             r = 톤넘버( s )             만일 ( r ) 그때                 s = r             종지부를 찍다             만일 액션 == "유효한" 그때                 r = 템플릿파.유효의( s, 옵션들, 액자에 넣다 )             그렇지 않으면 액션 == "assert" 그때                 r = 템플릿파.주장하다( s, "", 옵션들 )             종지부를 찍다         종지부를 찍다     종지부를 찍다     돌아오다 r 또는 "" 종지부를 찍다 - 가구    템플릿파.주장하다 = 기능을 하다 ( 분석하다, 덧셈을, 옵션들 )     -- 단일 문자열에 대해 매개변수 분석 수행     -- 전제 조건:     -- 분석 -- 분석할 문자열     -- add -- string : add 오류 메시지, ab/> 사전 준비     -- false 또는 nil: 메시지와 함께 오류 발생     -- 옵션 - 테이블; 선택적 세부 정보     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓     -- 사용:     -- 형식 지정     국부적 r = 형식을 갖추다( 분석하다, 옵션들 )     만일 ( r ) 그때         만일 ( 타자를 치다( 덧셈을 ) == "끈" ) 그때             만일 ( 덧셈을 ~= "" ) 그때                 r = 문자열.format( "%s(%s)", 덧셈을, r )             종지부를 찍다         다른             착오( r, 0 )         종지부를 찍다     종지부를 찍다     돌아오다 r 종지부를 찍다 -- TemplatePar.assert()    템플릿파.수표 = 기능을 하다 ( 옵션들 )     -- 현재 템플릿 환경에서 매개 변수 분석 실행     -- 전제 조건:     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- options.properties     -- 선택사항.선택사항     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓     -- 사용:     -- 서식     돌아오다 형체를 이루다( 진실의, 옵션들, 거짓의 ) 종지부를 찍다 -- TemplatePar.check()    템플릿파.수를 세다 = 기능을 하다 ()     -- 템플릿 매개 변수의 반환 번호     -- 사후 조건:     -- 반환 번호, 0부터 시작     -- 사용:     -- mw.getCurrentFrame()     -- 프레임:getParent()     국부적 k, v     국부적 r = 0     국부적 t = mw.getCurrentFrame():getParent()     국부적 o = t.아그     을 위해 k, v  쌍들( o ) 하다         r = r + 1     종지부를 찍다 - k, v의 경우     돌아오다 r 종지부를 찍다 -- TemplatePar.count()    템플릿파.countNotEmpty = 기능을 하다 ()     -- 공백을 초과하는 템플릿 매개 변수 반환 수     -- 사후 조건:     -- 반환 번호, 0부터 시작     -- 사용:     -- mw.getCurrentFrame()     -- 프레임:getParent()     국부적 k, v     국부적 r = 0     국부적 t = mw.getCurrentFrame():getParent()     국부적 o = t.아그     을 위해 k, v  쌍들( o ) 하다         만일 아닌 v:짝을 맞추다( "^%s*$" ) 그때             r = r + 1         종지부를 찍다     종지부를 찍다 - k, v의 경우     돌아오다 r 종지부를 찍다 -- TemplatePar.countNotEmpty()    템플릿파.다운케이스 = 기능을 하다 ( 옵션들 )     -- 다운코싱된 이름을 사용하여 모든 템플릿 매개 변수     -- 전제 조건:     -- 선택사항 - 테이블 또는 영(0); 선택적 메시징 세부사항     -- 사후 조건:     -- 반환 테이블, 비어 있거나 오류 메시지가 있는 문자열.     -- 사용:     -- mw.getCurrentFrame()     -- 프레임:getParent()     -- 플랫슈즈     국부적 t = mw.getCurrentFrame():getParent()     돌아오다 납작한( t.아그, 옵션들 ) 종지부를 찍다 -- TemplatePar.downcase()    템플릿파.유효의 = 기능을 하다 ( 접근하다, 옵션들, 액자에 넣다 )     -- 특정 템플릿 매개 변수의 유효성 검사     -- 전제 조건:     -- access -- 템플릿 전폐에서 매개 변수 ID     -- 문자열 또는 숫자     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- frame -- object; #complete 환경     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓이거나 답변이 허용되지 않는 경우     -- 사용:     -- mw.text.csnmp     -- TemplatePar.downcase()     -- 프레임:getParent()     -- 형식 지정     -- 실패     - 최종 결정     국부적 r = 타자를 치다( 접근하다 )     만일 r == "끈" 그때         r = mw.문자 메시지를 보내다.다듬다( 접근하다 )         만일 #r == 0 그때             r = 거짓의         종지부를 찍다     그렇지 않으면 r == "숫자" 그때         r = 접근하다     다른         r = 거짓의     종지부를 찍다     만일 r 그때         국부적 모조품         만일 타자를 치다( 옵션들 ) ~= "테이블" 그때             옵션들 = { }         종지부를 찍다         만일 옵션들.낮은 그때             모조품 = 템플릿파.다운케이스( 옵션들 )         다른             모조품 = 액자에 넣다:getParent()         종지부를 찍다         r = 형식화된( 모조품, 접근하다, 옵션들 )     다른         r = 실패하다( "노네임", 거짓의, 옵션들 )     종지부를 찍다     돌아오다 최종 결정하다( r, 옵션들, 액자에 넣다 ) 종지부를 찍다 -- TemplatePar.valid()    템플릿파.검증하다 = 기능을 하다 ( 옵션들 )     -- #invoke 매개변수 분석 수행     -- 전제 조건:     -- 옵션 - 테이블 또는 영(0); 선택적 세부 정보     -- 사후 조건:     -- 구성된 오류 메시지가 포함된 반환 문자열;     -- 유효하지 않은 경우 거짓     -- 사용:     -- 서식     돌아오다 형체를 이루다( 거짓의, 옵션들, 거짓의 ) 종지부를 찍다 -- TemplatePar.verify()    -- 외부 액세스 제공 국부적 p = {}    기능을 하다 p.주장하다( 액자에 넣다 )     -- 일부 단일 문자열에 대해 매개변수 분석 수행     -- 전제 조건:     -- frame -- object; #complete 환경     -- 사후 조건:     -- 오류 메시지 또는 ""와 함께 문자열 반환     -- 사용:     - 가구     돌아오다 가구를 비치하다( 액자에 넣다, "assert" ) 종지부를 찍다 - .assert()    기능을 하다 p.수표( 액자에 넣다 )     -- 템플릿 매개 변수의 유효성 검사     -- 전제 조건:     -- frame -- object; #complete 환경     -- 사후 조건:     -- 오류 메시지 또는 ""와 함께 문자열 반환     -- 사용:     -- 서식     -- 채우기     국부적 옵션들 = { 선택적  = { "모두",                                     "opt",                                     "고양이",                                     "errNS",                                     "낮음",                                     "형식",                                     "preview",                                     "template" },                       템플릿  = "&#35;제보:TemplatePar 검사 "                     }     국부적 r = 형체를 이루다( 거짓의, 옵션들, 액자에 넣다 )     만일 아닌 r 그때         옵션들 = { 의무적인 = 채우다( 액자에 넣다.아그.전부 ),                     선택적  = 채우다( 액자에 넣다.아그.선택하다 ),                     고양이를       = 액자에 넣다.아그.고양이를,                     에른스     = 액자에 넣다.아그.에른스,                     낮은       = 액자에 넣다.아그.낮은,                     형식을 갖추다    = 액자에 넣다.아그.형식을 갖추다,                     미리보기   = 액자에 넣다.아그.미리보기,                     템플릿  = 액자에 넣다.아그.템플릿                   }         r       = 형체를 이루다( 진실의, 옵션들, 액자에 넣다 )     종지부를 찍다     돌아오다 r 또는 "" 종지부를 찍다 -- .check()    기능을 하다 p.수를 세다( 액자에 넣다 )     -- 템플릿 매개 변수 개수     -- 사후 조건:     -- 숫자가 "0"인 반환 문자열     -- 사용:     -- TemplatePar.count()     돌아오다 토스트링( 템플릿파.수를 세다() ) 종지부를 찍다 -- .count .    기능을 하다 p.countNotEmpty( 액자에 넣다 )     -- 비어 있지 않은 템플릿 매개 변수 개수     -- 사후 조건:     -- 숫자가 "0"인 반환 문자열     -- 사용:     -- TemplatePar.countNotEmpty()     돌아오다 토스트링( 템플릿파.countNotEmpty() ) 종지부를 찍다 -- .countNotEmpty()    기능을 하다 p.짝을 맞추다( 액자에 넣다 )     -- 매개변수 및 매개변수 값의 조합 분석     -- 사후 조건:     -- 오류 메시지 또는 ""와 함께 문자열 반환     -- 사용:     -- mw.text.csnmp     -- mw.ustring.lowerfloss     -- 실패     -- 서식     -- TemplatePar.downcase()     -- figured.     -- 실현가능성     -- 오류 해결     - 최종 결정     국부적 r = 거짓의     국부적 옵션들 = { 고양이를      = 액자에 넣다.아그.고양이를,                       에른스    = 액자에 넣다.아그.에른스,                       낮은      = 액자에 넣다.아그.낮은,                       형식을 갖추다   = 액자에 넣다.아그.형식을 갖추다,                       미리보기  = 액자에 넣다.아그.미리보기,                       템플릿 = 액자에 넣다.아그.템플릿                     }     국부적 k, v, s     국부적 모조품 = { }     을 위해 k, v  쌍들( 액자에 넣다.아그 ) 하다         만일 타자를 치다( k ) == "숫자" 그때             s, v = v:짝을 맞추다( "^ *([^=]+) *= *(%S*%S**) *$" )             만일 s 그때                 s = mw.문자 메시지를 보내다.다듬다( s )                 만일 s == "" 그때                     s = 거짓의                 종지부를 찍다             종지부를 찍다             만일 s 그때                 만일 옵션들.낮은 그때                     s = mw.우스트링.더 낮게( s )                 종지부를 찍다                 만일 모조품[ s ] 그때                     s = 모조품[ s ]                     s[ #s + 1 ] = v                 다른                     모조품[ s ] = { v }                 종지부를 찍다             다른                 r = 실패하다( "invalidPar",  토스트링( k ),  옵션들 )                 부숴뜨리다 - k, v의 경우             종지부를 찍다         종지부를 찍다     종지부를 찍다 - k, v의 경우     만일 아닌 r 그때         s = { }         을 위해 k, v  쌍들( 모조품 ) 하다             s[ #s + 1 ] = k         종지부를 찍다 - k, v의 경우         옵션들.선택적 = s         r = 형체를 이루다( 진실의, 옵션들, 액자에 넣다 )     종지부를 찍다     만일 아닌 r 그때         국부적 에러 미스, 오류값, 부족하다, 통치를 하다         국부적 타르스 = 액자에 넣다:getParent().아그         옵션들.선택적 = 못을 박다         만일 옵션들.낮은 그때             타르스 = 템플릿파.다운케이스()         다른             타르스 = 액자에 넣다:getParent().아그         종지부를 찍다         에러 미스   = 거짓의         오류값 = 거짓의         을 위해 k, v  쌍들( 모조품 ) 하다             옵션들.라고 말하다 = k             에러값    = 거짓의             s = 타르스[ k ]             만일 s 그때                 만일 s == "" 그때                     부족하다 = 진실의                 다른                     부족하다 = 거짓의                 종지부를 찍다             다른                 s    = ""                 부족하다 = 진실의             종지부를 찍다             을 위해 r, 통치를 하다  쌍들( v ) 하다                 옵션들 = 형상을 나타내다( 통치를 하다, 옵션들 )                 r       = 실현 가능한( s, 옵션들, 진실의 )                 만일 r 그때                     만일 부족하다 그때                         만일 에러 미스 그때                             에러 미스 = 문자열.format( "%s '%s'",                                                      에러 미스, k )                         다른                             에러 미스 = 문자열.format( "%s", k )                         종지부를 찍다                     그렇지 않으면 아닌 에러 미스 그때                         오류값 = 과실을 대다( 오류값, r )                     종지부를 찍다                     부숴뜨리다 -- r에 대해서는, 규칙.                 종지부를 찍다             종지부를 찍다 -- s, rule for s         종지부를 찍다 - k, v의 경우         r = ( 에러 미스 또는 오류값 )         만일 r 그때             만일 에러 미스 그때                 r = 실패하다( "정의되지 않음", 에러 미스, 옵션들 )             다른                 r = 실패하다( "invalid", 오류값, 옵션들 )             종지부를 찍다             r = 최종 결정하다( r, 옵션들, 액자에 넣다 )         종지부를 찍다     종지부를 찍다     돌아오다 r 또는 "" 종지부를 찍다 -- .match()    기능을 하다 p.유효의( 액자에 넣다 )     -- 특정 템플릿 매개 변수의 유효성 검사     -- 전제 조건:     -- frame -- object; #complete 환경     -- 사후 조건:     -- 오류 메시지 또는 ""와 함께 문자열 반환     -- 사용:     - 가구     돌아오다 가구를 비치하다( 액자에 넣다, "유효한" ) 종지부를 찍다 - .validuation.    기능을 하다 p.템플릿파()     -- 모듈에 대한 기능 액세스 검색     -- 사후 조건:     -- 함수와 함께 반환 테이블     돌아오다 템플릿파 종지부를 찍다 -- .TemplatePar()    돌아오다 p