한국   대만   중국   일본 
?????:?????????????????????????????? - ?????????? ?????????????

????? : ??????????????????????????????

????????????? ?????????????
Documentation icon ???????????????????? [ ?? ] [ ??? ] [ ??????? ] [ ??????? ]

????????? [ ??? ]

{{#invoke:??????????????????????????????| function_name }}

??????? [ ??? ]

-- This module may be used to compare the arguments passed to the parent

-- with a list of arguments, returning a specified result if an argument is

-- not on the list

local
 p
 =
 {}


local
 function
 trim
(
s
)

	return
 s
:
match
(
'^%s*(.-)%s*$'
)

end


local
 function
 isnotempty
(
s
)

	return
 s
 and
 s
:
match
(
'%S'
)

end


local
 function
 clean
(
text
)

	-- Return text cleaned for display and truncated if too long.

	-- Strip markers are replaced with dummy text representing the original wikitext.

	local
 pos
,
 truncated

	local
 function
 truncate
(
text
)

		if
 truncated
 then

			return
 ''

		end

		if
 mw
.
ustring
.
len
(
text
)
 >
 25
 then

			truncated
 =
 true

			text
 =
 mw
.
ustring
.
sub
(
text
,
 1
,
 25
)
 ..
 '...'

		end

		return
 mw
.
text
.
nowiki
(
text
)

	end

	local
 parts
 =
 {}

	for
 before
,
 tag
,
 remainder
 in
 text
:
gmatch
(
'([^
\127
]*)
\127
[^
\127
]*%-(%l+)%-[^
\127
]*
\127
()'
)
 do

		pos
 =
 remainder

		table.insert
(
parts
,
 truncate
(
before
)
 ..
 '<'
 ..
 tag
 ..
 '>...</'
 ..
 tag
 ..
 '>'
)

	end

	table.insert
(
parts
,
 truncate
(
text
:
sub
(
pos
 or
 1
)))

	return
 table.concat
(
parts
)

end


function
 p
.
_check
(
args
,
 pargs
)

	if
 type
(
args
)
 ~=
 "table"
 or
 type
(
pargs
)
 ~=
 "table"
 then

		-- TODO: error handling

		return

	end


	-- create the list of known args, regular expressions, and the return string

	local
 knownargs
 =
 {}

	local
 regexps
 =
 {}

	for
 k
,
 v
 in
 pairs
(
args
)
 do

		if
 type
(
k
)
 ==
 'number'
 then

			v
 =
 trim
(
v
)

			knownargs
[
v
]
 =
 1

		elseif
 k
:
find
(
'^regexp[1-9][0-9]*$'
)
 then

			table.insert
(
regexps
,
 '^'
 ..
 v
 ..
 '$'
)

		end

	end


	-- loop over the parent args, and make sure they are on the list

	local
 ignoreblank
 =
 isnotempty
(
args
[
'ignoreblank'
])

	local
 showblankpos
 =
 isnotempty
(
args
[
'showblankpositional'
])

	local
 values
 =
 {}

	for
 k
,
 v
 in
 pairs
(
pargs
)
 do

		if
 type
(
k
)
 ==
 'string'
 and
 knownargs
[
k
]
 ==
 nil
 then

			local
 knownflag
 =
 false

			for
 _
,
 regexp
 in
 ipairs
(
regexps
)
 do

				if
 mw
.
ustring
.
match
(
k
,
 regexp
)
 then

					knownflag
 =
 true

					break

				end

			end

			if
 not
 knownflag
 and
 (
 not
 ignoreblank
 or
 isnotempty
(
v
)
 )
  then

				table.insert
(
values
,
 clean
(
k
))

			end

		elseif
 type
(
k
)
 ==
 'number'
 and
 knownargs
[
tostring
(
k
)]
 ==
 nil
 then

			local
 knownflag
 =
 false

			for
 _
,
 regexp
 in
 ipairs
(
regexps
)
 do

				if
 mw
.
ustring
.
match
(
tostring
(
k
),
 regexp
)
 then

					knownflag
 =
 true

					break

				end

			end

			if
 not
 knownflag
 and
 (
 showblankpos
 or
 isnotempty
(
v
)
 )
 then

				table.insert
(
values
,
 k
 ..
 ' = '
 ..
 clean
(
v
))

			end

		end

	end


	-- add results to the output tables

	local
 res
 =
 {}

	if
 #
values
 >
 0
 then

		local
 unknown_text
 =
 args
[
'unknown'
]
 or
 'Found _VALUE_, '


		if
 mw
.
getCurrentFrame
():
preprocess
(
 "{{REVISIONID}}"
 )
 ==
 ""
 then

			local
 preview_text
 =
 args
[
'preview'
]

			if
 isnotempty
(
preview_text
)
 then

				preview_text
 =
 require
(
'?????:If preview'
).
_warning
({
preview_text
})

			elseif
 preview
 ==
 nil
 then

				preview_text
 =
 unknown_text

			end

			unknown_text
 =
 preview_text

		end

		for
 _
,
 v
 in
 pairs
(
values
)
 do

			-- Fix odd bug for | = which gets stripped to the empty string and

			-- breaks category links

			if
 v
 ==
 ''
 then
 v
 =
 ' '
 end


			-- avoid error with v = 'example%2' ("invalid capture index")

			local
 r
 =
 unknown_text
:
gsub
(
'_VALUE_'
,
 {
_VALUE_
 =
 v
})

			table.insert
(
res
,
 r
)

		end

	end


	return
 table.concat
(
res
)

end


function
 p
.
check
(
frame
)

	local
 args
 =
 frame
.
args

	local
 pargs
 =
 frame
:
getParent
().
args

	return
 p
.
_check
(
args
,
 pargs
)

end


return
 p