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 == "&nbsp;" 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, ' &#124; ') ) 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 '&#x29FC;' .. mw.text.nowiki(key) .. '&#x29FD;' 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;">&thinsp;{{{1}}}</span> }}{{#if:{{{2|}}} |&nbsp;– c.<span style="white-space:nowrap;">&thinsp;{{{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|?}}}|?||&nbsp;अनु ''{{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|?}}}|?||&nbsp;अनु ''{{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|}}}|&#35;ddd|{{Designation/colour2|{{{1}}}}}}}; font-weight: bold; line-height: 1.5; text-align: center;"> '''{{#if:{{{delisted|}}}|पुब्ब&nbsp;}}{{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 = '&nbsp;' .. abbr .. '&nbsp;' .. 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 .. '&nbsp;' .. 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 '&nbsp;' 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('"', '&quot;'), 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 "&nbsp;" in combinations, so -- replace underscore, "&nbsp;", 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('&nbsp;', ' '):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&nbsp;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>&frasl;<span class="den">{DEN}</span></span>', -- 1/2 '<span class="frac">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="num">{NUM}</span>&frasl;<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, '&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 '&nbsp;' or '-' -- at that position ('-' is for adjectival text). -- There is also no space if text starts with '&' -- (e.g. '&deg;' 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) == '&nbsp;') 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 == '&#32;' 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('&nbsp;', '-') end end if rtext == '–' and (options.spaced or after:sub(1, #MINUS) == MINUS) then rtext = '&nbsp;– ' 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 '&#32;' rather than ' ' to avoid the default first = ' [&nbsp;' .. first second = '&nbsp;]' .. 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 '&nbsp;' 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&nbsp;', 'US ', 'U.S.&nbsp;', 'U.S. ' } or { 'imp&nbsp;', '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 '&nbsp;' 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 = '&nbsp;' 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 = '&nbsp;' 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 "&nbsp;" in values like "12 million". info.show = info.show .. (parms.opt_adjectival and '-' or '&nbsp;') .. 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 .. '&nbsp;' 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) .. '&nbsp;' 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 = '&nbsp;' 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 .. '&nbsp;' 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 = '&nbsp;' 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&nbsp;sq&nbsp;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&nbsp;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&nbsp;ft", utype = "area", scale = 0.09290304, default = "m2", }, ["sqft"] = { name1 = "चतुरङ्कपाद", name2 = "चतुरङ्कपाद", symbol = "sq&nbsp;ft", utype = "area", scale = 0.09290304, default = "m2", }, ["sqin"] = { name1 = "चतुरङ्करङ्गुल", name2 = "चतुरङ्करङ्गुल", symbol = "sq&nbsp;in", utype = "area", scale = 0.00064516, default = "cm2", }, ["sqmi"] = { name1 = "चतुरङ्कगावुत", symbol = "sq&nbsp;mi", utype = "area", scale = 2589988.110336, default = "km2", }, ["sqnmi"] = { name1 = "चतुरङ्कजलगावुत", symbol = "sq&nbsp;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&nbsp;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&nbsp;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&#8209;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&#8209;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&thinsp;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.&nbsp;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&nbsp;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&nbsp;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&thinsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&#8209;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&nbsp;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&nbsp;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&nbsp;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&nbsp;ft/min", utype = "flow", scale = 0.00047194744319999999, default = "m3/min", }, ["cuft/s"] = { name1 = "cubic foot per second", name2 = "cubic feet per second", symbol = "cu&nbsp;ft/s", utype = "flow", scale = 28316846592e-12, default = "m3/s", }, ["cumi/a"] = { name1 = "cubic mile per annum", name2 = "cubic miles per annum", symbol = "cu&nbsp;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&nbsp;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&nbsp;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.&nbsp;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.&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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>&#8209;imp</sub>", utype = "fuel efficiency", invert = -1, iscomplex= true, default = "L/100 km+mpgus", symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[Imperial units|imp]]</sub>", }, ["mpgus"] = { per = { "mi", "+USgal" }, symbol = "mpg<sub>&#8209;US</sub>", utype = "fuel efficiency", invert = -1, iscomplex= true, default = "L/100 km+mpgimp", symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[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>&#8209;U.S.</sub>", sp_us = true, symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[United States customary units|U.S.]]</sub>", }, ["mpgu.s."] = { target = "mpgus", symbol = "mpg<sub>&#8209;U.S.</sub>", sp_us = true, symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>&#8209;[[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&nbsp;(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)&nbsp;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&nbsp;U.S.) nautical mile", symbol = "(pre&#8209;1954&nbsp;U.S.) nmi", utype = "length", scale = 1853.24496, default = "km mi", link = "Nautical mile", }, ["pre1954USnmi"] = { name1 = "(pre-1954&nbsp;US) nautical mile", name1_us = "(pre-1954&nbsp;U.S.) nautical mile", symbol = "(pre&#8209;1954&nbsp;US) nmi", sym_us = "(pre&#8209;1954&nbsp;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&nbsp;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&nbsp;cwt", utype = "mass", scale = 50.80234544, default = "lb kg", subdivs = { ["qtr"] = { 4, default = "kg" } }, link = "Hundredweight", }, ["long qtr"] = { name1 = "long quarter", symbol = "long&nbsp;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&nbsp;cwt", utype = "mass", scale = 45.359237, default = "lb kg", link = "Hundredweight", }, ["short qtr"] = { name1 = "short quarter", symbol = "short&nbsp;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&nbsp;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&nbsp;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&#8209;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&#8209;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&#8209;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&#8209;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&#8209;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&#8209;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&#8209;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&#8209;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&nbsp;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&nbsp;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&#8209;s/kg", symbol = "kN&#8209;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&#8209;s/kg", symbol = "N&#8209;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&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;mL) serving", utype = "volume", scale = 0.00035488235475000004, default = "mL", link = "Beverage can#Standard sizes", }, ["-12USoz(ml)serve"] = { name1_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz (355&nbsp;ml) serving", utype = "volume", scale = 0.00035488235475000004, default = "ml", link = "Beverage can#Standard sizes", }, ["-12USozserve"] = { name1_us = "12&nbsp;U.S.&nbsp;fl&nbsp;oz serving", symbol = "12&nbsp;US&nbsp;fl&nbsp;oz serving", sym_us = "12&nbsp;U.S.&nbsp;fl&nbsp;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&nbsp;tbsp", utype = "volume", scale = 0.000020, default = "ml", }, ["Bcuft"] = { name1 = "billion cubic foot", name2 = "billion cubic feet", symbol = "billion cu&nbsp;ft", utype = "volume", scale = 28316846.592, default = "Gl", link = "Cubic foot", }, ["bdft"] = { name1 = "board foot", name2 = "board feet", symbol = "bd&nbsp;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&nbsp;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&nbsp;ft", utype = "volume", scale = 0.028316846592, default = "m3", }, ["cuft"] = { name1 = "cubic foot", name2 = "cubic feet", symbol = "cu&nbsp;ft", utype = "volume", scale = 0.028316846592, default = "m3", }, ["cuin"] = { name1 = "cubic inch", name2 = "cubic inches", symbol = "cu&nbsp;in", utype = "volume", scale = 0.000016387064, default = "cm3", }, ["cumi"] = { name1 = "cubic mile", symbol = "cu&nbsp;mi", utype = "volume", scale = 4168181825.440579584, default = "km3", }, ["cuyd"] = { name1 = "cubic yard", symbol = "cu&nbsp;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&nbsp;bbl", utype = "volume", scale = 0.16365924, default = "L impgal USgal", link = "Barrel (unit)", }, ["impbsh"] = { name1 = "imperial bushel", symbol = "imp&nbsp;bsh", utype = "volume", scale = 0.03636872, default = "L impgal USdrygal", }, ["impbu"] = { name1 = "imperial bushel", symbol = "imp&nbsp;bu", utype = "volume", scale = 0.03636872, default = "m3", }, ["impgal"] = { name1 = "imperial gallon", symbol = "imp&nbsp;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&nbsp;fl&nbsp;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&nbsp;pt", utype = "volume", scale = 0.00056826125, default = "L", }, ["impqt"] = { name1 = "imperial quart", symbol = "imp&nbsp;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&nbsp;gal", sym_us = "million U.S.&nbsp;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&nbsp;bbl", sym_us = "U.S.&nbsp;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&nbsp;bbl", sym_us = "U.S.&nbsp;bbl", utype = "volume", scale = 0.117347765304, default = "L USgal impgal", link = "Barrel (unit)", }, ["USbsh"] = { name1 = "US bushel", name1_us = "U.S. bushel", symbol = "US&nbsp;bsh", sym_us = "U.S.&nbsp;bsh", utype = "volume", scale = 0.03523907016688, default = "L USdrygal impgal", link = "Bushel", }, ["USbu"] = { name1 = "US bushel", name1_us = "U.S. bushel", symbol = "US&nbsp;bu", sym_us = "U.S.&nbsp;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&nbsp;dry&nbsp;bbl", sym_us = "U.S.&nbsp;dry&nbsp;bbl", utype = "volume", scale = 0.11562819898508, default = "m3", link = "Barrel (unit)", }, ["USdrygal"] = { name1 = "US dry gallon", name1_us = "U.S. dry gallon", symbol = "US&nbsp;dry&nbsp;gal", sym_us = "U.S.&nbsp;dry&nbsp;gal", utype = "volume", scale = 0.00440488377086, default = "L", link = "Gallon", }, ["USdrypt"] = { name1 = "US dry pint", name1_us = "U.S. dry pint", symbol = "US&nbsp;dry&nbsp;pt", sym_us = "U.S.&nbsp;dry&nbsp;pt", utype = "volume", scale = 0.0005506104713575, default = "ml", link = "Pint", }, ["USdryqt"] = { name1 = "US dry quart", name1_us = "U.S. dry quart", symbol = "US&nbsp;dry&nbsp;qt", sym_us = "U.S.&nbsp;dry&nbsp;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.&nbsp;fl&nbsp;gal", utype = "volume", scale = 0.003785411784, default = "L impgal", link = "Gallon", }, ["USgal"] = { name1 = "US gallon", name1_us = "U.S. gallon", symbol = "US&nbsp;gal", sym_us = "U.S.&nbsp;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&nbsp;kenning", sym_us = "U.S.&nbsp;kenning", utype = "volume", scale = 0.01761953508344, default = "L impgal", link = "Kenning (unit)", }, ["USmin"] = { name1 = "US minim", name1_us = "U.S. minim", symbol = "US&nbsp;min", sym_us = "U.S.&nbsp;min", utype = "volume", scale = 0.000000061611519921875, default = "ml", link = "Minim (unit)", }, ["USoz"] = { name1 = "US fluid ounce", name1_us = "U.S. fluid ounce", symbol = "US&nbsp;fl&nbsp;oz", sym_us = "U.S.&nbsp;fl&nbsp;oz", utype = "volume", scale = 0.0000295735295625, default = "ml", }, ["USpk"] = { name1 = "US peck", name1_us = "U.S. peck", symbol = "US&nbsp;pk", sym_us = "U.S.&nbsp;pk", utype = "volume", scale = 0.00880976754172, default = "L impgal", link = "Peck", }, ["USpt"] = { name1 = "US pint", name1_us = "U.S. pint", symbol = "US&nbsp;pt", sym_us = "U.S.&nbsp;pt", utype = "volume", scale = 0.000473176473, default = "L imppt", link = "Pint", }, ["USqt"] = { name1 = "US quart", name1_us = "U.S. quart", symbol = "US&nbsp;qt", sym_us = "U.S.&nbsp;qt", utype = "volume", scale = 0.000946352946, default = "ml", link = "Quart", customary= 1, }, ["USquart"] = { name1 = "US quart", name1_us = "U.S. quart", symbol = "US&nbsp;qt", sym_us = "U.S.&nbsp;qt", utype = "volume", scale = 0.000946352946, default = "ml impoz", link = "Quart", }, ["UStbsp"] = { name1 = "US tablespoon", name1_us = "U.S. tablespoon", symbol = "US&nbsp;tbsp", sym_us = "U.S.&nbsp;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"] = { "&nbsp;[" , "]" }, ["comma"] = { ", " , "" , ", " }, ["slash-sp"] = { " / " , "" , wantname = true }, ["slash-nbsp"] = { "&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". ["+"] = " + ", [","] = ",&nbsp;", [", 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 = "&nbsp;to ", output = "–" }, ["+/-"] = { off = "&nbsp;±&nbsp;", on = "&nbsp;±&nbsp;", adj = "&nbsp;±&nbsp;", is_range_change = true }, ["by(x)"] = { input = " by ", output = " ×&nbsp;", out_range_x = true }, ["x"] = { off = " by ", on = " ×&nbsp;", abbr_range_x = true }, ["xx"] = "&nbsp;×&nbsp;", ["*"] = "×", -- use "*" to replace "x" in {{convert/2}} which is different from "x" in old {{convert}} ["/"] = "&thinsp;/&thinsp;", -- for a table of high/low temperatures with {{convert|83|/|63|F|disp=br()|abbr=values}} ["#"] = { off = ", ", on = ", ", abbr_range_x = true, adj = "&nbsp;±&nbsp;" }, -- to show multiple Wikidata values } local range_aliases = { -- ["alternative name for a range"] = "standard range name" ["&"] = "and", ["–"] = "-", ["&ndash;"] = "-", ["to-"] = "to(-)", ["×"] = "x", ["&times;"] = "x", ["±"] = "+/-", ["&plusmn;"] = "+/-", } -- 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 "&nbsp;" 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", "&emsp;")) 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 .. '&params=' --[[ 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">&#xfeff; / &#xfeff;</span>' .. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">'; if not args["name"] then inner = inner .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span></span>' else inner = inner .. '<span class="vcard">' .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span>' .. '<span style="display:none">&#xfeff; (<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">&#xfeff; (<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], '(&params=[^&"<>%[%] ]*) ', '%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}}}]]&nbsp;({{PAGESINCATEGORY:{{{1}}}|{{{2|सब्ब}}}}})<noinclude> [[Category:Internal category-link templates]] </noinclude>" 104324 wikitext text/x-wiki [[:Category:{{{1}}}]]&nbsp;({{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&#32; }}{{#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&nbsp;I]] |HERITAGE NEW ZEALAND CATEGORY II|NEW ZEALAND CATEGORY II |NZ CATEGORY II = [[न्यूज़ीलैंड रज्जस्स दायजं|Heritage New Zealand - Category&nbsp;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|}}} |&#35;ddd |{{Designation/colour|{{{1}}}}} }};"{{!}}'''{{#if:{{{delisted|}}} |ယခင်&nbsp; }}{{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|}}} |&#35;ddd |{{Designation/colour|{{{1}}}}} }};"{{!}}'''{{#if:{{{delisted|}}} |ယခင်&nbsp; }}{{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;">&#91;<i>{{#if:{{{pre-text|}}} |{{{pre-text}}}&#32; }}[[{{{link|WP:CLEANUP}}}|<span title="{{delink|1={{{title|{{{link|WP:CLEANUP}}}}}}{{#if:{{{date|}}}|&#32;({{{date}}})}}}}">{{{text|}}}</span>]]{{#if:{{{post-text|}}} |&#32;{{{post-text}}} }}</i>&#93;</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("&#35;", "#") -- 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;', '#'), '&#35;', '#'), ';') 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 "&#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude>" 104344 wikitext text/x-wiki &#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<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 &#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<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