龟头有点痒擦什么药| 等闲变却故人心却道故人心易变什么意思| 血糖高有什么表现| 什么叫同型半胱氨酸| 舌苔发黄是什么原因引起的| 90年是什么年| 七个月宝宝可以吃什么辅食| 五个手指头分别叫什么| 禾加一笔是什么字| 红绿色盲是什么遗传| 梦见被猪咬是什么意思| 黑加京念什么| 薄荷叶有什么功效| p是什么面料| 8月5日什么星座| 喝什么茶养胃| 毛囊炎是什么样子| 精神是什么意思| 梦见吃核桃是什么意思| 正襟危坐什么意思| 眉毛稀少是什么原因| 鱼生是什么鱼| 蜜蜡什么样的成色最好| 盆腔炎是什么病| 泡茶用什么杯子最好| 铅中毒什么症状| 为什么睾丸一边大一边小| 嗓子干痒吃什么药效果好| 什么叫越位| 小指麻木是什么原因| 一行是什么意思| 乌龟最喜欢吃什么| 下巴下面长痣代表什么| 猫咪感冒吃什么药| 四联用药是些什么药| 种草莓是什么意思| 甲醇和乙醇有什么区别| 舌面上有裂纹是什么病| 豚是什么动物| 洁癖什么意思| 梨花是什么生肖| 蚕蛹过敏什么办法最快| trust什么意思| 煜这个字读什么| 滴蜡是什么意思| 鹦鹉能吃什么水果| 脚为什么会发麻| 牙掉了是什么预兆| 垂涎欲滴意思是什么| fox是什么意思| 孕妇吃葡萄对胎儿有什么好处| 12年义务教育什么时候实行| 苏打水为什么是甜的| 凤凰单枞是什么茶| 无舌苔是什么原因| 一什么地| 糖尿病人吃什么水果好| 视力模糊什么原因| 心管是什么部位| pfs是什么意思| 什么是石斛| 江郎才尽是什么意思| 商纣王叫什么名字| 胃酸是什么原因造成的| 血浓稠是什么原因引起的| 金牛座是什么星象| 血压高会有什么症状| 什么字五行属水| 指甲上的月牙代表什么| 李子吃了有什么好处| 消化不良吃什么药最好| 炸酥肉用什么肉最好吃| 悲欢离合是什么意思| 检查阑尾炎挂什么科| tfboys什么意思| 失眠吃什么中成药| 萌字五行属什么| 吃什么补肾最快最好| 什么症状需要做膀胱镜| 五十路是什么意思| 尿黄起泡是什么原因| 反射弧是什么| 看破红尘什么意思| 奶黄包的馅是什么做的| 子宫附件是什么意思| 心脏房颤吃什么药好| 锁钥是什么意思| 血糖高吃什么降得快| 套是什么意思| 武夷岩茶属于什么茶| 存在感是什么意思| 肺部肿瘤3cm什么期| 宫颈纳囊是什么病| 口腔溃疡吃什么食物| kkb什么意思| 火烧是什么| 吃虾不能吃什么| 抑郁症是什么原因造成| 黄皮什么时候成熟| 月球上有什么| 筋膜炎用什么药好| 鸡屁股叫什么| 农历六月十一是什么星座| 笔记本电脑什么牌子好| 宫缩是什么原因引起的| 自闭症是什么| 专情是什么意思| 甘油脂肪酸酯是什么| 淋巴结肿大看什么科室最好| 举足轻重是什么生肖| 两个吉念什么| 双鱼座是什么象星座| 胎膜早破是什么原因引起的| 次方是什么意思| 喝杨梅酒对身体有什么好处| haccp是什么认证| 钢琴8级什么水平| j是什么| emoji什么意思| 白左什么意思| 拉新是什么意思| eob是什么意思| 过敏性紫癜看什么科| 7.2什么星座| 牙齿松动吃什么药最好| 痛风吃什么| 什么饮料健康| 经常手麻是什么原因引起的| 士大夫什么意思| 肚脐下面疼是什么原因| 雅五行属什么| 950是什么金| 小孩腰疼是什么原因引起的| 龙涎香是什么| 结肠多发憩室是什么意思| 甲亢是什么原因造成的| 两侧肋骨疼是什么原因| 尿葡萄糖是什么意思| 尤加一笔是什么字| 牵牛花为什么叫牵牛花| 为什么腰痛| 虎头蜂泡酒有什么功效| 死库水什么意思| 梗阻是什么意思| 六月十六什么星座| 夏至吃什么传统食物| 女生做彩超是检查什么| 暇步士属于什么档次| 三月有什么节日| 排卵期有什么感觉| 61岁属什么| 什么的身子| 生化全套主要检查什么| 猪油用什么容器装好| 拍肺部片子挂什么科| 哺乳期什么东西不能吃| 载脂蛋白是什么意思| 什么是余额宝| 超负荷是什么意思| 从政是什么意思| 开口腔诊所需要什么条件| 大便不调是什么意思| 左耳烫代表什么预兆| 血糖用什么字母表示| dan什么意思| 什么清肠茶好| 10月9日什么星座| 梦见考试是什么预兆| 属牛配什么属相最好| 月经期肚子疼是什么原因| 省公安厅厅长什么级别| 二氧化碳结合力是什么| 255是什么意思| 额头长痘什么原因| 悸是什么意思| 天热吃什么| 手掌心出汗是什么原因| 鱼字五行属什么| 三心二意是指什么生肖| pg是什么激素| 分期是什么意思| 胆红素高是什么原因| 赤脚走路有什么好处| 32周孕检检查什么项目| 一物降一物指什么生肖| 更年期吃什么调理| 印字五行属什么| 蓝莓什么时候吃最好| 经常脚抽筋是什么原因| 女性更年期吃什么药| 看牙齿挂什么科| 前什么后仰| 胃胀胃痛吃什么药| 三点水加个真念什么| 发烧39度吃什么药| 10岁属什么| 小孩睡觉说梦话是什么原因| 诺如病毒吃什么药最有效| 维生素b12治什么病| fpa是什么意思| 女真人是什么民族| 12月14号是什么星座| 拉不出来屎是什么原因| 70年出生属什么生肖| 04年出生属什么| 淋巴细胞百分比高是什么意思| 电气火灾用什么灭火器| 手心发烫是什么原因| 吃什么会自然流产| 橘子什么季节成熟| 不发烧流鼻涕打喷嚏吃什么药| 朊病毒是什么| 火车头是什么意思| 农历六月十四是什么日子| 余事勿取 什么意思| 为什么有胎记| 鸟字旁的字大多和什么有关| 缺德是什么意思| kipper什么意思| 胃火旺吃什么中成药| 鸽子咕咕叫是什么意思| 少腹是什么意思| 女人银屑病一般都长什么地方| 肝火旺吃什么| 1月17号什么星座| 石头五行属什么| 翳什么意思| 子宫内膜粘连有什么症状| 走路脚后跟疼是什么原因| 腹主动脉钙化是什么意思| 射进去什么感觉| 什么时候做人流才是最佳时间| 天蓝色配什么颜色| 41年属什么生肖| 有什么花| 京东什么时候优惠最大| 腋窝出汗是什么原因| 脑膜瘤钙化意味着什么| 转氨酶高吃什么药最好| 12月16是什么星座| 制动是什么| 什么是格局| 稀奶油是什么奶油| 甜蜜素是什么| 泌尿系统感染挂什么科| 低密度脂蛋白胆固醇偏低是什么意思| 男人爱出汗是什么原因| 女人大腿粗代表什么| 出cos是什么意思| 腺肌症是什么症状| 肉松是什么做的| 唵嘛呢叭咪吽是什么意思| 吃阿胶对女人有什么好处| 梅雨季节什么时候结束| 大米里放什么不生虫子| 744是什么意思| 肾阴虚吃什么食物最好| 倭瓜是什么意思| 婴儿吃不饱有什么危害| 阳痿是什么意思| 什么味道| 梦见月经血是什么预兆| 白介素8升高说明什么| 嘉靖为什么不杀严嵩| 百度Перейти до вм?сту

做胃镜挂什么科

Матер?ал з В?к?пед?? — в?льно? енциклопед??.
{{i}} Документац?я модуля[перегляд] [редагувати] [?стор?я] [очистити кеш]
百度 要坚持教育公益性,通过分类规范管理,发展素质教育,让培训机构成为学校教育的有益补充。

Модуль для реал?зац?? шаблону {{Картка}}. Документац?я з використання модуля розташована на стор?нц? в?дпов?дного шаблону.

Щоб використати модуль напряму зам?сть виклику через шаблон Картка, потр?бно зробити виклик через функц?ю infoboxTemplate. Наприклад, {{#invoke:Картка|infoboxTemplate.

Категор?? спостереження

--
-- Модуль для реал?зац?? шаблону {{Картка}}
--

local p = {}
local args = {}
local argsAliases = {}
local origArgs = {}
local root
local yesno = require("Модуль:Yesno")
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][??][Яя]%s*:[^]]*]]'
local has_rows = false
local has_error = false
local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Шаблон:Картка|Картка]]}}</kbd>: '
local lists = {
	plainlist_t = {
		patterns = {
			'^plainlist$',
			'%splainlist$',
			'^plainlist%s',
			'%splainlist%s'
		},
		found = false,
		styles = 'Plainlist/styles.css'
	},
	hlist_t = {
		patterns = {
			'^hlist$',
			'%shlist$',
			'^hlist%s',
			'%shlist%s'
		},
		found = false,
		styles = 'Hlist/styles.css'
	}
}

local function has_list_class(args_to_check)
	for _, list in pairs(lists) do
		if not list.found then
			for _, arg in pairs(args_to_check) do
				for _, pattern in ipairs(list.patterns) do
					if mw.ustring.find(arg or '', pattern) then
						list.found = true
						break
					end
				end
				if list.found then break end
			end
		end
	end
end

local function fixChildBoxes(sval, tt)
	local function notempty( s ) return s and s:match( '%S' ) end
	
	if notempty(sval) then
		local marker = '<span class=special_infobox_marker>'
		local s = sval
		-- start moving templatestyles and categories inside of table rows
		local slast = ''
		while slast ~= s do
			slast = s
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][??][Яя]%s*:[^]]*%]%])', '%2%1')
			s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
		end
		-- end moving templatestyles and categories inside of table rows
		s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
		s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
		if s:match(marker) then
			s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
			s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
			s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
			s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
		end
		if s:match(marker) then
			local subcells = mw.text.split(s, marker)
			s = ''
			for k = 1, #subcells do
				if k == 1 then
					s = s .. subcells[k] .. '</' .. tt .. '></tr>'
				elseif k == #subcells then
					local rowstyle = ' style="display:none"'
					if notempty(subcells[k]) then rowstyle = ''	end
					s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
						subcells[k]
				elseif notempty(subcells[k]) then
					if (k % 2) == 0 then
						s = s .. subcells[k]
					else
						s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
							subcells[k] .. '</' .. tt .. '></tr>'
					end
				end
			end
		end
		-- the next two lines add a newline at the end of lists for the PHP parser
		-- [[Special:Diff/849054481]]
		-- remove when [[:phab:T191516]] is fixed or OBE
		s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
		s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
		s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
		return s
	else
		return sval
	end
end

-- Cleans empty tables
local function cleanInfobox()
	root = tostring(root)
	if has_rows == false then
		root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
	end
end

-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2, t3)

	local vals = {}
	for k, v in pairs(t1) do
		vals[v] = true
	end
	for k, v in pairs(t2) do
		vals[v] = true
	end
	if t3 then
		for k, v in pairs(t3) do
			vals[v] = true
		end
	end
	local ret = {}
	for k, v in pairs(vals) do
		table.insert(ret, k)
	end
	return ret
end

local function processParamsFromArg (paramList, paramType, is_global)
	local paramName = ('wikidata' == paramType) and 'параметри_в?к?даних' or 'параметри_зображення_картки'
	
	local paramsArgs = {}
	if paramList and paramList ~= '' then
--		local allowedParams = getAllowedList(paramType)
		
		for item in paramList:gmatch("(%S+%s*%S+);%s*") do
			local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)")
--			for k, v in ipairs(allowedParams) do								--чи тут потр?бна взагал? перев?рка на п?дтримуван? параметри?
--				if v == param then
					paramsArgs[param] = arg
--				end
--			end	
		end
		
		if is_global then
			args[paramName] = paramsArgs
			return ''
		end
	end

	if args[paramName] and args[paramName] ~= '' then
		for param, arg in pairs(args[paramName]) do
			if not paramsArgs[param] or paramsArgs[param] == '' then
				paramsArgs[param] = arg
			end	
		end	
	end	
	
	return is_global and '' or paramsArgs
end

local function processWikidata(text, element, wdParams)
	
	if element then
		
		if args['назва_модуля_в?к?даних'] and args['назва_модуля_в?к?даних']:lower() == 'wikidataib' then
			local wikidata = require("Модуль:WikidataIB")
			
			local wdArgs = processParamsFromArg(wdParams, 'wikidata')
				
			wdArgs[1] = element:upper()
			wdArgs[2] = text
			
			local temptext
			
			if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then
				local wdFrame = mw.getCurrentFrame()
				if wdArgs['function'] == 'getCoords' then
					wdArgs[1] = text
					wdArgs[2] = ''
				end	
				wdFrame.args = wdArgs
				temptext = wikidata[wdArgs['function']](wdFrame)
			else
				temptext = wikidata._getValue(wdArgs)
			end	
			
			if temptext and wdArgs.ref == "yes" then
				local wd = require("Модуль:wd")
				
				temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element})
			end	
			
			text = temptext
			
		elseif args['назва_модуля_в?к?даних'] and args['назва_модуля_в?к?даних']:lower() == 'wikidata1' then
			local wdFrame = mw.getCurrentFrame()
			local wikidata = require("Модуль:Wikidata1")
			wdFrame.args = {}
			local wdfunction
			
			if origArgs['qid'] and origArgs['qid'] ~= '' then
				wdFrame.args[1] = origArgs['qid']
				wdFrame.args[2] = element:upper()
				wdFrame.args[3] = text
				wdfunction = 'getValueFromID'
			else	
				wdFrame.args[1] = element:upper()
				wdFrame.args[2] = text
				wdfunction = 'getValue'
			end	
			
			text = wikidata[wdfunction](wdFrame)
		else
			local wdFrame = mw.getCurrentFrame()
			local wikidata = require("Модуль:Wikidata")
		
			wdFrame.args = {
				property = element,
				value = text,
				from = origArgs[ 'from' ] or ''
			}
		
			text = wikidata.formatProperty(wdFrame)
		end	
	end
	
	return text
end

-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
	local nums = {}
	for k, v in pairs(args) do
		local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
		if num then table.insert(nums, tonumber(num)) end
	end
	table.sort(nums)
	return nums
end

-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
	
	if rowArgs.header and rowArgs.header ~= '_BLANK_' then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовк?в'] })
		
		root
			:tag('tr')
				:addClass(rowArgs.rowclass)
				:cssText(rowArgs.rowstyle)
				:tag('th')
					:attr('colspan', '2')
					:addClass('infobox-header')
					:addClass(rowArgs.class)
					:addClass(args['клас_заголовк?в'])
					-- @deprecated next; target .infobox-<name> .infobox-header
					:cssText(args['стиль_заголовк?в'])
					:cssText(rowArgs.rowcellstyle)
					:wikitext(fixChildBoxes(rowArgs.header, 'th'))
		if rowArgs.data then
			root:wikitext(
				'[[Категор?я:Стор?нки, що використовують шаблони картка з про?гнорованими ком?рками параметра текст]]'
			)
		end
	elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):gsub(category_in_empty_row_pattern_uk, ''):match('^%S') then
		has_rows = true
		has_list_class({ rowArgs.rowclass, rowArgs.class })
		
		local row = root:tag('tr')
		row:addClass(rowArgs.rowclass)
		row:cssText(rowArgs.rowstyle)
		if rowArgs.label then
			row
				:tag('th')
					:attr('scope', 'row')
					:addClass('infobox-label')
					-- @deprecated next; target .infobox-<name> .infobox-label
					:cssText(args['стиль_м?ток'])
					:cssText(rowArgs.rowcellstyle)
					:wikitext(rowArgs.label)
					:done()
		end
		
		if rowArgs.data == '----' then											--Так як при переход? на модуль перестали працювати чотири деф?си
			rowArgs.data = '<hr/>'												--тому робимо ?хню зам?ну на '<hr/>'
		end	

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', not rowArgs.label and '2' or nil)
			:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
			:addClass(rowArgs.class)
			-- @deprecated next; target .infobox-<name> .infobox(-full)-data
			:cssText(rowArgs.datastyle)
			:cssText(rowArgs.rowcellstyle)
			:wikitext(fixChildBoxes(rowArgs.data, 'td'))
	else
		table.insert(empty_row_categories, rowArgs.data or '')
	end
end

local function renderError()
	if not has_error then return end
	
	local errorText = error_message .. '</span><br/>'
	
	root
		:tag('caption')
			:addClass('infobox-title')
			:wikitext(errorText)
end	

local function renderTitle()
	if not args['назва'] then return end

	has_rows = true
	has_list_class({args['клас_назви']})
	
	root
		:tag('caption')
			:addClass('infobox-title')
			:addClass(args['клас_назви'])
			-- @deprecated next; target .infobox-<name> .infobox-title
			:cssText(args['стиль_назви'])
			:wikitext(args['назва'])
	
end

local function renderAboveRow()
	if not args['угор?'] then return end

	has_rows = true
	has_list_class({ args['клас_угор?'] })
	
	root
		:tag('tr')
			:tag('th')
				:attr('colspan', '2')
				:addClass('infobox-above')
				:addClass(args['клас_угор?'])
				-- @deprecated next; target .infobox-<name> .infobox-above
				:cssText(args['стиль_угор?'])
				:wikitext(fixChildBoxes(args['угор?'],'th'))
end

local function renderAboveRow2()
	if not args['угор?2'] then return end

	has_rows = true
	has_list_class({ args['клас_угор?2'] })
	
	root
		:tag('tr')
			:tag('th')
				:attr('colspan', '2')
				:addClass('infobox-above')
				:addClass(args['клас_угор?2'])
				-- @deprecated next; target .infobox-<name> .infobox-above
				:cssText(args['стиль_угор?2'])
				:wikitext(fixChildBoxes(args['угор?2'],'th'))
end

local function renderBelowRow()
	if not args['внизу'] then return end

	has_rows = true
	has_list_class({ args['клас_внизу'] })
	
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-below')
				:addClass(args['клас_внизу'])
				-- @deprecated next; target .infobox-<name> .infobox-below
				:cssText(args['стиль_внизу'])
				:wikitext(fixChildBoxes(args['внизу'],'td'))
end

local function renderBelowRow2()
	if not args['внизу2'] then return end

	has_rows = true
	has_list_class({ args['клас_внизу2'] })
	
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-below')
				:addClass(args['клас_внизу2'])
				-- @deprecated next; target .infobox-<name> .infobox-below
				:cssText(args['стиль_внизу2'])
				:wikitext(fixChildBoxes(args['внизу2'],'td'))
end

local function addSubheaderRow(subheaderArgs)
	if subheaderArgs.data and
		subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):gsub(category_in_empty_row_pattern_uk, ''):match('^%S') then
		has_rows = true
		has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
		
		local row = root:tag('tr')
		row:addClass(subheaderArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-subheader')
			:addClass(subheaderArgs.class)
			:cssText(subheaderArgs.datastyle)
			:cssText(subheaderArgs.rowcellstyle)
			:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
	else
		table.insert(empty_row_categories, subheaderArgs.data or '')
	end
end

local function renderSubheaders()
	if args['п?дзаголовок'] then
		args['п?дзаголовок1'] = args['п?дзаголовок']
	end
	if args['клас_рядка_п?дзаголовок'] then
		args['клас_рядка_п?дзаголовок1'] = args['клас_рядка_п?дзаголовок'] 
	end
	local subheadernums = getArgNums('п?дзаголовок')
	for k, num in ipairs(subheadernums) do
		addSubheaderRow({
			data = args['п?дзаголовок' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> .infobox-subheader
			datastyle = args['стиль_п?дзаголовок'] or args['стиль_п?дзаголовок?в'],
			rowcellstyle = args['стиль_п?дзаголовок' .. tostring(num)],
			class = args['клас_п?дзаголовок?в'],
			rowclass = args['клас_рядка_п?дзаголовок' .. tostring(num)]
		})
	end
end

local function addImageRow(imageArgs)

	if imageArgs.data and
		imageArgs.data:gsub(category_in_empty_row_pattern, ''):gsub(category_in_empty_row_pattern_uk, ''):match('^%S') then

		has_rows = true
		has_list_class({ imageArgs.rowclass, imageArgs.class })
		
		local row = root:tag('tr')
		row:addClass(imageArgs.rowclass)

		local dataCell = row:tag('td')
		dataCell
			:attr('colspan', '2')
			:addClass('infobox-image')
			:addClass(imageArgs.class)
			:cssText(imageArgs.datastyle)
			:wikitext(fixChildBoxes(imageArgs.data, 'td'))
	else
		table.insert(empty_row_categories, imageArgs.data or '')
	end
end

local function renderImages()
	if args['зображення'] then
		args['зображення1'] = args['зображення']
	end
	if args['п?дпис'] then
		args['п?дпис1'] = args['п?дпис']
	end
	local imagenums = getArgNums('зображення')
	for k, num in ipairs(imagenums) do
		local caption = args['п?дпис' .. tostring(num)]
		local data = mw.html.create():wikitext(args['зображення' .. tostring(num)])
		if caption then
			data
				:tag('div')
					:addClass('infobox-caption')
					-- @deprecated next; target .infobox-<name> .infobox-caption
					:cssText(args['стиль_п?дпису'])
					:wikitext(caption)
		end
		addImageRow({
			data = tostring(data),
			-- @deprecated next; target .infobox-<name> .infobox-image
			datastyle = args['стиль_зображення'],
			class = args['клас_зображення'],
			rowclass = args['клас_рядка_зображення' .. tostring(num)]
		})
	end
end

-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
	if not args['автозаголовки'] then return end
	
	local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('в?к?дан?'))
	table.sort(rownums)
	local lastheader
	for k, num in ipairs(rownums) do
		if args['заголовок' .. tostring(num)] then
			if lastheader then
				args['заголовок' .. tostring(lastheader)] = nil
			end
			lastheader = num
		elseif (args['текст' .. tostring(num)] and
			args['текст' .. tostring(num)]:gsub(
				category_in_empty_row_pattern, ''
			):gsub(
				category_in_empty_row_pattern_uk, ''
			):match('^%S')) or (args['в?к?дан?' .. tostring(num)]
		and args['в?к?дан?' .. tostring(num)]:gsub(
				category_in_empty_row_pattern, ''
			):gsub(
				category_in_empty_row_pattern_uk, ''
			):match('^%S'))
		then
			local data = processWikidata(args['текст' .. tostring(num)], args['в?к?дан?' .. tostring(num)], args['параметри_рядка_в?к?даних' .. tostring(num)])
			if data and data:gsub(category_in_empty_row_pattern, ''):gsub(category_in_empty_row_pattern_uk, ''):match('%S') then
				lastheader = nil
			end
		end
	end
	if lastheader then
		args['заголовок' .. tostring(lastheader)] = nil
	end
end

-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()

	local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('в?к?дан?'))
	table.sort(rownums)
	for k, num in ipairs(rownums) do
		addRow({
			header = args['заголовок' .. tostring(num)],
			label = args['м?тка' .. tostring(num)],
			data = processWikidata(args['текст' .. tostring(num)], args['в?к?дан?' .. tostring(num)], args['параметри_рядка_в?к?даних' .. tostring(num)]),
			datastyle = args['стиль_тексту'],
			class = args['клас' .. tostring(num)],
			rowclass = args['клас_рядка' .. tostring(num)],
			-- @deprecated next; target .infobox-<name> rowclass
			rowstyle = args['стиль_рядка' .. tostring(num)],
			rowcellstyle = args['стиль_ком?рки_рядка' .. tostring(num)]
		})
	end
end

local function renderNavBar()
	if not args['?м\'я'] then return end

	has_rows = true
	root
		:tag('tr')
			:tag('td')
				:attr('colspan', '2')
				:addClass('infobox-navbar')
				:wikitext(require('Модуль:Navbar')._navbar{
					args['?м\'я'],
					mini = 1,
				})
end

local function renderItalicTitle()
	local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
	if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then
		root:wikitext(require('Модуль:Заголовок курсивом')._main({}))
	end
end

-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
	for _, s in ipairs(empty_row_categories) do
		root:wikitext(s)
	end
end

-- Render tracking categories. args.nocat == turns off tracking categories.
local function renderTrackingCategories()
	if yesno(args.nocat) then return end
	if yesno(args['вбудовування']) then
		if args['назва'] then
			root:wikitext(
				'[[Категор?я:Стор?нки, що використовують шаблони вбудовано? картки з параметром назва]]'
			)
		end
	elseif #(getArgNums('текст')) == 0 and #(getArgNums('в?к?дан?')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
		root:wikitext('[[Категор?я:Статт?, що використовують шаблони картка без рядк?в параметра текст]]')
	end
	if args['?м\'я'] then
		root:wikitext('[[Категор?я:Стор?нки, що використовують шаблони картка з параметром ?м\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]')
	end	
	if has_error then
		root:wikitext('[[Категор?я:Стор?нки, що використовують шаблони картка з двома однаковими параметрами]]')
	end
end

--[=[
Loads the templatestyles for the infobox.

TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.

]=]
local function loadTemplateStyles()
	local frame = mw.getCurrentFrame()
	
	local hlist_templatestyles = ''
	if lists.hlist_t.found then
		hlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.hlist_t.styles }
		}
	end
	
	local plainlist_templatestyles = ''
	if lists.plainlist_t.found then
		plainlist_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = lists.plainlist_t.styles }
		}
	end
	
	-- See function description
	local base_templatestyles = frame:extensionTag{
		name = 'templatestyles', args = { src = 'Модуль:Картка/styles.css' }
	}

	local templatestyles = ''
	if args['стил?_шаблону'] then
		templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['стил?_шаблону'] }
		}
	end
	
	local child_templatestyles = ''
	if args['стил?_шаблону вбудовування'] then
		child_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['стил?_шаблону вбудовування'] }
		}
	end
	
	local grandchild_templatestyles = ''
	if args['стил?_шаблону вторинного_вбудовування'] then
		grandchild_templatestyles = frame:extensionTag{
			name = 'templatestyles', args = { src = args['стил?_шаблону вторинного_вбудовування'] }
		}
	end
	
	return table.concat({
		-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
		-- this ordering is not a guarantee because the rows of interest invoking
		-- each class may not be on a specific page
		hlist_templatestyles,
		plainlist_templatestyles,
		base_templatestyles,
		templatestyles,
		child_templatestyles,
		grandchild_templatestyles
	})
end

-- common functions between the child and non child cases
local function structure_infobox_common()
	renderSubheaders()
	renderImages()
	preprocessRows()
	renderRows()
	renderBelowRow()
	renderBelowRow2()
	--	renderNavBar() (тимчасово поки закоментував)
	renderItalicTitle()
	renderEmptyRowCategories()
	renderTrackingCategories()
	cleanInfobox()
end

-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
	if not yesno(args['вбудовування']) then
		root = mw.html.create('table')
		
		local infoboxWidth = ''
		if args['ширина-картки'] then
			infoboxWidth = "width:" .. args['ширина-картки']
		end
		
		root
			:addClass(yesno(args['п?дкартка']) and 'infobox-subbox' or 'infobox')
			:addClass(args['клас_т?ла'])
			-- @deprecated next; target .infobox-<name>
			:cssText(args['стиль_т?ла'])
			-- infobox width from a parameter
			:cssText(infoboxWidth)
		
		has_list_class({ args['клас_т?ла'] })

		renderError()
		renderTitle()
		renderAboveRow()
		renderAboveRow2()
	else
		root = mw.html.create()

		local errorText = has_error and (error_message .. '</span><br/>') or ''

		root
			:wikitext(errorText)
			:wikitext(args['назва'])
	end
	structure_infobox_common()
	
	return loadTemplateStyles() .. root
end

-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
	if origArgs[argName] and origArgs[argName] ~= '' then
		args[argName] = origArgs[argName]
	end
end

local function translateArg(aliasArgName,localArgName)
	-- Функц?я дода? п?дтримку ал?ас?в параметр?в (наприклад, ?ншою мовою)
	
	-- Дода?м ал?ас параметра в таблицю ал?ас?в
	-- Для одного параметра може бути к?лька ал?ас?в
	-- Нумерован? параметри(текст1 ? т.д.) заносяться без номера
	if not 	argsAliases[localArgName] then
		argsAliases[localArgName] = {}
	end
	table.insert(argsAliases[localArgName], aliasArgName)
	
	-- Значення ал?ас?в додаются в таблицю аргумент?в
    if origArgs[localArgName] and origArgs[localArgName] ~= '' then
    	-- параметр вже заданий на локальн?й мов?
    	-- якщо ал?ас заданий ? не пустий
    	if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then
    		local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|дов?дка]])'
    		error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain()
    		has_error = true
    	end	
    else
    	-- якщо ал?ас заданий ? не пустий
	    if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then
	        origArgs[localArgName] = origArgs[aliasArgName]
	    end
    end
end

-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
	if type(prefixTable) ~= 'table' then
		error("Виявлено нетабличне значення для таблиц? преф?кс?в", 2)
	end
	if type(step) ~= 'number' then
		error("Виявлено нед?йсне значення параметра кроку", 2)
	end

	-- Get arguments without a number suffix, and check for bad input.
	for i,v in ipairs(prefixTable) do
		if type(v) ~= 'table' or type(v.prefix) ~= "string" or 
			(v.prefix_trans and type(v.prefix_trans) ~= "string") or
			(v.depend and type(v.depend) ~= 'table') or
			(v.depend_trans and type(v.depend_trans) ~= 'table') then
			error('Виявлено нед?йсне значення в таблиц? преф?кс?в preprocessArgs', 2)
		end
		
		-- якщо потр?бен переклад параметр?в, то виклика?ться в?дпов?дна функц?я
		--якщо н?, то в?дбува?ться обрабка зм?нно?
		if v.prefix_trans then
			translateArg(v.prefix_trans,v.prefix)
		else
			preprocessSingleArg(v.prefix)
		end	
		-- Only parse the depend parameter if the prefix parameter is present
		-- and not blank.
		if args[v.prefix] and v.depend then
			for j, dependValue in ipairs(v.depend) do
				if type(dependValue) ~= 'string' then
					error('Виявлено нед?йсне значення ?обов\'язкового? параметра в preprocessArgs')
				end
					preprocessSingleArg(dependValue)
			end
		--якщо потр?бен переклад обов'язкових параметр?в, то виклика?ться в?дпов?дна функц?я
		elseif origArgs[v.prefix] and v.depend_trans then
			for j, dependValue in ipairs(v.depend) do
				for k, depend_transValue in ipairs(v.depend_trans) do
					if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then
							error('Виявлено нед?йсне значення ?обов\'язкового? параметра в preprocessArgs')
					end
					translateArg(depend_transValue,dependValue)
				end
			end
		end
	end

	-- Get arguments with number suffixes.
	local a = 1 -- Counter variable.
	local moreArgumentsExist = true
	while moreArgumentsExist == true do
		moreArgumentsExist = false
		for i = a, a + step - 1 do
			for j,v in ipairs(prefixTable) do
				local prefixArgName = v.prefix .. tostring(i)
				-- якщо потр?бен переклад параметр?в, то виклика?ться в?дпов?дна функц?я
				--якщо н?, то в?дбува?ться обрабка зм?нно?
				if v.prefix_trans then
					local prefix_transArgName = v.prefix_trans .. tostring(i)
					if origArgs[prefix_transArgName] then
						moreArgumentsExist = true
						translateArg(prefix_transArgName,prefixArgName)
					end	
				else	
					if origArgs[prefixArgName] then
						-- Do another loop if any arguments are found, even blank ones.
						moreArgumentsExist = true
						preprocessSingleArg(prefixArgName)
					end
				end	
				-- Process the depend table if the prefix argument is present
				-- and not blank, or we are processing "prefix1" and "prefix" is
				-- present and not blank, and if the depend table is present.
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
					for j,dependValue in ipairs(v.depend) do
						local dependArgName = dependValue .. tostring(i)
						preprocessSingleArg(dependArgName)
					end
				--якщо потр?бен переклад обов'язкових параметр?в, то виклика?ться в?дпов?дна функц?я	
				elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then
					for j,dependValue in ipairs(v.depend) do
						for k,depend_transValue in ipairs(v.depend_trans)  do
							local dependArgName = dependValue .. tostring(i)
							local depend_transArgName = depend_transValue .. tostring(i)
							translateArg(depend_transArgName, dependArgName)
						end	
					end
				end	
			end
		end
		a = a + step
	end
end

-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()

	translateArg('autoheaders','автозаголовки')
	translateArg('child', 'вбудовування')
	translateArg('infobox-width', 'ширина-картки')
	translateArg('bodyclass', 'клас_т?ла')
	translateArg('subbox', 'п?дкартка')
	translateArg('bodystyle', 'стиль_т?ла')
	translateArg('title', 'назва')
	translateArg('titleclass', 'клас_назви')
	translateArg('titlestyle', 'стиль_назви')
	translateArg('above', 'угор?')
	translateArg('aboveclass', 'клас_угор?')
	translateArg('abovestyle', 'стиль_угор?')
	translateArg('above2', 'угор?2')
	translateArg('aboveclass2', 'клас_угор?2')
	translateArg('abovestyle2', 'стиль_угор?2')
	preprocessArgs({
		{prefix_trans = 'subheader', prefix = 'п?дзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_п?дзаголовок', 'клас_рядка_п?дзаголовок'}}
	}, 10)
	translateArg('subheaderstyle', 'стиль_п?дзаголовк?в')
	translateArg('subheaderclass','клас_п?дзаголовк?в')
	preprocessArgs({
		{prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'п?дпис', 'клас_рядка_зображення'}}
	}, 10)
	translateArg('captionstyle', 'стиль_п?дпису')
	translateArg('imagestyle', 'стиль_зображення')
	translateArg('imageclass', 'клас_зображення')
	translateArg('wikidatamodulename','назва_модуля_в?к?даних')
	translateArg('parameterswikidata','параметри_в?к?даних')
	preprocessArgs({
		{prefix_trans = 'header', prefix = 'заголовок'},
		{prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'м?тка'}},
		{prefix_trans = 'wikidata', prefix = 'в?к?дан?', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'м?тка', 'параметри_рядка_в?к?даних' }},
		{prefix_trans = 'rowclass', prefix = 'клас_рядка'},
		{prefix_trans = 'rowstyle', prefix = 'стиль_рядка'},
		{prefix_trans = 'rowcellstyle', prefix = 'стиль_ком?рки_рядка'},
		{prefix_trans = 'class', prefix = 'клас'}
	}, 100)
	translateArg('headerclass', 'клас_заголовк?в')
	translateArg('headerstyle', 'стиль_заголовк?в')
	translateArg('labelstyle', 'стиль_м?ток')
	translateArg('datastyle', 'стиль_тексту')
	translateArg('below', 'внизу')
	translateArg('belowclass', 'клас_внизу')
	translateArg('belowstyle', 'стиль_внизу')
	translateArg('below2', 'внизу2')
	translateArg('belowclass2', 'клас_внизу2')
	translateArg('belowstyle2', 'стиль_внизу2')
	translateArg('name', '?м\'я')
	translateArg('decat', 'nocat')
	translateArg('templatestyles', 'стил?_шаблону')
	translateArg('child templatestyles', 'стил?_шаблону вбудовування')
	translateArg('grandchild templatestyles', 'стил?_шаблону вторинного_вбудовування')


	preprocessSingleArg('автозаголовки')
	preprocessSingleArg('вбудовування')
	preprocessSingleArg('ширина-картки')
	preprocessSingleArg('клас_т?ла')
	preprocessSingleArg('п?дкартка')
	preprocessSingleArg('стиль_т?ла')
	preprocessSingleArg('назва')
	preprocessSingleArg('клас_назви')
	preprocessSingleArg('стиль_назви')
	preprocessSingleArg('угор?')
	preprocessSingleArg('клас_угор?')
	preprocessSingleArg('стиль_угор?')
	preprocessSingleArg('угор?2')
	preprocessSingleArg('клас_угор?2')
	preprocessSingleArg('стиль_угор?2')
	preprocessArgs({
		{prefix = 'п?дзаголовок', depend = {'стиль_п?дзаголовок', 'клас_рядка_п?дзаголовок'}}
	}, 10)
	preprocessSingleArg('стиль_п?дзаголовк?в')
	preprocessSingleArg('клас_п?дзаголовк?в')
	preprocessArgs({
		{prefix = 'зображення', depend = {'п?дпис', 'клас_рядка_зображення'}}
	}, 10)
	preprocessSingleArg('стиль_п?дпису')
	preprocessSingleArg('стиль_зображення')
	preprocessSingleArg('клас_зображення')
	preprocessSingleArg('назва_модуля_в?к?даних')
	processParamsFromArg(origArgs['параметри_в?к?даних'], 'wikidata', true)
	preprocessArgs({
		{prefix = 'заголовок'},
		{prefix = 'текст', depend = {'м?тка'}},
		{prefix = 'в?к?дан?', depend = {'м?тка', 'параметри_рядка_в?к?даних'}},
		{prefix = 'клас_рядка'},
		{prefix = 'стиль_рядка'},
		{prefix = 'стиль_ком?рки_рядка'},
		{prefix = 'клас'}
	}, 100)
	preprocessSingleArg('клас_заголовк?в')
	preprocessSingleArg('стиль_заголовк?в')
	preprocessSingleArg('стиль_м?ток')
	preprocessSingleArg('стиль_тексту')
	preprocessSingleArg('внизу')
	preprocessSingleArg('клас_внизу')
	preprocessSingleArg('стиль_внизу')
	preprocessSingleArg('внизу2')
	preprocessSingleArg('клас_внизу2')
	preprocessSingleArg('стиль_внизу2')
	preprocessSingleArg('?м\'я')
	-- different behaviour for italics if blank or absent
	args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title']
	preprocessSingleArg('nocat')
	preprocessSingleArg('стил?_шаблону')
	preprocessSingleArg('стил?_шаблону вбудовування')
	preprocessSingleArg('стил?_шаблону вторинного_вбудовування')
end

-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
	if frame == mw.getCurrentFrame() then
		origArgs = frame:getParent().args
	else
		origArgs = frame
	end
	
	parseDataParameters()
	
	return _infobox()
end

-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
	origArgs = {}
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
	
	parseDataParameters()
	
	return _infobox()
end
return p
日加立念什么 鸭跖草用什么除草剂 流眼泪是什么原因 什么样属于轻度地包天 血小板低吃什么补的快
月泉读什么 免疫抑制剂是什么意思 头疼恶心是什么症状 什么咖啡好喝 什么是制动
农历9月11日是什么星座 hr什么意思 刘姥姥和贾府什么关系 胃疼吃什么药好的快 接待是什么意思
宝宝什么时候开始说话 宫颈癌吃什么好 口腔溃疡吃什么菜 房产证和土地证有什么区别 吃芒果有什么好处
未土是什么土zsyouku.com 卒中优先是什么意思imcecn.com 宝宝经常发烧是什么原因引起的hcv9jop2ns2r.cn 小孩子消化不好吃什么调理hcv7jop9ns1r.cn 西瓜对人体有什么好处hcv7jop6ns2r.cn
什么样的白带是怀孕了hlguo.com 什么叫全日制本科hcv9jop7ns4r.cn 提携是什么意思hcv9jop0ns3r.cn 百合什么时候收获hcv9jop3ns8r.cn 舌加氏念什么hcv8jop1ns5r.cn
什么是eb病毒hcv8jop9ns9r.cn 行运是什么意思hcv9jop3ns7r.cn 为什么女娲是一条蛇hcv8jop5ns8r.cn 龄字五行属什么hcv9jop5ns8r.cn 催乳素过高会有什么严重的后果hcv8jop0ns5r.cn
肾虚挂什么科naasee.com 牙齿痛是什么原因hcv8jop5ns2r.cn 2025是什么生肖年hcv7jop6ns0r.cn 需要是什么意思hcv8jop1ns3r.cn 重金属是什么hcv8jop8ns9r.cn
百度