사용방법[원본 편집]
반복되는 표현을 입력할 때 사용하실 수 있습니다. variable이 없는 simple 함수와 variable이 있는 variable 함수 둘 중에 하나를 사용할 수 있습니다.
simple[원본 편집]
{{#invoke:Loop|simple|(표현)|(반복횟수)}}
형식으로 입력하시면 됩니다. 예를 들면 "대한독립 만세"라는 표현을 5번 반복하기 위한 표현은
{{#invoke:Loop|simple|대한독립 만세<br />|5}}
이며, 결과는 아래와 같이 나타나게 됩니다.
대한독립 만세
대한독립 만세
대한독립 만세
대한독립 만세
대한독립 만세
variable[원본 편집]
때로는 반복할 때마다 다른 변수를 입력해야 할 경우도 있습니다. 이 경우에는 variable 함수를 사용하면 편리합니다. 모듈 입력 구조는 다음과 같습니다.
{{#invoke:Loop|variable|(표현)|(반복횟수)|(변수명)=(변수의 값 리스트)}}
- 표현 부분에서 변수로 처리하고 싶으신 부분은 변수명 양 옆에 중괄호로 묶으시면 됩니다. 반드시 중괄호는 변수명과 띄어쓰기 없이 사용하셔야 오류가 생기지 않습니다. 예를 들면 "제{i}의아해가무섭다고그리오."라는 표현에서 i를 1부터 12까지의 숫자로 대입해서 표현이 가능합니다.
- 반복 횟수는 자연수를 입력하시면 됩니다.
- 그 다음에 표현 부분에서 처리한 변수명을 인덱스로 잡고, 뒤의 리스트는 반점으로 구분된 형태로 표시합니다. 중괄호로 묶거나(예: i={1,2,3}) 그냥 반점으로 나누어주시면(예: i=1,2,3) 됩니다.
예시 - 인디언 노래에서 나타나는 표현.
{{#invoke:Loop|variable|{i} 꼬마 {j} 꼬마 {k} 꼬마 인디언<br />|3|i=한, 네, 일곱|j=두, 다섯, 여덟|k=세, 여섯, 아홉}}
결과
한 꼬마 두 꼬마 세 꼬마 인디언
네 꼬마 다섯 꼬마 여섯 꼬마 인디언
일곱 꼬마 여덟 꼬마 아홉 꼬마 인디언
local p = {}
-- 단순 반복문. {{#invoke:Loop|simple|대한독립 만세<br />|5}} -> 대한독립 만세 5번 반복
function p.simple(frame)
local sentence = frame.args[1]
local cnt = tonumber(frame.args[2])
local res = ''
for i =1, cnt do
res = res..sentence
end
return res
end
-- 문자 + 테이블을 이용한 반복문
-- {{#invoke:Loop|variable|{i} 꼬마 {j} 꼬마 {k} 꼬마 인디언<br />|3|i=한, 네, 일곱|j=두, 다섯, 여덟|k=세, 여섯, 아홉}}
function p.variable(frame)
local sentence = frame.args[1]
local cnt = tonumber(frame.args[2])
local iterator = mw.ustring.gmatch(sentence, '{([^{]*)}')
local set_params = {}
local res = ''
-- 빈 테이블 만들기
for idx =1, cnt do
set_params[idx] = {}
end
for w in iterator do
local val_args = frame.args[w]
-- 프레임 형식이든 콤마 형식이든 호환성을 확보하기 위해서 --> {1, 4, 5} => 1,4,5, 형식으로 바꿔주기
val_args = mw.ustring.gsub(mw.ustring.gsub(val_args, ',%s*', ','), '^{?([^}]*)}?$', '%1,')
-- val_args에서 유도
local val_parse = mw.ustring.gmatch(val_args, '(.-),')
local idx = 1
-- 패턴 집어넣기
for pat in val_parse do
set_params[idx][w] = pat
idx = idx +1
end
end
for idx =1, cnt do
local iterator = mw.ustring.gmatch(sentence, '{([^{]*)}')
local res_part = sentence
for w in iterator do
res_part = mw.ustring.gsub(res_part, '{'..w..'}', set_params[idx][w])
end
res = res..res_part
end
return res
end
return p