Wikipedia
piwiki
https://pi.wikipedia.org/wiki/%E0%A4%AA%E0%A4%AE%E0%A5%81%E0%A4%96_%E0%A4%AA%E0%A4%A4%E0%A5%8D%E0%A4%A4_Pamukha_patta
MediaWiki 1.47.0-wmf.19
first-letter
मीडिया
विसेस
सम्भासित
अवयव
अवयव सम्भासित
Wikipedia
Wikipedia सम्भासित
पटिमा
पटिमा सम्भासित
मीडियाविकि
मीडियाविकि सम्भासित
पटिरूप
पटिरूप सम्भासित
अवस्सय
अवस्सय सम्भासित
विभाग
विभाग सम्भासित
TimedText
TimedText talk
Module
Module talk
Event
Event talk
पटिरूप:Navbox
10
4351
104339
101390
2026-09-12T02:26:09Z
咽頭べさ
6149
Replaced content with "<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude> {{Documentation}} </noinclude>"
104339
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
tqodcaa2vvhehqaod229udlla0wimek
पटिरूप:Documentation
10
4353
104275
101526
2026-09-11T14:00:38Z
咽頭べさ
6149
104275
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
ii1kftoonz87mztj4siz1yhyqeg6agm
पटिरूप:Template other
10
5161
104301
101708
2026-09-11T16:33:02Z
咽頭べさ
6149
104301
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
0tcssjmltwl7y5v3f5wj2kqciaabqly
पटिरूप:Infobox
10
5725
104270
103852
2026-09-11T13:11:16Z
咽頭べさ
6149
Replaced content with "{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude> {{documentation}} <!-- Categories go in the /doc subpage, and interwikis go in Wikidata. --> </noinclude>"
104270
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
f4hgwrnr11ahhwyo266vcd10dpi92pe
पटिरूप:Br separated entries
10
5732
104279
75496
2026-09-11T14:04:17Z
咽頭べさ
6149
104279
wikitext
text/x-wiki
<noinclude>{{Requested move notice|1=Template:Br-separated list|2=Template talk:Hlist#Requested move 3 August 2026}}
</noinclude>{{<includeonly>safesubst:</includeonly>#invoke:Separated entries|br|dataPlural=1}}<noinclude>
{{documentation}}
</noinclude>
fs78y3yfiqdpdhog9wjflihm81mn526
पटिरूप:Reflist
10
5776
104316
102771
2026-09-11T17:35:42Z
咽頭べさ
6149
104316
wikitext
text/x-wiki
<templatestyles src="Reflist/styles.css" /><div class="reflist <!--
-->{{#if:{{{1|}}}{{{colwidth|}}}|reflist-columns references-column-width}} <!--
-->{{#switch:{{{liststyle|{{{group|}}}}}}|upper-alpha|upper-roman|lower-alpha|lower-greek|lower-roman=reflist-{{{liststyle|{{{group}}}}}}}} <!--
-->{{#if:{{{1|}}}|{{#iferror:{{#ifexpr: {{{1|1}}} > 1 }}||{{#switch:{{{1|}}}|1=|2=reflist-columns-2|#default=reflist-columns-3}} }}}}" <!-- end class
-->{{#if: {{{1|}}}<!-- start style -->
| {{#iferror: {{#ifexpr: {{{1|1}}} > 1 }} |style="column-width: {{{1}}};"}}
| {{#if: {{{colwidth|}}}|style="column-width: {{{colwidth}}};"}}
}}>
{{#tag:references|{{{refs|}}}|group={{{group|}}}|responsive={{#if:{{{1|}}}{{{colwidth|}}}|0|1}}}}</div><noinclude>
{{Documentation}}
</noinclude>
621lyvvzbwb1euegq2ksph40ywtnoeb
पटिरूप:Main other
10
6288
104317
101566
2026-09-11T17:36:49Z
咽頭べさ
6149
104317
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
fqcj40f1ojeitvtz4m2eefrp1ymhi6o
Module:InfoboxImage
828
6289
104272
95242
2026-09-11T13:15:26Z
咽頭べさ
6149
104272
Scribunto
text/plain
-- Inputs:
-- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link
-- page - page to display for multipage images (DjVu)
-- size - size to display the image
-- maxsize - maximum size for image
-- sizedefault - default size to display the image if size param is blank
-- alt - alt text for image
-- title - title text for image
-- border - set to yes if border
-- center - set to yes, if the image has to be centered
-- upright - upright image param
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
-- link - page to visit when clicking on image
-- class - HTML classes to add to the image
-- Outputs:
-- Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page
local i = {}
-- List of placeholder images and tracking categories stored in [[Module:InfoboxImage/data]]
-- Other constants:
-- the system-wide default thumbnail size (in px)
local defaultThumbnailSize = 250
-- If page is not a user page, return tracking category. Else return empty.
local function trackingCat(cat)
local ns = mw.title.getCurrentTitle().nsText:lower()
local categories = mw.loadData('Module:InfoboxImage/data').categories
return (ns ~= 'user' and ns ~= 'user talk' and categories[cat]) or ""
end
-- Determine whether image is a placeholder
function i.IsPlaceholder(image)
-- change underscores to spaces
image = mw.ustring.gsub(image, "_", " ");
assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil')
-- if image starts with [[ then remove that and anything after |
if mw.ustring.sub(image,1,2) == "[[" then
image = mw.ustring.sub(image,3);
image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");
assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
-- capitalise first letter
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);
local placeholder_image = mw.loadData('Module:InfoboxImage/data').placeholder_image
return placeholder_image[image]
end
local function isempty(x)
return (not x) or x == ""
end
-- Main entry point
function i.InfoboxImage(frame)
local image = frame.args["image"];
if isempty(image) then
return "";
end
if image == " " then
return image;
end
if frame.args["suppressplaceholder"] ~= "no" then
if i.IsPlaceholder(image) == true then
return "";
end
end
if string.find(image, "^%[*https?:") then
-- Error category.
return trackingCat("url_image_links")
end
if mw.ustring.sub(image,1,2) == "[[" then
-- search for thumbnail images and add to tracking cat if found
local cat = "";
if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
cat = trackingCat("thumbnail_images")
end
return image .. cat;
elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then
return image;
elseif mw.ustring.sub(image,1,1) == "<" then
return image;
elseif mw.ustring.sub(image,1,8) == mw.ustring.char(127).."'\"`UNIQ" then
-- Found strip marker at begining, so pass don't process at all
return image;
else
local result = "";
local page = frame.args["page"];
local upright = frame.args["upright"] or ""
local size = frame.args["size"];
local maxsize = frame.args["maxsize"];
local sizedefault = frame.args["sizedefault"];
local alt = frame.args["alt"];
local link = frame.args["link"];
local title = frame.args["title"];
local border = frame.args["border"];
local thumbtime = frame.args["thumbtime"] or "";
local center = frame.args["center"];
local class = frame.args["class"];
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
if not isempty(maxsize) then
-- if no sizedefault nor upright, then set to maxsize
if isempty(sizedefault) and isempty(upright) then
sizedefault = maxsize
end
-- check to see if size bigger than maxsize
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
if not isempty(size) then
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
if sizenumber > maxsizenumber and maxsizenumber > 0 then
size = maxsize;
end
end
-- check to see if upright bigger than maxsize (at default preferred size)
if not isempty(upright) then
local uprightnumber = tonumber(upright) or (upright == "yes" and 0.75) or 0
if uprightnumber*defaultThumbnailSize > maxsizenumber and maxsizenumber > 0 then
upright = tostring(maxsizenumber/defaultThumbnailSize)
end
end
end
-- add px to size if just a number
if (tonumber(size) or 0) > 0 then
size = size .. "px";
end
-- add px to sizedefault if just a number
if (tonumber(sizedefault) or 0) > 0 then
sizedefault = sizedefault .. "px";
end
result = "[[File:" .. image;
if not isempty(page) then
result = result .. "|page=" .. page;
end
if not isempty(size) then
result = result .. "|" .. size;
elseif not isempty(sizedefault) and isempty(upright) then
result = result .. "|" .. sizedefault;
else
result = result .. "|frameless";
end
if center == "yes" then
result = result .. "|center"
end
if not isempty(alt) then
result = result .. "|alt=" .. alt;
end
if not isempty(link) then
result = result .. "|link=" .. link;
end
if border == "yes" then
result = result .. "|border";
end
if upright == "yes" then
result = result .. "|upright";
elseif upright ~= "" then
result = result .. "|upright=" .. upright;
end
if thumbtime ~= "" then
result = result .. "|thumbtime=" .. thumbtime;
end
if not isempty(class) then
result = result .. "|class=" .. class;
end
-- if alt value is a keyword then do not use as a description
if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then
alt = nil;
end
if not isempty(title) then
-- does title param contain any templatestyles? If yes then set to blank.
if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
title = nil;
end
end
if not isempty(title) then
result = result .. "|" .. title;
end
result = result .. "]]";
return result;
end
end
return i;
jhks6vfk9v2iehyrc6dp50ju1s294vf
Module:Infobox
828
6290
104271
103848
2026-09-11T13:13:18Z
咽頭べさ
6149
104271
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local yesno = require("Module:Yesno")
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 isUntitledChildBox(sval)
return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) )
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*)(\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)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
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.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil )
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data and not yesno(args.decat) then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):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.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
else
row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil )
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 renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil )
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil )
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil )
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.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil )
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.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. 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('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
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 == 'yes' then
root:wikitext(require('Module:Italic title')._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.decat == turns off tracking categories.
local function renderTrackingCategories()
if yesno(args.decat) then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
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 = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
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()
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 args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
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
-- 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("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 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.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- 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('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
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 origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
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
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()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
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
kueb5p6xeoq6x7bxu2zyyl7pmxgesrs
Module:Documentation
828
6833
104274
101146
2026-09-11T13:56:43Z
咽頭べさ
6149
104274
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
local format = mw.ustring.format
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return format('[[%s|%s]]', page, display)
else
return format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return format(
'<span class="%s">(%s)</span>',
message('toolbar-class'),
table.concat(ret, ' | ')
)
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') or (subpage == message('doc-subpage') and mw.title.getCurrentTitle().namespace == env.docSpace) then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.canonicalUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
-- 'module-sandbox-category' --> 'Module sandboxes'
-- 'other-sandbox-category' --> 'Sandboxes outside of template or module namespace'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = '__EXPECTUNUSEDTEMPLATE__'
local pagetype, sandboxCat
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
sandboxCat = message('sandbox-category')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
sandboxCat = message('module-sandbox-category')
else
pagetype = message('sandbox-notice-pagetype-other')
sandboxCat = message('other-sandbox-category')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(sandboxCat)
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
return {
title = title,
docTitle = docTitle,
-- View, display, edit, and purge links if /doc exists.
viewLinkDisplay = message('view-link-display'),
editLinkDisplay = message('edit-link-display'),
historyLinkDisplay = message('history-link-display'),
purgeLinkDisplay = message('purge-link-display'),
preload = preload,
createLinkDisplay = message('create-link-display')
}
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local docTitle = data.docTitle
-- yes, we do intend to purge the template page on which the documentation appears
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay)
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay)
return viewLink .. editLink .. historyLink .. purgeLink
else
local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
return createLink .. purgeLink
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editDisplay = message('edit-link-display')
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay)
local historyDisplay = message('history-link-display')
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay)
return message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
return message('create-module-doc-blurb', {createLink})
.. '<br />'
end
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
return makeCategoryLink(message('strange-usage-category'))
end
return ''
end
return p
bo74oekmmsj1xtpw7dlzkvkhc0k05g6
Module:Documentation/config
828
6835
104273
99994
2026-09-11T13:55:21Z
咽頭べさ
6149
104273
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Edit In Sandbox Icon - Color.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|पटिरूप sandbox]] पिट्ठ'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|मॉड्यूल sandbox]] पिट्ठ'
cfg['sandbox-notice-pagetype-other'] = 'sandbox पिट्ठ'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'इदं मुखपत्तं $1 अत्थाय $2 अहोति॥'
cfg['sandbox-notice-diff-blurb'] = 'इदं मुखपत्तं $1 अत्थाय $2 अहोति($3)॥'
cfg['sandbox-notice-compare-link-display'] = 'विसेसनं'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = ' $1सहचारिनो उपपिट्ठियोपि॥'
cfg['sandbox-notice-testcases-link-display'] = 'परीक्खाठानानि'
cfg['sandbox-notice-testcases-run-blurb'] = ' $1 ($2) सहचारिनो उपपिट्ठियोपि॥'
cfg['sandbox-notice-testcases-run-link-display'] = 'run'
-- cfg['sandbox-category'] - A category to add to all template sandboxes.
-- cfg['module-sandbox-category'] - A category to add to all module sandboxes.
-- cfg['module-sandbox-category'] - A category to add to all sandboxe not in templates or modules.
cfg['sandbox-category'] = 'नमूनापिट्ठि पटिरूप '
cfg['module-sandbox-category'] = 'नमूनापिट्ठि मॉड्यूल'
cfg['other-sandbox-category'] = 'Sandboxes outside of template or module namespace'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'पटिरूप लक्खणा'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'मॉड्यूल लक्खणा'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'संखित्तकथा'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'लक्खणा'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'पस्सितु'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'संसोधेतु'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'वंस'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'सुद्धेतु'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'कारेतु'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'उपरिमं [[:en:Wikipedia:Template documentation|आयोगविधि]] $1 तो [[:en:Help:Transclusion|आहितं]] होति॥'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'त्वं इमस्स [[:en:Wikipedia:Lua|स्क्रिबंटो मॉड्यूल]] अत्थाय आयोगविधिपत्तं $1 सक्कोसि॥'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "सम्पादका इमस्स पटिरूप $1 च $2 च पिट्ठीसु परीक्खितुं सक्कोन्ति॥"
cfg['experiment-blurb-module'] = "सम्पादका इमस्स मॉड्यूल $1 च $2 च पिट्ठीसु परीक्खितुं सक्कोन्ति॥"
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'सुधेहि'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'करोहि'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'विसेस'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = '$1 स्स सन्धेनिम्मानं'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'पटिबिम्ब'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'सुधेहि'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'करोहि'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = ' $1 उपपण्णासे वग्गे पक्खिपथ॥'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'इमानि $1स्स उपपुत्थकानि॥'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'पटिरूप'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'मॉड्यूल'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'पुत्थकं'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
bsbpwwq7m0cqyfhy3rk2jmosb79gjkh
Module:Message box
828
6851
104319
103616
2026-09-11T17:43:45Z
咽頭べさ
6149
104319
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Set the below row.
self.below = cfg.below and args.below
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
if self.below then
self:addClass('mbox-with-below')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Set image classes.
self.imageRightClass = args.imagerightclass or args.imageclass
self.imageLeftClass = args.imageleftclass or args.imageclass
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s' .. (talk == '#' and '' or '#') .. '%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:exportDiv()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box.
local mbox = root:tag('div')
mbox:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
mbox:addClass(class or nil)
end
mbox
:cssText(self.style or nil)
if self.attrs then
mbox:attr(self.attrs)
end
local flex_container
if self.below then
-- we need to wrap the flex components (`image(right)` and `text`) in their
-- own container div to support the `below` parameter
flex_container = mw.html.create('div')
flex_container:addClass('mbox-flex')
else
-- the mbox itself is the parent, so we need no HTML flex_container
flex_container = mw.html.create()
end
-- Add the left-hand image.
if self.imageLeft then
local imageLeftCell = flex_container:tag('div'):addClass('mbox-image')
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
end
-- Add the text.
local textCell = flex_container:tag('div'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = flex_container:tag('div'):addClass('mbox-imageright')
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
mbox:node(flex_container)
-- Add the below row.
if self.below then
mbox:tag('div')
:addClass('mbox-text mbox-below')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
-- DIV MIGRATION CONDITIONAL
if box.cfg.div_structure then
return box:exportDiv()
end
-- END DIV MIGRATION CONDITIONAL
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
ocboyo877qnpqum2b9fyiquh72vukqa
Module:Message box/configuration
828
6853
104326
100026
2026-09-11T17:57:27Z
咽頭べさ
6149
104326
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css',
div_structure = true,
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css',
div_structure = true,
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
["license-related"] = {
class = 'imbox-license',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css',
div_structure = true,
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
p36hrbxjy99m7clj64lhlint2en3bo0
Module:Navbar/styles.css
828
6886
104322
100072
2026-09-11T17:48:51Z
咽頭べさ
6149
104322
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
/* not the usual @media screen, we simply remove navbar in @media print */
html.skin-theme-clientpref-night .navbar li a abbr {
color: var(--color-base) !important;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .navbar li a abbr {
color: var(--color-base) !important;
}
}
@media print {
.navbar {
display: none !important;
}
}
a68rpqs0zynjjfzlunkhpdlpnoe6c82
Module:Navbar
828
6887
104321
103849
2026-09-11T17:47:49Z
咽頭べさ
6149
104321
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = 'Special:EditPage/' .. title.fullText, ['url'] = false },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = 'Special:PageHistory/' .. title.fullText, ['url'] = false },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
0iwrh6fwqy52ve4qubv886e6mqvyrcq
Module:String
828
6913
104292
100157
2026-09-11T14:43:04Z
咽頭べさ
6149
104292
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The first index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = string.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
-- findpagetext returns the position of a piece of text in a page
-- First positional parameter or |text is the search text
-- Optional parameter |title is the page title, defaults to current page
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search
-- Optional parameter |nomatch is the return value when no match is found; default is nil
function str._findpagetext(args)
-- process parameters
local nomatch = args.nomatch or ""
if nomatch == "" then nomatch = nil end
--
local text = mw.text.trim(args[1] or args.text or "")
if text == "" then return nil end
--
local title = args.title or ""
local titleobj
if title == "" then
titleobj = mw.title.getCurrentTitle()
else
titleobj = mw.title.new(title)
end
--
local plain = args.plain or ""
if plain:sub(1, 1) == "f" then plain = false else plain = true end
-- get the page content and look for 'text' - return position or nomatch
local content = titleobj and titleobj:getContent()
return content and mw.ustring.find(content, text, 1, plain) or nomatch
end
function str.findpagetext(frame)
local args = frame.args
local pargs = frame:getParent().args
for k, v in pairs(pargs) do
args[k] = v
end
if not (args[1] or args.text) then return nil end
-- just the first value
return (str._findpagetext(args))
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return ( string.gsub( pattern_str, "[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%0" ) )
end
return str
j3b8d4sejqnvazpfl0gk0yfaa503gli
पटिरूप:Ifempty
10
7327
104276
103677
2026-09-11T14:01:44Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:If empty]] to [[पटिरूप:Ifempty]]
103677
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:If empty|main}}<noinclude>{{Documentation}}</noinclude>
dl9p9t1ge8vz1f67zrvu4lp7md161es
Module:I18n
828
7462
104286
103932
2026-09-11T14:33:09Z
咽頭べさ
6149
104286
Scribunto
text/plain
--- I18n library for message storage in Lua datastores.
-- The module is designed to enable message separation from modules &
-- templates. It has support for handling language fallbacks. This
-- module is a Lua port of [[wikia:dev:I18n-js]] and i18n modules that can be loaded
-- by it are editable through [[wikia:dev:I18nEdit]].
--
-- On Wikimedia projects, i18n messages are editable
-- through [[c:Special:PrefixIndex/Data:i18n/|Data:i18n/]] subpages on
-- Wikimedia Commons.
--
-- @module i18n
-- @version 1.4.0
-- @require Module:Entrypoint
-- @require Module:Fallbacklist
-- @author [[wikia:dev:User:KockaAdmiralac|KockaAdmiralac]] (original Fandom implementation)
-- @author [[wikia:dev:User:Speedit|Speedit]] (original Fandom implementation)
-- @author [[User:Awesome Aasim|Awesome Aasim]] (Wikimedia port)
-- @attribution [[wikia:dev:User:Cqm|Cqm]]
-- @release beta
-- @see [[wikia:dev:I18n|I18n guide]]
-- @see [[wikia:dev:I18n-js]]
-- @see [[wikia:dev:I18nEdit]]
-- <nowiki>
local i18n, _i18n = {}, {}
-- Module variables & dependencies.
local title = mw.title.getCurrentTitle()
local fallbacks = require('Module:Fallbacklist')
local entrypoint = require('Module:Entrypoint')
local uselang
--- Argument substitution as $n where n > 0.
-- @function _i18n.handleArgs
-- @param {string} msg Message to substitute arguments into.
-- @param {table} args Arguments table to substitute.
-- @return {string} Resulting message.
-- @local
function _i18n.handleArgs(msg, args)
for i, a in ipairs(args) do
msg = (string.gsub(msg, '%$' .. tostring(i), tostring(a)))
end
return msg
end
--- Checks whether a language code is valid.
-- @function _i18n.isValidCode
-- @param {string} code Language code to check.
-- @return {boolean} Whether the language code is valid.
-- @local
function _i18n.isValidCode(code)
return type(code) == 'string' and #mw.language.fetchLanguageName(code) ~= 0
end
--- Checks whether a message contains unprocessed wikitext.
-- Used to optimise message getter by not preprocessing pure text.
-- @function _i18n.isWikitext
-- @param {string} msg Message to check.
-- @return {boolean} Whether the message contains wikitext.
function _i18n.isWikitext(msg)
return
type(msg) == 'string' and
(
msg:find('%-%-%-%-') or
msg:find('%f[^\n%z][;:*#] ') or
msg:find('%f[^\n%z]==* *[^\n|]+ =*=%f[\n]') or
msg:find('%b<>') or msg:find('\'\'') or
msg:find('%[%b[]%]') or msg:find('{%b{}}')
)
end
--- I18n datastore class.
-- This is used to control language translation and access to individual
-- messages. The datastore instance provides language and message
-- getter-setter methods, which can be used to internationalize Lua modules.
-- The language methods (any ending in `Lang`) are all **chainable**.
-- @type Data
local Data = {}
Data.__index = Data
--- Datastore message getter utility.
-- This method returns localized messages from the datastore corresponding
-- to a `key`. These messages may have `$n` parameters, which can be
-- replaced by optional argument strings supplied by the `msg` call.
--
-- This function supports [[mw:Extension:Scribunto/Lua reference manual#named_arguments|named
-- arguments]]. The named argument syntax is more versatile despite its
-- verbosity; it can be used to select message language & source(s).
-- @function Data:msg
-- @usage
--
-- ds:msg{
-- key = 'message-name',
-- lang = '',
-- args = {...},
-- sources = {}
-- }
--
-- @usage
--
-- ds:msg('message-name', ...)
--
-- @param {string|table} opts Message configuration or key.
-- @param[opt] {string} opts.key Message key to return from the
-- datastore.
-- @param[opt] {table} opts.args Arguments to substitute into the
-- message (`$n`).
-- @param[opt] {table} opts.sources Source names to limit to (see
-- `Data:fromSources`).
-- @param[opt] {table} opts.lang Temporary language to use (see
-- `Data:inLang`).
-- @param[opt] {string} ... Arguments to substitute into the message
-- (`$n`).
-- @error[115] {string} 'missing arguments in Data:msg'
-- @return {string} Localised datastore message or `'<key>'`.
function Data:msg(opts, ...)
local frame = mw.getCurrentFrame()
-- Argument normalization.
if not self or not opts then
error('missing arguments in Data:msg')
end
local key = type(opts) == 'table' and opts.key or opts
local args = opts.args or {...}
-- Configuration parameters.
if opts.sources then
self:fromSources(unpack(opts.sources))
end
if opts.lang then
self:inLang(opts.lang)
end
-- Source handling.
local source_n = self.tempSources or self._sources
local source_i = {}
for n, i in pairs(source_n) do
source_i[i] = n
end
self.tempSources = nil
-- Language handling.
local lang = self.tempLang or self.defaultLang
self.tempLang = nil
-- Message fetching.
local msg
for i, messages in ipairs(self._messages) do
-- Message data.
local msg = (messages[lang] or {})[key]
-- Fallback support (experimental).
for _, l in ipairs((fallbacks[lang] or {})) do
if msg == nil then
msg = (messages[l] or {})[key]
end
end
-- Internal fallback to 'en'.
msg = msg ~= nil and msg or messages.en[key]
-- Handling argument substitution from Lua.
if msg and source_i[i] and #args > 0 then
msg = _i18n.handleArgs(msg, args)
end
if msg and source_i[i] and lang ~= 'qqx' then
return frame and _i18n.isWikitext(msg)
and frame:preprocess(mw.text.trim(msg))
or mw.text.trim(msg)
end
end
return '⧼' .. mw.text.nowiki(key) .. '⧽'
end
--- Datastore template parameter getter utility.
-- This method, given a table of arguments, tries to find a parameter's
-- localized name in the datastore and returns its value, or nil if
-- not present.
--
-- This method always uses the wiki's content language.
-- @function Data:parameter
-- @param {string} parameter Parameter's key in the datastore
-- @param {table} args Arguments to find the parameter in
-- @error[176] {string} 'missing arguments in Data:parameter'
-- @return {string|nil} Parameter's value or nil if not present
function Data:parameter(key, args)
-- Argument normalization.
if not self or not key or not args then
error('missing arguments in Data:parameter')
end
local contentLang = mw.language.getContentLanguage():getCode()
-- Message fetching.
for i, messages in ipairs(self._messages) do
local msg = (messages[contentLang] or {})[key]
if msg ~= nil and args[msg] ~= nil then
return args[msg]
end
for _, l in ipairs((fallbacks[contentLang] or {})) do
if msg == nil or args[msg] == nil then
-- Check next fallback.
msg = (messages[l] or {})[key]
else
-- A localized message was found.
return args[msg]
end
end
-- Fallback to English.
msg = messages.en[key]
if msg ~= nil and args[msg] ~= nil then
return args[msg]
end
end
end
--- Datastore temporary source setter to a specificed subset of datastores.
-- By default, messages are fetched from the datastore in the same
-- order of priority as `i18n.loadMessages`.
-- @function Data:fromSource
-- @param {string} ... Source name(s) to use.
-- @return {Data} Datastore instance.
function Data:fromSource(...)
local c = select('#', ...)
if c ~= 0 then
self.tempSources = {}
for i = 1, c do
local n = select(i, ...)
if type(n) == 'string' and type(self._sources[n]) == 'number' then
self.tempSources[n] = self._sources[n]
end
end
end
return self
end
--- Datastore default language getter.
-- @function Data:getLang
-- @return {string} Default language to serve datastore messages in.
function Data:getLang()
return self.defaultLang
end
--- Datastore language setter to `wgUserLanguage`.
-- @function Data:useUserLang
-- @return {Data} Datastore instance.
-- @note Scribunto only registers `wgUserLanguage` when an
-- invocation is at the top of the call stack.
function Data:useUserLang()
self.defaultLang = i18n.getLang() or self.defaultLang
return self
end
--- Datastore language setter to `wgContentLanguage`.
-- @function Data:useContentLang
-- @return {Data} Datastore instance.
function Data:useContentLang()
self.defaultLang = mw.language.getContentLanguage():getCode()
return self
end
--- Datastore language setter to specificed language.
-- @function Data:useLang
-- @param {string} code Language code to use.
-- @return {Data} Datastore instance.
function Data:useLang(code)
self.defaultLang = _i18n.isValidCode(code)
and code
or self.defaultLang
return self
end
--- Temporary datastore language setter to `wgUserLanguage`.
-- The datastore language reverts to the default language in the next
-- @{Data:msg} call.
-- @function Data:inUserLang
-- @return {Data} Datastore instance.
function Data:inUserLang()
self.tempLang = i18n.getLang() or self.tempLang
return self
end
--- Temporary datastore language setter to `wgContentLanguage`.
-- Only affects the next @{Data:msg} call.
-- @function Data:inContentLang
-- @return {Data} Datastore instance.
function Data:inContentLang()
self.tempLang = mw.language.getContentLanguage():getCode()
return self
end
--- Temporary datastore language setter to a specificed language.
-- Only affects the next @{Data:msg} call.
-- @function Data:inLang
-- @param {string} code Language code to use.
-- @return {Data} Datastore instance.
function Data:inLang(code)
self.tempLang = _i18n.isValidCode(code)
and code
or self.tempLang
return self
end
-- Package functions.
--- Localized message getter by key.
-- Can be used to fetch messages in a specific language code through `uselang`
-- parameter. Extra numbered parameters can be supplied for substitution into
-- the datastore message.
-- @function i18n.getMsg
-- @param {table} frame Frame table from invocation.
-- @param {table} frame.args Metatable containing arguments.
-- @param {string} frame.args[1] ROOTPAGENAME of i18n submodule.
-- @param {string} frame.args[2] Key of i18n message.
-- @param[opt] {string} frame.args.lang Default language of message.
-- @error[271] {string} 'missing arguments in i18n.getMsg'
-- @return {string} I18n message in localised language.
function i18n.getMsg(frame)
if
not frame or
not frame.args or
not frame.args[1] or
not frame.args[2]
then
error('missing arguments in i18n.getMsg')
end
local source = frame.args[1]
local key = frame.args[2]
-- Pass through extra arguments.
local repl = {}
for i, a in ipairs(frame.args) do
if i >= 3 then
repl[i-2] = a
end
end
-- Load message data.
local ds = i18n.loadMessages(source)
-- Pass through language argument.
ds:inLang(frame.args.uselang)
-- Return message.
return ds:msg { key = key, args = repl }
end
--- I18n message datastore loader.
-- @function i18n.loadMessages
-- @param {string} ... ROOTPAGENAME/path for target i18n
-- submodules.
-- @error[322] {string} 'no source supplied to i18n.loadMessages'
-- @return {table} I18n datastore instance.
-- @usage require('Module:I18n').loadMessages('1', '2')
function i18n.loadMessages(...)
local ds
local i = 0
local s = {}
for j = 1, select('#', ...) do
local source = select(j, ...)
if type(source) == 'string' and source ~= '' then
i = i + 1
s[source] = i
if not ds then
-- Instantiate datastore.
ds = {}
ds._messages = {}
-- Set default language.
setmetatable(ds, Data)
ds:useUserLang()
end
source = string.gsub(source, '^.', mw.ustring.upper)
local success, messages = pcall(mw.loadData, mw.ustring.find(source, ':')
and source
or 'Module:' .. source .. '/i18n')
if success then
local msgCopy = {}
local langSecond = nil
for lang_id, msgtbl in pairs(messages) do
if langSecond == nil then
if lang_id == "qqq" or fallbacks[lang_id] ~= nil then
langSecond = false
else
langSecond = true
end
end
for id_lang, msg in pairs(msgtbl) do
if langSecond then
msgCopy[id_lang] = msgCopy[id_lang] or {}
msgCopy[id_lang][lang_id] = msg
else
msgCopy[lang_id] = msgCopy[lang_id] or {}
msgCopy[lang_id][id_lang] = msg
end
end
end
ds._messages[i] = msgCopy
end
local tab = mw.ext.data.get('I18n/' .. source .. '.tab', '_')
local T = {}
if not success and not tab then error("i18n for " .. source .. " is missing") end
for _, row in pairs(tab.data) do -- convert the output into a dictionary table
local id, t = unpack(row)
for lang, msg in pairs(t) do
if not T[lang] then T[lang] = {} end
T[lang][id] = msg
end
end
if not success then
ds._messages[i] = T
else
for lang, msgTbl in pairs(T) do
ds._messages[i][lang] = ds._messages[i][lang] or msgTbl
end
end
end
end
if not ds then
error('no source supplied to i18n.loadMessages')
else
-- Attach source index map.
ds._sources = s
-- Return datastore instance.
return ds
end
end
--- Language code getter.
-- Can validate a template's language code through `uselang` parameter.
-- @function i18n.getLang
-- @return {string} Language code.
function i18n.getLang()
local frame = mw.getCurrentFrame() or {}
local parentFrame = frame.getParent and frame:getParent() or {}
local code = mw.language.getContentLanguage():getCode()
local subPage = title.subpageText
-- Language argument test.
local langOverride =
(frame.args or {}).uselang or
(parentFrame.args or {}).uselang
if _i18n.isValidCode(langOverride) then
code = langOverride
-- Subpage language test.
elseif title.isSubpage and _i18n.isValidCode(subPage) then
code = _i18n.isValidCode(subPage) and subPage or code
-- User language test.
elseif parentFrame.preprocess or frame.preprocess then
uselang = uselang
or parentFrame.preprocess
and parentFrame:preprocess('{{int:lang}}')
or frame:preprocess('{{int:lang}}')
local decodedLang = mw.text.decode(uselang)
if decodedLang ~= '<lang>' and decodedLang ~= '⧼lang⧽' then
code = decodedLang == '(lang)'
and 'qqx'
or uselang
end
end
return code
end
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge(t1, t2, overwrite)
for k,v in pairs(t2) do
if type(v) == "table" and type(t1[k]) == "table" then
-- since type(t1[k]) == type(v) == "table", so t1[k] and v is true
tableMerge(t1[k], v, overwrite) -- t2[k] == v
else
if overwrite or t1[k] == nil then t1[k] = v end
end
end
return t1
end
--- Given an i18n table instantiates the values (deprecated)
-- @function i18n.loadI18n
-- @param {string} name name of module with i18n
-- @param {table} i18n_arg existing i18n
function i18n.loadI18n(name, i18n_arg)
local exist, res = pcall(require, name)
if exist and next(res) ~= nil then
if i18n_arg then
tableMerge(i18n_arg, res.i18n, true)
end
end
end
--- Loads an i18n for a specific frame (deprecated)
-- @function i18n.loadI18nFrame
-- @param {string} name name of module with i18n
-- @param {table} i18n_arg existing i18n
function i18n.loadI18nFrame(frame, i18n_arg)
return i18n.loadI18n(frame:getTitle().."/i18n", i18n_arg)
end
--- Wrapper for the module.
-- @function i18n.main
-- @param {table} frame Frame invocation object.
-- @return {string} Module output in template context.
-- @usage {{#invoke:i18n|main}}
i18n.main = entrypoint(i18n)
return require("Module:Deprecated")(i18n,
{
["loadI18n"] = {
deprecated = true,
replacement = "use <code>i18n.loadMessages</code>"
},
["loadI18nFrame"] = {
deprecated = true,
replacement = "use <code>i18n.loadMessages</code>"
}
}
)
-- </nowiki>
mgfuyxvne0w09w2187b5onpo2rwoh53
पटिरूप:Circa
10
7476
104307
103954
2026-09-11T16:46:19Z
咽頭べさ
6149
104307
wikitext
text/x-wiki
{{#if:{{{sortable|}}}
|<span style="display:none;">{{{1|}}}</span>
}}{{#if:{{{i|}}}
|<nowiki/>''
}}{{#switch:{{{lk|}}}
|no|off = c.
|yes|on = [[Circa|c.]]
|abbr
|#default = {{Abbr|c.|आसन्नं}}
}}{{#if:{{{i|}}}
|''<nowiki/>
}}{{#if:{{{1|}}}
|<span style="white-space:nowrap;"> {{{1}}}</span>
}}{{#if:{{{2|}}}
| – c.<span style="white-space:nowrap;"> {{{2}}}</span>
}}<noinclude>
{{Documentation}}
</noinclude>
h066iuqhtwondgdgbaa9hlekavt7qhh
त्रिकुम्बसुवण्णचेति
0
7514
104313
104267
2026-09-11T17:28:00Z
咽頭べさ
6149
104313
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
45w8w55bzsbh0y72h8yqlhy7ipfi07x
104334
104313
2026-09-12T02:12:27Z
咽頭べさ
6149
104334
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
1vf2ge2nzjvyt89f318fceitrldc6l8
104347
104334
2026-09-12T02:49:47Z
咽頭べさ
6149
104347
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
k1tlmfhh1kfsqt2a3r0gvdiy765fk7o
104349
104347
2026-09-12T03:02:41Z
咽頭べさ
6149
104349
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं်]]
hoi8k6lbxe7u3cy14q1c6553nbikl7p
104350
104349
2026-09-12T03:43:25Z
咽頭べさ
6149
104350
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# ရरोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
n5jh9sh0osd66gjhb76035ozznx3o2p
104351
104350
2026-09-12T03:47:20Z
咽頭べさ
6149
104351
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# ရरोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
==सासनस्स आदि त्रिकुम्बतो==
उक्कलापमहाराजा च पजा च समवायेन धातुगब्भपासाणफलकस्स उपरि चतुचत्ताळीसहत्थुब्बेधं अनुत्तरं चेतियं पतिट्ठापेत्वा तं चेतियं "तिगुम्बचेतियं" ति अभिधानेन सुलोकितं अकासि॥ तं तिगुम्बचेतियं गोतमस्स भवतो सासने महितले पठममेव चेतियं होति॥ तस्मा मरम्मरट्ठे "सासनस्स आदि त्रिकुम्बतो" ति सुलिखितं महस्सितं होति॥
mgzef2pmmsvydp796vkio3t57wd9smn
104352
104351
2026-09-12T04:36:29Z
咽頭べさ
6149
104352
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# ရरोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
==सासनस्स आदि त्रिकुम्बतो==
उक्कलापमहाराजा च पजा च समवायेन धातुगब्भपासाणफलकस्स उपरि चतुचत्ताळीसहत्थुब्बेधं अनुत्तरं चेतियं पतिट्ठापेत्वा तं चेतियं "तिगुम्बचेतियं" ति अभिधानेन सुलोकितं अकासि॥ तं तिगुम्बचेतियं गोतमस्स भवतो सासने महितले पठममेव चेतियं होति॥ तस्मा मरम्मरट्ठे "सासनस्स आदि त्रिकुम्बतो" ति सुलिखितं महस्सितं होति॥
[[File:Shwedagon pagoda morning.jpg|thumb|150px|अरुणुग्गमने वन्दितानं दिस्समानरूपं ]]
==अब्भुतसन्दिट्ठि==
क्रिस १९०३ संवच्छरे मार्च दुतियदिवसे (१२६४ संवच्छरे फग्गुणसुक्कपक्खस्स पञ्चमदिवसे) चन्दवारे त्रिकुम्बसुवण्णचेतियस्स कुजकोणं अेका ब्यग्घो आरुय्ह अट्ठासि॥ तस्मा आणाधरमनुस्सा तं विज्झित्वा मारेसिंसू॥
ब्यग्घो घण्टाकारकण्णिकायं आरुय्ह निसीदि॥ वन्दिता मनुस्सा तं दिस्वा सम्भन्ता आकुला अभविंसू॥ चेतियमहामत्तेहि ई लॉफोर्ड उू श्वे वेइंग नामको मनुस्सो त्रिकुम्बनगराधिपतिस्स लिखितपण्णेन तस्मिं दिवसे पुब्बण्हसमये अट्ठममणियं ई लॉफोर्ड नामकं आहतुं अगामि॥ तं आयस्मन्तं बाहिरतो पच्चागच्छन्तं अन्तरामग्गे अद्दस॥ आसन्नानं घरानं सत्थं परियेसि॥ कैप्टन जीनिन नामकस्स घरतो द्विनिक्खन्तं सत्थं अलभि॥ ई लॉफोर्ड सद्धिं कैप्टन बीविल च कैप्टन जीनिन च अनुगच्छिंसू॥
ब्यग्घस्स सकलसरीरं अदिस्वा पिट्ठिञ्च पच्छिमपादे च वालधिञ्च एव अद्दसंसू॥ लॉफोर्ड जीनिन आयस्मन्तं मण्डपस्स उपरि आरुय्ह ठातुं आणापेसि॥ कैप्टन बीविल आयस्मन्तं लीबापूराजसेनातो दस युद्धिकमनुस्से आहतुं पेसि॥ चुद्दस युद्धिकमनुस्सा आगच्छिंसू॥ ते मनुस्से द्वे रासी अकासि॥ ततो कैप्टन जीनिन ठितस्स मण्डपस्स उभोसु पस्सेसु ठातुं आणापेसि॥ ततो लॉफोर्ड न आणादिन्नाय ब्यग्घं विज्झित्वा मारेसिंसू॥ कैप्टन जीनिन विज्झिता निक्खन्तनालिका उरसि च वामदक्खिणंसेसु च आहच्छिंसू॥ पुनप्पुनं विज्झन्ता ब्यग्घो तस्मिं पदेसे मतो विय अनिञ्चितो अहोसि॥ तथापि ब्यग्घो अमतो नादं करोन्तो अट्ठासि॥ जीनिन ब्यग्घस्स सन्तिकं वंससोपानेन आरोहि॥ ततो ब्यग्घस्स उरस्स मज्झे अेकवारं अविज्झि॥ तदा ब्यग्घो मतो अहोसि॥
तो ब्यग्घो दहरब्यग्घी होति॥ सरीरं अट्ठहत्थपमाणं अहोसि॥ सरीरम्हि पञ्च सत्थबिन्दू आहच्छिंसू॥ जीनिन आयस्मतो चतस्सो नालिका उरसि च पुरतो पिट्ठियं च पच्छा पिट्ठियं च हदयस्स मज्झे च आहच्छिंसू॥ युद्धिकमनुस्सानं अेका वारो एव आहतो अहोसि॥ पच्छिमपादस्स आसन्नेन केवलं वालधिं अविज्झि॥ वालधि छिन्ना पासाणकण्णिकायं लम्बिता अहोसि॥ सो ब्यग्घो चेतियं आरोहतो पुब्बे पुजोन्तो अमंसघातनट्ठानस्स आसन्ने चिनमनुस्सानं साकवत्थियं पदवालधिं अद्दसंसू॥ अपिच कोक काई उदककीळनपस्से अेकस्मिं वत्थिस्मिं अेकं धेनुं मारेत्वा खादि॥
तस्मिं काले चेतिये ब्यग्घस्स आरोहनस्स पवत्ति मनुस्सानं मुखेसु महाकथा अहोसि॥ जनपदगामेसु पवत्ति सम्पत्ता तस्मा नानादिसातो वन्दिता मनुस्सा आगच्छिंसू॥ तं पवत्तिं धाविदिगीतेहि रचयिंसू॥ अक्खरबद्धगीतेहि च रचयिंसू॥ अक्खरबद्धगीतं पन "त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा॥ अहो त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा। युद्धिकमनुस्सा परिवारेत्वा सत्थेन विज्झित्वा ब्यग्घो सुमतो" ति अहोसि॥ श्वे ताउंग लुआम आयस्मतो त्रिकुम्बचेतिये ब्यग्घस्स वन्दनअत्थाय आरोहनं नाम नाटकं मनुस्सानं अभिरुचितं होत्वा विक्किणितुं न अलं अहोसि॥ मनुस्सेसु पन चेतिये ब्यग्घस्स आरोहनं ह्मावबीदेवमहाराजो चेतियं वन्दितुं आगतो ति अपि वचनं अहोसि॥
noruc3v7tw0x732ei098i6dk6ccv1fh
104353
104352
2026-09-12T04:49:20Z
咽頭べさ
6149
104353
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# ရरोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
==सासनस्स आदि त्रिकुम्बतो==
उक्कलापमहाराजा च पजा च समवायेन धातुगब्भपासाणफलकस्स उपरि चतुचत्ताळीसहत्थुब्बेधं अनुत्तरं चेतियं पतिट्ठापेत्वा तं चेतियं "तिगुम्बचेतियं" ति अभिधानेन सुलोकितं अकासि॥ तं तिगुम्बचेतियं गोतमस्स भवतो सासने महितले पठममेव चेतियं होति॥ तस्मा मरम्मरट्ठे "सासनस्स आदि त्रिकुम्बतो" ति सुलिखितं महस्सितं होति॥
[[File:Shwedagon pagoda morning.jpg|thumb|150px|अरुणुग्गमने वन्दितानं दिस्समानरूपं ]]
==अब्भुतसन्दिट्ठि==
क्रिस १९०३ संवच्छरे मार्च दुतियदिवसे (१२६४ संवच्छरे फग्गुणसुक्कपक्खस्स पञ्चमदिवसे) चन्दवारे त्रिकुम्बसुवण्णचेतियस्स कुजकोणं अेका ब्यग्घो आरुय्ह अट्ठासि॥ तस्मा आणाधरमनुस्सा तं विज्झित्वा मारेसिंसू॥
ब्यग्घो घण्टाकारकण्णिकायं आरुय्ह निसीदि॥ वन्दिता मनुस्सा तं दिस्वा सम्भन्ता आकुला अभविंसू॥ चेतियमहामत्तेहि ई लॉफोर्ड उू श्वे वेइंग नामको मनुस्सो त्रिकुम्बनगराधिपतिस्स लिखितपण्णेन तस्मिं दिवसे पुब्बण्हसमये अट्ठममणियं ई लॉफोर्ड नामकं आहतुं अगामि॥ तं आयस्मन्तं बाहिरतो पच्चागच्छन्तं अन्तरामग्गे अद्दस॥ आसन्नानं घरानं सत्थं परियेसि॥ कैप्टन जीनिन नामकस्स घरतो द्विनिक्खन्तं सत्थं अलभि॥ ई लॉफोर्ड सद्धिं कैप्टन बीविल च कैप्टन जीनिन च अनुगच्छिंसू॥
ब्यग्घस्स सकलसरीरं अदिस्वा पिट्ठिञ्च पच्छिमपादे च वालधिञ्च एव अद्दसंसू॥ लॉफोर्ड जीनिन आयस्मन्तं मण्डपस्स उपरि आरुय्ह ठातुं आणापेसि॥ कैप्टन बीविल आयस्मन्तं लीबापूराजसेनातो दस युद्धिकमनुस्से आहतुं पेसि॥ चुद्दस युद्धिकमनुस्सा आगच्छिंसू॥ ते मनुस्से द्वे रासी अकासि॥ ततो कैप्टन जीनिन ठितस्स मण्डपस्स उभोसु पस्सेसु ठातुं आणापेसि॥ ततो लॉफोर्ड न आणादिन्नाय ब्यग्घं विज्झित्वा मारेसिंसू॥ कैप्टन जीनिन विज्झिता निक्खन्तनालिका उरसि च वामदक्खिणंसेसु च आहच्छिंसू॥ पुनप्पुनं विज्झन्ता ब्यग्घो तस्मिं पदेसे मतो विय अनिञ्चितो अहोसि॥ तथापि ब्यग्घो अमतो नादं करोन्तो अट्ठासि॥ जीनिन ब्यग्घस्स सन्तिकं वंससोपानेन आरोहि॥ ततो ब्यग्घस्स उरस्स मज्झे अेकवारं अविज्झि॥ तदा ब्यग्घो मतो अहोसि॥
तो ब्यग्घो दहरब्यग्घी होति॥ सरीरं अट्ठहत्थपमाणं अहोसि॥ सरीरम्हि पञ्च सत्थबिन्दू आहच्छिंसू॥ जीनिन आयस्मतो चतस्सो नालिका उरसि च पुरतो पिट्ठियं च पच्छा पिट्ठियं च हदयस्स मज्झे च आहच्छिंसू॥ युद्धिकमनुस्सानं अेका वारो एव आहतो अहोसि॥ पच्छिमपादस्स आसन्नेन केवलं वालधिं अविज्झि॥ वालधि छिन्ना पासाणकण्णिकायं लम्बिता अहोसि॥ सो ब्यग्घो चेतियं आरोहतो पुब्बे पुजोन्तो अमंसघातनट्ठानस्स आसन्ने चिनमनुस्सानं साकवत्थियं पदवालधिं अद्दसंसू॥ अपिच कोक काई उदककीळनपस्से अेकस्मिं वत्थिस्मिं अेकं धेनुं मारेत्वा खादि॥
तस्मिं काले चेतिये ब्यग्घस्स आरोहनस्स पवत्ति मनुस्सानं मुखेसु महाकथा अहोसि॥ जनपदगामेसु पवत्ति सम्पत्ता तस्मा नानादिसातो वन्दिता मनुस्सा आगच्छिंसू॥ तं पवत्तिं धाविदिगीतेहि रचयिंसू॥ अक्खरबद्धगीतेहि च रचयिंसू॥ अक्खरबद्धगीतं पन "त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा॥ अहो त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा। युद्धिकमनुस्सा परिवारेत्वा सत्थेन विज्झित्वा ब्यग्घो सुमतो" ति अहोसि॥ श्वे ताउंग लुआम आयस्मतो त्रिकुम्बचेतिये ब्यग्घस्स वन्दनअत्थाय आरोहनं नाम नाटकं मनुस्सानं अभिरुचितं होत्वा विक्किणितुं न अलं अहोसि॥ मनुस्सेसु पन चेतिये ब्यग्घस्स आरोहनं ह्मावबीदेवमहाराजो चेतियं वन्दितुं आगतो ति अपि वचनं अहोसि॥
==घण्टायो==
त्रिकुम्बसुवण्णचेतियस्स चेतिहङ्गणे सब्बकसा चुद्दसुत्तरवीसति २९ घण्टायो सन्ति॥
# तो १४७७ संवच्छरे क्रिस (कोजासक्कराजे ८३८ संवच्छरे) रामञ्ञराजा धम्मचेतिमहाराजो अविन्दछोक्नामकं धम्मचेतिमहाघण्टं अट्ठारससहस्साधिकसतसहस्स १८०००० कंसतुलापमाणं सुन्धित्वा अभिपूजेसि॥
# सिंट कूराजाघण्टा क्रिस १७७८ संवच्छरे महाराजो सुन्धिं॥ सुन्धेन्तन्तरे १०३८ संवच्छरे महाराजो देवलोकं अगामि॥ पुत्तो सिंट कूराजा अनुसन्धेसि॥ तुलापमाणं पञ्चपञ्चाससहस्सपञ्चसतपञ्चपञ्चास १५५५५ होति॥
# सायावतीराजाघण्टा क्रिस १८४१ संवच्छरे सायावतीराजा (अथ वा) श्वेबो राजो सब्बीसतिसहस्स २६००व कंसतुलापमाणं महाघण्टं सुन्धित्वा अभिपूजेसि॥
iex99hq7qbn4rujne6vzgfs9qbhwsq3
104354
104353
2026-09-12T04:49:51Z
咽頭べさ
6149
104354
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# रोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
==सासनस्स आदि त्रिकुम्बतो==
उक्कलापमहाराजा च पजा च समवायेन धातुगब्भपासाणफलकस्स उपरि चतुचत्ताळीसहत्थुब्बेधं अनुत्तरं चेतियं पतिट्ठापेत्वा तं चेतियं "तिगुम्बचेतियं" ति अभिधानेन सुलोकितं अकासि॥ तं तिगुम्बचेतियं गोतमस्स भवतो सासने महितले पठममेव चेतियं होति॥ तस्मा मरम्मरट्ठे "सासनस्स आदि त्रिकुम्बतो" ति सुलिखितं महस्सितं होति॥
[[File:Shwedagon pagoda morning.jpg|thumb|150px|अरुणुग्गमने वन्दितानं दिस्समानरूपं ]]
==अब्भुतसन्दिट्ठि==
क्रिस १९०३ संवच्छरे मार्च दुतियदिवसे (१२६४ संवच्छरे फग्गुणसुक्कपक्खस्स पञ्चमदिवसे) चन्दवारे त्रिकुम्बसुवण्णचेतियस्स कुजकोणं अेका ब्यग्घो आरुय्ह अट्ठासि॥ तस्मा आणाधरमनुस्सा तं विज्झित्वा मारेसिंसू॥
ब्यग्घो घण्टाकारकण्णिकायं आरुय्ह निसीदि॥ वन्दिता मनुस्सा तं दिस्वा सम्भन्ता आकुला अभविंसू॥ चेतियमहामत्तेहि ई लॉफोर्ड उू श्वे वेइंग नामको मनुस्सो त्रिकुम्बनगराधिपतिस्स लिखितपण्णेन तस्मिं दिवसे पुब्बण्हसमये अट्ठममणियं ई लॉफोर्ड नामकं आहतुं अगामि॥ तं आयस्मन्तं बाहिरतो पच्चागच्छन्तं अन्तरामग्गे अद्दस॥ आसन्नानं घरानं सत्थं परियेसि॥ कैप्टन जीनिन नामकस्स घरतो द्विनिक्खन्तं सत्थं अलभि॥ ई लॉफोर्ड सद्धिं कैप्टन बीविल च कैप्टन जीनिन च अनुगच्छिंसू॥
ब्यग्घस्स सकलसरीरं अदिस्वा पिट्ठिञ्च पच्छिमपादे च वालधिञ्च एव अद्दसंसू॥ लॉफोर्ड जीनिन आयस्मन्तं मण्डपस्स उपरि आरुय्ह ठातुं आणापेसि॥ कैप्टन बीविल आयस्मन्तं लीबापूराजसेनातो दस युद्धिकमनुस्से आहतुं पेसि॥ चुद्दस युद्धिकमनुस्सा आगच्छिंसू॥ ते मनुस्से द्वे रासी अकासि॥ ततो कैप्टन जीनिन ठितस्स मण्डपस्स उभोसु पस्सेसु ठातुं आणापेसि॥ ततो लॉफोर्ड न आणादिन्नाय ब्यग्घं विज्झित्वा मारेसिंसू॥ कैप्टन जीनिन विज्झिता निक्खन्तनालिका उरसि च वामदक्खिणंसेसु च आहच्छिंसू॥ पुनप्पुनं विज्झन्ता ब्यग्घो तस्मिं पदेसे मतो विय अनिञ्चितो अहोसि॥ तथापि ब्यग्घो अमतो नादं करोन्तो अट्ठासि॥ जीनिन ब्यग्घस्स सन्तिकं वंससोपानेन आरोहि॥ ततो ब्यग्घस्स उरस्स मज्झे अेकवारं अविज्झि॥ तदा ब्यग्घो मतो अहोसि॥
तो ब्यग्घो दहरब्यग्घी होति॥ सरीरं अट्ठहत्थपमाणं अहोसि॥ सरीरम्हि पञ्च सत्थबिन्दू आहच्छिंसू॥ जीनिन आयस्मतो चतस्सो नालिका उरसि च पुरतो पिट्ठियं च पच्छा पिट्ठियं च हदयस्स मज्झे च आहच्छिंसू॥ युद्धिकमनुस्सानं अेका वारो एव आहतो अहोसि॥ पच्छिमपादस्स आसन्नेन केवलं वालधिं अविज्झि॥ वालधि छिन्ना पासाणकण्णिकायं लम्बिता अहोसि॥ सो ब्यग्घो चेतियं आरोहतो पुब्बे पुजोन्तो अमंसघातनट्ठानस्स आसन्ने चिनमनुस्सानं साकवत्थियं पदवालधिं अद्दसंसू॥ अपिच कोक काई उदककीळनपस्से अेकस्मिं वत्थिस्मिं अेकं धेनुं मारेत्वा खादि॥
तस्मिं काले चेतिये ब्यग्घस्स आरोहनस्स पवत्ति मनुस्सानं मुखेसु महाकथा अहोसि॥ जनपदगामेसु पवत्ति सम्पत्ता तस्मा नानादिसातो वन्दिता मनुस्सा आगच्छिंसू॥ तं पवत्तिं धाविदिगीतेहि रचयिंसू॥ अक्खरबद्धगीतेहि च रचयिंसू॥ अक्खरबद्धगीतं पन "त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा॥ अहो त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा। युद्धिकमनुस्सा परिवारेत्वा सत्थेन विज्झित्वा ब्यग्घो सुमतो" ति अहोसि॥ श्वे ताउंग लुआम आयस्मतो त्रिकुम्बचेतिये ब्यग्घस्स वन्दनअत्थाय आरोहनं नाम नाटकं मनुस्सानं अभिरुचितं होत्वा विक्किणितुं न अलं अहोसि॥ मनुस्सेसु पन चेतिये ब्यग्घस्स आरोहनं ह्मावबीदेवमहाराजो चेतियं वन्दितुं आगतो ति अपि वचनं अहोसि॥
==घण्टायो==
त्रिकुम्बसुवण्णचेतियस्स चेतिहङ्गणे सब्बकसा चुद्दसुत्तरवीसति २९ घण्टायो सन्ति॥
# तो १४७७ संवच्छरे क्रिस (कोजासक्कराजे ८३८ संवच्छरे) रामञ्ञराजा धम्मचेतिमहाराजो अविन्दछोक्नामकं धम्मचेतिमहाघण्टं अट्ठारससहस्साधिकसतसहस्स १८०००० कंसतुलापमाणं सुन्धित्वा अभिपूजेसि॥
# सिंट कूराजाघण्टा क्रिस १७७८ संवच्छरे महाराजो सुन्धिं॥ सुन्धेन्तन्तरे १०३८ संवच्छरे महाराजो देवलोकं अगामि॥ पुत्तो सिंट कूराजा अनुसन्धेसि॥ तुलापमाणं पञ्चपञ्चाससहस्सपञ्चसतपञ्चपञ्चास १५५५५ होति॥
# सायावतीराजाघण्टा क्रिस १८४१ संवच्छरे सायावतीराजा (अथ वा) श्वेबो राजो सब्बीसतिसहस्स २६००व कंसतुलापमाणं महाघण्टं सुन्धित्वा अभिपूजेसि॥
q4t4elkzyu99tprytjwrv0yfblx6yzz
104355
104354
2026-09-12T05:20:21Z
咽頭べさ
6149
104355
wikitext
text/x-wiki
{{Infobox religious building
|image = Shwedagon-Pano.jpg
|image_size = 240px
|caption = त्रिकुम्बसुवण्णचेतियं
|name = त्रिकुम्बसुवण्णचेतियं
|native_name =
|native_name_lang = mon
|former_names = सुवण्णदगुन्तचेतियं
|alternate_names = चतुधातुघरं त्रिकुम्बसुवण्णचेतियं
|location =सिङ्गुत्तरुच्चट्ठानं। [[त्रिकुम्बनगरं]]। [[मरम्मरट्ठं]]
| map_type = मरम्मरट्ठं
| map_size = 250
| coordinates = {{coord|16.798354|96.149705|region:MM|display=inline,title}}
| religious_affiliation = [[बुद्धसासनं]]
| sect = [[थेरवाद बुद्धभासनं]]
|antenna_spire = {{Convert|112.17|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
|roof = {{Convert|105|m|ft|0|abbr=on}}{{Citation needed|date=February 2011}}
| height_max = {{convert|105|m|abbr=on}}
| spire_height = {{convert|112.17|m|ft|0|abbr=on}}
| governing_body = त्रिकुम्बसुवण्णचेतियपालनसमवायो
|embedded = {{Designation list|embed=yes|designation1=Yangon}}
| year_completed = {{circa}} पुब्बेखित्थपूरणं ६ राजसतं
|architect =[[सेतहत्थिराजा]]
|building_type = [[बुद्धसासनं]] वन्दनट्ठानं
|url = {{url|www.shwedagonpagoda.com}}
[[File:Crows-bells-voices-in-bkg-schwedagon.wav|mini]]त्रिकुम्बसुवण्णचेतियिकायं घण्टासद्दो
}}
'''त्रिकुम्बसुवण्णचेति'''यं तेत्तिंसुत्तरसतद्विहत्थं (३२६ हत्थं) उच्चं हुत्वा त्रिकुम्बनगरे सिङ्गुत्तरतले पतिट्ठितं होति॥ चतुन्नं बुद्धानं धातूनं निधीयनं आरब्भ "चतुधातुनिधि त्रिकुम्बसुवण्णं" तिपि वुच्चति॥ केचि पन "चेतियमूलं त्रिकुम्बसुवण्णतो" तिपि वदन्ति॥ वत्तमान उच्चताणुरूपं चेतियं पन [[कोनबाउंग युग]] [[सेतहत्थिपतिमहाराजा|सेतहत्थिपतिमहाराजेन]] १७६८ वस्से महाभूमिचलनेन विनासितं पोराणचेतियं अन्तोकरोन्तेन [[रामञ्ञमनुस्सा|रामञ्ञ]][[मरम्ममनुस्सा|मरम्म]]बिन्धुकप्पनहत्थेन अच्छरियेहि अणुरूपेहि पुन निम्मितं होति। १७७५ वस्से च नवं छत्तं आरोपितं॥
[[File:Shwedagon Pagoda.jpg|thumb|150px|दुतियमहायुद्धकाले त्रिकुम्बसुवण्णचेतियस्स रूपं]]
==आभिधेय्यअक्कमो==
पुब्बे त्रिकुम्बरट्ठन्ति नामग्गहणतो। रामञ्ञराजा उक्कलापो रज्जं कारेसि। तं दगुणरट्ठन्ति सञ्जानिंसू॥ अथ पच्छा [[रामञ्ञमनुस्सा]] [[तफुस्स च भल्लिका|तफुस्सभल्लिका]] वाणिजभातरो भगवतो केसाधातुयो आहरित्वा सिङ्गुत्तरतले चेतियं पटिट्ठापेसुं। तस्मिञ्च चेतिये [[गोतमबुद्ध|गोतम]]स्स भगवतो अट्ठ केसाधातूहि सह पुब्बकानं तिण्णं बुद्धानं धातूनं निधिहितत्ता तिगुम्बचेतियं नाम अहोसि॥ तस्मा तिगुम्बतो पट्ठाय दगुणभावं पापुणि। पोराणनगरनामे अन्तरहिते दगुणरट्ठे पटिट्ठितत्ता क्यावदगुणन्ति समुस्सिता॥ ततिय [[मरम्मरट्ठं]] पटिट्ठापेन्तस्स [[अलाउंग मिनताया]] केस्स काले दगुणं त्रिकुम्बनगरन्ति नामं परिवत्तेसि॥ ततो पट्ठाय तिगुम्बकेसाधातुचेतियं त्रिकुम्बसुवण्णचेतियन्ति नामेन अव्हयिंसू॥
[[File:Shwe Dagon Pagoda, 2011.jpg|thumb|150px|रत्तिया त्रिकुम्बसुवण्णचेतियं वन्दितानं दिस्समानरूपं]]
==वंसत्थो==
पुब्बे पुरिमके भगवतो बुद्धस्स उप्पन्नकाले पुरा भीची ५८८ वस्से इध अधोमरम्मरट्ठे त्रिकुम्बनगरस्स आसन्ने तिट्ठितस्स उक्कलापमहाराजस्स रज्जे असिञ्चननगरे सुवण्णो नाम महासेट्ठी अहोसि॥ तस्स सेट्ठिस्स तफुस्सो च भल्लिको च ति द्वे पुत्ता अहेसुं॥ ते वाणिजा अहेसुं॥ ते वाणिजा भाण्डानि नावाय आरोपेत्वा जम्बुदीपं किणितुं विक्किणितुं च गच्छिंसु॥ मज्झिमदेसस्स समुद्दपट्टनं पत्ता काले नावं सण्ठापेत्वा किणितब्ब विक्किणितब्ब भाण्डानि पञ्चसतेसु सकटेसु आरोपेत्वा जम्बुदीपे आहिण्डित्वा विक्किणिंसु॥ तफुस्सभल्लिका वाणिजभातरो महाबोधिरुक्खस्स आसन्नं पापुणिंसु॥ वाणिजा महाबोधिरुक्खस्स आसन्नं पापुणित्वा एकस्मिं दिवसे वा एकस्सं रत्तियं वा रुक्खदेवता तेसं वाणिजानं अत्तानं पातुकरोसि॥ वाणिजभातरो रुक्खदेवतं दिस्वा आच्छरियब्भुतचित्ता अहेसुं॥ "अवुसो। त्वं को असि" ति पुच्छिंसु॥ रुक्खदेवता "अवुसो। सुणाथ। अहं अञ्ञो न होमि॥ अहं पुब्बे अतीतभावे तुम्हाकं ञाति पुरिसो अहोसिं॥ अहं पुब्बे अतीतभावे कुसलकम्मं कत्वा इध भावे रुक्खदेवता अहोसिं॥ अवुसो। अहं इधानि तुम्हाकं सन्तिकं आगतो तुम्हाकं मय्हञ्च अतीतभावे ञातिभावस्स अत्थिताय तुम्हाकं अत्थं कातुं एवं अत्तानं पातुकरोमि" ति आह॥ वाणिजा "अवुसो। त्वं किं अत्थं कातुं आगतो असि" ति रुक्खदेवतं पुच्छिंसु॥ तदा रुक्खदेवता "सुणाथ अवुसो। मया तुम्हाकं अत्थं करणं नाम अञ्ञं न होति॥ तुम्हेहि पापुणिते स्मिं मज्झिमदेसे तिलोकगुरु सम्मासम्बुद्धो उप्पन्नो हुत्वा राजायतनरुक्खमूले विहरति॥ तस्मा तुम्हे तं भगवन्तं उपसङ्कमित्वा पूजेथ। अहं तुम्हाकं एवं उय्योजेतुं लोहितुं इच्छामि" ति आह॥ तदा तफुस्सो च भल्लिको च वाणिजभातरो अतिविय तुट्ठमानसा अहेसुं॥ सज्जुकमेव "अवुसो रुक्खदेवत। तेन हि मग्गं आचिक्खहि" ति आहंसु॥ ततो पच्छा रुक्खदेवता तफुस्सभल्लिकानं वाणिजानं भगवतो विहरणट्ठानं राजायतनरुक्खमूलस्स मग्गं आचिक्खि॥ तदा वाणिजभातरो सद्धापीतिपुण्णचित्ता भगवतो विहरणट्ठानं राजायतनरुक्खमूलं गञ्छिंसु॥ भगवन्तं मन्थञ्च मधुपिण्डिकञ्च अभिहरन्ता पूजेसिंसु॥
==पठमं सरणं गता==
[[रामञ्ञमनुस्सा|रामञ्ञ]]वाणिजभातरो भगवन्तं मन्थकेन च मधुपिण्डिकेन च पूजेत्वा अदंसु॥ भगवा इमिस्सा पूजाय "बुद्धं सरणं गच्छामि। धम्मं सरणं गच्छामि" ति द्वेवाचिकं सरणगमनं पटिलभिंसु॥ तस्मिं काले बुद्धरतनञ्च धम्मरतनञ्च द्वेयेव रतनानि पातुभूतानि अहेसुं। संघरतनं सम्पत्तं न अहोसि॥ तस्मा बहुजना द्वेयेव रतनानि उपसङ्कमित्वा पूजेन्ति॥ बुद्धवंसं विलोकेन्तो गोतमभुगवतो काले तपुस्स भल्लिका द्वे वाणिजभातरो अच्छरियं भगवतो पठमं पिण्डपातं दातारो च पठमं सरणं गता च अहेसुं॥
==केसधातुयो अट्ठ==
भगवन्तं पूजेतुं भत्तं दातुं च लद्धा पीतिमनसा तपुस्स भल्लिका च द्वे [[रामञ्ञमनुस्सा|रामञ्ञ]] वाणिजा भातारो भत्तं दत्वा पूजेत्वा "भन्ते। अम्हेहि सद्दा सद्धं सद्धम्मं पूजेतुं सक्का होन्तेन भगवतो पटिनिधिं अम्हेहि पूजेतुं किञ्चि अनुग्गहं करोहि" ति याचिंसू॥ "साधु। पुत्ता" ति वत्वा ञात्वा च उत्तमङ्गं सम्मसित्वा अट्ठ केसधातुयो वाणिजानं भातरानं अदासि॥ तपुस्स भल्लिका च वाणिजा भातारो पीतिमनसा पूरिता अट्ठ केसधातुयो नावाय उक्कलापरज्जं पच्चागमिंसू॥ तपुस्स भल्लिका च वाणिजा भातारो भगवतो अट्ठ केसधातुयो पिट्ठेत्वा उक्कलापरज्जं पच्चागते उक्कलापरज्जस्स उक्कलापमहाराजा च अञ्ञे च पजा साधुकारं दत्वा महन्तेन सक्कारेन पटिग्गण्हिंसू च वन्दिंसू च॥
==जेट्ठभातुचेतियं==
तथा चतस्सो केसधातुयो चेतियट्ठाने निधितुं पूजेतुं च निच्छयं अकंसू॥ चेतियं सिङ्गुत्तरसिखरे निधितुं महाराजा च पजा च निच्छिनित्वा सिङ्गुत्तरसिखरं पेसिंसू॥ सिङ्गुत्तरसिखरं पत्तानं बुद्धस्स चतस्सो केसधातुयो महन्ते विहारमण्डपे ठपेत्वा पूजेसिंसू॥ तस्मिं विहारमण्डपट्ठाने सारणीयचेतियं अेकं पतिट्ठापेसिंसू॥ तं चेतियं जेट्ठभातुचेतियं नामेन सञ्ञातं होति॥
[[File:Pagoda_Shwe_Dagon_34.jpg|thumb|जेट्ठभातुचेतियं]]
==निहिता चतस्सो धातुयो==
उक्कलापमहाराजेन पतिट्ठापिते त्रिकुम्बसुवण्णचेतिये चतुन्नं बुद्धानं चतस्सो धातुयो निहिता होन्तीति वुत्तं होति॥ बुद्धानं केसधातुयो च अञ्ञा धातुयो च सत्तूहि सुखेन विनासेतुं असक्कुणेय्या कातुं देवता धातुगब्भं पवेसेत्वा निधातुं चिन्तेत्वा सिङ्गुत्तरसिखरस्स मज्झे गम्भीरतो चतुसताधिकचतुहत्थं अत्थङ्गुलतो चतुचत्ताळीसहत्थं आयतं अन्तोहुम्बं खणिंसू॥ तस्मिं अन्तोहुम्बे
# सूलदेवमहाराजतो लद्धं ककुसन्धस्स भगवतो कत्तरदण्डञ्च॥
# रोहणिनामका तिलक्खदेवमहाराजतो लद्धं कोणागमनस्स भगवतो परिस्सावनञ्च॥
# दक्खिणनामका कसंदेवमहाराजतो लद्धं कस्सपस्स भगवतो उदकसाटिकञ्च॥
# तपुस्स भल्लिकानं भातरानं हत्थतो लद्धायो गोतमस्स भगवतो चतस्सो केसधातुयो च महासक्कराजे १०३ संवच्छरे फग्गुणपुण्णमासियं पासाणफलकेहि धातुगब्भं कत्वा पवेसेत्वा निदहिंसू॥ ता केसधातुयो '''अमरिस्सर''' नामकेन ह्मावबीदेवमहाराजेन रक्खिता ति नासादड्ढराजवंसइतिहासे च त्रिकुम्बसुवण्णचेतियइतिहासे च अञ्ञेहि पण्डितेहि च वुत्तं॥ ततो पासाणगब्भस्स उपरि पासाणफलकं ठपेत्वा धातुगब्भं पिधहिंसू॥
==सासनस्स आदि त्रिकुम्बतो==
उक्कलापमहाराजा च पजा च समवायेन धातुगब्भपासाणफलकस्स उपरि चतुचत्ताळीसहत्थुब्बेधं अनुत्तरं चेतियं पतिट्ठापेत्वा तं चेतियं "तिगुम्बचेतियं" ति अभिधानेन सुलोकितं अकासि॥ तं तिगुम्बचेतियं गोतमस्स भवतो सासने महितले पठममेव चेतियं होति॥ तस्मा मरम्मरट्ठे "सासनस्स आदि त्रिकुम्बतो" ति सुलिखितं महस्सितं होति॥
[[File:Shwedagon pagoda morning.jpg|thumb|150px|अरुणुग्गमने वन्दितानं दिस्समानरूपं ]]
==अब्भुतसन्दिट्ठि==
क्रिस १९०३ संवच्छरे मार्च दुतियदिवसे (१२६४ संवच्छरे फग्गुणसुक्कपक्खस्स पञ्चमदिवसे) चन्दवारे त्रिकुम्बसुवण्णचेतियस्स कुजकोणं अेका ब्यग्घो आरुय्ह अट्ठासि॥ तस्मा आणाधरमनुस्सा तं विज्झित्वा मारेसिंसू॥
ब्यग्घो घण्टाकारकण्णिकायं आरुय्ह निसीदि॥ वन्दिता मनुस्सा तं दिस्वा सम्भन्ता आकुला अभविंसू॥ चेतियमहामत्तेहि ई लॉफोर्ड उू श्वे वेइंग नामको मनुस्सो त्रिकुम्बनगराधिपतिस्स लिखितपण्णेन तस्मिं दिवसे पुब्बण्हसमये अट्ठममणियं ई लॉफोर्ड नामकं आहतुं अगामि॥ तं आयस्मन्तं बाहिरतो पच्चागच्छन्तं अन्तरामग्गे अद्दस॥ आसन्नानं घरानं सत्थं परियेसि॥ कैप्टन जीनिन नामकस्स घरतो द्विनिक्खन्तं सत्थं अलभि॥ ई लॉफोर्ड सद्धिं कैप्टन बीविल च कैप्टन जीनिन च अनुगच्छिंसू॥
ब्यग्घस्स सकलसरीरं अदिस्वा पिट्ठिञ्च पच्छिमपादे च वालधिञ्च एव अद्दसंसू॥ लॉफोर्ड जीनिन आयस्मन्तं मण्डपस्स उपरि आरुय्ह ठातुं आणापेसि॥ कैप्टन बीविल आयस्मन्तं लीबापूराजसेनातो दस युद्धिकमनुस्से आहतुं पेसि॥ चुद्दस युद्धिकमनुस्सा आगच्छिंसू॥ ते मनुस्से द्वे रासी अकासि॥ ततो कैप्टन जीनिन ठितस्स मण्डपस्स उभोसु पस्सेसु ठातुं आणापेसि॥ ततो लॉफोर्ड न आणादिन्नाय ब्यग्घं विज्झित्वा मारेसिंसू॥ कैप्टन जीनिन विज्झिता निक्खन्तनालिका उरसि च वामदक्खिणंसेसु च आहच्छिंसू॥ पुनप्पुनं विज्झन्ता ब्यग्घो तस्मिं पदेसे मतो विय अनिञ्चितो अहोसि॥ तथापि ब्यग्घो अमतो नादं करोन्तो अट्ठासि॥ जीनिन ब्यग्घस्स सन्तिकं वंससोपानेन आरोहि॥ ततो ब्यग्घस्स उरस्स मज्झे अेकवारं अविज्झि॥ तदा ब्यग्घो मतो अहोसि॥
तो ब्यग्घो दहरब्यग्घी होति॥ सरीरं अट्ठहत्थपमाणं अहोसि॥ सरीरम्हि पञ्च सत्थबिन्दू आहच्छिंसू॥ जीनिन आयस्मतो चतस्सो नालिका उरसि च पुरतो पिट्ठियं च पच्छा पिट्ठियं च हदयस्स मज्झे च आहच्छिंसू॥ युद्धिकमनुस्सानं अेका वारो एव आहतो अहोसि॥ पच्छिमपादस्स आसन्नेन केवलं वालधिं अविज्झि॥ वालधि छिन्ना पासाणकण्णिकायं लम्बिता अहोसि॥ सो ब्यग्घो चेतियं आरोहतो पुब्बे पुजोन्तो अमंसघातनट्ठानस्स आसन्ने चिनमनुस्सानं साकवत्थियं पदवालधिं अद्दसंसू॥ अपिच कोक काई उदककीळनपस्से अेकस्मिं वत्थिस्मिं अेकं धेनुं मारेत्वा खादि॥
तस्मिं काले चेतिये ब्यग्घस्स आरोहनस्स पवत्ति मनुस्सानं मुखेसु महाकथा अहोसि॥ जनपदगामेसु पवत्ति सम्पत्ता तस्मा नानादिसातो वन्दिता मनुस्सा आगच्छिंसू॥ तं पवत्तिं धाविदिगीतेहि रचयिंसू॥ अक्खरबद्धगीतेहि च रचयिंसू॥ अक्खरबद्धगीतं पन "त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा॥ अहो त्रिकुम्बचेतिये ब्यग्घस्स आरोहनं पञ्चदिवसा। युद्धिकमनुस्सा परिवारेत्वा सत्थेन विज्झित्वा ब्यग्घो सुमतो" ति अहोसि॥ श्वे ताउंग लुआम आयस्मतो त्रिकुम्बचेतिये ब्यग्घस्स वन्दनअत्थाय आरोहनं नाम नाटकं मनुस्सानं अभिरुचितं होत्वा विक्किणितुं न अलं अहोसि॥ मनुस्सेसु पन चेतिये ब्यग्घस्स आरोहनं ह्मावबीदेवमहाराजो चेतियं वन्दितुं आगतो ति अपि वचनं अहोसि॥
==घण्टायो==
त्रिकुम्बसुवण्णचेतियस्स चेतिहङ्गणे सब्बकसा चुद्दसुत्तरवीसति २९ घण्टायो सन्ति॥
# तो १४७७ संवच्छरे क्रिस (कोजासक्कराजे ८३८ संवच्छरे) रामञ्ञराजा धम्मचेतिमहाराजो अविन्दछोक्नामकं धम्मचेतिमहाघण्टं अट्ठारससहस्साधिकसतसहस्स १८०००० कंसतुलापमाणं सुन्धित्वा अभिपूजेसि॥
# सिंट कूराजाघण्टा क्रिस १७७८ संवच्छरे महाराजो सुन्धिं॥ सुन्धेन्तन्तरे १०३८ संवच्छरे महाराजो देवलोकं अगामि॥ पुत्तो सिंट कूराजा अनुसन्धेसि॥ तुलापमाणं पञ्चपञ्चाससहस्सपञ्चसतपञ्चपञ्चास १५५५५ होति॥
# सायावतीराजाघण्टा क्रिस १८४१ संवच्छरे सायावतीराजा (अथ वा) श्वेबो राजो सब्बीसतिसहस्स २६००व कंसतुलापमाणं महाघण्टं सुन्धित्वा अभिपूजेसि॥
[[File:Yangon70.JPG|thumb|150px|त्रिकुम्बसुवण्णचेतियस्स उत्तरद्वारमुखं]]
==पवत्ति==
क्रिस १७६८ संवच्छरे म्याय डूराजास्स काले महाभूमिकम्पो अहोसि॥ तस्मा चेतियस्स बलिसपरियन्तं पतितं अहोसि॥ ततो सेतहत्थिराजा सद्धिं इदानि वन्दितं तिसतद्वावीसति ३२६ हत्थुब्बेधं महाचेतियं पुराणचेतियं अन्तो कत्वा पतिट्ठापेत्वा अभिपूजेसि॥ इदानि चेतियस्स आयु द्वेसहस्सछसत २६वव संवच्छरानि अहोसि॥ त्रिकुम्बसुवण्णचेतिये अभिपूजितानि सुवण्णफलकानि सुवण्णचीवरानि च तेत्तिंससहस्सछसत ३३६वव फलकमत्तानि सन्ति॥ सुद्धसुवण्णं तीनि तन् अड्ढञ्च होति॥ नरगिसवातमण्डलेन निक्खन्तपतितानि सुवण्णचुण्णानि नव तुलापमाणं पच्चाहरिंसू॥ इदानि नरगिसवातमण्डलस्स वातवेगतो बहूतरं वातवेगं सहितुं विधानं करोन्ता महाभूमिकम्पदण्डम्पि सहितुं पटिसङ्खरोन्ति॥ धजअग्गतो घण्टापरियन्तं भारं छसततंपमाणं धारेति॥ पदुमुपरिपदुमाधोभागं चतीलदण्डेहि चतीलसंवट्टेहि चतीलसंबन्धेहि च बन्धित्वा अन्तोपुराणचेतियस्स च इदानि निहितचेतियस्स च मज्झे अनन्तरट्ठानानि सुधारसं आसिञ्चिस्सन्ति॥ पदुमुपरिपदुमाधोभागस्स अन्तोपदेसं दळ्हं करणमुखे सहस्ससत १ववव सहस्समत्तं कहापणा ब्ययिस्सन्ति॥ आवस्सकानि दब्बानि वुत्तचतील अयिससुधाचुण्णानि सद्धावन्तेहि दायकेहि धनं दत्वा पूजितानि अहोसिंसू॥
iveg53nw6bagjfz7yjkaqbf9jmtbt98
पटिरूप:Infobox religious building
10
7515
104268
2026-09-11T13:07:46Z
咽頭べさ
6149
Created page with "{{infobox | bodyclass = vcard | bodystyle = border-spacing:2px; width:250px | abovestyle = font-size:larger; background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}} | aboveclass = fn org | above = {{{name|{{{building_name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}}}}} | subheader = {{#if:{{{native_name|}}}|<span class="nickname" {{#if:{{{native_name_lang|}}}|lang="{{{native_name_lang}}}"}}>{{{native_name}}}</span>}} | subheaderstyle = backg..."
104268
wikitext
text/x-wiki
{{infobox
| bodyclass = vcard
| bodystyle = border-spacing:2px; width:250px
| abovestyle = font-size:larger; background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| aboveclass = fn org
| above = {{{name|{{{building_name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}}}}}
| subheader = {{#if:{{{native_name|}}}|<span class="nickname" {{#if:{{{native_name_lang|}}}|lang="{{{native_name_lang}}}"}}>{{{native_name}}}</span>}}
| subheaderstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| image = {{#invoke:InfoboxImage |InfoboxImage |image={{#invoke:Wikidata|getValue|P18|{{{image|FETCH_WIKIDATA}}}}} |upright={{{image_upright|}}} |alt={{{alt|}}} }}
| caption = {{{caption|}}}
| image2 = {{#if:{{both|{{{map_type|}}}|{{{coordinates|}}}}}|{{Location map
|{{{map_type}}}
|coordinates = {{{coordinates|}}}
|width={{#if:{{{map_size|}}}|{{{map_size}}}| }}
|float=center
|border=infobox
|alt = {{{map_alt|}}}
|relief = {{{map_relief|{{{relief|}}}}}}
|caption={{#if:{{{map_caption|}}}|{{{map_caption}}}|{{#invoke:Location map|data|{{{map_type}}}|name}} अन्तो ठानदस्सनभूमिचित्तं}}
|mark={{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = Set01-church1.svg
| [[जिनसासनं]] = In-jain.svg
| [[हिन्दुसासनं]] = Om symbol.svg
| [[बुद्धसासनं]] = Gold temple icon.png
| [[थेरवाद बुद्धसासनं]] = Gold temple icon.png
| #default = }}
|marksize = {{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = 16
| [[जिनसासनं]] = 12
| [[हिन्दुसासनं]] = 8
| [[बुद्धसासनं]] = 8
| [[थेरवाद बुद्धसासनं]] = 8
| #default = }}
}}}}
| headerstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| header1 = {{#if:{{{location|}}}{{{locale|}}}{{{coordinates|}}}{{{geo|}}}{{{religious_affiliation|}}}{{{deity|}}}{{{rite|}}}{{{tradition|}}}{{{sect|}}}{{{festivals|}}}{{{festival|}}}{{{cercle|}}}{{{sector|}}}{{{municipality|}}}{{{district|}}}{{{territory|}}}{{{prefecture|}}}{{{state|}}}{{{province|}}}{{{region|}}}{{{country|}}}{{{administration|}}}{{{consecration_year|}}}{{{organisational_status|}}}{{{organizational_status|{{{status|}}}}}}{{{functional_status|}}}{{{heritage_designation|}}}{{{leadership|}}}{{{ownership|}}}{{{governing_body|}}}{{{bhattaraka|}}}{{{patron|}}}{{{website|}}}|विवरणानि}}
| label2 = ठानं
| data2 = {{if empty|{{{location|}}}|{{{locale|}}}}}
| label3 = [[अक्खन्स देसान्तरविधि|अक्खन्स]]
| data3 = {{#if:{{{coordinates|{{{geo|}}}}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|{{{geo}}}}}}|type:landmark}}{{{coordinates_footnotes|}}}}}
| rowclass4 = note
| label4 = सासनिकसम्बन्धो
| data4 = {{br separated entries|{{{religious_affiliation|}}}|{{{category|}}}}}
| label5 = [[देवतानं पूजनं|देवता]]
| data5 = {{{deity|}}}
| label6 = {{#switch:{{Infobox religious building/color|{{{religious_affiliation}}}}}
|#9BB4EB |#87CEFA |#ADD8E6 = [[Nusach|Rite]]<!-- this kludge is used because the people of Wikipedia do not have {{#pos}} or so! I do not want to list all flavours of Judaism just here -->
|सासनिकाचारो}}
| data6 = {{{rite|}}}
| label7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं] = [[:en:Islamic schools and branches|इसलामसासनं मूचिरो]]
|#default = Sect
}}
| data7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं]] = {{{tradition|}}}
|#default = {{{sect|}}}
}}
| label8 = {{#if:{{{festivals|}}}|उस्सवा|उस्सवो}}
| data8 = {{#if:{{{festivals|}}}|{{{festivals}}}|{{{festival|}}}}}
| label9 = Cercle
| class9 = label
| data9 = {{{cercle|}}}
| label10 = भागो
| class10 = label
| data10 = {{{sector|}}}
| label11 = निगमसभा
| class11 = label
| data11 = {{{municipality|}}}
| label12 = जनपदो
| class12 = label
| data12 = {{{district|}}}
| label13 = पदेसो
| data13 = {{{territory|}}}
| label14 = पदेसन्तरं
| data14 = {{{prefecture|}}}
| label15 = रट्ठं
| data15 = {{{state|}}}
| label16 = देसो
| data16 = {{{province|}}}
| label17 = महादेसो
| data17 = {{{region|}}}
| label18 = रज्जं
| data18 = {{#invoke:Wikidata|getValue|P17|{{{country|FETCH_WIKIDATA}}}}}
| label19 = पसासनं
| class19 = label
| data19 = {{{administration|}}}
| label20 = पुञ्ञनिय्यातनवस्सं
| data20 = {{{consecration_year|}}}
| label21 = {{#if:{{{organisational_status|}}}
|[[Ecclesiastical polity|Ecclesiastical or organisational status]]
|[[Ecclesiastical polity|Ecclesiastical or organizational status]]
}}
| data21 = {{#if:{{{organisational_status|}}}
|{{{organisational_status}}}
|{{{organizational_status|{{{status|}}}}}}
}}
| label22 = वत्तमानकालट्ठिति
| data22 = {{{functional_status|}}}
| label23 = दायज्जनियमनं
| data23 = {{{heritage_designation|}}}
| label24 = सामिकत्तं
| data24 = {{{ownership|}}}
| label25 = {{#if:{{{governing_body|}}}|पसासनं|नायकत्तं}}
| data25 = {{#if:{{{governing_body|}}}|{{{governing_body}}}|{{{leadership|}}}}}
| label26 = भात्तराका
| data26 = {{{bhattaraka|}}}
| label27 = दायको
| data27 = {{{patron|}}}
| label28 = वेबसाइट
| data28 = {{{website|}}}
| header29 = {{#if:{{{architect|}}}{{{architecture_type|}}}{{{architecture_style|}}}{{{founded_by|}}}{{{creator|}}}{{{funded_by|}}}{{{general_contractor|}}}{{{established|}}}{{{groundbreaking|}}}{{{year_completed|}}}{{{construction_cost|}}}{{{date_demolished|}}}{{{date_destroyed|}}}|{{#ifeq:{{{architecture|yes}}}|yes|वास्थुविज्जा}}}}
| label30 = वात्थुविज्जाचरियो
| class30 = note
| data30 = {{{architect|}}}
| label31 = वात्थुविज्जापकारो
| data31 = {{{architecture_type|}}}
| label32 = वात्थुविज्जासैली
| data32 = {{{architecture_style|}}}
| label33 = {{#if:{{{founded_by|}}}|पातिट्ठापेता|कारको}}
| data33 = {{if empty|{{{founded_by|}}}|{{{creator|}}}}}
| label34 = धनउपत्थम्भको
| data34 = {{{funded_by|}}}
| label35 = महाकम्मकारको
| data35 = {{{general_contractor|}}}
| label36 = आरब्भवस्सं
| data36 = {{{established|}}}
| label37 = इट्ठकानिधानं
| class37 = note
| data37 = {{{groundbreaking|}}}
| label38 = परियोसितं
| class38 = note
| data38 = {{{year_completed|}}}
| label39 = धनब्बयो
| data39 = {{{construction_cost|}}}
| label40 = {{#if:{{{date_demolished|}}}|विनासितं|विनट्ठं}}
| data40 = {{ifempty|{{{date_demolished|}}}|{{{date_destroyed|}}}}}
| header41 = {{#if:{{{facade_direction|}}}{{{capacity|}}}{{{length|}}}{{{width|}}}{{{width_nave|}}}{{{interior_area|}}}{{{height_max|}}}{{{dome_quantity|}}}{{{dome_height_outer|}}}{{{dome_height_inner|}}}{{{dome_dia_outer|}}}{{{dome_dia_inner|}}}{{{minaret_quantity|}}}{{{minaret_height|}}}{{{spire_quantity|}}}{{{spire_height|}}}{{{site_area|}}}{{{temple_quantity|}}}{{{monument_quantity|}}}{{{shrine_quantity|}}}{{{materials|}}}{{{elevation_m|}}}{{{elevation_ft|}}}|{{#ifeq:{{{specifications|yes}}}|yes|वित्थारविवरणं}}}}
| label42 = Direction of façade
| data42 = {{{facade_direction|}}}
| label43 = पमाणं
| data43 = {{{capacity|}}}
| label44 = आयामो
| data44 = {{{length|}}}
| label45 = वित्थारो
| data45 = {{{width|}}}
| label46 = Width ([[nave]])
| data46 = {{{width_nave|}}}
| label47 = अन्तोएरिया
| data47 = {{{interior_area|}}}
| label48 = उच्चत्तं
| data48 = {{{height_max|}}}
| label49 = अड्ढगिुलकानि
| data49 = {{{dome_quantity|}}}
| label50 = अड्ढगिुलउच्चत्तं (बाहिरं)
| data50 = {{{dome_height_outer|}}}
| label51 = अड्ढगिुलउच्चत्तं (अब्भन्तरं)
| data51 = {{{dome_height_inner|}}}
| label52 = अड्ढगिुलविक्खम्भो (बाहिरं)
| data52 = {{{dome_dia_outer|}}}
| label53 = अड्ढगिुलविक्खम्भो (अब्भन्तरं)
| data53 = {{{dome_dia_inner|}}}
| label54 = आलोकथम्भा
| data54 = {{{minaret_quantity|}}}
| label55 = आलोकथम्भउच्चत्तं
| data55 = {{{minaret_height|}}}
| label56 = सिखरानि
| data56 = {{{spire_quantity|}}}
| label57 = ခसिखरउच्चत्तं
| data57 = {{{spire_height|}}}
| label58 = भूमिएरिया
| data58 = {{{site_area|}}}
| label59 = गूहागेहानि
| data59 = {{{temple_quantity|}}}
| label60 = चेतियथम्भा
| data60 = {{{monument_quantity|}}}
| label61 = मटिमाघरानि
| data61 = {{{shrine_quantity|}}}
| label62 = सीलालेखा
| data62 = {{{inscriptions|}}}
| label63 = निम्मानदब्बं
| data63 = {{{materials|}}}
| label64 = समुद्दतलउच्चत्तं
| data64 = {{#if:{{{elevation_m|}}}
|{{convert|{{{elevation_m}}}|m|ft|0|abbr=on}}{{{elevation_footnotes|}}}
|{{#if:{{{elevation_ft|}}}
|{{convert|{{{elevation_ft|}}}|ft|m|0|abbr=on}}{{{elevation_footnotes|}}}
}}
}}
| header65 = {{#ifeq:{{{nrhp|}}}|yes|{{#if:{{{designated|}}}|[[अमेरिकाजनपदानि|U.S.]] [[National Historic Landmark]]|[[अमेरिकाजनपदानि|U.S.]] [[National Register of Historic Places]]}}}}
| label66 = Added to [[National Register of Historic Places|NRHP]]
| data66 = {{#ifeq:{{{nrhp|}}}|yes|{{{added|}}}}}
| label67 = NRHP Reference no.
| data67 = {{#ifeq:{{{nrhp|}}}|yes|{{{refnum|}}}}}
| label68 = Designated as [[National Historic Landmark|NHL]]
| data68 = {{{designated|}}}
<!--designation1 section-->
| data69 = {{designation/divbox|{{{designation1|}}}|delisted={{{delisted1_date|}}}}}
| data70 = {{#if:{{{designation1_offname|}}}|''नाम जाति: {{{designation1_offname}}}''}}
| label71 = पकारो
| data71 = {{{designation1_type|}}}
| label72 = पमाणपमापकं
| data72 = {{{designation1_criteria|}}}
| label73 = विचिननं
| data73 = {{{designation1_date|}}}
| label74 = सूचितो निहारो
| data74 = {{{delisted1_date|}}}
| label75 = Parent listing
| data75 = {{{designation1_parent|}}}
| label76 = निद्दिट्ठसङ्ख्या
| data76 = {{{designation1_number|}}}
| label77 = {{{designation1_free1name}}}
| data77 = {{#if:{{{designation1_free1name|}}}|{{{designation1_free1value|}}}}}
| label78 = {{{designation1_free2name}}}
| data78 = {{#if:{{{designation1_free2name|}}}|{{{designation1_free2value|}}}}}
| label79 = {{{designation1_free3name}}}
| data79 = {{#if:{{{designation1_free3name|}}}|{{{designation1_free3value|}}}}}
<!--designation2 section-->
| data80 = {{designation/divbox|{{{designation2|}}}|delisted={{{delisted2_date|}}}}}
| data81 = {{#if:{{{designation2_offname|}}}| ''Official name: {{{designation2_offname}}}''}}
| label82 = पकारो
| data82 = {{{designation2_type|}}}
| label83 = पमाणपमापकं
| data83 = {{{designation2_criteria|}}}
| label84 = विचिननं
| data84 = {{{designation2_date|}}}
| label85 = सूचितो निहारो
| data85 = {{{delisted2_date|}}}
| label86 = Parent listing
| data86 = {{{designation2_parent|}}}
| label87 = निद्दिट्ठसङ्ख्या
| data87 = {{{designation2_number|}}}
| label88 = {{{designation2_free1name}}}
| data88 = {{#if:{{{designation2_free1name|}}}|{{{designation2_free1value|}}}}}
| label89 = {{{designation2_free2name}}}
| data89 = {{#if:{{{designation2_free2name|}}}|{{{designation2_free2value|}}}}}
| label90 = {{{designation2_free3name}}}
| data90 = {{#if:{{{designation2_free3name|}}}|{{{designation2_free3value|}}}}}
| belowstyle = text-align:left; font-weight:normal; font-size:88%;
| below = {{{footnotes|}}}
}}<noinclude>
{{documentation}}
</noinclude>
jjlj0fc0clex1c461k37o5arqafha5j
104289
104268
2026-09-11T14:38:44Z
咽頭べさ
6149
104289
wikitext
text/x-wiki
{{infobox
| bodyclass = vcard
| bodystyle = border-spacing:2px; width:250px
| abovestyle = font-size:larger; background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| aboveclass = fn org
| above = {{{name|{{{building_name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}}}}}
| subheader = {{#if:{{{native_name|}}}|<span class="nickname" {{#if:{{{native_name_lang|}}}|lang="{{{native_name_lang}}}"}}>{{{native_name}}}</span>}}
| subheaderstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| image = {{#invoke:InfoboxImage |InfoboxImage |image={{#invoke:Wikidata|getValue|P18|{{{image|FETCH_WIKIDATA}}}}} |upright={{{image_upright|}}} |alt={{{alt|}}} }}
| caption = {{{caption|}}}
| image2 = {{#if:{{both|{{{map_type|}}}|{{{coordinates|}}}}}|{{Location map
|{{{map_type}}}
|coordinates = {{{coordinates|}}}
|width={{#if:{{{map_size|}}}|{{{map_size}}}| }}
|float=center
|border=infobox
|alt = {{{map_alt|}}}
|relief = {{{map_relief|{{{relief|}}}}}}
|caption={{#if:{{{map_caption|}}}|{{{map_caption}}}|{{#invoke:Location map|data|{{{map_type}}}|name}} अन्तो ठानदस्सनभूमिचित्तं}}
|mark={{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = Set01-church1.svg
| [[जिनसासनं]] = In-jain.svg
| [[हिन्दुसासनं]] = Om symbol.svg
| [[बुद्धसासनं]] = Gold temple icon.png
| [[थेरवाद बुद्धसासनं]] = Gold temple icon.png
| #default = }}
|marksize = {{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = 16
| [[जिनसासनं]] = 12
| [[हिन्दुसासनं]] = 8
| [[बुद्धसासनं]] = 8
| [[थेरवाद बुद्धसासनं]] = 8
| #default = }}
}}}}
| headerstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| header1 = {{#if:{{{location|}}}{{{locale|}}}{{{coordinates|}}}{{{geo|}}}{{{religious_affiliation|}}}{{{deity|}}}{{{rite|}}}{{{tradition|}}}{{{sect|}}}{{{festivals|}}}{{{festival|}}}{{{cercle|}}}{{{sector|}}}{{{municipality|}}}{{{district|}}}{{{territory|}}}{{{prefecture|}}}{{{state|}}}{{{province|}}}{{{region|}}}{{{country|}}}{{{administration|}}}{{{consecration_year|}}}{{{organisational_status|}}}{{{organizational_status|{{{status|}}}}}}{{{functional_status|}}}{{{heritage_designation|}}}{{{leadership|}}}{{{ownership|}}}{{{governing_body|}}}{{{bhattaraka|}}}{{{patron|}}}{{{website|}}}|विवरणानि}}
| label2 = ठानं
| data2 = {{if empty|{{{location|}}}|{{{locale|}}}}}
| label3 = [[अक्खन्स देसान्तरविधि|अक्खन्स]]
| data3 = {{#if:{{{coordinates|{{{geo|}}}}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|{{{geo}}}}}}|type:landmark}}{{{coordinates_footnotes|}}}}}
| rowclass4 = note
| label4 = सासनिकसम्बन्धो
| data4 = {{br separated entries|{{{religious_affiliation|}}}|{{{category|}}}}}
| label5 = [[देवतानं पूजनं|देवता]]
| data5 = {{{deity|}}}
| label6 = {{#switch:{{Infobox religious building/color|{{{religious_affiliation}}}}}
|#9BB4EB |#87CEFA |#ADD8E6 = [[Nusach|Rite]]<!-- this kludge is used because the people of Wikipedia do not have {{#pos}} or so! I do not want to list all flavours of Judaism just here -->
|सासनिकाचारो}}
| data6 = {{{rite|}}}
| label7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं] = [[:en:Islamic schools and branches|इसलामसासनं मूचिरो]]
|#default = Sect
}}
| data7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं]] = {{{tradition|}}}
|#default = {{{sect|}}}
}}
| label8 = {{#if:{{{festivals|}}}|उस्सवा|उस्सवो}}
| data8 = {{#if:{{{festivals|}}}|{{{festivals}}}|{{{festival|}}}}}
| label9 = Cercle
| class9 = label
| data9 = {{{cercle|}}}
| label10 = भागो
| class10 = label
| data10 = {{{sector|}}}
| label11 = निगमसभा
| class11 = label
| data11 = {{{municipality|}}}
| label12 = जनपदो
| class12 = label
| data12 = {{{district|}}}
| label13 = पदेसो
| data13 = {{{territory|}}}
| label14 = पदेसन्तरं
| data14 = {{{prefecture|}}}
| label15 = रट्ठं
| data15 = {{{state|}}}
| label16 = देसो
| data16 = {{{province|}}}
| label17 = महादेसो
| data17 = {{{region|}}}
| label18 = रज्जं
| data18 = {{#invoke:Wikidata|getValue|P17|{{{country|FETCH_WIKIDATA}}}}}
| label19 = पसासनं
| class19 = label
| data19 = {{{administration|}}}
| label20 = पुञ्ञनिय्यातनवस्सं
| data20 = {{{consecration_year|}}}
| label21 = {{#if:{{{organisational_status|}}}
|[[Ecclesiastical polity|Ecclesiastical or organisational status]]
|[[Ecclesiastical polity|Ecclesiastical or organizational status]]
}}
| data21 = {{#if:{{{organisational_status|}}}
|{{{organisational_status}}}
|{{{organizational_status|{{{status|}}}}}}
}}
| label22 = वत्तमानकालट्ठिति
| data22 = {{{functional_status|}}}
| label23 = दायज्जनियमनं
| data23 = {{{heritage_designation|}}}
| label24 = सामिकत्तं
| data24 = {{{ownership|}}}
| label25 = {{#if:{{{governing_body|}}}|पसासनं|नायकत्तं}}
| data25 = {{#if:{{{governing_body|}}}|{{{governing_body}}}|{{{leadership|}}}}}
| label26 = भात्तराका
| data26 = {{{bhattaraka|}}}
| label27 = दायको
| data27 = {{{patron|}}}
| label28 = वेबसाइट
| data28 = {{{website|}}}
| header29 = {{#if:{{{architect|}}}{{{architecture_type|}}}{{{architecture_style|}}}{{{founded_by|}}}{{{creator|}}}{{{funded_by|}}}{{{general_contractor|}}}{{{established|}}}{{{groundbreaking|}}}{{{year_completed|}}}{{{construction_cost|}}}{{{date_demolished|}}}{{{date_destroyed|}}}|{{#ifeq:{{{architecture|yes}}}|yes|वास्थुविज्जा}}}}
| label30 = वात्थुविज्जाचरियो
| class30 = note
| data30 = {{{architect|}}}
| label31 = वात्थुविज्जापकारो
| data31 = {{{architecture_type|}}}
| label32 = वात्थुविज्जासैली
| data32 = {{{architecture_style|}}}
| label33 = {{#if:{{{founded_by|}}}|पातिट्ठापेता|कारको}}
| data33 = {{if empty|{{{founded_by|}}}|{{{creator|}}}}}
| label34 = धनउपत्थम्भको
| data34 = {{{funded_by|}}}
| label35 = महाकम्मकारको
| data35 = {{{general_contractor|}}}
| label36 = आरब्भवस्सं
| data36 = {{{established|}}}
| label37 = इट्ठकानिधानं
| class37 = note
| data37 = {{{groundbreaking|}}}
| label38 = परियोसितं
| class38 = note
| data38 = {{{year_completed|}}}
| label39 = धनब्बयो
| data39 = {{{construction_cost|}}}
| label40 = {{#if:{{{date_demolished|}}}|विनासितं|विनट्ठं}}
| data40 = {{ifempty|{{{date_demolished|}}}|{{{date_destroyed|}}}}}
| header41 = {{#if:{{{facade_direction|}}}{{{capacity|}}}{{{length|}}}{{{width|}}}{{{width_nave|}}}{{{interior_area|}}}{{{height_max|}}}{{{dome_quantity|}}}{{{dome_height_outer|}}}{{{dome_height_inner|}}}{{{dome_dia_outer|}}}{{{dome_dia_inner|}}}{{{minaret_quantity|}}}{{{minaret_height|}}}{{{spire_quantity|}}}{{{spire_height|}}}{{{site_area|}}}{{{temple_quantity|}}}{{{monument_quantity|}}}{{{shrine_quantity|}}}{{{materials|}}}{{{elevation_m|}}}{{{elevation_ft|}}}|{{#ifeq:{{{specifications|yes}}}|yes|वित्थारविवरणं}}}}
| label42 = Direction of façade
| data42 = {{{facade_direction|}}}
| label43 = पमाणं
| data43 = {{{capacity|}}}
| label44 = आयामो
| data44 = {{{length|}}}
| label45 = वित्थारो
| data45 = {{{width|}}}
| label46 = Width ([[nave]])
| data46 = {{{width_nave|}}}
| label47 = अन्तोएरिया
| data47 = {{{interior_area|}}}
| label48 = उच्चत्तं
| data48 = {{{height_max|}}}
| label49 = अड्ढगिुलकानि
| data49 = {{{dome_quantity|}}}
| label50 = अड्ढगिुलउच्चत्तं (बाहिरं)
| data50 = {{{dome_height_outer|}}}
| label51 = अड्ढगिुलउच्चत्तं (अब्भन्तरं)
| data51 = {{{dome_height_inner|}}}
| label52 = अड्ढगिुलविक्खम्भो (बाहिरं)
| data52 = {{{dome_dia_outer|}}}
| label53 = अड्ढगिुलविक्खम्भो (अब्भन्तरं)
| data53 = {{{dome_dia_inner|}}}
| label54 = आलोकथम्भा
| data54 = {{{minaret_quantity|}}}
| label55 = आलोकथम्भउच्चत्तं
| data55 = {{{minaret_height|}}}
| label56 = सिखरानि
| data56 = {{{spire_quantity|}}}
| label57 = ခसिखरउच्चत्तं
| data57 = {{{spire_height|}}}
| label58 = भूमिएरिया
| data58 = {{{site_area|}}}
| label59 = गूहागेहानि
| data59 = {{{temple_quantity|}}}
| label60 = चेतियथम्भा
| data60 = {{{monument_quantity|}}}
| label61 = मटिमाघरानि
| data61 = {{{shrine_quantity|}}}
| label62 = सीलालेखा
| data62 = {{{inscriptions|}}}
| label63 = निम्मानदब्बं
| data63 = {{{materials|}}}
| label64 = समुद्दतलउच्चत्तं
| data64 = {{#if:{{{elevation_m|}}}
|{{convert|{{{elevation_m}}}|m|ft|0|abbr=on}}{{{elevation_footnotes|}}}
|{{#if:{{{elevation_ft|}}}
|{{convert|{{{elevation_ft|}}}|ft|m|0|abbr=on}}{{{elevation_footnotes|}}}
}}
}}
| header65 = {{#ifeq:{{{nrhp|}}}|yes|{{#if:{{{designated|}}}|[[अमेरिकाजनपदानि|U.S.]] [[National Historic Landmark]]|[[अमेरिकाजनपदानि|U.S.]] [[National Register of Historic Places]]}}}}
| label66 = Added to [[National Register of Historic Places|NRHP]]
| data66 = {{#ifeq:{{{nrhp|}}}|yes|{{{added|}}}}}
| label67 = NRHP Reference no.
| data67 = {{#ifeq:{{{nrhp|}}}|yes|{{{refnum|}}}}}
| label68 = Designated as [[National Historic Landmark|NHL]]
| data68 = {{{designated|}}}
<!--designation1 section-->
| data69 = {{designation/divbox|{{{designation1|}}}|delisted={{{delisted1_date|}}}}}
| data70 = {{#if:{{{designation1_offname|}}}|''नाम जाति: {{{designation1_offname}}}''}}
| label71 = पकारो
| data71 = {{{designation1_type|}}}
| label72 = पमाणपमापकं
| data72 = {{{designation1_criteria|}}}
| label73 = विचिननं
| data73 = {{{designation1_date|}}}
| label74 = सूचितो निहारो
| data74 = {{{delisted1_date|}}}
| label75 = Parent listing
| data75 = {{{designation1_parent|}}}
| label76 = निद्दिट्ठसङ्ख्या
| data76 = {{{designation1_number|}}}
| label77 = {{{designation1_free1name}}}
| data77 = {{#if:{{{designation1_free1name|}}}|{{{designation1_free1value|}}}}}
| label78 = {{{designation1_free2name}}}
| data78 = {{#if:{{{designation1_free2name|}}}|{{{designation1_free2value|}}}}}
| label79 = {{{designation1_free3name}}}
| data79 = {{#if:{{{designation1_free3name|}}}|{{{designation1_free3value|}}}}}
<!--designation2 section-->
| data80 = {{designation/divbox|{{{designation2|}}}|delisted={{{delisted2_date|}}}}}
| data81 = {{#if:{{{designation2_offname|}}}| ''नाम जाति: {{{designation2_offname}}}''}}
| label82 = पकारो
| data82 = {{{designation2_type|}}}
| label83 = पमाणपमापकं
| data83 = {{{designation2_criteria|}}}
| label84 = विचिननं
| data84 = {{{designation2_date|}}}
| label85 = सूचितो निहारो
| data85 = {{{delisted2_date|}}}
| label86 = Parent listing
| data86 = {{{designation2_parent|}}}
| label87 = निद्दिट्ठसङ्ख्या
| data87 = {{{designation2_number|}}}
| label88 = {{{designation2_free1name}}}
| data88 = {{#if:{{{designation2_free1name|}}}|{{{designation2_free1value|}}}}}
| label89 = {{{designation2_free2name}}}
| data89 = {{#if:{{{designation2_free2name|}}}|{{{designation2_free2value|}}}}}
| label90 = {{{designation2_free3name}}}
| data90 = {{#if:{{{designation2_free3name|}}}|{{{designation2_free3value|}}}}}
| belowstyle = text-align:left; font-weight:normal; font-size:88%;
| below = {{{footnotes|}}}
}}<noinclude>
{{documentation}}
</noinclude>
b3m22pljr9bmvb7hvbpyzjykqpxitxu
104299
104289
2026-09-11T16:30:48Z
咽頭べさ
6149
104299
wikitext
text/x-wiki
{{infobox
| bodyclass = vcard
| bodystyle = border-spacing:2px; width:250px
| abovestyle = font-size:larger; background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| aboveclass = fn org
| above = {{{name|{{{building_name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}}}}}
| subheader = {{#if:{{{native_name|}}}|<span class="nickname" {{#if:{{{native_name_lang|}}}|lang="{{{native_name_lang}}}"}}>{{{native_name}}}</span>}}
| subheaderstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| image = {{#invoke:InfoboxImage |InfoboxImage |image={{#invoke:Wikidata|getValue|P18|{{{image|FETCH_WIKIDATA}}}}} |upright={{{image_upright|}}} |alt={{{alt|}}} }}
| caption = {{{caption|}}}
| image2 = {{#if:{{both|{{{map_type|}}}|{{{coordinates|}}}}}|{{Location map
|{{{map_type}}}
|coordinates = {{{coordinates|}}}
|width={{#if:{{{map_size|}}}|{{{map_size}}}| }}
|float=center
|border=infobox
|alt = {{{map_alt|}}}
|relief = {{{map_relief|{{{relief|}}}}}}
|caption={{#if:{{{map_caption|}}}|{{{map_caption}}}|{{#invoke:Location map|data|{{{map_type}}}|name}} अन्तो ठानदस्सनभूमिचित्तं}}
|mark={{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = Set01-church1.svg
| [[जिनसासनं]] = In-jain.svg
| [[हिन्दुसासनं]] = Om symbol.svg
| [[बुद्धसासनं]] = Gold temple icon.png
| [[थेरवाद बुद्धसासनं]] = Gold temple icon.png
| #default = }}
|marksize = {{#switch:{{{religious_affiliation|}}}
| [[आमेनीया सावक विहारो]]
| [[मखीतारित्त संघो]] = 16
| [[जिनसासनं]] = 12
| [[हिन्दुसासनं]] = 8
| [[बुद्धसासनं]] = 8
| [[थेरवाद बुद्धसासनं]] = 8
| #default = }}
}}}}
| headerstyle = background-color:{{Infobox religious building/color|{{{religious_affiliation}}}}}
| header1 = {{#if:{{{location|}}}{{{locale|}}}{{{coordinates|}}}{{{geo|}}}{{{religious_affiliation|}}}{{{deity|}}}{{{rite|}}}{{{tradition|}}}{{{sect|}}}{{{festivals|}}}{{{festival|}}}{{{cercle|}}}{{{sector|}}}{{{municipality|}}}{{{district|}}}{{{territory|}}}{{{prefecture|}}}{{{state|}}}{{{province|}}}{{{region|}}}{{{country|}}}{{{administration|}}}{{{consecration_year|}}}{{{organisational_status|}}}{{{organizational_status|{{{status|}}}}}}{{{functional_status|}}}{{{heritage_designation|}}}{{{leadership|}}}{{{ownership|}}}{{{governing_body|}}}{{{bhattaraka|}}}{{{patron|}}}{{{website|}}}|विवरणानि}}
| label2 = ठानं
| data2 = {{if empty|{{{location|}}}|{{{locale|}}}}}
| label3 = [[अक्खन्स देसान्तरविधि|अक्खन्स]]
| data3 = {{#if:{{{coordinates|{{{geo|}}}}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|{{{geo}}}}}}|type:landmark}}{{{coordinates_footnotes|}}}}}
| rowclass4 = note
| label4 = सासनिकसम्बन्धो
| data4 = {{br separated entries|{{{religious_affiliation|}}}|{{{category|}}}}}
| label5 = [[देवतानं पूजनं|देवता]]
| data5 = {{{deity|}}}
| label6 = {{#switch:{{Infobox religious building/color|{{{religious_affiliation}}}}}
|#9BB4EB |#87CEFA |#ADD8E6 = [[Nusach|Rite]]<!-- this kludge is used because the people of Wikipedia do not have {{#pos}} or so! I do not want to list all flavours of Judaism just here -->
|सासनिकाचारो}}
| data6 = {{{rite|}}}
| label7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं]] = [[:en:Islamic schools and branches|इसलामसासनं मूचिरो]]
|#default = Sect
}}
| data7 = {{#switch:{{{religious_affiliation}}}
|[[इसलामसासनं]] = {{{tradition|}}}
|#default = {{{sect|}}}
}}
| label8 = {{#if:{{{festivals|}}}|उस्सवा|उस्सवो}}
| data8 = {{#if:{{{festivals|}}}|{{{festivals}}}|{{{festival|}}}}}
| label9 = Cercle
| class9 = label
| data9 = {{{cercle|}}}
| label10 = भागो
| class10 = label
| data10 = {{{sector|}}}
| label11 = निगमसभा
| class11 = label
| data11 = {{{municipality|}}}
| label12 = जनपदो
| class12 = label
| data12 = {{{district|}}}
| label13 = पदेसो
| data13 = {{{territory|}}}
| label14 = पदेसन्तरं
| data14 = {{{prefecture|}}}
| label15 = रट्ठं
| data15 = {{{state|}}}
| label16 = देसो
| data16 = {{{province|}}}
| label17 = महादेसो
| data17 = {{{region|}}}
| label18 = रज्जं
| data18 = {{#invoke:Wikidata|getValue|P17|{{{country|FETCH_WIKIDATA}}}}}
| label19 = पसासनं
| class19 = label
| data19 = {{{administration|}}}
| label20 = पुञ्ञनिय्यातनवस्सं
| data20 = {{{consecration_year|}}}
| label21 = {{#if:{{{organisational_status|}}}
|[[Ecclesiastical polity|Ecclesiastical or organisational status]]
|[[Ecclesiastical polity|Ecclesiastical or organizational status]]
}}
| data21 = {{#if:{{{organisational_status|}}}
|{{{organisational_status}}}
|{{{organizational_status|{{{status|}}}}}}
}}
| label22 = वत्तमानकालट्ठिति
| data22 = {{{functional_status|}}}
| label23 = दायज्जनियमनं
| data23 = {{{heritage_designation|}}}
| label24 = सामिकत्तं
| data24 = {{{ownership|}}}
| label25 = {{#if:{{{governing_body|}}}|पसासनं|नायकत्तं}}
| data25 = {{#if:{{{governing_body|}}}|{{{governing_body}}}|{{{leadership|}}}}}
| label26 = भात्तराका
| data26 = {{{bhattaraka|}}}
| label27 = दायको
| data27 = {{{patron|}}}
| label28 = वेबसाइट
| data28 = {{{website|}}}
| header29 = {{#if:{{{architect|}}}{{{architecture_type|}}}{{{architecture_style|}}}{{{founded_by|}}}{{{creator|}}}{{{funded_by|}}}{{{general_contractor|}}}{{{established|}}}{{{groundbreaking|}}}{{{year_completed|}}}{{{construction_cost|}}}{{{date_demolished|}}}{{{date_destroyed|}}}|{{#ifeq:{{{architecture|yes}}}|yes|वास्थुविज्जा}}}}
| label30 = वात्थुविज्जाचरियो
| class30 = note
| data30 = {{{architect|}}}
| label31 = वात्थुविज्जापकारो
| data31 = {{{architecture_type|}}}
| label32 = वात्थुविज्जासैली
| data32 = {{{architecture_style|}}}
| label33 = {{#if:{{{founded_by|}}}|पातिट्ठापेता|कारको}}
| data33 = {{if empty|{{{founded_by|}}}|{{{creator|}}}}}
| label34 = धनउपत्थम्भको
| data34 = {{{funded_by|}}}
| label35 = महाकम्मकारको
| data35 = {{{general_contractor|}}}
| label36 = आरब्भवस्सं
| data36 = {{{established|}}}
| label37 = इट्ठकानिधानं
| class37 = note
| data37 = {{{groundbreaking|}}}
| label38 = परियोसितं
| class38 = note
| data38 = {{{year_completed|}}}
| label39 = धनब्बयो
| data39 = {{{construction_cost|}}}
| label40 = {{#if:{{{date_demolished|}}}|विनासितं|विनट्ठं}}
| data40 = {{ifempty|{{{date_demolished|}}}|{{{date_destroyed|}}}}}
| header41 = {{#if:{{{facade_direction|}}}{{{capacity|}}}{{{length|}}}{{{width|}}}{{{width_nave|}}}{{{interior_area|}}}{{{height_max|}}}{{{dome_quantity|}}}{{{dome_height_outer|}}}{{{dome_height_inner|}}}{{{dome_dia_outer|}}}{{{dome_dia_inner|}}}{{{minaret_quantity|}}}{{{minaret_height|}}}{{{spire_quantity|}}}{{{spire_height|}}}{{{site_area|}}}{{{temple_quantity|}}}{{{monument_quantity|}}}{{{shrine_quantity|}}}{{{materials|}}}{{{elevation_m|}}}{{{elevation_ft|}}}|{{#ifeq:{{{specifications|yes}}}|yes|वित्थारविवरणं}}}}
| label42 = Direction of façade
| data42 = {{{facade_direction|}}}
| label43 = पमाणं
| data43 = {{{capacity|}}}
| label44 = आयामो
| data44 = {{{length|}}}
| label45 = वित्थारो
| data45 = {{{width|}}}
| label46 = Width ([[nave]])
| data46 = {{{width_nave|}}}
| label47 = अन्तोएरिया
| data47 = {{{interior_area|}}}
| label48 = उच्चत्तं
| data48 = {{{height_max|}}}
| label49 = अड्ढगिुलकानि
| data49 = {{{dome_quantity|}}}
| label50 = अड्ढगिुलउच्चत्तं (बाहिरं)
| data50 = {{{dome_height_outer|}}}
| label51 = अड्ढगिुलउच्चत्तं (अब्भन्तरं)
| data51 = {{{dome_height_inner|}}}
| label52 = अड्ढगिुलविक्खम्भो (बाहिरं)
| data52 = {{{dome_dia_outer|}}}
| label53 = अड्ढगिुलविक्खम्भो (अब्भन्तरं)
| data53 = {{{dome_dia_inner|}}}
| label54 = आलोकथम्भा
| data54 = {{{minaret_quantity|}}}
| label55 = आलोकथम्भउच्चत्तं
| data55 = {{{minaret_height|}}}
| label56 = सिखरानि
| data56 = {{{spire_quantity|}}}
| label57 = सिखरउच्चत्तं
| data57 = {{{spire_height|}}}
| label58 = भूमिएरिया
| data58 = {{{site_area|}}}
| label59 = गूहागेहानि
| data59 = {{{temple_quantity|}}}
| label60 = चेतियथम्भा
| data60 = {{{monument_quantity|}}}
| label61 = मटिमाघरानि
| data61 = {{{shrine_quantity|}}}
| label62 = सीलालेखा
| data62 = {{{inscriptions|}}}
| label63 = निम्मानदब्बं
| data63 = {{{materials|}}}
| label64 = समुद्दतलउच्चत्तं
| data64 = {{#if:{{{elevation_m|}}}
|{{convert|{{{elevation_m}}}|m|ft|0|abbr=on}}{{{elevation_footnotes|}}}
|{{#if:{{{elevation_ft|}}}
|{{convert|{{{elevation_ft|}}}|ft|m|0|abbr=on}}{{{elevation_footnotes|}}}
}}
}}
| header65 = {{#ifeq:{{{nrhp|}}}|yes|{{#if:{{{designated|}}}|[[अमेरिकाजनपदानि|U.S.]] [[National Historic Landmark]]|[[अमेरिकाजनपदानि|U.S.]] [[National Register of Historic Places]]}}}}
| label66 = Added to [[National Register of Historic Places|NRHP]]
| data66 = {{#ifeq:{{{nrhp|}}}|yes|{{{added|}}}}}
| label67 = NRHP Reference no.
| data67 = {{#ifeq:{{{nrhp|}}}|yes|{{{refnum|}}}}}
| label68 = Designated as [[National Historic Landmark|NHL]]
| data68 = {{{designated|}}}
<!--designation1 section-->
| data69 = {{designation/divbox|{{{designation1|}}}|delisted={{{delisted1_date|}}}}}
| data70 = {{#if:{{{designation1_offname|}}}|''नाम जाति: {{{designation1_offname}}}''}}
| label71 = पकारो
| data71 = {{{designation1_type|}}}
| label72 = पमाणपमापकं
| data72 = {{{designation1_criteria|}}}
| label73 = विचिननं
| data73 = {{{designation1_date|}}}
| label74 = सूचितो निहारो
| data74 = {{{delisted1_date|}}}
| label75 = Parent listing
| data75 = {{{designation1_parent|}}}
| label76 = निद्दिट्ठसङ्ख्या
| data76 = {{{designation1_number|}}}
| label77 = {{{designation1_free1name}}}
| data77 = {{#if:{{{designation1_free1name|}}}|{{{designation1_free1value|}}}}}
| label78 = {{{designation1_free2name}}}
| data78 = {{#if:{{{designation1_free2name|}}}|{{{designation1_free2value|}}}}}
| label79 = {{{designation1_free3name}}}
| data79 = {{#if:{{{designation1_free3name|}}}|{{{designation1_free3value|}}}}}
<!--designation2 section-->
| data80 = {{designation/divbox|{{{designation2|}}}|delisted={{{delisted2_date|}}}}}
| data81 = {{#if:{{{designation2_offname|}}}| ''नाम जाति: {{{designation2_offname}}}''}}
| label82 = पकारो
| data82 = {{{designation2_type|}}}
| label83 = पमाणपमापकं
| data83 = {{{designation2_criteria|}}}
| label84 = विचिननं
| data84 = {{{designation2_date|}}}
| label85 = सूचितो निहारो
| data85 = {{{delisted2_date|}}}
| label86 = Parent listing
| data86 = {{{designation2_parent|}}}
| label87 = निद्दिट्ठसङ्ख्या
| data87 = {{{designation2_number|}}}
| label88 = {{{designation2_free1name}}}
| data88 = {{#if:{{{designation2_free1name|}}}|{{{designation2_free1value|}}}}}
| label89 = {{{designation2_free2name}}}
| data89 = {{#if:{{{designation2_free2name|}}}|{{{designation2_free2value|}}}}}
| label90 = {{{designation2_free3name}}}
| data90 = {{#if:{{{designation2_free3name|}}}|{{{designation2_free3value|}}}}}
| belowstyle = text-align:left; font-weight:normal; font-size:88%;
| below = {{{footnotes|}}}
}}<noinclude>
{{documentation}}
</noinclude>
cktys2hmyeco938izbawt70kdqrsxsc
Module:Wikidata
828
7516
104269
2026-09-11T13:09:01Z
咽頭べさ
6149
Created page with "-- vim: set noexpandtab ft=lua ts=4 sw=4: require('strict') local p = {} local debug = false ------------------------------------------------------------------------------ -- module local variables and functions local wiki = { langcode = mw.language.getContentLanguage().code } -- internationalisation local i18n = { ["errors"] = { ["property-not-found"] = "Property not found.", ["entity-not-found"] = "Wikidata entity not found.", ["unknown-claim-type"] = "Un..."
104269
Scribunto
text/plain
-- vim: set noexpandtab ft=lua ts=4 sw=4:
require('strict')
local p = {}
local debug = false
------------------------------------------------------------------------------
-- module local variables and functions
local wiki =
{
langcode = mw.language.getContentLanguage().code
}
-- internationalisation
local i18n =
{
["errors"] =
{
["property-not-found"] = "Property not found.",
["entity-not-found"] = "Wikidata entity not found.",
["unknown-claim-type"] = "Unknown claim type.",
["unknown-entity-type"] = "Unknown entity type.",
["qualifier-not-found"] = "Qualifier not found.",
["site-not-found"] = "Wikimedia project not found.",
["unknown-datetime-format"] = "Unknown datetime format.",
["local-article-not-found"] = "Article is not yet available in this wiki."
},
["datetime"] =
{
-- $1 is a placeholder for the actual number
[0] = "$1 billion years", -- precision: billion years
[1] = "$100 million years", -- precision: hundred million years
[2] = "$10 million years", -- precision: ten million years
[3] = "$1 million years", -- precision: million years
[4] = "$100,000 years", -- precision: hundred thousand years
[5] = "$10,000 years", -- precision: ten thousand years
[6] = "$1 millennium", -- precision: millennium
[7] = "$1 century", -- precision: century
[8] = "$1s", -- precision: decade
-- the following use the format of #time parser function
[9] = "Y", -- precision: year,
[10] = "F Y", -- precision: month
[11] = "F j, Y", -- precision: day
[12] = "F j, Y ga", -- precision: hour
[13] = "F j, Y g:ia", -- precision: minute
[14] = "F j, Y g:i:sa", -- precision: second
["beforenow"] = "$1 BCE", -- how to format negative numbers for precisions 0 to 5
["afternow"] = "$1 CE", -- how to format positive numbers for precisions 0 to 5
["bc"] = '$1 "BCE"', -- how print negative years
["ad"] = "$1", -- how print positive years
-- the following are for function getDateValue() and getQualifierDateValue()
["default-format"] = "dmy", -- default value of the #3 (getDateValue) or
-- #4 (getQualifierDateValue) argument
["default-addon"] = "BC", -- default value of the #4 (getDateValue) or
-- #5 (getQualifierDateValue) argument
["prefix-addon"] = false, -- set to true for languages put "BC" in front of the
-- datetime string; or the addon will be suffixed
["addon-sep"] = " ", -- separator between datetime string and addon (or inverse)
["format"] = -- options of the 3rd argument
{
["mdy"] = "F j, Y",
["my"] = "F Y",
["y"] = "Y",
["dmy"] = "j F Y",
["ymd"] = "Y-m-d",
["ym"] = "Y-m"
}
},
["monolingualtext"] = '<span lang="%language">%text</span>',
["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]",
["ordinal"] =
{
[1] = "st",
[2] = "nd",
[3] = "rd",
["default"] = "th"
}
}
if wiki.langcode ~= "en" then
--require("Module:i18n").loadI18n("Module:Wikidata/i18n", i18n)
-- got idea from [[:w:Module:Wd]]
local module_title; if ... == nil then
module_title = mw.getCurrentFrame():getTitle()
else
module_title = ...
end
require('Module:i18n').loadI18n(module_title..'/i18n', i18n)
end
-- this function needs to be internationalised along with the above:
-- takes cardinal numer as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
local function makeOrdinal (cardinal)
local ordsuffix = i18n.ordinal.default
if cardinal % 10 == 1 then
ordsuffix = i18n.ordinal[1]
elseif cardinal % 10 == 2 then
ordsuffix = i18n.ordinal[2]
elseif cardinal % 10 == 3 then
ordsuffix = i18n.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (cardinal % 100 == 11) or (cardinal % 100 == 12) or (cardinal % 100 == 13) then
ordsuffix = i18n.ordinal.default
end
return tostring(cardinal) .. ordsuffix
end
local function printError(code)
return '<span class="error">' .. (i18n.errors[code] or code) .. '</span>'
end
local function parseDateFormat(f, timestamp, addon, prefix_addon, addon_sep)
local year_suffix
local tstr = ""
local lang_obj = mw.language.new(wiki.langcode)
local f_parts = mw.text.split(f, 'Y', true)
for idx, f_part in pairs(f_parts) do
year_suffix = ''
if string.match(f_part, "x[mijkot]$") then
-- for non-Gregorian year
f_part = f_part .. 'Y'
elseif idx < #f_parts then
-- supress leading zeros in year
year_suffix = lang_obj:formatDate('Y', timestamp)
year_suffix = string.gsub(year_suffix, '^0+', '', 1)
end
tstr = tstr .. lang_obj:formatDate(f_part, timestamp) .. year_suffix
end
if addon ~= "" and prefix_addon then
return addon .. addon_sep .. tstr
elseif addon ~= "" then
return tstr .. addon_sep .. addon
else
return tstr
end
end
local function parseDateValue(timestamp, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
return parseDateFormat(_date_format, timestamp, addon, prefix_addon, addon_sep)
else
return printError("unknown-datetime-format")
end
end
-- This local function combines the year/month/day/BC/BCE handling of parseDateValue{}
-- with the millennium/century/decade handling of formatDate()
local function parseDateFull(timestamp, precision, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
-- get the next four characters after the + (should be the year now in all cases)
-- ok, so this is dirty, but let's get it working first
local intyear = tonumber(string.sub(timestamp, 2, 5))
if intyear == 0 and precision <= 9 then
return ""
end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(intyear) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if addon ~= "" then
-- negative date
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades (8), centuries (7) and millennia (6)
local era, card
if precision == 6 then
card = math.floor((intyear - 1) / 1000) + 1
era = mw.ustring.gsub(i18n.datetime[6], "$1", makeOrdinal(card))
end
if precision == 7 then
card = math.floor((intyear - 1) / 100) + 1
era = mw.ustring.gsub(i18n.datetime[7], "$1", makeOrdinal(card))
end
if precision == 8 then
era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(intyear) / 10) * 10))
end
if era then
if addon ~= "" then
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
else
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era)
end
return era
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
-- check for precision is year and override supplied date_format
if precision == 9 then
_date_format = i18n["datetime"][9]
end
return parseDateFormat(_date_format, timestamp, addon, prefix_addon, addon_sep)
else
return printError("unknown-datetime-format")
end
end
-- the "qualifiers" and "snaks" field have a respective "qualifiers-order" and "snaks-order" field
-- use these as the second parameter and this function instead of the built-in "pairs" function
-- to iterate over all qualifiers and snaks in the intended order.
local function orderedpairs(array, order)
if not order then return pairs(array) end
-- return iterator function
local i = 0
return function()
i = i + 1
if order[i] then
return order[i], array[order[i]]
end
end
end
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
local function normalizeDate(date)
date = mw.text.trim(date, "+")
-- extract year
local yearstr = mw.ustring.match(date, "^\-?%d+")
local year = tonumber(yearstr)
-- remove leading zeros of year
return year .. mw.ustring.sub(date, #yearstr + 1), year
end
local function formatDate(date, precision, timezone)
precision = precision or 11
local date, year = normalizeDate(date)
if year == 0 and precision <= 9 then return "" end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(year) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if year < 0 then
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades, centuries and millennia
local era
if precision == 6 then era = mw.ustring.gsub(i18n.datetime[6], "$1", tostring(math.floor((math.abs(year) - 1) / 1000) + 1)) end
if precision == 7 then era = mw.ustring.gsub(i18n.datetime[7], "$1", tostring(math.floor((math.abs(year) - 1) / 100) + 1)) end
if precision == 8 then era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(year) / 10) * 10)) end
if era then
if year < 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
elseif year > 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era) end
return era
end
-- precision is year
if precision == 9 then
return year
end
-- precision is less than years
if precision > 9 then
--[[ the following code replaces the UTC suffix with the given negated timezone to convert the global time to the given local time
timezone = tonumber(timezone)
if timezone and timezone ~= 0 then
timezone = -timezone
timezone = string.format("%.2d%.2d", timezone / 60, timezone % 60)
if timezone[1] ~= '-' then timezone = "+" .. timezone end
date = mw.text.trim(date, "Z") .. " " .. timezone
end
]]--
local formatstr = i18n.datetime[precision]
if year == 0 then formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], "")
elseif year < 0 then
-- Mediawiki formatDate doesn't support negative years
date = mw.ustring.sub(date, 2)
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.bc, "$1", i18n.datetime[9]))
elseif year > 0 and i18n.datetime.ad ~= "$1" then
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.ad, "$1", i18n.datetime[9]))
end
return mw.language.new(wiki.langcode):formatDate(formatstr, date)
end
end
local function printDatavalueEntity(data, parameter)
-- data fields: entity-type [string], numeric-id [int, Wikidata id]
local id
if data["entity-type"] == "item" then id = "Q" .. data["numeric-id"]
elseif data["entity-type"] == "property" then id = "P" .. data["numeric-id"]
else return printError("unknown-entity-type")
end
if parameter then
if parameter == "link" then
local linkTarget = mw.wikibase.getSitelink(id)
local linkName = mw.wikibase.getLabel(id)
if linkTarget then
-- if there is a local Wikipedia article link to it using the label or the article title
return "[[" .. linkTarget .. "|" .. (linkName or linkTarget) .. "]]"
else
-- if there is no local Wikipedia article output the label or link to the Wikidata object to let the user input a proper label
if linkName then return linkName else return "[[:d:" .. id .. "|" .. id .. "]]" end
end
else
return data[parameter]
end
else
return mw.wikibase.getLabel(id) or id
end
end
local function printDatavalueTime(data, parameter)
-- data fields: time [ISO 8601 time], timezone [int in minutes], before [int], after [int], precision [int], calendarmodel [wikidata URI]
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
-- calendarmodel: e.g. http://www.wikidata.org/entity/Q1985727 for the proleptic Gregorian calendar or http://www.wikidata.org/wiki/Q11184 for the Julian calendar]
if parameter then
if parameter == "calendarmodel" then data.calendarmodel = mw.ustring.match(data.calendarmodel, "Q%d+") -- extract entity id from the calendar model URI
elseif parameter == "time" then data.time = normalizeDate(data.time) end
return data[parameter]
else
return formatDate(data.time, data.precision, data.timezone)
end
end
local function printDatavalueMonolingualText(data, parameter)
-- data fields: language [string], text [string]
if parameter then
return data[parameter]
else
local result = mw.ustring.gsub(mw.ustring.gsub(i18n.monolingualtext, "%%language", data["language"]), "%%text", data["text"])
return result
end
end
local function findClaims(entity, property)
if not property or not entity or not entity.claims then return end
if mw.ustring.match(property, "^P%d+$") then
-- if the property is given by an id (P..) access the claim list by this id
return entity.claims[property]
else
property = mw.wikibase.resolvePropertyId(property)
if not property then return end
return entity.claims[property]
end
end
local function getSnakValue(snak, parameter)
if snak.snaktype == "value" then
-- call the respective snak parser
if snak.datavalue.type == "string" then return snak.datavalue.value
elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter)
end
end
return mw.wikibase.renderSnak(snak)
end
local function getQualifierSnak(claim, qualifierId)
-- a "snak" is Wikidata terminology for a typed key/value pair
-- a claim consists of a main snak holding the main information of this claim,
-- as well as a list of attribute snaks and a list of references snaks
if qualifierId then
-- search the attribute snak with the given qualifier as key
if claim.qualifiers then
local qualifier = claim.qualifiers[qualifierId]
if qualifier then return qualifier[1] end
end
return nil, printError("qualifier-not-found")
else
-- otherwise return the main snak
return claim.mainsnak
end
end
local function getValueOfClaim(claim, qualifierId, parameter)
local error
local snak
snak, error = getQualifierSnak(claim, qualifierId)
if snak then
return getSnakValue(snak, parameter)
else
return nil, error
end
end
local function getReferences(frame, claim)
local result = ""
-- traverse through all references
for ref in pairs(claim.references or {}) do
local refparts
-- traverse through all parts of the current reference
for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do
if refparts then refparts = refparts .. ", " else refparts = "" end
-- output the label of the property of the reference part, e.g. "imported from" for P143
refparts = refparts .. tostring(mw.wikibase.getLabel(snakkey)) .. ": "
-- output all values of this reference part, e.g. "German Wikipedia" and "English Wikipedia" if the referenced claim was imported from both sites
for snakidx = 1, #snakval do
if snakidx > 1 then refparts = refparts .. ", " end
refparts = refparts .. getSnakValue(snakval[snakidx])
end
end
if refparts then result = result .. frame:extensionTag("ref", refparts) end
end
return result
end
local function parseInput(frame)
local qid = frame.args.qid
if qid and (#qid == 0) then qid = nil end
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm ~= "FETCH_WIKIDATA" then
return false, input_parm, nil, nil
end
local entity = mw.wikibase.getEntity(qid)
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
if not claims then
return false, "", nil, nil
end
else
return false, "", nil, nil
end
return true, entity, claims, propertyID
end
local function isType(claims, type)
return claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == type
end
local function getValue(entity, claims, propertyID, delim, labelHook)
if labelHook == nil then
labelHook = function (qnumber)
return nil;
end
end
if isType(claims, "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local qnumber = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
local sitelink = mw.wikibase.getSitelink(qnumber)
local label = labelHook(qnumber) or mw.wikibase.getLabel(qnumber) or qnumber
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:" .. qnumber .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, delim)
else
-- just return best values
return entity:formatPropertyValues(propertyID).value
end
end
------------------------------------------------------------------------------
-- module global functions
if debug then
function p.inspectI18n(frame)
local val = i18n
for _, key in pairs(frame.args) do
key = mw.text.trim(key)
val = val[key]
end
return val
end
end
function p.descriptionIn(frame)
local langcode = frame.args[1]
local id = frame.args[2]
-- return description of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntity(id):getDescription(langcode or wiki.langcode)
end
function p.labelIn(frame)
local langcode = frame.args[1]
local id = frame.args[2]
-- return label of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntity(id):getLabel(langcode or wiki.langcode)
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
p.getValue = function(frame)
local delimdefault = ", " -- **internationalise later**
local delim = frame.args.delimiter or ""
delim = string.gsub(delim, '"', '')
if #delim == 0 then
delim = delimdefault
end
local go, errorOrentity, claims, propertyID = parseInput(frame)
if not go then
return errorOrentity
end
return getValue(errorOrentity, claims, propertyID, delim)
end
-- Same as above, but uses the short name property for label if available.
p.getValueShortName = function(frame)
local go, errorOrentity, claims, propertyID = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
-- if wiki-linked value output as link if possible
local function labelHook (qnumber)
local label
local claimEntity = mw.wikibase.getEntity(qnumber)
if claimEntity ~= nil then
if claimEntity.claims.P1813 then
for k2, v2 in pairs(claimEntity.claims.P1813) do
if v2.mainsnak.datavalue.value.language == "en" then
label = v2.mainsnak.datavalue.value.text
end
end
end
end
if label == nil or label == "" then return nil end
return label
end
return getValue(errorOrentity, claims, propertyID, ", ", labelHook);
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
-- from an arbitrary entry by using its QID.
-- Use : {{#invoke:Wikidata|getValueFromID|<ID>|<Property>|FETCH_WIKIDATA}}
-- E.g.: {{#invoke:Wikidata|getValueFromID|Q151973|P26|FETCH_WIKIDATA}} - to fetch value of 'spouse' (P26) from 'Richard Burton' (Q151973)
-- Please use sparingly - this is an *expensive call*.
p.getValueFromID = function(frame)
local itemID = mw.text.trim(frame.args[1] or "")
local propertyID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntity(itemID)
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
return getValue(entity, claims, propertyID, ", ")
else
return ""
end
else
return input_parm
end
end
local function getQualifier(frame, outputHook)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntity()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
out[#out + 1] = outputHook(v2);
end
end
end
return table.concat(out, ", "), true
else
return "", false
end
else
return input_parm, false
end
end
p.getQualifierValue = function(frame)
local function outputValue(value)
local qnumber = "Q" .. value.datavalue.value["numeric-id"]
if (mw.wikibase.getSitelink(qnumber)) then
return "[[" .. mw.wikibase.getSitelink(qnumber) .. "]]"
else
return "[[:d:" .. qnumber .. "|" ..qnumber .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return (getQualifier(frame, outputValue))
end
-- This is used to get a value like 'male' (for property p21) which won't be linked and numbers without the thousand separators
p.getRawValue = function(frame)
local go, errorOrentity, claims, propertyID = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
-- if number type: remove thousand separators, bounds and units
if isType(claims, "quantity") then
result = mw.ustring.gsub(result, "(%d),(%d)", "%1%2")
result = mw.ustring.gsub(result, "(%d)±.*", "%1")
end
return result
end
-- This is used to get the unit name for the numeric value returned by getRawValue
p.getUnits = function(frame)
local go, errorOrentity, claims, propertyID = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
if isType(claims, "quantity") then
result = mw.ustring.sub(result, mw.ustring.find(result, " ")+1, -1)
end
return result
end
-- This is used to get the unit's QID to use with the numeric value returned by getRawValue
p.getUnitID = function(frame)
local go, errorOrentity, claims = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
local result
if isType(claims, "quantity") then
-- get the url for the unit entry on Wikidata:
result = claims[1].mainsnak.datavalue.value.unit
-- and just reurn the last bit from "Q" to the end (which is the QID):
result = mw.ustring.sub(result, mw.ustring.find(result, "Q"), -1)
end
return result
end
p.getRawQualifierValue = function(frame)
local function outputHook(value)
if value.datavalue.value["numeric-id"] then
return mw.wikibase.getLabel("Q" .. value.datavalue.value["numeric-id"])
else
return value.datavalue.value
end
end
local ret, gotData = getQualifier(frame, outputHook)
if gotData then
ret = string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2)
end
return ret
end
-- This is used to get a date value for date_of_birth (P569), etc. which won't be linked
-- Dates and times are stored in ISO 8601 format (sort of).
-- At present the local formatDate(date, precision, timezone) function doesn't handle timezone
-- So I'll just supply "Z" in the call to formatDate below:
p.getDateValue = function(frame)
local date_format = mw.text.trim(frame.args[3] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[4] or i18n["datetime"]["default-addon"])
local go, errorOrentity, claims = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
local out = {}
for k, v in pairs(claims) do
if v.mainsnak.datavalue.type == 'time' then
local timestamp = v.mainsnak.datavalue.value.time
local dateprecision = v.mainsnak.datavalue.value.precision
-- A year can be stored like this: "+1872-00-00T00:00:00Z",
-- which is processed here as if it were the day before "+1872-01-01T00:00:00Z",
-- and that's the last day of 1871, so the year is wrong.
-- So fix the month 0, day 0 timestamp to become 1 January instead:
timestamp = timestamp:gsub("%-00%-00T", "-01-01T")
out[#out + 1] = parseDateFull(timestamp, dateprecision, date_format, date_addon)
end
end
return table.concat(out, ", ")
end
p.getQualifierDateValue = function(frame)
local date_format = mw.text.trim(frame.args[4] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[5] or i18n["datetime"]["default-addon"])
local function outputHook(value)
local timestamp = value.datavalue.value.time
return parseDateValue(timestamp, date_format, date_addon)
end
return (getQualifier(frame, outputHook))
end
-- This is used to fetch all of the images with a particular property, e.g. image (P18), Gene Atlas Image (P692), etc.
-- Parameters are | propertyID | value / FETCH_WIKIDATA / nil | separator (default=space) | size (default=frameless)
-- It will return a standard wiki-markup [[File:Filename | size]] for each image with a selectable size and separator (which may be html)
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA}}
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA|<br>|250px}}
-- If a property is chosen that is not of type "commonsMedia", it will return empty text.
p.getImages = function(frame)
local sep = mw.text.trim(frame.args[3] or " ")
local imgsize = mw.text.trim(frame.args[4] or "frameless")
local go, errorOrentity, claims = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
if (claims[1] and claims[1].mainsnak.datatype == "commonsMedia") then
local out = {}
for k, v in pairs(claims) do
local filename = v.mainsnak.datavalue.value
out[#out + 1] = "[[File:" .. filename .. "|" .. imgsize .. "]]"
end
return table.concat(out, sep)
else
return ""
end
end
-- This is used to get the TA98 (Terminologia Anatomica first edition 1998) values like 'A01.1.00.005' (property P1323)
-- which are then linked to https://ifaa.unifr.ch/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/01.1.00.005%20Entity%20TA98%20EN.htm
-- uses the newer mw.wikibase calls instead of directly using the snaks
-- formatPropertyValues returns a table with the P1323 values concatenated with ", " so we have to split them out into a table in order to construct the return string
p.getTAValue = function(frame)
local ent = mw.wikibase.getEntity()
local props = ent:formatPropertyValues('P1323')
local out = {}
local t = {}
for k, v in pairs(props) do
if k == 'value' then
t = mw.text.split( v, ", ")
for k2, v2 in pairs(t) do
out[#out + 1] = "[https://ifaa.unifr.ch/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/" .. string.sub(v2, 2) .. "%20Entity%20TA98%20EN.htm " .. v2 .. "]"
end
end
end
local ret = table.concat(out, "<br> ")
if #ret == 0 then
ret = "Invalid TA"
end
return ret
end
--[[
This is used to return an image legend from Wikidata
image is property P18
image legend is property P2096
Call as {{#invoke:Wikidata |getImageLegend | <PARAMETER> | lang=<ISO-639code> |id=<QID>}}
Returns PARAMETER, unless it is equal to "FETCH_WIKIDATA", from Item QID (expensive call)
If QID is omitted or blank, the current article is used (not an expensive call)
If lang is omitted, it uses the local wiki language, otherwise it uses the provided ISO-639 language code
ISO-639: https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html#wp1252447
Ranks are: 'preferred' > 'normal'
This returns the label from the first image with 'preferred' rank
Or the label from the first image with 'normal' rank if preferred returns nothing
Ranks: https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
]]
p.getImageLegend = function(frame)
-- look for named parameter id; if it's blank make it nil
local id = frame.args.id
if id and (#id == 0) then
id = nil
end
-- look for named parameter lang
-- it should contain a two-character ISO-639 language code
-- if it's blank fetch the language of the local wiki
local lang = frame.args.lang
if (not lang) or (#lang < 2) then
lang = mw.language.getContentLanguage().code
end
-- first unnamed parameter is the local parameter, if supplied
local input_parm = mw.text.trim(frame.args[1] or "")
if input_parm == "FETCH_WIKIDATA" then
local ent = mw.wikibase.getEntity(id)
local imgs
if ent and ent.claims then
imgs = ent.claims.P18
end
local imglbl
if imgs then
-- look for an image with 'preferred' rank
for k1, v1 in pairs(imgs) do
if v1.rank == "preferred" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
-- if we don't find one, look for an image with 'normal' rank
if (not imglbl) then
for k1, v1 in pairs(imgs) do
if v1.rank == "normal" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
end
end
return imglbl
else
return input_parm
end
end
-- This is used to get the QIDs of all of the values of a property, as a comma separated list if multiple values exist
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |FETCH_WIKIDATA}}
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |<InputParameter> |qid=<QID>}}
p.getPropertyIDs = function(frame)
local go, errorOrentity, propclaims = parseInput(frame)
if not go then
return errorOrentity
end
local entity = errorOrentity
-- if wiki-linked value collect the QID in a table
if (propclaims[1] and propclaims[1].mainsnak.snaktype == "value" and propclaims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(propclaims) do
out[#out + 1] = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
end
return table.concat(out, ", ")
else
-- not a wikibase-entityid, so return empty
return ""
end
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
return mw.wikibase.getEntityIdForCurrentPage()
end
function p.claim(frame)
local property = frame.args[1] or ""
local id = frame.args["id"]
local qualifierId = frame.args["qualifier"]
local parameter = frame.args["parameter"]
local list = frame.args["list"]
local references = frame.args["references"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return printError("entity-not-found") else return default end
end
-- fetch the first claim of satisfying the given property
local claims = findClaims(entity, property)
if not claims or not claims[1] then
if showerrors then return printError("property-not-found") else return default end
end
-- get initial sort indices
local sortindices = {}
for idx in pairs(claims) do
sortindices[#sortindices + 1] = idx
end
-- sort by claim rank
local comparator = function(a, b)
local rankmap = { deprecated = 2, normal = 1, preferred = 0 }
local ranka = rankmap[claims[a].rank or "normal"] .. string.format("%08d", a)
local rankb = rankmap[claims[b].rank or "normal"] .. string.format("%08d", b)
return ranka < rankb
end
table.sort(sortindices, comparator)
local result
local error
if list then
local value
-- iterate over all elements and return their value (if existing)
result = {}
for idx in pairs(claims) do
local claim = claims[sortindices[idx]]
value, error = getValueOfClaim(claim, qualifierId, parameter)
if not value and showerrors then value = error end
if value and references then value = value .. getReferences(frame, claim) end
result[#result + 1] = value
end
result = table.concat(result, list)
else
-- return first element
local claim = claims[sortindices[1]]
result, error = getValueOfClaim(claim, qualifierId, parameter)
if result and references then result = result .. getReferences(frame, claim) end
end
if result then return result else
if showerrors then return error else return default end
end
end
-- look into entity object
function p.ViewSomething(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local id = f.args.id
if id and (#id == 0) then
id = nil
end
local data = mw.wikibase.getEntity(id)
if not data then
return nil
end
local i = 1
while true do
local index = f.args[i]
if not index then
if type(data) == "table" then
return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY)
else
return tostring(data)
end
end
data = data[index] or data[tonumber(index)]
if not data then
return
end
i = i + 1
end
end
-- getting sitelink of a given wiki
-- get sitelink of current item if qid not supplied
function p.getSiteLink(frame)
local qid = frame.args.qid
if qid == "" then qid = nil end
local f = mw.text.trim( frame.args[1] or "")
local entity = mw.wikibase.getEntity(qid)
if not entity then
return
end
local link = entity:getSitelink( f )
if not link then
return
end
return link
end
function p.Dump(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local data = mw.wikibase.getEntity(f.args.id)
if not data then
return i18n.warnDump
end
local i = 1
while true do
local index = f.args[i]
if not index then
return "<pre>"..mw.dumpObject(data).."</pre>".. i18n.warnDump
end
data = data[index] or data[tonumber(index)]
if not data then
return i18n.warnDump
end
i = i + 1
end
end
return p
0ut9ea611aebtqxr1j5hmyqvjdhhyh8
104348
104269
2026-09-12T02:58:26Z
咽頭べさ
6149
104348
Scribunto
text/plain
-- vim: set noexpandtab ft=lua ts=4 sw=4:
require('strict')
local p = {}
local debug = false
------------------------------------------------------------------------------
-- module local variables and functions
local wiki =
{
langcode = mw.language.getContentLanguage().code
}
-- internationalisation
local i18n =
{
["errors"] =
{
["property-not-found"] = "Property not found.",
["entity-not-found"] = "Wikidata entity not found.",
["unknown-claim-type"] = "Unknown claim type.",
["unknown-entity-type"] = "Unknown entity type.",
["qualifier-not-found"] = "Qualifier not found.",
["site-not-found"] = "Wikimedia project not found.",
["unknown-datetime-format"] = "Unknown datetime format.",
["local-article-not-found"] = "Article is not yet available in this wiki."
},
["datetime"] =
{
-- $1 is a placeholder for the actual number
[0] = "$1 billion years", -- precision: billion years
[1] = "$100 million years", -- precision: hundred million years
[2] = "$10 million years", -- precision: ten million years
[3] = "$1 million years", -- precision: million years
[4] = "$100,000 years", -- precision: hundred thousand years
[5] = "$10,000 years", -- precision: ten thousand years
[6] = "$1 millennium", -- precision: millennium
[7] = "$1 century", -- precision: century
[8] = "$1s", -- precision: decade
-- the following use the format of #time parser function
[9] = "Y", -- precision: year,
[10] = "F Y", -- precision: month
[11] = "F j, Y", -- precision: day
[12] = "F j, Y ga", -- precision: hour
[13] = "F j, Y g:ia", -- precision: minute
[14] = "F j, Y g:i:sa", -- precision: second
["beforenow"] = "$1 BCE", -- how to format negative numbers for precisions 0 to 5
["afternow"] = "$1 CE", -- how to format positive numbers for precisions 0 to 5
["bc"] = '$1 "BCE"', -- how print negative years
["ad"] = "$1", -- how print positive years
-- the following are for function getDateValue() and getQualifierDateValue()
["default-format"] = "dmy", -- default value of the #3 (getDateValue) or
-- #4 (getQualifierDateValue) argument
["default-addon"] = "BC", -- default value of the #4 (getDateValue) or
-- #5 (getQualifierDateValue) argument
["prefix-addon"] = false, -- set to true for languages put "BC" in front of the
-- datetime string; or the addon will be suffixed
["addon-sep"] = " ", -- separator between datetime string and addon (or inverse)
["format"] = -- options of the 3rd argument
{
["mdy"] = "F j, Y",
["my"] = "F Y",
["y"] = "Y",
["dmy"] = "j F Y",
["ymd"] = "Y-m-d",
["ym"] = "Y-m"
}
},
["monolingualtext"] = '<span lang="%language">%text</span>',
["warnDump"] = "[[Category:Called function 'Dump' from module Wikidata]]",
["ordinal"] =
{
[1] = "st",
[2] = "nd",
[3] = "rd",
["default"] = "th"
}
}
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge(t1, t2)
for k,v in pairs(t2) do
if type(v) == "table" then
if type(t1[k] or false) == "table" then
tableMerge(t1[k] or {}, t2[k] or {})
else
t1[k] = v
end
else
t1[k] = v
end
end
return t1
end
local function loadI18n()
local exist, res = pcall(require, "Module:Wikidata/i18n")
if exist and next(res) ~= nil then
tableMerge(i18n, res.i18n)
end
end
loadI18n()
-- this function needs to be internationalised along with the above:
-- takes cardinal numer as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
local function makeOrdinal (cardinal)
local ordsuffix = i18n.ordinal.default
if cardinal % 10 == 1 then
ordsuffix = i18n.ordinal[1]
elseif cardinal % 10 == 2 then
ordsuffix = i18n.ordinal[2]
elseif cardinal % 10 == 3 then
ordsuffix = i18n.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (cardinal % 100 == 11) or (cardinal % 100 == 12) or (cardinal % 100 == 13) then
ordsuffix = i18n.ordinal.default
end
return tostring(cardinal) .. ordsuffix
end
local function printError(code)
return '<span class="error">' .. (i18n.errors[code] or code) .. '</span>'
end
local function parseDateValue(timestamp, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
local function d(f)
local year_suffix
local tstr = ""
local lang_obj = mw.language.new(wiki.langcode)
local f_parts = mw.text.split(f, 'Y', true)
for idx, f_part in pairs(f_parts) do
year_suffix = ''
if string.match(f_part, "x[mijkot]$") then
-- for non-Gregorian year
f_part = f_part .. 'Y'
elseif idx < #f_parts then
-- supress leading zeros in year
year_suffix = lang_obj:formatDate('Y', timestamp)
year_suffix = string.gsub(year_suffix, '^0+', '', 1)
end
tstr = tstr .. lang_obj:formatDate(f_part, timestamp) .. year_suffix
end
if addon ~= "" and prefix_addon then
return addon .. addon_sep .. tstr
elseif addon ~= "" then
return tstr .. addon_sep .. addon
else
return tstr
end
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
return d(_date_format)
else
return printError("unknown-datetime-format")
end
end
-- This local function combines the year/month/day/BC/BCE handling of parseDateValue{}
-- with the millennium/century/decade handling of formatDate()
local function parseDateFull(timestamp, precision, date_format, date_addon)
local prefix_addon = i18n["datetime"]["prefix-addon"]
local addon_sep = i18n["datetime"]["addon-sep"]
local addon = ""
-- check for negative date
if string.sub(timestamp, 1, 1) == '-' then
timestamp = '+' .. string.sub(timestamp, 2)
addon = date_addon
end
-- get the next four characters after the + (should be the year now in all cases)
-- ok, so this is dirty, but let's get it working first
local intyear = tonumber(string.sub(timestamp, 2, 5))
if intyear == 0 and precision <= 9 then
return ""
end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(intyear) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if addon ~= "" then
-- negative date
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades (8), centuries (7) and millennia (6)
local era, card
if precision == 6 then
card = math.floor((intyear - 1) / 1000) + 1
era = mw.ustring.gsub(i18n.datetime[6], "$1", makeOrdinal(card))
end
if precision == 7 then
card = math.floor((intyear - 1) / 100) + 1
era = mw.ustring.gsub(i18n.datetime[7], "$1", makeOrdinal(card))
end
if precision == 8 then
era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(intyear) / 10) * 10))
end
if era then
if addon ~= "" then
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
else
era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era)
end
return era
end
local _date_format = i18n["datetime"]["format"][date_format]
if _date_format ~= nil then
-- check for precision is year and override supplied date_format
if precision == 9 then
_date_format = i18n["datetime"][9]
end
local year_suffix
local tstr = ""
local lang_obj = mw.language.new(wiki.langcode)
local f_parts = mw.text.split(_date_format, 'Y', true)
for idx, f_part in pairs(f_parts) do
year_suffix = ''
if string.match(f_part, "x[mijkot]$") then
-- for non-Gregorian year
f_part = f_part .. 'Y'
elseif idx < #f_parts then
-- supress leading zeros in year
year_suffix = lang_obj:formatDate('Y', timestamp)
year_suffix = string.gsub(year_suffix, '^0+', '', 1)
end
tstr = tstr .. lang_obj:formatDate(f_part, timestamp) .. year_suffix
end
local fdate
if addon ~= "" and prefix_addon then
fdate = addon .. addon_sep .. tstr
elseif addon ~= "" then
fdate = tstr .. addon_sep .. addon
else
fdate = tstr
end
return fdate
else
return printError("unknown-datetime-format")
end
end
-- the "qualifiers" and "snaks" field have a respective "qualifiers-order" and "snaks-order" field
-- use these as the second parameter and this function instead of the built-in "pairs" function
-- to iterate over all qualifiers and snaks in the intended order.
local function orderedpairs(array, order)
if not order then return pairs(array) end
-- return iterator function
local i = 0
return function()
i = i + 1
if order[i] then
return order[i], array[order[i]]
end
end
end
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
local function normalizeDate(date)
date = mw.text.trim(date, "+")
-- extract year
local yearstr = mw.ustring.match(date, "^\-?%d+")
local year = tonumber(yearstr)
-- remove leading zeros of year
return year .. mw.ustring.sub(date, #yearstr + 1), year
end
local function formatDate(date, precision, timezone)
precision = precision or 11
local date, year = normalizeDate(date)
if year == 0 and precision <= 9 then return "" end
-- precision is 10000 years or more
if precision <= 5 then
local factor = 10 ^ ((5 - precision) + 4)
local y2 = math.ceil(math.abs(year) / factor)
local relative = mw.ustring.gsub(i18n.datetime[precision], "$1", tostring(y2))
if year < 0 then
relative = mw.ustring.gsub(i18n.datetime.beforenow, "$1", relative)
else
relative = mw.ustring.gsub(i18n.datetime.afternow, "$1", relative)
end
return relative
end
-- precision is decades, centuries and millennia
local era
if precision == 6 then era = mw.ustring.gsub(i18n.datetime[6], "$1", tostring(math.floor((math.abs(year) - 1) / 1000) + 1)) end
if precision == 7 then era = mw.ustring.gsub(i18n.datetime[7], "$1", tostring(math.floor((math.abs(year) - 1) / 100) + 1)) end
if precision == 8 then era = mw.ustring.gsub(i18n.datetime[8], "$1", tostring(math.floor(math.abs(year) / 10) * 10)) end
if era then
if year < 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.bc, '"', ""), "$1", era)
elseif year > 0 then era = mw.ustring.gsub(mw.ustring.gsub(i18n.datetime.ad, '"', ""), "$1", era) end
return era
end
-- precision is year
if precision == 9 then
return year
end
-- precision is less than years
if precision > 9 then
--[[ the following code replaces the UTC suffix with the given negated timezone to convert the global time to the given local time
timezone = tonumber(timezone)
if timezone and timezone ~= 0 then
timezone = -timezone
timezone = string.format("%.2d%.2d", timezone / 60, timezone % 60)
if timezone[1] ~= '-' then timezone = "+" .. timezone end
date = mw.text.trim(date, "Z") .. " " .. timezone
end
]]--
local formatstr = i18n.datetime[precision]
if year == 0 then formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], "")
elseif year < 0 then
-- Mediawiki formatDate doesn't support negative years
date = mw.ustring.sub(date, 2)
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.bc, "$1", i18n.datetime[9]))
elseif year > 0 and i18n.datetime.ad ~= "$1" then
formatstr = mw.ustring.gsub(formatstr, i18n.datetime[9], mw.ustring.gsub(i18n.datetime.ad, "$1", i18n.datetime[9]))
end
return mw.language.new(wiki.langcode):formatDate(formatstr, date)
end
end
local function printDatavalueEntity(data, parameter)
-- data fields: entity-type [string], numeric-id [int, Wikidata id]
local id
if data["entity-type"] == "item" then id = "Q" .. data["numeric-id"]
elseif data["entity-type"] == "property" then id = "P" .. data["numeric-id"]
else return printError("unknown-entity-type")
end
if parameter then
if parameter == "link" then
local linkTarget = mw.wikibase.sitelink(id)
local linkName = mw.wikibase.label(id)
if linkTarget then
-- if there is a local Wikipedia article link to it using the label or the article title
return "[[" .. linkTarget .. "|" .. (linkName or linkTarget) .. "]]"
else
-- if there is no local Wikipedia article output the label or link to the Wikidata object to let the user input a proper label
if linkName then return linkName else return "[[:d:" .. id .. "|" .. id .. "]]" end
end
else
return data[parameter]
end
else
return mw.wikibase.label(id) or id
end
end
local function printDatavalueTime(data, parameter)
-- data fields: time [ISO 8601 time], timezone [int in minutes], before [int], after [int], precision [int], calendarmodel [wikidata URI]
-- precision: 0 - billion years, 1 - hundred million years, ..., 6 - millennia, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day, 12 - hour, 13 - minute, 14 - second
-- calendarmodel: e.g. http://www.wikidata.org/entity/Q1985727 for the proleptic Gregorian calendar or http://www.wikidata.org/wiki/Q11184 for the Julian calendar]
if parameter then
if parameter == "calendarmodel" then data.calendarmodel = mw.ustring.match(data.calendarmodel, "Q%d+") -- extract entity id from the calendar model URI
elseif parameter == "time" then data.time = normalizeDate(data.time) end
return data[parameter]
else
return formatDate(data.time, data.precision, data.timezone)
end
end
local function printDatavalueMonolingualText(data, parameter)
-- data fields: language [string], text [string]
if parameter then
return data[parameter]
else
local result = mw.ustring.gsub(mw.ustring.gsub(i18n.monolingualtext, "%%language", data["language"]), "%%text", data["text"])
return result
end
end
local function findClaims(entity, property)
if not property or not entity or not entity.claims then return end
if mw.ustring.match(property, "^P%d+$") then
-- if the property is given by an id (P..) access the claim list by this id
return entity.claims[property]
else
property = mw.wikibase.resolvePropertyId(property)
if not property then return end
return entity.claims[property]
end
end
local function getSnakValue(snak, parameter)
if snak.snaktype == "value" then
-- call the respective snak parser
if snak.datavalue.type == "string" then return snak.datavalue.value
elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter)
elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter)
end
end
return mw.wikibase.renderSnak(snak)
end
local function getQualifierSnak(claim, qualifierId)
-- a "snak" is Wikidata terminology for a typed key/value pair
-- a claim consists of a main snak holding the main information of this claim,
-- as well as a list of attribute snaks and a list of references snaks
if qualifierId then
-- search the attribute snak with the given qualifier as key
if claim.qualifiers then
local qualifier = claim.qualifiers[qualifierId]
if qualifier then return qualifier[1] end
end
return nil, printError("qualifier-not-found")
else
-- otherwise return the main snak
return claim.mainsnak
end
end
local function getValueOfClaim(claim, qualifierId, parameter)
local error
local snak
snak, error = getQualifierSnak(claim, qualifierId)
if snak then
return getSnakValue(snak, parameter)
else
return nil, error
end
end
local function getReferences(frame, claim)
local result = ""
-- traverse through all references
for ref in pairs(claim.references or {}) do
local refparts
-- traverse through all parts of the current reference
for snakkey, snakval in orderedpairs(claim.references[ref].snaks or {}, claim.references[ref]["snaks-order"]) do
if refparts then refparts = refparts .. ", " else refparts = "" end
-- output the label of the property of the reference part, e.g. "imported from" for P143
refparts = refparts .. tostring(mw.wikibase.label(snakkey)) .. ": "
-- output all values of this reference part, e.g. "German Wikipedia" and "English Wikipedia" if the referenced claim was imported from both sites
for snakidx = 1, #snakval do
if snakidx > 1 then refparts = refparts .. ", " end
refparts = refparts .. getSnakValue(snakval[snakidx])
end
end
if refparts then result = result .. frame:extensionTag("ref", refparts) end
end
return result
end
------------------------------------------------------------------------------
-- module global functions
if debug then
function p.inspectI18n(frame)
local val = i18n
for _, key in pairs(frame.args) do
key = mw.text.trim(key)
val = val[key]
end
return val
end
end
function p.descriptionIn(frame)
local langcode = frame.args[1]
local id = frame.args[2] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
-- return description of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntityObject(id).descriptions[langcode or wiki.langcode].value
end
function p.labelIn(frame)
local langcode = frame.args[1]
local id = frame.args[2] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
-- return label of a Wikidata entity in the given language or the default language of this Wikipedia site
return mw.wikibase.getEntityObject(id).labels[langcode or wiki.langcode].value
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
p.getValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local delimdefault = ", " -- **internationalise later**
local delim = frame.args.delimiter or ""
delim = string.gsub(delim, '"', '')
if #delim == 0 then
delim = delimdefault
end
local qid = frame.args.qid
if qid and (#qid == 0) then qid = nil end
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject(qid)
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, delim)
else
-- just return best values
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
-- Same as above, but uses the short name property for label if available.
p.getValueShortName = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label
local claimEntity = mw.wikibase.getEntity("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if claimEntity ~= nil then
if claimEntity.claims.P1813 then
for k2, v2 in pairs(claimEntity.claims.P1813) do
if v2.mainsnak.datavalue.value.language == "en" then
label = v2.mainsnak.datavalue.value.text
end
end
end
end
if label == nil or label == "" then label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) end
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, ", ")
else
-- just return best vakues
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
-- This is used to get a value, or a comma separated list of them if multiple values exist
-- from an arbitrary entry by using its QID.
-- Use : {{#invoke:Wikidata|getValueFromID|<ID>|<Property>|FETCH_WIKIDATA}}
-- E.g.: {{#invoke:Wikidata|getValueFromID|Q151973|P26|FETCH_WIKIDATA}} - to fetch value of 'spouse' (P26) from 'Richard Burton' (Q151973)
-- Please use sparingly - this is an *expensive call*.
p.getValueFromID = function(frame)
local itemID = mw.text.trim(frame.args[1] or "")
local propertyID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntity(itemID)
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
-- if wiki-linked value output as link if possible
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(claims) do
local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])
local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"])
if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end
if sitelink then
out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. label .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
return table.concat(out, ", ")
else
return entity:formatPropertyValues(propertyID).value
end
else
return ""
end
else
return input_parm
end
end
p.getQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
if (mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"])) then
out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"]) .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v2.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"]) .. "]]<abbr title='" .. i18n["errors"]["local-article-not-found"] .. "'>[*]</abbr>"
end
end
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
-- This is used to get a value like 'male' (for property p21) which won't be linked and numbers without the thousand separators
p.getRawValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
-- if number type: remove thousand separators, bounds and units
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
result = mw.ustring.gsub(result, "(%d),(%d)", "%1%2")
result = mw.ustring.gsub(result, "(%d)±.*", "%1")
end
return result
else
return ""
end
else
return input_parm
end
end
-- This is used to get the unit name for the numeric value returned by getRawValue
p.getUnits = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local qid = frame.args.qid
if qid and (#qid == 0) then qid = nil end
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject(qid)
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result = entity:formatPropertyValues(propertyID, mw.wikibase.entity.claimRanks).value
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
result = mw.ustring.sub(result, mw.ustring.find(result, " ")+1, -1)
end
return result
else
return ""
end
else
return input_parm
end
end
-- This is used to get the unit's QID to use with the numeric value returned by getRawValue
p.getUnitID = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then claims = entity.claims[propertyID] end
if claims then
local result
if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "quantity") then
-- get the url for the unit entry on Wikidata:
result = claims[1].mainsnak.datavalue.value.unit
-- and just reurn the last bit from "Q" to the end (which is the QID):
result = mw.ustring.sub(result, mw.ustring.find(result, "Q"), -1)
end
return result
else
return ""
end
else
return input_parm
end
end
p.getRawQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
if v2.datavalue.value["numeric-id"] then
out[#out + 1] = mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"])
else
out[#out + 1] = v2.datavalue.value
end
end
end
end
local ret = table.concat(out, ", ")
return string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2)
else
return ""
end
else
return input_parm
end
end
-- This is used to get a date value for date_of_birth (P569), etc. which won't be linked
-- Dates and times are stored in ISO 8601 format (sort of).
-- At present the local formatDate(date, precision, timezone) function doesn't handle timezone
-- So I'll just supply "Z" in the call to formatDate below:
p.getDateValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local date_format = mw.text.trim(frame.args[3] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[4] or i18n["datetime"]["default-addon"])
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
if v.mainsnak.datavalue.type == 'time' then
local timestamp = v.mainsnak.datavalue.value.time
local dateprecision = v.mainsnak.datavalue.value.precision
-- A year can be stored like this: "+1872-00-00T00:00:00Z",
-- which is processed here as if it were the day before "+1872-01-01T00:00:00Z",
-- and that's the last day of 1871, so the year is wrong.
-- So fix the month 0, day 0 timestamp to become 1 January instead:
timestamp = timestamp:gsub("%-00%-00T", "-01-01T")
out[#out + 1] = parseDateFull(timestamp, dateprecision, date_format, date_addon)
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
p.getQualifierDateValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
local date_format = mw.text.trim(frame.args[4] or i18n["datetime"]["default-format"])
local date_addon = mw.text.trim(frame.args[5] or i18n["datetime"]["default-addon"])
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
if entity.claims[propertyID] ~= nil then
local out = {}
for k, v in pairs(entity.claims[propertyID]) do
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
local timestamp = v2.datavalue.value.time
out[#out + 1] = parseDateValue(timestamp, date_format, date_addon)
end
end
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
-- This is used to fetch all of the images with a particular property, e.g. image (P18), Gene Atlas Image (P692), etc.
-- Parameters are | propertyID | value / FETCH_WIKIDATA / nil | separator (default=space) | size (default=frameless)
-- It will return a standard wiki-markup [[File:Filename | size]] for each image with a selectable size and separator (which may be html)
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA}}
-- e.g. {{#invoke:Wikidata|getImages|P18|FETCH_WIKIDATA|<br>|250px}}
-- If a property is chosen that is not of type "commonsMedia", it will return empty text.
p.getImages = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
local sep = mw.text.trim(frame.args[3] or " ")
local imgsize = mw.text.trim(frame.args[4] or "frameless")
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject()
local claims
if entity and entity.claims then
claims = entity.claims[propertyID]
end
if claims then
if (claims[1] and claims[1].mainsnak.datatype == "commonsMedia") then
local out = {}
for k, v in pairs(claims) do
local filename = v.mainsnak.datavalue.value
out[#out + 1] = "[[File:" .. filename .. "|" .. imgsize .. "]]"
end
return table.concat(out, sep)
else
return ""
end
else
return ""
end
else
return input_parm
end
end
-- This is used to get the TA98 (Terminologia Anatomica first edition 1998) values like 'A01.1.00.005' (property P1323)
-- which are then linked to http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/01.1.00.005%20Entity%20TA98%20EN.htm
-- uses the newer mw.wikibase calls instead of directly using the snaks
-- formatPropertyValues returns a table with the P1323 values concatenated with ", " so we have to split them out into a table in order to construct the return string
p.getTAValue = function(frame)
local ent = mw.wikibase.getEntityObject()
local props = ent:formatPropertyValues('P1323')
local out = {}
local t = {}
for k, v in pairs(props) do
if k == 'value' then
t = mw.text.split( v, ", ")
for k2, v2 in pairs(t) do
out[#out + 1] = "[http://www.unifr.ch/ifaa/Public/EntryPage/TA98%20Tree/Entity%20TA98%20EN/" .. string.sub(v2, 2) .. "%20Entity%20TA98%20EN.htm " .. v2 .. "]"
end
end
end
local ret = table.concat(out, "<br> ")
if #ret == 0 then
ret = "Invalid TA"
end
return ret
end
--[[
This is used to return an image legend from Wikidata
image is property P18
image legend is property P2096
Call as {{#invoke:Wikidata |getImageLegend | <PARAMETER> | lang=<ISO-639code> |id=<QID>}}
Returns PARAMETER, unless it is equal to "FETCH_WIKIDATA", from Item QID (expensive call)
If QID is omitted or blank, the current article is used (not an expensive call)
If lang is omitted, it uses the local wiki language, otherwise it uses the provided ISO-639 language code
ISO-639: https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html#wp1252447
Ranks are: 'preferred' > 'normal'
This returns the label from the first image with 'preferred' rank
Or the label from the first image with 'normal' rank if preferred returns nothing
Ranks: https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
]]
p.getImageLegend = function(frame)
-- look for named parameter id; if it's blank make it nil
local id = frame.args.id
if id and (#id == 0) then
id = nil
end
-- look for named parameter lang
-- it should contain a two-character ISO-639 language code
-- if it's blank fetch the language of the local wiki
local lang = frame.args.lang
if (not lang) or (#lang < 2) then
lang = mw.language.getContentLanguage().code
end
-- first unnamed parameter is the local parameter, if supplied
local input_parm = mw.text.trim(frame.args[1] or "")
if input_parm == "FETCH_WIKIDATA" then
local ent = mw.wikibase.getEntityObject(id)
local imgs
if ent and ent.claims then
imgs = ent.claims.P18
end
local imglbl
if imgs then
-- look for an image with 'preferred' rank
for k1, v1 in pairs(imgs) do
if v1.rank == "preferred" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
-- if we don't find one, look for an image with 'normal' rank
if (not imglbl) then
for k1, v1 in pairs(imgs) do
if v1.rank == "normal" and v1.qualifiers and v1.qualifiers.P2096 then
local imglbls = v1.qualifiers.P2096
for k2, v2 in pairs(imglbls) do
if v2.datavalue.value.language == lang then
imglbl = v2.datavalue.value.text
break
end
end
end
end
end
end
return imglbl
else
return input_parm
end
end
-- This is used to get the QIDs of all of the values of a property, as a comma separated list if multiple values exist
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |FETCH_WIKIDATA}}
-- Usage: {{#invoke:Wikidata |getPropertyIDs |<PropertyID> |<InputParameter> |qid=<QID>}}
p.getPropertyIDs = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local input_parm = mw.text.trim(frame.args[2] or "")
-- can take a named parameter |qid which is the Wikidata ID for the article. This will not normally be used.
local qid = frame.args.qid
if qid and (#qid == 0) then qid = nil end
if input_parm == "FETCH_WIKIDATA" then
local entity = mw.wikibase.getEntityObject(qid)
local propclaims
if entity and entity.claims then
propclaims = entity.claims[propertyID]
end
if propclaims then
-- if wiki-linked value collect the QID in a table
if (propclaims[1] and propclaims[1].mainsnak.snaktype == "value" and propclaims[1].mainsnak.datavalue.type == "wikibase-entityid") then
local out = {}
for k, v in pairs(propclaims) do
out[#out + 1] = "Q" .. v.mainsnak.datavalue.value["numeric-id"]
end
return table.concat(out, ", ")
else
-- not a wikibase-entityid, so return empty
return ""
end
else
-- no claim, so return empty
return ""
end
else
return input_parm
end
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
local entity = mw.wikibase.getEntityObject()
if not entity then return nil else return entity.id end
end
function p.claim(frame)
local property = frame.args[1] or ""
local id = frame.args["id"] -- "id" must be nil, as access to other Wikidata objects is disabled in Mediawiki configuration
local qualifierId = frame.args["qualifier"]
local parameter = frame.args["parameter"]
local list = frame.args["list"]
local references = frame.args["references"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntityObject(id)
if not entity then
if showerrors then return printError("entity-not-found") else return default end
end
-- fetch the first claim of satisfying the given property
local claims = findClaims(entity, property)
if not claims or not claims[1] then
if showerrors then return printError("property-not-found") else return default end
end
-- get initial sort indices
local sortindices = {}
for idx in pairs(claims) do
sortindices[#sortindices + 1] = idx
end
-- sort by claim rank
local comparator = function(a, b)
local rankmap = { deprecated = 2, normal = 1, preferred = 0 }
local ranka = rankmap[claims[a].rank or "normal"] .. string.format("%08d", a)
local rankb = rankmap[claims[b].rank or "normal"] .. string.format("%08d", b)
return ranka < rankb
end
table.sort(sortindices, comparator)
local result
local error
if list then
local value
-- iterate over all elements and return their value (if existing)
result = {}
for idx in pairs(claims) do
local claim = claims[sortindices[idx]]
value, error = getValueOfClaim(claim, qualifierId, parameter)
if not value and showerrors then value = error end
if value and references then value = value .. getReferences(frame, claim) end
result[#result + 1] = value
end
result = table.concat(result, list)
else
-- return first element
local claim = claims[sortindices[1]]
result, error = getValueOfClaim(claim, qualifierId, parameter)
if result and references then result = result .. getReferences(frame, claim) end
end
if result then return result else
if showerrors then return error else return default end
end
end
-- look into entity object
function p.ViewSomething(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local id = f.args.id
if id and (#id == 0) then
id = nil
end
local data = mw.wikibase.getEntityObject(id)
if not data then
return nil
end
local i = 1
while true do
local index = f.args[i]
if not index then
if type(data) == "table" then
return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY)
else
return tostring(data)
end
end
data = data[index] or data[tonumber(index)]
if not data then
return
end
i = i + 1
end
end
-- getting sitelink of a given wiki
function p.getSiteLink(frame)
local f = frame.args[1]
local entity = mw.wikibase.getEntity()
if not entity then
return
end
local link = entity:getSitelink( f )
if not link then
return
end
return link
end
function p.Dump(frame)
local f = (frame.args[1] or frame.args.id) and frame or frame:getParent()
local data = mw.wikibase.getEntityObject(f.args.id)
if not data then
return i18n.warnDump
end
local i = 1
while true do
local index = f.args[i]
if not index then
return "<pre>"..mw.dumpObject(data).."</pre>".. i18n.warnDump
end
data = data[index] or data[tonumber(index)]
if not data then
return i18n.warnDump
end
i = i + 1
end
end
return p
f8a73l0fbkh18jor4v9hskuxiqvvfta
पटिरूप:If empty
10
7517
104277
2026-09-11T14:01:44Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:If empty]] to [[पटिरूप:Ifempty]]
104277
wikitext
text/x-wiki
#REDIRECT [[पटिरूप:Ifempty]]
5mz0rtoh9udrw8d5t68byrg6ryzjo8g
पटिरूप:Both
10
7518
104278
2026-09-11T14:02:38Z
咽頭べさ
6149
Created page with "{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude> {{documentation}} </noinclude>"
104278
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude>
{{documentation}}
</noinclude>
a92g9dgn74wuyygsul02g6cnq29em4t
पटिरूप:Requested move notice
10
7519
104280
2026-09-11T14:17:36Z
咽頭べさ
6149
Created page with "{{ {{{|safesubst:}}}#invoke:Unsubst||$B= {{mbox | subst= <includeonly>{{subst:</includeonly><includeonly>substcheck}}</includeonly> | type = move | small = {{{small|}}} | text = <b>इमं {{main other|धम्मनियमं|पिटकं}} नामधेय्यं{{#ifeq:{{{1|?}}}|?|| अनु ''{{no redirect|{{{1}}}}}''}} {{#if:{{{2|}}}|[[{{{2}}}|अभियाचनकम्मं]]|:{{NAMESPACE}} talk:{{PAGENAME}}#{{{section|}}}|अभिया..."
104280
wikitext
text/x-wiki
{{ {{{|safesubst:}}}#invoke:Unsubst||$B=
{{mbox
| subst= <includeonly>{{subst:</includeonly><includeonly>substcheck}}</includeonly>
| type = move
| small = {{{small|}}}
| text = <b>इमं {{main other|धम्मनियमं|पिटकं}} नामधेय्यं{{#ifeq:{{{1|?}}}|?|| अनु ''{{no redirect|{{{1}}}}}''}} {{#if:{{{2|}}}|[[{{{2}}}|अभियाचनकम्मं]]|[[:{{NAMESPACE}} talk:{{PAGENAME}}#{{{section|}}}|अभियाचनकम्मं]]}}</b>॥ सम्बासनं <em>अनवसितत्ता</em> इमं {{main other|धम्मनियमं|पिटकं}} मा अपनेथ॥
}}
}}<noinclude>
{{documentation}}
</noinclude>
7hxj2bi1l9hildy277osmqpyeb6sgyo
पटिरूप:Infobox religious building/color
10
7520
104281
2026-09-11T14:25:23Z
咽頭べさ
6149
Created page with "{{#switch: {{{1|}}} | = | [[Abkhazian Orthodox Church]] | [[Armenian Apostolic church]] | [[Armenian Apostolic Church]] | [[AAC]] | [[Eastern Orthodox]] | [[Georgian Orthodox]] | [[Georgian Orthodox Church]] | [[Georgian Orthodox Church|Georgian Orthodox]] | [[Greek Orthodox Church]] | [[Russian Orthodox]] | [[Russian Orthodox Church]] | [[Belarusian Orthodox Church]] | [[Belarusian Exarchate]] | [[Bulgarian Orthodox Church]] | [[Bulgarian Orthodox]] | Czech and Slov..."
104281
wikitext
text/x-wiki
{{#switch: {{{1|}}}
| =
| [[Abkhazian Orthodox Church]]
| [[Armenian Apostolic church]] | [[Armenian Apostolic Church]] | [[AAC]]
| [[Eastern Orthodox]]
| [[Georgian Orthodox]]
| [[Georgian Orthodox Church]]
| [[Georgian Orthodox Church|Georgian Orthodox]]
| [[Greek Orthodox Church]]
| [[Russian Orthodox]]
| [[Russian Orthodox Church]]
| [[Belarusian Orthodox Church]]
| [[Belarusian Exarchate]]
| [[Bulgarian Orthodox Church]]
| [[Bulgarian Orthodox]]
| [[Czech and Slovak Orthodox Church]]
| [[Czech and Slovak Orthodox]]
| [[Romanian Orthodox Church]]
| [[Romanian Orthodox Church|Romanian Orthodox]]
| [[Romanian Orthodox]]
| [[Estonian Apostolic Orthodox Church]]
| [[Serbian Orthodox Church]]
| [[Serbian Orthodox]] = #FFCF00
| [[Anglican]]
| [[Anglicanism|Anglican]]
| [[Anglicanism]]
| [[Episcopal Church in the United States of America]]
| [[Episcopal Church in the United States of America|ECUSA]]
| [[Episcopal Church (United States)]]
| [[Episcopal Church (United States)|Episcopal Church]]
| [[Church of England]] = #EBB0DE
| [[Coptic Orthodox Church of Alexandria|Coptic Orthodox Church]]
| [[Coptic Orthodox Church]]
| [[Coptic]] = #56A8FF
| [[बुद्धो]]
| [[बुद्धसासनं]]
| [[थेरवाद बुद्धसासनं]]
| [[थेरवाद]]
| थेरवाद बुद्धसासनं
| [[Mahayana Buddhist]]
| [[Mahayana Buddhism]]
| [[Mahayana]]
| [[Shingon]]
| [[Shingon-shu Buzan-ha|Shingon Buzan Sect]]
| [[Shingon Buddhism|Shingon]]
| [[Shingon Risshu|Shingon Ritsu]]
| [[Shingon|Kōyasan Shingon]]
| [[Sōtō]]
| [[Tendai]]
| [[Thai Forest Tradition]]
| [[Shingon Buddhism|Shingon]] [[Shingon-shu Buzan-ha|Buzan Sect]]
| [[Hossō]]
| [[Jōdo-shū]]
| [[Jōdo Shinshū]]
| [[Jogye Order]]
| [[Jogye Order]] of Korean Buddhism
| [[Zen]]
| [[Zen Buddhism]] = #FFCC33
| [[Tibetan Buddhism]] = #800547; color: #FFD068;
| [[Hinduism]], [[Ecumenism]]
| [[Hindu]] | [[Hinduism]] = #FFC569
| [[Islam]] = #9BE89B
| [[Jainism]] = #F5DEB3
| [[Haredi Judaism]]
| [[Hasidic Judaism]]
| [[Orthodox Judaism]]
| [[Modern Orthodox Judaism]]
| [[Conservative Judaism]]
| [[Neolog Judaism]] = #9BB4EB
| [[Reconstructionist Judaism]]
| [[Reform Judaism]] = #87CEFA
| [[Judaism]] = #ADD8E6
| [[Romanian Church United with Rome, Greek-Catholic|Romanian Greek Catholic Church]]
| [[Romanian Greek Catholic Church]]
| [[Roman Catholic Church|Roman Catholic]]
| [[Roman Catholicism|Roman Catholic]]
| [[Roman Catholic Church]]
| [[Roman Catholicism]]
| [[Roman Catholic]]
| [[Catholic Church]]
| [[Catholic Church|Roman Catholic]]
| [[Catholic]] = #FFCC99
| [[Shia Islam|Shia]]
| [[Shia Islam|Shia (Twelver)]]
| [[Shia Islam]]
| [[Shia]] = #ABE9CC
| [[Ahmadiyya]]
| [[Ahmadi]]
| [[Ahmadiyya Islam]]
| [[Ahmadiyya|Ahmadi]]
| [[Ahl al-Hadith]]
| [[Ahle Hadith]]
| [[Barelvi]]
| [[Deobandi]]
| [[Hanafi]]
| [[Shafi'i]]
| [[Shafi'i|Sunni (Shafi'i)]]
| [[Sunni Islam|Sunni]]
| [[Sunni Islam]]
| [[Sunni]] = #CCFFCC
| [[Syriac Orthodox]]
| [[Syriac Catholic]]
| [[Maronite Catholic]]
| [[Chaldean Catholic]]
| [[Assyrian Church of the East]]= #CCB2FF
| [[Baháʼí]]
| [[Bahá'í]]
| [[Baháʼí Faith|Baháʼí]]
| [[Bahá'í Faith|Bahá'í]]
| [[Bahá'í Faith|Baháʼí]]
| [[Baháʼí Faith]]
| [[Bahá'í Faith]] = #FF8C00
| [[Sikhism]] = #FFC600
| [[Shinto]] = #A12F25; color: #FFF;
| [[Taoism]] = #505858; color: #FFF;
| #default = #D3D3D3
}}<!--
--><noinclude>{{documentation}}</noinclude>
c1p022hskusjg73fb4vfa2eys632o4q
पटिरूप:Location map
10
7521
104282
2026-09-11T14:27:04Z
咽頭べさ
6149
Created page with "<includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude>"
104282
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude>
dg6vj3epjyfwx0m7tx62smhp6gs0y2u
पटिरूप:Designation/divbox
10
7522
104283
2026-09-11T14:28:16Z
咽頭べさ
6149
Created page with "{{#invoke:Designation|divbox}}<noinclude> {{documentation}} </noinclude>"
104283
wikitext
text/x-wiki
{{#invoke:Designation|divbox}}<noinclude>
{{documentation}}
</noinclude>
j3e114mk5wg5ffnl5bl851dmd3vfnrs
104328
104283
2026-09-12T01:08:08Z
咽頭べさ
6149
104328
wikitext
text/x-wiki
{{#if:{{{1<includeonly>|</includeonly>}}}|
<div style="border:4px solid {{#if:{{{delisted|}}}|#ddd|{{Designation/colour2|{{{1}}}}}}}; font-weight: bold; line-height: 1.5; text-align: center;">
'''{{#if:{{{delisted|}}}|पुब्ब }}{{Designation/text|{{{1}}}}}'''</div>}}<noinclude>
{{documentation}}
</noinclude>
h30o66dn82h58soe6iim89poj59fpwk
Module:Designation
828
7523
104284
2026-09-11T14:30:07Z
咽頭べさ
6149
Created page with "require('strict') local p = {} local sandbox-- = '/sandbox' -- COMMENT OUT this defintion on the live version local validate = function(args) local former = false if args.delisted=='yes' then former = true end local par if args and args[1] and args[1]~='' then par = args[1]:lower() if par:sub(1, 6)=='former' then former = true par = par:sub(7) -- strip off "former" from start end local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or..."
104284
Scribunto
text/plain
require('strict')
local p = {}
local sandbox-- = '/sandbox' -- COMMENT OUT this defintion on the live version
local validate = function(args)
local former = false
if args.delisted=='yes' then
former = true
end
local par
if args and args[1] and args[1]~='' then
par = args[1]:lower()
if par:sub(1, 6)=='former' then
former = true
par = par:sub(7) -- strip off "former" from start
end
local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or ''))
if list[par] then -- lookup not needed
return list[par], former
else -- attempt lookup
local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or ''))
if lookup[par] then -- successful lookup
par = lookup[par]
return list[par], former
else
local category = mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with invalid designation]]' or ''
return 'Invalid designation' .. category
end
end
else
return 'No parameter'
end
end
local get_data = function(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame, {wrappers = {
'Template:Designation',
'Template:Designation/text',
'Template:Designation/colour',
'Template:Designation/colour2',
'Template:Designation/divbox',
'Template:Designation/abbreviation'
}})
return validate(args)
end
local text = function(frame, data, former)
local text = data.text
if data.lang then
text = frame:expandTemplate{title = 'lang', args = {
code = data.lang,
text = text
}}
end
return text and ((former and 'Former ' or '') .. text)
end
p.text = function(frame)
local data, former = get_data(frame)
if type(data)=='string' then
return data
end
return text(frame, data, former)
end
local colour = function(data, former, index)
local color
if former then
color = 'DDDDDD'
elseif data[index] then
color = data[index]
else
color = 'A8EDEF' -- default colour
end
return color and ('#' .. color)
end
p.color = function(frame)
local data, former = get_data(frame)
if type(data)=='string' then
return data
end
return mw.text.nowiki(colour(data, former, 'col'))
end
p.color2 = function(frame)
local data, former = get_data(frame)
if type(data)=='string' then
return data
end
return mw.text.nowiki(colour(data, former, 'col2'))
end
p.abbr = function(frame)
local data, former = get_data(frame)
if type(data)=='string' then
return data
end
return former and '???' or data.abbr or '???'
end
local box = function(data, color, text)
local div = mw.html.create('div')
:css('line-height', '1.5')
:css('text-align', 'center')
if type(data)=='string' then
local invalid = mw.html.create('span')
:css('color', 'red')
:wikitext('Error: ' .. data)
div:node(invalid)
else
div:css('border-style', 'solid')
:css('border-width', '4px')
:css('border-color', color)
:wikitext(text)
end
return div
end
p.divbox = function(frame)
local data, former = get_data(frame)
local color = colour(data, former, 'col2')
local text = text(frame, data, former)
return tostring(box(data, color, text))
end
p.doc_table = function(frame)
local scope = frame.args and frame.args.scope
local scopes = {}
for s in mw.text.gsplit(scope, ",", true) do
scopes[mw.text.trim(s:lower())] = true
end
local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or ''))
local rev_lookup = {}
for alias, code in pairs(lookup) do
if rev_lookup[code] then
table.insert(rev_lookup[code], alias)
else
rev_lookup[code] = {alias}
end
end
local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or ''))
local header = mw.html.create('tr')
:tag('th'):wikitext('Code'):done()
:tag('th'):wikitext('Designation'):done()
:tag('th'):css('width', '250px'):wikitext('Bordered version'):done()
:tag('th'):wikitext('Scope'):done()
:tag('th'):wikitext('Aliases'):done()
local tab = mw.html.create('table')
:addClass('wikitable')
:addClass('sortable')
:node(header)
for code, data in pairs(list) do
if scopes[data.scope:lower()] then
local des = mw.html.create('td')
:css('text-align', 'center')
:css('background', '#' .. (data.col or 'A8EDEF'))
:wikitext(data.text)
local border = mw.html.create('td')
:node(box(data, '#'..(data.col2 or 'A8EDEF'), data.text))
local row = mw.html.create('tr')
:tag('th'):wikitext(code):done()
:node(des)
:node(border)
:tag('td'):css('text-align', 'center'):wikitext(data.scope):done()
:tag('td'):wikitext(rev_lookup[code] and table.concat(rev_lookup[code], ', ')):done()
tab:node(row)
end
end
return tostring(tab)
end
local check_params = function(args, n)
local desp = {root = args['designated_other' .. n]}
local suffixes = {'name', 'color', 'textcolor', 'link', 'num_position', 'number', 'abbr'}
for _, s in ipairs(suffixes) do
desp[s] = args['designated_other' .. n .. '_' .. s]
end
local data = desp.root and validate{[1]=desp.root}
return desp, data
end
p.header = function(frame)
local desp, data = check_params(frame:getParent().args, frame.args[1])
local makediv = function(text, bgcolor, num, textcolor)
local autolink = require('Module:Link if exists')._main
local link = autolink{[1]=text}
local span = mw.html.create('span')
:css('color', textcolor)
:wikitext(link)
local div = mw.html.create('div')
:css('width', '100%')
:css('text-align', 'center')
:css('line-height', '1.5')
:css('color', 'var(--color-base)')
:css('background', bgcolor)
:node(span)
:wikitext(num)
return tostring(div)
end
local num = ''
local position = desp.num_position and desp.num_position:lower()
if desp.number and desp.number~='' and (position=='both' or position=='top') then
local abbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}}
num = ' ' .. abbr .. ' ' .. desp.number
end
if data and type(data)=='table' then
return makediv(data.text, '#' .. (data.col or 'A8EDEF'), num)
elseif desp.name then
return makediv(desp.name, desp.color or 'FFFFFF', num, desp.textcolor)
end
end
p.label = function(frame)
local desp, data = check_params(frame:getParent().args, frame.args[1])
local abbr = (data and data.abbr) or desp.abbr or '???'
local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or ''
return frame.args[2] .. ' ' .. abbr .. category
end
p.number = function(frame)
local desp, data = check_params(frame:getParent().args, frame.args[1])
local out = ''
local position = desp.num_position and desp.num_position:lower()
if position~='top' then
local noabbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}}
local abbr = data and data.abbr or desp.abbr or '???'
local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or ''
out = abbr .. ' ' .. noabbr .. category
end
return out
end
return p
q2q1vuo6if0moemom2sifd1yfq169dy
Module:Wikidata/i18n
828
7524
104285
2026-09-11T14:31:50Z
咽頭べさ
6149
Created page with "return { }"
104285
Scribunto
text/plain
return {
}
902rac2jbx6q4ghmlz4kd8f4aoo7nh4
Module:InfoboxImage/data
828
7525
104287
2026-09-11T14:35:12Z
咽頭べさ
6149
Created page with " local placeholderList = { "Blue - Replace this image female.svg", "Blue - Replace this image male.svg", "Flag of None (square).svg", "Flag of None.svg", "Flag of.svg", "Green - Replace this image female.svg", "Green - Replace this image male.svg", "Image is needed female.svg", "Image is needed male.svg", "Location map of None.svg", "Male no free image yet.png", "Missing flag.png", "No flag.svg", "No free portrait.s..."
104287
Scribunto
text/plain
local placeholderList = {
"Blue - Replace this image female.svg",
"Blue - Replace this image male.svg",
"Flag of None (square).svg",
"Flag of None.svg",
"Flag of.svg",
"Green - Replace this image female.svg",
"Green - Replace this image male.svg",
"Image is needed female.svg",
"Image is needed male.svg",
"Location map of None.svg",
"Male no free image yet.png",
"Missing flag.png",
"No flag.svg",
"No free portrait.svg",
"No portrait (female).svg",
"No portrait (male).svg",
"Red - Replace this image female.svg",
"Red - Replace this image male.svg",
"Replace this image female.svg",
"Replace this image male (blue).svg",
"Replace this image male.svg",
"Silver - Replace this image female.svg",
"Silver - Replace this image male.svg",
"Replace this image.svg",
"Cricket no pic.png",
"CarersLogo.gif",
"Diagram Needed.svg",
"Example.jpg",
"Image placeholder.png",
"No male portrait.svg",
"Nocover-upload.png",
"NoDVDcover copy.png",
"Noribbon.svg",
"No portrait-BFD-test.svg",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Sin bandera.svg",
"Sin escudo.svg",
"Replace this image - temple.png",
"Replace this image butterfly.png",
"Replace this image.svg",
"Replace this image1.svg",
"Resolution angle.png",
"Image-No portrait-text-BFD-test.svg",
"Insert image here.svg",
"No image available.png",
"NO IMAGE YET square.png",
"NO IMAGE YET.png",
"No Photo Available.svg",
"No Screenshot.svg",
"No-image-available.jpg",
"Null.png",
"PictureNeeded.gif",
"Place holder.jpg",
"Unbenannt.JPG",
"UploadACopyrightFreeImage.svg",
"UploadAnImage.gif",
"UploadAnImage.svg",
"UploadAnImageShort.svg",
"CarersLogo.gif",
"Diagram Needed.svg",
"No male portrait.svg",
"NoDVDcover copy.png",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Noimage.gif",
}
local placeholder_image = {}
for _, val in ipairs(placeholderList) do
placeholder_image[val] = true
end
local categories = {
url_image_links = "[[Category:Pages using infoboxes with URL in image parameter]]",
thumbnail_images = "[[Category:Pages using infoboxes with thumbnail images]]",
}
return { placeholder_image = placeholder_image, categories = categories }
4h39dpz9m6jxmu0vznaup0kyz6rbh4y
Module:Fallbacklist
828
7526
104288
2026-09-11T14:36:16Z
咽頭べさ
6149
Created page with "--- Language fallback rules for other Lua modules. -- @see [[c:Module:Fallbacklist]] -- @release stable -- @submodule return { -- crh (Crimean Tatar) cluster: crh-cyrl , crh-latn -> crh (Crimean Tatar) ['crh'] = {'crh-latn'}, ['crh-cyrl'] = {'crh', 'ru'}, ['crh-latn'] = {'crh'}, -- de (German) cluster: ['als'] = {'gsw', 'de'}, -- Alemannisch ['bar'] = {'de'},..."
104288
Scribunto
text/plain
--- Language fallback rules for other Lua modules.
-- @see [[c:Module:Fallbacklist]]
-- @release stable
-- @submodule
return {
-- crh (Crimean Tatar) cluster: crh-cyrl , crh-latn -> crh (Crimean Tatar)
['crh'] = {'crh-latn'},
['crh-cyrl'] = {'crh', 'ru'},
['crh-latn'] = {'crh'},
-- de (German) cluster:
['als'] = {'gsw', 'de'}, -- Alemannisch
['bar'] = {'de'}, -- Bavarian
['de-at'] = {'de'}, -- Austrian German
['de-ch'] = {'de'}, -- Swiss High German
['de-formal'] = {'de'}, -- German (formal address)
['dsb'] = {'de'}, -- Lower Sorbian
['frr'] = {'de'}, -- Northern Frisian
['hsb'] = {'de'}, -- Upper Sorbian
['ksh'] = {'de'}, -- Colognian
['lb'] = {'de'}, -- Luxembourgish
['nds'] = {'nds-nl', 'de'}, -- Low German
['nds-nl'] = {'nds', 'nl'}, -- Low Saxon (Netherlands)
['pdc'] = {'de'}, -- Deitsch
['pdt'] = {'nds', 'de'}, -- Plautdietsch
['pfl'] = {'de'}, -- Pälzisch
['sli'] = {'de'}, -- Lower Silesian
['stq'] = {'de'}, -- Seeltersk
['vmf'] = {'de'}, -- Upper Franconian
-- es (Spanish) cluster
['an'] = {'es'}, -- Aragonese
['arn'] = {'es'}, -- Mapuche
['ay'] = {'es'}, -- Aymara
['cbk-zam'] = {'es'}, -- Chavacano de Zamboanga
['gn'] = {'es'}, -- Guarani
['lad'] = {'es'}, -- Ladino
['nah'] = {'es'}, -- Nahuatl
['qu'] = {'es'}, -- Quechua
['qug'] = {'qu', 'es'}, -- Runa shimi
-- et (Estonian) cluster
['liv'] = {'et'}, -- Līvõ kēļ
['vep'] = {'et'}, -- Veps
['vro'] = {'et'}, -- Võro
['fiu-vro'] = {'vro', 'et'}, -- Võro
-- fa (Persian) cluster
['bcc'] = {'fa'}, -- Southern Balochi
['bqi'] = {'fa'}, -- Bakhtiari
['glk'] = {'fa'}, -- Gilaki
['mzn'] = {'fa'}, -- Mazandarani
-- fi (Finnish) cluster:
['fit'] = {'fi'}, -- meänkieli
['vot'] = {'fi'}, -- Votic
-- fr (French) cluster:
['bm'] = {'fr'}, -- Bambara
['br'] = {'fr'}, -- Breton
['co'] = {'fr'}, -- Corsican
['ff'] = {'fr'}, -- Fulah
['frc'] = {'fr'}, -- Cajun French
['frp'] = {'fr'}, -- Franco-Provençal
['ht'] = {'fr'}, -- Haitian
['ln'] = {'fr'}, -- Lingala
['mg'] = {'fr'}, -- Malagasy
['pcd'] = {'fr'}, -- Picard
['sg'] = {'fr'}, -- Sango
['ty'] = {'fr'}, -- Tahitian
['wa'] = {'fr'}, -- Walloon
['wo'] = {'fr'}, -- Wolof
-- hi (Hindi) cluster
['anp'] = {'hi'}, -- Angika
['mai'] = {'hi'}, -- Maithili
['sa'] = {'hi'}, -- Sanskrit
-- hif (Fiji Hindi) cluster: hif-deva , hif-latn -> hif (Fiji Hindi)
['hif'] = {'hif-latn'},
['hif-deva'] = {'hif'},
['hif-latn'] = {'hif'},
-- id (Indonesian) cluster
['min'] = {'id'}, -- Minangkabau
['ace'] = {'id'}, -- Achinese
['bug'] = {'id'}, -- Buginese
['bjn'] = {'id'}, -- Banjar
['jv'] = {'id'}, -- Javanese
['su'] = {'id'}, -- Sundanese
['map-bms'] = {'jv', 'id'}, -- Basa Banyumasan
-- ike (Eastern Canadian Inuktitut) cluster: ike-cans , ike-latn -> ike (Eastern Canadian Inuktitut)
['ike-cans'] = {'ik'},
['ike-latn'] = {'ik'},
-- it (Italian) cluster
['egl'] = {'it'}, -- Emiliàn
['eml'] = {'it'}, -- Emiliano-Romagnolo
['fur'] = {'it'}, -- Friulian
['lij'] = {'it'}, -- Ligure
['lmo'] = {'it'}, -- lumbaart
['nap'] = {'it'}, -- Neapolitan
['pms'] = {'it'}, -- Piedmontese
['rgn'] = {'it'}, -- Romagnol
['scn'] = {'it'}, -- Sicilian
['vec'] = {'it'}, -- vèneto
-- kk (Kazakh) cluster:
-- kk-arab , kk-cyrl , kk-latn , kk-cn , kk-kz , kk-tr -> kk (Kazakh)
['kk'] = {'kk-cyrl'}, -- Kazakh
['kk-arab'] = {'kk-cyrl', 'kk'}, -- Kazakh (Arabic script)
['kk-cn'] = {'kk-arab', 'kk-cyrl', 'kk'}, -- Kazakh (China)
['kk-cyrl'] = {'kk'}, -- Kazakh (Cyrillic script)
['kk-kz'] = {'kk', 'kk-cyrl'}, -- Kazakh (Kazakhstan)
['kk-latn'] = {'kk-cyrl', 'kk'}, -- Kazakh (Latin script)
['kk-tr'] = {'kk-latn', 'kk-cyrl', 'kk'}, -- Kazakh (Turkey)
['kaa'] = {'kk-latn', 'kk-cyrl'}, -- Kara-Kalpak
-- ku (Kurdish) cluster: ku-latn , ku-arab -> ku (Kurdish)
['ku'] = {'ku-latn'},
['ku-arab'] = {'ckb', 'ckb-arab', 'ku'}, -- كوردي (عەرەبی)
['ku-latn'] = {'ku'},
['ckb'] = {'ckb-arab', 'ku'},
-- nl (Dutch) cluster
['af'] = {'nl'}, -- Afrikaans
['fy'] = {'nl'}, -- Western Frisian
['li'] = {'nl'}, -- Liechtenstein
['nl-informal'] = {'nl'}, -- Nederlands (informeel)
['vls'] = {'nl'}, -- Vlaams
['zea'] = {'nl'}, -- Zeeuws
--pl (Polish) cluster
['csb'] = {'pl'}, -- Kashubian
['szl'] = {'pl'}, -- Silesian
-- pt (Portuguese) cluster
['gl'] = {'pt'}, -- Galician
['mwl'] = {'pt'}, -- Mirandese
['pt-br'] = {'pt'}, -- Brazilian Portuguese
-- ro (Romanian) cluster
['mo'] = {'ro'}, -- Moldavian
['rmy'] = {'ro'}, -- Romani
-- ru (Russian) cluster
['ab'] = {'ru'}, -- Abkhazian
['av'] = {'ru'}, -- Avaric
['ba'] = {'ru'}, -- Bashkir
['be-tarask'] = {'ru'}, -- Belorussian
['ce'] = {'ru'}, -- Chechen
['crh-cyrl'] = {'ru'}, -- Crimean Tatar (Cyrillic script)
['cv'] = {'ru'}, -- Chuvash
['inh'] = {'ru'}, -- Ingush
['koi'] = {'ru'}, -- Komi-Permyak
['krc'] = {'ru'}, -- Karachay-Balkar
['kv'] = {'ru'}, -- Komi
['lbe'] = {'ru'}, -- лакку
['lez'] = {'ru'}, -- Lezghian
['mhr'] = {'ru'}, -- Eastern Mari
['mrj'] = {'ru'}, -- Hill Mari
['myv'] = {'ru'}, -- Erzya
['os'] = {'ru'}, -- Ossetic
['rue'] = {'uk', 'ru'}, -- Rusyn
['sah'] = {'ru'}, -- Sakha
['tt'] = {'tt-cyrl', 'ru'}, -- Tatar
['tt-cyrl'] = {'ru'}, -- Tatar (Cyrillic script)
['udm'] = {'ru'}, -- Udmurt
['uk'] = {'ru'}, -- Ukranian
['xal'] = {'ru'}, -- Kalmyk
['tt'] = {'tt-cyrl', 'ru'}, -- Tatar
-- ruq (Megleno Romanian) cluster: ruq-cyrl , ruq-grek , ruq-latn -> ruq (Megleno Romanian)
['ruq'] = {'ruq-latn', 'ro'}, -- Megleno-Romanian
['ruq-cyrl'] = {'ruq', 'mk'}, -- Megleno-Romanian (Cyrillic script)
['ruq-grek'] = {'ruq'}, -- Megleno-Romanian (Greek script)
['ruq-latn'] = {'ro', 'ruq'}, -- Megleno-Romanian (Latin script)
-- sr (Serbian) cluster: sr-ec , sr-el -> sr (Serbian)
['sr'] = {'sr-ec'},
['sr-ec'] = {'sr'},
['sr-el'] = {'sr'},
-- tg (Tajik) cluster: tg-cyrl , tg-latn -> tg (Tajik)
['tg'] = {'tg-cyrl'},
['tg-cyrl'] = {'tg'},
['tg-latn'] = {'tg'},
-- tr (Turkish) cluster
['gag'] = {'tr'}, -- Gagauz
['kiu'] = {'tr'}, -- Kirmanjki
['lzz'] = {'tr'}, -- Lazuri
-- tt (Tatar) cluster: tt-cyrl , tt-latn -> tt (Tatar)
['tt-cyrl'] = {'tt'},
['tt-latn'] = {'tt'},
-- zh (Chinese) cluster
-- /includes/language/converters/ZhConverter.php
-- https://gerrit.wikimedia.org/r/703560
['cdo'] = {'nan', 'zh-hant', 'zh', 'zh-hans'}, -- Min Dong Chinese
['gan'] = {'gan-hant', 'gan-hans', 'zh-hant', 'zh-hans', 'zh'}, -- Gan
['gan-hans'] = {'gan', 'gan-hant', 'zh-hans', 'zh', 'zh-hant'}, -- Simplified Gan script
['gan-hant'] = {'gan', 'gan-hans', 'zh-hant', 'zh', 'zh-hans'}, -- Traditional Gan script
['hak'] = {'zh-hant', 'zh', 'zh-hans'}, -- Hakka
['ii'] = {'zh-cn', 'zh-hans', 'zh', 'zh-hant'}, -- Sichuan Yi
['lzh'] = {'zh-hant', 'zh', 'zh-hans'}, -- Literary Chinese
['nan'] = {'cdo', 'zh-hant', 'zh', 'zh-hans'}, -- Min Nan Chinese
['szy'] = {'zh-tw', 'zh-hant', 'zh', 'zh-hans'}, -- Sakizaya
['tay'] = {'zh-tw', 'zh-hant', 'zh', 'zh-hans'}, -- Atayal
['trv'] = {'zh-tw', 'zh-hant', 'zh', 'zh-hans'}, -- Seediq
['wuu'] = {'zh-hans', 'zh-hant', 'zh'}, -- Wu
-- https://phabricator.wikimedia.org/T59138
-- ['wuu'] = {'wuu-hans, 'wuu-hant', 'zh-hans', 'zh-hant', 'zh'}, -- Wu
-- ['wuu-hans'] = {'wuu', 'wuu-hant', 'zh-hans', 'zh', 'zh-hant'}, -- Simplified Wu
-- ['wuu-hant'] = {'wuu', 'wuu-hans', 'zh-hant', 'zh', 'zh-hans'}, -- Traditional Wu
['yue'] = {'zh-hk', 'zh-hant', 'zh-hans', 'zh'}, -- Cantonese
-- https://phabricator.wikimedia.org/T59106
-- ['yue'] = {'yue-hant', 'yue-hans, 'zh-hk', 'zh-hant', 'zh-hans', 'zh'}, -- Cantonese
-- ['yue-hans'] = {'yue', 'yue-hant', 'zh-hans', 'zh', 'zh-hk', 'zh-hant'}, -- Simplified Cantonese
-- ['yue-hant'] = {'yue', 'yue-hans', 'zh-hk', 'zh-hant', 'zh', 'zh-hans'}, -- Traditional Cantonese
['za'] = {'zh-hans', 'zh-hant', 'zh'}, -- Zhuang
-- The time allocated for running scripts has expired.
-- ['zh'] = {'zh-hans', 'zh-hant', 'zh-cn', 'zh-tw', 'zh-hk'}, -- Chinese
-- ['zh-hans'] = {'zh-cn', 'zh', 'zh-hant'}, -- Simplified Chinese
-- ['zh-hant'] = {'zh-tw', 'zh-hk', 'zh', 'zh-hans'}, -- Traditional Chinese
-- ['zh-tw'] = {'zh-hant', 'zh-hk', 'zh', 'zh-hans'}, -- Chinese (Taiwan)
-- ['zh-hk'] = {'zh-hant', 'zh-tw', 'zh', 'zh-hans'}, -- Chinese (Hong Kong)
['zh'] = {'zh-hans', 'zh-hant', 'zh-hk'}, -- Chinese
['zh-hans'] = {'zh-hant', 'zh-hk'}, -- Simplified Chinese
['zh-hant'] = {'zh-hk', 'zh-hans'}, -- Traditional Chinese
['zh-cn'] = {'zh-hans', 'zh', 'zh-hant'}, -- Chinese (Mainland China)
['zh-sg'] = {'zh-hans', 'zh-cn', 'zh', 'zh-hant'}, -- Chinese (Singapore)
['zh-my'] = {'zh-hans', 'zh-sg', 'zh-cn', 'zh', 'zh-hant'}, -- Chinese (Malaysia)
['zh-tw'] = {'zh-hant', 'zh-hk', 'zh-hans'}, -- Chinese (Taiwan)
['zh-hk'] = {'zh-hant', 'zh-hans'}, -- Chinese (Hong Kong)
['zh-mo'] = {'zh-hant', 'zh-hk', 'zh-tw', 'zh', 'zh-hans'}, -- Chinese (Macau)
['zh-classical'] = {'lzh', 'zh-hant', 'zh', 'zh-hans'}, -- Classical Chinese -> Literary Chinese
['zh-min-nan'] = {'nan', 'cdo', 'zh-hant', 'zh', 'zh-hans'}, -- Chinese (Min Nan) -> Min Nan Chinese
['zh-yue'] = {'yue', 'zh-hk', 'zh-hant', 'zh-hans', 'zh'}, -- Yue Chinese -> Cantonese
------------------------
--------- misc ---------
------------------------
['arz'] = {'ar'}, -- Egyptian Arabic -> Arabic
['azb'] = {'az'}, -- Southern Azerbaijani -> Azerbaijani
['be-x-old'] = {'be-tarask'}, -- be-x-old -> be-tarask (wrong to correct Taraškievica form of Belarusian orthography)
['bh'] = {'bho'}, -- Bihari -> Bhojpuri
['bpy'] = {'bn'}, -- Bishnupria Manipuri -> Bengali
-- da
['jut'] = {'da'}, -- Jutish -> Danish
['kl'] = {'da'}, -- Kalaallisut -> Danish
['en-gb'] = {'en'}, -- Brexit -> English
['yi'] = {'he'}, -- Yiddish -> Hebrew
['iu'] = {'ike-cans'}, -- Inuktitut -> Eastern Canadian (Aboriginal syllabics)
['xmf'] = {'ka'}, -- Mingrelian -> Georgian
['kbd'] = {'kbd-cyrl', 'ru'}, -- Kabardian -> Адыгэбзэ
['tcy'] = {'kn'}, -- Tulu -> Kannada
['ko-kp'] = {'ko'}, -- 한국어 (조선) -> Korean
['ks'] = {'ks-arab'}, -- Kashmiri -> Kashmiri (Arabic script)
-- lt
['bat-smg'] = {'sgs', 'lt'}, -- Samogitian -> Lithuanian
['sgs'] = {'lt'}, -- Samogitian -> Lithuanian
['ltg'] = {'lv'}, -- Latvian -> Latgalian
['dtp'] = {'ms'}, -- Central Dusun -> Malay
['no'] = {'nb'}, -- Norwegian (bokmål) -> Norwegian Bokmål
['roa-rup'] = {'rup'}, -- Aromanian (other Romance) -> Aromanian
['aln'] = {'sq'}, -- Gheg Albanian -> Albanian
['ug'] = {'ug-arab'}, -- Uyghur -> Uyghur (Arabic script)
['khw'] = {'ur'}, -- Khowar -> Urdu
}
puottz3ra6u2ba8av2uuzkxjgvm5n0q
Module:Entrypoint
828
7527
104290
2026-09-11T14:39:23Z
咽頭べさ
6149
Created page with "--- Entrypoint templating wrapper for Scribunto packages. -- The module generates an entrypoint function that can execute Scribunto -- package calls in the template context. This allows a package to support -- both direct and template invocations. -- -- @script entrypoint -- @release beta -- @author [[wikia:dev:User:8nml|8nml]] (Fandom Dev Wiki) -- @param {table} package Scribunto package. -- @error[85] {..."
104290
Scribunto
text/plain
--- Entrypoint templating wrapper for Scribunto packages.
-- The module generates an entrypoint function that can execute Scribunto
-- package calls in the template context. This allows a package to support
-- both direct and template invocations.
--
-- @script entrypoint
-- @release beta
-- @author [[wikia:dev:User:8nml|8nml]] (Fandom Dev Wiki)
-- @param {table} package Scribunto package.
-- @error[85] {string} 'you must specify a function to call'
-- @error[91] {string} 'the function you specified did not exist'
-- @error[opt,95] {string} '$2 is not a function'
-- @return {function} Template entrypoint - @{main}.
-- @note Parent frames are not available in Entrypoint's
-- `frame`. This is because recursive (grandparent)
-- frame access is impossible in legacy Scribunto
-- due to [[mw:Manual:Parser#Empty-argument expansion
-- cache|empty-argument expansion cache]] limitations.
-- @note As Entrypoint enables template access rather than
-- a new extension hook, it does not work with named
-- numeric parameters such as `1=` or `2=`. This may
-- result in unexpected behaviour such as Entrypoint
-- and module errors.
--- Stateless, sequential Lua iterator.
-- @function inext
-- @param {table} t Invariant state to loop over.
-- @param {number} i Control variable (current index).
-- @return[opt] {number} Next index.
-- @return[opt] {number|string|table|boolean} Next value.
-- @see https://github.com/lua/lua/blob/v5.1.1/lbaselib.c#L247
local inext = select(1, ipairs{})
--- Check for MediaWiki version 1.25.
-- The concurrent Scribunto release adds a type check for package functions.
-- @variable {boolean} func_check
-- @see [[mw:MediaWiki 1.24/wmf7#Scribunto]]
local func_check = tonumber(mw.site.currentVersion:match('^%d+.%d+')) >= 1.25
--- MediaWiki error message getter.
-- Mimics Scribunto error formatting for script errors.
-- @function msg
-- @param {string} key MediaWiki i18n message key.
-- @param[opt] {string} fn_name Name of package function.
-- @return {string} Formatted lowercase message.
-- @local
local function msg(key, fn_name)
return select(1, mw.message.new(key)
:plain()
:match(':%s*(.-)[.۔。෴։።]?$')
:gsub('^.', mw.ustring.lower)
:gsub('$2', fn_name or '$2')
)
end
--- Template entrypoint function generated by this module.
-- @function main
-- @param {Frame} frame Scribunto frame in module context.
-- @return {string} Module output in template context.
return function(package) return function(f)
local frame = f:getParent()
local args_mt = {}
local arg_cache = {}
args_mt.__pairs = function()
return next, arg_cache, nil
end
args_mt.__ipairs = function()
return inext, arg_cache, 0
end
args_mt.__index = function(t, k)
return arg_cache[k]
end
for key, val in pairs(frame.args) do
arg_cache[key] = val
end
local fn_name = table.remove(arg_cache, 1)
f.args = setmetatable({}, args_mt)
frame.args = setmetatable({}, args_mt)
if not fn_name then
error(msg('scribunto-common-nofunction'))
end
fn_name = mw.text.trim(fn_name)
if not package[fn_name] then
error(msg('scribunto-common-nosuchfunction', fn_name))
end
if func_check and type(package[fn_name]) ~= 'function' then
error(msg('scribunto-common-notafunction', fn_name))
end
return package[fn_name](frame)
end end
l7xohd37g14pkh4rq39hdb3rm65nejf
पटिरूप:PAGENAMEBASE
10
7528
104291
2026-09-11T14:41:30Z
咽頭べさ
6149
Created page with "{{safesubst:<noinclude/>#invoke:String|replace|{{{1|{{safesubst:<noinclude/>PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude> {{documentation}} </noinclude>"
104291
wikitext
text/x-wiki
{{safesubst:<noinclude/>#invoke:String|replace|{{{1|{{safesubst:<noinclude/>PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude>
{{documentation}}
</noinclude>
hfmr5rmcuhdncvzny8x6n6ob8hddcpq
पटिरूप:Convert
10
7529
104293
2026-09-11T14:44:53Z
咽頭べさ
6149
Created page with "<includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=off default}}</includeonly><noinclude> {{documentation}} </noinclude>"
104293
wikitext
text/x-wiki
<includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert|abbr=off default}}</includeonly><noinclude>
{{documentation}}
</noinclude>
p48edtao0zq0vq3dgrxtqr5ux9p25bf
Module:Convert
828
7530
104294
2026-09-11T14:46:49Z
咽頭べさ
6149
Created page with "-- Convert a value from one unit of measurement to another. -- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg) -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92) local abs = math.abs local floor = math.floor local format = string.format local log10 = math.log10 local ustring = mw.ustring local ulen = ustring.len local usub = ustring.sub -- Configuration options to keep ma..."
104294
Scribunto
text/plain
-- Convert a value from one unit of measurement to another.
-- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg)
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92)
local abs = math.abs
local floor = math.floor
local format = string.format
local log10 = math.log10
local ustring = mw.ustring
local ulen = ustring.len
local usub = ustring.sub
-- Configuration options to keep magic values in one location.
-- Conversion data and message text are defined in separate modules.
local config, maxsigfig
local numdot -- must be '.' or ',' or a character which works in a regex
local numsep, numsep_remove, numsep_remove2
local data_code, all_units
local text_code
local varname -- can be a code to use variable names that depend on value
local from_en_table -- to translate an output string of en digits to local language
local to_en_table -- to translate an input string of digits in local language to en
-- Use translation_table in convert/text to change the following.
local en_default -- true uses lang=en unless convert has lang=local or local digits
local group_method = 3 -- code for how many digits are in a group
local per_word = 'per' -- for units like "liters per kilometer"
local plural_suffix = 's' -- only other useful value is probably '' to disable plural unit names
local omitsep -- true to omit separator before local symbol/name
-- All units should be defined in the data module. However, to cater for quick changes
-- and experiments, any unknown unit is looked up in an extra data module, if it exists.
-- That module would be transcluded in only a small number of pages, so there should be
-- little server overhead from making changes, and changes should propagate quickly.
local extra_module -- name of module with extra units
local extra_units -- nil or table of extra units from extra_module
-- Some options in the invoking template can set variables used later in the module.
local currency_text -- for a user-defined currency symbol: {{convert|12|$/ha|$=€}} (euro replaces dollar)
local function from_en(text)
-- Input is a string representing a number in en digits with '.' decimal mark,
-- without digit grouping (which is done just after calling this).
-- Return the translation of the string with numdot and digits in local language.
if numdot ~= '.' then
text = text:gsub('%.', numdot)
end
if from_en_table then
text = text:gsub('%d', from_en_table)
end
return text
end
local function to_en(text)
-- Input is a string representing a number in the local language with
-- an optional numdot decimal mark and numsep digit grouping.
-- Return the translation of the string with '.' mark and en digits,
-- and no separators (they have to be removed here to handle cases like
-- numsep = '.' and numdot = ',' with input "1.234.567,8").
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
return text
end
local function decimal_mark(text)
-- Return ',' if text probably is using comma for decimal mark, or has no decimal mark.
-- Return '.' if text probably is using dot for decimal mark.
-- Otherwise return nothing (decimal mark not known).
if not text:find('[.,]') then return ',' end
text = text:gsub('^%-', ''):gsub('%+%d+/%d+$', ''):gsub('[Ee]%-?%d+$', '')
local decimal =
text:match('^0?([.,])%d+$') or
text:match('%d([.,])%d?%d?$') or
text:match('%d([.,])%d%d%d%d+$')
if decimal then return decimal end
if text:match('%.%d+%.') then return ',' end
if text:match('%,%d+,') then return '.' end
end
local add_warning, with_separator -- forward declarations
local function to_en_with_check(text, parms)
-- Version of to_en() for a wiki using numdot = ',' and numsep = '.' to check
-- text (an input number as a string) which might have been copied from enwiki.
-- For example, in '1.234' the '.' could be a decimal mark or a group separator.
-- From viwiki.
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if decimal_mark(text) == '.' then
local original = text
text = text:gsub(',', '') -- for example, interpret "1,234.5" as an enwiki value
if parms then
add_warning(parms, 0, 'cvt_enwiki_num', original, with_separator({}, text))
end
else
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
end
return text
end
local function omit_separator(id)
-- Return true if there should be no separator before id (a unit symbol or name).
-- For zhwiki, there should be no separator if id uses local characters.
-- The following kludge should be a sufficient test.
if omitsep then
if id:sub(1, 2) == '-{' then -- for "-{...}-" content language variant
return true
end
if id:byte() > 127 then
local first = usub(id, 1, 1)
if first ~= 'Å' and first ~= '°' and first ~= 'µ' then
return true
end
end
end
return id:sub(1, 1) == '/' -- no separator before units like "/ha"
end
local spell_module -- name of module that can spell numbers
local speller -- function from that module to handle spelling (set if needed)
local wikidata_module, wikidata_data_module -- names of Wikidata modules
local wikidata_code, wikidata_data -- exported tables from those modules (set if needed)
local function set_config(args)
-- Set configuration options from template #invoke or defaults.
config = args
maxsigfig = config.maxsigfig or 14 -- maximum number of significant figures
local data_module, text_module
local sandbox = config.sandbox and ('/' .. config.sandbox) or ''
data_module = "Module:Convert/data" .. sandbox
text_module = "Module:Convert/text" .. sandbox
extra_module = "Module:Convert/extra" .. sandbox
wikidata_module = "Module:Convert/wikidata" .. sandbox
wikidata_data_module = "Module:Convert/wikidata/data" .. sandbox
spell_module = "Module:ConvertNumeric"
data_code = mw.loadData(data_module)
text_code = mw.loadData(text_module)
all_units = data_code.all_units
local translation = text_code.translation_table
if translation then
numdot = translation.numdot
numsep = translation.numsep
if numdot == ',' and numsep == '.' then
if text_code.all_messages.cvt_enwiki_num then
to_en = to_en_with_check
end
end
if translation.group then
group_method = translation.group
end
if translation.per_word then
per_word = translation.per_word
end
if translation.plural_suffix then
plural_suffix = translation.plural_suffix
end
varname = translation.varname
from_en_table = translation.from_en
local use_workaround = true
if use_workaround then
-- 2013-07-05 workaround bug by making a copy of the required table.
-- mw.ustring.gsub fails with a table (to_en_table) as the replacement,
-- if the table is accessed via mw.loadData.
local source = translation.to_en
if source then
to_en_table = {}
for k, v in pairs(source) do
to_en_table[k] = v
end
end
else
to_en_table = translation.to_en
end
if translation.lang == 'en default' then
en_default = true -- for hiwiki
end
omitsep = translation.omitsep -- for zhwiki
end
numdot = config.numdot or numdot or '.' -- decimal mark before fractional digits
numsep = config.numsep or numsep or ',' -- group separator for numbers
-- numsep should be ',' or '.' or '' or ' ' or a Unicode character.
-- numsep_remove must work in a regex to identify separators to be removed.
if numsep ~= '' then
numsep_remove = (numsep == '.') and '%.' or numsep
end
if numsep ~= ',' and numdot ~= ',' then
numsep_remove2 = ',' -- so numbers copied from enwiki will work
end
end
local function collection()
-- Return a table to hold items.
return {
n = 0,
add = function (self, item)
self.n = self.n + 1
self[self.n] = item
end,
}
end
local function divide(numerator, denominator)
-- Return integers quotient, remainder resulting from dividing the two
-- given numbers, which should be unsigned integers.
local quotient, remainder = floor(numerator / denominator), numerator % denominator
if not (0 <= remainder and remainder < denominator) then
-- Floating point limits may need this, as in {{convert|160.02|Ym|ydftin}}.
remainder = 0
end
return quotient, remainder
end
local function split(text, delimiter)
-- Return a numbered table with fields from splitting text.
-- The delimiter is used in a regex without escaping (for example, '.' would fail).
-- Each field has any leading/trailing whitespace removed.
local t = {}
text = text .. delimiter -- to get last item
for item in text:gmatch('%s*(.-)%s*' .. delimiter) do
table.insert(t, item)
end
return t
end
local function strip(text)
-- If text is a string, return its content with no leading/trailing
-- whitespace. Otherwise return nil (a nil argument gives a nil result).
if type(text) == 'string' then
return text:match("^%s*(.-)%s*$")
end
end
local function table_len(t)
-- Return length (<100) of a numbered table to replace #t which is
-- documented to not work if t is accessed via mw.loadData().
for i = 1, 100 do
if t[i] == nil then
return i - 1
end
end
end
local function wanted_category(catkey, catsort, want_warning)
-- Return message category if it is wanted in current namespace,
-- otherwise return ''.
local cat
local title = mw.title.getCurrentTitle()
if title then
local nsdefault = '0' -- default namespace: '0' = article; '0,10' = article and template
local namespace = title.namespace
for _, v in ipairs(split(config.nscat or nsdefault, ',')) do
if namespace == tonumber(v) then
cat = text_code.all_categories[want_warning and 'warning' or catkey]
if catsort and catsort ~= '' and cat:sub(-2) == ']]' then
cat = cat:sub(1, -3) .. '|' .. mw.text.nowiki(usub(catsort, 1, 20)) .. ']]'
end
break
end
end
end
return cat or ''
end
local function message(parms, mcode, is_warning)
-- Return wikitext for an error message, including category if specified
-- for the message type.
-- mcode = numbered table specifying the message:
-- mcode[1] = 'cvt_xxx' (string used as a key to get message info)
-- mcode[2] = 'parm1' (string to replace '$1' if any in message)
-- mcode[3] = 'parm2' (string to replace '$2' if any in message)
-- mcode[4] = 'parm3' (string to replace '$3' if any in message)
local msg
if type(mcode) == 'table' then
if mcode[1] == 'cvt_no_output' then
-- Some errors should cause convert to output an empty string,
-- for example, for an optional field in an infobox.
return ''
end
msg = text_code.all_messages[mcode[1]]
end
parms.have_problem = true
local function subparm(fmt, ...)
local rep = {}
for i, v in ipairs({...}) do
rep['$' .. i] = v
end
return (fmt:gsub('$%d+', rep))
end
if msg then
local parts = {}
local regex, replace = msg.regex, msg.replace
for i = 1, 3 do
local limit = 40
local s = mcode[i + 1]
if s then
if regex and replace then
s = s:gsub(regex, replace)
limit = nil -- allow long "should be" messages
end
-- Escape user input so it does not break the message.
-- To avoid tags (like {{convert|1<math>23</math>|m}}) breaking
-- the mouseover title, any strip marker starting with char(127) is
-- replaced with '...' (text not needing i18n).
local append
local pos = s:find(string.char(127), 1, true)
if pos then
append = '...'
s = s:sub(1, pos - 1)
end
if limit and ulen(s) > limit then
s = usub(s, 1, limit)
append = '...'
end
s = mw.text.nowiki(s) .. (append or '')
else
s = '?'
end
parts['$' .. i] = s
end
local function ispreview()
-- Return true if a prominent message should be shown.
if parms.test == 'preview' or parms.test == 'nopreview' then
-- For testing, can preview a real message or simulate a preview
-- when running automated tests.
return parms.test == 'preview'
end
local success, revid = pcall(function ()
return (parms.frame):preprocess('{{REVISIONID}}') end)
return success and (revid == '')
end
local want_warning = is_warning and
not config.warnings and -- show unobtrusive warnings if config.warnings not configured
not msg.nowarn -- but use msg settings, not standard warning, if specified
local title = string.gsub(msg[1] or 'Missing message', '$%d+', parts)
local text = want_warning and '*' or msg[2] or 'Missing message'
local cat = wanted_category(msg[3], mcode[2], want_warning)
local anchor = msg[4] or ''
local fmtkey = ispreview() and 'cvt_format_preview' or
(want_warning and 'cvt_format2' or msg.format or 'cvt_format')
local fmt = text_code.all_messages[fmtkey] or 'convert: bug'
return subparm(fmt, title:gsub('"', '"'), text, cat, anchor)
end
return 'Convert internal error: unknown message'
end
function add_warning(parms, level, key, text1, text2) -- for forward declaration above
-- If enabled, add a warning that will be displayed after the convert result.
-- A higher level is more verbose: more kinds of warnings are displayed.
-- To reduce output noise, only the first warning is displayed.
if level <= (tonumber(config.warnings) or 1) then
if parms.warnings == nil then
parms.warnings = message(parms, { key, text1, text2 }, true)
end
end
end
local function spell_number(parms, inout, number, numerator, denominator)
-- Return result of spelling (number, numerator, denominator), or
-- return nil if spelling is not available or not supported for given text.
-- Examples (each value must be a string or nil):
-- number numerator denominator output
-- ------ --------- ----------- -------------------
-- "1.23" nil nil one point two three
-- "1" "2" "3" one and two thirds
-- nil "2" "3" two thirds
if not speller then
local function get_speller(module)
return require(module).spell_number
end
local success
success, speller = pcall(get_speller, spell_module)
if not success or type(speller) ~= 'function' then
add_warning(parms, 1, 'cvt_no_spell', 'spell')
return nil
end
end
local case
if parms.spell_upper == inout then
case = true
parms.spell_upper = nil -- only uppercase first word in a multiple unit
end
local sp = not parms.opt_sp_us
local adj = parms.opt_adjectival
return speller(number, numerator, denominator, case, sp, adj)
end
------------------------------------------------------------------------
-- BEGIN: Code required only for built-in units.
-- LATER: If need much more code, move to another module to simplify this module.
local function speed_of_sound(altitude)
-- This is for the Mach built-in unit of speed.
-- Return speed of sound in metres per second at given altitude in feet.
-- If no altitude given, use default (zero altitude = sea level).
-- Table gives speed of sound in miles per hour at various altitudes:
-- altitude = -17,499 to 402,499 feet
-- mach_table[a + 4] = s where
-- a = (altitude / 5000) rounded to nearest integer (-3 to 80)
-- s = speed of sound (mph) at that altitude
-- From: http://www.aerospaceweb.org/question/atmosphere/q0112.shtml
local mach_table = { -- a =
799.5, 787.0, 774.2, 761.207051, -- -3 to 0
748.0, 734.6, 721.0, 707.0, 692.8, 678.3, 663.5, 660.1, 660.1, 660.1, -- 1 to 10
660.1, 660.1, 660.1, 662.0, 664.3, 666.5, 668.9, 671.1, 673.4, 675.6, -- 11 to 20
677.9, 683.7, 689.9, 696.0, 702.1, 708.1, 714.0, 719.9, 725.8, 731.6, -- 21 to 30
737.3, 737.7, 737.7, 736.2, 730.5, 724.6, 718.8, 712.9, 707.0, 701.0, -- 31 to 40
695.0, 688.9, 682.8, 676.6, 670.4, 664.1, 657.8, 652.9, 648.3, 643.7, -- 41 to 50
639.1, 634.4, 629.6, 624.8, 620.0, 615.2, 613.2, 613.2, 613.2, 613.5, -- 51 to 60
614.4, 615.3, 616.7, 619.8, 623.4, 629.7, 635.0, 641.1, 650.6, 660.0, -- 61 to 70
672.5, 674.3, 676.1, 677.9, 679.7, 681.5, 683.3, 685.1, 686.8, 688.6, -- 71 to 80
}
local function lerp(t, v0, v1)
return t * v1 + (1 - t) * v0
end
altitude = (altitude or 0) / 5000
if altitude < -3 then
altitude = -3
elseif altitude > 80 then
altitude = 80
end
local mach_mph
local a = math.floor(altitude)
if a == altitude then
mach_mph = mach_table[a + 4]
else
mach_mph = lerp(altitude - a, mach_table[a + 4], mach_table[a + 5])
end
return mach_mph * 0.44704 -- mph converted to m/s
end
-- END: Code required only for built-in units.
------------------------------------------------------------------------
local function add_style(parms, class)
-- Add selected template style to parms if not already present.
parms.templatestyles = parms.templatestyles or {}
if not parms.templatestyles[class] then
parms.templatestyles[class] = parms.frame:extensionTag({
name = 'templatestyles', args = { src = text_code.titles[class] }
})
end
end
local function get_styles(parms)
-- Return string of required template styles, empty if none.
if parms.templatestyles then
local t = {}
for _, v in pairs(parms.templatestyles) do
table.insert(t, v)
end
return table.concat(t)
end
return ''
end
local function get_range(word)
-- Return a range (string or table) corresponding to word (like "to"),
-- or return nil if not a range word.
local ranges = text_code.ranges
return ranges.types[word] or ranges.types[ranges.aliases[word]]
end
local function check_mismatch(unit1, unit2)
-- If unit1 cannot be converted to unit2, return an error message table.
-- This allows conversion between units of the same type, and between
-- Nm (normally torque) and ftlb (energy), as in gun-related articles.
-- This works because Nm is the base unit (scale = 1) for both the
-- primary type (torque), and the alternate type (energy, where Nm = J).
-- A match occurs if the primary types are the same, or if unit1 matches
-- the alternate type of unit2, and vice versa. That provides a whitelist
-- of which conversions are permitted between normally incompatible types.
if unit1.utype == unit2.utype or
(unit1.utype == unit2.alttype and unit1.alttype == unit2.utype) then
return nil
end
return { 'cvt_mismatch', unit1.utype, unit2.utype }
end
local function override_from(out_table, in_table, fields)
-- Copy the specified fields from in_table to out_table, but do not
-- copy nil fields (keep any corresponding field in out_table).
for _, field in ipairs(fields) do
if in_table[field] then
out_table[field] = in_table[field]
end
end
end
local function shallow_copy(t)
-- Return a shallow copy of table t.
-- Do not need the features and overhead of the Scribunto mw.clone().
local result = {}
for k, v in pairs(t) do
result[k] = v
end
return result
end
local unit_mt = {
-- Metatable to get missing values for a unit that does not accept SI prefixes.
-- Warning: The boolean value 'false' is returned for any missing field
-- so __index is not called twice for the same field in a given unit.
__index = function (self, key)
local value
if key == 'name1' or key == 'sym_us' then
value = self.symbol
elseif key == 'name2' then
value = self.name1 .. plural_suffix
elseif key == 'name1_us' then
value = self.name1
if not rawget(self, 'name2_us') then
-- If name1_us is 'foot', do not make name2_us by appending plural_suffix.
self.name2_us = self.name2
end
elseif key == 'name2_us' then
local raw1_us = rawget(self, 'name1_us')
if raw1_us then
value = raw1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local function prefixed_name(unit, name, index)
-- Return unit name with SI prefix inserted at correct position.
-- index = 1 (name1), 2 (name2), 3 (name1_us), 4 (name2_us).
-- The position is a byte (not character) index, so use Lua's sub().
local pos = rawget(unit, 'prefix_position')
if type(pos) == 'string' then
pos = tonumber(split(pos, ',')[index])
end
if pos then
return name:sub(1, pos - 1) .. unit.si_name .. name:sub(pos)
end
return unit.si_name .. name
end
local unit_prefixed_mt = {
-- Metatable to get missing values for a unit that accepts SI prefixes.
-- Before use, fields si_name, si_prefix must be defined.
-- The unit must define _symbol, _name1 and
-- may define _sym_us, _name1_us, _name2_us
-- (_sym_us, _name2_us may be defined for a language using sp=us
-- to refer to a variant unrelated to U.S. units).
__index = function (self, key)
local value
if key == 'symbol' then
value = self.si_prefix .. self._symbol
if value == 'l' then value = 'L' end
elseif key == 'sym_us' then
value = rawget(self, '_sym_us')
if value then
value = self.si_prefix .. value
else
value = self.symbol
end
elseif key == 'name1' then
value = prefixed_name(self, self._name1, 1)
elseif key == 'name2' then
value = rawget(self, '_name2')
if value then
value = prefixed_name(self, value, 2)
else
value = self.name1 .. plural_suffix
end
elseif key == 'name1_us' then
value = rawget(self, '_name1_us')
if value then
value = prefixed_name(self, value, 3)
else
value = self.name1
end
elseif key == 'name2_us' then
value = rawget(self, '_name2_us')
if value then
value = prefixed_name(self, value, 4)
elseif rawget(self, '_name1_us') then
value = self.name1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local unit_per_mt = {
-- Metatable to get values for a per unit of form "x/y".
-- This is never called to determine a unit name or link because per units
-- are handled as a special case.
-- Similarly, the default output is handled elsewhere, and for a symbol
-- this is only called from get_default() for default_exceptions.
__index = function (self, key)
local value
if key == 'symbol' then
local per = self.per
local unit1, unit2 = per[1], per[2]
if unit1 then
value = unit1[key] .. '/' .. unit2[key]
else
value = '/' .. unit2[key]
end
elseif key == 'sym_us' then
value = self.symbol
elseif key == 'scale' then
local per = self.per
local unit1, unit2 = per[1], per[2]
value = (unit1 and unit1.scale or 1) * self.scalemultiplier / unit2.scale
else
value = false
end
rawset(self, key, value)
return value
end
}
local function make_per(unitcode, unit_table, ulookup)
-- Return true, t where t is a per unit with unit codes expanded to unit tables,
-- or return false, t where t is an error message table.
local result = {
unitcode = unitcode,
utype = unit_table.utype,
per = {}
}
override_from(result, unit_table, { 'invert', 'iscomplex', 'default', 'link', 'symbol', 'symlink' })
result.symbol_raw = (result.symbol or false) -- to distinguish between a defined exception and a metatable calculation
local prefix
for i, v in ipairs(unit_table.per) do
if i == 1 and v == '' then
-- First unit symbol can be empty; that gives a nil first unit table.
elseif i == 1 and text_code.currency[v] then
prefix = currency_text or v
else
local success, t = ulookup(v)
if not success then return false, t end
result.per[i] = t
end
end
local multiplier = unit_table.multiplier
if not result.utype then
-- Creating an automatic per unit.
local unit1 = result.per[1]
local utype = (unit1 and unit1.utype or prefix or '') .. '/' .. result.per[2].utype
local t = data_code.per_unit_fixups[utype]
if t then
if type(t) == 'table' then
utype = t.utype or utype
result.link = result.link or t.link
multiplier = multiplier or t.multiplier
else
utype = t
end
end
result.utype = utype
end
result.scalemultiplier = multiplier or 1
result.vprefix = prefix or false -- set to non-nil to avoid calling __index
return true, setmetatable(result, unit_per_mt)
end
local function lookup(parms, unitcode, what, utable, fails, depth)
-- Return true, t where t is a copy of the unit's converter table,
-- or return false, t where t is an error message table.
-- Parameter 'what' determines whether combination units are accepted:
-- 'no_combination' : single unit only
-- 'any_combination' : single unit or combination or output multiple
-- 'only_multiple' : single unit or output multiple only
-- Parameter unitcode is a symbol (like 'g'), with an optional SI prefix (like 'kg').
-- If, for example, 'kg' is in this table, that entry is used;
-- otherwise the prefix ('k') is applied to the base unit ('g').
-- If unitcode is a known combination code (and if allowed by what),
-- a table of output multiple unit tables is included in the result.
-- For compatibility with the old template, an underscore in a unitcode is
-- replaced with a space so usage like {{convert|350|board_feet}} works.
-- Wikignomes may also put two spaces or " " in combinations, so
-- replace underscore, " ", and multiple spaces with a single space.
utable = utable or parms.unittable or all_units
fails = fails or {}
depth = depth and depth + 1 or 1
if depth > 9 then
-- There are ways to mistakenly define units which result in infinite
-- recursion when lookup() is called. That gives a long delay and very
-- confusing error messages, so the depth parameter is used as a guard.
return false, { 'cvt_lookup', unitcode }
end
if unitcode == nil or unitcode == '' then
return false, { 'cvt_no_unit' }
end
unitcode = unitcode:gsub('_', ' '):gsub(' ', ' '):gsub(' +', ' ')
local function call_make_per(t)
return make_per(unitcode, t,
function (ucode) return lookup(parms, ucode, 'no_combination', utable, fails, depth) end
)
end
local t = utable[unitcode]
if t then
if t.shouldbe then
return false, { 'cvt_should_be', t.shouldbe }
end
if t.sp_us then
parms.opt_sp_us = true
end
local target = t.target -- nil, or unitcode is an alias for this target
if target then
local success, result = lookup(parms, target, what, utable, fails, depth)
if not success then return false, result end
override_from(result, t, { 'customary', 'default', 'link', 'symbol', 'symlink', 'usename' })
if t.default then
result.defkey = unitcode -- so default_exceptions uses the alias code, not the target symbol
end
local multiplier = t.multiplier
if multiplier then
result.multiplier = tostring(multiplier)
result.scale = result.scale * multiplier
end
return true, result
end
if t.per then
return call_make_per(t)
end
local combo = t.combination -- nil or a table of unitcodes
if combo then
local multiple = t.multiple
if what == 'no_combination' or (what == 'only_multiple' and not multiple) then
return false, { 'cvt_bad_unit', unitcode }
end
-- Recursively create a combination table containing the
-- converter table of each unitcode.
local result = { utype = t.utype, multiple = multiple, combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, multiple and 'no_combination' or 'only_multiple', utable, fails, depth)
if not success then return false, t end
cvt[i] = t
end
return true, result
end
local result = shallow_copy(t)
result.unitcode = unitcode
if result.prefixes then
result.si_name = ''
result.si_prefix = ''
return true, setmetatable(result, unit_prefixed_mt)
end
return true, setmetatable(result, unit_mt)
end
local SIprefixes = text_code.SIprefixes
for plen = SIprefixes[1] or 2, 1, -1 do
-- Look for an SI prefix; should never occur with an alias.
-- Check for longer prefix first ('dam' is decametre).
-- SIprefixes[1] = prefix maximum #characters (as seen by mw.ustring.sub).
local prefix = usub(unitcode, 1, plen)
local si = SIprefixes[prefix]
if si then
local t = utable[usub(unitcode, plen+1)]
if t and t.prefixes then
local result = shallow_copy(t)
result.unitcode = unitcode
result.si_name = parms.opt_sp_us and si.name_us or si.name
result.si_prefix = si.prefix or prefix
result.scale = t.scale * 10 ^ (si.exponent * t.prefixes)
return true, setmetatable(result, unit_prefixed_mt)
end
end
end
-- Accept user-defined combinations like "acre+m2+ha" or "acre m2 ha" for output.
-- If '+' is used, each unit code can include a space, and any error is fatal.
-- If ' ' is used and if each space-separated word is a unit code, it is a combo,
-- but errors are not fatal so the unit code can be looked up as an extra unit.
local err_is_fatal
local combo = collection()
if unitcode:find('+', 1, true) then
err_is_fatal = true
for item in (unitcode .. '+'):gmatch('%s*(.-)%s*%+') do
if item ~= '' then
combo:add(item)
end
end
elseif unitcode:find('%s') then
for item in unitcode:gmatch('%S+') do
combo:add(item)
end
end
if combo.n > 1 then
local function lookup_combo()
if what == 'no_combination' or what == 'only_multiple' then
return false, { 'cvt_bad_unit', unitcode }
end
local result = { combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, 'only_multiple', utable, fails, depth)
if not success then return false, t end
if i == 1 then
result.utype = t.utype
else
local mismatch = check_mismatch(result, t)
if mismatch then
return false, mismatch
end
end
cvt[i] = t
end
return true, result
end
local success, result = lookup_combo()
if success or err_is_fatal then
return success, result
end
end
-- Accept any unit with an engineering notation prefix like "e6cuft"
-- (million cubic feet), but not chained prefixes like "e3e6cuft",
-- and not if the unit is a combination or multiple,
-- and not if the unit has an offset or is a built-in.
-- Only en digits are accepted.
local e, exponent, baseunit = unitcode:match('^([Ee])(%d+)(.*)')
if exponent then
local engscale = text_code.eng_scales[exponent]
if engscale then
local success, result = lookup(parms, baseunit, 'no_combination', utable, fails, depth)
if success and not (result.offset or result.builtin or result.engscale) then
if e == 'E' then
result.this_number_word = true
unitcode = 'e' .. unitcode:sub(2)
end
result.unitcode = unitcode -- 'e6cuft' not 'cuft'
result.defkey = unitcode -- key to lookup default exception
result.engscale = engscale
result.scale = result.scale * 10 ^ tonumber(exponent)
return true, result
end
end
end
-- Look for x/y; split on right-most slash to get scale correct (x/y/z is x/y per z).
local top, bottom = unitcode:match('^(.-)/([^/]+)$')
if top and not unitcode:find('e%d') then
-- If valid, create an automatic per unit for an "x/y" unit code.
-- The unitcode must not include extraneous spaces.
-- Engineering notation (apart from at start and which has been stripped before here),
-- is not supported so do not make a per unit if find text like 'e3' in unitcode.
local success, result = call_make_per({ per = {top, bottom} })
if success then
return true, result
end
end
if not parms.opt_no_extra and not get_range(unitcode) then
-- Want the "what links here" list for the extra_module to show only cases
-- where an extra unit is used, so do not require it when not needed
-- or if looking up a range word which cannot be a unit.
if not extra_units then
local success, extra = pcall(function () return require(extra_module).extra_units end)
if success and type(extra) == 'table' then
extra_units = extra
end
end
if extra_units then
-- A unit in one data table might refer to a unit in the other table, so
-- switch between them, relying on fails or depth to terminate loops.
if not fails[unitcode] then
fails[unitcode] = true
local other = (utable == all_units) and extra_units or all_units
local success, result = lookup(parms, unitcode, what, other, fails, depth)
if success then
return true, result
end
end
end
end
if to_en_table then
-- At fawiki it is common to translate all digits so a unit like "km2" becomes "km۲".
local en_code = ustring.gsub(unitcode, '%d', to_en_table)
if en_code ~= unitcode then
return lookup(parms, en_code, what, utable, fails, depth)
end
end
return false, { 'cvt_unknown', unitcode }
end
local function valid_number(num)
-- Return true if num is a valid number.
-- In Scribunto (different from some standard Lua), when expressed as a string,
-- overflow or other problems are indicated with text like "inf" or "nan"
-- which are regarded as invalid here (each contains "n").
if type(num) == 'number' and tostring(num):find('n', 1, true) == nil then
return true
end
end
local function hyphenated(name, parts)
-- Return a hyphenated form of given name (for adjectival usage).
-- The name may be linked and the target of the link must not be changed.
-- Hypothetical examples:
-- [[long ton|ton]] → [[long ton|ton]] (no change)
-- [[tonne|long ton]] → [[tonne|long-ton]]
-- [[metric ton|long ton]] → [[metric ton|long-ton]]
-- [[long ton]] → [[long ton|long-ton]]
-- Input can also have multiple links in a single name like:
-- [[United States customary units|U.S.]] [[US gallon|gallon]]
-- [[mile]]s per [[United States customary units|U.S.]] [[quart]]
-- [[long ton]]s per [[short ton]]
-- Assume that links cannot be nested (never like "[[abc[[def]]ghi]]").
-- This uses a simple and efficient procedure that works for most cases.
-- Some units (if used) would require more, and can later think about
-- adding a method to handle exceptions.
-- The procedure is to replace each space with a hyphen, but
-- not a space after ')' [for "(pre-1954 US) nautical mile"], and
-- not spaces immediately before '(' or in '(...)' [for cases like
-- "British thermal unit (ISO)" and "Calorie (International Steam Table)"].
if name:find(' ', 1, true) then
if parts then
local pos
if name:sub(1, 1) == '(' then
pos = name:find(')', 1, true)
if pos then
return name:sub(1, pos+1) .. name:sub(pos+2):gsub(' ', '-')
end
elseif name:sub(-1) == ')' then
pos = name:find('(', 1, true)
if pos then
return name:sub(1, pos-2):gsub(' ', '-') .. name:sub(pos-1)
end
end
return name:gsub(' ', '-')
end
parts = collection()
for before, item, after in name:gmatch('([^[]*)(%[%[[^[]*%]%])([^[]*)') do
if item:find(' ', 1, true) then
local prefix
local plen = item:find('|', 1, true)
if plen then
prefix = item:sub(1, plen)
item = item:sub(plen + 1, -3)
else
prefix = item:sub(1, -3) .. '|'
item = item:sub(3, -3)
end
item = prefix .. hyphenated(item, parts) .. ']]'
end
parts:add(before:gsub(' ', '-') .. item .. after:gsub(' ', '-'))
end
if parts.n == 0 then
-- No link like "[[...]]" was found in the original name.
parts:add(hyphenated(name, parts))
end
return table.concat(parts)
end
return name
end
local function hyphenated_maybe(parms, want_name, sep, id, inout)
-- Return s, f where
-- s = id, possibly modified
-- f = true if hyphenated
-- Possible modifications: hyphenate; prepend '-'; append mid text.
if id == nil or id == '' then
return ''
end
local mid = (inout == (parms.opt_flip and 'out' or 'in')) and parms.mid or ''
if want_name then
if parms.opt_adjectival then
return '-' .. hyphenated(id) .. mid, true
end
if parms.opt_add_s and id:sub(-1) ~= 's' then
id = id .. 's' -- for nowiki
end
end
return sep .. id .. mid
end
local function use_minus(text)
-- Return text with Unicode minus instead of '-', if present.
if text:sub(1, 1) == '-' then
return MINUS .. text:sub(2)
end
return text
end
local function digit_groups(parms, text, method)
-- Return a numbered table of groups of digits (left-to-right, in local language).
-- Parameter method is a number or nil:
-- 3 for 3-digit grouping (default), or
-- 2 for 3-then-2 grouping (only for digits before decimal mark).
local len_right
local len_left = text:find('.', 1, true)
if len_left then
len_right = #text - len_left
len_left = len_left - 1
else
len_left = #text
end
local twos = method == 2 and len_left > 5
local groups = collection()
local run = len_left
local n
if run < 4 or (run == 4 and parms.opt_comma5) then
if parms.opt_gaps then
n = run
else
n = #text
end
elseif twos then
n = run % 2 == 0 and 1 or 2
else
n = run % 3 == 0 and 3 or run % 3
end
while run > 0 do
groups:add(n)
run = run - n
n = (twos and run > 3) and 2 or 3
end
if len_right then
if groups.n == 0 then
groups:add(0)
end
if parms.opt_gaps and len_right > 3 then
local want4 = not parms.opt_gaps3 -- true gives no gap before trailing single digit
local isfirst = true
run = len_right
while run > 0 do
n = (want4 and run == 4) and 4 or (run > 3 and 3 or run)
if isfirst then
isfirst = false
groups[groups.n] = groups[groups.n] + 1 + n
else
groups:add(n)
end
run = run - n
end
else
groups[groups.n] = groups[groups.n] + 1 + len_right
end
end
local pos = 1
for i, length in ipairs(groups) do
groups[i] = from_en(text:sub(pos, pos + length - 1))
pos = pos + length
end
return groups
end
function with_separator(parms, text) -- for forward declaration above
-- Input text is a number in en digits with optional '.' decimal mark.
-- Return an equivalent, formatted for display:
-- with a custom decimal mark instead of '.', if wanted
-- with thousand separators inserted, if wanted
-- digits in local language
-- The given text is like '123' or '123.' or '12345.6789'.
-- The text has no sign (caller inserts that later, if necessary).
-- When using gaps, they are inserted before and after the decimal mark.
-- Separators are inserted only before the decimal mark.
-- A trailing dot (as in '123.') is removed because their use appears to
-- be accidental, and such a number should be shown as '123' or '123.0'.
-- It is useful for convert to suppress the dot so, for example, '4000.'
-- is a simple way of indicating that all the digits are significant.
if text:sub(-1) == '.' then
text = text:sub(1, -2)
end
if #text < 4 or parms.opt_nocomma or numsep == '' then
return from_en(text)
end
local groups = digit_groups(parms, text, group_method)
if parms.opt_gaps then
if groups.n <= 1 then
return groups[1] or ''
end
local nowrap = '<span style="white-space: nowrap">'
local gap = '<span style="margin-left: 0.25em">'
local close = '</span>'
return nowrap .. groups[1] .. gap .. table.concat(groups, close .. gap, 2, groups.n) .. close .. close
end
return table.concat(groups, numsep)
end
-- An input value like 1.23e12 is displayed using scientific notation (1.23×10¹²).
-- That also makes the output use scientific notation, except for small values.
-- In addition, very small or very large output values use scientific notation.
-- Use format(fmtpower, significand, '10', exponent) where each argument is a string.
local fmtpower = '%s<span style="margin:0 .15em 0 .25em">×</span>%s<sup>%s</sup>'
local function with_exponent(parms, show, exponent)
-- Return wikitext to display the implied value in scientific notation.
-- Input uses en digits; output uses digits in local language.
return format(fmtpower, with_separator(parms, show), from_en('10'), use_minus(from_en(tostring(exponent))))
end
local function make_sigfig(value, sigfig)
-- Return show, exponent that are equivalent to the result of
-- converting the number 'value' (where value >= 0) to a string,
-- rounded to 'sigfig' significant figures.
-- The returned items are:
-- show: a string of digits; no sign and no dot;
-- there is an implied dot before show.
-- exponent: a number (an integer) to shift the implied dot.
-- Resulting value = tonumber('.' .. show) * 10^exponent.
-- Examples:
-- make_sigfig(23.456, 3) returns '235', 2 (.235 * 10^2).
-- make_sigfig(0.0023456, 3) returns '235', -2 (.235 * 10^-2).
-- make_sigfig(0, 3) returns '000', 1 (.000 * 10^1).
if sigfig <= 0 then
sigfig = 1
elseif sigfig > maxsigfig then
sigfig = maxsigfig
end
if value == 0 then
return string.rep('0', sigfig), 1
end
local exp, fracpart = math.modf(log10(value))
if fracpart >= 0 then
fracpart = fracpart - 1
exp = exp + 1
end
local digits = format('%.0f', 10^(fracpart + sigfig))
if #digits > sigfig then
-- Overflow (for sigfig=3: like 0.9999 rounding to "1000"; need "100").
digits = digits:sub(1, sigfig)
exp = exp + 1
end
assert(#digits == sigfig, 'Bug: rounded number has wrong length')
return digits, exp
end
-- Fraction output format.
local fracfmt = {
{ -- Like {{frac}} (fraction slash).
'<span class="frac">{SIGN}<span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1/2
'<span class="frac">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1+2/3
style = 'frac',
},
{ -- Like {{sfrac}} (stacked fraction, that is, horizontal bar).
'<span class="sfrac tion">{SIGN}<span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span>', -- 1//2
'<span class="sfrac">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="tion"><span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span></span>', -- 1+2//3
style = 'sfrac',
},
}
local function format_fraction(parms, inout, negative, wholestr, numstr, denstr, do_spell, style)
-- Return wikitext for a fraction, possibly spelled.
-- Inputs use en digits and have no sign; output uses digits in local language.
local wikitext
if not style then
style = parms.opt_fraction_horizontal and 2 or 1
end
if wholestr == '' then
wholestr = nil
end
local substitute = {
SIGN = negative and MINUS or '',
WHOLE = wholestr and with_separator(parms, wholestr),
NUM = from_en(numstr),
DEN = from_en(denstr),
}
wikitext = fracfmt[style][wholestr and 2 or 1]:gsub('{(%u+)}', substitute)
if do_spell then
if negative then
if wholestr then
wholestr = '-' .. wholestr
else
numstr = '-' .. numstr
end
end
local s = spell_number(parms, inout, wholestr, numstr, denstr)
if s then
return s
end
end
add_style(parms, fracfmt[style].style)
return wikitext
end
local function format_number(parms, show, exponent, isnegative)
-- Parameter show is a string or a table containing strings.
-- Each string is a formatted number in en digits and optional '.' decimal mark.
-- A table represents a fraction: integer, numerator, denominator;
-- if a table is given, exponent must be nil.
-- Return t where t is a table with fields:
-- show = wikitext formatted to display implied value
-- (digits in local language)
-- is_scientific = true if show uses scientific notation
-- clean = unformatted show (possibly adjusted and with inserted '.')
-- (en digits)
-- sign = '' or MINUS
-- exponent = exponent (possibly adjusted)
-- The clean and exponent fields can be used to calculate the
-- rounded absolute value, if needed.
--
-- The value implied by the arguments is found from:
-- exponent is nil; and
-- show is a string of digits (no sign), with an optional dot;
-- show = '123.4' is value 123.4, '1234' is value 1234.0;
-- or:
-- exponent is an integer indicating where dot should be;
-- show is a string of digits (no sign and no dot);
-- there is an implied dot before show;
-- show does not start with '0';
-- show = '1234', exponent = 3 is value 0.1234*10^3 = 123.4.
--
-- The formatted result:
-- * Is for an output value and is spelled if wanted and possible.
-- * Includes a Unicode minus if isnegative and not spelled.
-- * Uses a custom decimal mark, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * Uses scientific notation if requested, or for very small or large values
-- (which forces result to not be spelled).
-- * Has no more than maxsigfig significant digits
-- (same as old template and {{#expr}}).
local xhi, xlo -- these control when scientific notation (exponent) is used
if parms.opt_scientific then
xhi, xlo = 4, 2 -- default for output if input uses e-notation
elseif parms.opt_scientific_always then
xhi, xlo = 0, 0 -- always use scientific notation (experimental)
else
xhi, xlo = 10, 4 -- default
end
local sign = isnegative and MINUS or ''
local maxlen = maxsigfig
local tfrac
if type(show) == 'table' then
tfrac = show
show = tfrac.wholestr
assert(exponent == nil, 'Bug: exponent given with fraction')
end
if not tfrac and not exponent then
local integer, dot, decimals = show:match('^(%d*)(%.?)(.*)')
if integer == '0' or integer == '' then
local zeros, figs = decimals:match('^(0*)([^0]?.*)')
if #figs == 0 then
if #zeros > maxlen then
show = '0.' .. zeros:sub(1, maxlen)
end
elseif #zeros >= xlo then
show = figs
exponent = -#zeros
elseif #figs > maxlen then
show = '0.' .. zeros .. figs:sub(1, maxlen)
end
elseif #integer >= xhi then
show = integer .. decimals
exponent = #integer
else
maxlen = maxlen + #dot
if #show > maxlen then
show = show:sub(1, maxlen)
end
end
end
if exponent then
local function zeros(n)
return string.rep('0', n)
end
if #show > maxlen then
show = show:sub(1, maxlen)
end
if exponent > xhi or exponent <= -xlo or (exponent == xhi and show ~= '1' .. zeros(xhi - 1)) then
-- When xhi, xlo = 10, 4 (the default), scientific notation is used if the
-- rounded value satisfies: value >= 1e9 or value < 1e-4 (1e9 = 0.1e10),
-- except if show is '1000000000' (1e9), for example:
-- {{convert|1000000000|m|m|sigfig=10}} → 1,000,000,000 metres (1,000,000,000 m)
local significand
if #show > 1 then
significand = show:sub(1, 1) .. '.' .. show:sub(2)
else
significand = show
end
return {
clean = '.' .. show,
exponent = exponent,
sign = sign,
show = sign .. with_exponent(parms, significand, exponent-1),
is_scientific = true,
}
end
if exponent >= #show then
show = show .. zeros(exponent - #show) -- result has no dot
elseif exponent <= 0 then
show = '0.' .. zeros(-exponent) .. show
else
show = show:sub(1, exponent) .. '.' .. show:sub(exponent+1)
end
end
local formatted_show
if tfrac then
show = tostring(tfrac.value) -- to set clean in returned table
formatted_show = format_fraction(parms, 'out', isnegative, tfrac.wholestr, tfrac.numstr, tfrac.denstr, parms.opt_spell_out)
else
if isnegative and show:match('^0.?0*$') then
sign = '' -- don't show minus if result is negative but rounds to zero
end
formatted_show = sign .. with_separator(parms, show)
if parms.opt_spell_out then
formatted_show = spell_number(parms, 'out', sign .. show) or formatted_show
end
end
return {
clean = show,
sign = sign,
show = formatted_show,
is_scientific = false, -- to avoid calling __index
}
end
local function extract_fraction(parms, text, negative)
-- If text represents a fraction, return
-- value, altvalue, show, denominator
-- where
-- value is a number (value of the fraction in argument text)
-- altvalue is an alternate interpretation of any fraction for the hands
-- unit where "12.1+3/4" means 12 hands 1.75 inches
-- show is a string (formatted text for display of an input value,
-- and is spelled if wanted and possible)
-- denominator is value of the denominator in the fraction
-- Otherwise, return nil.
-- Input uses en digits and '.' decimal mark (input has been translated).
-- Output uses digits in local language and local decimal mark, if any.
------------------------------------------------------------------------
-- Originally this function accepted x+y/z where x, y, z were any valid
-- numbers, possibly with a sign. For example '1.23e+2+1.2/2.4' = 123.5,
-- and '2-3/8' = 1.625. However, such usages were found to be errors or
-- misunderstandings, so since August 2014 the following restrictions apply:
-- x (if present) is an integer or has a single digit after decimal mark
-- y and z are unsigned integers
-- e-notation is not accepted
-- The overall number can start with '+' or '-' (so '12+3/4' and '+12+3/4'
-- and '-12-3/4' are valid).
-- Any leading negative sign is removed by the caller, so only inputs
-- like the following are accepted here (may have whitespace):
-- negative = false false true (there was a leading '-')
-- text = '2/3' '+2/3' '2/3'
-- text = '1+2/3' '+1+2/3' '1-2/3'
-- text = '12.3+1/2' '+12.3+1/2' '12.3-1/2'
-- Values like '12.3+1/2' are accepted, but are intended only for use
-- with the hands unit (not worth adding code to enforce that).
------------------------------------------------------------------------
local leading_plus, prefix, numstr, slashes, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*(/+)%s*(%d+)%s*$')
if not leading_plus then
-- Accept a single U+2044 fraction slash because that may be pasted.
leading_plus, prefix, numstr, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*⁄%s*(%d+)%s*$')
slashes = '/'
end
local numerator = tonumber(numstr)
local denominator = tonumber(denstr)
if numerator == nil or denominator == nil or (negative and leading_plus ~= '') then
return nil
end
local whole, wholestr
if prefix == '' then
wholestr = ''
whole = 0
else
-- Any prefix must be like '12+' or '12-' (whole number and fraction sign);
-- '12.3+' and '12.3-' are also accepted (single digit after decimal point)
-- because '12.3+1/2 hands' is valid (12 hands 3½ inches).
local num1, num2, frac_sign = prefix:match('^(%d+)(%.?%d?)%s*([+%-])$')
if num1 == nil then return nil end
if num2 == '' then -- num2 must be '' or like '.1' but not '.' or '.12'
wholestr = num1
else
if #num2 ~= 2 then return nil end
wholestr = num1 .. num2
end
if frac_sign ~= (negative and '-' or '+') then return nil end
whole = tonumber(wholestr)
if whole == nil then return nil end
end
local value = whole + numerator / denominator
if not valid_number(value) then return nil end
local altvalue = whole + numerator / (denominator * 10)
local style = #slashes -- kludge: 1 or 2 slashes can be used to select style
if style > 2 then style = 2 end
local wikitext = format_fraction(parms, 'in', negative, leading_plus .. wholestr, numstr, denstr, parms.opt_spell_in, style)
return value, altvalue, wikitext, denominator
end
local function extract_number(parms, text, another, no_fraction)
-- Return true, info if can extract a number from text,
-- where info is a table with the result,
-- or return false, t where t is an error message table.
-- Input can use en digits or digits in local language and can
-- have references at the end. Accepting references is intended
-- for use in infoboxes with a field for a value passed to convert.
-- Parameter another = true if the expected value is not the first.
-- Before processing, the input text is cleaned:
-- * Any thousand separators (valid or not) are removed.
-- * Any sign is replaced with '-' (if negative) or '' (otherwise).
-- That replaces Unicode minus with '-'.
-- If successful, the returned info table contains named fields:
-- value = a valid number
-- altvalue = a valid number, usually same as value but different
-- if fraction used (for hands unit)
-- singular = true if value is 1 or -1 (to use singular form of units)
-- clean = cleaned text with any separators and sign removed
-- (en digits and '.' decimal mark)
-- show = text formatted for output, possibly with ref strip markers
-- (digits in local language and custom decimal mark)
-- The resulting show:
-- * Is for an input value and is spelled if wanted and possible.
-- * Has a rounded value, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * If negative, a Unicode minus is used; otherwise the sign is
-- '+' (if the input text used '+'), or is '' (if no sign in input).
text = strip(text or '')
local reference
local pos = text:find('\127', 1, true)
if pos then
local before = text:sub(1, pos - 1)
local remainder = text:sub(pos)
local refs = {}
while #remainder > 0 do
local ref, spaces
ref, spaces, remainder = remainder:match('^(\127[^\127]*UNIQ[^\127]*%-ref[^\127]*\127)(%s*)(.*)')
if ref then
table.insert(refs, ref)
else
refs = {}
break
end
end
if #refs > 0 then
text = strip(before)
reference = table.concat(refs)
end
end
local clean = to_en(text, parms)
if clean == '' then
return false, { another and 'cvt_no_num2' or 'cvt_no_num' }
end
local isnegative, propersign = false, '' -- most common case
local singular, show, denominator
local value = tonumber(clean)
local altvalue
if value then
local sign = clean:sub(1, 1)
if sign == '+' or sign == '-' then
propersign = (sign == '+') and '+' or MINUS
clean = clean:sub(2)
end
if value < 0 then
isnegative = true
value = -value
end
else
local valstr
for _, prefix in ipairs({ '-', MINUS, '−' }) do
-- Including '-' sets isnegative in case input is a fraction like '-2-3/4'.
local plen = #prefix
if clean:sub(1, plen) == prefix then
valstr = clean:sub(plen + 1)
if valstr:match('^%s') then -- "- 1" is invalid but "-1 - 1/2" is ok
return false, { 'cvt_bad_num', text }
end
break
end
end
if valstr then
isnegative = true
propersign = MINUS
clean = valstr
value = tonumber(clean)
end
if value == nil then
if not no_fraction then
value, altvalue, show, denominator = extract_fraction(parms, clean, isnegative)
end
if value == nil then
return false, { 'cvt_bad_num', text }
end
if value <= 1 then
singular = true -- for example, "½ mile" or "one half mile" (singular unit)
end
end
end
if not valid_number(value) then -- for example, "1e310" may overflow
return false, { 'cvt_invalid_num' }
end
if show == nil then
-- clean is a non-empty string with no spaces, and does not represent a fraction,
-- and value = tonumber(clean) is a number >= 0.
-- If the input uses e-notation, show will be displayed using a power of ten, but
-- we use the number as given so it might not be normalized scientific notation.
-- The input value is spelled if specified so any e-notation is ignored;
-- that allows input like 2e6 to be spelled as "two million" which works
-- because the spell module converts '2e6' to '2000000' before spelling.
local function rounded(value, default, exponent)
local precision = parms.opt_ri
if precision then
local fmt = '%.' .. format('%d', precision) .. 'f'
local result = fmt:format(tonumber(value) + 2e-14) -- fudge for some common cases of bad rounding
if not exponent then
singular = (tonumber(result) == 1)
end
return result
end
return default
end
singular = (value == 1)
local scientific
local significand, exponent = clean:match('^([%d.]+)[Ee]([+%-]?%d+)')
if significand then
show = with_exponent(parms, rounded(significand, significand, exponent), exponent)
scientific = true
else
show = with_separator(parms, rounded(value, clean))
end
show = propersign .. show
if parms.opt_spell_in then
show = spell_number(parms, 'in', propersign .. rounded(value, clean)) or show
scientific = false
end
if scientific then
parms.opt_scientific = true
end
end
if isnegative and (value ~= 0) then
value = -value
altvalue = -(altvalue or value)
end
return true, {
value = value,
altvalue = altvalue or value,
singular = singular,
clean = clean,
show = show .. (reference or ''),
denominator = denominator,
}
end
local function get_number(text)
-- Return v, f where:
-- v = nil (text is not a number)
-- or
-- v = value of text (text is a number)
-- f = true if value is an integer
-- Input can use en digits or digits in local language or separators,
-- but no Unicode minus, and no fraction.
if text then
local number = tonumber(to_en(text))
if number then
local _, fracpart = math.modf(number)
return number, (fracpart == 0)
end
end
end
local function gcd(a, b)
-- Return the greatest common denominator for the given values,
-- which are known to be positive integers.
if a > b then
a, b = b, a
end
if a <= 0 then
return b
end
local r = b % a
if r <= 0 then
return a
end
if r == 1 then
return 1
end
return gcd(r, a)
end
local function fraction_table(value, denominator)
-- Return value as a string or a table:
-- * If result is a string, there is no fraction, and the result
-- is value formatted as a string of en digits.
-- * If result is a table, it represents a fraction with named fields:
-- wholestr, numstr, denstr (strings of en digits for integer, numerator, denominator).
-- The result is rounded to the nearest multiple of (1/denominator).
-- If the multiple is zero, no fraction is included.
-- No fraction is included if value is very large as the fraction would
-- be unhelpful, particularly if scientific notation is required.
-- Input value is a non-negative number.
-- Input denominator is a positive integer for the desired fraction.
if value <= 0 then
return '0'
end
if denominator <= 0 or value > 1e8 then
return format('%.2f', value)
end
local integer, decimals = math.modf(value)
local numerator = floor((decimals * denominator) +
0.5 + 2e-14) -- add fudge for some common cases of bad rounding
if numerator >= denominator then
integer = integer + 1
numerator = 0
end
local wholestr = tostring(integer)
if numerator > 0 then
local div = gcd(numerator, denominator)
if div > 1 then
numerator = numerator / div
denominator = denominator / div
end
return {
wholestr = (integer > 0) and wholestr or '',
numstr = tostring(numerator),
denstr = tostring(denominator),
value = value,
}
end
return wholestr
end
local function preunits(count, preunit1, preunit2)
-- If count is 1:
-- ignore preunit2
-- return p1
-- else:
-- preunit1 is used for preunit2 if the latter is empty
-- return p1, p2
-- where:
-- p1 is text to insert before the input unit
-- p2 is text to insert before the output unit
-- p1 or p2 may be nil to mean "no preunit"
-- Using '+' gives output like "5+ feet" (no space before, but space after).
local function withspace(text, wantboth)
-- Return text with space before and, if wantboth, after.
-- However, no space is added if there is a space or ' ' or '-'
-- at that position ('-' is for adjectival text).
-- There is also no space if text starts with '&'
-- (e.g. '°' would display a degree symbol with no preceding space).
local char = text:sub(1, 1)
if char == '&' then
return text -- an html entity can be used to specify the exact display
end
if not (char == ' ' or char == '-' or char == '+') then
text = ' ' .. text
end
if wantboth then
char = text:sub(-1, -1)
if not (char == ' ' or char == '-' or text:sub(-6, -1) == ' ') then
text = text .. ' '
end
end
return text
end
local PLUS = '+ '
preunit1 = preunit1 or ''
local trim1 = strip(preunit1)
if count == 1 then
if trim1 == '' then
return nil
end
if trim1 == '+' then
return PLUS
end
return withspace(preunit1, true)
end
preunit1 = withspace(preunit1)
preunit2 = preunit2 or ''
local trim2 = strip(preunit2)
if trim1 == '+' then
if trim2 == '' or trim2 == '+' then
return PLUS, PLUS
end
preunit1 = PLUS
end
if trim2 == '' then
if trim1 == '' then
return nil, nil
end
preunit2 = preunit1
elseif trim2 == '+' then
preunit2 = PLUS
elseif trim2 == ' ' then -- trick to make preunit2 empty
preunit2 = nil
else
preunit2 = withspace(preunit2)
end
return preunit1, preunit2
end
local function range_text(range, want_name, parms, before, after, inout, options)
-- Return before .. rtext .. after
-- where rtext is the text that separates two values in a range.
local rtext, adj_text, exception
options = options or {}
if type(range) == 'table' then
-- Table must specify range text for ('off' and 'on') or ('input' and 'output'),
-- and may specify range text for 'adj=on',
-- and may specify exception = true.
rtext = range[want_name and 'off' or 'on'] or
range[((inout == 'in') == (parms.opt_flip == true)) and 'output' or 'input']
adj_text = range['adj']
exception = range['exception']
else
rtext = range
end
if parms.opt_adjectival then
if want_name or (exception and parms.abbr_org == 'on') then
rtext = adj_text or rtext:gsub(' ', '-'):gsub(' ', '-')
end
end
if rtext == '–' and (options.spaced or after:sub(1, #MINUS) == MINUS) then
rtext = ' – '
end
return before .. rtext .. after
end
local function get_composite(parms, iparm, in_unit_table)
-- Look for a composite input unit. For example, {{convert|1|yd|2|ft|3|in}}
-- would result in a call to this function with
-- iparm = 3 (parms[iparm] = "2", just after the first unit)
-- in_unit_table = (unit table for "yd"; contains value 1 for number of yards)
-- Return true, iparm, unit where
-- iparm = index just after the composite units (7 in above example)
-- unit = composite unit table holding all input units,
-- or return true if no composite unit is present in parms,
-- or return false, t where t is an error message table.
local default, subinfo
local composite_units, count = { in_unit_table }, 1
local fixups = {}
local total = in_unit_table.valinfo[1].value
local subunit = in_unit_table
while subunit.subdivs do -- subdivs is nil or a table of allowed subdivisions
local subcode = strip(parms[iparm+1])
local subdiv = subunit.subdivs[subcode] or subunit.subdivs[(all_units[subcode] or {}).target]
if not subdiv then
break
end
local success
success, subunit = lookup(parms, subcode, 'no_combination')
if not success then return false, subunit end -- should never occur
success, subinfo = extract_number(parms, parms[iparm])
if not success then return false, subinfo end
iparm = iparm + 2
subunit.inout = 'in'
subunit.valinfo = { subinfo }
-- Recalculate total as a number of subdivisions.
-- subdiv[1] = number of subdivisions per previous unit (integer > 1).
total = total * subdiv[1] + subinfo.value
if not default then -- set by the first subdiv with a default defined
default = subdiv.default
end
count = count + 1
composite_units[count] = subunit
if subdiv.unit or subdiv.name then
fixups[count] = { unit = subdiv.unit, name = subdiv.name, valinfo = subunit.valinfo }
end
end
if count == 1 then
return true -- no error and no composite unit
end
for i, fixup in pairs(fixups) do
local unit = fixup.unit
local name = fixup.name
if not unit or (count > 2 and name) then
composite_units[i].fixed_name = name
else
local success, alternate = lookup(parms, unit, 'no_combination')
if not success then return false, alternate end -- should never occur
alternate.inout = 'in'
alternate.valinfo = fixup.valinfo
composite_units[i] = alternate
end
end
return true, iparm, {
utype = in_unit_table.utype,
scale = subunit.scale, -- scale of last (least significant) unit
valinfo = { { value = total, clean = subinfo.clean, denominator = subinfo.denominator } },
composite = composite_units,
default = default or in_unit_table.default
}
end
local function translate_parms(parms, kv_pairs)
-- Update fields in parms by translating each key:value in kv_pairs to terms
-- used by this module (may involve translating from local language to English).
-- Also, checks are performed which may display warnings, if enabled.
-- Return true if successful or return false, t where t is an error message table.
currency_text = nil -- local testing can hold module in memory; must clear globals
if kv_pairs.adj and kv_pairs.sing then
-- For enwiki (before translation), warn if attempt to use adj and sing
-- as the latter is a deprecated alias for the former.
if kv_pairs.adj ~= kv_pairs.sing and kv_pairs.sing ~= '' then
add_warning(parms, 1, 'cvt_unknown_option', 'sing=' .. kv_pairs.sing)
end
kv_pairs.sing = nil
end
kv_pairs.comma = kv_pairs.comma or config.comma -- for plwiki who want default comma=5
for loc_name, loc_value in pairs(kv_pairs) do
local en_name = text_code.en_option_name[loc_name]
if en_name then
local en_value = text_code.en_option_value[en_name]
if en_value == 'INTEGER' then -- altitude_ft, altitude_m, frac, sigfig
en_value = nil
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
local minimum
local number, is_integer = get_number(loc_value)
if en_name == 'sigfig' then
minimum = 1
elseif en_name == 'frac' then
minimum = 2
if number and number < 0 then
parms.opt_fraction_horizontal = true
number = -number
end
else
minimum = -1e6
end
if number and is_integer and number >= minimum then
en_value = number
else
local m
if en_name == 'frac' then
m = 'cvt_bad_frac'
elseif en_name == 'sigfig' then
m = 'cvt_bad_sigfig'
else
m = 'cvt_bad_altitude'
end
add_warning(parms, 1, m, loc_name .. '=' .. loc_value)
end
end
elseif en_value == 'TEXT' then -- $, input, qid, qual, stylein, styleout, tracking
en_value = loc_value ~= '' and loc_value or nil -- accept non-empty user text with no validation
if not en_value and (en_name == '$' or en_name == 'qid' or en_name == 'qual') then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
elseif en_name == '$' then
-- Value should be a single character like "€" for the euro currency symbol, but anything is accepted.
currency_text = (loc_value == 'euro') and '€' or loc_value
elseif en_name == 'error' then
-- May have something like {{convert|...|error=x}} which will return the
-- conversion result if successful, or x if not (no error return).
parms.error_text = loc_value -- keep value because parms.error is nil if loc_value == ''
parms.opt_no_extra = true
elseif en_name == 'input' then
-- May have something like {{convert|input=}} (empty input) if source is an infobox
-- with optional fields. In that case, want to output nothing rather than an error.
parms.input_text = loc_value -- keep value because parms.input is nil if loc_value == ''
end
else
en_value = en_value[loc_value]
if en_value and en_value:sub(-1) == '?' then
en_value = en_value:sub(1, -2)
add_warning(parms, -1, 'cvt_deprecated', loc_name .. '=' .. loc_value)
end
if en_value == nil then
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
elseif en_value == '' then
en_value = nil -- an ignored option like adj=off
elseif type(en_value) == 'string' and en_value:sub(1, 4) == 'opt_' then
for _, v in ipairs(split(en_value, ',')) do
local lhs, rhs = v:match('^(.-)=(.+)$')
if rhs then
parms[lhs] = tonumber(rhs) or rhs
else
parms[v] = true
end
end
en_value = nil
end
end
parms[en_name] = en_value
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
end
local abbr_entered = parms.abbr
local cfg_abbr = config.abbr
if cfg_abbr then
-- Don't warn if invalid because every convert would show that warning.
if cfg_abbr == 'on always' then
parms.abbr = 'on'
elseif cfg_abbr == 'off always' then
parms.abbr = 'off'
elseif parms.abbr == nil then
if cfg_abbr == 'on default' then
parms.abbr = 'on'
elseif cfg_abbr == 'off default' then
parms.abbr = 'off'
end
end
end
if parms.abbr then
if parms.abbr == 'unit' then
parms.abbr = 'on'
parms.number_word = true
end
parms.abbr_org = parms.abbr -- original abbr, before any flip
elseif parms.opt_hand_hh then
parms.abbr_org = 'on'
parms.abbr = 'on'
else
parms.abbr = 'out' -- default is to abbreviate output only (use symbol, not name)
end
if parms.opt_order_out then
-- Disable options that do not work in a useful way with order=out.
parms.opt_flip = nil -- override adj=flip
parms.opt_spell_in = nil
parms.opt_spell_out = nil
parms.opt_spell_upper = nil
end
if parms.opt_spell_out and not abbr_entered then
parms.abbr = 'off' -- should show unit name when spelling the output value
end
if parms.opt_flip then
local function swap_in_out(option)
local value = parms[option]
if value == 'in' then
parms[option] = 'out'
elseif value == 'out' then
parms[option] = 'in'
end
end
swap_in_out('abbr')
swap_in_out('lk')
if parms.opt_spell_in and not parms.opt_spell_out then
-- For simplicity, and because it does not appear to be needed,
-- user cannot set an option to spell the output only.
parms.opt_spell_in = nil
parms.opt_spell_out = true
end
end
if parms.opt_spell_upper then
parms.spell_upper = parms.opt_flip and 'out' or 'in'
end
if parms.opt_table or parms.opt_tablecen then
if abbr_entered == nil and parms.lk == nil then
parms.opt_values = true
end
parms.table_align = parms.opt_table and 'right' or 'center'
end
if parms.table_align or parms.opt_sortable_on then
parms.need_table_or_sort = true
end
local disp_joins = text_code.disp_joins
local default_joins = disp_joins['b']
parms.join_between = default_joins[3] or '; '
local disp = parms.disp
if disp == nil then -- special case for the most common setting
parms.joins = default_joins
elseif disp == 'x' then
-- Later, parms.joins is set from the input parameters.
else
-- Old template does this.
local abbr = parms.abbr
if disp == 'slash' then
if abbr_entered == nil then
disp = 'slash-nbsp'
elseif abbr == 'in' or abbr == 'out' then
disp = 'slash-sp'
else
disp = 'slash-nosp'
end
elseif disp == 'sqbr' then
if abbr == 'on' then
disp = 'sqbr-nbsp'
else
disp = 'sqbr-sp'
end
end
parms.joins = disp_joins[disp] or default_joins
parms.join_between = parms.joins[3] or parms.join_between
parms.wantname = parms.joins.wantname
end
if (en_default and not parms.opt_lang_local and (parms[1] or ''):find('%d')) or parms.opt_lang_en then
from_en_table = nil
end
if en_default and from_en_table then
-- For hiwiki: localized symbol/name is defined with the US symbol/name field,
-- and is used if output uses localized numbers.
parms.opt_sp_us = true
end
return true
end
local function get_values(parms)
-- If successful, update parms and return true, v, i where
-- v = table of input values
-- i = index to next entry in parms after those processed here
-- or return false, t where t is an error message table.
local valinfo = collection() -- numbered table of input values
local range = collection() -- numbered table of range items (having, for example, 2 range items requires 3 input values)
local had_nocomma -- true if removed "nocomma" kludge from second parameter (like "tonocomma")
local parm2 = strip(parms[2])
if parm2 and parm2:sub(-7, -1) == 'nocomma' then
parms[2] = strip(parm2:sub(1, -8))
parms.opt_nocomma = true
had_nocomma = true
end
local function extractor(i)
-- If the parameter is not a value, try unpacking it as a range ("1-23" for "1 to 23").
-- However, "-1-2/3" is a negative fraction (-1⅔), so it must be extracted first.
-- Do not unpack a parameter if it is like "3-1/2" which is sometimes incorrectly
-- used instead of "3+1/2" (and which should not be interpreted as "3 to ½").
-- Unpacked items are inserted into the parms table.
-- The tail recursion allows combinations like "1x2 to 3x4".
local valstr = strip(parms[i]) -- trim so any '-' as a negative sign will be at start
local success, result = extract_number(parms, valstr, i > 1)
if not success and valstr and i < 20 then -- check i to limit abuse
local lhs, sep, rhs = valstr:match('^(%S+)%s+(%S+)%s+(%S.*)')
if lhs and not (sep == '-' and rhs:match('/')) then
if sep:find('%d') then
return success, result -- to reject {{convert|1 234 567|m}} with a decent message (en only)
end
parms[i] = rhs
table.insert(parms, i, sep)
table.insert(parms, i, lhs)
return extractor(i)
end
if not valstr:match('%-.*/') then
for _, sep in ipairs(text_code.ranges.words) do
local start, stop = valstr:find(sep, 2, true) -- start at 2 to skip any negative sign for range '-'
if start then
parms[i] = valstr:sub(stop + 1)
table.insert(parms, i, sep)
table.insert(parms, i, valstr:sub(1, start - 1))
return extractor(i)
end
end
end
end
return success, result
end
local i = 1
local is_change
while true do
local success, info = extractor(i) -- need to set parms.opt_nocomma before calling this
if not success then return false, info end
i = i + 1
if is_change then
info.is_change = true -- value is after "±" and so is a change (significant for range like {{convert|5|±|5|°C}})
is_change = nil
end
valinfo:add(info)
local range_item = get_range(strip(parms[i]))
if not range_item then
break
end
i = i + 1
range:add(range_item)
if type(range_item) == 'table' then
-- For range "x", if append unit to some values, append it to all.
parms.in_range_x = parms.in_range_x or range_item.in_range_x
parms.out_range_x = parms.out_range_x or range_item.out_range_x
parms.abbr_range_x = parms.abbr_range_x or range_item.abbr_range_x
is_change = range_item.is_range_change
end
end
if range.n > 0 then
if range.n > 30 then -- limit abuse, although 4 is a more likely upper limit
return false, { 'cvt_invalid_num' } -- misleading message but it will do
end
parms.range = range
elseif had_nocomma then
return false, { 'cvt_unknown', parm2 }
end
return true, valinfo, i
end
local function simple_get_values(parms)
-- If input is like "{{convert|valid_value|valid_unit|...}}",
-- return true, i, in_unit, in_unit_table
-- i = index in parms of what follows valid_unit, if anything.
-- The valid_value is not negative and does not use a fraction, and
-- no options requiring further processing of the input are used.
-- Otherwise, return nothing or return false, parm1 for caller to interpret.
-- Testing shows this function is successful for 96% of converts in articles,
-- and that on average it speeds up converts by 8%.
local clean = to_en(strip(parms[1] or ''), parms)
if parms.opt_ri or parms.opt_spell_in or #clean > 10 or not clean:match('^[0-9.]+$') then
return false, clean
end
local value = tonumber(clean)
if not value then return end
local info = {
value = value,
altvalue = value,
singular = (value == 1),
clean = clean,
show = with_separator(parms, clean),
}
local in_unit = strip(parms[2])
local success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then return end
in_unit_table.valinfo = { info }
return true, 3, in_unit, in_unit_table
end
local function wikidata_call(parms, operation, ...)
-- Return true, s where s is the result of a Wikidata operation,
-- or return false, t where t is an error message table.
local function worker(...)
wikidata_code = wikidata_code or require(wikidata_module)
wikidata_data = wikidata_data or mw.loadData(wikidata_data_module)
return wikidata_code[operation](wikidata_data, ...)
end
local success, status, result = pcall(worker, ...)
if success then
return status, result
end
if parms.opt_sortable_debug then
-- Use debug=yes to crash if an error while accessing Wikidata.
error('Error accessing Wikidata: ' .. status, 0)
end
return false, { 'cvt_wd_fail' }
end
local function get_parms(parms, args)
-- If successful, update parms and return true, unit where
-- parms is a table of all arguments passed to the template
-- converted to named arguments, and
-- unit is the input unit table;
-- or return false, t where t is an error message table.
-- For special processing (not a convert), can also return
-- true, wikitext where wikitext is the final result.
-- The returned input unit table may be for a fake unit using the specified
-- unit code as the symbol and name, and with bad_mcode = message code table.
-- MediaWiki removes leading and trailing whitespace from the values of
-- named arguments. However, the values of numbered arguments include any
-- whitespace entered in the template, and whitespace is used by some
-- parameters (example: the numbered parameters associated with "disp=x").
local kv_pairs = {} -- table of input key:value pairs where key is a name; needed because cannot iterate parms and add new fields to it
for k, v in pairs(args) do
if type(k) == 'number' or k == 'test' then -- parameter "test" is reserved for testing and is not translated
parms[k] = v
else
kv_pairs[k] = v
end
end
if parms.test == 'wikidata' then
local ulookup = function (ucode)
-- Use empty table for parms so it does not accumulate results when used repeatedly.
return lookup({}, ucode, 'no_combination')
end
return wikidata_call(parms, '_listunits', ulookup)
end
local success, msg = translate_parms(parms, kv_pairs)
if not success then return false, msg end
if parms.input then
success, msg = wikidata_call(parms, '_adjustparameters', parms, 1)
if not success then return false, msg end
end
local success, i, in_unit, in_unit_table = simple_get_values(parms)
if not success then
if type(i) == 'string' and i:match('^NNN+$') then
-- Some infoboxes have examples like {{convert|NNN|m}} (3 or more "N").
-- Output an empty string for these.
return false, { 'cvt_no_output' }
end
local valinfo
success, valinfo, i = get_values(parms)
if not success then return false, valinfo end
in_unit = strip(parms[i])
i = i + 1
success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then
in_unit = in_unit or ''
if parms.opt_ignore_error then -- display given unit code with no error (for use with {{val}})
in_unit_table = '' -- suppress error message and prevent processing of output unit
end
in_unit_table = setmetatable({
symbol = in_unit, name2 = in_unit, utype = in_unit,
scale = 1, default = '', defkey = '', linkey = '',
bad_mcode = in_unit_table }, unit_mt)
end
in_unit_table.valinfo = valinfo
end
if parms.test == 'msg' then
-- Am testing the messages produced when no output unit is specified, and
-- the input unit has a missing or invalid default.
-- Set two units for testing that.
-- LATER: Remove this code.
if in_unit == 'chain' then
in_unit_table.default = nil -- no default
elseif in_unit == 'rd' then
in_unit_table.default = "ft!X!m" -- an invalid expression
end
end
in_unit_table.inout = 'in' -- this is an input unit
if not parms.range then
local success, inext, composite_unit = get_composite(parms, i, in_unit_table)
if not success then return false, inext end
if composite_unit then
in_unit_table = composite_unit
i = inext
end
end
if in_unit_table.builtin == 'mach' then
-- As with old template, a number following Mach as the input unit is the altitude.
-- That is deprecated: should use altitude_ft=NUMBER or altitude_m=NUMBER.
local success, info
success = tonumber(parms[i]) -- this will often work and will give correct result for values like 2e4 without forcing output scientific notation
if success then
info = { value = success }
else
success, info = extract_number(parms, parms[i], false, true)
end
if success then
i = i + 1
in_unit_table.altitude = info.value
end
end
local word = strip(parms[i])
i = i + 1
local precision, is_bad_precision
local function set_precision(text)
local number, is_integer = get_number(text)
if number then
if is_integer then
precision = number
else
precision = text
is_bad_precision = true
end
return true -- text was used for precision, good or bad
end
end
if word and not set_precision(word) then
parms.out_unit = parms.out_unit or word
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if parms.opt_adj_mid then
word = parms[i]
i = i + 1
if word then -- mid-text words
if word:sub(1, 1) == '-' then
parms.mid = word
else
parms.mid = ' ' .. word
end
end
end
if parms.opt_one_preunit then
parms[parms.opt_flip and 'preunit2' or 'preunit1'] = preunits(1, parms[i])
i = i + 1
end
if parms.disp == 'x' then
-- Following is reasonably compatible with the old template.
local first = parms[i] or ''
local second = parms[i+1] or ''
i = i + 2
if strip(first) == '' then -- user can enter ' ' rather than ' ' to avoid the default
first = ' [ ' .. first
second = ' ]' .. second
end
parms.joins = { first, second }
elseif parms.opt_two_preunits then
local p1, p2 = preunits(2, parms[i], parms[i+1])
i = i + 2
if parms.preunit1 then
-- To simplify documentation, allow unlikely use of adj=pre with disp=preunit
-- (however, an output unit must be specified with adj=pre and with disp=preunit).
parms.preunit1 = parms.preunit1 .. p1
parms.preunit2 = p2
else
parms.preunit1, parms.preunit2 = p1, p2
end
end
if precision == nil then
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if is_bad_precision then
add_warning(parms, 1, 'cvt_bad_prec', precision)
else
parms.precision = precision
end
for j = i, i + 3 do
local parm = parms[j] -- warn if find a non-empty extraneous parameter
if parm and parm:match('%S') then
add_warning(parms, 1, 'cvt_unknown_option', parm)
break
end
end
return true, in_unit_table
end
local function record_default_precision(parms, out_current, precision)
-- If necessary, adjust parameters and return a possibly adjusted precision.
-- When converting a range of values where a default precision is required,
-- that default is calculated for each value because the result sometimes
-- depends on the precise input and output values. This function may cause
-- the entire convert process to be repeated in order to ensure that the
-- same default precision is used for each individual convert.
-- If that were not done, a range like 1000 to 1000.4 may give poor results
-- because the first output could be heavily rounded, while the second is not.
-- For range 1000.4 to 1000, this function can give the second convert the
-- same default precision that was used for the first.
if not parms.opt_round_each then
local maxdef = out_current.max_default_precision
if maxdef then
if maxdef < precision then
parms.do_convert_again = true
out_current.max_default_precision = precision
else
precision = out_current.max_default_precision
end
else
out_current.max_default_precision = precision
end
end
return precision
end
local function default_precision(parms, invalue, inclean, denominator, outvalue, in_current, out_current, extra)
-- Return a default value for precision (an integer like 2, 0, -2).
-- If denominator is not nil, it is the value of the denominator in inclean.
-- Code follows procedures used in old template.
local fudge = 1e-14 -- {{Order of magnitude}} adds this, so we do too
local prec, minprec, adjust
local subunit_ignore_trailing_zero
local subunit_more_precision -- kludge for "in" used in input like "|2|ft|6|in"
local composite = in_current.composite
if composite then
subunit_ignore_trailing_zero = true -- input "|2|st|10|lb" has precision 0, not -1
if composite[#composite].exception == 'subunit_more_precision' then
subunit_more_precision = true -- do not use standard precision with input like "|2|ft|6|in"
end
end
if denominator and denominator > 0 then
prec = math.max(log10(denominator), 1)
else
-- Count digits after decimal mark, handling cases like '12.345e6'.
local exponent
local integer, dot, decimals, expstr = inclean:match('^(%d*)(%.?)(%d*)(.*)')
local e = expstr:sub(1, 1)
if e == 'e' or e == 'E' then
exponent = tonumber(expstr:sub(2))
end
if dot == '' then
prec = subunit_ignore_trailing_zero and 0 or -integer:match('0*$'):len()
else
prec = #decimals
end
if exponent then
-- So '1230' and '1.23e3' both give prec = -1, and '0.00123' and '1.23e-3' give 5.
prec = prec - exponent
end
end
if in_current.istemperature and out_current.istemperature then
-- Converting between common temperatures (°C, °F, °R, K); not keVT.
-- Kelvin value can be almost zero, or small but negative due to precision problems.
-- Also, an input value like -300 C (below absolute zero) gives negative kelvins.
-- Calculate minimum precision from absolute value.
adjust = 0
local kelvin = abs((invalue - in_current.offset) * in_current.scale)
if kelvin < 1e-8 then -- assume nonzero due to input or calculation precision problem
minprec = 2
else
minprec = 2 - floor(log10(kelvin) + fudge) -- 3 sigfigs in kelvin
end
else
if invalue == 0 or outvalue <= 0 then
-- We are never called with a negative outvalue, but it might be zero.
-- This is special-cased to avoid calculation exceptions.
return record_default_precision(parms, out_current, 0)
end
if out_current.exception == 'integer_more_precision' and floor(invalue) == invalue then
-- With certain output units that sometimes give poor results
-- with default rounding, use more precision when the input
-- value is equal to an integer. An example of a poor result
-- is when input 50 gives a smaller output than input 49.5.
-- Experiment shows this helps, but it does not eliminate all
-- surprises because it is not clear whether "50" should be
-- interpreted as "from 45 to 55" or "from 49.5 to 50.5".
adjust = -log10(in_current.scale)
elseif subunit_more_precision then
-- Conversion like "{{convert|6|ft|1|in|cm}}" (where subunit is "in")
-- has a non-standard adjust value, to give more output precision.
adjust = log10(out_current.scale) + 2
else
adjust = log10(abs(invalue / outvalue))
end
adjust = adjust + log10(2)
-- Ensure that the output has at least two significant figures.
minprec = 1 - floor(log10(outvalue) + fudge)
end
if extra then
adjust = extra.adjust or adjust
minprec = extra.minprec or minprec
end
return record_default_precision(parms, out_current, math.max(floor(prec + adjust), minprec))
end
local function convert(parms, invalue, info, in_current, out_current)
-- Convert given input value from one unit to another.
-- Return output_value (a number) if a simple convert, or
-- return f, t where
-- f = true, t = table of information with results, or
-- f = false, t = error message table.
local inscale = in_current.scale
local outscale = out_current.scale
if not in_current.iscomplex and not out_current.iscomplex then
return invalue * (inscale / outscale) -- minimize overhead for most common case
end
if in_current.invert or out_current.invert then
-- Inverted units, such as inverse length, inverse time, or
-- fuel efficiency. Built-in units do not have invert set.
if (in_current.invert or 1) * (out_current.invert or 1) < 0 then
return 1 / (invalue * inscale * outscale)
end
return invalue * (inscale / outscale)
elseif in_current.offset then
-- Temperature (there are no built-ins for this type of unit).
if info.is_change then
return invalue * (inscale / outscale)
end
return (invalue - in_current.offset) * (inscale / outscale) + out_current.offset
else
-- Built-in unit.
local in_builtin = in_current.builtin
local out_builtin = out_current.builtin
if in_builtin and out_builtin then
if in_builtin == out_builtin then
return invalue
end
-- There are no cases (yet) where need to convert from one
-- built-in unit to another, so this should never occur.
return false, { 'cvt_bug_convert' }
end
if in_builtin == 'mach' or out_builtin == 'mach' then
-- Should check that only one altitude is given but am planning to remove
-- in_current.altitude (which can only occur when Mach is the input unit),
-- and out_current.altitude cannot occur.
local alt = parms.altitude_ft or in_current.altitude
if not alt and parms.altitude_m then
alt = parms.altitude_m / 0.3048 -- 1 ft = 0.3048 m
end
local spd = speed_of_sound(alt)
if in_builtin == 'mach' then
inscale = spd
return invalue * (inscale / outscale)
end
outscale = spd
local adjust = 0.1 / inscale
return true, {
outvalue = invalue * (inscale / outscale),
adjust = log10(adjust) + log10(2),
}
elseif in_builtin == 'hand' then
-- 1 hand = 4 inches; 1.2 hands = 6 inches.
-- Decimals of a hand are only defined for the first digit, and
-- the first fractional digit should be a number of inches (1, 2 or 3).
-- However, this code interprets the entire fractional part as the number
-- of inches / 10 (so 1.75 inches would be 0.175 hands).
-- A value like 12.3 hands is exactly 12*4 + 3 inches; base default precision on that.
local integer, fracpart = math.modf(invalue)
local inch_value = 4 * integer + 10 * fracpart -- equivalent number of inches
local factor = inscale / outscale
if factor == 4 then
-- Am converting to inches: show exact result, and use "inches" not "in" by default.
if parms.abbr_org == nil then
out_current.usename = true
end
local show = format('%g', abs(inch_value)) -- show and clean are unsigned
if not show:find('e', 1, true) then
return true, {
invalue = inch_value,
outvalue = inch_value,
clean = show,
show = show,
}
end
end
local outvalue = (integer + 2.5 * fracpart) * factor
local fracstr = info.clean:match('%.(.*)') or ''
local fmt
if fracstr == '' then
fmt = '%.0f'
else
fmt = '%.' .. format('%d', #fracstr - 1) .. 'f'
end
return true, {
invalue = inch_value,
clean = format(fmt, inch_value),
outvalue = outvalue,
minprec = 0,
}
end
end
return false, { 'cvt_bug_convert' } -- should never occur
end
local function user_style(parms, i)
-- Return text for a user-specified style for a table cell, or '' if none,
-- given i = 1 (input style) or 2 (output style).
local style = parms[(i == 1) and 'stylein' or 'styleout']
if style then
style = style:gsub('"', '')
if style ~= '' then
if style:sub(-1) ~= ';' then
style = style .. ';'
end
return style
end
end
return ''
end
local function make_table_or_sort(parms, invalue, info, in_current, scaled_top)
-- Set options to handle output for a table or a sort key, or both.
-- The text sort key is based on the value resulting from converting
-- the input to a fake base unit with scale = 1, and other properties
-- required for a conversion derived from the input unit.
-- For other modules, return the sort key in a hidden span element, and
-- the scaled value used to generate the sort key.
-- If scaled_top is set, it is the scaled value of the numerator of a per unit
-- to be combined with this unit (the denominator) to make the sort key.
-- Scaling only works with units that convert with a factor (not temperature).
local sortkey, scaled_value
if parms.opt_sortable_on then
local base = { -- a fake unit with enough fields for a valid convert
scale = 1,
invert = in_current.invert and 1,
iscomplex = in_current.iscomplex,
offset = in_current.offset and 0,
}
local outvalue, extra = convert(parms, invalue, info, in_current, base)
if extra then
outvalue = extra.outvalue
end
if in_current.istemperature then
-- Have converted to kelvin; assume numbers close to zero have a
-- rounding error and should be zero.
if abs(outvalue) < 1e-12 then
outvalue = 0
end
end
if scaled_top and outvalue ~= 0 then
outvalue = scaled_top / outvalue
end
scaled_value = outvalue
if not valid_number(outvalue) then
if outvalue < 0 then
sortkey = '1000000000000000000'
else
sortkey = '9000000000000000000'
end
elseif outvalue == 0 then
sortkey = '5000000000000000000'
else
local mag = floor(log10(abs(outvalue)) + 1e-14)
local prefix
if outvalue > 0 then
prefix = 7000 + mag
else
prefix = 2999 - mag
outvalue = outvalue + 10^(mag+1)
end
sortkey = format('%d', prefix) .. format('%015.0f', floor(outvalue * 10^(14-mag)))
end
end
local sortspan
if sortkey and not parms.table_align then
sortspan = parms.opt_sortable_debug and
'<span data-sort-value="' .. sortkey .. '♠"><span style="border:1px solid">' .. sortkey .. '♠</span></span>' or
'<span data-sort-value="' .. sortkey .. '♠"></span>'
parms.join_before = sortspan
end
if parms.table_align then
local sort
if sortkey then
sort = ' data-sort-value="' .. sortkey .. '"'
if parms.opt_sortable_debug then
parms.join_before = '<span style="border:1px solid">' .. sortkey .. '</span>'
end
else
sort = ''
end
local style = 'style="text-align:' .. parms.table_align .. ';'
local joins = {}
for i = 1, 2 do
joins[i] = (i == 1 and '' or '\n|') .. style .. user_style(parms, i) .. '"' .. sort .. '|'
end
parms.table_joins = joins
end
return sortspan, scaled_value
end
local cvt_to_hand
local function cvtround(parms, info, in_current, out_current)
-- Return true, t where t is a table with the conversion results; fields:
-- show = rounded, formatted string with the result of converting value in info,
-- using the rounding specified in parms.
-- singular = true if result (after rounding and ignoring any negative sign)
-- is "1", or like "1.00", or is a fraction with value < 1;
-- (and more fields shown below, and a calculated 'absvalue' field).
-- or return false, t where t is an error message table.
-- Input info.clean uses en digits (it has been translated, if necessary).
-- Output show uses en or non-en digits as appropriate, or can be spelled.
if out_current.builtin == 'hand' then
return cvt_to_hand(parms, info, in_current, out_current)
end
local invalue = in_current.builtin == 'hand' and info.altvalue or info.value
local outvalue, extra = convert(parms, invalue, info, in_current, out_current)
if parms.need_table_or_sort then
parms.need_table_or_sort = nil -- process using first input value only
make_table_or_sort(parms, invalue, info, in_current)
end
if extra then
if not outvalue then return false, extra end
invalue = extra.invalue or invalue
outvalue = extra.outvalue
end
if not valid_number(outvalue) then
return false, { 'cvt_invalid_num' }
end
local isnegative
if outvalue < 0 then
isnegative = true
outvalue = -outvalue
end
local precision, show, exponent
local denominator = out_current.frac
if denominator then
show = fraction_table(outvalue, denominator)
else
precision = parms.precision
if not precision then
if parms.sigfig then
show, exponent = make_sigfig(outvalue, parms.sigfig)
elseif parms.opt_round then
local n = parms.opt_round
if n == 0.5 then
local integer, fracpart = math.modf(floor(2 * outvalue + 0.5) / 2)
if fracpart == 0 then
show = format('%.0f', integer)
else
show = format('%.1f', integer + fracpart)
end
else
show = format('%.0f', floor((outvalue / n) + 0.5) * n)
end
elseif in_current.builtin == 'mach' then
local sigfig = info.clean:gsub('^[0.]+', ''):gsub('%.', ''):len() + 1
show, exponent = make_sigfig(outvalue, sigfig)
else
local inclean = info.clean
if extra then
inclean = extra.clean or inclean
show = extra.show
end
if not show then
precision = default_precision(parms, invalue, inclean, info.denominator, outvalue, in_current, out_current, extra)
end
end
end
end
if precision then
if precision >= 0 then
local fudge
if precision <= 8 then
-- Add a fudge to handle common cases of bad rounding due to inability
-- to precisely represent some values. This makes the following work:
-- {{convert|-100.1|C|K}} and {{convert|5555000|um|m|2}}.
-- Old template uses #expr round, which invokes PHP round().
-- LATER: Investigate how PHP round() works.
fudge = 2e-14
else
fudge = 0
end
local fmt = '%.' .. format('%d', precision) .. 'f'
local success
success, show = pcall(format, fmt, outvalue + fudge)
if not success then
return false, { 'cvt_big_prec', tostring(precision) }
end
else
precision = -precision -- #digits to zero (in addition to any digits after dot)
local shift = 10 ^ precision
show = format('%.0f', outvalue/shift)
if show ~= '0' then
exponent = #show + precision
end
end
end
local t = format_number(parms, show, exponent, isnegative)
if type(show) == 'string' then
-- Set singular using match because on some systems 0.99999999999999999 is 1.0.
if exponent then
t.singular = (exponent == 1 and show:match('^10*$'))
else
t.singular = (show == '1' or show:match('^1%.0*$'))
end
else
t.fraction_table = show
t.singular = (outvalue <= 1) -- cannot have 'fraction == 1', but if it were possible it would be singular
end
t.raw_absvalue = outvalue -- absolute value before rounding
return true, setmetatable(t, {
__index = function (self, key)
if key == 'absvalue' then
-- Calculate absolute value after rounding, if needed.
local clean, exponent = rawget(self, 'clean'), rawget(self, 'exponent')
local value = tonumber(clean) -- absolute value (any negative sign has been ignored)
if exponent then
value = value * 10^exponent
end
rawset(self, key, value)
return value
end
end })
end
function cvt_to_hand(parms, info, in_current, out_current)
-- Convert input to hands, inches.
-- Return true, t where t is a table with the conversion results;
-- or return false, t where t is an error message table.
if parms.abbr_org == nil then
out_current.usename = true -- default is to show name not symbol
end
local precision = parms.precision
local frac = out_current.frac
if not frac and precision and precision > 1 then
frac = (precision == 2) and 2 or 4
end
local out_next = out_current.out_next
if out_next then
-- Use magic knowledge to determine whether the next unit is inches without requiring i18n.
-- The following ensures that when the output combination "hand in" is used, the inches
-- value is rounded to match the hands value. Also, displaying say "61½" instead of 61.5
-- is better as 61.5 implies the value is not 61.4.
if out_next.exception == 'subunit_more_precision' then
out_next.frac = frac
end
end
-- Convert to inches; calculate hands from that.
local dummy_unit_table = { scale = out_current.scale / 4, frac = frac }
local success, outinfo = cvtround(parms, info, in_current, dummy_unit_table)
if not success then return false, outinfo end
local tfrac = outinfo.fraction_table
local inches = outinfo.raw_absvalue
if tfrac then
inches = floor(inches) -- integer part only; fraction added later
else
inches = floor(inches + 0.5) -- a hands measurement never shows decimals of an inch
end
local hands, inches = divide(inches, 4)
outinfo.absvalue = hands + inches/4 -- supposed to be the absolute rounded value, but this is close enough
local inchstr = tostring(inches) -- '0', '1', '2' or '3'
if precision and precision <= 0 then -- using negative or 0 for precision rounds to nearest hand
hands = floor(outinfo.raw_absvalue/4 + 0.5)
inchstr = ''
elseif tfrac then
-- Always show an integer before fraction (like "15.0½") because "15½" means 15-and-a-half hands.
inchstr = numdot .. format_fraction(parms, 'out', false, inchstr, tfrac.numstr, tfrac.denstr)
else
inchstr = numdot .. from_en(inchstr)
end
outinfo.show = outinfo.sign .. with_separator(parms, format('%.0f', hands)) .. inchstr
return true, outinfo
end
local function evaluate_condition(value, condition)
-- Return true or false from applying a conditional expression to value,
-- or throw an error if invalid.
-- A very limited set of expressions is supported:
-- v < 9
-- v * 9 < 9
-- where
-- 'v' is replaced with value
-- 9 is any number (as defined by Lua tonumber)
-- only en digits are accepted
-- '<' can also be '<=' or '>' or '>='
-- In addition, the following form is supported:
-- LHS and RHS
-- where
-- LHS, RHS = any of above expressions.
local function compare(value, text)
local arithop, factor, compop, limit = text:match('^%s*v%s*([*]?)(.-)([<>]=?)(.*)$')
if arithop == nil then
error('Invalid default expression', 0)
elseif arithop == '*' then
factor = tonumber(factor)
if factor == nil then
error('Invalid default expression', 0)
end
value = value * factor
end
limit = tonumber(limit)
if limit == nil then
error('Invalid default expression', 0)
end
if compop == '<' then
return value < limit
elseif compop == '<=' then
return value <= limit
elseif compop == '>' then
return value > limit
elseif compop == '>=' then
return value >= limit
end
error('Invalid default expression', 0) -- should not occur
end
local lhs, rhs = condition:match('^(.-%W)and(%W.*)')
if lhs == nil then
return compare(value, condition)
end
return compare(value, lhs) and compare(value, rhs)
end
local function get_default(value, unit_table)
-- Return true, s where s = name of unit's default output unit,
-- or return false, t where t is an error message table.
-- Some units have a default that depends on the input value
-- (the first value if a range of values is used).
-- If '!' is in the default, the first bang-delimited field is an
-- expression that uses 'v' to represent the input value.
-- Example: 'v < 120 ! small ! big ! suffix' (suffix is optional)
-- evaluates 'v < 120' as a boolean with result
-- 'smallsuffix' if (value < 120), or 'bigsuffix' otherwise.
-- Input must use en digits and '.' decimal mark.
local default = data_code.default_exceptions[unit_table.defkey or unit_table.symbol] or unit_table.default
if not default then
local per = unit_table.per
if per then
local function a_default(v, u)
local success, ucode = get_default(v, u)
if not success then
return '?' -- an unlikely error has occurred; will cause lookup of default to fail
end
-- Attempt to use only the first unit if a combination or output multiple.
-- This is not bulletproof but should work for most cases.
-- Where it does not work, the convert will need to specify the wanted output unit.
local t = all_units[ucode]
if t then
local combo = t.combination
if combo then
-- For a multiple like ftin, the "first" unit (ft) is last in the combination.
local i = t.multiple and table_len(combo) or 1
ucode = combo[i]
end
else
-- Try for an automatically generated combination.
local item = ucode:match('^(.-)%+') or ucode:match('^(%S+)%s')
if all_units[item] then
return item
end
end
return ucode
end
local unit1, unit2 = per[1], per[2]
local def1 = (unit1 and a_default(value, unit1) or unit_table.vprefix or '')
local def2 = a_default(1, unit2) -- 1 because per unit of denominator
return true, def1 .. '/' .. def2
end
return false, { 'cvt_no_default', unit_table.symbol }
end
if default:find('!', 1, true) == nil then
return true, default
end
local t = split(default, '!')
if #t == 3 or #t == 4 then
local success, result = pcall(evaluate_condition, value, t[1])
if success then
default = result and t[2] or t[3]
if #t == 4 then
default = default .. t[4]
end
return true, default
end
end
return false, { 'cvt_bad_default', unit_table.symbol }
end
local linked_pages -- to record linked pages so will not link to the same page more than once
local function unlink(unit_table)
-- Forget that the given unit has previously been linked (if it has).
-- That is needed when processing a range of inputs or outputs when an id
-- for the first range value may have been evaluated, but only an id for
-- the last value is displayed, and that id may need to be linked.
linked_pages[unit_table.unitcode or unit_table] = nil
end
local function make_link(link, id, unit_table)
-- Return wikilink "[[link|id]]", possibly abbreviated as in examples:
-- [[Mile|mile]] --> [[mile]]
-- [[Mile|miles]] --> [[mile]]s
-- However, just id is returned if:
-- * no link given (so caller does not need to check if a link was defined); or
-- * link has previously been used during the current convert (to avoid overlinking).
local link_key
if unit_table then
link_key = unit_table.unitcode or unit_table
else
link_key = link
end
if not link or link == '' or linked_pages[link_key] then
return id
end
linked_pages[link_key] = true
-- Following only works for language en, but it should be safe on other wikis,
-- and overhead of doing it generally does not seem worthwhile.
local l = link:sub(1, 1):lower() .. link:sub(2)
if link == id or l == id then
return '[[' .. id .. ']]'
elseif link .. 's' == id or l .. 's' == id then
return '[[' .. id:sub(1, -2) .. ']]s'
else
return '[[' .. link .. '|' .. id .. ']]'
end
end
local function variable_name(clean, unit_table, exp_multiplier, key_id)
-- A unit name may depend on the value in some languages.
-- Parameter clean is the unsigned value in en digits, as a string.
-- It may represent a number ("1.0") or a fraction ("1+2/3").
-- In varname, fields are separated with "!" and are not empty.
-- A field for a unit using an SI prefix has the prefix name inserted,
-- replacing '#' if found, or before the field otherwise.
if clean:match('[./]') or clean:find('⁄', 1, true) then -- float or fraction
if exp_multiplier then
clean = exp_multiplier -- force selection of name for a large integer
else
clean = 34.5 -- force selection of name for a float value
end
else
clean = tonumber(clean) * (exp_multiplier or 1)
end
local name1, vname
if key_id == 'pername' and unit_table.pername then
vname = unit_table.pername
elseif unit_table.varname then
local splitvname = split(unit_table.varname, '!')
name1 = unit_table.name1
vname = mw.language.getContentLanguage():convertPlural(clean, name1, unpack(splitvname))
else
return clean == 1 and unit_table.name1 or unit_table.name2
end
if vname == name1 then
-- SI prefix (if any) has been inserted by unit_prefixed_mt.
else
local si_name = rawget(unit_table, 'si_name') or ''
local pos = vname:find('#', 1, true)
if pos then
vname = vname:sub(1, pos - 1) .. si_name .. vname:sub(pos + 1)
else
vname = si_name .. vname
end
end
return vname
end
local function linked_id(parms, unit_table, key_id, want_link, clean, exp_multiplier)
-- Return final unit id (symbol or name), optionally with a wikilink,
-- and update unit_table.sep if required.
-- key_id is one of: 'symbol', 'sym_us', 'name1', 'name1_us', 'name2', 'name2_us', 'pername'.
local abbr_on = (key_id == 'symbol' or key_id == 'sym_us')
if abbr_on and want_link then
local symlink = rawget(unit_table, 'symlink')
if symlink then
return symlink -- for exceptions that have the linked symbol built-in
end
end
local multiplier = rawget(unit_table, 'multiplier')
local per = unit_table.per
if per then
local paren1, paren2 = '', '' -- possible parentheses around bottom unit
local unit1 = per[1] -- top unit_table, or nil
local unit2 = per[2] -- bottom unit_table
if abbr_on then
if not unit1 then
unit_table.sep = '' -- no separator in "$2/acre"
end
if not want_link then
local symbol = unit_table.symbol_raw
if symbol then
return symbol -- for exceptions that have the symbol built-in
end
end
if (unit2.symbol):find('⋅', 1, true) then
paren1, paren2 = '(', ')'
end
end
local key_id2 -- unit2 is always singular
if key_id == 'name2' then
key_id2 = 'name1'
elseif key_id == 'name2_us' then
key_id2 = 'name1_us'
else
key_id2 = key_id
end
if key_id2 == 'name1' or key_id2 == 'name1_us' then
key_id2 = unit2.pername and 'pername' or key_id2 -- ukwiki has some units with a different name in "per unitname"
end
local result
if abbr_on then
result = '/'
elseif omitsep then
result = per_word
elseif unit1 then
result = ' ' .. per_word .. ' '
else
result = per_word .. ' '
end
if want_link and unit_table.link then
if varname and not abbr_on then
result = (unit1 and variable_name(clean, unit1, exp_multiplier) or '') .. result .. variable_name('1', unit2, exp_multiplier, key_id2)
else
result = (unit1 and linked_id(parms, unit1, key_id, false, clean) or '') .. result .. linked_id(parms, unit2, key_id2, false, '1')
end
if omit_separator(result) then
unit_table.sep = ''
end
return make_link(unit_table.link, result, unit_table)
end
if unit1 then
result = linked_id(parms, unit1, key_id, want_link, clean) .. result
if unit1.sep then
unit_table.sep = unit1.sep
end
elseif omitsep then
unit_table.sep = ''
end
return result .. paren1 .. linked_id(parms, unit2, key_id2, want_link, '1') .. paren2
end
if multiplier then
-- A multiplier (like "100" in "100km") forces the unit to be plural.
multiplier = from_en(multiplier)
if not omitsep then
multiplier = multiplier .. (abbr_on and ' ' or ' ')
end
if not abbr_on then
if key_id == 'name1' then
key_id = 'name2'
elseif key_id == 'name1_us' then
key_id = 'name2_us'
end
end
else
multiplier = ''
end
local id = unit_table.fixed_name or ((varname and not abbr_on) and variable_name(clean, unit_table, exp_multiplier, key_id) or unit_table[key_id])
if omit_separator(id) then
unit_table.sep = ''
end
if want_link then
local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link
if link then
local before = ''
local i = unit_table.customary
if i == 1 and parms.opt_sp_us then
i = 2 -- show "U.S." not "US"
end
if i == 3 and abbr_on then
i = 4 -- abbreviate "imperial" to "imp"
end
local customary = text_code.customary_units[i]
if customary then
-- LATER: This works for language en only, but it's esoteric so ignore for now.
local pertext
if id:sub(1, 1) == '/' then
-- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal".
pertext = '/'
id = id:sub(2)
elseif id:sub(1, 4) == 'per ' then
-- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used).
pertext = 'per '
id = id:sub(5)
else
pertext = ''
end
-- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted.
local removes = (i < 3) and { 'US ', 'US ', 'U.S. ', 'U.S. ' } or { 'imp ', 'imp ', 'imperial ' }
for _, prefix in ipairs(removes) do
local plen = #prefix
if id:sub(1, plen) == prefix then
id = id:sub(plen + 1)
break
end
end
before = pertext .. make_link(customary.link, customary[1]) .. ' '
end
id = before .. make_link(link, id, unit_table)
end
end
return multiplier .. id
end
local function make_id(parms, which, unit_table)
-- Return id, f where
-- id = unit name or symbol, possibly modified
-- f = true if id is a name, or false if id is a symbol
-- using the value for index 'which', and for 'in' or 'out' (unit_table.inout).
-- Result is '' if no symbol/name is to be used.
-- In addition, set unit_table.sep = ' ' or ' ' or ''
-- (the separator that caller will normally insert before the id).
if parms.opt_values then
unit_table.sep = ''
return ''
end
local inout = unit_table.inout
local info = unit_table.valinfo[which]
local lk = parms.lk
local want_link = (lk == 'on' or lk == inout)
local singular = info.singular
local want_name
local exp_multiplier
if unit_table.usename then
want_name = true
else
if parms.abbr_org == nil then
if parms.wantname then
want_name = true
end
if unit_table.usesymbol then
want_name = false
end
end
if want_name == nil then
local abbr = parms.abbr
if abbr == 'on' or abbr == inout or (abbr == 'mos' and inout == 'out') then
want_name = false
else
want_name = true
end
end
end
local key
if want_name then
if lk == nil and unit_table.builtin == 'hand' then
want_link = true
end
if parms.opt_use_nbsp then
unit_table.sep = ' '
else
unit_table.sep = ' '
end
if parms.opt_singular then
local value
if inout == 'in' then
value = info.value
else
value = info.absvalue
end
if value then -- some unusual units do not always set value field
value = abs(value)
singular = (0 < value and value < 1.0001)
end
end
if unit_table.engscale then
-- engscale: so "|1|e3kg" gives "1 thousand kilograms" (plural)
singular = false
exp_multiplier = 10^unit_table.engscale.exponent -- '1 gram' and '1 thousand grams', for example, may use different names for the unit in some languages
end
key = (parms.opt_adjectival or singular) and 'name1' or 'name2'
if parms.opt_sp_us then
key = key .. '_us'
end
else
if unit_table.builtin == 'hand' then
if parms.opt_hand_hh then
unit_table.symbol = 'hh' -- LATER: might want i18n applied to this
end
end
unit_table.sep = ' '
key = parms.opt_sp_us and 'sym_us' or 'symbol'
end
return linked_id(parms, unit_table, key, want_link, info.clean, exp_multiplier), want_name
end
local function decorate_value(parms, unit_table, which, enable_number_word)
-- If needed, update unit_table so values will be shown with extra information.
-- For consistency with the old template (but different from fmtpower),
-- the style to display powers of 10 includes "display:none" to allow some
-- browsers to copy, for example, "10³" as "10^3", rather than as "103".
-- The engscale table may have entries such as either of the following:
-- ["3"] = { "thousand", exponent = 3 },
-- ["3"] = { name1 = "A", varname = "B!C!D", exponent = 3 },
-- The first option always uses "thousand" as the exponent name.
-- The second option uses one of A, B, C, D as the exponent name, depending on the value.
local info
local engscale = unit_table.engscale
local prefix = unit_table.vprefix
if engscale or prefix then
info = unit_table.valinfo[which]
if info.decorated then
return -- do not redecorate if repeating convert
end
info.decorated = true
if engscale then
-- Range |10|-|20|e3km| gives '10×10³–20×10³' or '10–20 thousand'.
local inout = unit_table.inout
local abbr = parms.abbr
if (abbr == 'on' or abbr == inout) and not (unit_table.this_number_word or parms.number_word) then
info.show = info.show ..
'<span style="margin-left:0.2em">×<span style="margin-left:0.1em">' ..
from_en('10') ..
'</span></span><s style="display:none">^</s><sup>' ..
from_en(tostring(engscale.exponent)) .. '</sup>'
elseif enable_number_word then
local number_id
local name = engscale.varname and variable_name(info.clean, engscale) or engscale[1]
if parms.lk == 'on' or parms.lk == inout then
number_id = make_link(engscale.link, name)
else
number_id = name
end
-- WP:NUMERAL recommends " " in values like "12 million".
info.show = info.show .. (parms.opt_adjectival and '-' or ' ') .. number_id
end
end
if prefix then
info.show = prefix .. info.show
end
end
end
local function process_input(parms, in_current)
-- Processing required once per conversion.
-- Return block of text to represent input (value/unit).
if parms.opt_output_only or parms.opt_output_number_only or parms.opt_output_unit_only then
parms.joins = { '', '' }
return ''
end
local first_unit
local composite = in_current.composite -- nil or table of units
if composite then
first_unit = composite[1]
else
first_unit = in_current
end
local id1, want_name = make_id(parms, 1, first_unit)
local sep = first_unit.sep -- separator between value and unit, set by make_id
local preunit = parms.preunit1
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_input_unit_only then
parms.joins = { '', '' }
if composite then
local parts = { id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, (make_id(parms, 1, unit)))
end
end
id1 = table.concat(parts, ' ')
end
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if parms.opt_also_symbol and not composite and not parms.opt_flip then
local join1 = parms.joins[1]
if join1 == ' (' or join1 == ' [' then
parms.joins = { ' [' .. first_unit[parms.opt_sp_us and 'sym_us' or 'symbol'] .. ']' .. join1 , parms.joins[2] }
end
end
if in_current.builtin == 'mach' and first_unit.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = first_unit.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
local prefix2 = make_id(parms, 2, first_unit) .. ' '
result = range_text(range[1], want_name, parms, result, prefix2 .. valinfo[2].show, 'in', {spaced=true})
end
return preunit .. result
end
if composite then
-- Simplify: assume there is no range, and no decoration.
local mid = (not parms.opt_flip) and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
if omitsep and sep == '' then
-- Testing the id of the most significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
local parts = { first_unit.valinfo[1].show .. sep1 .. id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, unit.valinfo[1].show .. sep1 .. (make_id(parms, 1, unit)))
end
end
return table.concat(parts, sep2) .. mid
end
local add_unit = (parms.abbr == 'mos') or
parms[parms.opt_flip and 'out_range_x' or 'in_range_x'] or
(not want_name and parms.abbr_range_x)
local range = parms.range
if range and not add_unit then
unlink(first_unit)
end
local id = range and make_id(parms, range.n + 1, first_unit) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, 'in')
if was_hyphenated then
add_unit = false
end
local result
local valinfo = first_unit.valinfo
if range then
for i = 0, range.n do
local enable_number_word
if i == range.n then
add_unit = false
enable_number_word = true
end
decorate_value(parms, first_unit, i+1, enable_number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. first_unit.sep .. (i == 0 and id1 or make_id(parms, i+1, first_unit))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, 'in')
end
end
else
decorate_value(parms, first_unit, 1, true)
result = valinfo[1].show
end
return result .. preunit .. extra
end
local function process_one_output(parms, out_current)
-- Processing required for each output unit.
-- Return block of text to represent output (value/unit).
local inout = out_current.inout -- normally 'out' but can be 'in' for order=out
local id1, want_name = make_id(parms, 1, out_current)
local sep = out_current.sep -- set by make_id
local preunit = parms.preunit2
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_output_unit_only then
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if out_current.builtin == 'mach' and out_current.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = out_current.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
result = range_text(range[1], want_name, parms, result, prefix .. valinfo[2].show, inout, {spaced=true})
end
return preunit .. result
end
local add_unit = (parms[parms.opt_flip and 'in_range_x' or 'out_range_x'] or
(not want_name and parms.abbr_range_x)) and
not parms.opt_output_number_only
local range = parms.range
if range and not add_unit then
unlink(out_current)
end
local id = range and make_id(parms, range.n + 1, out_current) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, inout)
if was_hyphenated then
add_unit = false
end
local result
local valinfo = out_current.valinfo
if range then
for i = 0, range.n do
local enable_number_word
if i == range.n then
add_unit = false
enable_number_word = true
end
decorate_value(parms, out_current, i+1, enable_number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, inout)
end
end
else
decorate_value(parms, out_current, 1, true)
result = valinfo[1].show
end
if parms.opt_output_number_only then
return result
end
return result .. preunit .. extra
end
local function make_output_single(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for a single output (which is not a combination or a multiple);
-- or return false, t where t is an error message table.
if parms.opt_order_out and in_unit_table.unitcode == out_unit_table.unitcode then
out_unit_table.valinfo = in_unit_table.valinfo
else
out_unit_table.valinfo = collection()
for _, v in ipairs(in_unit_table.valinfo) do
local success, info = cvtround(parms, v, in_unit_table, out_unit_table)
if not success then return false, info end
out_unit_table.valinfo:add(info)
end
end
return true, process_one_output(parms, out_unit_table)
end
local function make_output_multiple(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for an output which is a multiple (like 'ftin');
-- or return false, t where t is an error message table.
local inout = out_unit_table.inout -- normally 'out' but can be 'in' for order=out
local multiple = out_unit_table.multiple -- table of scaling factors (will not be nil)
local combos = out_unit_table.combination -- table of unit tables (will not be nil)
local abbr = parms.abbr
local abbr_org = parms.abbr_org
local disp = parms.disp
local want_name = (abbr_org == nil and (disp == 'or' or disp == 'slash')) or
not (abbr == 'on' or abbr == inout or abbr == 'mos')
local want_link = (parms.lk == 'on' or parms.lk == inout)
local mid = parms.opt_flip and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
local do_spell = parms.opt_spell_out
parms.opt_spell_out = nil -- so the call to cvtround does not spell the value
local function make_result(info, isfirst)
local fmt, outvalue, sign
local results = {}
for i = 1, #combos do
local tfrac, thisvalue, strforce
local out_current = combos[i]
out_current.inout = inout
local scale = multiple[i]
if i == 1 then -- least significant unit ('in' from 'ftin')
local decimals
out_current.frac = out_unit_table.frac
local success, outinfo = cvtround(parms, info, in_unit_table, out_current)
if not success then return false, outinfo end
if isfirst then
out_unit_table.valinfo = { outinfo } -- in case output value of first least significant unit is needed
end
sign = outinfo.sign
tfrac = outinfo.fraction_table
if outinfo.is_scientific then
strforce = outinfo.show
decimals = ''
elseif tfrac then
decimals = ''
else
local show = outinfo.show -- number as a string in local language
local p1, p2 = show:find(numdot, 1, true)
decimals = p1 and show:sub(p2 + 1) or '' -- text after numdot, if any
end
fmt = '%.' .. ulen(decimals) .. 'f' -- to reproduce precision
if decimals == '' then
if tfrac then
outvalue = floor(outinfo.raw_absvalue) -- integer part only; fraction added later
else
outvalue = floor(outinfo.raw_absvalue + 0.5) -- keep all integer digits of least significant unit
end
else
outvalue = outinfo.absvalue
end
end
if scale then
outvalue, thisvalue = divide(outvalue, scale)
else
thisvalue = outvalue
end
local id
if want_name then
if varname then
local clean
if strforce or tfrac then
clean = '.1' -- dummy value to force name for floating point
else
clean = format(fmt, thisvalue)
end
id = variable_name(clean, out_current)
else
local key = 'name2'
if parms.opt_adjectival then
key = 'name1'
elseif tfrac then
if thisvalue == 0 then
key = 'name1'
end
elseif parms.opt_singular then
if 0 < thisvalue and thisvalue < 1.0001 then
key = 'name1'
end
else
if thisvalue == 1 then
key = 'name1'
end
end
id = out_current[key]
end
else
id = out_current['symbol']
end
if i == 1 and omit_separator(id) then
-- Testing the id of the least significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
if want_link then
local link = out_current.link
if link then
id = make_link(link, id, out_current)
end
end
local strval
local spell_inout = (i == #combos or outvalue == 0) and inout or '' -- trick so the last value processed (first displayed) has uppercase, if requested
if strforce and outvalue == 0 then
sign = '' -- any sign is in strforce
strval = strforce -- show small values in scientific notation; will only use least significant unit
elseif tfrac then
local wholestr = (thisvalue > 0) and tostring(thisvalue) or nil
strval = format_fraction(parms, spell_inout, false, wholestr, tfrac.numstr, tfrac.denstr, do_spell)
else
strval = (thisvalue == 0) and from_en('0') or with_separator(parms, format(fmt, thisvalue))
if do_spell then
strval = spell_number(parms, spell_inout, strval) or strval
end
end
table.insert(results, strval .. sep1 .. id)
if outvalue == 0 then
break
end
fmt = '%.0f' -- only least significant unit can have a non-integral value
end
local reversed, count = {}, #results
for i = 1, count do
reversed[i] = results[count + 1 - i]
end
return true, sign .. table.concat(reversed, sep2)
end
local valinfo = in_unit_table.valinfo
local success, result = make_result(valinfo[1], true)
if not success then return false, result end
local range = parms.range
if range then
for i = 1, range.n do
local success, result2 = make_result(valinfo[i+1])
if not success then return false, result2 end
result = range_text(range[i], want_name, parms, result, result2, inout, {spaced=true})
end
end
return true, result .. mid
end
local function process(parms, in_unit_table, out_unit_table)
-- Return true, s, outunit where s = final wikitext result,
-- or return false, t where t is an error message table.
linked_pages = {}
local success, bad_output
local bad_input_mcode = in_unit_table.bad_mcode -- nil if input unit is a valid convert unit
local out_unit = parms.out_unit
if out_unit == nil or out_unit == '' or type(out_unit) == 'function' then
-- out_unit can be set to a function by adjustparameters in Module:Convert/wikidata.
if bad_input_mcode or parms.opt_input_unit_only then
bad_output = ''
else
local getdef = type(out_unit) == 'function' and out_unit or get_default
success, out_unit = getdef(in_unit_table.valinfo[1].value, in_unit_table)
parms.out_unit = out_unit
if not success then
bad_output = out_unit
end
end
end
if not bad_output and not out_unit_table then
success, out_unit_table = lookup(parms, out_unit, 'any_combination')
if success then
local mismatch = check_mismatch(in_unit_table, out_unit_table)
if mismatch then
bad_output = mismatch
end
else
bad_output = out_unit_table
end
end
local lhs, rhs
local flipped = parms.opt_flip and not bad_input_mcode
if bad_output then
rhs = (bad_output == '') and '' or message(parms, bad_output)
elseif parms.opt_input_unit_only then
rhs = ''
else
local combos -- nil (for 'ft' or 'ftin'), or table of unit tables (for 'm ft')
if not out_unit_table.multiple then -- nil/false ('ft' or 'm ft'), or table of factors ('ftin')
combos = out_unit_table.combination
end
local frac = parms.frac -- nil or denominator of fraction for output values
if frac then
-- Apply fraction to the unit (if only one), or to non-SI units (if a combination),
-- except that if a precision is also specified, the fraction only applies to
-- the hand unit; that allows the following result:
-- {{convert|156|cm|in hand|1|frac=2}} → 156 centimetres (61.4 in; 15.1½ hands)
-- However, the following is handled elsewhere as a special case:
-- {{convert|156|cm|hand in|1|frac=2}} → 156 centimetres (15.1½ hands; 61½ in)
if combos then
local precision = parms.precision
for _, unit in ipairs(combos) do
if unit.builtin == 'hand' or (not precision and not unit.prefixes) then
unit.frac = frac
end
end
else
out_unit_table.frac = frac
end
end
local outputs = {}
local imax = combos and #combos or 1 -- 1 (single unit) or number of unit tables
if imax == 1 then
parms.opt_order_out = nil -- only useful with an output combination
end
if not flipped and not parms.opt_order_out then
-- Process left side first so any duplicate links (from lk=on) are suppressed
-- on right. Example: {{convert|28|e9pc|e9ly|abbr=off|lk=on}}
lhs = process_input(parms, in_unit_table)
end
for i = 1, imax do
local success, item
local out_current = combos and combos[i] or out_unit_table
out_current.inout = 'out'
if i == 1 then
if imax > 1 and out_current.builtin == 'hand' then
out_current.out_next = combos[2] -- built-in hand can influence next unit in a combination
end
if parms.opt_order_out then
out_current.inout = 'in'
end
end
if out_current.multiple then
success, item = make_output_multiple(parms, in_unit_table, out_current)
else
success, item = make_output_single(parms, in_unit_table, out_current)
end
if not success then return false, item end
outputs[i] = item
end
if parms.opt_order_out then
lhs = outputs[1]
table.remove(outputs, 1)
end
local sep = parms.table_joins and parms.table_joins[2] or parms.join_between
rhs = table.concat(outputs, sep)
end
if flipped or not lhs then
local input = process_input(parms, in_unit_table)
if flipped then
lhs = rhs
rhs = input
else
lhs = input
end
end
if parms.join_before then
lhs = parms.join_before .. lhs
end
local wikitext
if bad_input_mcode then
if bad_input_mcode == '' then
wikitext = lhs
else
wikitext = lhs .. message(parms, bad_input_mcode)
end
elseif parms.table_joins then
wikitext = parms.table_joins[1] .. lhs .. parms.table_joins[2] .. rhs
else
wikitext = lhs .. parms.joins[1] .. rhs .. parms.joins[2]
end
if parms.warnings and not bad_input_mcode then
wikitext = wikitext .. parms.warnings
end
return true, get_styles(parms) .. wikitext, out_unit_table
end
local function _main_convert(confArgs, parmsArgs, frame)
-- Do convert, and if needed, do it again with higher default precision.
local parms = { frame = frame or mw.getCurrentFrame() } -- will hold template arguments, after translation
set_config(confArgs)
local success, result = get_parms(parms, parmsArgs)
if success then
if type(result) ~= 'table' then
return tostring(result)
end
local in_unit_table = result
local out_unit_table
for _ = 1, 2 do -- use counter so cannot get stuck repeating convert
success, result, out_unit_table = process(parms, in_unit_table, out_unit_table)
if success and parms.do_convert_again then
parms.do_convert_again = false
else
break
end
end
end
-- If input=x gives a problem, the result should be just the user input
-- (if x is a property like P123 it has been replaced with '').
-- An unknown input unit would display the input and an error message
-- with success == true at this point.
-- Also, can have success == false with a message that outputs an empty string.
if parms.input_text then
if success and not parms.have_problem then
return result
end
local cat
if parms.tracking then
-- Add a tracking category using the given text as the category sort key.
-- There is currently only one type of tracking, but in principle multiple
-- items could be tracked, using different sort keys for convenience.
cat = wanted_category('tracking', parms.tracking)
end
return parms.input_text .. (cat or '')
end
if parms.error_text then
if success and not parms.have_problem then
return result
end
return parms.error_text
end
return success and result or message(parms, result)
end
local function main_convert(frame)
return _main_convert(frame.args, frame:getParent().args, frame)
end
local function _unit(unitcode, options)
-- Helper function for Module:Val to look up a unit.
-- Parameter unitcode must be a string to identify the wanted unit.
-- Parameter options must be nil or a table with optional fields:
-- value = number (for sort key; default value is 1)
-- scaled_top = nil for a normal unit, or a number for a unit which is
-- the denominator of a per unit (for sort key)
-- si = { 'symbol', 'link' }
-- (a table with two strings) to make an SI unit
-- that will be used for the look up
-- link = true if result should be [[linked]]
-- sort = 'on' or 'debug' if result should include a sort key in a
-- span element ('debug' makes the key visible)
-- name = true for the name of the unit instead of the symbol
-- us = true for the US spelling of the unit, if any
-- Return nil if unitcode is not a non-empty string.
-- Otherwise return a table with fields:
-- text = requested symbol or name of unit, optionally linked
-- scaled_value = input value adjusted by unit scale; used for sort key
-- sortspan = span element with sort key like that provided by {{ntsh}},
-- calculated from the result of converting value
-- to a base unit with scale 1.
-- unknown = true if the unitcode was not known
unitcode = strip(unitcode)
if unitcode == nil or unitcode == '' then
return nil
end
set_config({})
linked_pages = {}
options = options or {}
local parms = {
abbr = options.name and 'off' or 'on',
lk = options.link and 'on' or nil,
opt_sp_us = options.us and true or nil,
opt_ignore_error = true,
opt_no_extra = true, -- do not add pages using this function to 'what links here' for Module:Convert/extra
opt_sortable_on = options.sort == 'on' or options.sort == 'debug',
opt_sortable_debug = options.sort == 'debug',
}
if options.si then
-- Make a dummy table of units (just one unit) for lookup to use.
-- This makes lookup recognize any SI prefix in the unitcode.
local symbol = options.si[1] or '?'
parms.unittable = { [symbol] = {
_name1 = symbol,
_name2 = symbol,
_symbol = symbol,
utype = symbol,
scale = symbol == 'g' and 0.001 or 1,
prefixes = 1,
default = symbol,
link = options.si[2],
}}
end
local success, unit_table = lookup(parms, unitcode, 'no_combination')
if not success then
unit_table = setmetatable({
symbol = unitcode, name2 = unitcode, utype = unitcode,
scale = 1, default = '', defkey = '', linkey = '' }, unit_mt)
end
local value = tonumber(options.value) or 1
local clean = tostring(abs(value))
local info = {
value = value,
altvalue = value,
singular = (clean == '1'),
clean = clean,
show = clean,
}
unit_table.inout = 'in'
unit_table.valinfo = { info }
local sortspan, scaled_value
if options.sort then
sortspan, scaled_value = make_table_or_sort(parms, value, info, unit_table, options.scaled_top)
end
return {
text = make_id(parms, 1, unit_table),
sortspan = sortspan,
scaled_value = scaled_value,
unknown = not success and true or nil,
}
end
return { convert = main_convert, _convert = _main_convert, _unit = _unit }
r4djqnuzbxaut805hk89ncew56hajfu
Module:Convert/data
828
7531
104295
2026-09-11T15:21:04Z
咽頭べさ
6149
Created page with "-- Conversion data used by [[Module:Convert]] which uses mw.loadData() for -- read-only access to this module so that it is loaded only once per page. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. -- -- These data tables follow: -- all_units all properties for a unit, including default output -- default_exceptions exceptions for default output ('kg' and 'g' have different defaults) -- link_exceptions exceptions for links..."
104295
Scribunto
text/plain
-- Conversion data used by [[Module:Convert]] which uses mw.loadData() for
-- read-only access to this module so that it is loaded only once per page.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
--
-- These data tables follow:
-- all_units all properties for a unit, including default output
-- default_exceptions exceptions for default output ('kg' and 'g' have different defaults)
-- link_exceptions exceptions for links ('kg' and 'g' have different links)
--
-- These tables are generated by a script which reads the wikitext of a page that
-- documents the required properties of each unit; see [[:en:Module:Convert/doc]].
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local all_units = {
["Gy"] = {
_name1 = "gray",
_symbol = "Gy",
utype = "absorbed radiation dose",
scale = 1,
prefixes = 1,
default = "rad",
link = "Gray (unit)",
},
["rad"] = {
_name1 = "rad",
_symbol = "rad",
utype = "absorbed radiation dose",
scale = 0.01,
prefixes = 1,
default = "Gy",
link = "वेगो",
},
["cm/s2"] = {
name1 = "centimetre per second squared",
name1_us = "centimeter per second squared",
name2 = "centimetres per second squared",
name2_us = "centimeters per second squared",
symbol = "cm/s<sup>2</sup>",
utype = "acceleration",
scale = 0.01,
default = "ft/s2",
link = "वेगो",
},
["ft/s2"] = {
name1 = "foot per second squared",
name2 = "feet per second squared",
symbol = "ft/s<sup>2</sup>",
utype = "acceleration",
scale = 0.3048,
default = "m/s2",
},
["g0"] = {
name1 = "standard gravity",
name2 = "standard gravities",
symbol = "''g''<sub>0</sub>",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
},
["g-force"] = {
name2 = "''g''",
symbol = "''g''",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
link = "g-force",
},
["km/hs"] = {
name1 = "kilometre per hour per second",
name1_us = "kilometer per hour per second",
name2 = "kilometres per hour per second",
name2_us = "kilometers per hour per second",
symbol = "km/(h⋅s)",
utype = "acceleration",
scale = 0.27777777777777779,
default = "mph/s",
link = "Acceleration",
},
["km/s2"] = {
name1 = "kilometre per second squared",
name1_us = "kilometer per second squared",
name2 = "kilometres per second squared",
name2_us = "kilometers per second squared",
symbol = "km/s<sup>2</sup>",
utype = "acceleration",
scale = 1000,
default = "mph/s",
link = "Acceleration",
},
["m/s2"] = {
name1 = "metre per second squared",
name1_us = "meter per second squared",
name2 = "metres per second squared",
name2_us = "meters per second squared",
symbol = "m/s<sup>2</sup>",
utype = "acceleration",
scale = 1,
default = "ft/s2",
},
["mph/s"] = {
name1 = "mile per hour per second",
name2 = "miles per hour per second",
symbol = "mph/s",
utype = "acceleration",
scale = 0.44704,
default = "km/hs",
link = "वेगो",
},
["km/h/s"] = {
target = "km/hs",
},
["standard gravity"] = {
target = "g0",
},
["1000sqft"] = {
name1 = "सहस्सं चतुरस्सपादो",
name2 = "सहस्सं चतुरस्सपादो",
symbol = "1000 sq ft",
utype = "area",
scale = 92.90304,
default = "m2",
link = "चतुरस्सपादो",
},
["a"] = {
_name1 = "are",
_symbol = "a",
utype = "area",
scale = 100,
prefixes = 1,
default = "sqft",
link = "हैक्टर#Are",
},
["acre"] = {
symbol = "acre",
usename = 1,
utype = "area",
scale = 4046.8564224,
default = "ha",
subdivs = { ["rood"] = { 4, default = "ha" }, ["sqperch"] = { 160, default = "ha" } },
},
["acre-sing"] = {
target = "acre",
},
["arpent"] = {
symbol = "arpent",
usename = 1,
utype = "area",
scale = 3418.89,
default = "ha",
},
["cda"] = {
name1 = "cuerda",
symbol = "cda",
utype = "area",
scale = 3930.395625,
default = "ha acre",
},
["daa"] = {
name1 = "decare",
symbol = "daa",
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunam"] = {
symbol = "dunam",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunum"] = {
symbol = "dunum",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
link = "Dunam",
},
["ha"] = {
name1 = "हैक्टर",
symbol = "ha",
utype = "area",
scale = 10000,
default = "acre",
},
["hectare"] = {
name1 = "hectare",
symbol = "ha",
usename = 1,
utype = "area",
scale = 10000,
default = "acre",
},
["Irish acre"] = {
name1 = "Irish acre",
symbol = "Irish acres",
utype = "area",
scale = 6555.2385024,
default = "ha",
link = "Acre (Irish)",
},
["m2"] = {
_name1 = "चतुरङ्क मीता",
_name1_us= "चतुरङ्क मीता",
_symbol = "m<sup>2</sup>",
prefix_position= 8,
utype = "area",
scale = 1,
prefixes = 2,
default = "sqft",
link = "चतुरङ्क मीता",
},
["pondemaat"] = {
name1 = "pondemaat",
name2 = "pondemaat",
symbol = "pond",
utype = "area",
scale = 3674.363358816,
default = "m2",
link = ":nl:pondemaat",
},
["pyeong"] = {
name2 = "pyeong",
symbol = "pyeong",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
},
["rai"] = {
name2 = "rai",
symbol = "rai",
utype = "area",
scale = 1600,
default = "m2",
link = "Rai (unit)",
},
["rood"] = {
symbol = "rood",
usename = 1,
utype = "area",
scale = 1011.7141056,
default = "sqft m2",
subdivs = { ["sqperch"] = { 40, default = "m2" } },
link = "Rood (unit)",
},
["sqfoot"] = {
name1 = "चतुरङ्कपाद",
name2 = "चतुरङ्कपाद",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqft"] = {
name1 = "चतुरङ्कपाद",
name2 = "चतुरङ्कपाद",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqin"] = {
name1 = "चतुरङ्करङ्गुल",
name2 = "चतुरङ्करङ्गुल",
symbol = "sq in",
utype = "area",
scale = 0.00064516,
default = "cm2",
},
["sqmi"] = {
name1 = "चतुरङ्कगावुत",
symbol = "sq mi",
utype = "area",
scale = 2589988.110336,
default = "km2",
},
["sqnmi"] = {
name1 = "चतुरङ्कजलगावुत",
symbol = "sq nmi",
utype = "area",
scale = 3429904,
default = "km2 sqmi",
link = "जलगावुत",
},
["sqperch"] = {
name2 = "पाचियो",
symbol = "पाचियो",
usename = 1,
utype = "area",
scale = 25.29285264,
default = "m2",
link = "पाचिय (पमाण)#खेत्त",
},
["sqverst"] = {
symbol = "चतुरङ्कवेस्सत",
usename = 1,
utype = "area",
scale = 1138062.24,
default = "km2 sqmi",
link = "वेस्सत",
},
["sqyd"] = {
name1 = "चतुरङ्कयट्ठि",
symbol = "sq yd",
utype = "area",
scale = 0.83612736,
default = "m2",
},
["tsubo"] = {
name2 = "tsubo",
symbol = "tsubo",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
link = "Japanese units of measurement#Area",
},
["acres"] = {
target = "acre",
},
["are"] = {
target = "a",
},
["decare"] = {
target = "daa",
},
["foot2"] = {
target = "sqfoot",
},
["ft2"] = {
target = "sqft",
symbol = "ft<sup>2</sup>",
},
["in2"] = {
target = "sqin",
symbol = "in<sup>2</sup>",
},
["km²"] = {
target = "km2",
},
["mi2"] = {
target = "sqmi",
symbol = "mi<sup>2</sup>",
},
["million acre"] = {
target = "e6acre",
},
["million acres"] = {
target = "e6acre",
},
["million hectares"] = {
target = "e6ha",
},
["m²"] = {
target = "m2",
},
["nmi2"] = {
target = "sqnmi",
},
["pond"] = {
target = "pondemaat",
},
["sq arp"] = {
target = "arpent",
},
["sqkm"] = {
target = "km2",
},
["sqm"] = {
target = "m2",
},
["square verst"] = {
target = "sqverst",
},
["verst2"] = {
target = "sqverst",
},
["yd2"] = {
target = "sqyd",
symbol = "yd<sup>2</sup>",
},
["m2/ha"] = {
name1 = "square metre per hectare",
name1_us = "square meter per hectare",
name2 = "square metres per hectare",
name2_us = "square meters per hectare",
symbol = "m<sup>2</sup>/ha",
utype = "area per unit area",
scale = 0.0001,
default = "sqft/acre",
link = "Basal area",
},
["sqft/acre"] = {
name1 = "square foot per acre",
name2 = "square feet per acre",
symbol = "sq ft/acre",
utype = "area per unit area",
scale = 2.295684113865932e-5,
default = "m2/ha",
link = "Basal area",
},
["cent"] = {
name1 = "cent",
symbol = "¢",
utype = "cent",
scale = 1,
default = "cent",
link = "सतभाग (धनं)",
},
["¢"] = {
target = "cent",
},
["A.h"] = {
name1 = "ampere hour",
symbol = "A⋅h",
utype = "charge",
scale = 3600,
default = "अम्पियर होरा",
},
["coulomb"] = {
_name1 = "coulomb",
_symbol = "C",
utype = "charge",
scale = 1,
prefixes = 1,
default = "e",
link = "कूलोम्ब",
},
["e"] = {
name1 = "elementary charge",
symbol = "''e''",
utype = "charge",
scale = 1.602176634e-19,
default = "coulomb",
},
["g-mol"] = {
name1 = "gram-mole",
symbol = "g‑mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["gmol"] = {
name1 = "gram-mole",
symbol = "gmol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kmol"] = {
name1 = "kilomole",
symbol = "kmol",
utype = "chemical amount",
scale = 1000,
default = "lbmol",
link = "Mole (unit)",
},
["lb-mol"] = {
name1 = "pound-mole",
symbol = "lb‑mol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["lbmol"] = {
name1 = "pound-mole",
symbol = "lbmol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["mol"] = {
name1 = "mole",
symbol = "mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kgCO2/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg(CO<sub>2</sub>)/L",
utype = "co2 per unit volume",
scale = 1000,
default = "lbCO2/USgal",
link = "Exhaust gas",
},
["lbCO2/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lbCO2/US gal",
utype = "co2 per unit volume",
scale = 119.82642731689663,
default = "kgCO2/L",
link = "Exhaust gas",
},
["oz/lb"] = {
per = { "oz", "lb" },
utype = "concentration",
default = "mg/kg",
},
["mg/kg"] = {
per = { "mg", "kg" },
utype = "concentration",
default = "oz/lb",
},
["g/dm3"] = {
name1 = "gram per cubic decimetre",
name1_us = "gram per cubic decimeter",
name2 = "grams per cubic decimetre",
name2_us = "grams per cubic decimeter",
symbol = "g/dm<sup>3</sup>",
utype = "density",
scale = 1,
default = "kg/m3",
link = "घनत्तं",
},
["g/L"] = {
name1 = "gram per litre",
name1_us = "gram per liter",
name2 = "grams per litre",
name2_us = "grams per liter",
symbol = "g/L",
utype = "density",
scale = 1,
default = "lb/cuin",
link = "घनत्तं",
},
["g/mL"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/mL",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "घनत्तं",
},
["g/ml"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/ml",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "घनत्तं",
},
["kg/dm3"] = {
name1 = "kilogram per cubic decimetre",
name1_us = "kilogram per cubic decimeter",
name2 = "kilograms per cubic decimetre",
name2_us = "kilograms per cubic decimeter",
symbol = "kg/dm<sup>3</sup>",
utype = "density",
scale = 1000,
default = "lb/cuft",
link = "घनत्तं",
},
["kg/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/L",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "घनत्तं",
},
["kg/l"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/l",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "घनत्तं",
},
["kg/m3"] = {
name1 = "kilogram per cubic metre",
name1_us = "kilogram per cubic meter",
name2 = "kilograms per cubic metre",
name2_us = "kilograms per cubic meter",
symbol = "kg/m<sup>3</sup>",
utype = "density",
scale = 1,
default = "lb/cuyd",
link = "घनत्तं",
},
["lb/cuft"] = {
name1 = "pound per cubic foot",
name2 = "pounds per cubic foot",
symbol = "lb/cu ft",
utype = "density",
scale = 16.018463373960142,
default = "g/cm3",
link = "घनत्तं",
},
["lb/cuin"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "घनत्तं",
},
["lb/cuyd"] = {
name1 = "pound per cubic yard",
name2 = "pounds per cubic yard",
symbol = "lb/cu yd",
utype = "density",
scale = 0.5932764212577829,
default = "kg/m3",
link = "घनत्तं",
},
["lb/impgal"] = {
name1 = "pound per imperial gallon",
name2 = "pounds per imperial gallon",
symbol = "lb/imp gal",
utype = "density",
scale = 99.776372663101697,
default = "kg/L",
link = "घनत्तं",
},
["lb/in3"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "घनत्तं",
},
["lb/U.S.gal"] = {
name1 = "pound per U.S. gallon",
name2 = "pounds per U.S. gallon",
symbol = "lb/U.S. gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "घनत्तं",
},
["lb/USbu"] = {
name1 = "pound per US bushel",
name2 = "pounds per US bushel",
symbol = "lb/US bu",
utype = "density",
scale = 12.871859780974471,
default = "kg/m3",
link = "Bushel",
},
["lb/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lb/US gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "घनत्तं",
},
["lbm/cuin"] = {
name1 = "pound mass per cubic inch",
name2 = "pounds mass per cubic inch",
symbol = "lbm/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "घनत्तं",
},
["mg/L"] = {
name1 = "milligram per litre",
name1_us = "milligram per liter",
name2 = "milligrams per litre",
name2_us = "milligrams per liter",
symbol = "mg/L",
utype = "density",
scale = 0.001,
default = "lb/cuin",
link = "घनत्तं",
},
["oz/cuin"] = {
name1 = "ounce per cubic inch",
name2 = "ounces per cubic inch",
symbol = "oz/cu in",
utype = "density",
scale = 1729.9940443876951,
default = "g/cm3",
link = "घनत्तं",
},
["g/cm3"] = {
per = { "g", "cm3" },
utype = "density",
default = "lb/cuin",
},
["g/m3"] = {
per = { "g", "m3" },
utype = "density",
default = "lb/cuyd",
link = "घनत्तं",
},
["Mg/m3"] = {
per = { "Mg", "m3" },
utype = "density",
default = "lb/cuft",
},
["mg/l"] = {
per = { "mg", "ll" },
utype = "density",
default = "oz/cuin",
},
["μg/dL"] = {
per = { "μg", "dL" },
utype = "density",
default = "lb/cuin",
},
["μg/l"] = {
per = { "μg", "ll" },
utype = "density",
default = "oz/cuin",
},
["lb/ft3"] = {
target = "lb/cuft",
},
["lb/yd3"] = {
target = "lb/cuyd",
},
["lbm/in3"] = {
target = "lbm/cuin",
},
["mcg/dL"] = {
target = "μg/dL",
},
["oz/in3"] = {
target = "oz/cuin",
},
["ug/dL"] = {
target = "μg/dL",
},
["ug/l"] = {
target = "μg/l",
},
["B.O.T.U."] = {
name1 = "Board of Trade Unit",
symbol = "B.O.T.U.",
utype = "energy",
scale = 3600000,
default = "MJ",
link = "वाट्ट होरा",
},
["bboe"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "bboe",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BOE"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "BOE",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BTU"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं",
symbol = "BTU",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["Btu"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं",
symbol = "Btu",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["BTU-39F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (39°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (39°F)",
symbol = "BTU<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-39F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (39°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (39°F)",
symbol = "Btu<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["BTU-59F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (59°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (59°F)",
symbol = "BTU<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-59F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (59°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (59°F)",
symbol = "Btu<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["BTU-60F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (60°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (60°F)",
symbol = "BTU<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["Btu-60F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (60°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (60°F)",
symbol = "Btu<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["BTU-63F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (63°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (63°F)",
symbol = "BTU<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-63F"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (63°F)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (63°F)",
symbol = "Btu<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["BTU-ISO"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (ISO)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (ISO)",
symbol = "BTU<sub>ISO</sub>",
utype = "energy",
scale = 1055.056,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-ISO"] = {
target = "BTU-ISO",
},
["BTU-IT"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (IT)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (IT)",
symbol = "BTU<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-IT"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (IT)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (IT)",
symbol = "Btu<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["BTU-mean"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (mean)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (mean)",
symbol = "BTU<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-mean"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (mean)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (mean)",
symbol = "Btu<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["BTU-th"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (thermochemical)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (thermochemical)",
symbol = "BTU<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Btu-th"] = {
name1 = "ब्रिटिस्ह्य उस्मा एककं (thermochemical)",
name2 = "ब्रिटिस्ह्य उस्मा एककं (thermochemical)",
symbol = "Btu<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "ब्रिटिस्ह्य उस्मा एककं",
},
["Cal"] = {
name1 = "calorie",
symbol = "Cal",
utype = "energy",
scale = 4184,
default = "kJ",
},
["cal"] = {
name1 = "कैलोरी",
symbol = "cal",
utype = "energy",
scale = 4.184,
default = "J",
},
["Cal-15"] = {
name1 = "कैलोरी(15°C)",
name2 = "कैलोरी (15°C)",
symbol = "Cal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "कैलोरी",
},
["cal-15"] = {
name1 = "कैलोरी (15°C)",
name2 = "कैलोरी (15°C)",
symbol = "cal<sub>15</sub>",
utype = "energy",
scale = 4.1858,
default = "J",
link = "कैलोरी",
},
["Cal-IT"] = {
name1 = "कैलोरी (International Steam Table)",
name2 = "कैलोरी (International Steam Table)",
symbol = "Cal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "कैलोरी",
},
["cal-IT"] = {
name1 = "कैलोरी (International Steam Table)",
name2 = "कैलोरी (International Steam Table)",
symbol = "cal<sub>IT</sub>",
utype = "energy",
scale = 4.1868,
default = "J",
link = "कैलोरी",
},
["Cal-th"] = {
name1 = "कैलोरी (thermochemical)",
name2 = "कैलोरी (thermochemical)",
symbol = "Cal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["cal-th"] = {
name1 = "कैलोरी (thermochemical)",
name2 = "कैलोरी (thermochemical)",
symbol = "cal<sub>th</sub>",
utype = "energy",
scale = 4.184,
default = "J",
link = "Calorie",
},
["CHU-IT"] = {
name1 = "Celsius heat unit (International Table)",
name2 = "Celsius heat units (International Table)",
symbol = "CHU<sub>IT</sub>",
utype = "energy",
scale = 1899.100534716,
default = "kJ",
link = "Conversion of units#Energy",
},
["cufootnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic foot of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["cuftnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic feet of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["Eh"] = {
name1 = "Hartree",
symbol = "''E''<sub>h</sub>",
utype = "energy",
scale = 4.35974417e-18,
default = "eV",
},
["erg"] = {
symbol = "erg",
utype = "energy",
scale = 0.0000001,
default = "μJ",
},
["eV"] = {
_name1 = "electronvolt",
_symbol = "eV",
utype = "energy",
scale = 1.602176634e-19,
prefixes = 1,
default = "aJ",
link = "Electronvolt",
},
["foe"] = {
symbol = "foe",
utype = "energy",
scale = 1e44,
default = "YJ",
link = "Foe (unit)",
},
["ftlb"] = {
name1 = "foot-pound",
symbol = "ft⋅lb",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlb-f"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlbf"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lbf",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftpdl"] = {
name1 = "foot-poundal",
symbol = "ft⋅pdl",
utype = "energy",
scale = 0.0421401100938048,
default = "J",
},
["gTNT"] = {
name2 = "grams of TNT",
symbol = "gram of TNT",
usename = 1,
utype = "energy",
scale = 4184,
default = "kJ",
link = "TNT equivalent",
},
["Gtoe"] = {
name1 = "gigatonne of oil equivalent",
name2 = "gigatonnes of oil equivalent",
symbol = "Gtoe",
utype = "energy",
scale = 4.1868e19,
default = "EJ",
link = "Tonne of oil equivalent",
},
["GtonTNT"] = {
name2 = "gigatons of TNT",
symbol = "gigaton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GtTNT"] = {
name2 = "gigatonnes of TNT",
symbol = "gigatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GW.h"] = {
name1 = "gigawatt-hour",
symbol = "GW⋅h",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["GWh"] = {
name1 = "gigawatt-hour",
symbol = "GWh",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["hph"] = {
name1 = "horsepower-hour",
symbol = "hp⋅h",
utype = "energy",
scale = 2684519.537696172792,
default = "kWh",
link = "Horsepower",
},
["inlb"] = {
name1 = "inch-pound",
symbol = "in⋅lb",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlb-f"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlbf"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lbf",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inoz-f"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅oz<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["inozf"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅ozf",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["J"] = {
_name1 = "joule",
_symbol = "J",
utype = "energy",
scale = 1,
prefixes = 1,
default = "cal",
link = "Joule",
},
["kBOE"] = {
name1 = "kilo barrel of oil equivalent",
name2 = "kilo barrels of oil equivalent",
symbol = "kBOE",
utype = "energy",
scale = 6.1178632e12,
default = "TJ",
link = "Barrel of oil equivalent",
},
["kcal"] = {
name1 = "kilocalorie",
symbol = "kcal",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kcal-15"] = {
name1 = "kilocalorie (15°C)",
name2 = "kilocalories (15°C)",
symbol = "kcal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "Calorie",
},
["kcal-IT"] = {
name1 = "kilocalorie (International Steam Table)",
name2 = "kilocalories (International Steam Table)",
symbol = "kcal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "Calorie",
},
["kcal-th"] = {
name1 = "kilocalorie (thermochemical)",
name2 = "kilocalories (thermochemical)",
symbol = "kcal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kerg"] = {
name1 = "kiloerg",
symbol = "kerg",
utype = "energy",
scale = 0.0001,
default = "mJ",
link = "Erg",
},
["kgTNT"] = {
name2 = "kilograms of TNT",
symbol = "kilogram of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["kt(TNT)"] = {
name1 = "kilotonne",
name1_us = "kiloton",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktoe"] = {
name1 = "kilotonne of oil equivalent",
name2 = "kilotonnes of oil equivalent",
symbol = "ktoe",
utype = "energy",
scale = 4.1868e13,
default = "TJ",
link = "Tonne of oil equivalent",
},
["ktonTNT"] = {
name1 = "kiloton of TNT",
name2 = "kilotons of TNT",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktTNT"] = {
name2 = "kilotonnes of TNT",
symbol = "kilotonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["kW.h"] = {
name1 = "kilowatt-hour",
symbol = "kW⋅h",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["kWh"] = {
name1 = "kilowatt-hour",
symbol = "kWh",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["Mcal"] = {
name1 = "megacalorie",
symbol = "Mcal",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal"] = {
name1 = "millicalorie",
symbol = "mcal",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Mcal-15"] = {
name1 = "megacalorie (15°C)",
name2 = "megacalories (15°C)",
symbol = "Mcal<sub>15</sub>",
utype = "energy",
scale = 4185800,
default = "MJ",
link = "Calorie",
},
["mcal-15"] = {
name1 = "millicalorie (15°C)",
name2 = "millicalories (15°C)",
symbol = "mcal<sub>15</sub>",
utype = "energy",
scale = 0.0041858,
default = "mJ",
link = "Calorie",
},
["Mcal-IT"] = {
name1 = "megacalorie (International Steam Table)",
name2 = "megacalories (International Steam Table)",
symbol = "Mcal<sub>IT</sub>",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Calorie",
},
["mcal-IT"] = {
name1 = "millicalorie (International Steam Table)",
name2 = "millicalories (International Steam Table)",
symbol = "mcal<sub>IT</sub>",
utype = "energy",
scale = 0.0041868,
default = "mJ",
link = "Calorie",
},
["Mcal-th"] = {
name1 = "megacalorie (thermochemical)",
name2 = "megacalories (thermochemical)",
symbol = "Mcal<sub>th</sub>",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal-th"] = {
name1 = "millicalorie (thermochemical)",
name2 = "millicalories (thermochemical)",
symbol = "mcal<sub>th</sub>",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Merg"] = {
name1 = "megaerg",
symbol = "Merg",
utype = "energy",
scale = 0.1,
default = "J",
link = "Erg",
},
["merg"] = {
name1 = "millierg",
symbol = "merg",
utype = "energy",
scale = 0.0000000001,
default = "μJ",
link = "Erg",
},
["MMBtu"] = {
name1 = "million British thermal units",
name2 = "million British thermal units",
symbol = "MMBtu",
utype = "energy",
scale = 1055055852.62,
default = "GJ",
link = "British thermal unit",
},
["Mt(TNT)"] = {
name1 = "megatonne",
name1_us = "megaton",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["Mtoe"] = {
name1 = "megatonne of oil equivalent",
name2 = "megatonnes of oil equivalent",
symbol = "Mtoe",
utype = "energy",
scale = 4.1868e16,
default = "PJ",
link = "Tonne of oil equivalent",
},
["MtonTNT"] = {
name1 = "megaton of TNT",
name2 = "megatons of TNT",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtonTNT"] = {
name2 = "millitons of TNT",
symbol = "milliton of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MtTNT"] = {
name2 = "megatonnes of TNT",
symbol = "megatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtTNT"] = {
name2 = "millitonnes of TNT",
symbol = "millitonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MW.h"] = {
name1 = "megawatt-hour",
symbol = "MW⋅h",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mW.h"] = {
name1 = "milliwatt-hour",
symbol = "mW⋅h",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["MWh"] = {
name1 = "megawatt-hour",
symbol = "MWh",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mWh"] = {
name1 = "milliwatt-hour",
symbol = "mWh",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["PSh"] = {
name1 = "Pferdestärkenstunde",
symbol = "PSh",
utype = "energy",
scale = 2647795.5,
default = "kWh",
},
["quad"] = {
name1 = "quadrillion British thermal units",
name2 = "quadrillion British thermal units",
symbol = "quad",
utype = "energy",
scale = 1.054804e18,
default = "EJ",
link = "Quad (unit)",
},
["Ry"] = {
name1 = "rydberg",
symbol = "Ry",
utype = "energy",
scale = 2.1798741e-18,
default = "eV",
link = "Rydberg constant",
},
["scf"] = {
name1 = "standard cubic foot",
name2 = "standard cubic feet",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["scfoot"] = {
name1 = "standard cubic foot",
name2 = "standard cubic foot",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["t(TNT)"] = {
name1 = "tonne",
name1_us = "ton",
symbol = "t",
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["th"] = {
name1 = "thermie",
symbol = "th",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Conversion of units#Energy",
},
["thm-EC"] = {
name1 = "therm (EC)",
name2 = "therms (EC)",
symbol = "thm (EC)",
utype = "energy",
scale = 105506000,
default = "MJ",
link = "Therm",
},
["thm-UK"] = {
name1 = "therm (UK)",
name2 = "therms (UK)",
symbol = "thm (UK)",
utype = "energy",
scale = 105505585.257348,
default = "MJ",
link = "Therm",
},
["thm-US"] = {
name1 = "therm (US)",
name1_us = "therm (U.S.)",
name2 = "therms (US)",
name2_us = "therms (U.S.)",
symbol = "thm (US)",
sym_us = "thm (U.S.)",
utype = "energy",
scale = 105480400,
default = "MJ",
link = "Therm",
},
["toe"] = {
name1 = "tonne of oil equivalent",
name2 = "tonnes of oil equivalent",
symbol = "toe",
utype = "energy",
scale = 41868000000,
default = "GJ",
},
["tonTNT"] = {
name2 = "tons of TNT",
symbol = "ton of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["tTNT"] = {
name2 = "tonnes of TNT",
symbol = "tonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["TtonTNT"] = {
name2 = "teratons of TNT",
symbol = "teraton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TtTNT"] = {
name2 = "teratonnes of TNT",
symbol = "teratonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TW.h"] = {
name1 = "terawatt-hour",
symbol = "TW⋅h",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["TWh"] = {
name1 = "terawatt-hour",
symbol = "TWh",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["W.h"] = {
name1 = "watt-hour",
symbol = "W⋅h",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["Wh"] = {
name1 = "watt-hour",
symbol = "Wh",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["μerg"] = {
name1 = "microerg",
symbol = "μerg",
utype = "energy",
scale = 1e-13,
default = "nJ",
link = "Erg",
},
["μW.h"] = {
name1 = "microwatt-hour",
symbol = "μW⋅h",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["μWh"] = {
name1 = "microwatt-hour",
symbol = "μWh",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["-kW.h"] = {
target = "kW.h",
link = "Kilowatt hour",
},
["btu"] = {
target = "BTU",
},
["Calorie"] = {
target = "Cal",
},
["ft.lbf"] = {
target = "ftlbf",
},
["ft·lbf"] = {
target = "ftlbf",
},
["g-cal-15"] = {
target = "cal-15",
},
["g-cal-IT"] = {
target = "cal-IT",
},
["g-cal-th"] = {
target = "cal-th",
},
["g-kcal-15"] = {
target = "kcal-15",
},
["g-kcal-IT"] = {
target = "kcal-IT",
},
["g-kcal-th"] = {
target = "kcal-th",
},
["g-Mcal-15"] = {
target = "Mcal-15",
},
["g-mcal-15"] = {
target = "mcal-15",
},
["g-Mcal-IT"] = {
target = "Mcal-IT",
},
["g-mcal-IT"] = {
target = "mcal-IT",
},
["g-Mcal-th"] = {
target = "Mcal-th",
},
["g-mcal-th"] = {
target = "mcal-th",
},
["GW-h"] = {
target = "GW.h",
},
["GW·h"] = {
target = "GW.h",
},
["Hartree"] = {
target = "Eh",
},
["hp.h"] = {
target = "hph",
},
["in.lb-f"] = {
target = "inlb-f",
},
["in.lbf"] = {
target = "inlbf",
},
["in.oz-f"] = {
target = "inoz-f",
},
["in.ozf"] = {
target = "inozf",
},
["kbboe"] = {
target = "kBOE",
symbol = "kbboe",
},
["kg-cal-15"] = {
target = "Cal-15",
},
["kg-cal-IT"] = {
target = "Cal-IT",
},
["kg-cal-th"] = {
target = "Cal-th",
},
["kW-h"] = {
target = "kW.h",
},
["kW·h"] = {
target = "kW.h",
},
["MW-h"] = {
target = "MW.h",
},
["mW-h"] = {
target = "mW.h",
},
["MW·h"] = {
target = "MW.h",
},
["TW-h"] = {
target = "TW.h",
},
["uerg"] = {
target = "μerg",
},
["uW-h"] = {
target = "μW.h",
},
["uW.h"] = {
target = "μW.h",
},
["uWh"] = {
target = "μWh",
},
["W-h"] = {
target = "W.h",
},
["eVpar"] = {
_name1 = "electronvolt",
_symbol = "eV",
utype = "energy per chemical amount",
scale = 96485.332123310014,
prefixes = 1,
default = "kcal/mol",
defkey = "eVpar",
linkey = "eVpar",
link = "Electronvolt",
},
["kcal/mol"] = {
per = { "kcal", "mol" },
utype = "energy per chemical amount",
default = "kJ/mol",
link = "Kilocalorie per mole",
},
["kJ/mol"] = {
per = { "kJ", "mol" },
utype = "energy per chemical amount",
default = "kcal/mol",
link = "Joule per mole",
},
["kWh/100 km"] = {
name1 = "kilowatt-hour per 100 kilometres",
name1_us = "kilowatt-hour per 100 kilometers",
name2 = "kilowatt-hours per 100 kilometres",
name2_us = "kilowatt-hours per 100 kilometers",
symbol = "kW⋅h/100 km",
utype = "energy per unit length",
scale = 36,
default = "MJ/km kWh/mi",
link = "Kilowatt-hour",
},
["kWh/100 mi"] = {
name1 = "kilowatt-hour per 100 miles",
name2 = "kilowatt-hours per 100 miles",
symbol = "kW⋅h/100 mi",
utype = "energy per unit length",
scale = 22.3694,
default = "mpge",
link = "Miles per gallon gasoline equivalent",
},
["MJ/100 km"] = {
name1 = "megajoule per 100 kilometres",
name1_us = "megajoule per 100 kilometers",
name2 = "megajoules per 100 kilometres",
name2_us = "megajoules per 100 kilometers",
symbol = "MJ/100 km",
utype = "energy per unit length",
scale = 10,
default = "BTU/mi",
link = "British thermal unit",
},
["mpge"] = {
name1 = "mile per gallon gasoline equivalent",
name2 = "miles per gallon gasoline equivalent",
symbol = "mpg‑e",
utype = "energy per unit length",
scale = 1.3263314048360777e-5,
invert = -1,
iscomplex= true,
default = "kWh/100 mi",
link = "Miles per gallon gasoline equivalent",
},
["BTU/mi"] = {
per = { "BTU", "mi" },
utype = "energy per unit length",
default = "v > 1525 ! M ! k ! J/km",
},
["kJ/km"] = {
per = { "kJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["kWh/km"] = {
per = { "-kW.h", "km" },
utype = "energy per unit length",
default = "MJ/km kWh/mi",
},
["kWh/mi"] = {
per = { "-kW.h", "mi" },
utype = "energy per unit length",
default = "kWh/km MJ/km",
},
["MJ/km"] = {
per = { "MJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["mpg-e"] = {
target = "mpge",
},
["BTU/lb"] = {
name1 = "British thermal unit per pound",
name2 = "British thermal units per pound",
symbol = "BTU/lb",
utype = "energy per unit mass",
scale = 2326,
default = "kJ/kg",
link = "British thermal unit",
},
["cal/g"] = {
name1 = "calorie per gram",
name2 = "calories per gram",
symbol = "cal/g",
utype = "energy per unit mass",
scale = 4184,
default = "J/g",
},
["GJ/kg"] = {
name1 = "gigajoule per kilogram",
name2 = "gigajoules per kilogram",
symbol = "GJ/kg",
utype = "energy per unit mass",
scale = 1e9,
default = "ktTNT/t",
link = "Specific energy",
},
["J/g"] = {
name1 = "joule per gram",
name2 = "joules per gram",
symbol = "J/g",
utype = "energy per unit mass",
scale = 1000,
default = "kcal/g",
link = "Specific energy",
},
["kcal/g"] = {
name1 = "kilocalorie per gram",
name2 = "kilocalories per gram",
symbol = "kcal/g",
utype = "energy per unit mass",
scale = 4184000,
default = "kJ/g",
},
["kJ/g"] = {
name1 = "kilojoule per gram",
name2 = "kilojoules per gram",
symbol = "kJ/g",
utype = "energy per unit mass",
scale = 1000000,
default = "kcal/g",
link = "Specific energy",
},
["kJ/kg"] = {
name1 = "kilojoule per kilogram",
name2 = "kilojoules per kilogram",
symbol = "kJ/kg",
utype = "energy per unit mass",
scale = 1000,
default = "BTU/lb",
link = "Specific energy",
},
["ktonTNT/MT"] = {
name2 = "kilotons of TNT per metric ton",
symbol = "kiloton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["ktTNT/t"] = {
name2 = "kilotonnes of TNT per tonne",
symbol = "kilotonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["MtonTNT/MT"] = {
name2 = "megatons of TNT per metric ton",
symbol = "megaton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["MtTNT/MT"] = {
name2 = "megatonnes of TNT per tonne",
symbol = "megatonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["TJ/kg"] = {
name1 = "terajoule per kilogram",
name2 = "terajoules per kilogram",
symbol = "TJ/kg",
utype = "energy per unit mass",
scale = 1e12,
default = "MtTNT/MT",
link = "Specific energy",
},
["Cal/g"] = {
per = { "Cal", "g" },
utype = "energy per unit mass",
default = "kJ/g",
},
["BTU/cuft"] = {
per = { "BTU", "cuft" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(mL)serve"] = {
per = { "Cal", "-12USoz(mL)serve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(ml)serve"] = {
per = { "Cal", "-12USoz(ml)serve" },
utype = "energy per unit volume",
default = "kJ/l",
},
["Cal/12USozserve"] = {
per = { "Cal", "-12USozserve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/USoz"] = {
per = { "Cal", "USoz" },
utype = "energy per unit volume",
default = "kJ/ml",
},
["kJ/L"] = {
per = { "kJ", "L" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/l"] = {
per = { "kJ", "ll" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/ml"] = {
per = { "kJ", "ml" },
utype = "energy per unit volume",
default = "Cal/USoz",
},
["MJ/m3"] = {
per = { "MJ", "m3" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["Sv"] = {
_name1 = "sievert",
_symbol = "Sv",
utype = "equivalent radiation dose",
scale = 1,
prefixes = 1,
default = "rem",
link = "Sievert",
},
["rem"] = {
_name1 = "rem",
_symbol = "rem",
utype = "equivalent radiation dose",
scale = 0.01,
prefixes = 1,
default = "Sv",
link = "Roentgen equivalent man",
},
["g/km"] = {
name1 = "gram per kilometre",
name1_us = "gram per kilometer",
name2 = "grams per kilometre",
name2_us = "grams per kilometer",
symbol = "g/km",
utype = "exhaust emission",
scale = 1e-6,
default = "oz/mi",
link = "Exhaust gas",
},
["g/mi"] = {
name1 = "gram per mile",
name2 = "grams per mile",
symbol = "g/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "g/km",
link = "Exhaust gas",
},
["gCO2/km"] = {
name1 = "gram of CO<sub>2</sub> per kilometre",
name1_us = "gram of CO<sub>2</sub> per kilometer",
name2 = "grams of CO<sub>2</sub> per kilometre",
name2_us = "grams of CO<sub>2</sub> per kilometer",
symbol = "g(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 1e-6,
default = "ozCO2/mi",
link = "Exhaust gas",
},
["gCO2/mi"] = {
name1 = "gram of CO<sub>2</sub> per mile",
name2 = "grams of CO<sub>2</sub> per mile",
symbol = "g(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "gCO2/km",
link = "Exhaust gas",
},
["kg/km"] = {
name1 = "kilogram per kilometre",
name1_us = "kilogram per kilometer",
name2 = "kilograms per kilometre",
name2_us = "kilograms per kilometer",
symbol = "kg/km",
utype = "exhaust emission",
scale = 0.001,
default = "lb/mi",
link = "Exhaust gas",
},
["kgCO2/km"] = {
name1 = "kilogram of CO<sub>2</sub> per kilometre",
name1_us = "kilogram of CO<sub>2</sub> per kilometer",
name2 = "kilograms of CO<sub>2</sub> per kilometre",
name2_us = "kilograms of CO<sub>2</sub> per kilometer",
symbol = "kg(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 0.001,
default = "lbCO2/mi",
link = "Exhaust gas",
},
["lb/mi"] = {
name1 = "pound per mile",
name2 = "pounds per mile",
symbol = "lb/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kg/km",
link = "Exhaust gas",
},
["lbCO2/mi"] = {
name1 = "pound of CO<sub>2</sub> per mile",
name2 = "pounds of CO<sub>2</sub> per mile",
symbol = "lb(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kgCO2/km",
link = "Exhaust gas",
},
["oz/mi"] = {
name1 = "ounce per mile",
name2 = "ounces per mile",
symbol = "oz/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "g/km",
link = "Exhaust gas",
},
["ozCO2/mi"] = {
name1 = "ounce of CO<sub>2</sub> per mile",
name2 = "ounces of CO<sub>2</sub> per mile",
symbol = "oz(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "gCO2/km",
link = "Exhaust gas",
},
["cuft/a"] = {
name1 = "cubic foot per annum",
name2 = "cubic feet per annum",
symbol = "cu ft/a",
utype = "flow",
scale = 8.9730672142368242e-10,
default = "m3/a",
link = "Cubic foot per second",
},
["cuft/d"] = {
name1 = "cubic foot per day",
name2 = "cubic feet per day",
symbol = "cu ft/d",
utype = "flow",
scale = 3.2774128000000003e-7,
default = "m3/d",
link = "Cubic foot per second",
},
["cuft/h"] = {
name1 = "cubic foot per hour",
name2 = "cubic feet per hour",
symbol = "cu ft/h",
utype = "flow",
scale = 7.8657907200000004e-6,
default = "m3/h",
link = "Cubic foot per second",
},
["cuft/min"] = {
name1 = "cubic foot per minute",
name2 = "cubic feet per minute",
symbol = "cu ft/min",
utype = "flow",
scale = 0.00047194744319999999,
default = "m3/min",
},
["cuft/s"] = {
name1 = "cubic foot per second",
name2 = "cubic feet per second",
symbol = "cu ft/s",
utype = "flow",
scale = 28316846592e-12,
default = "m3/s",
},
["cumi/a"] = {
name1 = "cubic mile per annum",
name2 = "cubic miles per annum",
symbol = "cu mi/a",
utype = "flow",
scale = 132.08171170940057,
default = "km3/a",
link = "Cubic foot per second",
},
["cuyd/h"] = {
name1 = "cubic yard per hour",
name2 = "cubic yards per hour",
symbol = "cuyd/h",
utype = "flow",
scale = 0.00021237634944000001,
default = "m3/h",
link = "Cubic foot per second",
},
["cuyd/s"] = {
name1 = "cubic yard per second",
name2 = "cubic yards per second",
symbol = "cu yd/s",
utype = "flow",
scale = 0.76455485798400002,
default = "m3/s",
},
["Goilbbl/a"] = {
name1 = "billion barrels per year",
name2 = "billion barrels per year",
symbol = "Gbbl/a",
utype = "flow",
scale = 5.0380033629933836,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3/a",
link = "Barrel per day",
},
["impgal/h"] = {
name1 = "imperial gallon per hour",
name2 = "imperial gallons per hour",
symbol = "imp gal/h",
utype = "flow",
scale = 1.2628027777777779e-6,
default = "m3/h",
link = "Gallon",
},
["impgal/min"] = {
name1 = "imperial gallon per minute",
name2 = "imperial gallons per minute",
symbol = "imp gal/min",
utype = "flow",
scale = 7.5768166666666671e-5,
default = "m3/s",
link = "Gallon",
},
["impgal/s"] = {
name1 = "imperial gallon per second",
name2 = "imperial gallons per second",
symbol = "impgal/s",
utype = "flow",
scale = 0.00454609,
default = "m3/s",
link = "Imperial gallons per second",
},
["km3/a"] = {
name1 = "cubic kilometre per annum",
name1_us = "cubic kilometer per annum",
name2 = "cubic kilometres per annum",
name2_us = "cubic kilometers per annum",
symbol = "km<sup>3</sup>/a",
utype = "flow",
scale = 31.68808781402895,
default = "cumi/a",
link = "Cubic metre per second",
},
["km3/d"] = {
name1 = "cubic kilometre per day",
name1_us = "cubic kilometer per day",
name2 = "cubic kilometres per day",
name2_us = "cubic kilometers per day",
symbol = "km<sup>3</sup>/d",
utype = "flow",
scale = 11574.074074074075,
default = "cuft/d",
link = "Cubic metre per second",
},
["koilbbl/a"] = {
name1 = "thousand barrels per year",
name2 = "thousand barrels per year",
symbol = "kbbl/a",
utype = "flow",
scale = 5.0380033629933841e-6,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/a",
link = "Barrel per day",
},
["koilbbl/d"] = {
name1 = "thousand barrels per day",
name2 = "thousand barrels per day",
symbol = "kbbl/d",
utype = "flow",
scale = 0.0018401307283333335,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/d",
link = "Barrel per day",
},
["L/h"] = {
name1 = "litre per hour",
name1_us = "liter per hour",
name2 = "litres per hour",
name2_us = "liters per hour",
symbol = "L/h",
utype = "flow",
scale = 2.7777777777777776e-7,
default = "impgal/h USgal/h",
link = "Cubic metre per second",
},
["L/min"] = {
name1 = "litre per minute",
name1_us = "liter per minute",
name2 = "litres per minute",
name2_us = "liters per minute",
symbol = "L/min",
utype = "flow",
scale = 1.6666666666666667e-5,
default = "impgal/min USgal/min",
link = "Cubic metre per second",
},
["L/s"] = {
name1 = "litre per second",
name1_us = "liter per second",
name2 = "litres per second",
name2_us = "liters per second",
symbol = "L/s",
utype = "flow",
scale = 0.001,
default = "cuft/s",
link = "Cubic metre per second",
},
["m3/a"] = {
name1 = "cubic metre per annum",
name1_us = "cubic meter per annum",
name2 = "cubic metres per annum",
name2_us = "cubic meters per annum",
symbol = "m<sup>3</sup>/a",
utype = "flow",
scale = 3.1688087814028947e-8,
default = "cuft/a",
link = "Cubic metre per second",
},
["m3/d"] = {
name1 = "cubic metre per day",
name1_us = "cubic meter per day",
name2 = "cubic metres per day",
name2_us = "cubic meters per day",
symbol = "m<sup>3</sup>/d",
utype = "flow",
scale = 1.1574074074074073e-5,
default = "cuft/d",
link = "Cubic metre per second",
},
["m3/h"] = {
name1 = "cubic metre per hour",
name1_us = "cubic meter per hour",
name2 = "cubic metres per hour",
name2_us = "cubic meters per hour",
symbol = "m<sup>3</sup>/h",
utype = "flow",
scale = 0.00027777777777777778,
default = "cuft/h",
link = "Cubic metre per second",
},
["m3/min"] = {
name1 = "cubic metre per minute",
name1_us = "cubic meter per minute",
name2 = "cubic metres per minute",
name2_us = "cubic meters per minute",
symbol = "m<sup>3</sup>/min",
utype = "flow",
scale = 0.016666666666666666,
default = "cuft/min",
link = "Cubic metre per second",
},
["m3/s"] = {
name1 = "cubic metre per second",
name1_us = "cubic meter per second",
name2 = "cubic metres per second",
name2_us = "cubic meters per second",
symbol = "m<sup>3</sup>/s",
utype = "flow",
scale = 1,
default = "cuft/s",
},
["Moilbbl/a"] = {
name1 = "million barrels per year",
name2 = "million barrels per year",
symbol = "Mbbl/a",
utype = "flow",
scale = 0.0050380033629933837,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/a",
link = "Barrel per day",
},
["Moilbbl/d"] = {
name1 = "million barrels per day",
name2 = "million barrels per day",
symbol = "Mbbl/d",
utype = "flow",
scale = 1.8401307283333335,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/d",
link = "Barrel per day",
},
["oilbbl/a"] = {
name1 = "barrel per year",
name2 = "barrels per year",
symbol = "bbl/a",
utype = "flow",
scale = 5.0380033629933841e-9,
default = "m3/a",
link = "Barrel per day",
},
["oilbbl/d"] = {
name1 = "barrel per day",
name2 = "barrels per day",
symbol = "bbl/d",
utype = "flow",
scale = 1.8401307283333336e-6,
default = "m3/d",
},
["Toilbbl/a"] = {
name1 = "trillion barrels per year",
name2 = "trillion barrels per year",
symbol = "Tbbl/a",
utype = "flow",
scale = 5038.0033629933832,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3/a",
link = "Barrel per day",
},
["U.S.gal/d"] = {
name1 = "U.S. gallon per day",
name2 = "U.S. gallons per day",
symbol = "U.S. gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
customary= 1,
},
["U.S.gal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 2,
},
["U.S.gal/min"] = {
name1 = "U.S. gallon per minute",
name2 = "U.S. gallons per minute",
symbol = "U.S. gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/a"] = {
name1 = "US gallon per year",
name2 = "US gallons per year",
symbol = "US gal/a",
utype = "flow",
scale = 1.1995246102365199e-10,
default = "m3/s",
},
["USgal/d"] = {
name1 = "US gallon per day",
name2 = "US gallons per day",
symbol = "US gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
},
["USgal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 1,
},
["USgal/min"] = {
name1 = "US gallon per minute",
name2 = "US gallons per minute",
symbol = "US gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/s"] = {
name1 = "US gallon per second",
name1_us = "U.S. gallon per second",
name2 = "US gallons per second",
name2_us = "U.S. gallons per second",
symbol = "USgal/s",
utype = "flow",
scale = 0.003785411784,
default = "m3/s",
link = "US gallons per second",
},
["ft3/a"] = {
target = "cuft/a",
},
["ft3/d"] = {
target = "cuft/d",
},
["ft3/h"] = {
target = "cuft/h",
},
["ft3/s"] = {
target = "cuft/s",
},
["Gcuft/a"] = {
target = "e9cuft/a",
},
["Gcuft/d"] = {
target = "e9cuft/d",
},
["kcuft/a"] = {
target = "e3cuft/a",
},
["kcuft/d"] = {
target = "e3cuft/d",
},
["kcuft/s"] = {
target = "e3cuft/s",
},
["Mcuft/a"] = {
target = "e6cuft/a",
},
["Mcuft/d"] = {
target = "e6cuft/d",
},
["Mcuft/s"] = {
target = "e6cuft/s",
},
["m³/s"] = {
target = "m3/s",
},
["Tcuft/a"] = {
target = "e12cuft/a",
},
["Tcuft/d"] = {
target = "e12cuft/d",
},
["u.s.gal/min"] = {
target = "U.S.gal/min",
},
["usgal/min"] = {
target = "USgal/min",
},
["-LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["-STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["dyn"] = {
name1 = "dyne",
symbol = "dyn",
utype = "force",
scale = 0.00001,
default = "gr-f",
},
["g-f"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "g<sub>f</sub>",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["gf"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "gf",
utype = "force",
scale = 0.00980665,
default = "mN ozf",
link = "Kilogram-force",
},
["gr-f"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "gr<sub>f</sub>",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["grf"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "grf",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["kdyn"] = {
name1 = "kilodyne",
symbol = "kdyn",
utype = "force",
scale = 0.01,
default = "oz-f",
link = "Dyne",
},
["kg-f"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kg<sub>f</sub>",
utype = "force",
scale = 9.80665,
default = "N lb-f",
},
["kgf"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kgf",
utype = "force",
scale = 9.80665,
default = "N lbf",
},
["kp"] = {
name1 = "kilopond",
symbol = "kp",
utype = "force",
scale = 9.80665,
default = "N lb-f",
link = "Kilogram-force",
},
["L/T-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/T<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["L/Tf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/Tf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["lb-f"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lb<sub>f</sub>",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lbf"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lbf",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lb(f)"] = {
name1 = "pound",
symbol = "lb",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["LT-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LT<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
usename = 1,
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["Mdyn"] = {
name1 = "megadyne",
symbol = "Mdyn",
utype = "force",
scale = 10,
default = "lb-f",
link = "Dyne",
},
["mdyn"] = {
name1 = "millidyne",
symbol = "mdyn",
utype = "force",
scale = 0.00000001,
default = "gr-f",
link = "Dyne",
},
["mg-f"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mg<sub>f</sub>",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["mgf"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mgf",
utype = "force",
scale = 0.00000980665,
default = "μN grf",
link = "Kilogram-force",
},
["Mp"] = {
name1 = "megapond",
symbol = "Mp",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Kilogram-force",
},
["mp"] = {
name1 = "millipond",
symbol = "mp",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["N"] = {
_name1 = "newton",
_symbol = "N",
utype = "force",
scale = 1,
prefixes = 1,
default = "lb-f",
link = "Newton (unit)",
},
["oz-f"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "oz<sub>f</sub>",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["ozf"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "ozf",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["p"] = {
name1 = "pond",
symbol = "p",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["pdl"] = {
name1 = "poundal",
symbol = "pdl",
utype = "force",
scale = 0.138254954376,
default = "N",
},
["S/T-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/T<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["S/Tf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/Tf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["ST-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "ST<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
usename = 1,
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["t-f"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "t<sub>f</sub>",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Ton-force#Tonne-force",
},
["tf"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "tf",
utype = "force",
scale = 9806.65,
default = "kN LTf STf",
link = "Ton-force#Tonne-force",
},
["dyne"] = {
target = "dyn",
},
["newtons"] = {
target = "N",
},
["poundal"] = {
target = "pdl",
},
["tonne-force"] = {
target = "tf",
},
["impgal/mi"] = {
per = { "@impgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km USgal/mi",
},
["km/L"] = {
per = { "km", "L" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["km/l"] = {
per = { "km", "ll" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["L/100 km"] = {
per = { "L", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|L/100 km]]",
},
["l/100 km"] = {
per = { "ll", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|l/100 km]]",
},
["L/km"] = {
per = { "L", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["l/km"] = {
per = { "ll", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["mi/impqt"] = {
per = { "mi", "impqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/U.S.qt"] = {
per = { "mi", "U.S.qt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/USqt"] = {
per = { "mi", "USqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/usqt"] = {
per = { "mi", "usqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mpgimp"] = {
per = { "mi", "@impgal" },
symbol = "mpg<sub>‑imp</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[Imperial units|imp]]</sub>",
},
["mpgus"] = {
per = { "mi", "+USgal" },
symbol = "mpg<sub>‑US</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgimp",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|US]]</sub>",
},
["U.S.gal/mi"] = {
per = { "*U.S.gal", "mi" },
sp_us = true,
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["usgal/mi"] = {
per = { "+USgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["L/100km"] = {
target = "L/100 km",
},
["l/100km"] = {
target = "l/100 km",
},
["mpg"] = {
shouldbe = "Use %{mpgus%} for miles per US gallon or %{mpgimp%} for miles per imperial gallon (not %{mpg%})",
},
["mpgU.S."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgu.s."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgUS"] = {
target = "mpgus",
},
["USgal/mi"] = {
target = "usgal/mi",
},
["kPa/m"] = {
per = { "kPa", "-m-frac" },
utype = "fracture gradient",
default = "psi/ft",
},
["psi/ft"] = {
per = { "psi", "-ft-frac" },
utype = "fracture gradient",
default = "kPa/m",
},
["cm/km"] = {
name1 = "centimetre per kilometre",
name1_us = "centimeter per kilometer",
name2 = "centimetres per kilometre",
name2_us = "centimeters per kilometer",
symbol = "cm/km",
utype = "gradient",
scale = 0.00001,
default = "ft/mi",
link = "Grade (slope)",
},
["ft/mi"] = {
name1 = "foot per mile",
name2 = "feet per mile",
symbol = "ft/mi",
utype = "gradient",
scale = 0.00018939393939393939,
default = "v < 5.28 ! c ! ! m/km",
link = "Grade (slope)",
},
["ft/nmi"] = {
name1 = "foot per nautical mile",
name2 = "feet per nautical mile",
symbol = "ft/nmi",
utype = "gradient",
scale = 0.00016457883369330455,
default = "v < 6.076 ! c ! ! m/km",
link = "Grade (slope)",
},
["in/ft"] = {
name1 = "inch per foot",
name2 = "inches per foot",
symbol = "in/ft",
utype = "gradient",
scale = 0.083333333333333329,
default = "mm/m",
link = "Grade (slope)",
},
["in/mi"] = {
name1 = "inch per mile",
name2 = "inches per mile",
symbol = "in/mi",
utype = "gradient",
scale = 1.5782828282828283e-5,
default = "v < 0.6336 ! m ! c ! m/km",
link = "Grade (slope)",
},
["m/km"] = {
name1 = "metre per kilometre",
name1_us = "meter per kilometer",
name2 = "metres per kilometre",
name2_us = "meters per kilometer",
symbol = "m/km",
utype = "gradient",
scale = 0.001,
default = "ft/mi",
link = "Grade (slope)",
},
["mm/km"] = {
name1 = "millimetre per kilometre",
name1_us = "millimeter per kilometer",
name2 = "millimetres per kilometre",
name2_us = "millimeters per kilometer",
symbol = "mm/km",
utype = "gradient",
scale = 0.000001,
default = "in/mi",
link = "Grade (slope)",
},
["mm/m"] = {
name1 = "millimetre per metre",
name1_us = "millimeter per meter",
name2 = "millimetres per metre",
name2_us = "millimeters per meter",
symbol = "mm/m",
utype = "gradient",
scale = 0.001,
default = "in/ft",
link = "Grade (slope)",
},
["admi"] = {
name1 = "admiralty mile",
symbol = "nmi (admiralty)",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["AU"] = {
name1 = "astronomical unit",
symbol = "AU",
utype = "length",
scale = 149597870700,
default = "km mi",
},
["Brnmi"] = {
name1 = "British nautical mile",
symbol = "(Brit) nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["bu"] = {
name2 = "bu",
symbol = "bu",
usename = 1,
utype = "length",
scale = 0.0030303030303030303,
default = "mm",
link = "Japanese units of measurement#Length",
},
["ch"] = {
name1 = "chain",
symbol = "ch",
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chlk"] = {
name1 = "[[Chain (unit)|chain]]",
symbol = "[[Chain (unit)|ch]]",
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["chain"] = {
symbol = "chain",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chainlk"] = {
symbol = "[[Chain (unit)|chain]]",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["dpcm"] = {
name2 = "dot/cm",
symbol = "dot/cm",
utype = "length",
scale = 100,
invert = -1,
iscomplex= true,
default = "dpi",
link = "Dots per inch",
},
["dpi"] = {
name2 = "DPI",
symbol = "DPI",
utype = "length",
scale = 39.370078740157481,
invert = -1,
iscomplex= true,
default = "pitch",
link = "Dots per inch",
},
["fathom"] = {
symbol = "fathom",
usename = 1,
utype = "length",
scale = 1.8288,
default = "ft m",
},
["foot"] = {
name1 = "foot",
name2 = "foot",
symbol = "ft",
utype = "length",
scale = 0.3048,
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["ft"] = {
name1 = "foot",
name2 = "feet",
symbol = "ft",
utype = "length",
scale = 0.3048,
exception= "integer_more_precision",
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["furlong"] = {
symbol = "furlong",
usename = 1,
utype = "length",
scale = 201.168,
default = "ft m",
},
["Gly"] = {
name1 = "gigalight-year",
symbol = "Gly",
utype = "length",
scale = 9.4607304725808e24,
default = "Mpc",
link = "Light-year#Definitions",
},
["Gpc"] = {
name1 = "gigaparsec",
symbol = "Gpc",
utype = "length",
scale = 3.0856775814671916e25,
default = "Gly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["hand"] = {
name1 = "hand",
symbol = "h",
utype = "length",
builtin = "hand",
scale = 0.1016,
iscomplex= true,
default = "in cm",
link = "Hand (unit)",
},
["in"] = {
name1 = "inch",
name2 = "inches",
symbol = "in",
utype = "length",
scale = 0.0254,
exception= "subunit_more_precision",
default = "mm",
},
["inabbreviated"] = {
name2 = "in",
symbol = "in",
utype = "length",
scale = 0.0254,
default = "mm",
link = "Inch",
},
["kly"] = {
name1 = "kilolight-year",
symbol = "kly",
utype = "length",
scale = 9.4607304725808e18,
default = "pc",
link = "Light-year#Definitions",
},
["kpc"] = {
name1 = "kiloparsec",
symbol = "kpc",
utype = "length",
scale = 3.0856775814671916e19,
default = "kly",
link = "Parsec#Parsecs and kiloparsecs",
},
["LD"] = {
name1 = "lunar distance",
symbol = "LD",
utype = "length",
scale = 384403000,
default = "km mi",
link = "Lunar distance (astronomy)",
},
["league"] = {
symbol = "league",
usename = 1,
utype = "length",
scale = 4828.032,
default = "km",
link = "League (unit)",
},
["ly"] = {
name1 = "light-year",
symbol = "ly",
utype = "length",
scale = 9.4607304725808e15,
default = "AU",
},
["m"] = {
_name1 = "metre",
_name1_us= "meter",
_symbol = "m",
utype = "length",
scale = 1,
prefixes = 1,
default = "v > 0 and v < 3 ! ftin ! ft",
link = "Metre",
},
["mi"] = {
name1 = "mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["ch"] = { 80, default = "km" }, ["chlk"] = { 80, default = "km" }, ["chain"] = { 80, default = "km" }, ["chainlk"] = { 80, default = "km" }, ["ft"] = { 5280, default = "km" }, ["furlong"] = { 8, default = "km" }, ["yd"] = { 1760, default = "km" } },
},
["mil"] = {
symbol = "mil",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["Mly"] = {
name1 = "megalight-year",
symbol = "Mly",
utype = "length",
scale = 9.4607304725808e21,
default = "kpc",
link = "Light-year#Definitions",
},
["Mpc"] = {
name1 = "megaparsec",
symbol = "Mpc",
utype = "length",
scale = 3.0856775814671916e22,
default = "Mly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["NM"] = {
name1 = "nautical mile",
symbol = "NM",
utype = "length",
scale = 1852,
default = "km mi",
},
["nmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1852,
default = "km mi",
},
["oldUKnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
},
["oldUSnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
},
["pc"] = {
name1 = "parsec",
symbol = "pc",
utype = "length",
scale = 3.0856775814671916e16,
default = "ly",
},
["perch"] = {
name2 = "perches",
symbol = "perch",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pitch"] = {
name2 = "μm",
symbol = "μm",
utype = "length",
scale = 1e-6,
default = "dpi",
defkey = "pitch",
linkey = "pitch",
link = "Dots per inch",
},
["pole"] = {
symbol = "pole",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pre1954U.S.nmi"] = {
name1 = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["pre1954USnmi"] = {
name1 = "(pre-1954 US) nautical mile",
name1_us = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 US) nmi",
sym_us = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["rd"] = {
name1 = "rod",
symbol = "rd",
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["royal cubit"] = {
name1 = "royal cubit",
symbol = "cu",
utype = "length",
scale = 0.524,
default = "mm",
},
["rtkm"] = {
name1 = "route kilometre",
name1_us = "route kilometer",
symbol = "km",
utype = "length",
scale = 1000,
default = "mi",
link = "Kilometre",
},
["rtmi"] = {
name1 = "route mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
link = "Mile",
},
["shaku"] = {
name2 = "shaku",
symbol = "shaku",
usename = 1,
utype = "length",
scale = 0.30303030303030304,
default = "m",
link = "Shaku (unit)",
},
["sm"] = {
name1 = "smoot",
symbol = "sm",
utype = "length",
scale = 1.70180,
default = "m",
link = "Smoot (unit)",
},
["smi"] = {
name1 = "statute mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["chain"] = { 80, default = "km" } },
},
["solar radius"] = {
name1 = "solar radius",
name2 = "solar radii",
symbol = "''R''<sub>☉</sub>",
utype = "length",
scale = 695700e3,
default = "km",
},
["sun"] = {
name2 = "sun",
symbol = "sun",
usename = 1,
utype = "length",
scale = 0.030303030303030304,
default = "mm",
link = "Japanese units of measurement#Length",
},
["thou"] = {
name2 = "thou",
symbol = "thou",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["verst"] = {
symbol = "verst",
usename = 1,
utype = "length",
scale = 1066.8,
default = "km mi",
},
["yd"] = {
name1 = "yard",
symbol = "yd",
utype = "length",
scale = 0.9144,
default = "m",
subdivs = { ["ft"] = { 3, default = "m" } },
},
["μin"] = {
name1 = "microinch",
name2 = "microinches",
symbol = "μin",
utype = "length",
scale = 0.0000000254,
default = "nm",
link = "SI prefix#Non-metric units",
},
["Å"] = {
name1 = "ångström",
symbol = "Å",
utype = "length",
scale = 0.0000000001,
default = "in",
},
["Hz"] = {
_name1 = "hertz",
_name2 = "hertz",
_symbol = "Hz",
utype = "length",
scale = 3.3356409519815204e-9,
invert = -1,
iscomplex= true,
prefixes = 1,
default = "m",
link = "Hertz",
},
["rpm"] = {
name1 = "revolution per minute",
name2 = "revolutions per minute",
symbol = "rpm",
utype = "length",
scale = 5.5594015866358675e-11,
invert = -1,
iscomplex= true,
default = "Hz",
link = "Revolutions per minute",
},
["-ft-frac"] = {
target = "ft",
link = "Fracture gradient",
},
["-in-stiff"] = {
target = "in",
link = "Stiffness",
},
["-m-frac"] = {
target = "m",
link = "Fracture gradient",
},
["-m-stiff"] = {
target = "m",
link = "Stiffness",
},
["100km"] = {
target = "km",
multiplier= 100,
},
["100mi"] = {
target = "mi",
multiplier= 100,
},
["100miles"] = {
target = "mi",
symbol = "miles",
multiplier= 100,
},
["admiralty nmi"] = {
target = "oldUKnmi",
},
["angstrom"] = {
target = "Å",
},
["au"] = {
target = "AU",
symbol = "au",
},
["feet"] = {
target = "ft",
},
["hands"] = {
target = "hand",
},
["inch"] = {
target = "in",
},
["inches"] = {
target = "in",
},
["light-year"] = {
target = "ly",
},
["meter"] = {
target = "m",
sp_us = true,
},
["meters"] = {
target = "m",
sp_us = true,
},
["metre"] = {
target = "m",
},
["metres"] = {
target = "m",
},
["micrometre"] = {
target = "μm",
},
["micron"] = {
target = "μm",
default = "μin",
},
["mile"] = {
target = "mi",
usename = 1,
},
["miles"] = {
target = "mi",
usename = 1,
},
["parsec"] = {
target = "pc",
},
["rod"] = {
target = "rd",
},
["smoot"] = {
target = "sm",
},
["uin"] = {
target = "μin",
},
["yard"] = {
target = "yd",
},
["yards"] = {
target = "yd",
},
["yds"] = {
target = "yd",
},
["dtex"] = {
name1 = "decitex",
name2 = "decitex",
symbol = "dtex",
utype = "linear density",
scale = 1e-7,
default = "lb/yd",
link = "Units of textile measurement#Units",
},
["kg/cm"] = {
name1 = "kilogram per centimetre",
name1_us = "kilogram per centimeter",
name2 = "kilograms per centimetre",
name2_us = "kilograms per centimeter",
symbol = "kg/cm",
utype = "linear density",
scale = 100,
default = "lb/yd",
link = "Linear density",
},
["kg/m"] = {
name1 = "kilogram per metre",
name1_us = "kilogram per meter",
name2 = "kilograms per metre",
name2_us = "kilograms per meter",
symbol = "kg/m",
utype = "linear density",
scale = 1,
default = "lb/yd",
link = "Linear density",
},
["lb/ft"] = {
name1 = "pound per foot",
name2 = "pounds per foot",
symbol = "lb/ft",
utype = "linear density",
scale = 1.4881639435695539,
default = "kg/m",
link = "Linear density",
},
["lb/yd"] = {
name1 = "pound per yard",
name2 = "pounds per yard",
symbol = "lb/yd",
utype = "linear density",
scale = 0.49605464785651798,
default = "kg/m",
link = "Linear density",
},
["G"] = {
_name1 = "gauss",
_name2 = "gauss",
_symbol = "G",
utype = "magnetic field strength",
scale = 0.0001,
prefixes = 1,
default = "T",
link = "Gauss (unit)",
},
["T"] = {
_name1 = "tesla",
_symbol = "T",
utype = "magnetic field strength",
scale = 1,
prefixes = 1,
default = "G",
link = "Tesla (unit)",
},
["A/m"] = {
name1 = "ampere per metre",
name1_us = "ampere per meter",
name2 = "amperes per metre",
name2_us = "amperes per meter",
symbol = "A/m",
utype = "magnetizing field",
scale = 1,
default = "Oe",
},
["kA/m"] = {
name1 = "kiloampere per metre",
name1_us = "kiloampere per meter",
name2 = "kiloamperes per metre",
name2_us = "kiloamperes per meter",
symbol = "kA/m",
utype = "magnetizing field",
scale = 1000,
default = "kOe",
link = "Ampere per metre",
},
["MA/m"] = {
name1 = "megaampere per metre",
name1_us = "megaampere per meter",
name2 = "megaamperes per metre",
name2_us = "megaamperes per meter",
symbol = "MA/m",
utype = "magnetizing field",
scale = 1e6,
default = "kOe",
link = "Ampere per metre",
},
["Oe"] = {
_name1 = "oersted",
_symbol = "Oe",
utype = "magnetizing field",
scale = 79.5774715,
prefixes = 1,
default = "kA/m",
link = "Oersted",
},
["-Lcwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 50.80234544,
default = "lb",
},
["-Scwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 45.359237,
default = "lb",
},
["-ST"] = {
name1 = "short ton",
symbol = "ST",
utype = "mass",
scale = 907.18474,
default = "t",
},
["carat"] = {
symbol = "carat",
usename = 1,
utype = "mass",
scale = 0.0002,
default = "g",
link = "Carat (mass)",
},
["Da"] = {
_name1 = "dalton",
_symbol = "Da",
utype = "mass",
scale = 1.66053906892e-27,
prefixes = 1,
default = "kg",
link = "Dalton (unit)",
},
["drachm"] = {
name1_us = "dram",
symbol = "drachm",
usename = 1,
utype = "mass",
scale = 0.001771845195,
default = "g",
link = "Dram (unit)",
},
["dram"] = {
target = "drachm",
},
["dwt"] = {
name1 = "pennyweight",
symbol = "dwt",
utype = "mass",
scale = 0.00155517384,
default = "oz g",
},
["DWton"] = {
symbol = "deadweight ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "DWtonne",
link = "Deadweight tonnage",
},
["DWtonne"] = {
name1_us = "deadweight metric ton",
symbol = "deadweight tonne",
sym_us = "~deadweight metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "DWton",
link = "Deadweight tonnage",
},
["g"] = {
_name1 = "gram",
_symbol = "g",
utype = "mass",
scale = 0.001,
prefixes = 1,
default = "oz",
link = "Gram",
},
["gr"] = {
name1 = "grain",
symbol = "gr",
utype = "mass",
scale = 0.00006479891,
default = "g",
link = "Grain (unit)",
},
["Gt"] = {
name1 = "gigatonne",
symbol = "Gt",
utype = "mass",
scale = 1000000000000,
default = "LT ST",
link = "Tonne",
},
["impgalh2o"] = {
name1 = "imperial gallon of water",
name2 = "imperial gallons of water",
symbol = "imp gal H<sub>2</sub>O",
utype = "mass",
scale = 4.5359236999999499,
default = "lb kg",
link = "Imperial gallon",
},
["kt"] = {
name1 = "kilotonne",
symbol = "kt",
utype = "mass",
scale = 1000000,
default = "LT ST",
link = "Tonne",
},
["lb"] = {
name1 = "pound",
symbol = "lb",
utype = "mass",
scale = 0.45359237,
exception= "integer_more_precision",
default = "kg",
subdivs = { ["oz"] = { 16, default = "kg" } },
link = "Pound (mass)",
},
["Lcwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "Lcwt",
usename = 1,
utype = "mass",
scale = 50.80234544,
default = "lb",
subdivs = { ["qtr"] = { 4, default = "kg" }, ["st"] = { 8, default = "kg" } },
link = "Hundredweight",
},
["long cwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "long cwt",
utype = "mass",
scale = 50.80234544,
default = "lb kg",
subdivs = { ["qtr"] = { 4, default = "kg" } },
link = "Hundredweight",
},
["long qtr"] = {
name1 = "long quarter",
symbol = "long qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
},
["LT"] = {
symbol = "long ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["lt"] = {
name1 = "long ton",
symbol = "LT",
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["metric ton"] = {
symbol = "metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "long ton",
link = "Tonne",
},
["MT"] = {
name1 = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
link = "Tonne",
},
["Mt"] = {
name1 = "megatonne",
symbol = "Mt",
utype = "mass",
scale = 1000000000,
default = "LT ST",
link = "Tonne",
},
["oz"] = {
name1 = "ounce",
symbol = "oz",
utype = "mass",
scale = 0.028349523125,
default = "g",
},
["ozt"] = {
name1 = "troy ounce",
symbol = "ozt",
utype = "mass",
scale = 0.0311034768,
default = "oz g",
},
["pdr"] = {
name1 = "pounder",
symbol = "pdr",
utype = "mass",
scale = 0.45359237,
default = "kg",
link = "Pound (mass)",
},
["qtr"] = {
name1 = "quarter",
symbol = "qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
subdivs = { ["lb"] = { 28, default = "kg" } },
link = "Long quarter",
},
["Scwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "Scwt",
usename = 1,
utype = "mass",
scale = 45.359237,
default = "lb",
link = "Hundredweight",
},
["short cwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "short cwt",
utype = "mass",
scale = 45.359237,
default = "lb kg",
link = "Hundredweight",
},
["short qtr"] = {
name1 = "short quarter",
symbol = "short qtr",
utype = "mass",
scale = 11.33980925,
default = "lb kg",
},
["ST"] = {
symbol = "short ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
subdivs = { ["Scwt"] = { 20, default = "t", unit = "-Scwt" } },
},
["shtn"] = {
name1 = "short ton",
symbol = "sh tn",
utype = "mass",
scale = 907.18474,
default = "t",
},
["shton"] = {
symbol = "ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
},
["solar mass"] = {
name1 = "solar mass",
name2 = "solar masses",
symbol = "''M''<sub>☉</sub>",
utype = "mass",
scale = 1.98855e30,
default = "kg",
},
["st"] = {
name1 = "stone",
name2 = "stone",
symbol = "st",
utype = "mass",
scale = 6.35029318,
default = "lb kg",
subdivs = { ["lb"] = { 14, default = "kg lb" } },
link = "Stone (unit)",
},
["t"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
},
["tonne"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "shton",
},
["troy pound"] = {
symbol = "troy pound",
usename = 1,
utype = "mass",
scale = 0.3732417216,
default = "lb kg",
link = "Troy weight",
},
["usgalh2o"] = {
name1 = "US gallon of water",
name1_us = "U.S. gallon of water",
name2 = "US gallons of water",
name2_us = "U.S. gallons of water",
symbol = "US gal H<sub>2</sub>O",
utype = "mass",
scale = 3.7776215836051126,
default = "lb kg",
link = "United States customary units#Fluid volume",
},
["viss"] = {
name2 = "viss",
symbol = "viss",
utype = "mass",
scale = 1.632932532,
default = "kg",
link = "Myanmar units of measurement#Mass",
},
["billion tonne"] = {
target = "e9t",
},
["grain"] = {
target = "gr",
},
["kilogram"] = {
target = "kg",
},
["kilotonne"] = {
target = "kt",
},
["lbs"] = {
target = "lb",
},
["lbt"] = {
target = "troy pound",
},
["lcwt"] = {
target = "Lcwt",
},
["long ton"] = {
target = "LT",
},
["mcg"] = {
target = "μg",
},
["million tonne"] = {
target = "e6t",
},
["scwt"] = {
target = "Scwt",
},
["short ton"] = {
target = "ST",
},
["stone"] = {
target = "st",
},
["thousand tonne"] = {
target = "e3t",
},
["tonnes"] = {
target = "t",
},
["kg/kW"] = {
name1 = "kilogram per kilowatt",
name2 = "kilograms per kilowatt",
symbol = "kg/kW",
utype = "mass per unit power",
scale = 0.001,
default = "lb/hp",
link = "Kilowatt",
},
["lb/hp"] = {
name1 = "pound per horsepower",
name2 = "pounds per horsepower",
symbol = "lb/hp",
utype = "mass per unit power",
scale = 0.00060827738784176115,
default = "kg/kW",
link = "Horsepower",
},
["kg/h"] = {
per = { "kg", "h" },
utype = "mass per unit time",
default = "lb/h",
},
["lb/h"] = {
per = { "lb", "h" },
utype = "mass per unit time",
default = "kg/h",
},
["g-mol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "g‑mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["g-mol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "g‑mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["g-mol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "g‑mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "g-mol/s",
link = "Mole (unit)",
},
["g-mol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "g‑mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["gmol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "gmol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["gmol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "gmol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["gmol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "gmol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "gmol/s",
link = "Mole (unit)",
},
["gmol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "gmol/s",
utype = "molar rate",
scale = 1,
default = "lbmol/min",
link = "Mole (unit)",
},
["kmol/d"] = {
name1 = "kilomole per day",
name2 = "kilomoles per day",
symbol = "kmol/d",
utype = "molar rate",
scale = 0.011574074074074073,
default = "mmol/s",
link = "Mole (unit)",
},
["kmol/h"] = {
name1 = "kilomole per hour",
name2 = "kilomoles per hour",
symbol = "kmol/h",
utype = "molar rate",
scale = 0.27777777777777779,
default = "mol/s",
link = "Mole (unit)",
},
["kmol/min"] = {
name1 = "kilomole per minute",
name2 = "kilomoles per minute",
symbol = "kmol/min",
utype = "molar rate",
scale = 16.666666666666668,
default = "mol/s",
link = "Kilomole (unit)",
},
["kmol/s"] = {
name1 = "kilomole per second",
name2 = "kilomoles per second",
symbol = "kmol/s",
utype = "molar rate",
scale = 1000,
default = "lb-mol/s",
link = "Mole (unit)",
},
["lb-mol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lb‑mol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lb-mol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lb‑mol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lb‑mol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lb‑mol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["lbmol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lbmol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lbmol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lbmol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lbmol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lbmol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["mmol/s"] = {
name1 = "millimole per second",
name2 = "millimoles per second",
symbol = "mmol/s",
utype = "molar rate",
scale = 0.001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["mol/d"] = {
name1 = "mole per day",
name2 = "moles per day",
symbol = "mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["mol/h"] = {
name1 = "mole per hour",
name2 = "moles per hour",
symbol = "mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["mol/min"] = {
name1 = "mole per minute",
name2 = "moles per minute",
symbol = "mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "mol/s",
link = "Mole (unit)",
},
["mol/s"] = {
name1 = "mole per second",
name2 = "moles per second",
symbol = "mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["μmol/s"] = {
name1 = "micromole per second",
name2 = "micromoles per second",
symbol = "μmol/s",
utype = "molar rate",
scale = 0.000001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["umol/s"] = {
target = "μmol/s",
},
["/acre"] = {
name1 = "per acre",
name2 = "per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "/ha",
link = "Acre",
},
["/ha"] = {
name1 = "per hectare",
name2 = "per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "/acre",
link = "Hectare",
},
["/sqcm"] = {
name1 = "per square centimetre",
name1_us = "per square centimeter",
name2 = "per square centimetre",
name2_us = "per square centimeter",
symbol = "/cm<sup>2</sup>",
utype = "per unit area",
scale = 1e4,
default = "/sqin",
link = "Square centimetre",
},
["/sqin"] = {
name1 = "per square inch",
name2 = "per square inch",
symbol = "/in<sup>2</sup>",
utype = "per unit area",
scale = 1550.0031000062002,
default = "/sqcm",
link = "Square inch",
},
["/sqkm"] = {
name1 = "per square kilometre",
name1_us = "per square kilometer",
name2 = "per square kilometre",
name2_us = "per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "/sqmi",
link = "Square kilometre",
},
["/sqmi"] = {
name1 = "per square mile",
name2 = "per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "/sqkm",
link = "Square mile",
},
["PD/acre"] = {
name1 = "inhabitant per acre",
name2 = "inhabitants per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "PD/ha",
link = "Acre",
},
["PD/ha"] = {
name1 = "inhabitant per hectare",
name2 = "inhabitants per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "PD/acre",
link = "Hectare",
},
["PD/sqkm"] = {
name1 = "inhabitant per square kilometre",
name1_us = "inhabitant per square kilometer",
name2 = "inhabitants per square kilometre",
name2_us = "inhabitants per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "PD/sqmi",
link = "Square kilometre",
},
["PD/sqmi"] = {
name1 = "inhabitant per square mile",
name2 = "inhabitants per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "PD/sqkm",
link = "Square mile",
},
["/cm2"] = {
target = "/sqcm",
},
["/in2"] = {
target = "/sqin",
},
["/km2"] = {
target = "/sqkm",
},
["pd/acre"] = {
target = "PD/acre",
},
["pd/ha"] = {
target = "PD/ha",
},
["PD/km2"] = {
target = "PD/sqkm",
},
["pd/km2"] = {
target = "PD/sqkm",
},
["PD/km²"] = {
target = "PD/sqkm",
},
["pd/sqkm"] = {
target = "PD/sqkm",
},
["pd/sqmi"] = {
target = "PD/sqmi",
},
["/l"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/l",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/L"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/L",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/USgal"] = {
name1 = "per gallon",
name2 = "per gallon",
symbol = "/gal",
utype = "per unit volume",
scale = 264.172052,
default = "/L",
link = "US gallon",
customary= 2,
},
["/usgal"] = {
target = "/USgal",
},
["bhp"] = {
name1 = "brake horsepower",
name2 = "brake horsepower",
symbol = "bhp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Brake horsepower",
},
["Cal/d"] = {
name1 = "large calorie per day",
name2 = "large calories per day",
symbol = "Cal/d",
utype = "power",
scale = 0.048425925925925928,
default = "kJ/d",
link = "Calorie",
},
["Cal/h"] = {
name1 = "large calorie per hour",
name2 = "large calories per hour",
symbol = "Cal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kJ/h",
link = "Calorie",
},
["cal/h"] = {
name1 = "calorie per hour",
name2 = "calories per hour",
symbol = "cal/h",
utype = "power",
scale = 0.0011622222222222223,
default = "W",
link = "Calorie",
},
["CV"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "CV",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hk"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hk",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hp"] = {
name1 = "horsepower",
name2 = "horsepower",
symbol = "hp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
},
["hp-electric"] = {
name1 = "electric horsepower",
name2 = "electric horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-electrical"] = {
name1 = "electrical horsepower",
name2 = "electrical horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-metric"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hp",
utype = "power",
scale = 735.49875,
default = "kW",
},
["ihp"] = {
name1 = "indicated horsepower",
name2 = "indicated horsepower",
symbol = "ihp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Indicated horsepower",
},
["kcal/h"] = {
name1 = "kilocalorie per hour",
name2 = "kilocalories per hour",
symbol = "kcal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kW",
link = "Calorie",
},
["kJ/d"] = {
name1 = "kilojoule per day",
name2 = "kilojoules per day",
symbol = "kJ/d",
utype = "power",
scale = 0.011574074074074073,
default = "Cal/d",
link = "Kilojoule",
},
["kJ/h"] = {
name1 = "kilojoule per hour",
name2 = "kilojoules per hour",
symbol = "kJ/h",
utype = "power",
scale = 0.27777777777777779,
default = "W",
link = "Kilojoule",
},
["PS"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "PS",
utype = "power",
scale = 735.49875,
default = "kW",
},
["shp"] = {
name1 = "shaft horsepower",
name2 = "shaft horsepower",
symbol = "shp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Shaft horsepower",
},
["W"] = {
_name1 = "watt",
_symbol = "W",
utype = "power",
scale = 1,
prefixes = 1,
default = "hp",
link = "Watt",
},
["BTU/h"] = {
per = { "BTU", "h" },
utype = "power",
default = "W",
},
["Btu/h"] = {
per = { "Btu", "h" },
utype = "power",
default = "W",
},
["BHP"] = {
target = "bhp",
},
["btu/h"] = {
target = "BTU/h",
},
["HP"] = {
target = "hp",
},
["Hp"] = {
target = "hp",
},
["hp-mechanical"] = {
target = "hp",
},
["IHP"] = {
target = "ihp",
},
["SHP"] = {
target = "shp",
},
["whp"] = {
target = "hp",
},
["hp/lb"] = {
name1 = "horsepower per pound",
name2 = "horsepower per pound",
symbol = "hp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/LT"] = {
name1 = "horsepower per long ton",
name2 = "horsepower per long ton",
symbol = "hp/LT",
utype = "power per unit mass",
scale = 0.73392268125000004,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/ST"] = {
name1 = "horsepower per short ton",
name2 = "horsepower per short ton",
symbol = "hp/ST",
utype = "power per unit mass",
scale = 0.821993403,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/t"] = {
name1 = "horsepower per tonne",
name2 = "horsepower per tonne",
symbol = "hp/t",
utype = "power per unit mass",
scale = 0.74569987158227022,
default = "kW/t",
link = "Power-to-weight ratio",
},
["kW/kg"] = {
name1 = "kilowatt per kilogram",
name2 = "kilowatts per kilogram",
symbol = "kW/kg",
utype = "power per unit mass",
scale = 1000,
default = "hp/lb",
link = "Power-to-weight ratio",
},
["kW/t"] = {
name1 = "kilowatt per tonne",
name2 = "kilowatts per tonne",
symbol = "kW/t",
utype = "power per unit mass",
scale = 1,
default = "PS/t",
link = "Power-to-weight ratio",
},
["PS/t"] = {
name1 = "metric horsepower per tonne",
name2 = "metric horsepower per tonne",
symbol = "PS/t",
utype = "power per unit mass",
scale = 0.73549875,
default = "kW/t",
link = "Power-to-weight ratio",
},
["shp/lb"] = {
name1 = "shaft horsepower per pound",
name2 = "shaft horsepower per pound",
symbol = "shp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/tonne"] = {
target = "hp/t",
symbol = "hp/tonne",
default = "kW/tonne",
},
["kW/tonne"] = {
target = "kW/t",
symbol = "kW/tonne",
},
["-lb/in2"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "lb/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["atm"] = {
name1 = "standard atmosphere",
symbol = "atm",
utype = "pressure",
scale = 101325,
default = "kPa",
link = "Atmosphere (unit)",
},
["Ba"] = {
name1 = "barye",
symbol = "Ba",
utype = "pressure",
scale = 0.1,
default = "Pa",
},
["bar"] = {
symbol = "bar",
utype = "pressure",
scale = 100000,
default = "kPa",
link = "Bar (unit)",
},
["dbar"] = {
name1 = "decibar",
symbol = "dbar",
utype = "pressure",
scale = 10000,
default = "kPa",
link = "Bar (unit)",
},
["inHg"] = {
name1 = "inch of mercury",
name2 = "inches of mercury",
symbol = "inHg",
utype = "pressure",
scale = 3386.388640341,
default = "kPa",
},
["kBa"] = {
name1 = "kilobarye",
symbol = "kBa",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Barye",
},
["kg-f/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kg<sub>f</sub>/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kg/cm2"] = {
name1 = "kilogram per square centimetre",
name1_us = "kilogram per square centimeter",
name2 = "kilograms per square centimetre",
name2_us = "kilograms per square centimeter",
symbol = "kg/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kgf/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kgf/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["ksi"] = {
name1 = "kilopound per square inch",
name2 = "kilopounds per square inch",
symbol = "ksi",
utype = "pressure",
scale = 6894757.2931683613,
default = "MPa",
link = "Pound per square inch",
},
["lbf/in2"] = {
name1 = "pound-force per square inch",
name2 = "pounds-force per square inch",
symbol = "lbf/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["mb"] = {
name1 = "millibar",
symbol = "mb",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mbar"] = {
name1 = "millibar",
symbol = "mbar",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mmHg"] = {
name1 = "millimetre of mercury",
name1_us = "millimeter of mercury",
name2 = "millimetres of mercury",
name2_us = "millimeters of mercury",
symbol = "mmHg",
utype = "pressure",
scale = 133.322387415,
default = "kPa",
},
["Pa"] = {
_name1 = "pascal",
_symbol = "Pa",
utype = "pressure",
scale = 1,
prefixes = 1,
default = "psi",
link = "Pascal (unit)",
},
["psf"] = {
name1 = "pound per square foot",
name2 = "pounds per square foot",
symbol = "psf",
utype = "pressure",
scale = 47.880258980335839,
default = "kPa",
link = "Pound per square inch",
},
["psi"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "psi",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa",
},
["Torr"] = {
name1 = "torr",
symbol = "Torr",
utype = "pressure",
scale = 133.32236842105263,
default = "kPa",
},
["N/cm2"] = {
per = { "N", "cm2" },
utype = "pressure",
default = "psi",
},
["N/m2"] = {
per = { "N", "m2" },
utype = "pressure",
default = "psi",
},
["g/cm2"] = {
per = { "g", "cm2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["g/m2"] = {
per = { "g", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["kg/ha"] = {
per = { "kg", "ha" },
utype = "pressure",
default = "lb/acre",
multiplier= 9.80665,
},
["kg/m2"] = {
per = { "kg", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["lb/1000sqft"] = {
per = { "lb", "1000sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["lb/acre"] = {
per = { "lb", "acre" },
utype = "pressure",
default = "kg/ha",
multiplier= 9.80665,
},
["lb/sqft"] = {
per = { "lb", "sqft" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["lb/sqyd"] = {
per = { "lb", "sqyd" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["LT/acre"] = {
per = { "LT", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["MT/ha"] = {
per = { "MT", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["oz/sqft"] = {
per = { "oz", "sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["oz/sqyd"] = {
per = { "oz", "sqyd" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["ST/acre"] = {
per = { "ST", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["t/ha"] = {
per = { "t", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["tonne/acre"] = {
per = { "tonne", "acre" },
utype = "pressure",
default = "tonne/ha",
multiplier= 9.80665,
},
["tonne/ha"] = {
per = { "tonne", "ha" },
utype = "pressure",
default = "tonne/acre",
multiplier= 9.80665,
},
["kgfpsqcm"] = {
target = "kgf/cm2",
},
["kgpsqcm"] = {
target = "kg/cm2",
},
["kN/m2"] = {
target = "kPa",
},
["lb/in2"] = {
target = "lbf/in2",
},
["torr"] = {
target = "Torr",
},
["Bq"] = {
_name1 = "becquerel",
_symbol = "Bq",
utype = "radioactivity",
scale = 1,
prefixes = 1,
default = "pCi",
link = "Becquerel",
},
["Ci"] = {
_name1 = "curie",
_symbol = "Ci",
utype = "radioactivity",
scale = 3.7e10,
prefixes = 1,
default = "GBq",
link = "Curie (unit)",
},
["Rd"] = {
_name1 = "rutherford",
_symbol = "Rd",
utype = "radioactivity",
scale = 1e6,
prefixes = 1,
default = "MBq",
link = "Rutherford (unit)",
},
["cm/h"] = {
name1 = "centimetre per hour",
name1_us = "centimeter per hour",
name2 = "centimetres per hour",
name2_us = "centimeters per hour",
symbol = "cm/h",
utype = "speed",
scale = 2.7777777777777775e-6,
default = "in/h",
link = "Metre per second",
},
["cm/s"] = {
name1 = "centimetre per second",
name1_us = "centimeter per second",
name2 = "centimetres per second",
name2_us = "centimeters per second",
symbol = "cm/s",
utype = "speed",
scale = 0.01,
default = "in/s",
link = "Metre per second",
},
["cm/year"] = {
name1 = "centimetre per year",
name1_us = "centimeter per year",
name2 = "centimetres per year",
name2_us = "centimeters per year",
symbol = "cm/year",
utype = "speed",
scale = 3.168873850681143e-10,
default = "in/year",
link = "Orders of magnitude (speed)",
},
["foot/s"] = {
name1 = "foot per second",
name2 = "foot per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
},
["ft/min"] = {
name1 = "foot per minute",
name2 = "feet per minute",
symbol = "ft/min",
utype = "speed",
scale = 0.00508,
default = "m/min",
link = "Feet per second",
},
["ft/s"] = {
name1 = "foot per second",
name2 = "feet per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
link = "Feet per second",
},
["furlong per fortnight"] = {
name2 = "furlongs per fortnight",
symbol = "furlong per fortnight",
usename = 1,
utype = "speed",
scale = 0.00016630952380952381,
default = "km/h mph",
link = "FFF system",
},
["in/h"] = {
name1 = "inch per hour",
name2 = "inches per hour",
symbol = "in/h",
utype = "speed",
scale = 7.0555555555555559e-6,
default = "cm/h",
link = "Inch",
},
["in/s"] = {
name1 = "inch per second",
name2 = "inches per second",
symbol = "in/s",
utype = "speed",
scale = 0.0254,
default = "cm/s",
link = "Inch",
},
["in/year"] = {
name1 = "inch per year",
name2 = "inches per year",
symbol = "in/year",
utype = "speed",
scale = 8.0489395807301024e-10,
default = "cm/year",
link = "Orders of magnitude (speed)",
},
["isp"] = {
name1 = "second",
symbol = "s",
utype = "speed",
scale = 9.80665,
default = "km/s",
link = "Specific impulse",
},
["km/d"] = {
name1 = "kilometre per day",
name1_us = "kilometer per day",
name2 = "kilometres per day",
name2_us = "kilometers per day",
symbol = "km/d",
utype = "speed",
scale = 1.1574074074074074e-2,
default = "mi/d",
link = "Orders of magnitude (speed)",
},
["km/h"] = {
name1 = "kilometre per hour",
name1_us = "kilometer per hour",
name2 = "kilometres per hour",
name2_us = "kilometers per hour",
symbol = "km/h",
utype = "speed",
scale = 0.27777777777777779,
default = "mph",
link = "Kilometres per hour",
},
["km/s"] = {
name1 = "kilometre per second",
name1_us = "kilometer per second",
name2 = "kilometres per second",
name2_us = "kilometers per second",
symbol = "km/s",
utype = "speed",
scale = 1000,
default = "mi/s",
link = "Metre per second",
},
["kn"] = {
name1 = "knot",
symbol = "kn",
utype = "speed",
scale = 0.51444444444444448,
default = "km/h mph",
link = "Knot (unit)",
},
["kNs/kg"] = {
name2 = "kN‑s/kg",
symbol = "kN‑s/kg",
utype = "speed",
scale = 1000,
default = "isp",
link = "Specific impulse",
},
["m/min"] = {
name1 = "metre per minute",
name1_us = "meter per minute",
name2 = "metres per minute",
name2_us = "meters per minute",
symbol = "m/min",
utype = "speed",
scale = 0.016666666666666666,
default = "ft/min",
link = "Metre per second",
},
["m/s"] = {
name1 = "metre per second",
name1_us = "meter per second",
name2 = "metres per second",
name2_us = "meters per second",
symbol = "m/s",
utype = "speed",
scale = 1,
default = "ft/s",
},
["Mach"] = {
name2 = "Mach",
symbol = "Mach",
utype = "speed",
builtin = "mach",
scale = 0,
iscomplex= true,
default = "km/h mph",
link = "Mach number",
},
["mi/d"] = {
name1 = "mile per day",
name2 = "miles per day",
symbol = "mi/d",
utype = "speed",
scale = 1.8626666666666667e-2,
default = "km/d",
link = "Orders of magnitude (speed)",
},
["mi/s"] = {
name1 = "mile per second",
name2 = "miles per second",
symbol = "mi/s",
utype = "speed",
scale = 1609.344,
default = "km/s",
link = "Mile",
},
["mm/h"] = {
name1 = "millimetre per hour",
name1_us = "millimeter per hour",
name2 = "millimetres per hour",
name2_us = "millimeters per hour",
symbol = "mm/h",
utype = "speed",
scale = 2.7777777777777781e-7,
default = "in/h",
link = "Metre per second",
},
["mph"] = {
name1 = "mile per hour",
name2 = "miles per hour",
symbol = "mph",
utype = "speed",
scale = 0.44704,
default = "km/h",
link = "Miles per hour",
},
["Ns/kg"] = {
name2 = "N‑s/kg",
symbol = "N‑s/kg",
utype = "speed",
scale = 1,
default = "isp",
link = "Specific impulse",
},
["si tsfc"] = {
name2 = "g/(kN⋅s)",
symbol = "g/(kN⋅s)",
utype = "speed",
scale = 9.9999628621379242e-7,
invert = -1,
iscomplex= true,
default = "tsfc",
link = "Thrust specific fuel consumption",
},
["tsfc"] = {
name2 = "lb/(lbf⋅h)",
symbol = "lb/(lbf⋅h)",
utype = "speed",
scale = 2.832545036049801e-5,
invert = -1,
iscomplex= true,
default = "si tsfc",
link = "Thrust specific fuel consumption",
},
["cm/y"] = {
target = "cm/year",
},
["cm/yr"] = {
target = "cm/year",
},
["in/y"] = {
target = "in/year",
},
["in/yr"] = {
target = "in/year",
},
["knot"] = {
target = "kn",
},
["knots"] = {
target = "kn",
},
["kph"] = {
target = "km/h",
},
["mi/h"] = {
target = "mph",
},
["mm/s"] = {
per = { "mm", "s" },
utype = "speed",
default = "in/s",
link = "Metre per second",
},
["C"] = {
name1 = "degree Celsius",
name2 = "degrees Celsius",
symbol = "°C",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = -273.15,
iscomplex= true,
istemperature= true,
default = "F",
link = "Celsius",
},
["F"] = {
name1 = "degree Fahrenheit",
name2 = "degrees Fahrenheit",
symbol = "°F",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 32-273.15*(9/5),
iscomplex= true,
istemperature= true,
default = "C",
link = "Fahrenheit",
},
["K"] = {
_name1 = "kelvin",
_symbol = "K",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = 0,
iscomplex= true,
istemperature= true,
prefixes = 1,
default = "C F",
link = "Kelvin",
},
["keVT"] = {
name1 = "kiloelectronvolt",
symbol = "keV",
utype = "temperature",
scale = 11604518.121550081,
offset = 0,
iscomplex= true,
default = "MK",
defkey = "keVT",
linkey = "keVT",
link = "Electronvolt",
},
["R"] = {
name1 = "degree Rankine",
name2 = "degrees Rankine",
symbol = "°R",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 0,
iscomplex= true,
istemperature= true,
default = "K F C",
link = "Rankine scale",
},
["Celsius"] = {
target = "C",
},
["°C"] = {
target = "C",
},
["°F"] = {
target = "F",
},
["°R"] = {
target = "R",
},
["C-change"] = {
name1 = "degree Celsius change",
name2 = "degrees Celsius change",
symbol = "°C",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Celsius",
},
["F-change"] = {
name1 = "degree Fahrenheit change",
name2 = "degrees Fahrenheit change",
symbol = "°F",
usesymbol= 1,
utype = "temperature change",
scale = 0.55555555555555558,
default = "C-change",
link = "Fahrenheit",
},
["K-change"] = {
name1 = "kelvin change",
name2 = "kelvins change",
symbol = "K",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Kelvin",
},
["°C-change"] = {
target = "C-change",
},
["°F-change"] = {
target = "F-change",
},
["century"] = {
name1 = "century",
name2 = "centuries",
symbol = "ha",
utype = "time",
scale = 3155760000,
default = "Gs",
},
["d"] = {
name1 = "day",
symbol = "d",
utype = "time",
scale = 86400,
default = "ks",
},
["decade"] = {
name1 = "decade",
symbol = "daa",
utype = "time",
scale = 315576000,
default = "Ms",
},
["dog year"] = {
name1 = "dog year",
symbol = "dog yr",
utype = "time",
scale = 220903200,
default = "years",
link = "List of unusual units of measurement#Dog year",
},
["fortnight"] = {
symbol = "fortnight",
usename = 1,
utype = "time",
scale = 1209600,
default = "week",
},
["h"] = {
name1 = "hour",
symbol = "h",
utype = "time",
scale = 3600,
default = "ks",
},
["long billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["millennium"] = {
name1 = "millennium",
name2 = "millennia",
symbol = "ka",
utype = "time",
scale = 31557600000,
default = "Gs",
},
["milliard year"] = {
name1 = "milliard years",
name2 = "milliard years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["million year"] = {
name1 = "million years",
name2 = "million years",
symbol = "Ma",
utype = "time",
scale = 31557600000000,
default = "Ts",
link = "Annum",
},
["min"] = {
name1 = "minute",
symbol = "min",
utype = "time",
scale = 60,
default = "s",
},
["month"] = {
symbol = "month",
usename = 1,
utype = "time",
scale = 2629800,
default = "Ms",
},
["months"] = {
name1 = "month",
symbol = "mo",
utype = "time",
scale = 2629800,
default = "year",
},
["s"] = {
_name1 = "second",
_symbol = "s",
utype = "time",
scale = 1,
prefixes = 1,
default = "v < 7200 ! min ! h",
link = "Second",
},
["short billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["short trillion year"] = {
name1 = "trillion years",
name2 = "trillion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["thousand million year"] = {
name1 = "thousand million years",
name2 = "thousand million years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["wk"] = {
symbol = "week",
usename = 1,
utype = "time",
scale = 604800,
default = "Ms",
},
["year"] = {
name1 = "year",
symbol = "a",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["years"] = {
name1 = "year",
symbol = "yr",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["byr"] = {
target = "short billion year",
},
["day"] = {
target = "d",
},
["days"] = {
target = "d",
},
["dog yr"] = {
target = "dog year",
},
["Gyr"] = {
target = "thousand million year",
},
["hour"] = {
target = "h",
},
["hours"] = {
target = "h",
},
["kMyr"] = {
target = "thousand million year",
},
["kmyr"] = {
target = "thousand million year",
},
["kyr"] = {
target = "millennium",
},
["long byr"] = {
target = "long billion year",
},
["minute"] = {
target = "min",
},
["minutes"] = {
target = "min",
},
["mth"] = {
target = "month",
},
["Myr"] = {
target = "million year",
},
["myr"] = {
target = "million year",
},
["sec"] = {
target = "s",
},
["second"] = {
target = "s",
},
["seconds"] = {
target = "s",
},
["tmyr"] = {
target = "thousand million year",
},
["tryr"] = {
target = "short trillion year",
},
["tyr"] = {
target = "millennium",
},
["week"] = {
target = "wk",
},
["weeks"] = {
target = "wk",
},
["yr"] = {
target = "year",
},
["kg.m"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["kgf.m"] = {
name1 = "kilogram force-metre",
name1_us = "kilogram force-meter",
symbol = "kgf⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kgm"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kpm"] = {
name1 = "kilopond metre",
name1_us = "kilopond meter",
symbol = "kp⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["lb-fft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "ft⋅lb<sub>f</sub>",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.ft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.in"] = {
name1 = "pound force-inch",
symbol = "lb⋅in",
utype = "torque",
scale = 0.1129848290276167,
default = "mN.m",
link = "Pound-foot (torque)",
},
["lbfft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lbf⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lbft"] = {
name1 = "pound-foot",
name2 = "pound-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["m.kg-f"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kg<sub>f</sub>",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["m.kgf"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kgf",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["mN.m"] = {
name1 = "millinewton-metre",
name1_us = "millinewton-meter",
symbol = "mN⋅m",
utype = "torque",
scale = 0.001,
default = "lb.in",
link = "Newton-metre",
},
["Nm"] = {
_name1 = "newton-metre",
_name1_us= "newton-meter",
_symbol = "N⋅m",
utype = "torque",
alttype = "energy",
scale = 1,
prefixes = 1,
default = "lbfft",
link = "Newton-metre",
},
["kN/m"] = {
per = { "kN", "-m-stiff" },
utype = "torque",
default = "lbf/in",
},
["lbf/in"] = {
per = { "lbf", "-in-stiff" },
utype = "torque",
default = "kN/m",
},
["lb-f.ft"] = {
target = "lb-fft",
},
["lbf.ft"] = {
target = "lbfft",
},
["lbf·ft"] = {
target = "lbfft",
},
["lb·ft"] = {
target = "lb.ft",
},
["mkg-f"] = {
target = "m.kg-f",
},
["mkgf"] = {
target = "m.kgf",
},
["N.m"] = {
target = "Nm",
},
["N·m"] = {
target = "Nm",
},
["ton-mile"] = {
symbol = "ton-mile",
usename = 1,
utype = "transportation",
scale = 1.4599723182105602,
default = "tkm",
},
["tkm"] = {
name1 = "tonne-kilometre",
name1_us = "tonne-kilometer",
symbol = "tkm",
utype = "transportation",
scale = 1,
default = "ton-mile",
},
["-12USoz(mL)serve"] = {
name1_us = "12 U.S. fl oz (355 mL) serving",
symbol = "12 US fl oz (355 mL) serving",
sym_us = "12 U.S. fl oz (355 mL) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["-12USoz(ml)serve"] = {
name1_us = "12 U.S. fl oz (355 ml) serving",
symbol = "12 US fl oz (355 ml) serving",
sym_us = "12 U.S. fl oz (355 ml) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "ml",
link = "Beverage can#Standard sizes",
},
["-12USozserve"] = {
name1_us = "12 U.S. fl oz serving",
symbol = "12 US fl oz serving",
sym_us = "12 U.S. fl oz serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["acre-foot"] = {
name1 = "acre-foot",
name2 = "acre-foot",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["acre-ft"] = {
name1 = "acre-foot",
name2 = "acre-feet",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["AUtbsp"] = {
name1 = "Australian tablespoon",
symbol = "AU tbsp",
utype = "volume",
scale = 0.000020,
default = "ml",
},
["Bcuft"] = {
name1 = "billion cubic foot",
name2 = "billion cubic feet",
symbol = "billion cu ft",
utype = "volume",
scale = 28316846.592,
default = "Gl",
link = "Cubic foot",
},
["bdft"] = {
name1 = "board foot",
name2 = "board feet",
symbol = "bd ft",
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board feet"] = {
name2 = "board feet",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board foot"] = {
name2 = "board foot",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["cc"] = {
name1 = "cubic centimetre",
name1_us = "cubic centimeter",
symbol = "cc",
utype = "volume",
scale = 0.000001,
default = "cuin",
},
["CID"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cc",
link = "Cubic inch#Engine displacement",
},
["cord"] = {
symbol = "cord",
utype = "volume",
scale = 3.624556363776,
default = "m3",
link = "Cord (unit)",
},
["cufoot"] = {
name1 = "cubic foot",
name2 = "cubic foot",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuft"] = {
name1 = "cubic foot",
name2 = "cubic feet",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuin"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cm3",
},
["cumi"] = {
name1 = "cubic mile",
symbol = "cu mi",
utype = "volume",
scale = 4168181825.440579584,
default = "km3",
},
["cuyd"] = {
name1 = "cubic yard",
symbol = "cu yd",
utype = "volume",
scale = 0.764554857984,
default = "m3",
},
["firkin"] = {
symbol = "firkin",
usename = 1,
utype = "volume",
scale = 0.04091481,
default = "L impgal USgal",
link = "Firkin (unit)",
},
["foot3"] = {
target = "cufoot",
},
["Goilbbl"] = {
name1 = "billion barrels",
name2 = "billion barrels",
symbol = "Gbbl",
utype = "volume",
scale = 158987294.928,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["gr water"] = {
name1 = "grains water",
name2 = "grains water",
symbol = "gr H<sub>2</sub>O",
utype = "volume",
scale = 0.00000006479891,
default = "cm3",
link = "Grain (unit)",
},
["grt"] = {
name1 = "gross register ton",
symbol = "grt",
utype = "volume",
scale = 2.8316846592,
default = "m3",
link = "Gross register tonnage",
},
["impbbl"] = {
name1 = "imperial barrel",
symbol = "imp bbl",
utype = "volume",
scale = 0.16365924,
default = "L impgal USgal",
link = "Barrel (unit)",
},
["impbsh"] = {
name1 = "imperial bushel",
symbol = "imp bsh",
utype = "volume",
scale = 0.03636872,
default = "L impgal USdrygal",
},
["impbu"] = {
name1 = "imperial bushel",
symbol = "imp bu",
utype = "volume",
scale = 0.03636872,
default = "m3",
},
["impgal"] = {
name1 = "imperial gallon",
symbol = "imp gal",
utype = "volume",
scale = 0.00454609,
default = "L USgal",
},
["impgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001420653125,
default = "ml USoz",
link = "Gill (unit)",
},
["impkenning"] = {
name1 = "imperial kenning",
symbol = "kenning",
utype = "volume",
scale = 0.01818436,
default = "L USdrygal",
link = "Kenning (unit)",
},
["impoz"] = {
name1 = "imperial fluid ounce",
symbol = "imp fl oz",
utype = "volume",
scale = 0.0000284130625,
default = "ml USoz",
},
["imppk"] = {
name1 = "imperial peck",
symbol = "pk",
utype = "volume",
scale = 0.00909218,
default = "L USdrygal",
link = "Peck",
},
["imppt"] = {
name1 = "imperial pint",
symbol = "imp pt",
utype = "volume",
scale = 0.00056826125,
default = "L",
},
["impqt"] = {
name1 = "imperial quart",
symbol = "imp qt",
utype = "volume",
scale = 0.0011365225,
default = "ml USoz",
customary= 3,
},
["kilderkin"] = {
symbol = "kilderkin",
usename = 1,
utype = "volume",
scale = 0.08182962,
default = "L impgal USgal",
},
["koilbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "kbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["L"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "L",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["l"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "l",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["ll"] = {
name1 = "litre",
name1_us = "liter",
symbol = "l",
utype = "volume",
scale = 0.001,
default = "impgal USgal",
},
["m3"] = {
_name1 = "cubic metre",
_name1_us= "cubic meter",
_symbol = "m<sup>3</sup>",
prefix_position= 7,
utype = "volume",
scale = 1,
prefixes = 3,
default = "cuft",
link = "Cubic metre",
},
["Mbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! e3 ! ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MMoilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "MMbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["Moilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MTON"] = {
name1 = "measurement ton",
symbol = "MTON",
utype = "volume",
scale = 1.13267386368,
default = "m3",
},
["MUSgal"] = {
name1 = "million US gallons",
name1_us = "million U.S. gallons",
name2 = "million US gallons",
name2_us = "million U.S. gallons",
symbol = "million US gal",
sym_us = "million U.S. gal",
utype = "volume",
scale = 3785.411784,
default = "Ml",
link = "US gallon",
},
["oilbbl"] = {
name1 = "barrel",
symbol = "bbl",
utype = "volume",
scale = 0.158987294928,
default = "m3",
link = "Barrel (unit)#Oil barrel",
},
["stere"] = {
symbol = "stere",
usename = 1,
utype = "volume",
scale = 1,
default = "cuft",
},
["tmcft"] = {
name2 = "tmcft",
symbol = "tmcft",
utype = "volume",
scale = 28316846.592,
default = "km3",
},
["Tmcft"] = {
name1 = "thousand million cubic feet",
name2 = "thousand million cubic feet",
symbol = "tmcft",
utype = "volume",
scale = 28316846.592,
default = "km3",
link = "Tmcft",
},
["Toilbbl"] = {
name1 = "trillion barrels",
name2 = "trillion barrels",
symbol = "Tbbl",
utype = "volume",
scale = 158987294928,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["USbbl"] = {
name1 = "US barrel",
name1_us = "U.S. barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.119240471196,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbeerbbl"] = {
name1 = "US beer barrel",
name1_us = "U.S. beer barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.117347765304,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbsh"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bsh",
sym_us = "U.S. bsh",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USbu"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bu",
sym_us = "U.S. bu",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USdrybbl"] = {
name1 = "US dry barrel",
name1_us = "U.S. dry barrel",
symbol = "US dry bbl",
sym_us = "U.S. dry bbl",
utype = "volume",
scale = 0.11562819898508,
default = "m3",
link = "Barrel (unit)",
},
["USdrygal"] = {
name1 = "US dry gallon",
name1_us = "U.S. dry gallon",
symbol = "US dry gal",
sym_us = "U.S. dry gal",
utype = "volume",
scale = 0.00440488377086,
default = "L",
link = "Gallon",
},
["USdrypt"] = {
name1 = "US dry pint",
name1_us = "U.S. dry pint",
symbol = "US dry pt",
sym_us = "U.S. dry pt",
utype = "volume",
scale = 0.0005506104713575,
default = "ml",
link = "Pint",
},
["USdryqt"] = {
name1 = "US dry quart",
name1_us = "U.S. dry quart",
symbol = "US dry qt",
sym_us = "U.S. dry qt",
utype = "volume",
scale = 0.001101220942715,
default = "ml",
link = "Quart",
},
["USflgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US fl gal",
sym_us = "U.S. fl gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
link = "Gallon",
},
["USgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US gal",
sym_us = "U.S. gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
},
["USgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001182941183,
default = "ml impoz",
link = "Gill (unit)",
},
["USkenning"] = {
name1 = "US kenning",
name1_us = "U.S. kenning",
symbol = "US kenning",
sym_us = "U.S. kenning",
utype = "volume",
scale = 0.01761953508344,
default = "L impgal",
link = "Kenning (unit)",
},
["USmin"] = {
name1 = "US minim",
name1_us = "U.S. minim",
symbol = "US min",
sym_us = "U.S. min",
utype = "volume",
scale = 0.000000061611519921875,
default = "ml",
link = "Minim (unit)",
},
["USoz"] = {
name1 = "US fluid ounce",
name1_us = "U.S. fluid ounce",
symbol = "US fl oz",
sym_us = "U.S. fl oz",
utype = "volume",
scale = 0.0000295735295625,
default = "ml",
},
["USpk"] = {
name1 = "US peck",
name1_us = "U.S. peck",
symbol = "US pk",
sym_us = "U.S. pk",
utype = "volume",
scale = 0.00880976754172,
default = "L impgal",
link = "Peck",
},
["USpt"] = {
name1 = "US pint",
name1_us = "U.S. pint",
symbol = "US pt",
sym_us = "U.S. pt",
utype = "volume",
scale = 0.000473176473,
default = "L imppt",
link = "Pint",
},
["USqt"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml",
link = "Quart",
customary= 1,
},
["USquart"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml impoz",
link = "Quart",
},
["UStbsp"] = {
name1 = "US tablespoon",
name1_us = "U.S. tablespoon",
symbol = "US tbsp",
sym_us = "U.S. tbsp",
utype = "volume",
scale = 1.4786764781250001e-5,
default = "ml",
},
["winecase"] = {
symbol = "case",
usename = 1,
utype = "volume",
scale = 0.009,
default = "L",
link = "Case (goods)",
},
["*U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
customary= 2,
},
["*U.S.gal"] = {
target = "USgal",
sp_us = true,
customary= 2,
},
["+USdrygal"] = {
target = "USdrygal",
customary= 1,
},
["+usfloz"] = {
target = "USoz",
link = "Fluid ounce",
customary= 1,
},
["+USgal"] = {
target = "USgal",
customary= 1,
},
["+USoz"] = {
target = "USoz",
customary= 1,
},
["@impgal"] = {
target = "impgal",
link = "Gallon",
customary= 3,
},
["acre feet"] = {
target = "acre-ft",
},
["acre foot"] = {
target = "acre-foot",
},
["acre ft"] = {
target = "acre-ft",
},
["acre-feet"] = {
target = "acre-ft",
},
["acre.foot"] = {
target = "acre-foot",
},
["acre.ft"] = {
target = "acre-ft",
},
["acre·ft"] = {
target = "acre-ft",
},
["bushels"] = {
target = "USbsh",
},
["cid"] = {
target = "CID",
},
["ft3"] = {
target = "cuft",
symbol = "ft<sup>3</sup>",
},
["gal"] = {
target = "USgal",
},
["gallon"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallon%})",
},
["gallons"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallons%})",
},
["Gcuft"] = {
target = "e9cuft",
},
["impfloz"] = {
target = "impoz",
},
["Impgal"] = {
target = "impgal",
},
["in3"] = {
target = "cuin",
symbol = "in<sup>3</sup>",
},
["hm³"] = {
target = "hm3",
},
["kcuft"] = {
target = "e3cuft",
},
["kcum"] = {
target = "e3m3",
},
["km³"] = {
target = "km3",
},
["liter"] = {
target = "L",
sp_us = true,
},
["liters"] = {
target = "L",
sp_us = true,
},
["litre"] = {
target = "L",
},
["litres"] = {
target = "L",
},
["Mcuft"] = {
target = "e6cuft",
},
["Mcum"] = {
target = "e6m3",
},
["Mft3"] = {
target = "e6cuft",
},
["mi3"] = {
target = "cumi",
symbol = "mi<sup>3</sup>",
},
["m³"] = {
target = "m3",
},
["Pcuft"] = {
target = "e15cuft",
},
["pt"] = {
shouldbe = "Use %{USpt%} for US pints or %{imppt%} for imperial pints (not %{pt%})",
},
["qt"] = {
shouldbe = "Use %{USqt%} for US quarts or %{impqt%} for imperial quarts (not %{qt%})",
},
["Tcuft"] = {
target = "e12cuft",
},
["Tft3"] = {
target = "e12cuft",
},
["U.S.bbl"] = {
target = "USbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.beerbbl"] = {
target = "USbeerbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.bsh"] = {
target = "USbsh",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.bu"] = {
target = "USbu",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.drybbl"] = {
target = "USdrybbl",
sp_us = true,
},
["U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
},
["U.S.drypt"] = {
target = "USdrypt",
sp_us = true,
},
["U.S.dryqt"] = {
target = "USdryqt",
sp_us = true,
},
["U.S.flgal"] = {
target = "USflgal",
sp_us = true,
},
["U.S.floz"] = {
target = "USoz",
sp_us = true,
},
["U.S.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["u.s.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["U.S.gi"] = {
target = "USgi",
sp_us = true,
},
["U.S.kenning"] = {
target = "USkenning",
sp_us = true,
},
["U.S.oz"] = {
target = "USoz",
sp_us = true,
},
["U.S.pk"] = {
target = "USpk",
sp_us = true,
},
["U.S.pt"] = {
target = "USpt",
sp_us = true,
},
["U.S.qt"] = {
target = "USqt",
sp_us = true,
default = "L impqt",
customary= 2,
},
["usbbl"] = {
target = "USbbl",
},
["usbeerbbl"] = {
target = "USbeerbbl",
},
["usbsh"] = {
target = "USbsh",
},
["usbu"] = {
target = "USbu",
},
["usdrybbl"] = {
target = "USdrybbl",
},
["usdrygal"] = {
target = "USdrygal",
},
["usdrypt"] = {
target = "USdrypt",
},
["usdryqt"] = {
target = "USdryqt",
},
["USfloz"] = {
target = "USoz",
},
["usfloz"] = {
target = "USoz",
},
["USGAL"] = {
target = "USgal",
},
["usgal"] = {
target = "USgal",
},
["usgi"] = {
target = "USgi",
},
["uskenning"] = {
target = "USkenning",
},
["usoz"] = {
target = "USoz",
},
["uspk"] = {
target = "USpk",
},
["uspt"] = {
target = "USpt",
},
["usqt"] = {
target = "USqt",
},
["yd3"] = {
target = "cuyd",
symbol = "yd<sup>3</sup>",
},
["cuft/sqmi"] = {
per = { "cuft", "sqmi" },
utype = "volume per unit area",
default = "m3/km2",
},
["m3/ha"] = {
name1 = "cubic metre per hectare",
name1_us = "cubic meter per hectare",
name2 = "cubic metres per hectare",
name2_us = "cubic meters per hectare",
symbol = "m<sup>3</sup>/ha",
utype = "volume per unit area",
scale = 0.0001,
default = "USbu/acre",
link = "Hectare",
},
["m3/km2"] = {
per = { "m3", "km2" },
utype = "volume per unit area",
default = "cuft/sqmi",
},
["U.S.gal/acre"] = {
per = { "U.S.gal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["USbu/acre"] = {
name2 = "US bushels per acre",
symbol = "US bushel per acre",
usename = 1,
utype = "volume per unit area",
scale = 8.7077638761350888e-6,
default = "m3/ha",
link = "Bushel",
},
["USgal/acre"] = {
per = { "USgal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["cuyd/mi"] = {
per = { "cuyd", "mi" },
utype = "volume per unit length",
default = "m3/km",
},
["m3/km"] = {
per = { "m3", "km" },
utype = "volume per unit length",
default = "cuyd/mi",
},
["mich"] = {
combination= { "ch", "mi" },
multiple = { 80 },
utype = "length",
},
["michlk"] = {
combination= { "chlk", "mi" },
multiple = { 80 },
utype = "length",
},
["michainlk"] = {
combination= { "chainlk", "mi" },
multiple = { 80 },
utype = "length",
},
["miyd"] = {
combination= { "yd", "mi" },
multiple = { 1760 },
utype = "length",
},
["miydftin"] = {
combination= { "in", "ft", "yd", "mi" },
multiple = { 12, 3, 1760 },
utype = "length",
},
["mift"] = {
combination= { "ft", "mi" },
multiple = { 5280 },
utype = "length",
},
["ydftin"] = {
combination= { "in", "ft", "yd" },
multiple = { 12, 3 },
utype = "length",
},
["ydft"] = {
combination= { "ft", "yd" },
multiple = { 3 },
utype = "length",
},
["ftin"] = {
combination= { "in", "ft" },
multiple = { 12 },
utype = "length",
},
["footin"] = {
combination= { "in", "foot" },
multiple = { 12 },
utype = "length",
},
["handin"] = {
combination= { "in", "hand" },
multiple = { 4 },
utype = "length",
},
["lboz"] = {
combination= { "oz", "lb" },
multiple = { 16 },
utype = "mass",
},
["stlb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["stlboz"] = {
combination= { "oz", "lb", "st" },
multiple = { 16, 14 },
utype = "mass",
},
["st and lb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["GN LTf"] = {
combination= { "GN", "-LTf" },
utype = "force",
},
["GN LTf STf"] = {
combination= { "GN", "-LTf", "-STf" },
utype = "force",
},
["GN STf"] = {
combination= { "GN", "-STf" },
utype = "force",
},
["GN STf LTf"] = {
combination= { "GN", "-STf", "-LTf" },
utype = "force",
},
["kN LTf"] = {
combination= { "kN", "-LTf" },
utype = "force",
},
["kN LTf STf"] = {
combination= { "kN", "-LTf", "-STf" },
utype = "force",
},
["kN STf"] = {
combination= { "kN", "-STf" },
utype = "force",
},
["kN STf LTf"] = {
combination= { "kN", "-STf", "-LTf" },
utype = "force",
},
["LTf STf"] = {
combination= { "-LTf", "-STf" },
utype = "force",
},
["MN LTf"] = {
combination= { "MN", "-LTf" },
utype = "force",
},
["MN LTf STf"] = {
combination= { "MN", "-LTf", "-STf" },
utype = "force",
},
["MN STf"] = {
combination= { "MN", "-STf" },
utype = "force",
},
["MN STf LTf"] = {
combination= { "MN", "-STf", "-LTf" },
utype = "force",
},
["STf LTf"] = {
combination= { "-STf", "-LTf" },
utype = "force",
},
["L/100 km mpgimp"] = {
combination= { "L/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["l/100 km mpgimp"] = {
combination= { "l/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["L/100 km mpgUS"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["L/100 km mpgus"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["l/100 km mpgus"] = {
combination= { "l/100 km", "mpgus" },
utype = "fuel efficiency",
},
["mpgimp L/100 km"] = {
combination= { "mpgimp", "L/100 km" },
utype = "fuel efficiency",
},
["LT ST t"] = {
combination= { "lt", "-ST", "t" },
utype = "mass",
},
["LT t ST"] = {
combination= { "lt", "t", "-ST" },
utype = "mass",
},
["ST LT t"] = {
combination= { "-ST", "lt", "t" },
utype = "mass",
},
["ST t LT"] = {
combination= { "-ST", "t", "lt" },
utype = "mass",
},
["t LT ST"] = {
combination= { "t", "lt", "-ST" },
utype = "mass",
},
["ton"] = {
combination= { "LT", "ST" },
utype = "mass",
},
["kPa kg/cm2"] = {
combination= { "kPa", "kgf/cm2" },
utype = "pressure",
},
["kPa lb/in2"] = {
combination= { "kPa", "-lb/in2" },
utype = "pressure",
},
["floz"] = {
combination= { "impoz", "USoz" },
utype = "volume",
},
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local default_exceptions = {
-- Prefixed units with a default different from that of the base unit.
-- Each key item is a prefixed symbol (unitcode for engineering notation).
["cm<sup>2</sup>"] = "sqin",
["dm<sup>2</sup>"] = "sqin",
["e3acre"] = "km2",
["e3m2"] = "e6sqft",
["e6acre"] = "km2",
["e6ha"] = "e6acre",
["e6km2"] = "e6sqmi",
["e6m2"] = "e6sqft",
["e6sqft"] = "v * 9.290304 < 100 ! e3 ! e6 ! m2",
["e6sqmi"] = "e6km2",
["hm<sup>2</sup>"] = "acre",
["km<sup>2</sup>"] = "sqmi",
["mm<sup>2</sup>"] = "sqin",
["aJ"] = "eV",
["e3BTU"] = "MJ",
["e6BTU"] = "GJ",
["EJ"] = "kWh",
["eV"] = "aJ",
["feV"] = "yJ",
["fJ"] = "keV",
["GeV"] = "nJ",
["GJ"] = "kWh",
["keV"] = "fJ",
["MeV"] = "pJ",
["meV"] = "zJ",
["MJ"] = "kWh",
["neV"] = "yJ",
["PeV"] = "mJ",
["peV"] = "yJ",
["PJ"] = "kWh",
["pJ"] = "MeV",
["TeV"] = "μJ",
["TJ"] = "kWh",
["YJ"] = "kWh",
["yJ"] = "μeV",
["ZJ"] = "kWh",
["zJ"] = "meV",
["μeV"] = "yJ",
["e12cuft/a"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/a",
["e12cuft/d"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/d",
["e12m3/a"] = "Tcuft/a",
["e12m3/d"] = "Tcuft/d",
["e3cuft/a"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/a",
["e3cuft/d"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/d",
["e3cuft/s"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/s",
["e3m3/a"] = "v < 28.316846592 ! k ! M ! cuft/a",
["e3m3/d"] = "v < 28.316846592 ! k ! M ! cuft/d",
["e3m3/s"] = "v < 28.316846592 ! k ! M ! cuft/s",
["e3USgal/a"] = "v * 3.785411784 < 1000 ! ! e3 ! m3/a",
["e6cuft/a"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/a",
["e6cuft/d"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/d",
["e6cuft/s"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/s",
["e6m3/a"] = "v < 28.316846592 ! M ! G ! cuft/a",
["e6m3/d"] = "v < 28.316846592 ! M ! G ! cuft/d",
["e6m3/s"] = "v < 28.316846592 ! e6 ! e9 ! cuft/s",
["e6USgal/a"] = "v * 3.785411784 < 1000 ! e3 ! e6 ! m3/a",
["e9cuft/a"] = "m3/a",
["e9cuft/d"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3/d",
["e9m3/a"] = "v < 28.316846592 ! G ! T ! cuft/a",
["e9m3/d"] = "v < 28.316846592 ! G ! T ! cuft/d",
["e9m3/s"] = "v < 28.316846592 ! e9 ! e12 ! cuft/s",
["e9USgal/a"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/a",
["e9USgal/s"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/s",
["nN"] = "gr-f",
["μN"] = "gr-f",
["mN"] = "oz-f",
["am"] = "in",
["cm"] = "in",
["dam"] = "ft",
["dm"] = "in",
["e12km"] = "e12mi",
["e12mi"] = "e12km",
["e3AU"] = "ly",
["e3km"] = "e3mi",
["e3mi"] = "e3km",
["e6km"] = "e6mi",
["e6mi"] = "e6km",
["e9km"] = "AU",
["e9mi"] = "e9km",
["Em"] = "mi",
["fm"] = "in",
["Gm"] = "mi",
["hm"] = "ft",
["km"] = "mi",
["mm"] = "in",
["Mm"] = "mi",
["nm"] = "in",
["Pm"] = "mi",
["pm"] = "in",
["Tm"] = "mi",
["Ym"] = "mi",
["ym"] = "in",
["Zm"] = "mi",
["zm"] = "in",
["μm"] = "in",
["e12lb"] = "v * 4.5359237 < 10 ! Mt ! Gt",
["e3lb"] = "v * 4.5359237 < 10 ! kg ! t",
["e3ozt"] = "v * 0.311034768 < 10 ! kg ! t",
["e3t"] = "LT ST",
["e6carat"] = "t",
["e6lb"] = "v * 4.5359237 < 10 ! t ! kilotonne",
["e6ozt"] = "lb kg",
["e6ST"] = "Mt",
["e6t"] = "LT ST",
["e9lb"] = "v * 4.5359237 < 10 ! kilotonne ! Mt",
["e9t"] = "LT ST",
["Gg"] = "lb",
["kg"] = "lb",
["mg"] = "gr",
["Mg"] = "LT ST",
["ng"] = "gr",
["μg"] = "gr",
["mBq"] = "fCi",
["kBq"] = "nCi",
["MBq"] = "μCi",
["GBq"] = "mCi",
["TBq"] = "Ci",
["PBq"] = "kCi",
["EBq"] = "kCi",
["fCi"] = "mBq",
["pCi"] = "Bq",
["nCi"] = "Bq",
["μCi"] = "kBq",
["mCi"] = "MBq",
["kCi"] = "TBq",
["MCi"] = "PBq",
["ns"] = "μs",
["μs"] = "ms",
["ms"] = "s",
["ks"] = "h",
["Ms"] = "week",
["Gs"] = "decade",
["Ts"] = "millennium",
["Ps"] = "million year",
["Es"] = "thousand million year",
["MK"] = "keVT",
["cL"] = "impoz usoz",
["cl"] = "impoz usoz",
["cm<sup>3</sup>"] = "cuin",
["dL"] = "impoz usoz",
["dl"] = "impoz usoz",
["mm<sup>3</sup>"] = "cuin",
["dm<sup>3</sup>"] = "cuin",
["e12cuft"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3",
["e12impgal"] = "v * 4.54609 < 1000 ! T ! P ! l",
["e12m3"] = "v < 28.316846592 ! T ! P ! cuft",
["e12U.S.gal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e12USgal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e15cuft"] = "v * 2.8316846592 < 100 ! e12 ! e15 ! m3",
["e15m3"] = "Pcuft",
["e3bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e3cuft"] = "v * 2.8316846592 < 100 ! ! e3 ! m3",
["e3impgal"] = "v * 4.54609 < 1000 ! k ! M ! l",
["e3m3"] = "v < 28.316846592 ! k ! M ! cuft",
["e3U.S.gal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e3USgal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e6bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e6cuft"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3",
["e6cuyd"] = "v * 7.64554857984 < 10 ! e3 ! e6 ! m3",
["e6impgal"] = "v * 4.54609 < 1000 ! M ! G ! l",
["e6L"] = "USgal",
["e6m3"] = "v < 28.316846592 ! M ! G ! cuft",
["e6U.S.gal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e6USgal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e9bdft"] = "v * 0.23597372167 < 100 ! e6 ! e9 ! m3",
["e9cuft"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3",
["e9impgal"] = "v * 4.54609 < 1000 ! G ! T ! l",
["e9m3"] = "v < 28.316846592 ! G ! T ! cuft",
["e9U.S.gal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["e9USgal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["GL"] = "cuft",
["Gl"] = "cuft",
["kL"] = "cuft",
["kl"] = "cuft",
["km<sup>3</sup>"] = "cumi",
["mL"] = "impoz usoz",
["ml"] = "impoz usoz",
["Ml"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["ML"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["TL"] = "cumi",
["Tl"] = "cumi",
["μL"] = "cuin",
["μl"] = "cuin",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local link_exceptions = {
-- Prefixed units with a linked article different from that of the base unit.
-- Each key item is a prefixed symbol (not unitcode).
["mm<sup>2</sup>"] = "Square millimetre",
["cm<sup>2</sup>"] = "Square centimetre",
["dm<sup>2</sup>"] = "Square decimetre",
["km<sup>2</sup>"] = "Square kilometre",
["kJ"] = "Kilojoule",
["MJ"] = "Megajoule",
["GJ"] = "Gigajoule",
["TJ"] = "Terajoule",
["fm"] = "Femtometre",
["pm"] = "Picometre",
["nm"] = "Nanometre",
["μm"] = "Micrometre",
["mm"] = "Millimetre",
["cm"] = "Centimetre",
["dm"] = "Decimetre",
["dam"] = "Decametre",
["hm"] = "Hectometre",
["km"] = "Kilometre",
["Mm"] = "Megametre",
["Gm"] = "Gigametre",
["Tm"] = "Terametre",
["Pm"] = "Petametre",
["Em"] = "Exametre",
["Zm"] = "Zettametre",
["Ym"] = "Yottametre",
["μg"] = "Microgram",
["mg"] = "Milligram",
["kg"] = "Kilogram",
["Mg"] = "Tonne",
["yW"] = "Yoctowatt",
["zW"] = "Zeptowatt",
["aW"] = "Attowatt",
["fW"] = "Femtowatt",
["pW"] = "Picowatt",
["nW"] = "Nanowatt",
["μW"] = "Microwatt",
["mW"] = "Milliwatt",
["kW"] = "Kilowatt",
["MW"] = "Megawatt",
["GW"] = "Gigawatt",
["TW"] = "Terawatt",
["PW"] = "Petawatt",
["EW"] = "Exawatt",
["ZW"] = "Zettawatt",
["YW"] = "Yottawatt",
["as"] = "Attosecond",
["fs"] = "Femtosecond",
["ps"] = "Picosecond",
["ns"] = "Nanosecond",
["μs"] = "Microsecond",
["ms"] = "Millisecond",
["ks"] = "Kilosecond",
["Ms"] = "Megasecond",
["Gs"] = "Gigasecond",
["Ts"] = "Terasecond",
["Ps"] = "Petasecond",
["Es"] = "Exasecond",
["Zs"] = "Zettasecond",
["Ys"] = "Yottasecond",
["mm<sup>3</sup>"] = "Cubic millimetre",
["cm<sup>3</sup>"] = "Cubic centimetre",
["dm<sup>3</sup>"] = "Cubic decimetre",
["dam<sup>3</sup>"] = "Cubic decametre",
["km<sup>3</sup>"] = "Cubic kilometre",
["μL"] = "Microlitre",
["μl"] = "Microlitre",
["mL"] = "Millilitre",
["ml"] = "Millilitre",
["cL"] = "Centilitre",
["cl"] = "Centilitre",
["dL"] = "Decilitre",
["dl"] = "Decilitre",
["daL"] = "Decalitre",
["dal"] = "Decalitre",
["hL"] = "Hectolitre",
["hl"] = "Hectolitre",
["kL"] = "Kilolitre",
["kl"] = "Kilolitre",
["ML"] = "Megalitre",
["Ml"] = "Megalitre",
["GL"] = "Gigalitre",
["Gl"] = "Gigalitre",
["TL"] = "Teralitre",
["Tl"] = "Teralitre",
["PL"] = "Petalitre",
["Pl"] = "Petalitre",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local per_unit_fixups = {
-- Automatically created per units of form "x/y" may have their unit type
-- changed, for example, "length/time" is changed to "speed".
-- Other adjustments can also be specified.
["/area"] = "per unit area",
["/volume"] = "per unit volume",
["area/area"] = "area per unit area",
["energy/length"] = "energy per unit length",
["energy/mass"] = "energy per unit mass",
["energy/time"] = { utype = "power", link = "Power (physics)" },
["energy/volume"] = "energy per unit volume",
["force/area"] = { utype = "pressure", link = "Pressure" },
["length/length"] = { utype = "gradient", link = "Grade (slope)" },
["length/time"] = { utype = "speed", link = "Speed" },
["length/time/time"] = { utype = "acceleration", link = "Acceleration" },
["mass/area"] = { utype = "pressure", multiplier = 9.80665 },
["mass/length"] = "linear density",
["mass/mass"] = "concentration",
["mass/power"] = "mass per unit power",
["mass/time"] = "mass per unit time",
["mass/volume"] = { utype = "density", link = "Density" },
["power/mass"] = "power per unit mass",
["power/volume"] = { link = "Power density" },
["pressure/length"] = "fracture gradient",
["speed/time"] = { utype = "acceleration", link = "Acceleration" },
["volume/area"] = "volume per unit area",
["volume/length"] = "volume per unit length",
["volume/time"] = "flow",
}
return {
all_units = all_units,
default_exceptions = default_exceptions,
link_exceptions = link_exceptions,
per_unit_fixups = per_unit_fixups,
}
7vt93q4k3g6nmkz8xtmrhvnq0ne4o6b
Module:Convert/text
828
7532
104296
2026-09-11T16:20:50Z
咽頭べさ
6149
Created page with "-- Text used by Module:Convert, for my.wikipedia.org (Burmese). -- This is a separate module to simplify translation for use on another wiki. -- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki. local translation_table = { group = 3, -- group numbers 3 digits, then 2 digits per_word = 'per', -- for units like "miles per gallon" plural_suffix = '', -- disable plural unit names from_en = { ['0'] = '०', ['1'] = '१', ['2']..."
104296
Scribunto
text/plain
-- Text used by Module:Convert, for my.wikipedia.org (Burmese).
-- This is a separate module to simplify translation for use on another wiki.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
local translation_table = {
group = 3, -- group numbers 3 digits, then 2 digits
per_word = 'per', -- for units like "miles per gallon"
plural_suffix = '', -- disable plural unit names
from_en = {
['0'] = '०',
['1'] = '१',
['2'] = '२',
['3'] = '३',
['4'] = '४',
['5'] = '५',
['6'] = '६',
['7'] = '७',
['8'] = '८',
['9'] = '९',
},
to_en = {
['၀'] = '0',
['၁'] = '1',
['၂'] = '2',
['၃'] = '3',
['၄'] = '4',
['၅'] = '5',
['၆'] = '6',
['၇'] = '7',
['၈'] = '8',
['၉'] = '9',
},
specials = { -- for special processing by makeunits
utype = {
-- ["unit type in local language"] = "name_used_in_this_script"
["Fuel efficiency"] = "type_fuel_efficiency",
["आयाम"] = "type_length",
["उण्हत्त"] = "type_temperature",
["पमाण"] = "type_volume",
},
ucode = {
exception = {
-- ["unit code in local language"] = "name_used_in_module_convert"
["पादो"] = "integer_more_precision",
["अङ्गुलं (यूनिट)"] = "subunit_more_precision",
["रतनं"] = "integer_more_precision",
["पादो"] = "integer_more_precision",
["अङ्गुलं (यूनिट)"] = "subunit_more_precision",
},
istemperature = {
-- Common temperature scales (not keVT or MK).
-- ["unit code in local language"] = 1
["C"] = true,
["F"] = true,
["K"] = true,
["R"] = true,
},
usesymbol = {
-- Use unit symbol not name if abbr not specified.
-- ["unit code in local language"] = 1
["C"] = 1,
["F"] = 1,
["K"] = 1,
["R"] = 1,
["C-change"] = 1,
["F-change"] = 1,
["K-change"] = 1,
},
alttype = {
-- Unit has an alternate type that is a valid conversion.
-- ["unit code in local language"] = "alternate type in local language"
["Nm"] = "energy",
["ftlb"] = "torque",
["ftlb-f"] = "torque",
["ftlbf"] = "torque",
["inlb"] = "torque",
["inlb-f"] = "torque",
["inlbf"] = "torque",
["inoz-f"] = "torque",
["inozf"] = "torque",
},
},
},
mtext = {
-- Text used by Module:Convert/makeunits.
titles = {
-- name_used_in_this_script = "Title of page"
conversion_data = 'User:Johnuniq/Conversion data',
},
},
}
-- Some units accept an SI prefix before the unit code, such as "kg" for kilogram.
local SIprefixes = {
-- The prefix field is what the prefix should be, if different from the prefix used.
['Y'] = { exponent = 24, name = 'योटा', },
['Z'] = { exponent = 21, name = 'जीटा', },
['E'] = { exponent = 18, name = 'एसाव' , },
['P'] = { exponent = 15, name = 'पीटर' , },
['T'] = { exponent = 12, name = 'तय्रा' , },
['G'] = { exponent = 9, name = 'गीगा' , },
['M'] = { exponent = 6, name = 'मग्गा' , },
['k'] = { exponent = 3, name = 'किलो' , },
['h'] = { exponent = 2, name = 'हट्टो', },
['da']= { exponent = 1, name = 'ढाका' , },
['d'] = { exponent = -1, name = 'डेज़ी' , },
['c'] = { exponent = -2, name = 'सिंडी', },
['m'] = { exponent = -3, name = 'मीली', },
['μ'] = { exponent = -6, name = 'माइक्रो', prefix = 'µ' }, -- key = 'GREEK SMALL LETTER MU' (U+03BC) utf-8 CE BC
['µ'] = { exponent = -6, name = 'माइक्रो', }, -- key = 'MICRO SIGN' (U+00B5) utf-8 C2 B5
['u'] = { exponent = -6, name = 'माइक्रो', prefix = 'µ' }, -- not an SI prefix, but allow for people typing this
['n'] = { exponent = -9, name = 'नानिु' , },
['p'] = { exponent =-12, name = 'पीकिु' , },
['f'] = { exponent =-15, name = 'फन्तिु', },
['a'] = { exponent =-18, name = 'एक्टो' , },
['z'] = { exponent =-21, name = 'ज़ैट्टो', },
['y'] = { exponent =-24, name = 'योटो', },
}
-- Some units can be qualified with one of the following prefixes, when linked.
local customary_units = {
{ "US", link = "United States customary units" },
{ "U.S.", link = "United States customary units" },
{ "imperial", link = "Imperial units" },
{ "imp", link = "Imperial units" },
}
-- Names when using engineering notation (a prefix of "eN" where N is a number; example "e6km").
-- key = { "name", link = "article title", exponent = numeric_key_value }
-- If lk=on and link is defined, the name of the number will appear as a link.
local eng_scales = {
["3"] = { "सहस्सं", exponent = 3 },
["4"] = { "दससहस्सं", exponent = 4 },
["5"] = { "सतसहस्सं", exponent = 5 },
["6"] = { "दसमसतसहस्सं", exponent = 6 },
["7"] = { "कोटि", exponent = 7 },
["9"] = { "बिन्दु", link = "१००००००००० (सङ्ख्या)", exponent = 9 },
["12"] = { "अब्बुदं", link = "१०००००००००००० (सङ्ख्या)", exponent = 12 },
["15"] = { "निरब्बुदं", link = "१००००००००००००००० (सङ्ख्या)", exponent = 15 },
}
-- One of the following categories is included in the text of each message.
-- Using the same category for each is simplest.
local all_categories = {
unit = "[[Category:विपरिणाम दोसा]]",
option = "[[Category:विपरिणाम दोसा]]",
}
-- For some error messages, the following puts the wanted style around
-- each unit code marked like '...%{ft%}...'.
local unitcode_regex = '%%([{}])'
local unitcode_replace = { ['{'] = '"', ['}'] = '"' } -- no longer need the more elaborate substitute used before 2013-09-28
-- All messages that may be displayed if a problem occurs.
local all_messages = {
-- Message format string: $1=title, $2=text, $3=category, $4=anchor.
-- Each displayed message starts with "Convert:" so can easily locate by searching article.
cvt_format = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[<i>[[Help:Convert messages#$4|<span title="Convert: $1">convert: $2</span>]]</i>]</sup>$3',
cvt_format2 = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[[Help:Convert messages#$4|<span title="Convert: $1">$2</span>]]</sup>$3',
cvt_format_preview = '<strong class="error">विपरिणाम दोसा: $1 [[Help:Convert messages#$4|(उपकारो)]]</strong>$3',
-- Each of following messages is a table:
-- { [1] = 'title', -- mouseover title text
-- [2] = 'text', -- link text displayed in article
-- [3] = 'category key', -- key to lookup category in all_categories
-- [4] = 'anchor', -- anchor for link to relevant section on help page
-- regex = gsub_regex,
-- replace = gsub_table,
-- } Mouseover title text Link text CatKey Anchor
cvt_bad_input = { 'पवेसनं "$1" सङ्ख्या च एककं च भवितब्बं' , 'अनिच्छितं पवेसनं' , 'option', 'invalid_input' },
cvt_bad_num = { 'गुणो "$1" सङ्ख्या भवितब्बो' , 'अनिच्छिता सङ्ख्या' , 'option', 'invalid_number' },
cvt_big_prec = { 'सुक्खुमता "$1" अतिमहन्ता' , 'अधिकसुक्खुमता' , 'option', 'precision_too_large' },
cvt_invalid_num = { 'सङ्ख्या अतिवत्तिता' , 'सङ्ख्याअतिवत्तनं' , 'option', 'number_overflow' },
cvt_no_num = { 'परिवत्तनाय सङ्ख्या अपेक्खिता' , 'सङ्ख्या अपेक्खिता' , 'option', 'needs_number' },
cvt_no_num2 = { 'सीमाय अञ्ञिस्सा सङ्ख्याय अपेक्खा' , 'अञ्ञा सङ्ख्या अपेक्खिता', 'option', 'needs_another_number' },
cvt_bad_frac = { 'भिन्नं "$1" १ तो उपरि पूरणसङ्ख्या भवितब्बं' , 'अनिच्छितं भिन्नं' , 'option', 'invalid_fraction' },
cvt_bad_prec = { 'सुक्खुमता "$1" पूरणसङ्ख्या भवितब्बा' , 'अनिच्छिता सुक्खुमता' , 'option', 'invalid_precision' },
cvt_bad_sigfig = { 'सिद्धसङ्ख्या "$1" धनपूरणसङ्ख्या भवितब्बा' , 'अनिच्छिता सिद्धसङ्ख्या' , 'option', 'invalid_sigfig' },
cvt_empty_option = { 'तुच्छविकप्पो "$1"अपेक्खितो' , 'तुच्छविकप्पो' , 'option', 'empty_option' },
cvt_deprecated = { 'विकप्पो "$1" पटिसिद्धो' , '*' , 'option', 'deprecated_option', format = 'cvt_format2' },
cvt_no_spell = { 'अक्खरविञ्ञापनं न लब्भति' , 'दोसो। सहायतं याचथ' , 'option', 'ask_for_help' },
cvt_unknown_option = { 'अनिच्छितो विकप्पो "$1"अपेक्खितो' , 'अनिच्छितो विकप्पो' , 'option', 'invalid_option' },
cvt_wd_fail = { 'वीकीदेता पविसितुं न सक्कोति' , 'वीकीदेता पस्सादो' , 'option', 'wikidata_problem' },
cvt_bad_default = { 'एककस्स "$1" अनिच्छितं पकतिमानं' , 'दोसो। सहायतं याचथ' , 'unit' , 'ask_for_help' },
cvt_bad_unit = { 'एककं "$1" इिध अनिच्छितं' , 'एककं इिध अनिच्छितं' , 'unit' , 'unit_invalid_here' },
cvt_no_default = { 'एककस्स "$1" निग्गमनपकतिएककं नत्थि' , 'दोसो। सहायतं याचथ' , 'unit' , 'ask_for_help' },
cvt_no_unit = { 'एककनामं अपेक्खितं' , 'एककनामं अपेक्खितं' , 'unit' , 'needs_unit_name' },
cvt_unknown = { 'एककं "$1" न ञायति' , 'अञ्ञातं एककं' , 'unit' , 'unknown_unit' },
cvt_should_be = { '$1' , 'विमतिजनकं एककं' , 'unit' , 'ambiguous_unit', regex = unitcode_regex, replace = unitcode_replace },
cvt_mismatch = { '"$1" तो "$2" च परिवत्तेतुं न सक्कोति' , 'एककअयुत्ति' , 'unit' , 'unit_mismatch' },
cvt_bug_convert = { 'दोसो: निद्दिट्ठएककेहि अन्तरा परिवत्तेतुं न सक्का', 'दोसो। सहायतं याचथ' , 'unit' , 'ask_for_help' },
cvt_lookup = { 'एककं "$1" अयुत्तं निद्दिट्ठं' , 'दोसो। सहायतं याचथ' , 'unit' , 'ask_for_help' },
}
-- Text to join input value/unit with output value/unit.
local disp_joins = {
-- [1]=before output, [2]=after output, [3]=between outputs in a combination; default "; "
-- [wantname] gives default abbr=off
["or"] = { " or " , "" , " or ", wantname = true },
["sqbr-sp"] = { " [" , "]" },
["sqbr-nbsp"] = { " [" , "]" },
["comma"] = { ", " , "" , ", " },
["slash-sp"] = { " / " , "" , wantname = true },
["slash-nbsp"] = { " / ", "" , wantname = true },
["slash-nosp"] = { "/" , "" , wantname = true },
["b"] = { " (" , ")" },
["(or)"] = { " (" , ")", " or " },
["br"] = { "<br />" , "" , wantname = true },
["br()"] = { "<br />(" , ")", wantname = true },
}
-- Text to separate values in a range.
local range_types = {
-- Specifying a table requires either:
-- * "off" and "on" values (for "abbr=off" and "abbr=on"), or
-- * "input" and "output" values (for LHS and RHS);
-- other fields are optional.
-- When "adj=on|abbr=off" applies, spaces in range text are replaced with hyphens.
-- With "exception = true", that also occurs with "adj=on|abbr=on".
-- If "adj" is defined here, that text (unchanged) is used with "adj=on".
["+"] = " + ",
[","] = ", ",
[", and"] = ", and ",
[", or"] = ", or ",
["by"] = " by ",
["-"] = "–",
["to about"] = " to about ",
["and"] = { off = " and ", on = " and ", exception = true },
["च"] = { off = " च ", on = " च ", exception = true },
["and(-)"] = { input = " and ", output = "–" },
["or"] = { off = " or " , on = " or " , exception = true },
["to"] = { off = " to " , on = " to " , exception = true },
["မှ"] = { off = " नो " , on = " नो " , exception = true },
["to(-)"] = { input = " to ", output = "–" },
["+/-"] = { off = " ± ", on = " ± ", adj = " ± ", is_range_change = true },
["by(x)"] = { input = " by ", output = " × ", out_range_x = true },
["x"] = { off = " by ", on = " × ", abbr_range_x = true },
["xx"] = " × ",
["*"] = "×", -- use "*" to replace "x" in {{convert/2}} which is different from "x" in old {{convert}}
["/"] = " / ", -- for a table of high/low temperatures with {{convert|83|/|63|F|disp=br()|abbr=values}}
["#"] = { off = ", ", on = ", ", abbr_range_x = true, adj = " ± " }, -- to show multiple Wikidata values
}
local range_aliases = {
-- ["alternative name for a range"] = "standard range name"
["&"] = "and",
["–"] = "-",
["–"] = "-",
["to-"] = "to(-)",
["×"] = "x",
["×"] = "x",
["±"] = "+/-",
["±"] = "+/-",
}
-- Convert accepts range text delimited with whitespace, for example, {{convert|1 to 2|ft}}.
-- In addition, the following "words" are accepted without spaces, for example, {{convert|1-2|ft}}.
-- Words must be in correct order for searching, for example, 'x' after 'xx'.
local range_words = { '-', '–', 'xx', 'x', '*' }
local ranges = {
types = range_types,
aliases = range_aliases,
words = range_words,
}
-- Valid option names.
local en_option_name = {
-- ["local text for option name"] = "en name used in this module"
["$"] = "$",
["abbr"] = "abbr",
["adj"] = "adj",
["comma"] = "comma",
["debug"] = "debug",
["disp"] = "disp",
["frac"] = "frac",
["input"] = "input",
["lang"] = "lang",
["lk"] = "lk",
["near"] = "near",
["order"] = "order",
["qid"] = "qid",
["qual"] = "qual",
["qualifier"] = "qual",
["round"] = "round",
["sigfig"] = "sigfig",
["sing"] = "adj", -- "sing" is an old alias for "adj"
["sortable"] = "sortable",
["sp"] = "sp",
["spell"] = "spell",
["stylein"] = "stylein",
["styleout"] = "styleout",
}
-- Valid option values.
-- Convention: parms.opt_xxx refers to an option that is set here
-- (not intended to be set by the template which invokes this module).
-- Example: At enwiki, "abbr" includes:
-- ["comma"] = "opt_nocomma"
-- As a result, if the template uses abbr=comma, Module:Convert sets:
-- parms["opt_nocomma"] = true
-- parms["abbr"] = nil
-- Therefore parms.abbr will be nil, or will have one of the listed values
-- that do not start with "opt_".
-- An option value of form "xxx?" is the same as "xxx" but shows the input as deprecated.
local en_option_value = {
-- $=x is handled as a special case: x should be a currency symbol that will be used instead of "$"
["abbr"] = {
-- ["local text for option value"] = "en value used in this module"
["comma"] = "opt_nocomma?", -- no numsep in input or output numbers
["def"] = "", -- ignored (some wrapper templates call convert with "abbr=def" to mean "default abbreviation")
["h"] = "on", -- abbr=on + use "h" for hand unit (default)
["hh"] = "opt_hand_hh", -- abbr=on + use "hh" for hand unit
["in"] = "in", -- use symbol for LHS unit
["mos"] = "mos", -- in a range, repeat the input unit (no longer used)
["none"] = "off", -- old name for "off"
["off"] = "off", -- use name for all units
["on"] = "on", -- use symbol for all units
["out"] = "out", -- use symbol for RHS unit (default)
["unit"] = "unit", -- abbr=on but abbreviate units only: e6km → million km (not ×10⁶ km)
["values"] = "opt_values", -- show only input and output numbers, not units
["~"] = "opt_also_symbol", -- show input unit symbol as well as name
},
["adj"] = {
["1"] = "opt_singular", -- unit name is singular when value satisfies: (-1 <= v and v < 0) or (0 < v and v <= 1)
["flip"] = "opt_flip?", -- reverse order of input/output
["j"] = "opt_use_nbsp", -- "join": use " " instead of " " between value and unit name
["mid"] = "opt_adjectival, opt_adj_mid", -- adj=on with user-specified text after input unit (between input and output)
["nocomma"] = "opt_nocomma?", -- no numsep in input or output numbers
["off"] = "", -- ignored (off is the default)
["on"] = "opt_adjectival", -- unit name is singular and hyphenated
["pre"] = "opt_one_preunit", -- user-specified text before input unit
["ri0"] = "opt_ri=0", -- round input with precision = 0
["ri1"] = "opt_ri=1", -- round input with precision = 1
["ri2"] = "opt_ri=2", -- round input with precision = 2
["ri3"] = "opt_ri=3", -- round input with precision = 3
},
["comma"] = {
["5"] = "opt_comma5", -- only use numsep grouping if 5 or more digits
["gaps"] = "opt_gaps", -- use gaps, not numsep, to separate groups of digits
["gaps3"] = "opt_gaps, opt_gaps3", -- group only in threes rather than default of no gap before a single digit after decimal mark
["gaps5"] = "opt_gaps?", -- deprecated 2015-05-29, was: opt_gaps + opt_comma5
["off"] = "opt_nocomma", -- no numsep in input or output numbers
},
["debug"] = {
["yes"] = "opt_sortable_debug", -- make the normally hidden sort key visible
},
["disp"] = {
["/"] = "or?", -- see "slash"
["2"] = "opt_output_only?", -- display only output value and symbol/name (not input)
["5"] = "opt_round=5", -- round output value to nearest 5
["b"] = "b", -- join: '(...)'
["(or)"] = "(or)", -- join: '(...)' with 'or' between outputs in a combination
["br"] = "br", -- join: '<br />'
["br()"] = "br()", -- join: '<br />(...)'
["comma"] = "comma", -- join: ','
["flip"] = "opt_flip", -- reverse order of input/output
["flip5"] = "opt_flip, opt_round=5?", -- disp=flip + disp=5
["nocomma"] = "opt_nocomma?", -- no numsep in input or output numbers
["number"] = "opt_output_number_only", -- display output value (not input, and not output symbol/name)
["or"] = "or", -- join: 'or'
["out"] = "opt_output_only",
["output number only"] = "opt_output_number_only",
["output only"] = "opt_output_only",
["preunit"] = "opt_two_preunits", -- user-specified text before input and output units
["s"] = "or?", -- see "slash"
["slash"] = "or?", -- 2014-11-03: "disp=slash" is now equivalent to "disp=or" as slash is unhelpful
["sqbr"] = "sqbr", -- join: '[...]'
["table"] = "opt_table", -- output is suitable for a table cell with align="right"
["tablecen"] = "opt_tablecen", -- output is suitable for a table cell with align="center"
["u2"] = "opt_output_unit_only?", -- display output symbol/name (not input, and not output value)
["unit"] = "opt_input_unit_only", -- display input symbol/name (not output, and not input value)
["unit or text"] = "opt_input_unit_only, opt_ignore_error", -- display input symbol/name, or given unit code if not known
["unit2"] = "opt_output_unit_only",
["x"] = "x", -- join: <first>...<second> (user-specified text)
},
-- frac=x is handled as a special case: x must be an integer (possibly in local language) = 2 or more
-- input=x is handled as a special case: x should be <value><space><unitcode> or <wikidata-property-id>
["lang"] = { -- language for output digits (both en and local digits are always accepted for input)
["en"] = "opt_lang_en", -- use en digits for numbers, regardless of local language
["local"] = "opt_lang_local", -- use local digits for numbers (default, although config can change default to en)
},
["lk"] = {
["in"] = "in", -- link LHS unit name or symbol
["off"] = "off", -- do not link: same as default except for hand unit
["on"] = "on", -- link all unit names or symbols (but not twice for the same unit)
["out"] = "out", -- link RHS unit name or symbol
},
["near"] = {
["5"] = "opt_round=5?", -- round output value to nearest 5
},
["order"] = {
["flip"] = "opt_flip", -- reverse order of input/output
["out"] = "opt_order_out", -- do not show input; instead, use order in output combination, with the first output shown as the input
},
-- qid=x is handled as a special case: x should be a Wikidata Q item identifier.
-- qual=x is handled as a special case: x should be a Wikidata Q item identifier.
["round"] = {
["0.5"] = "opt_round=0.5", -- round output value to nearest 0.5
["5"] = "opt_round=5", -- round output value to nearest 5
["10"] = "opt_round=10", -- round output value to nearest 10 (same as but clearer than "|-1")
["25"] = "opt_round=25", -- round output value to nearest 25
["50"] = "opt_round=50", -- round output value to nearest 50
["each"] = "opt_round_each", -- using default precision in a range, round each output separately (default uses highest precision of each item in range)
},
-- sigfig=x is handled as a special case: x must be an integer (possibly in local language) = 1 or more
["sortable"] = {
["off"] = "", -- ignored (off is the default)
["in"] = "opt_sortable_on?", -- same as "on"
["on"] = "opt_sortable_on", -- output sort key for use in a sortable table, based on value from converting to a standard base unit
["out"] = "opt_sortable_on?", -- same as "on"
},
["sp"] = {
["us"] = "opt_sp_us", -- use U.S. spelling (like "meter" instead of default "metre")
},
["spell"] = { -- only English spelling is supported; not scientific notation; only some fractions
["in"] = "opt_spell_in", -- spell input value in words
["In"] = "opt_spell_in, opt_spell_upper", -- spell input value in words with first letter uppercase
["on"] = "opt_spell_in, opt_spell_out", -- spell input and output values in words
["On"] = "opt_spell_in, opt_spell_out, opt_spell_upper", -- same, with first letter of first word in result uppercase
},
-- stylein=x is handled as a special case: x can be any text
-- styleout=x is handled as a special case: x can be any text
}
return {
SIprefixes = SIprefixes,
all_categories = all_categories,
all_messages = all_messages,
currency = { ['$'] = true, ['£'] = true },
customary_units = customary_units,
disp_joins = disp_joins,
en_option_name = en_option_name,
en_option_value = en_option_value,
eng_scales = eng_scales,
ranges = ranges,
translation_table = translation_table,
}
eb3dpyvqnnjghnr8inyyf5rod6cj6pr
Module:Deprecated
828
7533
104297
2026-09-11T16:22:45Z
咽頭べさ
6149
Created page with "--- Marks items as deprecated, and provides a warning when they are called. -- -- ## Limitations ## -- This module will not provide a warning if a deprecated item is called from -- within the same module that this module is used. -- -- @release alpha -- @author [[User:Awesome_Aasim|Awesome Aasim]] -- @function deprecated -- @param {table} p package frame -- @param deprecatedTable -- @return package return function(p, deprecatedTable, replacement) local pckg = {} ---..."
104297
Scribunto
text/plain
--- Marks items as deprecated, and provides a warning when they are called.
--
-- ## Limitations ##
-- This module will not provide a warning if a deprecated item is called from
-- within the same module that this module is used.
--
-- @release alpha
-- @author [[User:Awesome_Aasim|Awesome Aasim]]
-- @function deprecated
-- @param {table} p package frame
-- @param deprecatedTable
-- @return package
return function(p, deprecatedTable, replacement)
local pckg = {}
--- Warn
-- @param {string} text warning text
function warn(text)
local tb = debug.traceback()
mw.log(text .. '\n' .. tb)
mw.addWarning(text .. tb:gsub("\n", "<br/>"):gsub("\t", " "))
end
if deprecatedTable == nil or deprecatedTable == true then
deprecatedTable = {}
for k,_ in pairs(p) do
deprecatedTable[k] = {
deprecated = true,
replacement = replacement or ""
}
end
end
setmetatable(pckg, {
__index = function(t, index)
if deprecatedTable[index] and deprecatedTable[index]["deprecated"] then
warn(
mw.ustring.format(
"Deprecated member <code>%s</code> called. ", index
) .. (
deprecatedTable[index]["replacement"]
and mw.ustring.format("Please %s instead.", deprecatedTable[index]["replacement"])
or ''
)
)
end
return p[index]
end
})
return pckg
end
my1p1xp76qgfnvctx8pevv0cvz0hjyb
Module:Location map
828
7534
104298
2026-09-11T16:26:16Z
咽頭べさ
6149
Created page with "require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name..."
104298
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error('The name of the location map definition to use must be specified', 2)
end
local moduletitle = mw.title.new('Module:Location map/data/' .. map)
if not moduletitle then
error(string.format('%q is not a valid name for a location map definition', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Module:Location map/data/' .. map)
return function(name, params)
if name == nil then
return 'Module:Location map/data/' .. map
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2)
elseif minutes then
error('Minutes can only be provided with DMS degrees for ' .. direction, 2)
elseif seconds then
error('Seconds can only be provided with DMS degrees for ' .. direction, 2)
elseif hemisphere then
error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not minutes then
error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2)
elseif not degrees then
if minutes then
error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2)
elseif hemisphere then
error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2)
elseif minutes and not tonumber(minutes) then
error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not tonumber(seconds) then
error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then
mw.log('Malformed coordinates value')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Malformed coordinates value', 2)
end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief then
local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') -- image1 to image99
if digits then
local imageDigits = map('image' .. digits)
if imageDigits ~= '' then return imageDigits end
end
local yesNo = require('Module:Yesno')
if yesNo(args.relief,true) then
local image1 = map('image1')
if image1 ~= '' then return image1 end
end
end
return map('image')
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noresize thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'floatleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'floatright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Removed parameter caption_undefined used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with a name containing a pipe]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv, label_size)
return mw.html.create('div')
:addClass('od')
:addClass('notheme') -- T236137
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('width:' .. label_width .. 'em')
local distance = round(marksize / 2 + 1)
if position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
args[1] = 'World'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]')
end
end
if not longitude then
error('No value was provided for longitude')
elseif not latitude then
error('No value was provided for latitude')
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Removed parameter used in invocation.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8
local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local label_size = args.label_size or 91
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size))
end
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.infobox_pushpin_map(frame)
--This function is designed to be invoked from an infobox template
--* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters
-- in the outer infobox, settable by editors
--* Others are meant to be "hidden" (e.g., only set inside the infobox template code)
-- First get the combined arguments from both parent and invocation frame
local raw_args = getArgs(frame,{parentFirst=true})
--If no map is supplied, return.
if not raw_args['pushpin_map'] then
return
end
-- Now get arguments from just the invocation frame
local frame_args = getArgs(frame,{frameOnly=true})
-- parsed_args will have the resulting merged parameters
local parsed_args = {}
-- Default to using wikidata coodinates if no other coordiantes supplied.
if raw_args.useWikidata == nil then
parsed_args.useWikidata = true
else
parsed_args.useWikidata = raw_args.useWikidata
end
-- Parse the arguments
parsed_args[1] = raw_args['pushpin_map']
parsed_args.float = frame_args.float or 'center'
parsed_args.border = frame_args.border or 'infobox'
parsed_args.default_width = frame_args.default_width
parsed_args.max_width = frame_args.max_width
parsed_args.coordinates = raw_args['coordinates']
parsed_args.caption = raw_args['pushpin_caption']
parsed_args.relief = raw_args['pushpin_relief']
parsed_args.label = raw_args['pushpin_label']
parsed_args.label_size = raw_args['pushpin_label_size']
parsed_args.position = raw_args['pushpin_label_position']
parsed_args.mark = raw_args['pushpin_mark']
parsed_args.marksize = raw_args['pushpin_mark_size']
parsed_args.alt = raw_args['pushpin_alt']
parsed_args.background = raw_args['pushpin_background']
parsed_args.width = raw_args['pushpin_map_size']
local map = {}
local caption_list = {}
for mapname in string.gmatch(parsed_args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if parsed_args['caption'] then
for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
if #map == 1 then
map = map[1]
if not parsed_args.caption then
parsed_args.caption = 'Location within ' .. map('name')
end
end
if type(map) == 'table' then
mw.log('----')
mw.logObject(map)
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
elseif not parsed_args.caption then
-- Set a default caption for each of the multiple maps
for i=1, #map do
caption_list[#caption_list + 1] = 'Location within '.. map[i]('name')
end
end
local outputs = {}
parsed_args.autoSwitcherLabel = true
for k,v in ipairs(map) do
parsed_args.caption = caption_list[k]
outputs[k] = p.main(frame, parsed_args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map)
end
end
function p.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p
3pqbnkg8pemwulwnvka0szt6hqc0tii
Module:Infobox/styles.css
828
7535
104300
2026-09-11T16:31:38Z
咽頭べさ
6149
Created page with "/* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */ @media (min-width: 640px) { .infobox {..."
104300
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete.
* Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */
@media (min-width: 640px) {
.infobox {
/* @noflip */
margin-left: 1em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
width: 22em;
}
}
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
color:inherit;
}
.infobox-3cols-child {
margin: -3px;
}
.infobox .navbar {
font-size: 100%;
}
/* remove when infobox is not a table anymore */
.infobox-hiddenrow,
/* we mean it, Minerva. but also Vector 2022 in the future at some point */
body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow {
display: none;
}
/* Dark theme: [[William Wragg]], [[Coral Castle]] */
@media screen {
html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] {
background: #1f1f23 !important;
/* switch with var( --color-base ) when supported. */
color: #f8f9fa;
}
}
/* Since infobox is a table, many infobox templates take advantage of this to
* add columns and rows to the infobox itself rather than as part of a new table
* inside them. This class should be discouraged and removed on the long term,
* but allows us to at least identify these tables going forward
* Currently in use on: [[Module:Infobox3cols]]
* Fixes issue described in [[phab:F55300125]] on Vector 2022.
*/
@media (min-width: 640px) {
body.skin--responsive .infobox-table {
display: table !important;
}
body.skin--responsive .infobox-table > caption {
display: table-caption !important;
}
body.skin--responsive .infobox-table > tbody {
display: table-row-group;
}
body.skin--responsive .infobox-table th,
body.skin--responsive .infobox-table td {
padding-left: inherit;
padding-right: inherit;
}
}
bi1nsztkx4350a55cuzjhaotvp5h216
पटिरूप:Str left
10
7536
104302
2026-09-11T16:34:01Z
咽頭べさ
6149
Created page with "<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude>"
104302
wikitext
text/x-wiki
<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
3rrdme1fpv80h1kdk9b7zwlkqd34dfk
Module:Coordinates
828
7537
104303
2026-09-11T16:38:35Z
咽頭べさ
6149
Created page with "--[[ This module is intended to replace the functionality of {{Coord}} and related templates. It provides several methods, including {{#invoke:Coordinates | coord }} : General function formatting and displaying coordinate values. {{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal degree values to DMS format. {{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format to decimal degree format. {{#invoke:Coordinates | link }..."
104303
Scribunto
text/plain
--[[
This module is intended to replace the functionality of {{Coord}} and related
templates. It provides several methods, including
{{#invoke:Coordinates | coord }} : General function formatting and displaying
coordinate values.
{{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal
degree values to DMS format.
{{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format
to decimal degree format.
{{#invoke:Coordinates | link }} : Export the link used to reach the tools
]]
require('strict')
local math_mod = require("Module:Math")
local coordinates = {};
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true);
local current_page = mw.title.getCurrentTitle()
local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' );
local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '¶ms='
--[[ Helper function, replacement for {{coord/display/title}} ]]
local function displaytitle(coords)
return mw.getCurrentFrame():extensionTag{
name = 'indicator',
args = { name = 'coordinates' },
content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>'
}
end
--[[ Helper function, used in detecting DMS formatting ]]
local function dmsTest(first, second)
if type(first) ~= 'string' or type(second) ~= 'string' then
return nil
end
local s = (first .. second):upper()
return s:find('^[NS][EW]$') or s:find('^[EW][NS]$')
end
--[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Coord'
})
return coordinates[funcName](args, frame)
end
end
--[[ Helper function, handle optional args. ]]
local function optionalArg(arg, supplement)
return arg and arg .. supplement or ''
end
--[[
Formats any error messages generated for display
]]
local function errorPrinter(errors)
local result = ""
for i,v in ipairs(errors) do
result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />'
end
return result
end
--[[
Determine the required CSS class to display coordinates
Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself
default is the mode as specificied by the user when calling the {{coord}} template
mode is the display mode (dec or dms) that we will need to determine the css class for
]]
local function displayDefault(default, mode)
if default == "" then
default = "dec"
end
if default == mode then
return "geo-default"
else
return "geo-nondefault"
end
end
--[[
specPrinter
Output formatter. Takes the structure generated by either parseDec
or parseDMS and formats it for inclusion on Wikipedia.
]]
local function specPrinter(args, coordinateSpec)
local uriComponents = coordinateSpec["param"]
if uriComponents == "" then
-- RETURN error, should never be empty or nil
return "ERROR param was empty"
end
if args["name"] then
uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"])
end
local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">'
.. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> '
.. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>'
.. '</span>'
local lat = tonumber( coordinateSpec["dec-lat"] ) or 0
local geodeclat
if lat < 0 then
-- FIXME this breaks the pre-existing precision
geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S"
else
geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N"
end
local long = tonumber( coordinateSpec["dec-long"] ) or 0
local geodeclong
if long < 0 then
-- FIXME does not handle unicode minus
geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W"
else
geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E"
end
local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">'
.. geodeclat .. ' '
.. geodeclong
.. '</span>'
local geonumhtml = '<span class="geo">'
.. coordinateSpec["dec-lat"] .. '; '
.. coordinateSpec["dec-long"]
.. '</span>'
local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>'
.. '<span class="geo-multi-punct"> / </span>'
.. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">';
if not args["name"] then
inner = inner .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span></span>'
else
inner = inner .. '<span class="vcard">' .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span>'
.. '<span style="display:none"> (<span class="fn org">'
.. args["name"] .. '</span>)</span></span></span>'
end
local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css'
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = stylesheetLink }
} .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents ..
' ' .. inner .. ']</span>' .. '[[Category:Pages using gadget WikiMiniAtlas]]'
end
--[[ Helper function, convert decimal to degrees ]]
local function convert_dec2dms_d(coordinate)
local d = math_mod._round( coordinate, 0 ) .. "°"
return d .. ""
end
--[[ Helper function, convert decimal to degrees and minutes ]]
local function convert_dec2dms_dm(coordinate)
coordinate = math_mod._round( coordinate * 60, 0 );
local m = coordinate % 60;
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m )
end
--[[ Helper function, convert decimal to degrees, minutes, and seconds ]]
local function convert_dec2dms_dms(coordinate)
coordinate = math_mod._round( coordinate * 60 * 60, 0 );
local s = coordinate % 60
coordinate = math.floor( (coordinate - s) / 60 );
local m = coordinate % 60
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s )
end
--[[
Helper function, convert decimal latitude or longitude to
degrees, minutes, and seconds format based on the specified precision.
]]
local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
local coord = tonumber(coordinate)
local postfix
if coord >= 0 then
postfix = firstPostfix
else
postfix = secondPostfix
end
precision = precision:lower();
if precision == "dms" then
return convert_dec2dms_dms( math.abs( coord ) ) .. postfix;
elseif precision == "dm" then
return convert_dec2dms_dm( math.abs( coord ) ) .. postfix;
elseif precision == "d" then
return convert_dec2dms_d( math.abs( coord ) ) .. postfix;
end
end
--[[
Convert DMS format into a N or E decimal coordinate
]]
local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str)
local degrees = tonumber(degrees_str)
local minutes = tonumber(minutes_str) or 0
local seconds = tonumber(seconds_str) or 0
local factor = 1
if direction == "S" or direction == "W" then
factor = -1
end
local precision = 0
if seconds_str then
precision = 5 + math.max( math_mod._precision(seconds_str), 0 );
elseif minutes_str and minutes_str ~= '' then
precision = 3 + math.max( math_mod._precision(minutes_str), 0 );
else
precision = math.max( math_mod._precision(degrees_str), 0 );
end
local decimal = factor * (degrees+(minutes+seconds/60)/60)
return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based.
end
--[[
Checks input values to for out of range errors.
]]
local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong )
local errors = {};
lat_d = tonumber( lat_d ) or 0;
lat_m = tonumber( lat_m ) or 0;
lat_s = tonumber( lat_s ) or 0;
long_d = tonumber( long_d ) or 0;
long_m = tonumber( long_m ) or 0;
long_s = tonumber( long_s ) or 0;
if strong then
if lat_d < 0 then
table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"})
end
if long_d < 0 then
table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"})
end
--[[
#coordinates is inconsistent about whether this is an error. If globe: is
specified, it won't error on this condition, but otherwise it will.
For not simply disable this check.
if long_d > 180 then
table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"})
end
]]
end
if lat_d > 90 then
table.insert(errors, {source, "latitude degrees > 90"})
end
if lat_d < -90 then
table.insert(errors, {source, "latitude degrees < -90"})
end
if lat_m >= 60 then
table.insert(errors, {source, "latitude minutes >= 60"})
end
if lat_m < 0 then
table.insert(errors, {source, "latitude minutes < 0"})
end
if lat_s >= 60 then
table.insert(errors, {source, "latitude seconds >= 60"})
end
if lat_s < 0 then
table.insert(errors, {source, "latitude seconds < 0"})
end
if long_d >= 360 then
table.insert(errors, {source, "longitude degrees >= 360"})
end
if long_d <= -360 then
table.insert(errors, {source, "longitude degrees <= -360"})
end
if long_m >= 60 then
table.insert(errors, {source, "longitude minutes >= 60"})
end
if long_m < 0 then
table.insert(errors, {source, "longitude minutes < 0"})
end
if long_s >= 60 then
table.insert(errors, {source, "longitude seconds >= 60"})
end
if long_s < 0 then
table.insert(errors, {source, "longitude seconds < 0"})
end
return errors;
end
--[[
parseDec
Transforms decimal format latitude and longitude into the
structure to be used in displaying coordinates
]]
local function parseDec( lat, long, format )
local coordinateSpec = {}
local errors = {}
if not long then
return nil, {{"parseDec", "Missing longitude"}}
elseif not tonumber(long) then
return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}}
end
errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false );
coordinateSpec["dec-lat"] = lat;
coordinateSpec["dec-long"] = long;
local mode = coordinates.determineMode( lat, long );
coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dec"
end
return coordinateSpec, errors
end
--[[
parseDMS
Transforms degrees, minutes, seconds format latitude and longitude
into the a structure to be used in displaying coordinates
]]
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format )
local coordinateSpec, errors, backward = {}, {}
lat_f = lat_f:upper();
long_f = long_f:upper();
-- Check if specified backward
if lat_f == 'E' or lat_f == 'W' then
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true;
end
errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true );
if not long_d then
return nil, {{"parseDMS", "Missing longitude" }}
elseif not tonumber(long_d) then
return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }}
end
if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then
if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then
if lat_f:upper() == 'S' then
lat_d = '-' .. lat_d;
end
if long_f:upper() == 'W' then
long_d = '-' .. long_d;
end
return parseDec( lat_d, long_d, format );
end
end
coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f
coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f
coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}}
coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dms"
end
return coordinateSpec, errors, backward
end
--[[
Check the input arguments for coord to determine the kind of data being provided
and then make the necessary processing.
]]
local function formatTest(args)
local result, errors
local backward, primary = false, false
local function getParam(args, lim)
local ret = {}
for i = 1, lim do
ret[i] = args[i] or ''
end
return table.concat(ret, '_')
end
if not args[1] then
-- no lat logic
return errorPrinter( {{"formatTest", "Missing latitude"}} )
elseif not tonumber(args[1]) then
-- bad lat logic
return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} )
elseif not args[4] and not args[5] and not args[6] then
-- dec logic
result, errors = parseDec(args[1], args[2], args.format)
if not result then
return errorPrinter(errors);
end
-- formatting for geohack: geohack expects D_N_D_E notation or D;D notation
-- wikiminiatlas doesn't support D;D notation
-- #coordinates parserfunction doesn't support negative decimals with NSWE
result.param = table.concat({
math.abs(tonumber(args[1])),
((tonumber(args[1]) or 0) < 0) and 'S' or 'N',
math.abs(tonumber(args[2])),
((tonumber(args[2]) or 0) < 0) and 'W' or 'E',
args[3] or ''}, '_')
elseif dmsTest(args[4], args[8]) then
-- dms logic
result, errors, backward = parseDMS(args[1], args[2], args[3], args[4],
args[5], args[6], args[7], args[8], args.format)
if args[10] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 9)
elseif dmsTest(args[3], args[6]) then
-- dm logic
result, errors, backward = parseDMS(args[1], args[2], nil, args[3],
args[4], args[5], nil, args[6], args['format'])
if args[8] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 7)
elseif dmsTest(args[2], args[4]) then
-- d logic
result, errors, backward = parseDMS(args[1], nil, nil, args[2],
args[3], nil, nil, args[4], args.format)
if args[6] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 5)
else
-- Error
return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]'
end
result.name = args.name
local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'}
for _, v in ipairs(extra_param) do
if args[v] then
table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' })
end
end
local ret = specPrinter(args, result)
if #errors > 0 then
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]'
end
return ret, backward
end
--[[
Generate Wikidata tracking categories.
]]
local function makeWikidataCategories(qid)
local ret
local qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase and current_page.namespace == 0 then
if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then
local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype
if snaktype == 'value' then
-- coordinates exist both here and on Wikidata, and can be compared.
ret = 'Coordinates on Wikidata'
elseif snaktype == 'somevalue' then
ret = 'Coordinates on Wikidata set to unknown value'
elseif snaktype == 'novalue' then
ret = 'Coordinates on Wikidata set to no value'
end
else
-- We have to either import the coordinates to Wikidata or remove them here.
ret = 'Coordinates not on Wikidata'
end
end
if ret then
return string.format('[[Category:%s]]', ret)
else
return ''
end
end
--[[
Parse coordinates entered as a single string
]]
local function text2coord(text)
if type(text) ~= 'string' then return end
local coords = {}
local numTerms = 0
local parts
local function assign(k, number, start, pos)
if number then
coords[start + pos - 1] = number
if k == 1 then
numTerms = pos
elseif numTerms < pos then -- more terms in long than lat
return false
end
elseif numTerms >= pos then -- more terms in lat than long
return false
end
return true
end
text = mw.ustring.gsub(mw.text.trim(text:uupper()), "[*′″]", {['*'] = '°', ['′'] = "'", ['″'] = '"'})
for _, regex in ipairs({
"^([+%-%d.°'\"NS%s]+),%s*([+%-%d.°'\"EW%s]+)$", --split by commas
"^([+%-%d.°'\"%s]+[NS])%s*([+%-%d.°'\"%s]+[EW])$", --split by N/S
"^([+%-%d.°'%s]+\")%s*([+%-%d.°'%s]+\")$", --split by "
"^([+%-%d.°%s]+')%s*([+%-%d.°%s]+')$", --split by '
"^([+%-%d.%s]+°)%s*([+%-%d.%s]+°)$", --split by °
"^([+%-%d.]+)%s+([+%-%d.]+)$" --split by space
}) do
local lat, long = string.match(text, regex)
if lat and long then
parts = {mw.text.trim(lat), mw.text.trim(long)}
break
end
end
if not parts then return end
local SW = {"S", "W"}
local NE = {"N", "E"}
for k, v in ipairs(parts) do
local number
local start = k + numTerms
-- Find or create N, S, E, and W
local dir = v:match("([NSEW])$")
if dir then
v = v:sub(1,-2)
elseif v:sub(1,1) == '-' then
v = v:sub(2)
dir = SW[k]
else
dir = NE[k]
end
-- attempt to convert text to number
number = tonumber(v)
if number then
-- Single number, assign it to the position "start" in the "coords" array
if not assign(k, number, start, 1) then
return
end
-- attempt to convert dms to decimal
elseif string.match(v, "°") then
for pos, regex in ipairs({
"^%s*([+%-%d.]+)%s*°[^°]*$", --degrees
"^[^°']+°%s*([%d.]+)%s*'[^°']*$", --minutes
"^[^'\"]+'%s*([%d.]+)%s*\"[^'\"]*$" --seconds
}) do
-- Assign component to a position in the "coords" array determined
-- by "start" and "pos", and increment "numTerms" if this is latitude
if not assign(k, tonumber(string.match(v, regex)), start, pos) then
return
end
end
end
if coords[start] == nil then return end
coords[start + numTerms] = dir
end
return coords
end
--[[
link
Simple function to export the coordinates link for other uses.
Usage:
{{#invoke:Coordinates | link }}
]]
function coordinates.link(frame)
return coord_link;
end
--[[
dec2dms
Wrapper to allow templates to call dec2dms directly.
Usage:
{{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix |
negative_suffix | precision }}
decimal_coordinate is converted to DMS format. If positive, the positive_suffix
is appended (typical N or E), if negative, the negative suffix is appended. The
specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail
to use.
]]
coordinates.dec2dms = makeInvokeFunc('_dec2dms')
function coordinates._dec2dms(args)
local coordinate = args[1]
local firstPostfix = args[2] or ''
local secondPostfix = args[3] or ''
local precision = args[4] or ''
return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
end
--[[
Helper function to determine whether to use D, DM, or DMS
format depending on the precision of the decimal input.
]]
function coordinates.determineMode( value1, value2 )
local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) );
if precision <= 0 then
return 'd'
elseif precision <= 2 then
return 'dm';
else
return 'dms';
end
end
--[[
dms2dec
Wrapper to allow templates to call dms2dec directly.
Usage:
{{#invoke:Coordinates | dms2dec | direction_flag | degrees |
minutes | seconds }}
Converts DMS values specified as degrees, minutes, seconds too decimal format.
direction_flag is one of N, S, E, W, and determines whether the output is
positive (i.e. N and E) or negative (i.e. S and W).
]]
coordinates.dms2dec = makeInvokeFunc('_dms2dec')
function coordinates._dms2dec(args)
local direction = args[1]
local degrees = args[2]
local minutes = args[3]
local seconds = args[4]
return convert_dms2dec(direction, degrees, minutes, seconds)
end
--[[
coord
Main entry point for Lua function to replace {{coord}}
Usage:
{{#invoke:Coordinates | coord }}
{{#invoke:Coordinates | coord | lat | long }}
{{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }}
...
Refer to {{coord}} documentation page for many additional parameters and
configuration options.
Note: This function provides the visual display elements of {{coord}}. In
order to load coordinates into the database, the {{#coordinates:}} parser
function must also be called, this is done automatically in the Lua
version of {{coord}}.
]]
coordinates.coord = makeInvokeFunc('_coord')
function coordinates._coord(args)
if not tonumber(args[1]) then
local parsed = text2coord(args[1])
if parsed then -- full lat/long entered as a single string
for i = 2, #args do args[#parsed + i - 1] = args[i] end
for i, v in ipairs(parsed) do args[i] = v end
elseif not args[2] then -- look for coordinates from wikidata
args[3] = args[1]; args[1] = nil
local entity = mw.wikibase.getEntityObject(args.qid)
if entity
and entity.claims
and entity.claims.P625
and entity.claims.P625[1].mainsnak.snaktype == 'value'
then
local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
if precision then
precision = -math_mod._round(math.log(precision)/math.log(10),0)
args[1] = math_mod._round(args[1],precision)
args[2] = math_mod._round(args[2],precision)
end
end
end
end
local contents, backward = formatTest(args)
local Notes = args.notes or ''
local Display = args.display and args.display:lower() or 'inline'
-- it and ti are short for inline,title and title,inline
local function isInline(s)
-- Finds whether coordinates are displayed inline.
return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti'
end
local function isInTitle(s)
-- Finds whether coordinates are displayed in the title.
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti'
end
local function coord_wrapper(in_args)
-- Calls the parser function {{#coordinates:}}.
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or ''
end
local text = ''
if isInline(Display) then
text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>'
end
if isInTitle(Display) then
-- Add to output since indicator content is invisible to Lua later on
if not isInline(Display) then
text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>'
end
text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid)
end
if not args.nosave then
local page_title, count = mw.title.getCurrentTitle(), 1
if backward then
local tmp = {}
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end
tmp.count = count; count = 2*(count-1)
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end
for i, v in ipairs(tmp) do args[i] = v end
else
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end
end
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end
args.notes, args.format, args.display = nil
text = text .. coord_wrapper(args)
end
return text
end
--[[
coord2text
Extracts a single value from a transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }}
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source
]]
function coordinates._coord2text(coord,type)
if coord == '' or type == '' or not type then return nil end
type = mw.text.trim(type)
if type == 'lat' or type == 'long' then
local coordString = mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]')
if not coordString then
return nil
end
local result = mw.text.split(coordString, ' ')
local negative
if type == 'lat' then
result, negative = result[1], 'S'
else
result, negative = result[2], 'W'
end
if not result then
return nil
end
result = mw.text.split(result, '°')
if not result[1] then
return nil
end
if result[2] == negative then result[1] = '-'..result[1] end
return result[1]
else
return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]')
end
end
function coordinates.coord2text(frame)
return coordinates._coord2text(frame.args[1],frame.args[2]) or ''
end
--[[
coordinsert
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }}
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation.
]]
function coordinates.coordinsert(frame)
-- for the 2nd or later integer parameter (the first is the coord template, as above)
for i, v in ipairs(frame.args) do
if i ~= 1 then
-- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then
-- find from the params= up to the first possibly-present underscore
-- and append the i_th coordinsert parameter and a space
-- IDK why we're adding a space but it does seem somewhat convenient
frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ')
end
end
end
if frame.args.name then
-- if we can't find the vcard class
if not mw.ustring.find(frame.args[1], '<span class="vcard">') then
-- take something that looks like a coord template and add the vcard span with class and fn org class
local namestr = frame.args.name
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)',
'%1<span class="vcard">%2<span style="display:none"> (<span class="fn org">' .. namestr .. '</span>)</span></span>%3'
)
-- then find anything from coordinates parameters to the 'end' and attach the title parameter
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(¶ms=[^&"<>%[%] ]*) ',
'%1&title=' .. mw.uri.encode(namestr) .. ' '
)
end
end
-- replace the existing indicator with a new indicator using the modified content
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127',
function (inline, coord) return inline .. displaytitle(coord) end
)
return frame.args[1]
end
return coordinates
mgr040y9bhe26jrkzioi6ulvlqhvehy
Module:Coordinates/styles.css
828
7538
104304
2026-09-11T16:39:28Z
咽頭べさ
6149
Created page with "/* {{pp-template}} */ /* Geographical coordinates defaults. The classes "geo", "longitude", and "latitude" are used by the [[Geo microformat]]. */ .geo-default, .geo-dms, .geo-dec { display: inline; } .geo-nondefault, .geo-multi-punct, .geo-inline-hidden { display: none; } .longitude, .latitude { white-space: nowrap; }"
104304
sanitized-css
text/css
/* {{pp-template}} */
/* Geographical coordinates defaults. The classes "geo", "longitude", and
"latitude" are used by the [[Geo microformat]]. */
.geo-default,
.geo-dms,
.geo-dec {
display: inline;
}
.geo-nondefault,
.geo-multi-punct,
.geo-inline-hidden {
display: none;
}
.longitude,
.latitude {
white-space: nowrap;
}
372gk2cap99kasnuwl2084jfakikzgw
Module:Location map/data/मरम्मरट्ठं
828
7539
104305
2026-09-11T16:42:29Z
咽頭べさ
6149
Created page with "return { name = 'मरम्मरट्ठं', top = 29, bottom = 9, left = 92, right = 102, image = 'Myanmar location map.svg', image1 = 'Myanmar relief location map.jpg' }"
104305
Scribunto
text/plain
return {
name = 'मरम्मरट्ठं',
top = 29,
bottom = 9,
left = 92,
right = 102,
image = 'Myanmar location map.svg',
image1 = 'Myanmar relief location map.jpg'
}
352va3v5g6055yxnmt6ed615dhq1hwr
पटिरूप:Coord
10
7540
104306
2026-09-11T16:44:06Z
咽頭べさ
6149
Created page with "<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude> {{Documentation}} </noinclude>"
104306
wikitext
text/x-wiki
<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
6i9qumv8dg5i36c6rmqgkpw00d4mt1p
पटिरूप:Tooltip
10
7541
104308
2026-09-11T16:47:04Z
咽頭べさ
6149
Created page with "<abbr title="{{#tag:nowiki|{{{2|}}}}}">{{#switch: {{{3|}}} | u | unicode | Unicode = {{ unicode |{{{1|}}}}} | i | IPA = {{ IPA |{{{1|}}}}} | {{{1|}}} }}</abbr><noinclude> {{Documentation}} </noinclude>"
104308
wikitext
text/x-wiki
<abbr title="{{#tag:nowiki|{{{2|}}}}}">{{#switch: {{{3|}}}
| u | unicode | Unicode = {{ unicode |{{{1|}}}}}
| i | IPA = {{ IPA |{{{1|}}}}}
| {{{1|}}} }}</abbr><noinclude>
{{Documentation}}
</noinclude>
9noaekludhnfg36syj56ketp2rn0g30
104309
104308
2026-09-11T16:47:22Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:Abbr]] to [[पटिरूप:Tooltip]]
104308
wikitext
text/x-wiki
<abbr title="{{#tag:nowiki|{{{2|}}}}}">{{#switch: {{{3|}}}
| u | unicode | Unicode = {{ unicode |{{{1|}}}}}
| i | IPA = {{ IPA |{{{1|}}}}}
| {{{1|}}} }}</abbr><noinclude>
{{Documentation}}
</noinclude>
9noaekludhnfg36syj56ketp2rn0g30
पटिरूप:Abbr
10
7542
104310
2026-09-11T16:47:22Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:Abbr]] to [[पटिरूप:Tooltip]]
104310
wikitext
text/x-wiki
#REDIRECT [[पटिरूप:Tooltip]]
ezdf4nvd75ovsfzs0sbva40k0b0fxzz
Module:Math
828
7543
104311
2026-09-11T16:49:30Z
咽頭べさ
6149
Created page with "--[[ This module provides a number of basic mathematical operations. ]] local yesno, getArgs -- lazily initialized local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules. local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua. --[[ Helper functions used to avoid redundant code. ]] local function..."
104311
Scribunto
text/plain
--[[
This module provides a number of basic mathematical operations.
]]
local yesno, getArgs -- lazily initialized
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.
--[[
Helper functions used to avoid redundant code.
]]
local function err(msg)
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end
local function unpackNumberArgs(args)
-- Returns an unpacked list of arguments specified with numerical keys.
local ret = {}
for k, v in pairs(args) do
if type(k) == 'number' then
table.insert(ret, v)
end
end
return unpack(ret)
end
local function makeArgArray(...)
-- Makes an array of arguments from a list of arguments that might include nils.
local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
local nums = {} -- Stores the numbers of valid numerical arguments.
local ret = {}
for k, v in pairs(args) do
v = p._cleanNumber(v)
if v then
nums[#nums + 1] = k
args[k] = v
end
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[#ret + 1] = args[num]
end
return ret
end
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
ret = func(ret, val)
end
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
--[[
random
Generate a random number
Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]
function wrap.random(args)
local first = p._cleanNumber(args[1])
local second = p._cleanNumber(args[2])
return p._random(first, second)
end
function p._random(first, second)
math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
if first and second then
if first <= second then -- math.random doesn't allow the first number to be greater than the second.
return math.random(first, second)
end
elseif first then
return math.random(first)
else
return math.random()
end
end
--[[
order
Determine order of magnitude of a number
Usage:
{{#invoke: Math | order | value }}
]]
function wrap.order(args)
local input_string = (args[1] or args.x or '0');
local input_number = p._cleanNumber(input_string);
if input_number == nil then
return err('order of magnitude input appears non-numeric')
else
return p._order(input_number)
end
end
function p._order(x)
if x == 0 then return 0 end
return math.floor(math.log10(math.abs(x)))
end
--[[
precision
Detemines the precision of a number using the string representation
Usage:
{{ #invoke: Math | precision | value }}
]]
function wrap.precision(args)
local input_string = (args[1] or args.x or '0');
local trap_fraction = args.check_fraction;
if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
if pos ~= nil then
if string.find(input_string, '/', pos + 1, true) == nil then
local denominator = string.sub(input_string, pos+1, -1);
local denom_value = tonumber(denominator);
if denom_value ~= nil then
return math.log10(denom_value);
end
end
end
end
local _, clean_string = p._cleanNumber(input_string);
if clean_string == nil then
return err('precision input appears non-numeric')
else
return p._precision(clean_string)
end
end
function p._precision(x)
if type(x) == 'number' then
x = tostring(x)
end
local result = 0;
--subtract exponent
local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$")
if coefficient then
result = result - (tonumber(exponent) or 0)
x = coefficient
end
--add decimal places
local i, j = x:find('%..*$')
if i then
result = result + (j - i)
return result
end
--subtract trailing zeroes
i, j = x:find('[^0]0+$')
if i then
result = result - (j - i)
end
return result
end
--[[
max
Finds the maximum argument
Usage:
{{#invoke:Math| max | value1 | value2 | ... }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.max(args)
return p._max(unpackNumberArgs(args))
end
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if max_value then
return max_value
end
end
--[[
median
Find the median of set of numbers
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
if count == 0 then
return 0
end
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
--[[
min
Finds the minimum argument
Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}
When used with no arguments, it takes its input from the parent
frame. Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.min(args)
return p._min(unpackNumberArgs(args))
end
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if min_value then
return min_value
end
end
--[[
sum
Finds the sum
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
function p._sum(...)
local sums = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
--[[
average
Finds the average
Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.average(args)
return p._average(unpackNumberArgs(args))
end
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
if not sum then
return 0
else
return sum / count
end
end
--[[
round
Rounds a number to specified precision
Usage:
{{#invoke:Math | round | value | precision }}
--]]
function wrap.round(args)
local value = p._cleanNumber(args[1] or args.value or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
return err('round input appears non-numeric')
else
return p._round(value, precision)
end
end
function p._round(value, precision)
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
--[[
mod
Implements the modulo operator
Usage:
{{#invoke:Math | mod | x | y }}
--]]
function wrap.mod(args)
local x = p._cleanNumber(args[1])
local y = p._cleanNumber(args[2])
if not x then
return err('first argument to mod appears non-numeric')
elseif not y then
return err('second argument to mod appears non-numeric')
else
return p._mod(x, y)
end
end
function p._mod(x, y)
local ret = x % y
if not (0 <= ret and ret < y) then
ret = 0
end
return ret
end
--[[
gcd
Calculates the greatest common divisor of multiple numbers
Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]
function wrap.gcd(args)
return p._gcd(unpackNumberArgs(args))
end
function p._gcd(...)
local function findGcd(a, b)
local r = b
local oldr = a
while r ~= 0 do
local quotient = math.floor(oldr / r)
oldr, r = r, oldr - quotient * r
end
if oldr < 0 then
oldr = oldr * -1
end
return oldr
end
local result = fold(findGcd, ...)
return result
end
--[[
precision_format
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
Usage:
{{#invoke: Math | precision_format | number | precision }}
]]
function wrap.precision_format(args)
local value_string = args[1] or 0
local precision = args[2] or 0
return p._precision_format(value_string, precision)
end
function p._precision_format(value_string, precision)
-- For access to Mediawiki built-in formatter.
local lang = mw.getContentLanguage();
local value
value, value_string = p._cleanNumber(value_string)
precision = p._cleanNumber(precision)
-- Check for non-numeric input
if value == nil or precision == nil then
return err('invalid input when rounding')
end
local abs_value = math.abs(value)
local current_precision = p._precision(value)
local order = p._order(value)
-- Due to round-off effects it is neccesary to limit the returned precision under
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
precision = 13 - order;
end
end
-- If rounding off, truncate extra digits
if precision < current_precision then
value = p._round(value, precision)
abs_value = math.abs(value)
current_precision = p._precision(value)
end
local formatted_num = lang:formatNum(abs_value)
-- Handle cases requiring scientific notation
if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then
value = value * (10 ^ (-order))
abs_value = math.abs(value)
current_precision = current_precision + order
precision = precision + order
formatted_num = lang:formatNum(abs_value)
else
order = 0;
end
-- Use proper unary minus sign rather than ASCII default
formatted_num = ((value < 0) and '−' or '') .. formatted_num
-- Pad with zeros, if needed
if current_precision < precision then
local padding
if current_precision <= 0 then
if precision > 0 then
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
padding = precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
end
-- Add exponential notation, if necessary.
if order ~= 0 then
-- Use proper unary minus sign rather than ASCII default
if order < 0 then
order = '−' .. lang:formatNum(math.abs(order))
else
order = lang:formatNum(order)
end
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
end
return formatted_num
end
--[[
divide
Implements the division operator
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
]]
function p._cleanNumber(number_string, unformat)
if type(number_string) == 'number' then
-- We were passed a number, so we don't need to do any processing.
return number_string, tostring(number_string)
elseif type(number_string) ~= 'string' or not number_string:find('%S') then
-- We were passed a non-string or a blank string, so exit.
return nil, nil;
end
-- Attempt basic conversion
local number = tonumber(number_string)
-- If failed, try unformatting the number_string
if unformat and number == nil then
-- Cannot use mw.language.getContentLanguage():parseFormattedNumber()
-- because, unlike {{formatnum:|R}}, it won't ignore operators (it
-- would return an error on "1,234+1,234" instead of "1234+1234")
number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"})
number = tonumber(number_string)
end
-- If failed, attempt to evaluate input as an expression
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
if success then
number = tonumber(result)
number_string = tostring(number)
else
number = nil
number_string = nil
end
else
number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
if number_string:find('^%-?0[xX]') then
-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
number_string = tostring(number)
end
end
return number, number_string
end
--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]
local mt = { __index = function(_, k)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end }
return setmetatable(p, mt)
f4r823qxvpkct3eikmvj99wyjq9cjkm
Module:Location map/styles.css
828
7544
104312
2026-09-11T16:50:51Z
咽頭べさ
6149
Created page with "/* {{pp|small=yes}} */ .locmap .od { position: absolute; } .locmap .id { position: absolute; line-height: 0; } .locmap .l0 { font-size: 0; position: absolute; } .locmap .pv { line-height: 110%; position: absolute; text-align: center; } .locmap .pl { line-height: 110%; position: absolute; top: -0.75em; text-align: right; } .locmap .pr { line-height: 110%; position: absolute; top: -0.75em; text-align: left; } .locmap .pv > div { display: inline; pad..."
104312
sanitized-css
text/css
/* {{pp|small=yes}} */
.locmap .od {
position: absolute;
}
.locmap .id {
position: absolute;
line-height: 0;
}
.locmap .l0 {
font-size: 0;
position: absolute;
}
.locmap .pv {
line-height: 110%;
position: absolute;
text-align: center;
}
.locmap .pl {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: right;
}
.locmap .pr {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: left;
}
.locmap .pv > div {
display: inline;
padding: 1px;
}
.locmap .pl > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: right;
}
.locmap .pr > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: left;
}
/* Dark mode theme: */
@media screen {
html.skin-theme-clientpref-night .od,
html.skin-theme-clientpref-night .od .pv > div,
html.skin-theme-clientpref-night .od .pl > div,
html.skin-theme-clientpref-night .od .pr > div {
/* Use !important to override any infobox rules */
background: #fff !important;
color: #000 !important;
}
html.skin-theme-clientpref-night .locmap img {
filter: grayscale(0.6);
}
/* Special handling for maps inside infoboxes
* [[Module talk:Location map#Map label background bug in dark mode]]
*/
html.skin-theme-clientpref-night .infobox-full-data .locmap div {
background: transparent !important;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .locmap img {
filter: grayscale(0.6);
}
html.skin-theme-clientpref-os .od,
html.skin-theme-clientpref-os .od .pv > div,
html.skin-theme-clientpref-os .od .pl > div,
html.skin-theme-clientpref-os .od .pr > div {
/* Use !important to override any infobox rules */
background: white !important;
color: #000 !important;
}
html.skin-theme-clientpref-os .infobox-full-data .locmap div {
background: transparent !important;
}
}
rs1zb23dpoja6q2k5yakw4kskmcnf7l
Module:Citation/CS1/styles.css
828
7545
104314
2026-09-11T17:33:41Z
咽頭べさ
6149
Created page with "/* Protection icon the following line controls the page-protection icon in the upper right corner it must remain within this comment {{sandbox other||{{pp-template}}}} */ /* Overrides Some wikis do not override user agent default styles for HTML <cite> and <q>, unlike en.wp. On en.wp, keep these the same as [[MediaWiki:Common.css]] */ cite.citation { font-style: inherit; /* Remove italics for <cite> */ } .citation q { quotes: '"' '"' "'" "'"; /* Straight quote mark..."
104314
sanitized-css
text/css
/* Protection icon
the following line controls the page-protection icon in the upper right corner
it must remain within this comment
{{sandbox other||{{pp-template}}}}
*/
/* Overrides
Some wikis do not override user agent default styles for HTML <cite> and <q>,
unlike en.wp. On en.wp, keep these the same as [[MediaWiki:Common.css]]
*/
cite.citation {
font-style: inherit; /* Remove italics for <cite> */
}
.citation q {
quotes: '"' '"' "'" "'"; /* Straight quote marks for <q> */
}
/* ID and URL access
Both core and Common.css have selector .mw-parser-output a[href$=".pdf"].external
for PDF pages. All TemplateStyles pages are hoisted to .mw-parser-output. We need
to have specificity equal to a[href$=".pdf"].external for locks to override PDF icon.
the .id-lock-... selectors are for use by non-citation templates like {{Catalog lookup link}}
*/
.id-lock-free a,
.citation .cs1-lock-free a {
background: linear-gradient(transparent, transparent),
url(//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg)
right 0.1em center/9px no-repeat;
}
.id-lock-limited a,
.id-lock-registration a,
.citation .cs1-lock-limited a,
.citation .cs1-lock-registration a {
background: linear-gradient(transparent, transparent),
url(//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg)
right 0.1em center/9px no-repeat;
}
.id-lock-subscription a,
.citation .cs1-lock-subscription a {
background: linear-gradient(transparent, transparent),
url(//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg)
right 0.1em center/9px no-repeat;
}
.cs1-subscription,
.cs1-registration {
color: #555;
}
.cs1-subscription span,
.cs1-registration span {
border-bottom: 1px dotted;
cursor: help;
}
/* Wikisource
Wikisource icon when |chapter= or |title= is wikilinked to Wikisource
as in cite wikisource
*/
.cs1-ws-icon a {
background: linear-gradient(transparent, transparent),
url(//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg)
right 0.1em center/12px no-repeat;
}
/* Errors and maintenance */
code.cs1-code {
/* <code>...</code> style override: mediawiki's css definition is specified here:
https://git.wikimedia.org/blob/mediawiki%2Fcore.git/
69cd73811f7aadd093050dbf20ed70ef0b42a713/skins%2Fcommon%2FcommonElements.css#L199
*/
color: inherit;
background: inherit;
border: none; /* this maybe can be inherit. MDN says yes, code editor says no */
padding: inherit;
}
.cs1-hidden-error {
display: none;
font-size: 100%;
}
.cs1-visible-error {
font-size: 100%;
}
.cs1-maint {
display: none;
color: #33aa33;
margin-left: 0.3em;
}
/* Small text size
Set small text size in one place. 0.95 (here) * 0.9 (from references list) is
~0.85, which is the lower bound for size for accessibility. Old styling for this
was just 0.85. We could write the rule so that when this template is inside
references/reflist, only then does it multiply by 0.95; else multiply by 0.85 */
.cs1-subscription,
.cs1-registration,
.cs1-format {
font-size: 95%;
}
/* kerning */
.cs1-kern-left,
.cs1-kern-wl-left {
padding-left: 0.2em;
}
.cs1-kern-right,
.cs1-kern-wl-right {
padding-right: 0.2em;
}
/* selflinks – avoid bold font style when cs1|2 template links to the current page */
.citation .mw-selflink {
font-weight: inherit;
}
1m7rwqy4j4owuxl77ctkjt24he3uj8v
पटिरूप:Reflist/styles.css
10
7546
104315
2026-09-11T17:34:49Z
咽頭べさ
6149
Created page with "/* {{pp|small=yes}} */ /* can we remove the font size declarations? .references gets a font-size in * common.css that is always 90, and there is nothing else in reflist out in * the wild. May affect column sizes. */ .reflist { font-size: 90%; /* Default font-size */ margin-bottom: 0.5em; list-style-type: decimal; } .reflist .references { font-size: 100%; /* Reset font-size when nested in div.reflist */ margin-bottom: 0; /* Avoid dou..."
104315
sanitized-css
text/css
/* {{pp|small=yes}} */
/* can we remove the font size declarations? .references gets a font-size in
* common.css that is always 90, and there is nothing else in reflist out in
* the wild. May affect column sizes.
*/
.reflist {
font-size: 90%; /* Default font-size */
margin-bottom: 0.5em;
list-style-type: decimal;
}
.reflist .references {
font-size: 100%; /* Reset font-size when nested in div.reflist */
margin-bottom: 0; /* Avoid double margin when nested in div.reflist */
list-style-type: inherit; /* Enable custom list style types */
}
/* columns-2 and columns-3 are legacy for "2 or more" column view from when the
* template was implemented with column-count.
*/
.reflist-columns-2 {
column-width: 30em;
}
.reflist-columns-3 {
column-width: 25em;
}
/* Reset top margin for lists embedded in columns */
.reflist-columns {
margin-top: 0.3em;
}
.reflist-columns ol {
margin-top: 0;
}
/* Avoid elements breaking between columns */
.reflist-columns li {
page-break-inside: avoid; /* Removed from CSS in favor of break-inside c. 2020 */
break-inside: avoid-column;
}
.reflist-upper-alpha {
list-style-type: upper-alpha;
}
.reflist-upper-roman {
list-style-type: upper-roman;
}
.reflist-lower-alpha {
list-style-type: lower-alpha;
}
.reflist-lower-greek {
list-style-type: lower-greek;
}
.reflist-lower-roman {
list-style-type: lower-roman;
}
9pglv18rwto8wyb2wiymxh52wdd5ut0
Module:Message box/fmbox.css
828
7547
104318
2026-09-11T17:43:05Z
咽頭べさ
6149
Created page with "/* {{pp|small=y}} */ .fmbox { clear: both; margin: 0.2em 0; width: 100%; border: 1px solid #a2a9b1; background-color: #f8f9fa; /* Default "system" gray */ box-sizing: border-box; } .fmbox-warning { border: 1px solid #bb7070; /* Dark pink */ background-color: #ffdbdb; /* Pink */ } .fmbox-editnotice { background-color: transparent; } .fmbox .mbox-text { border: none; /* @noflip */ padding: 0.25em 0.9em; width: 100%; } .fmbox .mbox-image { border: no..."
104318
sanitized-css
text/css
/* {{pp|small=y}} */
.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
.fmbox-editnotice {
background-color: transparent;
}
.fmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.fmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.fmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
.fmbox .mbox-invalid-type {
text-align: center;
}
ticrusgmgm1z0863raje40vjnas1a3q
Module:Navbar/configuration
828
7548
104320
2026-09-11T17:47:05Z
咽頭べさ
6149
Created page with "return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Hlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = 'hlist', -- horizontal lis..."
104320
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Hlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['box_text'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
itag4bw69ebqpc0fw4hgkr4pkizazgr
पटिरूप:Hlist
10
7549
104323
2026-09-11T17:50:45Z
咽頭べさ
6149
Created page with "{{<includeonly>safesubst:</includeonly>#invoke:list|horizontal}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude>"
104323
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:list|horizontal}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
ihcdy525o8nnmq114czc48dpk6pnojd
पटिरूप:Category link with count
10
7550
104324
2026-09-11T17:52:53Z
咽頭べさ
6149
Created page with "[[:Category:{{{1}}}]] ({{PAGESINCATEGORY:{{{1}}}|{{{2|सब्ब}}}}})<noinclude> [[Category:Internal category-link templates]] </noinclude>"
104324
wikitext
text/x-wiki
[[:Category:{{{1}}}]] ({{PAGESINCATEGORY:{{{1}}}|{{{2|सब्ब}}}}})<noinclude>
[[Category:Internal category-link templates]]
</noinclude>
do8hfhqh8jhntcskt72c10pyqqf3x8e
पटिरूप:Designation/text
10
7551
104325
2026-09-11T17:54:48Z
咽頭べさ
6149
Created page with "{{#invoke:Designation|text}}<noinclude> {{documentation}} </noinclude>"
104325
wikitext
text/x-wiki
{{#invoke:Designation|text}}<noinclude>
{{documentation}}
</noinclude>
ly63xysrt9pmyf40jv4ov2pu3uc4rxa
104332
104325
2026-09-12T02:01:45Z
咽頭べさ
6149
104332
wikitext
text/x-wiki
{{#ifeq:{{Str left|{{uc:{{{1}}}}}|6}}|FORMER
|Former 
}}{{#switch:{{uc:{{{1}}}}}
<!------------Global designations--------------------->
|WORLD HERITAGE SITE|WHS|FORMERWHS = [[लोकियदायजट्ठानं|यूनेस्को लोकियदायजट्ठानं]]
|IUCN CATEGORY IA|IUCN IA|CATEGORY IA|NATURE RESERVE = [[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])
|IUCN CATEGORY IB|IUCN IB|CATEGORY IB|WILDERNESS AREA = [[IUCN]] Category Ib ([[Wilderness area|Wilderness Area]])
|IUCN CATEGORY II|IUCN II|CATEGORY II|NATIONAL PARK = [[IUCN]] Category II ([[रट्ठियउय्यानं]])
|IUCN CATEGORY III|IUCN III|CATEGORY III|NATURAL MONUMENT = [[IUCN]] Category III ([[Natural Monument]])
|IUCN CATEGORY IV|IUCN IV|CATEGORY IV|HABITAT MANAGEMENT
|SPECIES MANAGEMENT = [[IUCN]] Category IV (Habitat/Species Management Area)
|IUCN CATEGORY V|IUCN V|CATEGORY V|PROTECTED LANDSCAPE
|PROTECTED SEASCAPE = [[IUCN]] Category V (Protected Landscape/Seascape)
|IUCN CATEGORY VI|IUCN VI|CATEGORY VI|MANAGED RESOURCE PROTECTED AREA = [[IUCN]] Category VI (Managed Resource Protected Area)
|RAMSAR WETLAND|RAMSAR|RAMSAR WETLAND OF INTERNATIONAL IMPORTANCE = [[Ramsar Convention|Ramsar Wetland]]
|HISTORIC CIVIL ENGINEERING LANDMARK|CIVIL ENGINEERING LANDMARK
|HCEL|ASCE = [[List of Historic Civil Engineering Landmarks|Historic Civil Engineering Landmark]]
|HISTORIC MECHANICAL ENGINEERING LANDMARK|MECHANICAL ENGINEERING LANDMARK
|HMEL|ASME = [[List of Historic Mechanical Engineering Landmarks|Historic Mechanical Engineering Landmark]]
<!------------National/Regional designations---------->
|CULTURAL MONUMENT OF ALBANIA|ALBANIAN CULTURAL MONUMENT|ALBANIA
|MONUMENT KULTURE = [[Cultural Monument of Albania]]
|NATIONAL HISTORIC MONUMENT OF ARGENTINA|ARGENTINA HISTORIC MONUMENT
|ARGENTINA|NHMA = [[National Historic Monument of Argentina]]
|NATIONAL HISTORIC HERITAGE OF BRAZIL|BRAZILIAN HISTORIC HERITAGE
|IPHAN|BRAZIL|NHHB = [[भराजी रट्ठिय पुराण दायजं]]
|NATIONAL HISTORIC SITE OF CANADA|CANADIAN NATIONAL HISTORIC SITE
|CANADA|NHSC = [[कनेदा रट्ठिय पुराण ठानानि|कनेदा रट्ठिय पुराण ठानं]]
|HERITAGE RAILWAY STATION OF CANADA|CANADIAN HERITAGE RAILWAY STATION
|HRSC = [[Heritage Railway Stations Protection Act|Heritage Railway Station (Canada)]]
|PROTECTED NATURAL VALUE OF CROATIA|CROATIAN PROTECTED NATURAL VALUE
|PROTECTED AREA OF CROATIA|CROATIAN PROTECTED AREA|CROATIA NATURAL
|SPOMENIK PRIRODE = [[Register of Protected Natural Values of Croatia|Protected Natural Value of Croatia]]
|CULTURAL GOOD OF CROATIA|CROATIAN CULTURAL GOOD|CROATIA CULTURAL
|SPOMENIK KULTURE = [[Register of Cultural Goods of Croatia|Cultural Good of Croatia]]
|NATIONAL REGISTER OF HISTORIC PARKS AND GARDENS|ENGLAND HISTORIC PARK
|ENGLAND HISTORIC GARDEN|ENGLISH HISTORIC PARK|ENGLISH HISTORIC GARDEN
|REGISTER OF HISTORIC PARKS AND GARDENS|HISTORIC PARKS AND GARDENS = [[National Register of Historic Parks and Gardens]]
|MONUMENT HISTORIQUE|FRANCE|FRENCH = [[Monument historique]]
|IRISH NATIONAL MONUMENT|NATIONAL MONUMENT OF IRELAND|IRELAND|IRISH
|IRELAND MONUMENT IN STATE CARE|IRISH MONUMENT IN STATE CARE = [[National Monument (Ireland)|National Monument of Ireland]]
|NATIONAL TREASURE OF JAPAN|JAPANESE NATIONAL TREASURE|JAPAN = [[ग्यपान् रज्जस्स रट्ठिय रतनानि|ग्यपान् रज्जस्स रट्ठिय रतनं]]
|MONUMENTO NACIONAL DE CHILE|NATIONAL MONUMENT OF CHILE|CHILE = [[National Monuments of Chile|National Monument of Chile]]
|RIJKSMONUMENT|DUTCH NATIONAL MONUMENT|NETHERLANDS NATIONAL MONUMENT
|NATIONAL MONUMENT OF THE NETHERLANDS|NETHERLANDS|DUTCH = [[Rijksmonument]]
|HERITAGE NEW ZEALAND CATEGORY I|NEW ZEALAND CATEGORY I
|NZ CATEGORY I = [[न्यूज़ीलैंड रज्जस्स दायजं|Heritage New Zealand - Category I]]
|HERITAGE NEW ZEALAND CATEGORY II|NEW ZEALAND CATEGORY II
|NZ CATEGORY II = [[न्यूज़ीलैंड रज्जस्स दायजं|Heritage New Zealand - Category II]]
|NORTHERN IRELAND HISTORIC PARK | NORTHERN IRELAND HISTORIC GARDEN
|REGISTER OF PARKS GARDENS AND DEMESNES OF SPECIAL HISTORIC INTEREST
|REGISTER OF PARKS, GARDENS AND DEMESNES|PARKS, GARDENS AND DEMESNES = [[Register of Parks, Gardens and Demesnes of Special Historic Interest]]
|NATIONAL MONUMENT OF PORTUGAL|PORTUGUESE NATIONAL MONUMENT|PORTUGAL
|MONUMENTO NACIONAL DO PORTUGAL|IPPAR = [[Monuments of Portugal|Portuguese National Monument]]
|NATIONAL REGISTER OF HISTORIC MONUMENTS IN ROMANIA|MONUMENT ISTORIC
|ROMANIA|ROMANIAN = [[Monument istoric]]
|SERBIAN CULTURAL PROPERTY OF GREAT IMPORTANCE|SERBIA|SERBIAN
|CULTURAL PROPERTY OF GREAT IMPORTANCES|CULTURAL HERITAGE OF SERBIA = [[सर्बिया रज्जस्स संस्कितिक दायजं]]
|NATIONAL MONUMENT OF SINGAPORE|SINGAPORE NATIONAL MONUMENT|SINGAPORE = [[सिङ्गपुर रट्ठिय चेतियानि|सिङ्गपुर रट्ठिय चेतियं]]
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES = [[Inventory of Gardens and Designed Landscapes in Scotland]]
|SPANISH PROPERTY OF CULTURAL INTEREST|BIEN DE INTERES CULTURAL
|SPANISH|SPAIN = [[Bien de Interés Cultural|Spanish Property of Cultural Interest]]
|SWISS CULTURAL PROPERTY OF NATIONAL SIGNIFICANCE|SWISS|SWITZERLAND
|SWISS CULTURAL PROPERTY = [[Swiss Inventory of Cultural Property of National and Regional Significance|Swiss Cultural Property of National Significance]]
|LISTED BUILDING|UNITED KINGDOM LISTED BUILDING|UK LISTED BUILDING = [[सूचिगत मटिमाघरं]]
|CATEGORY A LISTED BUILDING|CATEGORY A|SCOTLAND CATEGORY A = [[सूचिगत मटिमाघरं#स्कॉटलैंड|सूचिगत मटिमाघरं]] – Category A
|GRADE A LISTED BUILDING|GRADE A|NORTHERN IRELAND GRADE A = [[सूचिगत मटिमाघरं#မြउत्तरी आयरलैंड|सूचिगत मटिमाघरं]] – Grade A
|GRADE I LISTED BUILDING|GRADE I|UNITED KINGDOM GRADE I|UK GRADE I = [[सूचिगत मटिमाघरं#इंग्लैंड च वेल्स|सूचिगत मटिमाघरं]] – Grade I
|CATEGORY B LISTED BUILDING|CATEGORY B|SCOTLAND CATEGORY B = [[सूचिगत मटिमाघरं#स्कॉटलैंड|सूचिगत मटिमाघरं]] – Category B
|GRADE B+ LISTED BUILDING|GRADE B+|NORTHERN IRELAND GRADE B+ = [[सूचिगत मटिमाघरं#उत्तरी आयरलैंड|सूचिगत मटिमाघरं]] – Grade B+
|GRADE II LISTED BUILDING|GRADE II|UNITED KINGDOM GRADE II|UK GRADE II = [[सूचिगत मटिमाघरं#इंग्लैंड च वेल्स|सूचिगत मटिमाघरं]] – Grade II
|CATEGORY C LISTED BUILDING|CATEGORY C|SCOTLAND CATEGORY C = [[सूचिगत मटिमाघरं#स्कॉटलैंड|सूचिगत मटिमाघरं]] – Category C(S)
|GRADE B1 LISTED BUILDING|GRADE B1|NORTHERN IRELAND GRADE B1 = [[सूचिगत मटिमाघरं#उत्तरी आयरलैंड|सूचिगत मटिमाघरं]] – Grade B1
|GRADE II* LISTED BUILDING|GRADE II*|UNITED KINGDOM GRADE II*
|UK GRADE II* = [[सूचिगत मटिमाघरं#इंग्लैंड च वेल्स|सूचिगत मटिमाघरं]] – Grade II*
|GRADE B2 LISTED BUILDING|GRADE B2|NORTHERN IRELAND GRADE B2 = [[सूचिगत मटिमाघरं#उत्तरी आयरलैंड|सूचिगत मटिमाघरं]] – Grade B2
|SCHEDULED MONUMENT|SCHEDULED ANCIENT MONUMENT|ANCIENT MONUMENT
|UK SCHEDULED MONUMENT|UK ANCIENT MONUMENT|SCHEDULED HISTORIC MONUMENT
|MONUMENT IN STATE CARE|UK SCHEDULED ANCIENT MONUMENT
|UK SCHEDULED HISTORIC MONUMENT = [[Scheduled monument]]
|NATIONAL REGISTER OF HISTORIC PLACES|NRHP = [[National Register of Historic Places|U.S. National Register of Historic Places]]
|UNITED STATES HISTORIC DISTRICT|U.S. HISTORIC DISTRICT|NRHP-HD|HD
|FORMERHD|US HISTORIC DISTRICT|HISTORIC DISTRICT = [[अमेरिक जनपदस्स पुराण देसा|अमेरिक जनपदस्स पुराण देसो]]
|UNITED STATES CONTRIBUTING PROPERTY|US CONTRIBUTING PROPERTY
|CONTRIBUTING PROPERTY|NRHP-CP|CP|INDCP|U.S. CONTRIBUTING PROPERTY = [[अमेरिक जनपदस्स पुराण देसा|अमेरिक जनपदस्स पुराण देसो]]<br/>[[Contributing property]]
|UNITED STATES NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|US NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY|NRHP-NHLDCP
|NHLDCP|U.S. NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY = [[रट्ठिय पुराण चेतियं|U.S. National Historic Landmark District]]<br />[[Contributing Property]]
|U.S. NATIONAL BATTLEFIELD|US NATIONAL BATTLEFIELD
|NATIONAL BATTLEFIELD|NRHP-NB|NB|FORMERNB = [[List of areas in the United States National Park System#National battlefields|U.S. National Battlefield]]
|U.S. NATIONAL BATTLEFIELD PARK|US NATIONAL BATTLEFIELD PARK
|NATIONAL BATTLEFIELD PARK|NRHP-NBP|NBP|FORMERNBP = [[List of areas in the United States National Park System#National battlefield parks|U.S. National Battlefield Park]]
|U.S. NATIONAL BATTLEFIELD SITE|US NATIONAL BATTLEFIELD SITE
|NATIONAL BATTLEFIELD SITE|NRHP-NBS|NBS|FORMERNBS = [[List of areas in the United States National Park System#National battlefield site|U.S. National Battlefield Site]]
|U.S. NATIONAL HISTORIC LANDMARK|US NATIONAL HISTORIC LANDMARK
|NATIONAL HISTORIC LANDMARK|NRHP-NHL|NHL|FORMERNHL = [[रट्ठिय पुराण चेतियं|अमेरिक रट्ठिय पुराण चेतियं]]
|U.S. NATIONAL HISTORIC LANDMARK DISTRICT
|US NATIONAL HISTORIC LANDMARK DISTRICT
|NATIONAL HISTORIC LANDMARK DISTRICT|NRHP-NHLD|NHLD|FORMERNHLD = [[रट्ठिय पुराण चेतियं|U.S. National Historic Landmark District]]
|U.S. NATIONAL HISTORICAL PARK|US NATIONAL HISTORICAL PARK
|NATIONAL HISTORICAL PARK|NRHP-NHP|NHP|FORMERNHP = [[National Historic Sites (United States)#National Historical Parks|U.S. National Historical Park]]
|U.S. NATIONAL HISTORIC RESERVE|US NATIONAL HISTORIC RESERVE
|NATIONAL HISTORIC RESERVE|NRHP-NHR|NHR|FORMERNHR = [[List of areas in the United States National Park System#National reserves|U.S. National Historic Reserve]]
|U.S. NATIONAL HISTORIC SITE|US NATIONAL HISTORIC SITE
|NATIONAL HISTORIC SITE|NRHP-NHS|NHS|FORMERNHS = [[National Historic Sites (United States)|U.S. National Historic Site]]
|U.S. NATIONAL MEMORIAL|US NATIONAL MEMORIAL|NATIONAL MEMORIAL
|NRHP-NMEM|NMEM|FORMERNMEM = [[List of National Memorials of the United States|U.S. National Memorial]]
|U.S. NATIONAL MONUMENT|US NATIONAL MONUMENT|NATIONAL MONUMENT
|NRHP-NMON|NMON|FORMERNMON = [[National Monument (United States)|U.S. National Monument]]
|U.S. NATIONAL MILITARY PARK|US NATIONAL MILITARY PARK
|NATIONAL MILITARY PARK|NRHP-NMP|NMP|FORMERNMP = [[National Military Park|U.S. National Military Park]]
|U.S. NATIONAL NATURAL LANDMARK|US NATIONAL NATURAL LANDMARK
|NATIONAL NATURAL LANDMARK|NNL = [[National Natural Landmark|U.S. National Natural Landmark]]
|IHS|FORMERIHS = [[List of areas in the United States National Park System#International historic site|International Historic Site]]
|WALES HISTORIC PARK | WELSH HISTORIC PARK
|REGISTER OF PARKS AND GARDENS OF SPECIAL HISTORIC INTEREST IN WALES
|REGISTER OF PARKS AND GARDENS IN WALES|WALES HISTORIC GARDEN = [[Cadw/ICOMOS Register of Parks and Gardens of Special Historic Interest in Wales]]
|NATIONAL MONUMENT OF ZAMBIA|ZAMBIAN NATIONAL MONUMENT|ZAMBIA = [[Monuments and Historic Sites of Zambia|National Monument of Zambia]]
<!------------State/Provincial designations----------->
|ALBERTA|ALBERTA HISTORIC RESOURCES ACT|AHRA = [[Provincial historic sites of Alberta|Alberta Historic Resources Act]]
|NEW BRUNSWICK|NEW BRUNSWICK HERITAGE CONSERVATION ACT|NBHCA = [[Heritage Conservation Act (New Brunswick)|New Brunswick Heritage Conservation Act]]
|NOVA SCOTIA|NOVA SCOTIA HERITAGE PROPERTY ACT|NSHPA = [[Heritage Property Act (Nova Scotia)|Nova Scotia Heritage Property Act]]
|ONTARIO HERITAGE ACT|ONTARIO = [[Ontario Heritage Act]]
|PRINCE EDWARD ISLAND|PEI|HERITAGE PLACES PROTECTION ACT = [[Heritage Places Protection Act|Prince Edward Island Heritage Place]]
|REPERTOIRE DU PATRIMOINE CULTUREL DU QUEBEC|QUEBEC
|CULTURAL HERITAGE REGISTER OF QUEBEC = [[Répertoire du patrimoine culturel du Québec|Patrimoine culturel du Québec]]
|SASKATCHEWAN|SASKATCHEWAN HERITAGE PROPERTY ACT|SHPA = [[Heritage Property Act (Saskatchewan)|Saskatchewan Heritage Property Act]]
|DECLARED MONUMENT OF HONG KONG|HONG KONG DECLARED MONUMENT
|HK DECLARED MONUMENT = [[Declared monuments of Hong Kong|Declared Monument of Hong Kong]]
|HONG KONG GRADED BUILDING|HK GRADED BUILDING|GRADED BUILDING = [[Heritage conservation in Hong Kong|Hong Kong Graded Building]]
|HONG KONG GRADE I HISTORIC BUILDING|HONG KONG GRADE I|HK GRADE I = [[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade I historic buildings in Hong Kong|Grade I]]
|HONG KONG GRADE II HISTORIC BUILDING|HONG KONG GRADE II|HK GRADE II = [[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade II historic buildings in Hong Kong|Grade II]]
|HONG KONG GRADE III HISTORIC BUILDING|HONG KONG GRADE III|HK GRADE III= [[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade III historic buildings in Hong Kong|Grade III]]
|ALABAMA REGISTER|ALABAMA LANDMARK|ALABAMA|USAL|ARLH = [[Alabama Register of Landmarks and Heritage]]
|CALIFORNIA HISTORICAL LANDMARK|CALIFORNIA|CHISL = [[California Historical Landmark]]
|COLORADO STATE REGISTER OF HISTORIC PROPERTIES|COLORADO|CSRHP|USCO = [[Colorado State Register of Historic Properties]]
|INDIANA REGISTER OF HISTORIC SITES AND STRUCTURES|INDIANA|IRHSS|USIN = [[Indiana Register of Historic Sites and Structures|Indiana Register of Historic Sites]]
|MICHIGAN STATE HISTORIC SITE|MICHIGAN|MSHS = [[Michigan State Historic Preservation Office|Michigan State Historic Site]]
|MISSISSIPPI LANDMARK|MISSISSIPPI|USMS = [[Mississippi Landmark]]
|NEW HAMPSHIRE STATE REGISTER OF HISTORIC PLACES
|NEW HAMPSHIRE STATE REGISTER|NEW HAMPSHIRE|NHSR|NHSRHP|USNH = [[New Hampshire State Register of Historic Places|N.H. State Register of Historic Places]]
|NEW JERSEY REGISTER OF HISTORIC PLACES|NEW JERSEY|NJRHP|USNJ = [[New Jersey Register of Historic Places]]
|N.M. STATE REGISTER OF CULTURAL PROPERTIES|NEW MEXICO STATE REGISTER
|NEW MEXICO|NMSRCP|NMSR|USNM = [[New Mexico State Register of Cultural Properties|N.M. State Register of Cultural Properties]]
|NEVADA HISTORICAL MARKER|NEVADA MARKER|NEVADA|USNV = [[Nevada Historical Marker]]
|PENNSYLVANIA|PENNSYLVANIA HISTORICAL MARKER|PENNSYLVANIA MARKER
|PA MARKER = [[List of Pennsylvania state historical markers|Pennsylvania Historical Marker]]
|RECORDED TEXAS HISTORIC LANDMARK|TEXAS|RTHL|USTX = [[Recorded Texas Historic Landmark|Recorded Texas Historic Landmark]]
|VIRGINIA LANDMARKS REGISTER|VIRGINIA|VLR|USVA = [[Virginia Landmarks Register]]
|QUEENSLAND HERITAGE REGISTER|QHR = [[Queensland Heritage Register]]
<!------------Local designations---------------------->
|YANGON CITY HERITAGE LIST|YANGON LANDMARK|YANGON CITY LANDMARK
|YANGON CITY|YANGON|त्रिकुम्बन|त्रिकुम्बनगर = [[पुराणदायजमटिमाघरानि। त्रिकुम्बन|त्रिकुम्बनगर पुराण दायजं]]
|ALBUQUERQUE HISTORIC LANDMARK|ALBUQUERQUE|ALBHL = [[List of historic landmarks in Albuquerque|Albuquerque Historic Landmark]]
|BERKELEY LANDMARK|BERKELEY|BERKL = [[List of Berkeley Landmarks, Structures of Merit, and Historic Districts|Berkeley Landmark]]
|CHICAGO LANDMARK|CHICAGO|CHICL = [[शिकागो नगरपुराणचेतियानि]]
|DALLAS LANDMARK|DALLAS = [[List of Dallas Landmarks|Dallas Landmark]]
|DAVENPORT REGISTER OF HISTORIC PROPERTIES|DAVENPORT|DRHP = [[Davenport Register of Historic Properties]]
|LONG BEACH HISTORIC LANDMARK|LONG BEACH|LBHL = [[List of City of Long Beach historic landmarks|Long Beach Historic Landmark]]
|LOS ANGELES HISTORIC-CULTURAL MONUMENT
|LOS ANGELES HISTORIC CULTURAL MONUMENT|LOS ANGELES|LAHCM = [[Los Angeles Historic-Cultural Monument]]
|NEW YORK CITY LANDMARK|NYC LANDMARK|NEW YORK CITY|NYC|NYCL = [[न्यूयॉर्क नगरपुराणचेतियानि]]
|OMAHA LANDMARK|OMAHA = [[List of Omaha landmarks|Omaha Landmark]]
|OYSTER BAY LANDMARK|OYSTER BAY, NEW YORK|OYSTER BAY, NY|OYSTER BAY = [[Oyster Bay Landmark]]
|PHILADELPHIA REGISTER OF HISTORIC PLACES|PHILADELPHIA|PRHP = [[Philadelphia Register of Historic Places]]
|PITTSBURGH HISTORIC LANDMARK|PITTSBURGH LANDMARK|PITTSBURGH = [[List of Pittsburgh Landmarks|Pittsburgh Landmark]]
|PHLF = [[List of Pittsburgh History and Landmarks Foundation Historic Landmarks|Pittsburgh Landmark — PHLF]]
|PGHL|CITY OF PITTSBURGH|PITTSBURGH HISTORIC DESIGNATION|CPHD = [[List of City of Pittsburgh historic designations|Pittsburgh Historic Designation]]
|RIVERSIDE LANDMARK|RIVERSIDE|RIVL = [[List of landmarks in Riverside, California|Riverside Landmark]]
|ST. LOUIS LANDMARK|ST LOUIS LANDMARK|ST. LOUIS|ST LOUIS = [[Landmarks of St. Louis, Missouri|St. Louis Landmark]]
|SAN DIEGO HISTORIC LANDMARK|SAN DIEGO|SDHL = [[List of San Diego Historic Landmarks|San Diego Historic Landmark]]
|SAN FRANCISCO LANDMARK|SAN FRANCISCO DESIGNATED LANDMARK
|SAN FRANCISCO|SFDL = [[List of San Francisco Designated Landmarks|San Francisco Designated Landmark]]
|SANTA MONICA HISTORIC LANDMARK|SANTA MONICA|SMHL = [[List of City of Santa Monica Designated Historic Landmarks|Santa Monica Historic Landmark]]
|SEATTLE LANDMARK|SEATTLE = [[List of Seattle landmarks|Seattle Landmark]]
<!------------Invalid designation--------------------->
|#default = अयुत्तपविचियं
}}<noinclude>
{{documentation}}
</noinclude>
8j6g10nq0o481d7ils11f1hdqi44acz
Module:Message box/ombox.css
828
7552
104327
2026-09-11T18:00:10Z
咽頭べさ
6149
Created page with "/* {{pp|small=y}} */ .ombox { margin: 4px 0; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" gray */ background-color: var(--background-color-neutral-subtle, #f8f9fa); box-sizing: border-box; color: var(--color-base, #202122); } /* For the "small=yes" option. */ .ombox.mbox-small { font-size: 88%; line-height: 1.25em; } .ombox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ombox-de..."
104327
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
color: var(--color-base, #202122);
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* keep synced with each other type of message box as this isn't qualified */
.mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
/** T367463 */
body.skin--responsive table.ombox img {
max-width: none !important;
}
@media screen {
html.skin-theme-clientpref-night .ombox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .ombox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
s3kd4o8l90hza7k55c82cm0ltkd3xp2
Module:Designation/list
828
7553
104329
2026-09-12T01:12:53Z
咽頭べさ
6149
Created page with "{ "whs": { "text": "[[World Heritage Site|UNESCO World Heritage Site]]", "abbr": "WHS", "col": "FFE978", "col2": "0177D3", "scope": "Global" }, "iucnia": { "text": "[[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])", "abbr": "IUCN Ia", "col": "E7BFAD", "col2": "E7AF97", "scope": "Global" }, "iucnib": { "text": "[[IUCN]] Category Ib ([[Wilderness Area]])", "abbr": "IUCN Ib", "col": "DACAA5", "col2": "DACAA5", "scope": "Glob..."
104329
wikitext
text/x-wiki
{
"whs": {
"text": "[[World Heritage Site|UNESCO World Heritage Site]]",
"abbr": "WHS",
"col": "FFE978",
"col2": "0177D3",
"scope": "Global"
},
"iucnia": {
"text": "[[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])",
"abbr": "IUCN Ia",
"col": "E7BFAD",
"col2": "E7AF97",
"scope": "Global"
},
"iucnib": {
"text": "[[IUCN]] Category Ib ([[Wilderness Area]])",
"abbr": "IUCN Ib",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Global"
},
"iucnii": {
"text": "[[IUCN]] Category II ([[National Park]])",
"abbr": "IUCN II",
"col": "CDE5B2",
"col2": "CDE5B2",
"scope": "Global"
},
"iucniii": {
"text": "[[IUCN]] Category III ([[Natural Monument]])",
"abbr": "IUCN III",
"col": "BFFFBF",
"col2": "BFFFBF",
"scope": "Global"
},
"iucniv": {
"text": "[[IUCN]] Category IV (Habitat/Species Management Area)",
"abbr": "IUCN IV",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Global"
},
"iucnv": {
"text": "[[IUCN]] Category V (Protected Landscape/Seascape)",
"abbr": "IUCN V",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "Global"
},
"iucnvi": {
"text": "[[IUCN]] Category VI (Managed Resource Protected Area)",
"abbr": "IUCN VI",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Global"
},
"ramsar": {
"text": "[[Ramsar Convention|Ramsar Wetland]]",
"col": "8DE3D2",
"col2": "8DE3D2",
"scope": "Global"
},
"hcel": {
"text": "[[List of Historic Civil Engineering Landmarks|Historic Civil Engineering Landmark]]",
"col2": "AAAAAA",
"scope": "Global"
},
"hmel": {
"text": "[[List of Historic Mechanical Engineering Landmarks|Historic Mechanical Engineering Landmark]]",
"col2": "AAAAAA",
"scope": "Global"
},
"kons": {
"text": "[[Commission to Preserve National Monuments of Bosnia and Herzegovina|KONS of Bosnia and Herzegovina]]",
"col": "A8BDEC",
"col2": "CCAA02",
"scope": "Bosnia and Herzegovina"
},
"cmoa": {
"text": "[[Cultural Monument of Albania]]",
"abbr": "CMOA",
"col": "B2E5CD",
"col2": "CC3333",
"scope": "Albania"
},
"ncha": {
"text": "[[National Cultural Heritage of Antigua and Barbuda]]",
"col": "0072C6",
"col2": "0072C6",
"scope": "Antigua and Barbuda"
},
"hsab": {
"text": "[[Historical Site of Antigua and Barbuda]]",
"col": "0072C6",
"col2": "0072C6",
"scope": "Antigua and Barbuda"
},
"nhma": {
"text": "[[National Historic Monument of Argentina]]",
"abbr": "NHMA",
"col": "A5CADA",
"col2": "75AADB",
"scope": "Argentina"
},
"anhl": {
"text": "[[Australian National Heritage List]]",
"col": "CDE5B2",
"col2": "CDE5B2",
"scope": "Australia"
},
"cwlthl": {
"text": "[[Commonwealth Heritage List]]",
"col": "FFE978",
"col2": "FFE978",
"scope": "Australia"
},
"rne": {
"text": "[[Register of the National Estate]]",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Australia"
},
"nhhb": {
"text": "[[National Historic Heritage of Brazil]]",
"col": "CDE5B2",
"col2": "00A859",
"scope": "Brazil"
},
"nhsc": {
"text": "[[National Historic Sites of Canada|National Historic Site of Canada]]",
"abbr": "NHSC",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Canada"
},
"hrsc": {
"text": "[[Heritage Railway Stations Protection Act|Heritage Railway Station (Canada)]]",
"col2": "FF3333",
"scope": "Canada"
},
"mchs": {
"text": "[[Major cultural heritage sites under national-level protection]]",
"col2": "CD071E",
"scope": "China"
},
"pnvc": {
"text": "[[Register of Protected Natural Values of Croatia|Protected Natural Value of Croatia]]",
"abbr": "PNVC",
"col": "FFE978",
"col2": "00247D",
"scope": "Croatia"
},
"cgoc": {
"text": "[[Register of Cultural Goods of Croatia|Cultural Good of Croatia]]",
"abbr": "CGOC",
"col": "DACAA5",
"col2": "CC3333",
"scope": "Croatia"
},
"ncmcr": {
"text": "[[National Cultural Monument of the Czech Republic]]",
"col": "A8BDEC",
"col2": "D7141A",
"scope": "Czech Republic"
},
"nrhpg": {
"text": "[[National Register of Historic Parks and Gardens]]",
"abbr": "NRHPG",
"col": "A5CADA",
"col2": "1E8C00",
"scope": "England"
},
"mh": {
"text": "[[Monument historique]]",
"lang": "fr",
"abbr": "MH",
"col": "A8BDEC",
"col2": "0055A4",
"scope": "France"
},
"chmg": {
"text": "[[List of Cultural Heritage Monuments of Georgia|Cultural Heritage Monument of Georgia]]",
"col": "A5CADA",
"col2": "FF0000",
"scope": "Georgia (country)"
},
"icmns": {
"text": "[[Immovable Cultural Monuments of National Significance|Immovable Cultural Monument of National Significance of Georgia]]",
"col": "A5CADA",
"col2": "FF0000",
"scope": "Georgia (country)"
},
"mani": {
"text": "[[Monuments of National Importance (India)|Monument of National Importance]]",
"col": "F4C430",
"col2": "FF7722",
"scope": "India"
},
"inhl": {
"text": "[[Iran National Heritage List]]",
"col": "C3B091",
"col2": "C3B091",
"scope": "Iran"
},
"inmon": {
"text": "[[National monument (Ireland)|National monument of Ireland]]",
"abbr": "INMON",
"col": "BFFFBF",
"col2": "FF7900",
"scope": "Ireland"
},
"ntoj": {
"text": "[[National Treasures of Japan|National Treasure of Japan]]",
"abbr": "NTOJ",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Japan"
},
"chile": {
"text": "[[National Monuments of Chile|National Monument of Chile]]",
"col": "B2E5CD",
"col2": "FF0000",
"scope": "Chile"
},
"cmll": {
"text": "[[Cultural Monuments of Lithuania]]",
"col": "001A94",
"col2": "001A94",
"scope": "Lithuania"
},
"rijks": {
"text": "[[Rijksmonument]]",
"lang": "nl",
"abbr": "RIJKS",
"col": "A5CADA",
"col2": "FF7900",
"scope": "Netherlands"
},
"hpti": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Category 1]]",
"abbr": "NZHPT I",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"hptii": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Category 2]]",
"abbr": "NZHPT II",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtapu": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtapua": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu area]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtupuna": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tūpuna]]",
"col": "CDE5B2",
"scope": "New Zealand"
},
"nzha": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Historic Area]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nihg": {
"text": "[[Register of Parks, Gardens and Demesnes of Special Historic Interest]]",
"col": "DACAA5",
"col2": "1E8C00",
"scope": "Northern Ireland"
},
"dhaka": {
"text": "[[List of Old Dhaka Heritage Sites]]",
"col": "BFFFBF",
"col2": "803355",
"scope": "Bangladesh"
},
"pnct": {
"text": "[[List of National Cultural Treasures in the Philippines|National Cultural Treasures]]",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Philippines"
},
"pnhl": {
"text": "National Historical Landmarks",
"col": "FFE978",
"col2": "FFE978",
"scope": "Philippines"
},
"hmp": {
"text": "[[Historic Monument (Poland)|Historic Monument of Poland]]",
"col": "969488",
"col2": "78776D",
"scope": "Poland"
},
"ippar": {
"text": "[[Monuments of Portugal|Portuguese National Monument]]",
"abbr": "IPPAR",
"col": "FFE978",
"col2": "006600",
"scope": "Portugal"
},
"romania": {
"text": "[[Monument istoric]]",
"lang": "ro",
"col": "BFFFBF",
"col2": "800000",
"scope": "Romania"
},
"cpgi": {
"text": "[[Cultural Heritage of Serbia]]",
"abbr": "CPGI",
"col": "B2E5CD",
"col2": "0000FF",
"scope": "Serbia"
},
"nms": {
"text": "[[National monuments of Singapore|National monument of Singapore]]",
"abbr": "NMS",
"col": "FFE978",
"col2": "0000FF",
"scope": "Singapore"
},
"hssk": {
"text": "[[Historic Sites of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"ntsk": {
"text": "[[National Treasure (South Korea)]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"nfchsk": {
"text": "[[National Folklore Cultural Heritage (South Korea)|National Folklore Cultural Heritage of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"sssk": {
"text": "[[Scenic Sites (South Korea)|Scenic Sites of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"sfh": {
"text": "[[Seoul Future Heritage]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "Seoul"
},
"tsk": {
"text": "[[Treasure (South Korean designation)|Treasures of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"gdls": {
"text": "[[Inventory of Gardens and Designed Landscapes in Scotland]]",
"abbr": "GDLS",
"col": "CDE5B2",
"col2": "1E8C00",
"scope": "Scotland"
},
"bdic": {
"text": "[[Bien de Interés Cultural|Spanish Cultural Heritage]]",
"abbr": "BDIC",
"col": "FFE978",
"col2": "ACE1AF",
"scope": "Spain"
},
"sac": {
"text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"spa": {
"text": "[[Natura 2000]] site ([[Special Protection Area|SPA]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"sacspa": {
"text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]]/[[Special Protection Area|SPA]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"scpnc": {
"text": "[[Swiss Inventory of Cultural Property of National and Regional Significance|Swiss Cultural Property of National Significance]]",
"abbr": "CPNS",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Switzerland"
},
"listed": {
"text": "[[Listed Building]]",
"abbr": "LISTED",
"col": "F0DC82",
"col2": "F0DC82",
"scope": "United Kingdom"
},
"sca": {
"text": "[[Listed building#Scotland|Listed Building]] – Category A",
"abbr": "LIST A",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Scotland"
},
"nia": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade A",
"abbr": "LIST A",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Northern Ireland"
},
"ewi": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade I",
"abbr": "LIST I",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "England and Wales"
},
"scb": {
"text": "[[Listed building#Scotland|Listed Building]] – Category B",
"abbr": "LIST B",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Scotland"
},
"nib+": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B+",
"abbr": "LIST B+",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Northern Ireland"
},
"ewii": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade II",
"abbr": "LIST II",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "England and Wales"
},
"scc": {
"text": "[[Listed building#Scotland|Listed Building]] – Category C(S)",
"abbr": "LIST C",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Scotland"
},
"nhst": {
"text": "[[National Historic Sites of Tanzania]]",
"col": "CDE5B2",
"col2": "DACAA5",
"scope": "Tanzania"
},
"nib1": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B1",
"abbr": "LIST B1",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Northern Ireland"
},
"ewii*": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade II*",
"abbr": "LIST II*",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "England and Wales"
},
"nib2": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B2",
"abbr": "LIST B2",
"col": "DACAA5",
"col2": "BDB76B",
"scope": "Northern Ireland"
},
"sm": {
"text": "[[Scheduled monument]]",
"abbr": "SM",
"col": "A5CADA",
"col2": "00247D",
"scope": "United Kingdom"
},
"nhleb": {
"text": "[[Registered Battlefields (UK)|Registered battlefield]]",
"col": "A5CADA",
"col2": "00247D",
"scope": "United Kingdom"
},
"nrpg": {
"text": "[[National Register of Historic Parks and Gardens]]",
"abbr": "NRHPG",
"col": "A5CADA",
"col2": "A8EDEF",
"scope": "United Kingdom"
},
"nhlew": {
"text": "[[UK Protected Wreck]]",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "United Kingdom"
},
"ukca": {
"text": "[[Conservation Area (United Kingdom)|UK Conservation Area]]",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "United Kingdom"
},
"llb": {
"text": "[[Local heritage list|Locally Listed Building]]",
"col": "FFE153",
"col2": "FFE153",
"scope": "United Kingdom"
},
"nhle": {
"text": "[[National Heritage List for England]]",
"scope": "England"
},
"nrhp": {
"text": "[[National Register of Historic Places|U.S. National Register of Historic Places]]",
"abbr": "NRHP",
"scope": "United States"
},
"hd": {
"text": "[[Historic districts in the United States|U.S. Historic district]]",
"abbr": "HD",
"col": "E6E6FA",
"col2": "E6E6FA",
"scope": "United States"
},
"cp": {
"text": "[[Historic districts in the United States|U.S. Historic district]] – [[Contributing property]]",
"abbr": "CP",
"col": "CCFFCC",
"col2": "CCFFCC",
"scope": "United States"
},
"nhldcp": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark District]] – [[Contributing property]]",
"abbr": "NHLDCP",
"col": "CCFFCC",
"col2": "CCFFCC",
"scope": "United States"
},
"nb": {
"text": "[[List of areas in the United States National Park System#National battlefields|U.S. National Battlefield]]",
"abbr": "NB",
"col2": "FFE6B0",
"scope": "United States"
},
"nbp": {
"text": "[[List of areas in the United States National Park System#National battlefield parks|U.S. National Battlefield Park]]",
"abbr": "NBP",
"col2": "E6E6AA",
"scope": "United States"
},
"nbs": {
"text": "[[List of areas in the United States National Park System#National battlefield site|U.S. National Battlefield Site]]",
"abbr": "NBS",
"col2": "FFE8E8",
"scope": "United States"
},
"nhl": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark]]",
"abbr": "NHL",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "United States"
},
"nhld": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark District]]",
"abbr": "NHLD",
"col": "00CED1",
"col2": "00CED1",
"scope": "United States"
},
"nhp": {
"text": "[[National Historic Sites (United States)#National Historical Parks|U.S. National Historical Park]]",
"abbr": "NHP",
"col2": "CCCCFF",
"scope": "United States"
},
"usnha": {
"text": "[[National Heritage Area]]",
"scope": "United States"
},
"nhr": {
"text": "[[List of areas in the United States National Park System#National reserves|U.S. National Historic Reserve]]",
"abbr": "NHR",
"col2": "E9967A",
"scope": "United States"
},
"nhs": {
"text": "[[National Historic Sites (United States)|U.S. National Historic Site]]",
"abbr": "NHS",
"col2": "5F9EA0",
"scope": "United States"
},
"nmem": {
"text": "[[List of National Memorials of the United States|U.S. National Memorial]]",
"abbr": "NMEM",
"col2": "CCCCCC",
"scope": "United States"
},
"nmon": {
"text": "[[National monument (United States)|U.S. National Monument]]",
"abbr": "NMON",
"col2": "FFEFD5",
"scope": "United States"
},
"nmp": {
"text": "[[National Military Park|U.S. National Military Park]]",
"abbr": "NMP",
"col2": "EED8D2",
"scope": "United States"
},
"nnl": {
"text": "[[National Natural Landmark|U.S. National Natural Landmark]]",
"col2": "ACE1AF",
"scope": "United States"
},
"nwsrs": {
"text": "[[National Wild and Scenic Rivers System]]",
"col": "90B8F1",
"col2": "90B8F1",
"scope": "United States"
},
"nwsr": {
"text": "[[National Wild and Scenic Rivers System|National Wild and Scenic River]]",
"col": "90B8F1",
"col2": "90B8F1",
"scope": "United States"
},
"his": {
"text": "[[List of areas in the United States National Park System#International historic site|International Historic Site]]",
"scope": "United States"
},
"whp": {
"text": "[[Cadw/ICOMOS Register of Parks and Gardens of Special Historic Interest in Wales]]",
"scope": "Wales"
},
"nmz": {
"text": "[[Monuments and Historic Sites of Zambia|National Monument of Zambia]]",
"abbr": "NMZ",
"scope": "Zambia"
},
"twn": {
"text": "[[List of national monuments of Taiwan|National monument of Taiwan]]",
"col": "FFC7C7",
"col2": "B00000",
"scope": "Taiwan"
},
"imnsu": {
"text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of National Significance of Ukraine]]",
"col": "F0DC45",
"col2": "F0DC45",
"scope": "Ukraine"
},
"imlsu": {
"text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of Local Significance of Ukraine]]",
"col": "F0DC45",
"col2": "F0DC45",
"scope": "Ukraine"
},
"apmsl": {
"text": "[[Archaeological Protected Monuments in Sri Lanka|Archaeological Protected Monument of Sri Lanka]]",
"scope": "Sri Lanka"
},
"ahra": {
"text": "[[Provincial historic sites of Alberta|Alberta Historic Resources Act]]",
"col2": "2B60DE",
"scope": "Alberta"
},
"nbhca": {
"text": "[[Heritage Conservation Act (New Brunswick)|New Brunswick Heritage Conservation Act]]",
"col2": "FBB917",
"scope": "New Brunswick"
},
"nshpa": {
"text": "[[Heritage Property Act (Nova Scotia)|Nova Scotia Heritage Property Act]]",
"col2": "2B60DE",
"scope": "Nova Scotia"
},
"oha": {
"text": "[[Ontario Heritage Act]]",
"abbr": "OHA",
"col": "90EE90",
"col2": "347C2C",
"scope": "Ontario"
},
"pwihp": {
"text": "[[Heritage Places Protection Act|Prince Edward Island Heritage Place]]",
"scope": "Prince Edward Island"
},
"rpcq": {
"text": "[[Répertoire du patrimoine culturel du Québec|Patrimoine culturel du Québec]]",
"lang": "fr",
"abbr": "RPCQ",
"col": "A8BDEC",
"col2": "0033CC",
"scope": "Québec"
},
"shpa": {
"text": "[[Heritage Property Act (Saskatchewan)|Saskatchewan Heritage Property Act]]",
"col2": "339900",
"scope": "Saskatchewan"
},
"hkdm": {
"text": "[[Declared monuments of Hong Kong|Declared Monument of Hong Kong]]",
"abbr": "HKDM",
"col2": "FF0000",
"scope": "Hong Kong"
},
"gbhk": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]]",
"abbr": "GBHK",
"col": "F0DC82",
"col2": "F0DC82",
"scope": "Hong Kong"
},
"gbhki": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade I historic buildings in Hong Kong|Grade I]]",
"abbr": "GBHK I",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Hong Kong"
},
"gbhkii": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade II historic buildings in Hong Kong|Grade II]]",
"abbr": "GBHK II",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Hong Kong"
},
"gbhkiii": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade III historic buildings in Hong Kong|Grade III]]",
"abbr": "GBHK III",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Hong Kong"
},
"bch": {
"text": "[[Basque Cultural Heritage]]",
"col": "67D68A",
"col2": "67D68A",
"scope": "Basque"
},
"arlh": {
"text": "[[Alabama Register of Landmarks and Heritage]]",
"col": "CDE5B2",
"col2": "83A06B",
"scope": "Alabama",
"abbr": "ARLH"
},
"ahrs": {
"text": "[[Alaska Heritage Resources Survey]]",
"scope": "Alaska"
},
"chisl": {
"text": "[[California Historical Landmark]]",
"abbr": "CHISL",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "California"
},
"csrhp": {
"text": "[[Colorado State Register of Historic Properties]]",
"abbr": "CSRHP",
"col": "AECF6B",
"col2": "AECF6B",
"scope": "Colorado"
},
"dcihs": {
"text": "[[District of Columbia Inventory of Historic Sites|D.C. Inventory of Historic Sites]]",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "District of Columbia"
},
"fuap": {
"text": "[[Florida Underwater Archaeological Preserve]]",
"col": "FFC0CB",
"scope": "Florida"
},
"ushi": {
"text": "[[Hawaiʻi Register of Historic Places]]",
"col": "FAEA39",
"col2": "001B69",
"scope": "Hawaii"
},
"ishs": {
"text": "[[Illinois Historic Preservation Division|Illinois State Historic Site]]",
"abbr": "ISHS",
"col": "6495ED",
"col2": "6495ED",
"scope": "Illinois"
},
"irhss": {
"text": "[[Indiana Register of Historic Sites and Structures|Indiana Register of Historic Sites]]",
"abbr": "IRHSS",
"col": "DEB887",
"col2": "DEB887",
"scope": "Indiana"
},
"mshs": {
"text": "[[Michigan State Historic Preservation Office|Michigan State Historic Site]]",
"abbr": "MSHS",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Michigan"
},
"usms": {
"text": "[[Mississippi Landmark]]",
"abbr": "USMS",
"col": "A8BDEC",
"col2": "B3A1D7",
"scope": "Mississippi"
},
"nhsrhp": {
"text": "[[New Hampshire State Register of Historic Places|NH State Register of Historic Places]]",
"abbr": "NHSRHP",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "New Hampshire"
},
"njrhp": {
"text": "[[New Jersey Register of Historic Places]]",
"abbr": "NJRHP",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "New Jersey"
},
"nmsr": {
"text": "[[New Mexico State Register of Cultural Properties|NM State Register of Cultural Properties]]",
"abbr": "NMSRCP",
"col": "FAF284",
"col2": "FAF284",
"scope": "New Mexico"
},
"usny": {
"text": "[[New York State Register of Historic Places]]",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "New York",
"abbr": "NYSRHP"
},
"usnv": {
"text": "[[Nevada Historical Marker]]",
"abbr": "USNV",
"col": "FFE978",
"col2": "FFC94B",
"scope": "Nevada"
},
"phm": {
"text": "[[List of Pennsylvania state historical markers|Pennsylvania Historical Marker]]",
"col": "FFC94B",
"col2": "000080",
"scope": "Pennsylvania"
},
"prrhsz": {
"text": "[[Puerto Rico Register of Historic Sites and Zones]]",
"col": "FA7070",
"scope": "Puerto Rico"
},
"rthl": {
"text": "[[Recorded Texas Historic Landmark]]",
"abbr": "RTHL",
"col": "DACAA5",
"col2": "D6BC98",
"scope": "Texas"
},
"tsal": {
"text": "[[Texas State Antiquities Landmark]]",
"abbr": "TSAL",
"col": "DACAA5",
"col2": "D6BC98",
"scope": "Texas"
},
"tshs": {
"text": "[[List of Texas state historic sites|Texas State Historic Site]]",
"col2": "CDE5B2",
"scope": "Texas"
},
"vlr": {
"text": "[[Virginia Landmarks Register]]",
"abbr": "VLR",
"col": "C1D1AE",
"col2": "C1D1AE",
"scope": "Virginia"
},
"qhr": {
"text": "[[Queensland Heritage Register]]",
"col": "FBB917",
"col2": "FBB917",
"scope": "Queensland"
},
"nswhr": {
"text": "[[New South Wales State Heritage Register|New South Wales Heritage Register]]",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "New South Wales"
},
"nswhd": {
"text": "[[New South Wales Heritage Database]]\u003Cbr /\u003E(Local Government Register)",
"col": "FFFFFF",
"col2": "A8BDEC",
"scope": "New South Wales"
},
"nthr": {
"text": "[[Northern Territory Heritage Register]]",
"col": "FFC0CB",
"scope": "Northern Territory"
},
"sahr": {
"text": "[[South Australian Heritage Register]]",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "South Australia"
},
"thr": {
"text": "[[Tasmanian Heritage Register]]",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Tasmania"
},
"vhr": {
"text": "[[Victorian Heritage Register]]",
"col": "BFFFBF",
"col2": "AAAAAA",
"scope": "Victoria"
},
"wasrhp": {
"text": "[[State Register of Heritage Places|Western Australia Heritage Register]]",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Western Australia"
},
"albhl": {
"text": "[[List of historic landmarks in Albuquerque|Albuquerque Historic Landmark]]",
"abbr": "ALBHL",
"col": "FF99FF",
"col2": "FF99FF",
"scope": "Albuquerque"
},
"ahsd": {
"text": "[[List of historic buildings and districts designated by the City of Atlanta|Atlanta Historic Site or District]]",
"col": "AACCFF",
"scope": "Atlanta"
},
"bcl": {
"text": "[[Baltimore City Landmarks|Baltimore City Landmark]]",
"col": "ECAF18",
"col2": "ECAF18",
"scope": "Baltimore"
},
"berkl": {
"text": "[[List of Berkeley Landmarks|Berkeley Landmark]]",
"abbr": "BERKL",
"col": "FFE4B5",
"col2": "FFE4B5",
"scope": "Berkeley"
},
"bhr": {
"text": "[[Brisbane Heritage Register]]",
"col": "BFFFBF",
"col2": "BFFFBF",
"scope": "Brisbane"
},
"bosl": {
"text": "[[Boston Landmark]]",
"abbr": "BOSL",
"col": "ECAF18",
"col2": "ECAF18",
"scope": "Boston"
},
"chicl": {
"text": "[[Chicago Landmark]]",
"abbr": "CHICL",
"col": "AACCFF",
"col2": "AACCFF",
"scope": "Chicago"
},
"clhl": {
"text": "[[List of Cincinnati Local Historic Landmarks|Cincinnati Local Historic Landmark]]",
"col": "F5ABB6",
"col2": "C4122C",
"scope": "Cincinnati"
},
"crhp": {
"text": "[[Columbus Register of Historic Properties]]",
"col": "78a2f5",
"col2": "2C4891",
"scope": "Columbus"
},
"dlmk": {
"text": "[[List of Dallas Landmarks|Dallas Landmark]]",
"abbr": "DLMK",
"col": "F5DEB3",
"col2": "F5DEB3",
"scope": "Dallas"
},
"drhp": {
"text": "[[Davenport Register of Historic Properties]]",
"abbr": "DRHP",
"col": "EEE8AA",
"col2": "EEE8AA",
"scope": "Davenport"
},
"denvl": {
"text": "[[Denver Landmarks]]",
"col": "A0BEF8",
"col2": "2C4891",
"scope": "Denver"
},
"lbhl": {
"text": "[[List of City of Long Beach historic landmarks|Long Beach Historic Landmark]]",
"abbr": "LBHL",
"col": "FFD4E1",
"col2": "FFD4E1",
"scope": "Long Beach"
},
"lahcm": {
"text": "[[Los Angeles Historic-Cultural Monument]]",
"abbr": "LAHCM",
"col": "FFE978",
"col2": "FFC94B",
"scope": "Los Angeles"
},
"mplsl": {
"text": "[[Minneapolis Landmark]]",
"abbr": "MPLSL",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Minneapolis"
},
"nycl": {
"text": "[[New York City Landmarks Preservation Commission|New York City Landmark]]",
"abbr": "NYCL",
"col": "FFE978",
"col2": "FFE978",
"scope": "New York City"
},
"odl": {
"text": "[[List of Oakland Designated Landmarks|Oakland Designated Landmark]]",
"abbr": "ODL",
"col": "F5DC0F",
"scope": "Oakland"
},
"omal": {
"text": "[[List of Omaha landmarks|Omaha Landmark]]",
"abbr": "OMAL",
"col": "EEE8AA",
"scope": "Omaha"
},
"obl": {
"text": "[[Oyster Bay Landmark]]",
"abbr": "OBL",
"col": "D0F0C0",
"col2": "D0F0C0",
"scope": "Oyster Bay"
},
"prhp": {
"text": "[[Philadelphia Register of Historic Places]]",
"abbr": "PRHP",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Philadelphia"
},
"phl": {
"text": "[[List of Pittsburgh Landmarks|Pittsburgh Landmark]]",
"abbr": "PHLF",
"col": "FFD700",
"col2": "FFD700",
"scope": "Pittsburgh"
},
"phlf": {
"text": "[[List of Pittsburgh History and Landmarks Foundation Historic Landmarks|Pittsburgh Landmark – PHLF]]",
"abbr": "PHLF",
"col": "old",
"col2": "FFD700",
"scope": "Pittsburgh"
},
"cphd": {
"text": "[[List of City of Pittsburgh historic designations|Pittsburgh Historic Designation]]",
"col": "FFF89F",
"col2": "000000",
"scope": "Pittsburgh"
},
"rivl": {
"text": "[[List of landmarks in Riverside, California|Riverside Landmark]]",
"abbr": "RIVL",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "Riverside"
},
"sdhl": {
"text": "[[List of San Diego Historic Landmarks|San Diego Historic Landmark]]",
"abbr": "SDHL",
"col": "FFE978",
"col2": "FFE978",
"scope": "San Diego"
},
"sfdl": {
"text": "[[List of San Francisco Designated Landmarks|San Francisco Designated Landmark]]",
"abbr": "SFDL",
"col": "FFE978",
"col2": "FFC94B",
"scope": "San Francisco"
},
"smhl": {
"text": "[[List of City of Santa Monica Designated Historic Landmarks|Santa Monica Historic Landmark]]",
"abbr": "SMHL",
"col": "D8AFE2",
"col2": "DDA0DD",
"scope": "Santa Monica"
},
"seatl": {
"text": "[[List of Seattle landmarks|Seattle Landmark]]",
"abbr": "SEATL",
"col": "D8DBDF",
"col2": "D8DBDF",
"scope": "Seattle"
},
"sll": {
"text": "[[Landmarks of St. Louis, Missouri|St. Louis Landmark]]",
"abbr": "SLL",
"col": "BFFFBF",
"col2": "AAAAAA",
"scope": "St. Louis"
},
"ycl": {
"text": "[[Yangon City Heritage List|Yangon City Landmark]]",
"abbr": "YCL",
"col2": "2E8B57",
"scope": "Yangon"
},
"chp": {
"text": "[[Cultural Heritage of Peru]]",
"col": "FFE978",
"col2": "CC3333",
"scope": "Peru"
},
"ngmi": {
"text": "[[National Geological Monuments of India]]",
"col": "FFB300",
"col2": "FFB300",
"scope": "India"
}
}
7z8xb0tcarmqg8hcrav9z2dy4jj8o95
104330
104329
2026-09-12T01:13:18Z
咽頭べさ
6149
咽頭べさ moved page [[अवयव:咽頭べさ/Designation/list]] to [[Module:Designation/list]]
104329
wikitext
text/x-wiki
{
"whs": {
"text": "[[World Heritage Site|UNESCO World Heritage Site]]",
"abbr": "WHS",
"col": "FFE978",
"col2": "0177D3",
"scope": "Global"
},
"iucnia": {
"text": "[[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])",
"abbr": "IUCN Ia",
"col": "E7BFAD",
"col2": "E7AF97",
"scope": "Global"
},
"iucnib": {
"text": "[[IUCN]] Category Ib ([[Wilderness Area]])",
"abbr": "IUCN Ib",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Global"
},
"iucnii": {
"text": "[[IUCN]] Category II ([[National Park]])",
"abbr": "IUCN II",
"col": "CDE5B2",
"col2": "CDE5B2",
"scope": "Global"
},
"iucniii": {
"text": "[[IUCN]] Category III ([[Natural Monument]])",
"abbr": "IUCN III",
"col": "BFFFBF",
"col2": "BFFFBF",
"scope": "Global"
},
"iucniv": {
"text": "[[IUCN]] Category IV (Habitat/Species Management Area)",
"abbr": "IUCN IV",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Global"
},
"iucnv": {
"text": "[[IUCN]] Category V (Protected Landscape/Seascape)",
"abbr": "IUCN V",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "Global"
},
"iucnvi": {
"text": "[[IUCN]] Category VI (Managed Resource Protected Area)",
"abbr": "IUCN VI",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Global"
},
"ramsar": {
"text": "[[Ramsar Convention|Ramsar Wetland]]",
"col": "8DE3D2",
"col2": "8DE3D2",
"scope": "Global"
},
"hcel": {
"text": "[[List of Historic Civil Engineering Landmarks|Historic Civil Engineering Landmark]]",
"col2": "AAAAAA",
"scope": "Global"
},
"hmel": {
"text": "[[List of Historic Mechanical Engineering Landmarks|Historic Mechanical Engineering Landmark]]",
"col2": "AAAAAA",
"scope": "Global"
},
"kons": {
"text": "[[Commission to Preserve National Monuments of Bosnia and Herzegovina|KONS of Bosnia and Herzegovina]]",
"col": "A8BDEC",
"col2": "CCAA02",
"scope": "Bosnia and Herzegovina"
},
"cmoa": {
"text": "[[Cultural Monument of Albania]]",
"abbr": "CMOA",
"col": "B2E5CD",
"col2": "CC3333",
"scope": "Albania"
},
"ncha": {
"text": "[[National Cultural Heritage of Antigua and Barbuda]]",
"col": "0072C6",
"col2": "0072C6",
"scope": "Antigua and Barbuda"
},
"hsab": {
"text": "[[Historical Site of Antigua and Barbuda]]",
"col": "0072C6",
"col2": "0072C6",
"scope": "Antigua and Barbuda"
},
"nhma": {
"text": "[[National Historic Monument of Argentina]]",
"abbr": "NHMA",
"col": "A5CADA",
"col2": "75AADB",
"scope": "Argentina"
},
"anhl": {
"text": "[[Australian National Heritage List]]",
"col": "CDE5B2",
"col2": "CDE5B2",
"scope": "Australia"
},
"cwlthl": {
"text": "[[Commonwealth Heritage List]]",
"col": "FFE978",
"col2": "FFE978",
"scope": "Australia"
},
"rne": {
"text": "[[Register of the National Estate]]",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Australia"
},
"nhhb": {
"text": "[[National Historic Heritage of Brazil]]",
"col": "CDE5B2",
"col2": "00A859",
"scope": "Brazil"
},
"nhsc": {
"text": "[[National Historic Sites of Canada|National Historic Site of Canada]]",
"abbr": "NHSC",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Canada"
},
"hrsc": {
"text": "[[Heritage Railway Stations Protection Act|Heritage Railway Station (Canada)]]",
"col2": "FF3333",
"scope": "Canada"
},
"mchs": {
"text": "[[Major cultural heritage sites under national-level protection]]",
"col2": "CD071E",
"scope": "China"
},
"pnvc": {
"text": "[[Register of Protected Natural Values of Croatia|Protected Natural Value of Croatia]]",
"abbr": "PNVC",
"col": "FFE978",
"col2": "00247D",
"scope": "Croatia"
},
"cgoc": {
"text": "[[Register of Cultural Goods of Croatia|Cultural Good of Croatia]]",
"abbr": "CGOC",
"col": "DACAA5",
"col2": "CC3333",
"scope": "Croatia"
},
"ncmcr": {
"text": "[[National Cultural Monument of the Czech Republic]]",
"col": "A8BDEC",
"col2": "D7141A",
"scope": "Czech Republic"
},
"nrhpg": {
"text": "[[National Register of Historic Parks and Gardens]]",
"abbr": "NRHPG",
"col": "A5CADA",
"col2": "1E8C00",
"scope": "England"
},
"mh": {
"text": "[[Monument historique]]",
"lang": "fr",
"abbr": "MH",
"col": "A8BDEC",
"col2": "0055A4",
"scope": "France"
},
"chmg": {
"text": "[[List of Cultural Heritage Monuments of Georgia|Cultural Heritage Monument of Georgia]]",
"col": "A5CADA",
"col2": "FF0000",
"scope": "Georgia (country)"
},
"icmns": {
"text": "[[Immovable Cultural Monuments of National Significance|Immovable Cultural Monument of National Significance of Georgia]]",
"col": "A5CADA",
"col2": "FF0000",
"scope": "Georgia (country)"
},
"mani": {
"text": "[[Monuments of National Importance (India)|Monument of National Importance]]",
"col": "F4C430",
"col2": "FF7722",
"scope": "India"
},
"inhl": {
"text": "[[Iran National Heritage List]]",
"col": "C3B091",
"col2": "C3B091",
"scope": "Iran"
},
"inmon": {
"text": "[[National monument (Ireland)|National monument of Ireland]]",
"abbr": "INMON",
"col": "BFFFBF",
"col2": "FF7900",
"scope": "Ireland"
},
"ntoj": {
"text": "[[National Treasures of Japan|National Treasure of Japan]]",
"abbr": "NTOJ",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Japan"
},
"chile": {
"text": "[[National Monuments of Chile|National Monument of Chile]]",
"col": "B2E5CD",
"col2": "FF0000",
"scope": "Chile"
},
"cmll": {
"text": "[[Cultural Monuments of Lithuania]]",
"col": "001A94",
"col2": "001A94",
"scope": "Lithuania"
},
"rijks": {
"text": "[[Rijksmonument]]",
"lang": "nl",
"abbr": "RIJKS",
"col": "A5CADA",
"col2": "FF7900",
"scope": "Netherlands"
},
"hpti": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Category 1]]",
"abbr": "NZHPT I",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"hptii": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Category 2]]",
"abbr": "NZHPT II",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtapu": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtapua": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu area]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nzwtupuna": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tūpuna]]",
"col": "CDE5B2",
"scope": "New Zealand"
},
"nzha": {
"text": "[[Heritage New Zealand|Heritage New Zealand – Historic Area]]",
"col": "CDE5B2",
"col2": "00247D",
"scope": "New Zealand"
},
"nihg": {
"text": "[[Register of Parks, Gardens and Demesnes of Special Historic Interest]]",
"col": "DACAA5",
"col2": "1E8C00",
"scope": "Northern Ireland"
},
"dhaka": {
"text": "[[List of Old Dhaka Heritage Sites]]",
"col": "BFFFBF",
"col2": "803355",
"scope": "Bangladesh"
},
"pnct": {
"text": "[[List of National Cultural Treasures in the Philippines|National Cultural Treasures]]",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Philippines"
},
"pnhl": {
"text": "National Historical Landmarks",
"col": "FFE978",
"col2": "FFE978",
"scope": "Philippines"
},
"hmp": {
"text": "[[Historic Monument (Poland)|Historic Monument of Poland]]",
"col": "969488",
"col2": "78776D",
"scope": "Poland"
},
"ippar": {
"text": "[[Monuments of Portugal|Portuguese National Monument]]",
"abbr": "IPPAR",
"col": "FFE978",
"col2": "006600",
"scope": "Portugal"
},
"romania": {
"text": "[[Monument istoric]]",
"lang": "ro",
"col": "BFFFBF",
"col2": "800000",
"scope": "Romania"
},
"cpgi": {
"text": "[[Cultural Heritage of Serbia]]",
"abbr": "CPGI",
"col": "B2E5CD",
"col2": "0000FF",
"scope": "Serbia"
},
"nms": {
"text": "[[National monuments of Singapore|National monument of Singapore]]",
"abbr": "NMS",
"col": "FFE978",
"col2": "0000FF",
"scope": "Singapore"
},
"hssk": {
"text": "[[Historic Sites of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"ntsk": {
"text": "[[National Treasure (South Korea)]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"nfchsk": {
"text": "[[National Folklore Cultural Heritage (South Korea)|National Folklore Cultural Heritage of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"sssk": {
"text": "[[Scenic Sites (South Korea)|Scenic Sites of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"sfh": {
"text": "[[Seoul Future Heritage]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "Seoul"
},
"tsk": {
"text": "[[Treasure (South Korean designation)|Treasures of South Korea]]",
"col": "A8BDEC",
"col2": "CD313A",
"scope": "South Korea"
},
"gdls": {
"text": "[[Inventory of Gardens and Designed Landscapes in Scotland]]",
"abbr": "GDLS",
"col": "CDE5B2",
"col2": "1E8C00",
"scope": "Scotland"
},
"bdic": {
"text": "[[Bien de Interés Cultural|Spanish Cultural Heritage]]",
"abbr": "BDIC",
"col": "FFE978",
"col2": "ACE1AF",
"scope": "Spain"
},
"sac": {
"text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"spa": {
"text": "[[Natura 2000]] site ([[Special Protection Area|SPA]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"sacspa": {
"text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]]/[[Special Protection Area|SPA]])",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "European Union"
},
"scpnc": {
"text": "[[Swiss Inventory of Cultural Property of National and Regional Significance|Swiss Cultural Property of National Significance]]",
"abbr": "CPNS",
"col": "FFC0CB",
"col2": "FF0000",
"scope": "Switzerland"
},
"listed": {
"text": "[[Listed Building]]",
"abbr": "LISTED",
"col": "F0DC82",
"col2": "F0DC82",
"scope": "United Kingdom"
},
"sca": {
"text": "[[Listed building#Scotland|Listed Building]] – Category A",
"abbr": "LIST A",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Scotland"
},
"nia": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade A",
"abbr": "LIST A",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Northern Ireland"
},
"ewi": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade I",
"abbr": "LIST I",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "England and Wales"
},
"scb": {
"text": "[[Listed building#Scotland|Listed Building]] – Category B",
"abbr": "LIST B",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Scotland"
},
"nib+": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B+",
"abbr": "LIST B+",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Northern Ireland"
},
"ewii": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade II",
"abbr": "LIST II",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "England and Wales"
},
"scc": {
"text": "[[Listed building#Scotland|Listed Building]] – Category C(S)",
"abbr": "LIST C",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Scotland"
},
"nhst": {
"text": "[[National Historic Sites of Tanzania]]",
"col": "CDE5B2",
"col2": "DACAA5",
"scope": "Tanzania"
},
"nib1": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B1",
"abbr": "LIST B1",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Northern Ireland"
},
"ewii*": {
"text": "[[Listed building#England and Wales|Listed Building]] – Grade II*",
"abbr": "LIST II*",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "England and Wales"
},
"nib2": {
"text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B2",
"abbr": "LIST B2",
"col": "DACAA5",
"col2": "BDB76B",
"scope": "Northern Ireland"
},
"sm": {
"text": "[[Scheduled monument]]",
"abbr": "SM",
"col": "A5CADA",
"col2": "00247D",
"scope": "United Kingdom"
},
"nhleb": {
"text": "[[Registered Battlefields (UK)|Registered battlefield]]",
"col": "A5CADA",
"col2": "00247D",
"scope": "United Kingdom"
},
"nrpg": {
"text": "[[National Register of Historic Parks and Gardens]]",
"abbr": "NRHPG",
"col": "A5CADA",
"col2": "A8EDEF",
"scope": "United Kingdom"
},
"nhlew": {
"text": "[[UK Protected Wreck]]",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "United Kingdom"
},
"ukca": {
"text": "[[Conservation Area (United Kingdom)|UK Conservation Area]]",
"col": "A5CADA",
"col2": "A5CADA",
"scope": "United Kingdom"
},
"llb": {
"text": "[[Local heritage list|Locally Listed Building]]",
"col": "FFE153",
"col2": "FFE153",
"scope": "United Kingdom"
},
"nhle": {
"text": "[[National Heritage List for England]]",
"scope": "England"
},
"nrhp": {
"text": "[[National Register of Historic Places|U.S. National Register of Historic Places]]",
"abbr": "NRHP",
"scope": "United States"
},
"hd": {
"text": "[[Historic districts in the United States|U.S. Historic district]]",
"abbr": "HD",
"col": "E6E6FA",
"col2": "E6E6FA",
"scope": "United States"
},
"cp": {
"text": "[[Historic districts in the United States|U.S. Historic district]] – [[Contributing property]]",
"abbr": "CP",
"col": "CCFFCC",
"col2": "CCFFCC",
"scope": "United States"
},
"nhldcp": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark District]] – [[Contributing property]]",
"abbr": "NHLDCP",
"col": "CCFFCC",
"col2": "CCFFCC",
"scope": "United States"
},
"nb": {
"text": "[[List of areas in the United States National Park System#National battlefields|U.S. National Battlefield]]",
"abbr": "NB",
"col2": "FFE6B0",
"scope": "United States"
},
"nbp": {
"text": "[[List of areas in the United States National Park System#National battlefield parks|U.S. National Battlefield Park]]",
"abbr": "NBP",
"col2": "E6E6AA",
"scope": "United States"
},
"nbs": {
"text": "[[List of areas in the United States National Park System#National battlefield site|U.S. National Battlefield Site]]",
"abbr": "NBS",
"col2": "FFE8E8",
"scope": "United States"
},
"nhl": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark]]",
"abbr": "NHL",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "United States"
},
"nhld": {
"text": "[[National Historic Landmark|U.S. National Historic Landmark District]]",
"abbr": "NHLD",
"col": "00CED1",
"col2": "00CED1",
"scope": "United States"
},
"nhp": {
"text": "[[National Historic Sites (United States)#National Historical Parks|U.S. National Historical Park]]",
"abbr": "NHP",
"col2": "CCCCFF",
"scope": "United States"
},
"usnha": {
"text": "[[National Heritage Area]]",
"scope": "United States"
},
"nhr": {
"text": "[[List of areas in the United States National Park System#National reserves|U.S. National Historic Reserve]]",
"abbr": "NHR",
"col2": "E9967A",
"scope": "United States"
},
"nhs": {
"text": "[[National Historic Sites (United States)|U.S. National Historic Site]]",
"abbr": "NHS",
"col2": "5F9EA0",
"scope": "United States"
},
"nmem": {
"text": "[[List of National Memorials of the United States|U.S. National Memorial]]",
"abbr": "NMEM",
"col2": "CCCCCC",
"scope": "United States"
},
"nmon": {
"text": "[[National monument (United States)|U.S. National Monument]]",
"abbr": "NMON",
"col2": "FFEFD5",
"scope": "United States"
},
"nmp": {
"text": "[[National Military Park|U.S. National Military Park]]",
"abbr": "NMP",
"col2": "EED8D2",
"scope": "United States"
},
"nnl": {
"text": "[[National Natural Landmark|U.S. National Natural Landmark]]",
"col2": "ACE1AF",
"scope": "United States"
},
"nwsrs": {
"text": "[[National Wild and Scenic Rivers System]]",
"col": "90B8F1",
"col2": "90B8F1",
"scope": "United States"
},
"nwsr": {
"text": "[[National Wild and Scenic Rivers System|National Wild and Scenic River]]",
"col": "90B8F1",
"col2": "90B8F1",
"scope": "United States"
},
"his": {
"text": "[[List of areas in the United States National Park System#International historic site|International Historic Site]]",
"scope": "United States"
},
"whp": {
"text": "[[Cadw/ICOMOS Register of Parks and Gardens of Special Historic Interest in Wales]]",
"scope": "Wales"
},
"nmz": {
"text": "[[Monuments and Historic Sites of Zambia|National Monument of Zambia]]",
"abbr": "NMZ",
"scope": "Zambia"
},
"twn": {
"text": "[[List of national monuments of Taiwan|National monument of Taiwan]]",
"col": "FFC7C7",
"col2": "B00000",
"scope": "Taiwan"
},
"imnsu": {
"text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of National Significance of Ukraine]]",
"col": "F0DC45",
"col2": "F0DC45",
"scope": "Ukraine"
},
"imlsu": {
"text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of Local Significance of Ukraine]]",
"col": "F0DC45",
"col2": "F0DC45",
"scope": "Ukraine"
},
"apmsl": {
"text": "[[Archaeological Protected Monuments in Sri Lanka|Archaeological Protected Monument of Sri Lanka]]",
"scope": "Sri Lanka"
},
"ahra": {
"text": "[[Provincial historic sites of Alberta|Alberta Historic Resources Act]]",
"col2": "2B60DE",
"scope": "Alberta"
},
"nbhca": {
"text": "[[Heritage Conservation Act (New Brunswick)|New Brunswick Heritage Conservation Act]]",
"col2": "FBB917",
"scope": "New Brunswick"
},
"nshpa": {
"text": "[[Heritage Property Act (Nova Scotia)|Nova Scotia Heritage Property Act]]",
"col2": "2B60DE",
"scope": "Nova Scotia"
},
"oha": {
"text": "[[Ontario Heritage Act]]",
"abbr": "OHA",
"col": "90EE90",
"col2": "347C2C",
"scope": "Ontario"
},
"pwihp": {
"text": "[[Heritage Places Protection Act|Prince Edward Island Heritage Place]]",
"scope": "Prince Edward Island"
},
"rpcq": {
"text": "[[Répertoire du patrimoine culturel du Québec|Patrimoine culturel du Québec]]",
"lang": "fr",
"abbr": "RPCQ",
"col": "A8BDEC",
"col2": "0033CC",
"scope": "Québec"
},
"shpa": {
"text": "[[Heritage Property Act (Saskatchewan)|Saskatchewan Heritage Property Act]]",
"col2": "339900",
"scope": "Saskatchewan"
},
"hkdm": {
"text": "[[Declared monuments of Hong Kong|Declared Monument of Hong Kong]]",
"abbr": "HKDM",
"col2": "FF0000",
"scope": "Hong Kong"
},
"gbhk": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]]",
"abbr": "GBHK",
"col": "F0DC82",
"col2": "F0DC82",
"scope": "Hong Kong"
},
"gbhki": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade I historic buildings in Hong Kong|Grade I]]",
"abbr": "GBHK I",
"col": "FFC0CB",
"col2": "FFC0CB",
"scope": "Hong Kong"
},
"gbhkii": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade II historic buildings in Hong Kong|Grade II]]",
"abbr": "GBHK II",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "Hong Kong"
},
"gbhkiii": {
"text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade III historic buildings in Hong Kong|Grade III]]",
"abbr": "GBHK III",
"col": "87CEEB",
"col2": "87CEEB",
"scope": "Hong Kong"
},
"bch": {
"text": "[[Basque Cultural Heritage]]",
"col": "67D68A",
"col2": "67D68A",
"scope": "Basque"
},
"arlh": {
"text": "[[Alabama Register of Landmarks and Heritage]]",
"col": "CDE5B2",
"col2": "83A06B",
"scope": "Alabama",
"abbr": "ARLH"
},
"ahrs": {
"text": "[[Alaska Heritage Resources Survey]]",
"scope": "Alaska"
},
"chisl": {
"text": "[[California Historical Landmark]]",
"abbr": "CHISL",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "California"
},
"csrhp": {
"text": "[[Colorado State Register of Historic Properties]]",
"abbr": "CSRHP",
"col": "AECF6B",
"col2": "AECF6B",
"scope": "Colorado"
},
"dcihs": {
"text": "[[District of Columbia Inventory of Historic Sites|D.C. Inventory of Historic Sites]]",
"col": "ACE1AF",
"col2": "ACE1AF",
"scope": "District of Columbia"
},
"fuap": {
"text": "[[Florida Underwater Archaeological Preserve]]",
"col": "FFC0CB",
"scope": "Florida"
},
"ushi": {
"text": "[[Hawaiʻi Register of Historic Places]]",
"col": "FAEA39",
"col2": "001B69",
"scope": "Hawaii"
},
"ishs": {
"text": "[[Illinois Historic Preservation Division|Illinois State Historic Site]]",
"abbr": "ISHS",
"col": "6495ED",
"col2": "6495ED",
"scope": "Illinois"
},
"irhss": {
"text": "[[Indiana Register of Historic Sites and Structures|Indiana Register of Historic Sites]]",
"abbr": "IRHSS",
"col": "DEB887",
"col2": "DEB887",
"scope": "Indiana"
},
"mshs": {
"text": "[[Michigan State Historic Preservation Office|Michigan State Historic Site]]",
"abbr": "MSHS",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Michigan"
},
"usms": {
"text": "[[Mississippi Landmark]]",
"abbr": "USMS",
"col": "A8BDEC",
"col2": "B3A1D7",
"scope": "Mississippi"
},
"nhsrhp": {
"text": "[[New Hampshire State Register of Historic Places|NH State Register of Historic Places]]",
"abbr": "NHSRHP",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "New Hampshire"
},
"njrhp": {
"text": "[[New Jersey Register of Historic Places]]",
"abbr": "NJRHP",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "New Jersey"
},
"nmsr": {
"text": "[[New Mexico State Register of Cultural Properties|NM State Register of Cultural Properties]]",
"abbr": "NMSRCP",
"col": "FAF284",
"col2": "FAF284",
"scope": "New Mexico"
},
"usny": {
"text": "[[New York State Register of Historic Places]]",
"col": "FFC94B",
"col2": "FFC94B",
"scope": "New York",
"abbr": "NYSRHP"
},
"usnv": {
"text": "[[Nevada Historical Marker]]",
"abbr": "USNV",
"col": "FFE978",
"col2": "FFC94B",
"scope": "Nevada"
},
"phm": {
"text": "[[List of Pennsylvania state historical markers|Pennsylvania Historical Marker]]",
"col": "FFC94B",
"col2": "000080",
"scope": "Pennsylvania"
},
"prrhsz": {
"text": "[[Puerto Rico Register of Historic Sites and Zones]]",
"col": "FA7070",
"scope": "Puerto Rico"
},
"rthl": {
"text": "[[Recorded Texas Historic Landmark]]",
"abbr": "RTHL",
"col": "DACAA5",
"col2": "D6BC98",
"scope": "Texas"
},
"tsal": {
"text": "[[Texas State Antiquities Landmark]]",
"abbr": "TSAL",
"col": "DACAA5",
"col2": "D6BC98",
"scope": "Texas"
},
"tshs": {
"text": "[[List of Texas state historic sites|Texas State Historic Site]]",
"col2": "CDE5B2",
"scope": "Texas"
},
"vlr": {
"text": "[[Virginia Landmarks Register]]",
"abbr": "VLR",
"col": "C1D1AE",
"col2": "C1D1AE",
"scope": "Virginia"
},
"qhr": {
"text": "[[Queensland Heritage Register]]",
"col": "FBB917",
"col2": "FBB917",
"scope": "Queensland"
},
"nswhr": {
"text": "[[New South Wales State Heritage Register|New South Wales Heritage Register]]",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "New South Wales"
},
"nswhd": {
"text": "[[New South Wales Heritage Database]]\u003Cbr /\u003E(Local Government Register)",
"col": "FFFFFF",
"col2": "A8BDEC",
"scope": "New South Wales"
},
"nthr": {
"text": "[[Northern Territory Heritage Register]]",
"col": "FFC0CB",
"scope": "Northern Territory"
},
"sahr": {
"text": "[[South Australian Heritage Register]]",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "South Australia"
},
"thr": {
"text": "[[Tasmanian Heritage Register]]",
"col": "B2E5CD",
"col2": "B2E5CD",
"scope": "Tasmania"
},
"vhr": {
"text": "[[Victorian Heritage Register]]",
"col": "BFFFBF",
"col2": "AAAAAA",
"scope": "Victoria"
},
"wasrhp": {
"text": "[[State Register of Heritage Places|Western Australia Heritage Register]]",
"col": "DACAA5",
"col2": "DACAA5",
"scope": "Western Australia"
},
"albhl": {
"text": "[[List of historic landmarks in Albuquerque|Albuquerque Historic Landmark]]",
"abbr": "ALBHL",
"col": "FF99FF",
"col2": "FF99FF",
"scope": "Albuquerque"
},
"ahsd": {
"text": "[[List of historic buildings and districts designated by the City of Atlanta|Atlanta Historic Site or District]]",
"col": "AACCFF",
"scope": "Atlanta"
},
"bcl": {
"text": "[[Baltimore City Landmarks|Baltimore City Landmark]]",
"col": "ECAF18",
"col2": "ECAF18",
"scope": "Baltimore"
},
"berkl": {
"text": "[[List of Berkeley Landmarks|Berkeley Landmark]]",
"abbr": "BERKL",
"col": "FFE4B5",
"col2": "FFE4B5",
"scope": "Berkeley"
},
"bhr": {
"text": "[[Brisbane Heritage Register]]",
"col": "BFFFBF",
"col2": "BFFFBF",
"scope": "Brisbane"
},
"bosl": {
"text": "[[Boston Landmark]]",
"abbr": "BOSL",
"col": "ECAF18",
"col2": "ECAF18",
"scope": "Boston"
},
"chicl": {
"text": "[[Chicago Landmark]]",
"abbr": "CHICL",
"col": "AACCFF",
"col2": "AACCFF",
"scope": "Chicago"
},
"clhl": {
"text": "[[List of Cincinnati Local Historic Landmarks|Cincinnati Local Historic Landmark]]",
"col": "F5ABB6",
"col2": "C4122C",
"scope": "Cincinnati"
},
"crhp": {
"text": "[[Columbus Register of Historic Properties]]",
"col": "78a2f5",
"col2": "2C4891",
"scope": "Columbus"
},
"dlmk": {
"text": "[[List of Dallas Landmarks|Dallas Landmark]]",
"abbr": "DLMK",
"col": "F5DEB3",
"col2": "F5DEB3",
"scope": "Dallas"
},
"drhp": {
"text": "[[Davenport Register of Historic Properties]]",
"abbr": "DRHP",
"col": "EEE8AA",
"col2": "EEE8AA",
"scope": "Davenport"
},
"denvl": {
"text": "[[Denver Landmarks]]",
"col": "A0BEF8",
"col2": "2C4891",
"scope": "Denver"
},
"lbhl": {
"text": "[[List of City of Long Beach historic landmarks|Long Beach Historic Landmark]]",
"abbr": "LBHL",
"col": "FFD4E1",
"col2": "FFD4E1",
"scope": "Long Beach"
},
"lahcm": {
"text": "[[Los Angeles Historic-Cultural Monument]]",
"abbr": "LAHCM",
"col": "FFE978",
"col2": "FFC94B",
"scope": "Los Angeles"
},
"mplsl": {
"text": "[[Minneapolis Landmark]]",
"abbr": "MPLSL",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Minneapolis"
},
"nycl": {
"text": "[[New York City Landmarks Preservation Commission|New York City Landmark]]",
"abbr": "NYCL",
"col": "FFE978",
"col2": "FFE978",
"scope": "New York City"
},
"odl": {
"text": "[[List of Oakland Designated Landmarks|Oakland Designated Landmark]]",
"abbr": "ODL",
"col": "F5DC0F",
"scope": "Oakland"
},
"omal": {
"text": "[[List of Omaha landmarks|Omaha Landmark]]",
"abbr": "OMAL",
"col": "EEE8AA",
"scope": "Omaha"
},
"obl": {
"text": "[[Oyster Bay Landmark]]",
"abbr": "OBL",
"col": "D0F0C0",
"col2": "D0F0C0",
"scope": "Oyster Bay"
},
"prhp": {
"text": "[[Philadelphia Register of Historic Places]]",
"abbr": "PRHP",
"col": "A8BDEC",
"col2": "A8BDEC",
"scope": "Philadelphia"
},
"phl": {
"text": "[[List of Pittsburgh Landmarks|Pittsburgh Landmark]]",
"abbr": "PHLF",
"col": "FFD700",
"col2": "FFD700",
"scope": "Pittsburgh"
},
"phlf": {
"text": "[[List of Pittsburgh History and Landmarks Foundation Historic Landmarks|Pittsburgh Landmark – PHLF]]",
"abbr": "PHLF",
"col": "old",
"col2": "FFD700",
"scope": "Pittsburgh"
},
"cphd": {
"text": "[[List of City of Pittsburgh historic designations|Pittsburgh Historic Designation]]",
"col": "FFF89F",
"col2": "000000",
"scope": "Pittsburgh"
},
"rivl": {
"text": "[[List of landmarks in Riverside, California|Riverside Landmark]]",
"abbr": "RIVL",
"col": "A8BDEC",
"col2": "BBB2FF",
"scope": "Riverside"
},
"sdhl": {
"text": "[[List of San Diego Historic Landmarks|San Diego Historic Landmark]]",
"abbr": "SDHL",
"col": "FFE978",
"col2": "FFE978",
"scope": "San Diego"
},
"sfdl": {
"text": "[[List of San Francisco Designated Landmarks|San Francisco Designated Landmark]]",
"abbr": "SFDL",
"col": "FFE978",
"col2": "FFC94B",
"scope": "San Francisco"
},
"smhl": {
"text": "[[List of City of Santa Monica Designated Historic Landmarks|Santa Monica Historic Landmark]]",
"abbr": "SMHL",
"col": "D8AFE2",
"col2": "DDA0DD",
"scope": "Santa Monica"
},
"seatl": {
"text": "[[List of Seattle landmarks|Seattle Landmark]]",
"abbr": "SEATL",
"col": "D8DBDF",
"col2": "D8DBDF",
"scope": "Seattle"
},
"sll": {
"text": "[[Landmarks of St. Louis, Missouri|St. Louis Landmark]]",
"abbr": "SLL",
"col": "BFFFBF",
"col2": "AAAAAA",
"scope": "St. Louis"
},
"ycl": {
"text": "[[Yangon City Heritage List|Yangon City Landmark]]",
"abbr": "YCL",
"col2": "2E8B57",
"scope": "Yangon"
},
"chp": {
"text": "[[Cultural Heritage of Peru]]",
"col": "FFE978",
"col2": "CC3333",
"scope": "Peru"
},
"ngmi": {
"text": "[[National Geological Monuments of India]]",
"col": "FFB300",
"col2": "FFB300",
"scope": "India"
}
}
7z8xb0tcarmqg8hcrav9z2dy4jj8o95
अवयव:咽頭べさ/Designation/list
2
7554
104331
2026-09-12T01:13:18Z
咽頭べさ
6149
咽頭べさ moved page [[अवयव:咽頭べさ/Designation/list]] to [[Module:Designation/list]]
104331
wikitext
text/x-wiki
#REDIRECT [[Module:Designation/list]]
r74gegp2zqgmspj10kz0vwfeo27sydi
पटिरूप:Designation/colour2
10
7555
104333
2026-09-12T02:04:03Z
咽頭べさ
6149
Created page with "{{#tag:nowiki|{{#switch:{{uc:{{{1}}}}} <!------------Global designations---------------------> |WORLD HERITAGE SITE|WHS = #FFE153 |IUCN CATEGORY IA|IUCN IA|CATEGORY IA|NATURE RESERVE = #E7AF97 |IUCN CATEGORY IB|IUCN IB|CATEGORY IB|WILDERNESS AREA = #DACAA5 |IUCN CATEGORY II|IUCN II|CATEGORY II|NATIONAL PARK = #CDE5B2 |IUCN CATEGORY III|IUCN III|CATEGORY III|NATURAL MONUMEN..."
104333
wikitext
text/x-wiki
{{#tag:nowiki|{{#switch:{{uc:{{{1}}}}}
<!------------Global designations--------------------->
|WORLD HERITAGE SITE|WHS = #FFE153
|IUCN CATEGORY IA|IUCN IA|CATEGORY IA|NATURE RESERVE = #E7AF97
|IUCN CATEGORY IB|IUCN IB|CATEGORY IB|WILDERNESS AREA = #DACAA5
|IUCN CATEGORY II|IUCN II|CATEGORY II|NATIONAL PARK = #CDE5B2
|IUCN CATEGORY III|IUCN III|CATEGORY III|NATURAL MONUMENT = #BFFFBF
|IUCN CATEGORY IV|IUCN IV|CATEGORY IV|HABITAT MANAGEMENT
|SPECIES MANAGEMENT = #B2E5CD
|IUCN CATEGORY V|IUCN V|CATEGORY V|PROTECTED LANDSCAPE
|PROTECTED SEASCAPE = #A5CADA
|IUCN CATEGORY VI|IUCN VI|CATEGORY VI|MANAGED RESOURCE PROTECTED AREA = #A8BDEC
|RAMSAR WETLAND|RAMSAR|RAMSAR WETLAND OF INTERNATIONAL IMPORTANCE = #8DE3D2
|HISTORICAL CIVIL ENGINEERING LANDMARK|CIVIL ENGINEERING LANDMARK
|HCEL|ASCE = #AAAAAA
|HISTORICAL MECHANICAL ENGINEERING LANDMARK|MECHANICAL ENGINEERING LANDMARK
|HMEL|ASME = #AAAAAA
<!------------National/Regional designations---------->
|CULTURAL MONUMENT OF ALBANIA|ALBANIAN CULTURAL MONUMENT|ALBANIA
|MONUMENT KULTURE = #CC3333
|NATIONAL HISTORIC MONUMENT OF ARGENTINA|ARGENTINA HISTORIC MONUMENT
|ARGENTINA|NHMA = #75AADB
|NATIONAL HISTORIC HERITAGE OF BRAZIL|BRAZILIAN HISTORIC HERITAGE
|IPHAN|BRAZIL|NHHB = #00A859
|NATIONAL HISTORIC SITE OF CANADA|CANADIAN NATIONAL HISTORIC SITE
|CANADA|NHSC = #FF0000
|HERITAGE RAILWAY STATION OF CANADA|CANADIAN HERITAGE RAILWAY STATION
|HRSC = #FF3333
|PROTECTED NATURAL VALUE OF CROATIA|CROATIAN PROTECTED NATURAL VALUE
|PROTECTED AREA OF CROATIA|CROATIAN PROTECTED AREA|CROATIA NATURAL
|SPOMENIK PRIRODE = #00247D
|CULTURAL GOOD OF CROATIA|CROATIAN CULTURAL GOOD|CROATIA CULTURAL
|SPOMENIK KULTURE = #CC3333
|NATIONAL REGISTER OF HISTORIC PARKS AND GARDENS|ENGLAND HISTORIC PARK
|ENGLAND HISTORIC GARDEN|ENGLISH HISTORIC PARK|ENGLISH HISTORIC GARDEN
|REGISTER OF HISTORIC PARKS AND GARDENS|HISTORIC PARKS AND GARDENS = #1E8C00
|MONUMENT HISTORIQUE|FRANCE|FRENCH = #0055A4
|IRISH NATIONAL MONUMENT|NATIONAL MONUMENT OF IRELAND|IRELAND|IRISH
|IRELAND MONUMENT IN STATE CARE|IRISH MONUMENT IN STATE CARE = #FF7900
|NATIONAL TREASURE OF JAPAN|JAPANESE NATIONAL TREASURE|JAPAN = red
|MONUMENTO NACIONAL DE CHILE|NATIONAL MONUMENT OF CHILE|CHILE = red
|RIJKSMONUMENT|DUTCH NATIONAL MONUMENT|NETHERLANDS NATIONAL MONUMENT
|NATIONAL MONUMENT OF THE NETHERLANDS|NETHERLANDS|DUTCH = #FF7900
|NEW ZEALAND HISTORIC PLACES TRUST CATEGORY I|NEW ZEALAND CATEGORY I
|NZ CATEGORY I
|NEW ZEALAND HISTORIC PLACES TRUST CATEGORY II|NEW ZEALAND CATEGORY II
|NZ CATEGORY II = #00247D
|NORTHERN IRELAND HISTORIC PARK | NORTHERN IRELAND HISTORIC GARDEN
|REGISTER OF PARKS GARDENS AND DEMESNES OF SPECIAL HISTORIC INTEREST|
|REGISTER OF PARKS, GARDENS AND DEMESNES|PARKS, GARDENS AND DEMESNES = #1E8C00
|NATIONAL MONUMENT OF PORTUGAL|PORTUGUESE NATIONAL MONUMENT|PORTUGAL
|MONUMENTO NACIONAL DO PORTUGAL|IPPAR = #006600
|NATIONAL REGISTER OF HISTORIC MONUMENTS IN ROMANIA|MONUMENT ISTORIC
|ROMANIA|ROMANIAN = #800000
|SERBIAN CULTURAL PROPERTY OF GREAT IMPORTANCE|SERBIA|SERBIAN
|CULTURAL PROPERTY OF GREAT IMPORTANCE|CULTURAL HERITAGE OF SERBIA = blue
|NATIONAL MONUMENT OF SINGAPORE|SINGAPORE NATIONAL MONUMENT|SINGAPORE = red
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES = #1E8C00
|SPANISH PROPERTY OF CULTURAL INTEREST|BIEN DE INTERES CULTURAL
|SPANISH|SPAIN = #AA151B
|SWISS CULTURAL PROPERTY OF NATIONAL SIGNIFICANCE|SWISS|SWITZERLAND
|SWISS CULTURAL PROPERTY = red
|LISTED BUILDING|UNITED KINGDOM LISTED BUILDING|UK LISTED BUILDING = #F0DC82
|CATEGORY A LISTED BUILDING|CATEGORY A|SCOTLAND CATEGORY A
|GRADE A LISTED BUILDING|GRADE A|NORTHERN IRELAND GRADE A
|GRADE I LISTED BUILDING|GRADE I|UNITED KINGDOM GRADE I|UK GRADE I = #FFC0CB
|CATEGORY B LISTED BUILDING|CATEGORY B|SCOTLAND CATEGORY B
|GRADE B+ LISTED BUILDING|GRADE B+|NORTHERN IRELAND GRADE B+
|GRADE II* LISTED BUILDING|GRADE II*|UNITED KINGDOM GRADE II*
|UK GRADE II* = #87CEEB
|CATEGORY C LISTED BUILDING|CATEGORY C|SCOTLAND CATEGORY C
|GRADE B1 LISTED BUILDING|GRADE B1|NORTHERN IRELAND GRADE B1
|GRADE II LISTED BUILDING|GRADE II|UNITED KINGDOM GRADE II|UK GRADE II = #ACE1AF
|GRADE B2 LISTED BUILDING|GRADE B2|NORTHERN IRELAND GRADE B2 = #BDB76B
|SCHEDULED MONUMENT|SCHEDULED ANCIENT MONUMENT|ANCIENT MONUMENT
|UK SCHEDULED MONUMENT|UK ANCIENT MONUMENT|SCHEDULED HISTORIC MONUMENT
|UK MONUMENT IN STATE CARE|UK SCHEDULED ANCIENT MONUMENT
|UK SCHEDULED HISTORIC MONUMENT = #00247D
|NATIONAL REGISTER OF HISTORIC PLACES|NRHP = #A8EDEF
|UNITED STATES HISTORIC DISTRICT|U.S. HISTORIC DISTRICT|NRHP-HD|HD
|US HISTORIC DISTRICT|HISTORIC DISTRICT = #E6E6FA
|UNITED STATES CONTRIBUTING PROPERTY|US CONTRIBUTING PROPERTY
|CONTRIBUTING PROPERTY|NRHP-CP|CP|U.S. CONTRIBUTING PROPERTY = #CCFFCC
|UNITED STATES NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|US NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY|NRHP-NHLDCP
|NHLDCP|U.S. NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY = #CCFFCC
|U.S. NATIONAL BATTLEFIELD|US NATIONAL BATTLEFIELD
|NATIONAL BATTLEFIELD|NRHP-NB|NB = #FFE6B0
|U.S. NATIONAL BATTLEFIELD PARK|US NATIONAL BATTLEFIELD PARK
|NATIONAL BATTLEFIELD PARK|NRHP-NBP|NBP = #E6E6AA
|U.S. NATIONAL BATTLEFIELD SITE|US NATIONAL BATTLEFIELD SITE
|NATIONAL BATTLEFIELD SITE|NRHP-NBS|NBS = #FFE8E8
|U.S. NATIONAL HISTORIC LANDMARK|US NATIONAL HISTORIC LANDMARK
|NATIONAL HISTORIC LANDMARK|NRHP-NHL|NHL = #87CEEB
|U.S. NATIONAL HISTORIC LANDMARK DISTRICT
|US NATIONAL HISTORIC LANDMARK DISTRICT
|NATIONAL HISTORIC LANDMARK DISTRICT|NRHP-NHLD|NHLD = #00CED1
|U.S. NATIONAL HISTORICAL PARK|US NATIONAL HISTORICAL PARK
|NATIONAL HISTORICAL PARK|NRHP-NHP|NHP = #CCCCFF
|U.S. NATIONAL HISTORIC RESERVE|US NATIONAL HISTORIC RESERVE
|NATIONAL HISTORIC RESERVE|NRHP-NHR|NHR = #E9967A
|U.S. NATIONAL HISTORIC SITE|US NATIONAL HISTORIC SITE
|NATIONAL HISTORIC SITE|NRHP-NHS|NHS = #5F9EA0
|U.S. NATIONAL MEMORIAL|US NATIONAL MEMORIAL|NATIONAL MEMORIAL
|NRHP-NMEM|NMEM = #CCCCCC
|U.S. NATIONAL MONUMENT|US NATIONAL MONUMENT|NATIONAL MONUMENT
|NRHP-NMON|NMON = #FFEFD5
|U.S. NATIONAL MILITARY PARK|US NATIONAL MILITARY PARK
|NATIONAL MILITARY PARK|NRHP-NMP|NMP = #EED8D2
|U.S. NATIONAL NATURAL LANDMARK|US NATIONAL NATURAL LANDMARK
|NATIONAL NATURAL LANDMARK|NNL = #ACE1AF
|WALES HISTORIC PARK | WELSH HISTORIC PARK
|REGISTER OF PARKS AND GARDENS OF SPECIAL HISTORIC INTEREST IN WALES
|REGISTER OF PARKS AND GARDENS IN WALES
|WALES HISTORIC GARDEN = #1E8C00
|NATIONAL MONUMENT OF ZAMBIA|ZAMBIAN NATIONAL MONUMENT|ZAMBIA = #44944A
<!------------State/Provincial designations----------->
|ALBERTA|ALBERTA HISTORIC RESOURCES ACT|AHRA = #2B60DE
|NEW BRUNSWICK|NEW BRUNSWICK HERITAGE CONSERVATION ACT|NBHCA = #FBB917
|NOVA SCOTIA|NSHPA|NOVA SCOTIA HERITAGE PROPERTY ACT = #2B60DE
|ONTARIO HERITAGE ACT|ONTARIO = #347C2C
|PRINCE EDWARD ISLAND|PEI|HERITAGE PLACES PROTECTION ACT = #339999
|REPERTOIRE DU PATRIMOINE CULTUREL DU QUEBEC|QUEBEC
|CULTURAL HERITAGE REGISTER OF QUEBEC = #0033CC
|SASKATCHEWAN HERITAGE PROPERTY ACT|SASKATCHEWAN|SHPA = #339900
|DECLARED MONUMENT OF HONG KONG|HONG KONG DECLARED MONUMENT
|HK DECLARED MONUMENT = red
|HONG KONG GRADED BUILDING|HK GRADED BUILDING|GRADED BUILDING = #F0DC82
|HONG KONG GRADE I HISTORIC BUILDING|HONG KONG GRADE I|HK GRADE I = #FFC0CB
|HONG KONG GRADE II HISTORIC BUILDING|HONG KONG GRADE II|HK GRADE II = #ACE1AF
|HONG KONG GRADE III HISTORIC BUILDING|HONG KONG GRADE III|HK GRADE III= #87CEEB
|ALABAMA REGISTER|ALABAMA LANDMARK|ALABAMA|USAL|ARLH = #83A06B
|CALIFORNIA HISTORICAL LANDMARK|CALIFORNIA|CHISL = #FFC94B
|COLORADO STATE REGISTER OF HISTORIC PROPERTIES|COLORADO|CSRHP|USCO = #AECF6B
|INDIANA REGISTER OF HISTORIC SITES AND STRUCTURES|INDIANA|IRHSS|USIN = #DEB887
|MICHIGAN STATE HISTORIC SITE|MICHIGAN|MSHS = #DACAA5
|MISSISSIPPI LANDMARK|MISSISSIPPI|USMS = #B3A1D7
|NEW HAMPSHIRE STATE REGISTER OF HISTORIC PLACES
|NEW HAMPSHIRE STATE REGISTER|NEW HAMPSHIRE|NHSR|NHSRHP|USNH = #A8BDEC
|NEW JERSEY REGISTER OF HISTORIC PLACES|NEW JERSEY|NJRHP|USNJ = #FFC94B
|N.M. STATE REGISTER OF CULTURAL PROPERTIES|NEW MEXICO STATE REGISTER
|NEW MEXICO|NMSRCP|NMSR|USNM = #FAF284
|NEVADA HISTORICAL MARKER|NEVADA MARKER|NEVADA|USNV = #FFC94B
|PENNSYLVANIA|PENNSYLVANIA HISTORICAL MARKER|PENNSYLVANIA MARKER
|PA MARKER = navy
|QUEENSLAND HERITAGE REGISTER|QHR = #FBB917
|RECORDED TEXAS HISTORIC LANDMARK|TEXAS|RTHL|USTX = #D6BC98
|VIRGINIA LANDMARKS REGISTER|VIRGINIA|VLR|USVA = #C1D1AE
<!------------Local designations---------------------->
|YANGON CITY HERITAGE LIST|YANGON LANDMARK|YANGON CITY LANDMARK
|YANGON CITY|YANGON|त्रिकुम्बन|त्रिकुम्बनगर = #2E8B57
|ALBUQUERQUE HISTORIC LANDMARK|ALBUQUERQUE|ALBHL = #FF99FF
|BERKELEY LANDMARK|BERKELEY|BERKL = #FFE4B5
|CHICAGO LANDMARK|CHICAGO|CHICL = #AACCFF
|DALLAS LANDMARK|DALLAS = #F5DEB3
|DAVENPORT REGISTER OF HISTORIC PROPERTIES|DAVENPORT|DRHP = #EEE8AA
|LONG BEACH HISTORIC LANDMARK|LONG BEACH|LBHL = #FFD4E1
|LOS ANGELES HISTORIC-CULTURAL MONUMENT
|LOS ANGELES HISTORIC CULTURAL MONUMENT|LOS ANGELES|LAHCM = #FFC94B
|NEW YORK CITY LANDMARK|NYC LANDMARK|NEW YORK CITY|NYC|NYCL = #DB0000
|OMAHA LANDMARK|OMAHA = #EEE8AA
|OYSTER BAY LANDMARK|OYSTER BAY, NEW YORK|OYSTER BAY, NY|OYSTER BAY = #D0F0C0
|PHILADELPHIA REGISTER OF HISTORIC PLACES|PHILADELPHIA|PRHP = #A8BDEC
|PITTSBURGH HISTORIC LANDMARK|PITTSBURGH LANDMARK|PITTSBURGH|PHLF = gold
|PGHL|CITY OF PITTSBURGH|PITTSBURGH HISTORIC DESIGNATION|CPHD = black
|RIVERSIDE LANDMARK|RIVERSIDE|RIVL = #BBB2FF
|ST. LOUIS LANDMARK|ST LOUIS LANDMARK|ST. LOUIS|ST LOUIS = #AAAAAA
|SAN DIEGO HISTORIC LANDMARK|SAN DIEGO|SDHL = #FFE978
|SAN FRANCISCO LANDMARK|SAN FRANCISCO DESIGNATED LANDMARK
|SAN FRANCISCO|SFDL = #FFC94B
|SANTA MONICA HISTORIC LANDMARK|SANTA MONICA|SMHL = #DDA0DD
|SEATTLE LANDMARK|SEATTLE = #D8DBDF
<!------------Delisted-------------------------------->
|FORMERNHLD|FORMERHD|FORMERNMON|FORMERNHS|FORMERNMEM|FORMERNHP|FORMERNB
|FORMERNMP|FORMERNBP|FORMERNBS|FORMERNHR|FORMERIHS|FORMERNHL|FORMERWHS = #DDD
<!------------Invalid designation--------------------->
|EXAMPLE = #FFC0CB
|#default = #A8EDEF
}}}}<noinclude>
{{documentation}}
</noinclude>
s24of45bul7byx1vxi69qto69punccb
पटिरूप:Designation
10
7556
104335
2026-09-12T02:15:46Z
咽頭べさ
6149
Created page with "{{#if:{{{1<includeonly>|</includeonly>}}}| {{!}} colspan=2 align=center style="border:4px solid {{#if:{{{delisted|}}} |#ddd |{{Designation/colour|{{{1}}}}} }};"{{!}}'''{{#if:{{{delisted|}}} |ယခင် }}{{Designation/text|{{{1}}}}}''' }}<noinclude>{{documentation}}</noinclude>"
104335
wikitext
text/x-wiki
{{#if:{{{1<includeonly>|</includeonly>}}}|
{{!}} colspan=2 align=center style="border:4px solid {{#if:{{{delisted|}}}
|#ddd
|{{Designation/colour|{{{1}}}}}
}};"{{!}}'''{{#if:{{{delisted|}}}
|ယခင်
}}{{Designation/text|{{{1}}}}}'''
}}<noinclude>{{documentation}}</noinclude>
b4wdcleajbxvaj9w799mrntnd4vqqop
पटिरूप:Designation/colour
10
7557
104336
2026-09-12T02:17:48Z
咽頭べさ
6149
Created page with "{{#tag:nowiki|{{#switch:{{uc:{{{1}}}}} <!------------Global designations---------------------> |WORLD HERITAGE SITE|WHS = #FFE978 |IUCN CATEGORY IA|IUCN IA|CATEGORY IA|NATURE RESERVE = #E7BFAD |IUCN CATEGORY IB|IUCN IB|CATEGORY IB|WILDERNESS AREA = #DACAA5 |IUCN CATEGORY II|IUCN II|CATEGORY II|NATIONAL PARK = #CDE5B2 |IUCN CATEGORY III|IUCN III|CATEGORY III|NATURAL MONUMEN..."
104336
wikitext
text/x-wiki
{{#tag:nowiki|{{#switch:{{uc:{{{1}}}}}
<!------------Global designations--------------------->
|WORLD HERITAGE SITE|WHS = #FFE978
|IUCN CATEGORY IA|IUCN IA|CATEGORY IA|NATURE RESERVE = #E7BFAD
|IUCN CATEGORY IB|IUCN IB|CATEGORY IB|WILDERNESS AREA = #DACAA5
|IUCN CATEGORY II|IUCN II|CATEGORY II|NATIONAL PARK = #CDE5B2
|IUCN CATEGORY III|IUCN III|CATEGORY III|NATURAL MONUMENT = #BFFFBF
|IUCN CATEGORY IV|IUCN IV|CATEGORY IV|HABITAT MANAGEMENT
|SPECIES MANAGEMENT = #B2E5CD
|IUCN CATEGORY V|IUCN V|CATEGORY V|PROTECTED LANDSCAPE
|PROTECTED SEASCAPE = #A5CADA
|IUCN CATEGORY VI|IUCN VI|CATEGORY VI|MANAGED RESOURCE PROTECTED AREA = #A8BDEC
|RAMSAR WETLAND|RAMSAR|RAMSAR WETLAND OF INTERNATIONAL IMPORTANCE = #8DE3D2
<!------------National/Regional designations---------->
|CULTURAL MONUMENT OF ALBANIA|ALBANIAN CULTURAL MONUMENT|ALBANIA
|MONUMENT KULTURE = #B2E5CD
|NATIONAL HISTORIC MONUMENT OF ARGENTINA|ARGENTINA HISTORIC MONUMENT
|ARGENTINA|NHMA = #A5CADA
|NATIONAL HISTORIC HERITAGE OF BRAZIL|BRAZILIAN HISTORIC HERITAGE
|IPHAN|BRAZIL|NHHB = #CDE5B2
|NATIONAL HISTORIC SITE OF CANADA|CANADIAN NATIONAL HISTORIC SITE
|CANADA|NHSC = #FFC0CB
|PROTECTED NATURAL VALUE OF CROATIA|CROATIAN PROTECTED NATURAL VALUE
|PROTECTED AREA OF CROATIA|CROATIAN PROTECTED AREA|CROATIA NATURAL
|SPOMENIK PRIRODE = #FFE978
|CULTURAL GOOD OF CROATIA|CROATIAN CULTURAL GOOD|CROATIA CULTURAL
|SPOMENIK KULTURE = #DACAA5
|NATIONAL REGISTER OF HISTORIC PARKS AND GARDENS|ENGLAND HISTORIC PARK
|ENGLAND HISTORIC GARDEN|ENGLISH HISTORIC PARK|ENGLISH HISTORIC GARDEN
|REGISTER OF HISTORIC PARKS AND GARDENS|HISTORIC PARKS AND GARDENS = #A5CADA
|MONUMENT HISTORIQUE|FRANCE|FRENCH = #A8BDEC
|IRISH NATIONAL MONUMENT|NATIONAL MONUMENT OF IRELAND|IRELAND|IRISH
|IRELAND MONUMENT IN STATE CARE|IRISH MONUMENT IN STATE CARE = #BFFFBF
|NATIONAL TREASURE OF JAPAN|JAPANESE NATIONAL TREASURE|JAPAN = #FFC0CB
|MONUMENTO NACIONAL DE CHILE|NATIONAL MONUMENT OF CHILE|CHILE = #B2E5CD
|RIJKSMONUMENT|DUTCH NATIONAL MONUMENT|NETHERLANDS NATIONAL MONUMENT
|NATIONAL MONUMENT OF THE NETHERLANDS|NETHERLANDS|DUTCH = #A5CADA
|NEW ZEALAND HISTORIC PLACES TRUST CATEGORY I|NEW ZEALAND CATEGORY I
|NZ CATEGORY I
|NEW ZEALAND HISTORIC PLACES TRUST CATEGORY II|NEW ZEALAND CATEGORY II
|NZ CATEGORY II = #CDE5B2
|NORTHERN IRELAND HISTORIC PARK | NORTHERN IRELAND HISTORIC GARDEN
|REGISTER OF PARKS GARDENS AND DEMESNES OF SPECIAL HISTORIC INTEREST|
|REGISTER OF PARKS, GARDENS AND DEMESNES|PARKS, GARDENS AND DEMESNES = #DACAA5
|NATIONAL MONUMENT OF PORTUGAL|PORTUGUESE NATIONAL MONUMENT|PORTUGAL
|MONUMENTO NACIONAL DO PORTUGAL|IPPAR = #FFE978
|NATIONAL REGISTER OF HISTORIC MONUMENTS IN ROMANIA|MONUMENT ISTORIC
|ROMANIA|ROMANIAN = #BFFFBF
|SERBIAN CULTURAL PROPERTY OF GREAT IMPORTANCE|SERBIA|SERBIAN
|CULTURAL PROPERTY OF GREAT IMPORTANCE|CULTURAL HERITAGE OF SERBIA = #B2E5CD
|NATIONAL MONUMENT OF SINGAPORE|SINGAPORE NATIONAL MONUMENT|SINGAPORE = #FFE978
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|GARDENS AND DESIGNED LANDSCAPES IN SCOTLAND
|INVENTORY OF GARDENS AND DESIGNED LANDSCAPES = #CDE5B2
|SPANISH PROPERTY OF CULTURAL INTEREST|BIEN DE INTERES CULTURAL
|SPANISH|SPAIN = #FFE978
|SWISS CULTURAL PROPERTY OF NATIONAL SIGNIFICANCE|SWISS|SWITZERLAND
|SWISS CULTURAL PROPERTY = #FFC0CB
|LISTED BUILDING|UNITED KINGDOM LISTED BUILDING|UK LISTED BUILDING = #F0DC82
|CATEGORY A LISTED BUILDING|CATEGORY A|SCOTLAND CATEGORY A
|GRADE A LISTED BUILDING|GRADE A|NORTHERN IRELAND GRADE A
|GRADE I LISTED BUILDING|GRADE I|UNITED KINGDOM GRADE I|UK GRADE I = #FFC0CB
|CATEGORY B LISTED BUILDING|CATEGORY B|SCOTLAND CATEGORY B
|GRADE B+ LISTED BUILDING|GRADE B+|NORTHERN IRELAND GRADE B+
|GRADE II* LISTED BUILDING|GRADE II*|UNITED KINGDOM GRADE II*
|UK GRADE II* = #87CEEB
|CATEGORY C LISTED BUILDING|CATEGORY C|SCOTLAND CATEGORY C
|GRADE B1 LISTED BUILDING|GRADE B1|NORTHERN IRELAND GRADE B1
|GRADE II LISTED BUILDING|GRADE II|UNITED KINGDOM GRADE II|UK GRADE II = #ACE1AF
|GRADE B2 LISTED BUILDING|GRADE B2|NORTHERN IRELAND GRADE B2 = #DACAA5
|SCHEDULED MONUMENT|SCHEDULED ANCIENT MONUMENT|ANCIENT MONUMENT
|UK SCHEDULED MONUMENT|UK ANCIENT MONUMENT|SCHEDULED HISTORIC MONUMENT
|UK MONUMENT IN STATE CARE|UK SCHEDULED ANCIENT MONUMENT
|UK SCHEDULED HISTORIC MONUMENT = #A5CADA
|NATIONAL REGISTER OF HISTORIC PLACES|NRHP = #A8EDEF
|UNITED STATES HISTORIC DISTRICT|U.S. HISTORIC DISTRICT|NRHP-HD|HD
|US HISTORIC DISTRICT|HISTORIC DISTRICT = #E6E6FA
|UNITED STATES CONTRIBUTING PROPERTY|US CONTRIBUTING PROPERTY
|CONTRIBUTING PROPERTY|NRHP-CP|CP|U.S. CONTRIBUTING PROPERTY = #CCFFCC
|UNITED STATES NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|US NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY
|NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY|NRHP-NHLDCP
|NHLDCP|U.S. NATIONAL HISTORIC LANDMARK DISTRICT CONTRIBUTING PROPERTY = #CCFFCC
|U.S. NATIONAL BATTLEFIELD|US NATIONAL BATTLEFIELD
|NATIONAL BATTLEFIELD|NRHP-NB|NB = #FFE6B0
|U.S. NATIONAL BATTLEFIELD PARK|US NATIONAL BATTLEFIELD PARK
|NATIONAL BATTLEFIELD PARK|NRHP-NBP|NBP = #E6E6AA
|U.S. NATIONAL BATTLEFIELD SITE|US NATIONAL BATTLEFIELD SITE
|NATIONAL BATTLEFIELD SITE|NRHP-NBS|NBS = #FFE8E8
|U.S. NATIONAL HISTORIC LANDMARK|US NATIONAL HISTORIC LANDMARK
|NATIONAL HISTORIC LANDMARK|NRHP-NHL|NHL = #87CEEB
|U.S. NATIONAL HISTORIC LANDMARK DISTRICT
|US NATIONAL HISTORIC LANDMARK DISTRICT
|NATIONAL HISTORIC LANDMARK DISTRICT|NRHP-NHLD|NHLD = #A8EDEF
|U.S. NATIONAL HISTORICAL PARK|US NATIONAL HISTORICAL PARK
|NATIONAL HISTORICAL PARK|NRHP-NHP|NHP = #CCCCFF
|U.S. NATIONAL HISTORIC RESERVE|US NATIONAL HISTORIC RESERVE
|NATIONAL HISTORIC RESERVE|NRHP-NHR|NHR = #A8EDEF
|U.S. NATIONAL HISTORIC SITE|US NATIONAL HISTORIC SITE
|NATIONAL HISTORIC SITE|NRHP-NHS|NHS = #A8EDEF
|U.S. NATIONAL MEMORIAL|US NATIONAL MEMORIAL|NATIONAL MEMORIAL
|NRHP-NMEM|NMEM = #CCCCCC
|U.S. NATIONAL MONUMENT|US NATIONAL MONUMENT|NATIONAL MONUMENT
|NRHP-NMON|NMON = #FFEFD5
|U.S. NATIONAL MILITARY PARK|US NATIONAL MILITARY PARK
|NATIONAL MILITARY PARK|NRHP-NMP|NMP = #EED8D2
|WALES HISTORIC PARK | WELSH HISTORIC PARK
|REGISTER OF PARKS AND GARDENS OF SPECIAL HISTORIC INTEREST IN WALES
|REGISTER OF PARKS AND GARDENS IN WALES
|WALES HISTORIC GARDEN = #A8EDEF
|NATIONAL MONUMENT OF ZAMBIA|ZAMBIAN NATIONAL MONUMENT|ZAMBIA = #A8EDEF
|NATIONAL NATURAL LANDMARK|NNL = #ACE1AF
<!------------State/Provincial designations----------->
|ONTARIO HERITAGE ACT|ONTARIO = #90EE90
|REPERTOIRE DU PATRIMOINE CULTUREL DU QUEBEC|QUEBEC
|CULTURAL HERITAGE REGISTER OF QUEBEC = #A8BDEC
|DECLARED MONUMENT OF HONG KONG|HONG KONG DECLARED MONUMENT
|HK DECLARED MONUMENT = #A8EDEF
|HONG KONG GRADED BUILDING|HK GRADED BUILDING|GRADED BUILDING = #F0DC82
|HONG KONG GRADE I HISTORIC BUILDING|HONG KONG GRADE I|HK GRADE I = #FFC0CB
|HONG KONG GRADE II HISTORIC BUILDING|HONG KONG GRADE II|HK GRADE II = #ACE1AF
|HONG KONG GRADE III HISTORIC BUILDING|HONG KONG GRADE III|HK GRADE III= #87CEEB
|ALABAMA REGISTER|ALABAMA LANDMARK|ALABAMA|USAL|ARLH = #CDE5B2
|CALIFORNIA HISTORICAL LANDMARK|CALIFORNIA|CHISL = #FFC94B
|COLORADO STATE REGISTER OF HISTORIC PROPERTIES|COLORADO|CSRHP|USCO = #AECF6B
|INDIANA REGISTER OF HISTORIC SITES AND STRUCTURES|INDIANA|IRHSS|USIN = #DEB887
|MICHIGAN STATE HISTORIC SITE|MICHIGAN|MSHS = #DACAA5
|MISSISSIPPI LANDMARK|MISSISSIPPI|USMS = #A8BDEC
|NEW HAMPSHIRE STATE REGISTER OF HISTORIC PLACES
|NEW HAMPSHIRE STATE REGISTER|NEW HAMPSHIRE|NHSRHP|NHSR|USNH = #A8BDEC
|NEW JERSEY REGISTER OF HISTORIC PLACES|NEW JERSEY|NJRHP|USNJ = #FFC94B
|N.M. STATE REGISTER OF CULTURAL PROPERTIES|NEW MEXICO STATE REGISTER
|NEW MEXICO|NMSRCP|NMSR|USNM = #FAF284
|NEVADA HISTORICAL MARKER|NEVADA MARKER|NEVADA|USNV = #FFE978
|PENNSYLVANIA|PENNSYLVANIA HISTORICAL MARKER|PENNSYLVANIA MARKER
|PA MARKER = #FFC94B
|QUEENSLAND HERITAGE REGISTER|QHR = #FBB917
|RECORDED TEXAS HISTORIC LANDMARK|TEXAS|RTHL|USTX = #DACAA5
|VIRGINIA LANDMARKS REGISTER|VIRGINIA|VLR|USVA = #C1D1AE
<!------------Local designations---------------------->
|YANGON CITY HERITAGE LIST|YANGON LANDMARK|YANGON CITY LANDMARK
|YANGON CITY|YANGON|त्रिकुम्बन|त्रिकुम्बनगर = #A8EDEF
|ALBUQUERQUE HISTORIC LANDMARK|ALBUQUERQUE|ALBHL = #FF99FF
|BERKELEY LANDMARK|BERKELEY|BERKL = #FFE4B5
|CHICAGO LANDMARK|CHICAGO|CHICL = #AACCFF
|DALLAS LANDMARK|DALLAS = #F5DEB3
|DAVENPORT REGISTER OF HISTORIC PROPERTIES|DAVENPORT|DRHP = #EEE8AA
|LONG BEACH HISTORIC LANDMARK|LONG BEACH|LBHL = #FFD4E1
|LOS ANGELES HISTORIC-CULTURAL MONUMENT
|LOS ANGELES HISTORIC CULTURAL MONUMENT|LOS ANGELES|LAHCM = #FFE978
|NEW YORK CITY LANDMARK|NYC LANDMARK|NEW YORK CITY|NYC|NYCL = #FFE978
|OMAHA LANDMARK|OMAHA = #EEE8AA
|OYSTER BAY LANDMARK|OYSTER BAY, NEW YORK|OYSTER BAY, NY|OYSTER BAY = #D0F0C0
|PHILADELPHIA REGISTER OF HISTORIC PLACES|PHILADELPHIA|PRHP = #A8BDEC
|PITTSBURGH HISTORIC LANDMARK|PITTSBURGH LANDMARK|PITTSBURGH|PHLF = gold
|PGHL|CITY OF PITTSBURGH|PITTSBURGH HISTORIC DESIGNATION|CPHD = #FFF89F
|RIVERSIDE LANDMARK|RIVERSIDE|RIVL = #A8BDEC
|SAN DIEGO HISTORIC LANDMARK|SAN DIEGO|SDHL = #FFE978
|SANTA MONICA HISTORIC LANDMARK|SANTA MONICA|SMHL = #D8AFE2
|SAN FRANCISCO LANDMARK|SAN FRANCISCO DESIGNATED LANDMARK
|SAN FRANCISCO|SFDL = #FFE978
|ST. LOUIS LANDMARK|ST LOUIS LANDMARK|ST. LOUIS|ST LOUIS = #BFFFBF
|SEATTLE LANDMARK|SEATTLE = #D8DBDF
<!------------Delisted-------------------------------->
|FORMERNHLD|FORMERHD|FORMERNMON|FORMERNHS|FORMERNMEM|FORMERNHP|FORMERNB
|FORMERNMP|FORMERNBP|FORMERNBS|FORMERNHR|FORMERIHS|FORMERNHL|FORMERWHS = #DDDDDD
<!------------Invalid designation--------------------->
|EXAMPLE = #FFC0CB
|#default = #A8EDEF
}}}}<noinclude>
{{documentation}}
</noinclude>
7pr1d8xl26ik601zucv7krqoos9e4vi
पटिरूप:Fix
10
7558
104337
2026-09-12T02:22:07Z
咽頭べさ
6149
Created page with "{{#switch:{{{subst|¬}}} |¬={{category handler |template= |nocat={{{nocat|<noinclude>true</noinclude>}}} }} |SUBST= }}{{Category handler |main={{Fix/category |cat-date={{{cat-date|}}} |cat={{{cat|}}} |cat-date2={{{cat-date2|}}} |cat2={{{cat2|}}} |cat-date3={{{cat-date3|}}} |cat3={{{cat3|}}} |date={{{date|}}} }} |template={{#if:{{{name|}}}|{{#ifeq:{{{name}}}|{{ROOTPAGENAME}}||{{#if:{{{date|}}}|| }}}}}} |subpage=no }}{{#if:{{{text|}}} |<su..."
104337
wikitext
text/x-wiki
{{#switch:{{{subst|¬}}}
|¬={{category handler
|template=
|nocat={{{nocat|<noinclude>true</noinclude>}}}
}}
|SUBST=
}}{{Category handler
|main={{Fix/category
|cat-date={{{cat-date|}}}
|cat={{{cat|}}}
|cat-date2={{{cat-date2|}}}
|cat2={{{cat2|}}}
|cat-date3={{{cat-date3|}}}
|cat3={{{cat3|}}}
|date={{{date|}}}
}}
|template={{#if:{{{name|}}}|{{#ifeq:{{{name}}}|{{ROOTPAGENAME}}||{{#if:{{{date|}}}|| }}}}}}
|subpage=no
}}{{#if:{{{text|}}}
|<sup class="noprint Inline-Template {{{class|}}}" style="white-space:nowrap;">[<i>{{#if:{{{pre-text|}}}
|{{{pre-text}}} 
}}[[{{{link|WP:CLEANUP}}}|<span title="{{delink|1={{{title|{{{link|WP:CLEANUP}}}}}}{{#if:{{{date|}}}| ({{{date}}})}}}}">{{{text|}}}</span>]]{{#if:{{{post-text|}}}
| {{{post-text}}}
}}</i>]</sup>|{{{special|}}}
}}<noinclude>
{{Documentation}}
<!-- Add cats and interwikis to the /doc subpage, not here! -->
</noinclude>
n1gh6y9byn2zwo0fi0znlh3skkeem54
Module:Protection banner
828
7559
104338
2026-09-12T02:24:44Z
咽頭べさ
6149
Created page with "-- This module implements {{pp-meta}} and its daughter templates such as -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. -- Initialise necessary modules. require('strict') local makeFileLink = require('Module:File link')._main local effectiveProtectionLevel = require('Module:Effective protection level')._main local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main local yesno = require('Module:Yesno') -- Lazily initialise modules and..."
104338
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protected page/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
if not self:shouldHaveProtectionCategory() then
return true
end
if type(self.expiry) ~= 'number' then
return false
end
local expiry = os.date('*t', self.expiry)
-- Avoid checking today.day or os.time(), unless close. https://phabricator.wikimedia.org/T416616
local today = os.date('*t')
return (expiry.year < today.year)
or (expiry.year == today.year and expiry.month < today.month)
or (expiry.year == today.year and expiry.month == today.month and expiry.day < today.day)
or (expiry.year == today.year and expiry.month == today.month and expiry.day == today.day and self.expiry < os.time())
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
-- For arbitration enforcement, flagging [[WP:PIA]] pages to enable [[Special:AbuseFilter/1339]] to flag edits to them
if protectionObj.level == "extendedconfirmed" then
if require("Module:TableTools").inArray(protectionObj.title.talkPageTitle.categories, "Wikipedia pages subject to the extended confirmed restriction related to the Arab-Israeli conflict") then
ret[#ret + 1] = "<p class='PIA-flag' style='display:none; visibility:hidden;' title='This page is subject to the extended confirmed restriction related to the Arab-Israeli conflict.'></p>"
end
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
p8ryzquso3eyufqyguwh2oyqz5eu1l6
Module:Color contrast
828
7560
104340
2026-09-12T02:27:06Z
咽頭べさ
6149
Created page with "-- -- This module implements -- {{Color contrast ratio}} -- {{Greater color contrast ratio}} -- {{ColorToLum}} -- {{RGBColorToLum}} -- local p = {} local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' ) local function sRGB (v) if (v <= 0.03928) then v = v / 12.92 else v = math.pow((v+0.055)/1.055, 2.4) end return v end local function rgbdec2lum(R, G, B) if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then return 0.2126 *..."
104340
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB (v)
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum(R, G, B)
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum(h, s, l)
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum(c)
if (c == nil) then
return ''
end
-- html '#' entity
c = c:gsub("#", "#")
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
-- This exports the function for use in other modules.
-- The colour is passed as a string.
function p._lum(color)
return color2lum(color)
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local css = (args['css'] and args['css'] ~= '') and true or false
local v1 = color2lum(args[1] or '')
local c2 = args[2] or 'white'
local v2 = color2lum(c2)
local c3 = args[3] or 'black'
local v3 = color2lum(c3)
local ratio1 = -1;
local ratio2 = -1;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
if css then
local c1 = args[1] or ''
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c1 = '#' .. c1
end
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c2 = '#' .. c2
end
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c3 = '#' .. c3
end
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
end
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';')
for k = 1,#slist do
local s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
--[[
Use {{#invoke:Color contrast|somecolor}} directly or
{{#invoke:Color contrast}} from a wrapper template.
Parameters:
-- |1= — required; A color to check.
--]]
function p.lum(frame)
local color = frame.args[1] or frame:getParent().args[1]
return p._lum(color)
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
bx0blwcv5isqzm2jrxnp01lj4148n73
Module:Color contrast/colors
828
7561
104341
2026-09-12T02:27:59Z
咽頭べさ
6149
Created page with "return { aliceblue = 0.92880068253475, antiquewhite = 0.84646951707754, aqua = 0.7874, aquamarine = 0.8078549208338, azure = 0.97265264954166, beige = 0.8988459998705, bisque = 0.80732327372979, black = 0, blanchedalmond = 0.85084439608156, blue = 0.0722, blueviolet = 0.12622014321946, brown = 0.098224287876511..."
104341
Scribunto
text/plain
return {
aliceblue = 0.92880068253475,
antiquewhite = 0.84646951707754,
aqua = 0.7874,
aquamarine = 0.8078549208338,
azure = 0.97265264954166,
beige = 0.8988459998705,
bisque = 0.80732327372979,
black = 0,
blanchedalmond = 0.85084439608156,
blue = 0.0722,
blueviolet = 0.12622014321946,
brown = 0.098224287876511,
burlywood = 0.51559844533893,
cadetblue = 0.29424681085422,
chartreuse = 0.76032025902623,
chocolate = 0.23898526114557,
coral = 0.37017930872924,
cornflowerblue = 0.30318641994179,
cornsilk = 0.93562110372965,
crimson = 0.16042199953026,
cyan = 0.7874,
darkblue = 0.018640801980939,
darkcyan = 0.20329317839046,
darkgoldenrod = 0.27264703559993,
darkgray = 0.39675523072563,
darkgreen = 0.091143429047575,
darkgrey = 0.39675523072563,
darkkhaki = 0.45747326349994,
darkmagenta = 0.07353047651207,
darkolivegreen = 0.12651920884889,
darkorange = 0.40016167026524,
darkorchid = 0.13413142174857,
darkred = 0.054889674531132,
darksalmon = 0.40541471563381,
darkseagreen = 0.43789249325969,
darkslateblue = 0.065792846227988,
darkslategray = 0.067608151928044,
darkslategrey = 0.067608151928044,
darkturquoise = 0.4874606277449,
darkviolet = 0.10999048339343,
deeppink = 0.23866895828276,
deepskyblue = 0.44481603395575,
dimgray = 0.14126329114027,
dimgrey = 0.14126329114027,
dodgerblue = 0.27442536991456,
firebrick = 0.10724525535015,
floralwhite = 0.95922484825004,
forestgreen = 0.18920812076002,
fuchsia = 0.2848,
gainsboro = 0.71569350050648,
ghostwhite = 0.94311261886323,
gold = 0.69860877428159,
goldenrod = 0.41919977809569,
gray = 0.2158605001139,
green = 0.15438342968146,
greenyellow = 0.80609472611453,
grey = 0.2158605001139,
honeydew = 0.96336535554782,
hotpink = 0.34658438169715,
indianred = 0.21406134963884,
indigo = 0.03107561486337,
ivory = 0.99071270600615,
khaki = 0.77012343394121,
lavender = 0.80318750514521,
lavenderblush = 0.90172748631046,
lawngreen = 0.73905893124963,
lemonchiffon = 0.94038992245622,
lightblue = 0.63709141280807,
lightcoral = 0.35522120733135,
lightcyan = 0.94587293494829,
lightgoldenrodyellow = 0.93348351018297,
lightgray = 0.65140563741982,
lightgreen = 0.69091979956865,
lightgrey = 0.65140563741982,
lightpink = 0.58566152734898,
lightsalmon = 0.4780675225206,
lightseagreen = 0.35050145117042,
lightskyblue = 0.56195637618331,
lightslategray = 0.23830165007287,
lightslategrey = 0.23830165007287,
lightsteelblue = 0.53983888284666,
lightyellow = 0.98161818392882,
lime = 0.7152,
limegreen = 0.44571042246098,
linen = 0.88357340984379,
magenta = 0.2848,
maroon = 0.045891942324215,
mediumaquamarine = 0.49389703310801,
mediumblue = 0.044077780212328,
mediumorchid = 0.21639251153773,
mediumpurple = 0.22905858091648,
mediumseagreen = 0.34393112338131,
mediumslateblue = 0.20284629471622,
mediumspringgreen = 0.70704308194184,
mediumturquoise = 0.5133827926448,
mediumvioletred = 0.14371899849357,
midnightblue = 0.02071786635086,
mintcream = 0.97834604947588,
mistyrose = 0.82183047859185,
moccasin = 0.80083000991567,
navajowhite = 0.76519682342785,
navy = 0.015585128108224,
oldlace = 0.91900633405549,
olive = 0.20027537200568,
olivedrab = 0.22593150951929,
orange = 0.4817026703631,
orangered = 0.25516243753416,
orchid = 0.31348806761439,
palegoldenrod = 0.78792647887614,
palegreen = 0.77936759006353,
paleturquoise = 0.76436077921714,
palevioletred = 0.28754994117889,
papayawhip = 0.87797100199835,
peachpuff = 0.74905589878251,
peru = 0.30113074877936,
pink = 0.63271070702466,
plum = 0.45734221587969,
powderblue = 0.68254586500605,
purple = 0.061477070432439,
rebeccapurple = 0.07492341159447,
red = 0.2126,
rosybrown = 0.32319457649407,
royalblue = 0.16663210743188,
saddlebrown = 0.097922285020521,
salmon = 0.36977241527596,
sandybrown = 0.46628543696283,
seagreen = 0.19734199706275,
seashell = 0.92737862206922,
sienna = 0.13697631337098,
silver = 0.52711512570581,
skyblue = 0.55291668518184,
slateblue = 0.14784278062136,
slategray = 0.20896704076536,
slategrey = 0.20896704076536,
snow = 0.96533341834849,
springgreen = 0.73052306068529,
steelblue = 0.20562642207625,
tan = 0.48237604163921,
teal = 0.16996855778968,
thistle = 0.56818401093733,
tomato = 0.30638612719415,
turquoise = 0.5895536427578,
violet = 0.40315452986676,
wheat = 0.74909702820482,
white = 1,
whitesmoke = 0.91309865179342,
yellow = 0.9278,
yellowgreen = 0.50762957208707,
}
chi69ar1btd4wp6xbk3uez6sfu0vipn
पटिरूप:High-risk
10
7562
104342
2026-09-12T02:35:08Z
咽頭べさ
6149
Created page with "{{ombox | type = content | image = [[File:Ambox warning orange.svg|40px|alt=|link=]] | text = '''अयं {{ #switch:{{NAMESPACE}} |Module=Lua module |#default=पटिरूप }} बहूसु <span class="plainlinks">[http://tools.wmflabs.org/templatecount/index.php?lang=pi&namespace={{NAMESPACENUMBER:{{FULLPAGENAME}}}}&name={{urlencode:{{PAGENAME}}}} {{#if:{{{1|}}}|{{formatnum:{{{1}}}}}|}} पिट्ठेसु पयुत्तो होति]॥''' अ..."
104342
wikitext
text/x-wiki
{{ombox
| type = content
| image = [[File:Ambox warning orange.svg|40px|alt=|link=]]
| text =
'''अयं {{
#switch:{{NAMESPACE}}
|Module=Lua module
|#default=पटिरूप
}} बहूसु <span class="plainlinks">[http://tools.wmflabs.org/templatecount/index.php?lang=pi&namespace={{NAMESPACENUMBER:{{FULLPAGENAME}}}}&name={{urlencode:{{PAGENAME}}}} {{#if:{{{1|}}}|{{formatnum:{{{1}}}}}|}} पिट्ठेसु पयुत्तो होति]॥''' अनिट्ठफलं परिवज्जेतुं विसोधेतुकामो पठमं वालुकामञ्जूसायं वा अत्तनो पिट्ठे वा विमंसितब्बो॥ विमंसनेन अेकवारंयेव विसोधनं आवस्सकं भविस्सति॥ विपरिणामं करोन्तो पुब्बे मन्तेतुं सरस्सु॥
}}<noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
5hw5xbm17dpexia2an9l5kbn6zfi4xt
पटिरूप:Navbox suite
10
7563
104343
2026-09-12T02:36:38Z
咽頭べさ
6149
Created page with "<onlyinclude>{{Navbox |navbar = off |state = off |style = width:auto;float:right;margin:0em 0em 0em 1em; |title = Navbox suite |list1 = {{t1|Navbox}} |list2 = {{t1|Navbox subgroup}} |list3 = {{t1|Navbox with columns}} |list4 = {{t1|Navbox with collapsible groups}} }}</onlyinclude><!-- NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant. In particular, the name, state, border, and navbar pa..."
104343
wikitext
text/x-wiki
<onlyinclude>{{Navbox
|navbar = off
|state = off
|style = width:auto;float:right;margin:0em 0em 0em 1em;
|title = Navbox suite
|list1 = {{t1|Navbox}}
|list2 = {{t1|Navbox subgroup}}
|list3 = {{t1|Navbox with columns}}
|list4 = {{t1|Navbox with collapsible groups}}
}}</onlyinclude><!--
NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant. In particular, the name, state, border, and navbar parameters are especially important. -->
[[Category:Navbox (navigational) templates| ]]
krz0qb04llh8a5r65w0ipgkvsx7hbi7
पटिरूप:Template link
10
7564
104344
2026-09-12T02:37:39Z
咽頭べさ
6149
Created page with "{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude>"
104344
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
h0vr3yvr9jdyd17x82vnav21ngwmxuk
104345
104344
2026-09-12T02:37:57Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:T1]] to [[पटिरूप:Template link]]
104344
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
h0vr3yvr9jdyd17x82vnav21ngwmxuk
पटिरूप:T1
10
7565
104346
2026-09-12T02:37:57Z
咽頭べさ
6149
咽頭べさ moved page [[पटिरूप:T1]] to [[पटिरूप:Template link]]
104346
wikitext
text/x-wiki
#REDIRECT [[पटिरूप:Template link]]
f39eg5jhv8gxncyqwymnhiflw065xnh