قالب {{Flagg}} (عـلم عـام) هو قالب أعلام عام مع تنسيق الإخراج متغير. يستخدم لغة لوا بدلا من الآلية الموحدة، لأنها تتيح تجاوز اسم الصورة والهدف والارتباط، ويعمل القالب حتى لو كان قالب البلد غير موجود (دون تجاوز أي من حدود القوالب).

الوسائط تعديل

يتم إعطاء (بدائل القيم) لكل معلمة بين قوسين ().

التنسيق (المعلمة الأولى غير المسماه) تعديل

المعلمة الأولى هي رمز أبجدي تحدد شكل ظهور القالب. الحرف الأول يتعلق بالصورة، والثاني بالفاصل، والثالث باسم البلد. تأخذ المعلمة بعين الاعتبار تحسس حالة الأحرف.

اذا كان أي حرف من المعلمة مفقود أو بطابع لا يتطابق مع أحد الخيارات التالية, سيتم استخدام القيمه الافتراضية المحددة أدناه؛ على سبيل المثال اذا كانت المعلمة الأولى مساوية لـi، أو i**، أو izz ستقرأ كالتالي: isc.

الصورة تعديل

الصورة (الحرف الأول)

الحرف المعنى المعنى وصفه مثال
u unlinked دون وصلة صورة غير مرتبطة (إفتراضي) {{flagg|uxx|France}}
c country البلد وصلة الصورة لصفحة البلد/الكيان. {{flagg|cxx|France}}
p [f] prefix/suffix وصلة الصورة لاسم البلد مع البادئة. "و/أو" نص اللاحقة (افتراضي "علم ...")، يتعين باستخدام |pref= و|suff= (انظر ادناه). {{flagg|pxx|France}}
i image page صفحة الصورة وصلة الصورة إلى الملف الخاص بها تستخدم مع الصور غير الحرة. {{flagg|ixx|France}}
d data template بيانات القالب وصلة الصورة إلى قالب بيانات بلد المستخدم، للاستخدام في النقاش/التوثيق. تضيف الوحدة تلقائياً redirect=no اذا كانت الوصلة تحويلة. {{flagg|dxx|France}}
x علامة الشطب علامة × لا يتم عرض أي صورة. يستخدم صورة شفافة غير مرتبطة للحفاظ على المسافات في حالة إذا كان الحرف الثاني أي شيء آخر غير x، وأيضاً o لم يتم تحديدها. {{flagg|xnx|France}} 

الفاصل تعديل

الفاصل (الحرف الثاني)

الحرف المعنى المعنى وصفه مثال
s span box مربع ممتد (افتراضي) يتم وضع صورة العلم في <span>، وهذا يعني أن أسماء البلدان منحازة في قوائم عمودية؛ راجع توثيق قالب {{Flaglist}}. {{flagg|usu|نيجر}} نيجر
n non-breaking space مسافة غير منقسمة يستخدم مسافة غير منقسمة (&nbsp;) كما هو الحال في معظم قوالب الأعلام، بما فيها قالب {{علم}}. لاحظ أن &nbsp; لا يمنع في الواقع التفاف بين الصورة والنص في جميع المتصفحات؛ استخدم w كما هو موضح أدناه إذا لزم الأمر. {{flagg|unu|نيجر}} نيجر
l line break خط مكسور يستخدم فاصل سطر جديد (<br/>) كفاصل. {{flagg|ulu|نيجر}}
نيجر
t table cell خلية جدول يستخدم فاصل خلية جدول (||). نيجر
x X mark علامة × لا يستخدم أي فاصل. {{flagg|uxu|نيجر}}نيجر

الاسم تعديل

الاسم (الحرف الثالث)

الحرف المعنى المعنى وصفه مثال
c country البلد (افتراضي) يضع الوصلة إلى وصلة البلد. {{flagg|xxc|تشيلى}}تشيلى
p prefix/suffix بادئة / لاحقة وصلة اسم البلد إلى صفحة البلد، مع سابقة و/أو لاحقة (افتراضياً "علم ..."). تحدد باستخدام |pref=، و|suff= (طالع أدناه). {{flagg|xxp|تشيلى}}تشيلى
f full prefix/suffix بادئة / لاحقة الكاملة كما p، لكن في هذه الحالة يتم عرض البادئة و/أو اللاحقة. {{flagg|xxf|تشيلى}}Flag of تشيلى
b both country and prefix/suffix يضع وصلة البلد ووصلة البادئة واللاحقة، يربط اسم البلد إلى صفحة الدولة، ويضع وصلة أخرى مع البادئة/اللاحقة. {{flagg|xxb|تشيلى}}Flag of تشيلى
u unlinked دون وصلة (انظر. {{flagu}}) يتم عرض اسم البلد كنص عادي، دون وصلة. {{flagg|xxu|تشيلى}} → تشيلى
d data template بيانات القالب يربط اسم البلد إلى قالب بيانات البلد المستخدم، للاستخدام في صفحات النقاش أو التوثيق. يضع بشكل افتراضي redirect=no اذا كان القالب عبارة عن تحويلة. {{flagg|xxd|تشيلى}}تشيلى
x X mark علامة × لا يعرض أي نص. {{flagg|xxx|تشيلى}}

أخرى تعديل

يمكن تمكين بعض الخيارات الإضافية بإلحاق الرسائل التالية إلى الأحرف الثلاثة، في أي أمر:

الحرف معنى معنى وصفه مثال
a alt نص بديل يضيف اسم البلد (معلمة "name"، وإن لم تكن متوفرة يستخدم المعلمة الثانية الغير مسماة) كـ نص بديل للصورة يظهر عند تمرير الفأرة على الصورة، إذا استخدمت المعلمة |alt= لتخصيص نص بديل للصورة، فهذا لا يحتاج إلى تعيينه بصورة منفصلة. {{flagg|uxxa|باكستان}}باكستان
e expands اسم مختصر يستخدم الاسم المنصوص عليه في قالب بيانات بلد (بدلا من المعلمة الأولى) للعرض، كما في قالب {{علم الدولة}}. {{flagg|unue|PAK}} Pakistan
o Omits يتجاهل الصورة والمسافات في حالة كانت الصورة غير مرئية، بحيث يظهر التباعد في حالة تم عرض العلم. مفيد للاستعمال في حالة التضمين في سطر أو في قوائم أفقية، حيث ليست هناك حاجة لمحاذاة الاسم. {{flagg|unuo|باكستان|image=}} → باكستان
Compare with:
{{flagg|unu|باكستان|image=}} باكستان
r right يعكس ترتيب العناصر, حيث يضع الصورة يمين الاسم كما قالب {{علم يمين}}. ولا يؤثر هذا على ترتيب الأحرف في التنسيق. {{flagg|uncr|باكستان}}باكستان 
w wrapping يتجنب الالتفاف بإضافة <span class="nowrap"></span> حول الناتج. {{flagg|unuw|باكستان}} باكستان

الكيان/البلد (المعلمة الثانية الغير مسماة) تعديل

المعلمة الثانية هي اسم البلد أو الكيان. يستخدمها القالب لقراءة بيانات العلم من "قالب:بيانات بلد"؛ إذا لم يوجد القالب، سيتم استخدام نفس المعلمة افتراضياً كاسم البلد ولن يتم عرض أي صورة، وتعرف المعلمة اسم العرض الافتراضي اذا لم تستخدم المعلمة e.

وسائط الصورة تعديل

|variant= [المعلمة الثالثة غير المسماة]
يحدد صورة متغير العلم، كما هي محددة في قالب بيانات بلد. على سبيل المثال، {{flagg|ixx|المانيا|naval}} يستخدم المتغير "naval بحري" في قالب:بيانات بلد المانيا.
|image=
تخصيص اسم الصورة تحتوي أو لا تحتوي "File:" .يمكن استخدامها إذا كانت الصورة المطلوبة ليست متوفرة كمتغير للكيان (يمكنك بدلا من ذلك تطلب ذلك يمكن ان تضاف في صفحة نقاش القالب البيانات التي تخصها)، أو في حالة عدم وجود قالب بيانات. قم بتعيينها إلى "none" أو ["blank" أو قيمة فارغة] لاستخدام صورة شفافة غير موصولة (عمليا مطابقة لتنسيق الوسيط x).
|size= و[|sz=]
يحدد حجم الصورة؛ الافتراضي هو 23×15 بكسل (أكبر في بعض الكيانات). يمكنك استخدام حجم صريح في بكسل (مثل 30x20px; اللاحقة "px" هي اختيارية) أو واحد من الأحجام النسبية "xs" (نصف الأبعاد الافتراضية)، "s" و"m" و"l" و"xl" (ضعف الحجم الافتراضي).
|border=
افتراضيا، يتضمن رمز العلم حدود، إلا إذا تم تعطيله في قالب بيانات بلد في الوسيط |border= يمكن تعيينه لـ "yes" أو ["y" ًأو "1"] لفرض الحدود عند استبعاده افتراضيا، أو يمكن تعيينه لـ "no" أو ["n" أو "0" أو سلسلة فارغة] لمنع ذلك.
|align= و[|al=]
قم بتعيينها إلى
  • "left" أو ["l"] أو
  • "center" أو ["centre" أو "c" أو "middle" أو "m"]
  • أو "right" أو ["r"]

لضبط محاذاة صورة لتنسيق المربع الممتد (s) وتنسيق خلية الجدول (t). بالنسبة للوسيط t فانه افتراضياً محاذاة الوسط، أما s فهو محاذاة إلى اليمين، إن لم تحدد قيمة لـ r وإلا فأنه سيكون محاذاة لليسار.

|width= و[|w=]
يحدد عرض المربع الممتد المحيط حول الصورة (s) بالبكسل، بدون "px" يتم احتساب قيمة افتراضية بواسطة وحدة:Flaglist/size ويعتمد على حجم الصورة.
|alt=
يحدد نص بديل ونص يظهر عند مرور الفأرة فوق صورة العلم،إذا كان النص المطلوب يساوي اسم الكيان، استخدم الخيار a المذكور أعلاه.
|ilink=
تجاوز وصلة الصورة (استخدم هذا فقط إذا لم يتيح أي من خيارات التنسيق أعلاه بربط الصفحة المطلوبة).

وسائط النص والوصلة تعديل

|name=
تغيير اسم البلد المعروض. لاحظ أنه مع تنسيق f، وهذا يشمل البادئة و / أو لاحقة.
[|link=] و|clink=
الكتابة فوق الارتباط إلى مقالة البلد؛ يتم استخدام هذه أيضا لبناء وصلة بادئة / لاحقة للخيارات التالية: f، وp، وb .
|pref= و|suff= و|plink=
|pref= و|suff= تعيين البادئة واللاحقة لاستخدامها في بادئة / لاحقة الروابط (شكل الحروف f، وp وb). افتراضياً،إذا لم يتم تحديد ذلك، سيكون "علم_" بادئة (راجع {{flagof}}) ولن يتم استخدام لاحقة. يمكن استخدام المعلمة |plink= لتجاوز الارتباط المشترك.
|the=
قم بتعيينها إلى "yes" أو ["y"، أو "1"] لتضمين "the" قبل اسم البلد في بادئة/لاحقة الروابط . مثال: {{flagg|usf|الفيليبين|the=1}} Flag of the الفيليبين. استعمل |pthe= إذا كان الرابط يحتاج ذلك، "و" لكن في الاسم ليس كذلك، واستخدم |nthe= إذا كان الاسم يحتاج ذلك، ولكن الرابط لا يحتاج ذلك.
|section=
وصلة لقسم من أقسام المقالة، دون عرض اسم المقطع في الاسم، في حالة تم استخدام وصلة البلد وأيضاً بادئة/لاحقة الوصلة قم باستخدام |csection= للقسم في المقالة، واستخدم |psection= للقسم المسبوق/المتبوع من المقالة.
|altvar=، و[|avar=]، و|age=
إمكانية استخدام لاحقة قياسية محددة مسبقاً، كوصلة لفريق رياضي أو فرع عسكري. يتم تحميل بيانات altvar واللاحقة من وحدة:Flagg/Altvar data. القيم الممكنة للمعلمات هي الأسماء الأساسية للقوالب المخصصة المقابلة؛ قيم الاسم المستعار من أسم الرياضة الكاملة الموجودة (أنظر الأمثلة الواردة أدناه وصفحة البيانات).

بالنسبة لبعض الكيانات أو العناصر، هذا يغير الصورة أيضاً لمحدد بديل variant إلى رياضة أو فرع عسكري؛ على سبيل المثال: {{flagg|usp|ايرلاندا الشماليه|avar=ru}} ايرلاندا الشماليه يستخدم علم اتحاد الرغبي لتمثيل فريق اتحاد الرجبي الأيرلندي. لفرق الشباب في بعض الألعاب الرياضية (انظر صفحة البيانات)، الحد الأدنى للسن لا بد وأن يتم تعيينه باستخدام الوسيط |age=.

|nalign=، و[|nal=]
تعيين محاذاة النص في شكل خلية الجدول (t). افتراضياً محاذاة لليسار؛ القيم الممكنة هي نفسها بالنسبة لـ |align=.
|text=
تجاوز النص بالكامل؛ فقط يستخدم عند الضرورة لأي صيغ غير قياسية. بدلا من ذلك يمكنك تعيين الحرف الثالث من المعلمة تنسيق لـ x (دون نص) وقم بإضافة النص المخصص خارج القالب.

أمثلة تعديل

التنسيقات:

  • {{flagg|usc|فيچى}} فيچى (التنسيق الافتراضي)
  • {{flagg||فيچى}} فيچى (التنسيق الافتراضي)
  • {{flagg|pnbr|فيچى}}Flag of فيچى 
  • <span style="display:inline-block;text-align:center;">{{flagg|ilf|فيچى|sz=xl}}</span>
    Flag of فيچى

تنسيق الجدول والمحاذاة:

{{flagg|utu|جاميكا}} جاميكا
{{flagg|utur|جاميكا}} جاميكا
{{flagg|utu|جاميكا|al=l|nal=l}} جاميكا
{{flagg|utu|جاميكا|al=c|nal=c}} جاميكا
{{flagg|utu|جاميكا|al=r|nal=r}} جاميكا
  • {{flagg|usu|سوازيلاندا}} سوازيلاندا
  • {{flagg|usu|سوازيلاندا|al=l}} سوازيلاندا
  • {{flagg|usu|سوازيلاندا|al=c}} سوازيلاندا
  • {{flagg|usu|سوازيلاندا|al=r}} سوازيلاندا

معايير الصورة الافتراضية واسماء المعلمات:

الوصلات والـ altvars:

قالب بيانات غير موجود:

مقارنة مع قوالب أخرى تعديل

هذه القوالب تسبق قالب flagg، مع أن أغلبها لا تملك خيارات لتخصيص الوصلات والصور، إلا أنها ربما تكون أسرع لأنها تقوم فقط بوظيفتين دون الاستناد إلى لوا.

قوالب عامة تعديل

القالب قالب {{flagg}} مقابل مثال
{{علم|البلد}} {{flagg|unc|البلد}} {{علم|الصين}}الصين
{{flagg|unc|الصين}} الصين
{{flagbig|البلد}} {{flagg|ulc|البلد|sz=l}} {{flagbig|الصين}}
الصين
{{flagg|ulc|الصين|sz=l}}
الصين
{{flagc|البلد}} {{flagg|inc|البلد}} {{flagc|الصين}} الصين
{{flagg|inc|الصين}} الصين
{{علم الدولة|البلد}} {{flagg|unce|البلد}} {{علم الدولة|CHN}} الصين
{{flagg|unce|CHN}} China
{{علم ديكو|البلد}} {{flagg|uxx|البلد}} علم ديكو/صميم |variant=|size=}}
{{flagg|uxx|الصين}}
{{رمز علم|البلد}} {{flagg|cxx|البلد}} {{رمز علم|الصين}}الصين
{{flagg|cxx|الصين}}
{{صورة رمز علم|image}} {{flagg|uxx|image=image}} {{صورة رمز علم|Flag of الصين.svg}}ملف:Flag of الصين.svg
{{flagg|uxx|image=Flag of الصين.svg}}ملف:Flag of الصين.svg
{{رابط علم|البلد|لاحقة }} {{flagg|unp|البلد|suff=لاحقة }} {{رابط علم|الصين|at the Hopman Cup}} الصين
{{flagg|unp|الصين|suff=at the Hopman Cup}} الصين
{{flag+link|بادئة|البلد}} {{flagg|unp|البلد|pref=بادئة}} (no existence check) {{flag+link|Agriculture in|الصين}} الصين
{{flagg|unp|الصين|pref=Agriculture in}} الصين
{{Flaglist|البلد}} {{flagg|usc|البلد}} {{Flaglist|الصين}} الصين
{{flagg|usc|الصين}} الصين
{{flagof|البلد}} {{flagg|unp|البلد|sz=l}} {{flagof|الصين}} الصين
{{flagg|unp|الصين|sz=l}} الصين
{{علم يمين|البلد}} {{flagg|uncr|البلد}} {{علم يمين|الصين}} الصين
{{flagg|uncr|الصين}}الصين 
{{Flagu|البلد}} {{flagg|unu|البلد}} {{Flagu|الصين}} الصين
{{flagg|unu|الصين}} الصين
{{Noflag|البلد}} {{flagg|xnu|البلد}} {{Noflag|الصين}} الصين
{{flagg|xnu|الصين}} الصين
{{Noflag|[[country]]}} {{flagg|xnc|البلد}} {{Noflag|[[الصين]]}} الصين
{{flagg|xnc|الصين}} الصين

قوالب رياضية/عسكرية تعديل

تستخدم الأمثلة قوالب كرة القدم، وبقية الألعاب الرياضية تعمل تبعاً لذلك.

القالب قالب {{flagg}} مقابل مثال
{{ك ق|البلد}} {{flagg|unpe|البلد|avar=fb}} {{ك ق|الصين}} الصين
{{flagg|unpe|الصين|avar=fb}} الصين
{{ك ق|البلد|align=1}} {{flagg|uspe|البلد|avar=fb|al=c}} {{ك ق|الصين|align=1}} الصين
{{flagg|uspe|الصين|avar=fb|al=c}} الصين
{{ك ق-كبير|البلد}} {{flagg|ulpe|البلد|avar=fb|sz=l}} {{ك ق-كبير|الصين}}
الصين
{{flagg|ulpe|الصين|avar=fb|sz=l}}
الصين
{{ك ق-يم|البلد}} {{flagg|unpre|البلد|avar=fb}} {{ك ق-يم|الصين}} الصين
{{flagg|unpre|الصين|avar=fb}}الصين 
{{ك ق ت|عمر|البلد}} {{flagg|unpe|البلد|avar=fbu|age=عمر}} {{ك ق ت|17|الصين}} الصين
{{flagg|unpe|الصين|avar=fbu|age=17}} الصين
{{ك ق ن|البلد}} {{flagg|unpe|البلد|avar=fbw}} {{ك ق ن|الصين}} الصين
{{flagg|unpe|الصين|avar=fbw}} الصين
{{Fbwu|عمر|البلد}} {{flagg|unpe|البلد|avar=fbwu|age=عمر}} {{Fbwu|17|الصين}} الصين
{{flagg|unpe|الصين|avar=fbwu|age=17}} الصين
{{Army|البلد}} {{flagg|unfe|البلد|avar=army}} (لا يتجاوز الاسم التلقائي) {{Army|الصين}} جيش الصين
{{flagg|unfe|الصين|avar=army}} الصين الجيش
{{بحرية|البلد}} {{flagg|unfe|البلد|avar=navy}} (لا يتجاوز الاسم التلقائي) {{بحرية|الصين}}
 
القوات البحرية الصينية
{{flagg|unfe|الصين|avar=navy}} الصين القوات البحرية
{{قوات جوية|البلد}} {{flagg|unfe|البلد|avar=air force}} (لا يتجاوز الاسم التلقائي) {{قوات جوية|الصين}}قالب:معطيات الصين
{{flagg|unfe|الصين|avar=air force}} الصين القوات الجوية

local titleSelf = mw.title.new(... or mw.getCurrentFrame():getTitle())
local titleCountryData = mw.title.new[[Module:CountryData]]
if titleSelf.isSubpage then
	local sandbox = titleSelf.subpageText:match[[^sandbox]]
	if sandbox then
		titleCountryData = titleCountryData:subPageTitle(sandbox)
	end
end
local CountryData = require(tostring(titleCountryData))
local p = {}

function p.main(frame)

	--Get input arguments
	local args = require('Module:Arguments').getArgs(frame,{valueFunc =
		function(key,value)
			if value then
				value = mw.text.trim(value)
				--Change empty string to nil for all args except 'image' and 'border'
				if key=="image" or key=="border" or value~="" then
					return value
				end
			end
			return nil
		end
	})

	--Call main function
	return p.luaMain(frame,args)

end

function p.luaMain(frame,args)

	local function emp2nil(x)
		if x=="" then return nil else return x end
	end
	local function space2emp(x)
		if string.find(x,"^%s*$") then return "" else return x end
	end
	local function nopx(x)
		if x~=nil and (string.find(x,"^%d+$") or string.find(x,"^%d+px$")) then return string.gsub(x,"^(.*)px","%1") else return nil end
	end

	--Country & mode parameters
	local mode = string.lower(args[1] or "usc")
	local mi = string.sub(mode,1,1)
	local ms = string.sub(mode,2,2)
	local mn = string.sub(mode,3,3)
	local me = string.sub(mode,4,-1)

	local country = args[2] or ""
	local countryDataCountry = country
	if string.find(me, "i") then
	    local titleIocCountryData = mw.title.new[[Module:Country alias/data]]
	    local IocCountryData = require(tostring(titleIocCountryData))
	    local iocCountryAlias = IocCountryData.countryAliases[country] or country
	    countryDataCountry = IocCountryData.countries[iocCountryAlias]["countrydata_name"] or IocCountryData.countries[iocCountryAlias]["name"]
	end
	local avar = args["avar"] or args["altvar"]
	local clink = args["clink"] or args["link"]

	--Get country data & altvar data
	local data, alink, amap, asuf
	if avar then
		local age = args["age"] or ""
		local aalias
		amap, aalias = require("Module:Flagg/Altvar data").alttable(age)
		avar = string.gsub(string.lower(avar or ""),"[ -]","")
		avar = aalias[avar] or avar
		if not amap[avar] then error("Unknown avar") end
		local apar = {altvar=amap[avar].altvar;mw=amap[avar].mw;age=amap[avar].age;variant=args["variant"] or args[3]}
		data = CountryData.getcachedtable(frame, countryDataCountry, apar)
		asuf = amap[avar].altlink
		alink = data["link alias-"..amap[avar].altvar] or (clink or data["shortname alias"] or data.alias or country).." "..asuf
	else
		data = (args["nodata"] and {}) or CountryData.getcachedtable(frame, countryDataCountry, {variant=args["variant"] or args[3]})
		avar = ""
		amap = {[""]={altvar=""}}
	end

	--Name and link parameters
	clink = clink or data.alias or country

	local pref = args["pref"]
	local suff = args["suff"] or asuf
	local pref2 = args["pref2"]
	local suff2 = args["suff2"]
	if not pref and not suff then --Default prefix
		pref = "Flag of"
	end
	local yn_map = {[""]=0; ["0"]=0; ["no"]=0; ["n"]=0; ["1"]=1; ["yes"]=1; ["y"]=1}
	local fthe = (args["pthe"] and yn_map[args["pthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0)
	local nthe = (args["nthe"] and yn_map[args["nthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0)
	fthe = fthe and (pref and "t" or "T").."he " or ""
	nthe = nthe and (pref and "t" or "T").."he " or ""
	local flink = args["plink"] or args["flink"] or alink
	              or clink=="" and "" or space2emp((pref or "").." ")..fthe..clink..space2emp(" "..(suff or ""))
	local flink2
	if args["plink2"] or args["flink2"] or pref2 or suff2 then
		flink2 = args["plink2"] or args["flink2"] or clink=="" and "" or space2emp((pref2 or "").." ")..fthe..clink..space2emp(" "..(suff2 or ""))
	else
		flink2 = flink
	end
	local fsec = args["psection"] or args["section"]
	local fsec2 = args["psection2"] or args["section"]
	local csec = args["csection"] or args["section"]
	fsec = fsec and "#"..fsec or ""
	fsec2 = fsec2 and "#"..fsec2 or ""
	csec = csec and "#"..csec or ""

	if string.find(me,"f") then
		if mw.title.new( flink ).exists == false then
			if flink2 ~= flink and mw.title.new ( flink2 ).exists == true then
				flink = flink2
				fsec = fsec2
			else
				flink = clink
			end
		end
	end

	local name = args["name"]
	if not name then
		local cname = string.find(me,"e") and (data["name alias-"..amap[avar].altvar] or data["shortname alias"] or data.alias) or country
		if mn == "f" then
			name = cname=="" and "" or space2emp((pref or "").." ")..nthe..cname..space2emp(" "..(suff or ""))
		else
			name = cname
		end
	end

	--Image parameters
	local pimage = args["image"]
	local placeholder = "Flag placeholder.svg"
	local variant = args["variant"] or args[3] or ""
	local image_map = {[""]=placeholder; ["none"]=placeholder; ["blank"]=placeholder}
	if pimage then --Remove namespace
		pimage = string.gsub(pimage,"^[Ff][Ii][Ll][Ee]:","")
		pimage = string.gsub(pimage,"^[Ii][Mm][Aa][Gg][Ee]:","")
	end
	local iname = image_map[pimage] or pimage

	local size = args["size"] or args["sz"]
	local size_map = {xs="12x8px"; s="17x11px"; m="23x15px"; l="32x21px"; xl="46x30px"}
	if size==nil or string.find(size,"^%d*x?%d+px$") then
		--valid EIS size (..px, x..px or ..x..px) or unset
	elseif string.find(size,"^%d*x?%d+$") then --EIS size without "px" suffix
		size=size.."px"
	else --size from map, or invalid value
		size = size_map[size] or nil
	end
	local border = args["border"]

	if iname then
		size = size or "23x15px"
		if yn_map[border]==0 then border = "" else border = "|border" end
	else
		iname = data["flag alias-"..amap[avar].altvar.."-"..variant] or data["flag alias-"..variant] or data["flag alias-"..amap[avar].altvar] or data["flag alias"] or placeholder
		size = size or emp2nil(data.size) or "23x15px"
		if border then
			if yn_map[border]==0 then border = "" else border = "|border" end
		else
			local autoborder = data["border-"..variant] or data["border-"..amap[avar].altvar] or data.border
			if autoborder and autoborder~="border" then border = "" else border = "|border" end
		end
	end

	local am = ""
	if args["alt"] or string.find(me,"a") then
		am = args["alt"] or args["name"] or country
		am = am.."|"..am
	end
	
	--Build display name
	local text = args["text"]
	if not text then
		if mn=="x" then --no text
			text = ""
		elseif mn=="p" or mn=="f" or mn == "*" then --prefix/suffix link
			text = flink=="" and name or "[["..flink..fsec.."|"..name.."]]"
			-- By the principle of least surprise, there should be some
			-- indication that the link [[X of Country|Country]] does not
			-- go to [[Country]].
			if mn == "*" and clink ~= flink then
				text = text:sub(1, -3) .. "\226\128\175*]]" end
		elseif mn=="l" then --display link target
			text = flink=="" and name or "[["..flink..fsec.."|"..(args["name"] or flink).."]]"
		elseif mn=="b" then --both prefix/suffix and normal country link
			local preflink = pref and (flink=="" and pref.." " or "[["..flink..fsec.."|"..pref.."]] ") or ""
			local sufflink = suff and (flink=="" and " "..suff or " [["..flink..fsec.."|"..suff.."]]") or ""
			local namelink = (name=="" and "" or nthe)..(clink=="" and name or "[["..clink..csec.."|"..name.."]]")
			text = preflink..namelink..sufflink
		elseif mn=="d" then --data template
			local title = mw.title.new("Template:Country data "..country)
			--check if redirect
			if title.isRedirect then
				text = "<span class=\"plainlinks\">["..title:fullUrl("redirect=no").." "..name.."]</span>"
			else
				text = "[["..title.fullText.."|"..name.."]]"
			end
		elseif mn=="u" then --unlinked
			text = name
		elseif mn=="a" then --abbr
			text = name==country and (clink==country and country or "<abbr title='"..clink.."'>"..country.."</abbr>") or ("<abbr title='"..name.."'>"..country.."</abbr>")
		else --country link (default)
			text = clink=="" and name or "[["..clink..csec.."|"..name.."]]"
		end
		if string.find(me,"p") then
			text = "("..text..")"
		end
	end
	
	if type(text) == 'function' then
		text = text(data)
	end

	--Define separator
	local separator = "&nbsp;" --non-breaking space (n)
	if ms=="x" then --no separator
		separator = ""
	elseif ms=="l" then --line break
		separator = "<br />"
	end
	
	--Add preftext, if used
	local preftext = args["preftext"]
	if (preftext or "") ~= "" then
		text = preftext..separator..text
	end
	
	--Build image
	local ilink = args["ilink"]
	if not ilink then
		if mi=="x" or (iname==placeholder and pimage~=placeholder) then --no image/invisible image
			iname = placeholder
			border = ""
			ilink = "|link="
			am = ""
		elseif mi=="i" then --image page link
			ilink = ""
		elseif mi=="c" then --country link
			ilink = "|link="..clink..(clink=="" and "" or csec)
		elseif mi=="p" or mi=="f" then --prefix/suffix link
			ilink = "|link="..flink..(flink=="" and "" or fsec)
		elseif mi=="d" then --data template
			local title = mw.title.new("Template:Country data "..country)
			--check if redirect
			if title.isRedirect then
				ilink = "|link="..title:fullUrl("redirect=no")
			else
				ilink = "|link="..title.fullText
			end
		else --unlinked (default)
			ilink = "|link="
		end
	end
	if am == "" and string.find(me,"l") then
		am = mw.ustring.sub(ilink,7,-1)
	end
	local image = "[[File:"..iname.."|"..size..border..ilink.."|alt="..am.."]]"

	if iname==placeholder then
		if require('Module:yesno')(args["noredlink"]) == false or args["noredlink"] == "notext" then
			if country ~= '' and data.alias == nil then
				iname = ''
				image = "[[:Template:Country data "..country.."]]"
				if args["noredlink"] == "notext" then
					text = ''
				end
			end
		end
		if (args["missingcategory"] or '') ~= '' then
			image = image..args["missingcategory"]
		end
		if string.find(me,"b") then
			text = ''
		end
	end

	--Combine image and name with separator
	local align_map = {left="left", l="left", center="center", centre="center", c="center", middle="center", m="center", right="right", r="right"}
	local align = align_map[args["align"] or args["al"]]
	local nalign =  align_map[args["nalign"] or args["nal"]]
	local out
	if string.find(me,"r") then
		--image right of name
		if (ms=="x" and mi=="x") or (string.find(me,"o") and iname==placeholder and pimage~=placeholder) then --name only
			out = text
		elseif ms=="x" or ms=="n" or ms=="l" then --no separator, non-breaking space, or line break
			out = text.."<span class=\"flagicon\">"..separator..image.."</span>"
		elseif ms=="t" then --table cell
			out = "style=\"text-align:"..(nalign or "left").."\"|"..text.."||style=\"text-align:"..(align or "center").."\"|<span class=\"flagicon\">"..image.."</span>"
		else --fixed-width span box (default)
			local width = args["width"] or args["w"] or require("Module:Flaglist").luawidth(size)
			out = text.."&nbsp;<span class=\"flagicon\" style=\"display:inline-block;width:"..width.."px;text-align:"..(align or "right").."\">"..image.."</span>"
		end
	else --image left of name
		if (ms=="x" and mi=="x") or (string.find(me,"o") and iname==placeholder and pimage~=placeholder) then --name only
			out = text
		elseif ms=="x" or ms=="n" or ms=="l" then --no separator, non-breaking space, or line break
			out = "<span class=\"flagicon\">"..image..separator.."</span>"..text
		elseif ms=="t" then --table cell
			out = "style=\"text-align:"..(align or "center")..";\"|<span class=\"flagicon\">"..image.."</span>||style=\"text-align:"..(nalign or "left").."\"|"..text
		else --fixed-width span box (default)
			local width = nopx(args["width"] or args["w"]) or require("Module:Flaglist").luawidth(size)
			out = "<span class=\"flagicon\" style=\"display:inline-block;width:"..width.."px;text-align:"..(align or "left").."\">"..image.."</span>&nbsp;"..text
		end
	end
	if string.find(me,"w") then --avoid wrapping
		out = "<span class=\"nowrap\">"..out.."</span>"
	end
	
	-- align in table
	if me:find("t") then
		out = 'style="text-align:'..(align or 'left')..'"|'..out
	end

	--Tracking categories
	local cat = ""
	if pimage and not image_map[pimage] and country~="" and data["flag alias"] and not args.demo then
		cat = "[[Category:Pages using Flagg with specified image instead of data template image]]"
	end

	return out..cat

end

return p