Wikipedia ibawiki https://iba.wikipedia.org/wiki/Lambar_Keterubah MediaWiki 1.47.0-wmf.5 first-letter Media Spesyel Randau Penggena Randau penggena Wikipedia Randau Wikipedia Fail Randau fail MediaWiki Randau MediaWiki Templat Randau templat Bantu Randau bantu Kategori Randau kategori TimedText TimedText talk Modul Randau modul Acara Perbincangan acara Modul:Citation/CS1/Configuration 828 856 19249 15697 2026-06-09T13:18:26Z Song GK 9 19249 Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); -- make a language object for the local language; used here for languages and dates --[[--------------------------< S E T T I N G S >-------------------------------------------------------------- boolean settings used to control various things. these setting located here to make them easy to find ]] -- these settings local to this module only local local_digits_from_mediawiki = false; -- for i18n; when true, module fills date_names['local_digits'] from MediaWiki; manual fill required else; always false at en.wiki local local_date_names_from_mediawiki = false; -- for i18n; when true, module fills date_names['local']['long'] and date_names['local']['short'] from MediaWiki; -- manual translation required else; ; always false at en.wiki -- these settings exported to other modules local use_identifier_redirects = true; -- when true use redirect name for identifier label links; always true at en.wiki local local_lang_cat_enable = false; -- when true categorizes pages where |language=<local wiki's language>; always false at en.wiki local date_name_auto_xlate_enable = false; -- when true translates English month-names to the local-wiki's language month names; always false at en.wiki local date_digit_auto_xlate_enable = false; -- when true translates Western date digit to the local-wiki's language digits (date_names['local_digits']); always false at en.wiki local enable_sort_keys = true; -- when true module adds namespace sort keys to error and maintenance category links --[[--------------------------< U N C A T E G O R I Z E D _ N A M E S P A C E S >------------------------------ List of namespaces identifiers for namespaces that will not be included in citation error categories. Same as setting notracking = true by default. For wikis that have a current version of Module:cs1 documentation support, this #invoke will return an unordered list of namespace names and their associated identifiers: {{#invoke:cs1 documentation support|uncategorized_namespace_lister|all=<anything>}} ]] local uncategorized_namespaces_t = {[2]=true}; -- init with user namespace id for k, _ in pairs (mw.site.talkNamespaces) do -- add all talk namespace ids uncategorized_namespaces_t[k] = true; end local uncategorized_subpages = {'/[Ss]andbox', '/[Tt]estcases', '/[^/]*[Ll]og', '/[Aa]rchive'}; -- list of Lua patterns found in page names of pages we should not categorize --[[ at en.wiki Greek characters are used as sort keys for certain items in a category so that those items are placed at the end of a category page. See Wikipedia:Categorization#Sort_keys. That works well for en.wiki because English is written using the Latn script. This may not work well for other languages. At en.wiki it is desireable to place content from certain namespaces at the end of a category listing so the module adds sort keys to error and maintenance category links when rendering a cs1|2 template on a page in that namespace. i18n: if this does not work well for your language, set <enable_sort_keys> to false. ]] local name_space_sort_keys = { -- sort keys to be used with these namespaces: [4] = 'ω', -- wikipedia; omega [10] = 'τ', -- template; tau [118] = 'Δ', -- draft; delta ['other'] = 'ο', -- all other non-talk namespaces except main (article); omicron } --[[--------------------------< M E S S A G E S >-------------------------------------------------------------- Translation table The following contains fixed text that may be output as part of a citation. This is separated from the main body to aid in future translations of this module. ]] local messages = { ['agency'] = '$1 $2', -- $1 is sepc, $2 is agency ['archived-dead'] = 'Archived from $1 on $2', ['archived-live'] = '$1 from the original on $2', ['archived-unfit'] = 'Archived from the original on ', ['archived'] = 'Archived', ['by'] = 'By', -- contributions to authored works: introduction, foreword, afterword ['cartography'] = 'Cartography by $1', ['editor'] = 'ed.', ['editors'] = 'eds.', ['edition'] = '($1&nbsp;ed.)', ['episode'] = 'Episode $1', ['et al'] = 'et&nbsp;al.', ['in'] = 'In', -- edited works ['inactive'] = 'inactive', ['inset'] = '$1 inset', ['interview'] = 'Interviewed by $1', ['mismatch'] = '<code class="cs1-code">&#124;$1=</code> / <code class="cs1-code">&#124;$2=</code> mismatch', -- $1 is year param name; $2 is date param name ['newsgroup'] = '[[Usenet newsgroup|Newsgroup]]:&nbsp;$1', ['notitle'] = 'No title', -- for |title=(()) and (in the future) |title=none ['original'] = 'the original', ['origdate'] = ' [$1]', ['published'] = ' (published $1)', ['retrieved'] = 'Retrieved $1', ['season'] = 'Season $1', ['section'] = '§&nbsp;$1', ['sections'] = '§§&nbsp;$1', ['series'] = '$1 $2', -- $1 is sepc, $2 is series ['seriesnum'] = 'Series $1', ['translated'] = 'Translated by $1', ['type'] = ' ($1)', -- for titletype ['written'] = 'Written at $1', ['vol'] = '$1 Vol.&nbsp;$2', -- $1 is sepc; bold journal style volume is in presentation{} ['vol-no'] = '$1 Vol.&nbsp;$2, no.&nbsp;$3', -- sepc, volume, issue (alternatively insert $1 after $2, but then we'd also have to change capitalization) ['issue'] = '$1 No.&nbsp;$2', -- $1 is sepc ['art'] = '$1 Art.&nbsp;$2', -- $1 is sepc; for {{cite conference}} only ['vol-art'] = '$1 Vol.&nbsp;$2, art.&nbsp;$3', -- sepc, volume, article-number; for {{cite conference}} only ['j-vol'] = '$1 $2', -- sepc, volume; bold journal volume is in presentation{} ['j-issue'] = ' ($1)', ['j-article-num'] = ' $1', -- TODO: any punctuation here? static text? ['nopp'] = '$1 $2'; -- page(s) without prefix; $1 is sepc ['p-prefix'] = "$1 p.&nbsp;$2", -- $1 is sepc ['pp-prefix'] = "$1 pp.&nbsp;$2", -- $1 is sepc ['j-page(s)'] = ': $1', -- same for page and pages ['sheet'] = '$1 Sheet&nbsp;$2', -- $1 is sepc ['sheets'] = '$1 Sheets&nbsp;$2', -- $1 is sepc ['j-sheet'] = ': Sheet&nbsp;$1', ['j-sheets'] = ': Sheets&nbsp;$1', ['language'] = '(in $1)', ['via'] = " &ndash; via $1", ['event'] = 'Event occurs at', ['minutes'] = 'minutes in', -- Determines the location of the help page ['help page link'] = 'Help:CS1 errors', ['help page label'] = 'help', -- categories ['cat wikilink'] = '[[Category:$1]]', -- $1 is the category name ['cat wikilink sk'] = '[[Category:$1|$2]]', -- $1 is the category name; $2 is namespace sort key [':cat wikilink'] = '[[:Category:$1|link]]', -- category name as maintenance message wikilink; $1 is the category name -- Internal errors (should only occur if configuration is bad) ['undefined_error'] = 'Called with an undefined error condition', ['unknown_ID_key'] = 'Unrecognized ID key: ', -- an ID key in id_handlers not found in ~/Identifiers func_map{} ['unknown_ID_access'] = 'Unrecognized ID access keyword: ', -- an ID access keyword in id_handlers not found in keywords_lists['id-access']{} ['unknown_argument_map'] = 'Argument map not defined for this variable', ['bare_url_no_origin'] = 'Bare URL found but origin indicator is nil or empty', ['warning_msg_e'] = '<span style="color:#d33">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">&#123;{$1}}</code> templates have errors</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link ['warning_msg_m'] = '<span style="color:#3a3">One or more <code style="color: inherit; background: inherit; border: none; padding: inherit;">&#123;{$1}}</code> templates have maintenance messages</span>; messages may be hidden ([[Help:CS1_errors#Controlling_error_message_display|help]]).'; -- $1 is template link } --[[--------------------------< C I T A T I O N _ C L A S S _ M A P >------------------------------------------ this table maps the value assigned to |CitationClass= in the cs1|2 templates to the canonical template name when the value assigned to |CitationClass= is different from the canonical template name. |CitationClass= values are used as class attributes in the <cite> tag that encloses the citation so these names may not contain spaces while the canonical template name may. These names are used in warning_msg_e and warning_msg_m to create links to the template's documentation when an article is displayed in preview mode. Most cs1|2 template |CitationClass= values at en.wiki match their canonical template names so are not listed here. ]] local citation_class_map_t = { -- TODO: if kept, these and all other config.CitationClass 'names' require some sort of i18n ['arxiv'] = 'arXiv', ['audio-visual'] = 'AV media', ['AV-media-notes'] = 'AV media notes', ['biorxiv'] = 'bioRxiv', ['citeseerx'] = 'CiteSeerX', ['encyclopaedia'] = 'encyclopedia', ['mailinglist'] = 'mailing list', ['medrxiv'] = 'medRxiv', ['pressrelease'] = 'press release', ['ssrn'] = 'SSRN', ['techreport'] = 'tech report', } --[=[-------------------------< E T _ A L _ P A T T E R N S >-------------------------------------------------- This table provides Lua patterns for the phrase "et al" and variants in name text (author, editor, etc.). The main module uses these to identify and emit the 'etal' message. ]=] local et_al_patterns = { "[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][%.;,\"']*$", -- variations on the 'et al' theme "[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][AaIi][Ee]?[%.;,\"']*$", -- variations on the 'et alia', 'et alii' and 'et aliae' themes (false positive 'et aliie' unlikely to match) "[;,]? *%f[%a]and [Oo]thers", -- an alternative to et al. "%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]", -- a wikilinked form "%(%( *[Ee][Tt]%.? *[Aa][Ll]%.? *%)%)", -- a double-bracketed form (to counter partial removal of ((...)) syntax) "[%(%[] *[Ee][Tt]%.? *[Aa][Ll]%.? *[%)%]]", -- a bracketed form } --[[--------------------------< P R E S E N T A T I O N >------------------------ Fixed presentation markup. Originally part of citation_config.messages it has been moved into its own, more semantically correct place. ]] local presentation = { -- .citation-comment class is specified at Help:CS1_errors#Controlling_error_message_display ['hidden-error'] = '<span class="cs1-hidden-error citation-comment">$1</span>', ['visible-error'] = '<span class="cs1-visible-error citation-comment">$1</span>', ['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>', ['accessdate'] = '<span class="reference-accessdate">$1$2</span>', -- to allow editors to hide accessdate using personal CSS ['bdi'] = '<bdi$1>$2</bdi>', -- bidirectional isolation used with |script-title= and the like ['cite'] = '<cite class="$1">$2</cite>'; -- for use when citation does not have a namelist and |ref= not set so no id="..." attribute ['cite-id'] = '<cite id="$1" class="$2">$3</cite>'; -- for use when when |ref= is set or when citation has a namelist ['format'] = ' <span class="cs1-format">($1)</span>', -- for |format=, |chapter-format=, etc. ['interwiki'] = ' <span class="cs1-format">[in $1]</span>', -- for interwiki-language-linked author, editor, etc ['interproj'] = ' <span class="cs1-format">[at $1]</span>', -- for interwiki-project-linked author, editor, etc (:d: and :s: supported; :w: ignored) -- various access levels, for |access=, |doi-access=, |arxiv=, ... -- narrow no-break space &#8239; may work better than nowrap CSS. Or not? Browser support? ['ext-link-access-signal'] = '<span class="$1" title="$2">$3</span>', -- external link with appropriate lock icon ['free'] = {class='id-lock-free', title='Freely accessible'}, -- classes defined in Module:Citation/CS1/styles.css ['registration'] = {class='id-lock-registration', title='Free registration required'}, ['limited'] = {class='id-lock-limited', title='Free access subject to limited trial, subscription normally required'}, ['subscription'] = {class='id-lock-subscription', title='Paid subscription required'}, ['interwiki-icon'] = '<span class="$1" title="$2">$3</span>', ['class-wikisource'] = 'cs1-ws-icon', ['italic-title'] = "''$1''", ['kern-left'] = '<span class="cs1-kern-left"></span>$1', -- spacing to use when title contains leading single or double quote mark ['kern-right'] = '$1<span class="cs1-kern-right"></span>', -- spacing to use when title contains trailing single or double quote mark ['nowrap1'] = '<span class="nowrap">$1</span>', -- for nowrapping an item: <span ...>yyyy-mm-dd</span> ['nowrap2'] = '<span class="nowrap">$1</span> $2', -- for nowrapping portions of an item: <span ...>dd mmmm</span> yyyy (note white space) ['ocins'] = '<span title="$1" class="Z3988"></span>', ['parameter'] = '<code class="cs1-code">&#124;$1=</code>', ['ps_cs1'] = '.'; -- CS1 style postscript (terminal) character ['ps_cs2'] = ''; -- CS2 style postscript (terminal) character (empty string) ['quoted-text'] = '<q>$1</q>', -- for wrapping |quote= content ['quoted-title'] = '"$1"', ['sep_cs1'] = '.', -- CS1 element separator ['sep_cs2'] = ',', -- CS2 separator ['sep_nl'] = ';', -- CS1|2 style name-list separator between names is a semicolon ['sep_nl_and'] = ' and ', -- used as last nl sep when |name-list-style=and and list has 2 items ['sep_nl_end'] = '; and ', -- used as last nl sep when |name-list-style=and and list has 3+ names ['sep_name'] = ', ', -- CS1|2 style last/first separator is <comma><space> ['sep_nl_vanc'] = ',', -- Vancouver style name-list separator between authors is a comma ['sep_name_vanc'] = ' ', -- Vancouver style last/first separator is a space ['sep_list'] = ', ', -- used for |language= when list has 3+ items except for last sep which uses sep_list_end ['sep_list_pair'] = ' and ', -- used for |language= when list has 2 items ['sep_list_end'] = ', and ', -- used as last list sep for |language= when list has 3+ items ['trans-italic-title'] = "&#91;''$1''&#93;", ['trans-quoted-title'] = "&#91;$1&#93;", -- for |trans-title= and |trans-quote= ['vol-bold'] = '$1 <b>$2</b>', -- sepc, volume; for bold journal cites; for other cites ['vol'] in messages{} } --[[--------------------------< A L I A S E S >--------------------------------- Aliases table for commonly passed parameters. Parameter names on the right side in the assignments in this table must have been defined in the Whitelist before they will be recognized as valid parameter names ]] local aliases = { ['AccessDate'] = {'access-date', 'accessdate'}, -- Used by InternetArchiveBot ['Agency'] = 'agency', ['ArchiveDate'] = {'archive-date', 'archivedate'}, -- Used by InternetArchiveBot ['ArchiveFormat'] = 'archive-format', ['ArchiveURL'] = {'archive-url', 'archiveurl'}, -- Used by InternetArchiveBot ['ArticleNumber'] = 'article-number', ['ASINTLD'] = 'asin-tld', ['At'] = 'at', -- Used by InternetArchiveBot ['Authors'] = {'people', 'credits'}, ['BookTitle'] = {'book-title', 'booktitle'}, ['Cartography'] = 'cartography', ['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section'}, ['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format', 'article-format', 'section-format'}; ['ChapterURL'] = {'chapter-url', 'contribution-url', 'entry-url', 'article-url', 'section-url'}, -- Used by InternetArchiveBot ['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access', 'entry-url-access', 'article-url-access', 'section-url-access'}, -- Used by InternetArchiveBot ['Class'] = 'class', -- cite arxiv and arxiv identifier ['Collaboration'] = 'collaboration', ['Conference'] = {'conference', 'event'}, ['ConferenceFormat'] = 'conference-format', ['ConferenceURL'] = 'conference-url', -- Used by InternetArchiveBot ['Date'] = {'date', 'air-date', 'airdate'}, -- air-date and airdate for cite episode and cite serial only ['Degree'] = 'degree', ['DF'] = 'df', ['DisplayAuthors'] = {'display-authors', 'display-subjects'}, ['DisplayContributors'] = 'display-contributors', ['DisplayEditors'] = 'display-editors', ['DisplayInterviewers'] = 'display-interviewers', ['DisplayTranslators'] = 'display-translators', ['Docket'] = 'docket', ['DoiBroken'] = 'doi-broken-date', ['Edition'] = 'edition', ['Embargo'] = 'pmc-embargo-date', ['Encyclopedia'] = {'encyclopedia', 'encyclopaedia', 'dictionary'}, -- cite encyclopedia only ['Episode'] = 'episode', -- cite serial only TODO: make available to cite episode? ['Format'] = 'format', ['ID'] = {'id', 'ID'}, ['Inset'] = 'inset', ['Issue'] = {'issue', 'number'}, ['Language'] = {'language', 'lang'}, ['MailingList'] = {'mailing-list', 'mailinglist'}, -- cite mailing list only ['Map'] = 'map', -- cite map only ['MapFormat'] = 'map-format', -- cite map only ['MapURL'] = {'map-url', 'mapurl'}, -- cite map only -- Used by InternetArchiveBot ['MapUrlAccess'] = 'map-url-access', -- cite map only -- Used by InternetArchiveBot ['Minutes'] = 'minutes', ['Mode'] = 'mode', ['NameListStyle'] = 'name-list-style', ['Network'] = 'network', ['Newsgroup'] = 'newsgroup', -- cite newsgroup only ['NoPP'] = {'no-pp', 'nopp'}, ['NoTracking'] = {'no-tracking', 'template-doc-demo'}, ['Number'] = 'number', -- this case only for cite techreport ['OrigDate'] = {'orig-date', 'orig-year', 'origyear'}, ['Others'] = 'others', ['Page'] = {'page', 'p'}, -- Used by InternetArchiveBot ['Pages'] = {'pages', 'pp'}, -- Used by InternetArchiveBot ['Periodical'] = {'journal', 'magazine', 'newspaper', 'periodical', 'website', 'work'}, ['Place'] = {'place', 'location'}, ['PostScript'] = 'postscript', ['PublicationDate'] = {'publication-date', 'publicationdate'}, ['PublicationPlace'] = {'publication-place', 'publicationplace'}, ['PublisherName'] = {'publisher', 'institution'}, ['Quote'] = {'quote', 'quotation'}, ['QuotePage'] = 'quote-page', ['QuotePages'] = 'quote-pages', ['Ref'] = 'ref', ['Scale'] = 'scale', ['ScriptChapter'] = {'script-chapter', 'script-contribution', 'script-entry', 'script-article', 'script-section'}, ['ScriptEncyclopedia'] = {'script-encyclopedia', 'script-encyclopaedia'}, -- cite encyclopedia only ['ScriptMap'] = 'script-map', ['ScriptPeriodical'] = {'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-website', 'script-work'}, ['ScriptQuote'] = 'script-quote', ['ScriptTitle'] = 'script-title', -- Used by InternetArchiveBot ['Season'] = 'season', ['Sections'] = 'sections', -- cite map only ['Series'] = {'series', 'version'}, ['SeriesLink'] = {'series-link', 'serieslink'}, ['SeriesNumber'] = {'series-number', 'series-no'}, ['Sheet'] = 'sheet', -- cite map only ['Sheets'] = 'sheets', -- cite map only ['Station'] = 'station', ['Time'] = 'time', ['TimeCaption'] = 'time-caption', ['Title'] = 'title', -- Used by InternetArchiveBot ['TitleLink'] = {'title-link', 'episode-link', 'episodelink'}, -- Used by InternetArchiveBot ['TitleNote'] = {'title-note', 'department'}, ['TitleType'] = {'type', 'medium'}, ['TransChapter'] = {'trans-article', 'trans-chapter', 'trans-contribution', 'trans-entry', 'trans-section'}, ['Transcript'] = 'transcript', ['TranscriptFormat'] = 'transcript-format', ['TranscriptURL'] = 'transcript-url', -- Used by InternetArchiveBot ['TransEncyclopedia'] = {'trans-encyclopedia', 'trans-encyclopaedia'}, -- cite encyclopedia only ['TransMap'] = 'trans-map', -- cite map only ['TransPeriodical'] = {'trans-journal', 'trans-magazine', 'trans-newspaper', 'trans-periodical', 'trans-website', 'trans-work'}, ['TransQuote'] = 'trans-quote', ['TransTitle'] = 'trans-title', -- Used by InternetArchiveBot ['URL'] = {'url', 'URL'}, -- Used by InternetArchiveBot ['UrlAccess'] = 'url-access', -- Used by InternetArchiveBot ['UrlStatus'] = 'url-status', -- Used by InternetArchiveBot ['Vauthors'] = 'vauthors', ['Veditors'] = 'veditors', ['Via'] = 'via', ['Volume'] = 'volume', ['Year'] = 'year', ['AuthorList-First'] = {"first#", "author-first#", "author#-first", "author-given#", "author#-given", "subject-first#", "subject#-first", "subject-given#", "subject#-given", "given#"}, ['AuthorList-Last'] = {"last#", "author-last#", "author#-last", "author-surname#", "author#-surname", "subject-last#", "subject#-last", "subject-surname#", "subject#-surname", "author#", 'host#', "subject#", "surname#"}, ['AuthorList-Link'] = {"author-link#", "author#-link", "subject-link#", "subject#-link", "authorlink#", "author#link"}, ['AuthorList-Mask'] = {"author-mask#", "author#-mask", "subject-mask#", "subject#-mask"}, ['ContributorList-First'] = {'contributor-first#', 'contributor#-first', 'contributor-given#', 'contributor#-given'}, ['ContributorList-Last'] = {'contributor-last#', 'contributor#-last', 'contributor-surname#', 'contributor#-surname', 'contributor#'}, ['ContributorList-Link'] = {'contributor-link#', 'contributor#-link'}, ['ContributorList-Mask'] = {'contributor-mask#', 'contributor#-mask'}, ['EditorList-First'] = {"editor-first#", "editor#-first", "editor-given#", "editor#-given"}, ['EditorList-Last'] = {"editor-last#", "editor#-last", "editor-surname#", "editor#-surname", "editor#"}, ['EditorList-Link'] = {"editor-link#", "editor#-link"}, ['EditorList-Mask'] = {"editor-mask#", "editor#-mask"}, ['InterviewerList-First'] = {'interviewer-first#', 'interviewer#-first', 'interviewer-given#', 'interviewer#-given'}, ['InterviewerList-Last'] = {'interviewer-last#', 'interviewer#-last', 'interviewer-surname#', 'interviewer#-surname', 'interviewer#'}, ['InterviewerList-Link'] = {'interviewer-link#', 'interviewer#-link'}, ['InterviewerList-Mask'] = {'interviewer-mask#', 'interviewer#-mask'}, ['TranslatorList-First'] = {'translator-first#', 'translator#-first', 'translator-given#', 'translator#-given'}, ['TranslatorList-Last'] = {'translator-last#', 'translator#-last', 'translator-surname#', 'translator#-surname', 'translator#'}, ['TranslatorList-Link'] = {'translator-link#', 'translator#-link'}, ['TranslatorList-Mask'] = {'translator-mask#', 'translator#-mask'}, } --[[--------------------------< P U N C T _ S K I P >--------------------------- builds a table of parameter names that the extraneous terminal punctuation check should not check. ]] local punct_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value 'BookTitle', 'Chapter', 'ScriptChapter', 'ScriptTitle', 'Title', 'TransChapter', 'Transcript', 'TransMap', 'TransTitle', -- title-holding parameters 'AuthorList-Mask', 'ContributorList-Mask', 'EditorList-Mask', 'InterviewerList-Mask', 'TranslatorList-Mask', -- name-list mask may have name separators 'PostScript', 'Quote', 'ScriptQuote', 'TransQuote', 'Ref', -- miscellaneous 'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'MapURL', 'TranscriptURL', 'URL', -- URL-holding parameters } local url_meta_params = { -- table of aliases[] keys (meta parameters); each key has a table of parameter names for a value 'ArchiveURL', 'ChapterURL', 'ConferenceURL', 'ID', 'MapURL', 'TranscriptURL', 'URL', -- parameters allowed to hold urls 'Page', 'Pages', 'At', 'QuotePage', 'QuotePages', -- insource locators allowed to hold urls } local function build_skip_table (skip_t, meta_params) for _, meta_param in ipairs (meta_params) do -- for each meta parameter key local params = aliases[meta_param]; -- get the parameter or the table of parameters associated with the meta parameter name if 'string' == type (params) then skip_t[params] = 1; -- just a single parameter else for _, param in ipairs (params) do -- get the parameter name skip_t[param] = 1; -- add the parameter name to the skip table local count; param, count = param:gsub ('#', ''); -- remove enumerator marker from enumerated parameters if 0 ~= count then -- if removed skip_t[param] = 1; -- add param name without enumerator marker end end end end return skip_t; end local punct_skip = {}; local url_skip = {}; --[[--------------------------< S I N G L E - L E T T E R S E C O N D - L E V E L D O M A I N S >---------- this is a list of tlds that are known to have single-letter second-level domain names. This list does not include ccTLDs which are accepted in is_domain_name(). ]] local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'media', 'org', 'today'}; --[[-----------< S P E C I A L C A S E T R A N S L A T I O N S >------------ This table is primarily here to support internationalization. Translations in this table are used, for example, when an error message, category name, etc., is extracted from the English alias key. There may be other cases where this translation table may be useful. ]] local is_Latn = 'A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143\225\184\128-\225\187\191'; local special_case_translation = { ['AuthorList'] = 'authors list', -- used to assemble maintenance category names ['ContributorList'] = 'contributors list', -- translation of these names plus translation of the base maintenance category names in maint_cats{} table below ['EditorList'] = 'editors list', -- must match the names of the actual categories ['InterviewerList'] = 'interviewers list', -- this group or translations used by name_has_ed_markup() and name_has_mult_names() ['TranslatorList'] = 'translators list', -- Lua patterns to match pseudo-titles used by InternetArchiveBot and others as placeholder for unknown |title= value ['archived_copy'] = { -- used with CS1 maint: Archive[d] copy as title ['en'] = '^archived?%s+copy$', -- for English; translators: keep this because templates imported from en.wiki ['local'] = nil, -- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language }, -- Lua patterns to match generic titles; usually created by bots or reference filling tools -- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language -- generic titles and patterns in this table should be lowercase only -- leave ['local'] nil except when there is a matching generic title in your language -- boolean 'true' for plain-text searches; 'false' for pattern searches ['generic_titles'] = { ['accept'] = { }, ['reject'] = { {['en'] = {'^wayback%s+machine$', false}, ['local'] = nil}, {['en'] = {'are you a robot', true}, ['local'] = nil}, {['en'] = {'hugedomains.com', true}, ['local'] = nil}, {['en'] = {'^[%(%[{<]?no +title[>}%]%)]?$', false}, ['local'] = nil}, {['en'] = {'page not found', true}, ['local'] = nil}, {['en'] = {'subscribe to read', true}, ['local'] = nil}, {['en'] = {'^[%(%[{<]?unknown[>}%]%)]?$', false}, ['local'] = nil}, {['en'] = {'website is for sale', true}, ['local'] = nil}, {['en'] = {'^404', false}, ['local'] = nil}, {['en'] = {'error[ %-]404', false}, ['local'] = nil}, {['en'] = {'internet archive wayback machine', true}, ['local'] = nil}, {['en'] = {'log into facebook', true}, ['local'] = nil}, {['en'] = {'login • instagram', true}, ['local'] = nil}, {['en'] = {'redirecting...', true}, ['local'] = nil}, {['en'] = {'usurped title', true}, ['local'] = nil}, -- added by a GreenC bot {['en'] = {'webcite query result', true}, ['local'] = nil}, {['en'] = {'wikiwix\'s cache', true}, ['local'] = nil}, } }, -- boolean 'true' for plain-text searches, search string must be lowercase only -- boolean 'false' for pattern searches -- leave ['local'] nil except when there is a matching generic name in your language ['generic_names'] = { ['accept'] = { {['en'] = {'%[%[[^|]*%(author%) *|[^%]]*%]%]', false}, ['local'] = nil}, }, ['reject'] = { {['en'] = {'about us', true}, ['local'] = nil}, {['en'] = {'%f[%a][Aa]dvisor%f[%A]', false}, ['local'] = nil}, {['en'] = {'allmusic', true}, ['local'] = nil}, {['en'] = {'%f[%a][Aa]uthor%f[%A]', false}, ['local'] = nil}, {['en'] = {'^[Bb]ureau$', false}, ['local'] = nil}, {['en'] = {'business', true}, ['local'] = nil}, {['en'] = {'cnn', true}, ['local'] = nil}, {['en'] = {'collaborator', true}, ['local'] = nil}, {['en'] = {'^[Cc]ompany$', false}, ['local'] = nil}, {['en'] = {'contributor', true}, ['local'] = nil}, {['en'] = {'contact us', true}, ['local'] = nil}, {['en'] = {'correspondent', true}, ['local'] = nil}, {['en'] = {'^[Dd]esk$', false}, ['local'] = nil}, {['en'] = {'directory', true}, ['local'] = nil}, {['en'] = {'%f[%(%[][%(%[]%s*eds?%.?%s*[%)%]]?$', false}, ['local'] = nil}, {['en'] = {'[,%.%s]%f[e]eds?%.?$', false}, ['local'] = nil}, {['en'] = {'^eds?[%.,;]', false}, ['local'] = nil}, {['en'] = {'^[%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]', false}, ['local'] = nil}, {['en'] = {'%f[%a][Ee]dited%f[%A]', false}, ['local'] = nil}, {['en'] = {'%f[%a][Ee]ditors?%f[%A]', false}, ['local'] = nil}, {['en'] = {'%f[%a][Ee]mail%f[%A]', false}, ['local'] = nil}, {['en'] = {'facebook', true}, ['local'] = nil}, {['en'] = {'google', true}, ['local'] = nil}, {['en'] = {'^[Gg]roup$', false}, ['local'] = nil}, {['en'] = {'home page', true}, ['local'] = nil}, {['en'] = {'^[Ii]nc%.?$', false}, ['local'] = nil}, {['en'] = {'instagram', true}, ['local'] = nil}, {['en'] = {'interviewer', true}, ['local'] = nil}, {['en'] = {'^[Ll]imited$', false}, ['local'] = nil}, {['en'] = {'linkedIn', true}, ['local'] = nil}, {['en'] = {'^[Nn]ews$', false}, ['local'] = nil}, {['en'] = {'[Nn]ews[ %-]?[Rr]oom', false}, ['local'] = nil}, {['en'] = {'pinterest', true}, ['local'] = nil}, {['en'] = {'policy', true}, ['local'] = nil}, {['en'] = {'privacy', true}, ['local'] = nil}, {['en'] = {'reuters', true}, ['local'] = nil}, {['en'] = {'translator', true}, ['local'] = nil}, {['en'] = {'tumblr', true}, ['local'] = nil}, {['en'] = {'twitter', true}, ['local'] = nil}, {['en'] = {'site name', true}, ['local'] = nil}, {['en'] = {'statement', true}, ['local'] = nil}, {['en'] = {'submitted', true}, ['local'] = nil}, {['en'] = {'super.?user', false}, ['local'] = nil}, {['en'] = {'%f['..is_Latn..'][Uu]ser%f[^'..is_Latn..']', false}, ['local'] = nil}, {['en'] = {'verfasser', true}, ['local'] = nil}, } } } --[[--------------------------< D A T E _ N A M E S >---------------------------------------------------------- This table of tables lists local language date names and fallback English date names. The code in Date_validation will look first in the local table for valid date names. If date names are not found in the local table, the code will look in the English table. Because citations can be copied to the local wiki from en.wiki, the English is required when the date-name translation function date_name_xlate() is used. In these tables, season numbering is defined by Extended Date/Time Format (EDTF) Specification (https://www.loc.gov/standards/datetime/) which became part of ISO 8601 in 2019. See '§Sub-year groupings'. The standard defines various divisions using numbers 21-41. CS1|2 only supports generic seasons. EDTF does support the distinction between north and south hemisphere seasons but CS1|2 has no way to make that distinction. 33-36 = Quarter 1, Quarter 2, Quarter 3, Quarter 4 (3 months each) The standard does not address 'named' dates so, for the purposes of CS1|2, Easter and Christmas are defined here as 98 and 99, which should be out of the ISO 8601 (EDTF) range of uses for a while. local_date_names_from_mediawiki is a boolean. When set to: true – module will fetch local month names from MediaWiki for both date_names['local']['long'] and date_names['local']['short']; this will unconditionally overwrite manual translations false – module will *not* fetch local month names from MediaWiki Caveat lector: There is no guarantee that MediaWiki will provide short month names. At your wiki you can test the results of the MediaWiki fetch in the debug console with this command (the result is alpha sorted): =mw.dumpObject (p.date_names['local']) While the module can fetch month names from MediaWiki, it cannot fetch the quarter, season, and named date names from MediaWiki. Those must be translated manually. ]] local local_date_names_from_mediawiki = true; -- when false, manual translation required for date_names['local']['long'] and date_names['local']['short']; overwrites manual translations -- when true, module fetches long and short month names from MediaWiki local date_names = { ['en'] = { -- English ['long'] = {['January'] = 1, ['February'] = 2, ['March'] = 3, ['April'] = 4, ['May'] = 5, ['June'] = 6, ['July'] = 7, ['August'] = 8, ['September'] = 9, ['October'] = 10, ['November'] = 11, ['December'] = 12}, ['short'] = {['Jan'] = 1, ['Feb'] = 2, ['Mar'] = 3, ['Apr'] = 4, ['May'] = 5, ['Jun'] = 6, ['Jul'] = 7, ['Aug'] = 8, ['Sep'] = 9, ['Oct'] = 10, ['Nov'] = 11, ['Dec'] = 12}, ['quarter'] = {['First Quarter'] = 33, ['Second Quarter'] = 34, ['Third Quarter'] = 35, ['Fourth Quarter'] = 36}, ['season'] = {['Winter'] = 24, ['Spring'] = 21, ['Summer'] = 22, ['Fall'] = 23, ['Autumn'] = 23}, ['named'] = {['Easter'] = 98, ['Christmas'] = 99}, }, -- when local_date_names_from_mediawiki = false ['local'] = { -- replace these English date names with the local language equivalents ['long'] = {['Januari'] = 1, ['Februari'] = 2, ['Mach'] = 3, ['April'] = 4, ['Mei'] = 5, ['Jun'] = 6, ['Julai'] = 7, ['Ogos'] = 8, ['September'] = 9, ['Oktober'] = 10, ['Nobember'] = 11, ['Disember'] = 12 }, ['short'] = {['Jan'] = 1, ['Feb'] = 2, ['Mar'] = 3, ['Apr'] = 4, ['May'] = 5, ['Jun'] = 6, ['Jul'] = 7, ['Aug'] = 8, ['Sep'] = 9, ['Oct'] = 10, ['Nov'] = 11, ['Dec'] = 12}, ['quarter'] = {['First Quarter'] = 33, ['Second Quarter'] = 34, ['Third Quarter'] = 35, ['Fourth Quarter'] = 36}, ['season'] = {['Winter'] = 24, ['Spring'] = 21, ['Summer'] = 22, ['Fall'] = 23, ['Autumn'] = 23}, ['named'] = {['Easter'] = 98, ['Christmas'] = 99}, }, ['inv_local_long'] = {}, -- used in date reformatting & translation; copy of date_names['local'].long where k/v are inverted: [1]='<local name>' etc. ['inv_local_short'] = {}, -- used in date reformatting & translation; copy of date_names['local'].short where k/v are inverted: [1]='<local name>' etc. ['inv_local_quarter'] = {}, -- used in date translation; copy of date_names['local'].quarter where k/v are inverted: [1]='<local name>' etc. ['inv_local_season'] = {}, -- used in date translation; copy of date_names['local'].season where k/v are inverted: [1]='<local name>' etc. ['inv_local_named'] = {}, -- used in date translation; copy of date_names['local'].named where k/v are inverted: [1]='<local name>' etc. ['local_digits'] = {['0'] = '0', ['1'] = '1', ['2'] = '2', ['3'] = '3', ['4'] = '4', ['5'] = '5', ['6'] = '6', ['7'] = '7', ['8'] = '8', ['9'] = '9'}, -- used to convert local language digits to Western 0-9 ['xlate_digits'] = {}, } if local_date_names_from_mediawiki then -- if fetching local month names from MediaWiki is enabled local long_t = {}; local short_t = {}; for i=1, 12 do -- loop 12x and local name = lang_obj:formatDate('F', '2022-' .. i .. '-1'); -- get long month name for each i long_t[name] = i; -- save it name = lang_obj:formatDate('M', '2022-' .. i .. '-1'); -- get short month name for each i short_t[name] = i; -- save it end date_names['local']['long'] = long_t; -- write the long table – overwrites manual translation date_names['local']['short'] = short_t; -- write the short table – overwrites manual translation end -- create inverted date-name tables for reformatting and/or translation for _, invert_t in pairs {{'long', 'inv_local_long'}, {'short', 'inv_local_short'}, {'quarter', 'inv_local_quarter'}, {'season', 'inv_local_season'}, {'named', 'inv_local_named'}} do for name, i in pairs (date_names['local'][invert_t[1]]) do -- this table is ['name'] = i date_names[invert_t[2]][i] = name; -- invert to get [i] = 'name' for conversions from ymd end end if local_digits_from_mediawiki then -- if fetching local digits from MediaWiki is enabled local digits_t = {}; for i=0, 9 do -- loop 10x and digits_t [lang_obj:formatNum (i)] = tostring (i); -- format the loop indexer as local lang table index and assign loop indexer (a string) as the value end date_names['local_digits'] = digits_t; end for ld, ed in pairs (date_names.local_digits) do -- make a digit translation table for simple date translation from en to local language using local_digits table date_names.xlate_digits [ed] = ld; -- en digit becomes index with local digit as the value end local df_template_patterns = { -- table of redirects to {{Use dmy dates}} and {{Use mdy dates}} '{{ *[Uu]se +(dmy) +dates *[|}]', -- 1159k -- sorted by approximate transclusion count '{{ *[Uu]se +(mdy) +dates *[|}]', -- 212k '{{ *[Uu]se +(MDY) +dates *[|}]', -- 788 '{{ *[Uu]se +(DMY) +dates *[|}]', -- 343 '{{ *([Mm]dy) *[|}]', -- 176 '{{ *[Uu]se *(dmy) *[|}]', -- 156 + 18 '{{ *[Uu]se *(mdy) *[|}]', -- 149 + 11 '{{ *([Dd]my) *[|}]', -- 56 '{{ *[Uu]se +(MDY) *[|}]', -- 5 '{{ *([Dd]MY) *[|}]', -- 3 '{{ *[Uu]se(mdy)dates *[|}]', -- 1 '{{ *[Uu]se +(DMY) *[|}]', -- 0 '{{ *([Mm]DY) *[|}]', -- 0 } local title_object = mw.title.getCurrentTitle(); local content; -- done this way so that unused templates appear in unused-template-reports; self-transcluded makes them look like they are used if 10 ~= title_object.namespace then -- all namespaces except Template content = title_object:getContent() or ''; -- get the content of the article or ''; new pages edited w/ve do not have 'content' until saved; ve does not preview; phab:T221625 end local function get_date_format () if not content then -- nil content when we're in template return nil; -- auto-formatting does not work in Template space so don't set global_df end for _, pattern in ipairs (df_template_patterns) do -- loop through the patterns looking for {{Use dmy dates}} or {{Use mdy dates}} or any of their redirects local start, _, match = content:find(pattern); -- match is the three letters indicating desired date format if match then local use_dates_template = content:match ('%b{}', start); -- get the whole template if use_dates_template:match ('| *cs1%-dates *= *[lsy][sy]?') then -- look for |cs1-dates=publication date length access-/archive-date length return match:lower() .. '-' .. use_dates_template:match ('| *cs1%-dates *= *([lsy][sy]?)'); else return match:lower() .. '-all'; -- no |cs1-dates= k/v pair; return value appropriate for use in |df= end end end end local global_df; -- TODO: add this to <global_cs1_config_t>? --[[-----------------< V O L U M E , I S S U E , P A G E S >------------------ These tables hold cite class values (from the template invocation) and identify those templates that support |volume=, |issue=, and |page(s)= parameters. Cite conference and cite map require further qualification which is handled in the main module. ]] local templates_using_volume = {'citation', 'audio-visual', 'book', 'conference', 'encyclopaedia', 'interview', 'journal', 'magazine', 'map', 'news', 'report', 'techreport', 'thesis'} local templates_using_issue = {'citation', 'conference', 'episode', 'interview', 'journal', 'magazine', 'map', 'news', 'podcast'} local templates_not_using_page = {'audio-visual', 'episode', 'mailinglist', 'newsgroup', 'podcast', 'serial', 'sign', 'speech'} --[[ These tables control when it is appropriate for {{citation}} to render |volume= and/or |issue=. The parameter names in the tables constrain {{citation}} so that its renderings match the renderings of the equivalent cs1 templates. For example, {{cite web}} does not support |volume= so the equivalent {{citation |website=...}} must not support |volume=. ]] local citation_no_volume_t = { -- {{citation}} does not render |volume= when these parameters are used 'website', 'mailinglist', 'script-website', } local citation_issue_t = { -- {{citation}} may render |issue= when these parameters are used 'journal', 'magazine', 'newspaper', 'periodical', 'work', 'script-journal', 'script-magazine', 'script-newspaper', 'script-periodical', 'script-work', } --[[ Patterns for finding extra text in |volume=, |issue=, |page=, |pages= ]] local vol_iss_pg_patterns = { good_ppattern = '^P[^%.PpGg]', -- OK to begin with uppercase P: P7 (page 7 of section P), but not p123 (page 123); TODO: this allows 'Pages' which it should not bad_ppatterns = { -- patterns for |page= and |pages= '^[Pp][PpGg]?%.?[ %d]', '^[Pp][Pp]?%.&nbsp;', -- from {{p.}} and {{pp.}} templates '^[Pp]ages?', '^[Pp]gs.?', }, vi_patterns_t = { -- combined to catch volume-like text in |issue= and issue-like text in |volume= '^volumes?', -- volume-like text '^vols?[%.:=]?', '^issues?', --issue-like text '^iss[%.:=]?', '^numbers?', '^nos?%A', -- don't match 'november' or 'nostradamus' '^nr[%.:=]?', '^n[%.:= ]', -- might be a valid issue without separator (space char is sep char here) '^n°', -- 'n' with degree sign (U+00B0) '^№', -- precomposed unicode numero character (U+2116) }, } --[[--------------------------< K E Y W O R D S >------------------------------- These tables hold keywords for those parameters that have defined sets of acceptable keywords. ]] --[[-------------------< K E Y W O R D S T A B L E >-------------------------- this is a list of keywords; each key in the list is associated with a table of synonymous keywords possibly from different languages. for I18N: add local-language keywords to value table; do not change the key. For example, adding the German keyword 'ja': ['affirmative'] = {'yes', 'true', 'y', 'ja'}, Because CS1|2 templates from en.wiki articles are often copied to other local wikis, it is recommended that the English keywords remain in these tables. ]] local keywords = { ['amp'] = {'&', 'amp', 'ampersand'}, -- |name-list-style= ['and'] = {'and', 'serial'}, -- |name-list-style= ['affirmative'] = {'yes', 'true', 'y'}, -- |no-tracking=, |no-pp= -- Used by InternetArchiveBot ['afterword'] = {'afterword'}, -- |contribution= ['bot: unknown'] = {'bot: unknown'}, -- |url-status= -- Used by InternetArchiveBot ['cs1'] = {'cs1'}, -- |mode= ['cs2'] = {'cs2'}, -- |mode= ['dead'] = {'dead', 'deviated'}, -- |url-status= -- Used by InternetArchiveBot ['dmy'] = {'dmy'}, -- |df= ['dmy-all'] = {'dmy-all'}, -- |df= ['foreword'] = {'foreword'}, -- |contribution= ['free'] = {'free'}, -- |<id>-access= -- Used by InternetArchiveBot ['harv'] = {'harv'}, -- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true ['introduction'] = {'introduction'}, -- |contribution= ['limited'] = {'limited'}, -- |url-access= -- Used by InternetArchiveBot ['live'] = {'live'}, -- |url-status= -- Used by InternetArchiveBot ['mdy'] = {'mdy'}, -- |df= ['mdy-all'] = {'mdy-all'}, -- |df= ['none'] = {'none'}, -- |postscript=, |ref=, |title=, |type= -- Used by InternetArchiveBot ['off'] = {'off'}, -- |title= (potentially also: |title-link=, |postscript=, |ref=, |type=) ['preface'] = {'preface'}, -- |contribution= ['registration'] = {'registration'}, -- |url-access= -- Used by InternetArchiveBot ['subscription'] = {'subscription'}, -- |url-access= -- Used by InternetArchiveBot ['unfit'] = {'unfit'}, -- |url-status= -- Used by InternetArchiveBot ['usurped'] = {'usurped'}, -- |url-status= -- Used by InternetArchiveBot ['vanc'] = {'vanc'}, -- |name-list-style= ['ymd'] = {'ymd'}, -- |df= ['ymd-all'] = {'ymd-all'}, -- |df= -- ['yMd'] = {'yMd'}, -- |df=; not supported at en.wiki -- ['yMd-all'] = {'yMd-all'}, -- |df=; not supported at en.wiki } --[[------------------------< X L A T E _ K E Y W O R D S >--------------------- this function builds a list, keywords_xlate{}, of the keywords found in keywords{} where the values from keywords{} become the keys in keywords_xlate{} and the keys from keywords{} become the values in keywords_xlate{}: ['affirmative'] = {'yes', 'true', 'y'}, -- in keywords{} becomes ['yes'] = 'affirmative', -- in keywords_xlate{} ['true'] = 'affirmative', ['y'] = 'affirmative', the purpose of this function is to act as a translator between a non-English keyword and its English equivalent that may be used in other modules of this suite ]] local function xlate_keywords () local out_table = {}; -- output goes here for k, keywords_t in pairs (keywords) do -- spin through the keywords table for _, keyword in ipairs (keywords_t) do -- for each keyword out_table[keyword] = k; -- create an entry in the output table where keyword is the key end end return out_table; end local keywords_xlate = xlate_keywords (); -- the list of translated keywords --[[----------------< M A K E _ K E Y W O R D S _ L I S T >--------------------- this function assembles, for parameter-value validation, the list of keywords appropriate to that parameter. keywords_lists{}, is a table of tables from keywords{} ]] local function make_keywords_list (keywords_lists) local out_table = {}; -- output goes here for _, keyword_list in ipairs (keywords_lists) do -- spin through keywords_lists{} and get a table of keywords for _, keyword in ipairs (keyword_list) do -- spin through keyword_list{} and add each keyword, ... table.insert (out_table, keyword); -- ... as plain text, to the output list end end return out_table; end --[[----------------< K E Y W O R D S _ L I S T S >----------------------------- this is a list of lists of valid keywords for the various parameters in [key]. Generally the keys in this table are the canonical en.wiki parameter names though some are contrived because of use in multiple differently named parameters: ['yes_true_y'], ['id-access']. The function make_keywords_list() extracts the individual keywords from the appropriate list in keywords{}. The lists in this table are used to validate the keyword assignment for the parameters named in this table's keys. ]] local keywords_lists = { ['yes_true_y'] = make_keywords_list ({keywords.affirmative}), ['contribution'] = make_keywords_list ({keywords.afterword, keywords.foreword, keywords.introduction, keywords.preface}), ['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all']}), -- ['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all'], keywords.yMd, keywords['yMd-all']}), -- not supported at en.wiki ['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}), ['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}), ['ref'] = make_keywords_list ({keywords.harv}), -- inverted check; |ref=harv no longer supported ['url-access'] = make_keywords_list ({keywords.subscription, keywords.limited, keywords.registration}), ['url-status'] = make_keywords_list ({keywords.dead, keywords.live, keywords.unfit, keywords.usurped, keywords['bot: unknown']}), ['id-access'] = make_keywords_list ({keywords.free}), } --[[--------------------------< C S 1 _ C O N F I G _ G E T >-------------------------------------------------- fetch and validate values from {{cs1 config}} template to fill <global_cs1_config_t> no error messages; when errors are detected, the parameter value from {{cs1 config}} is blanked. Supports all parameters and aliases associated with the metaparameters: DisplayAuthors, DisplayContributors, DisplayEditors, DisplayInterviewers, DisplayTranslators, NameListStyle, and Mode. The DisplayWhatever metaparameters accept numeric values only (|display-authors=etal and the like is not supported). ]] local global_cs1_config_t = {}; -- TODO: add value returned from get_date_format() to this table? local function get_cs1_config () if not content then -- nil content when we're in template return nil; -- auto-formatting does not work in Template space so don't set global_df end local start = content:find('{{ *[Cc][Ss]1 config *[|}]'); -- <start> is offset into <content> when {{cs1 config}} found; nil else if start then local cs1_config_template = content:match ('%b{}', start); -- get the whole template if not cs1_config_template then return nil; end local params_t = mw.text.split (cs1_config_template:gsub ('^{{%s*', ''):gsub ('%s*}}$', ''), '%s*|%s*'); -- remove '{{' and '}}'; make a sequence of parameter/value pairs (split on the pipe) table.remove (params_t, 1); -- remove the template name because it isn't a parameter/value pair local config_meta_params_t = {'DisplayAuthors', 'DisplayContributors', 'DisplayEditors', 'DisplayInterviewers', 'DisplayTranslators', 'NameListStyle', 'Mode'}; local meta_param_map_t = {}; -- list of accepted parameter names usable in {{cs1 config}} goes here for _, meta_param in ipairs (config_meta_params_t) do -- for i18n using <config_meta_params_t>, map template parameter names to their metaparameter equivalents if 'table' == type (aliases[meta_param]) then -- if <meta_param> is a sequence, for _, param in ipairs (aliases[meta_param]) do -- extract its contents meta_param_map_t[param] = meta_param; -- and add to <meta_param_map_t> end else meta_param_map_t[aliases[meta_param]] = meta_param; -- not a sequence so just add the parameter to <meta_param_map_t> end end local keywords_t = {}; -- map valid keywords to their associate metaparameter; reverse form of <keyword_lists[key] for these metaparameters for _, metaparam_t in ipairs ({{'NameListStyle', 'name-list-style'}, {'Mode', 'mode'}}) do -- only these metaparameter / keywords_lists key pairs for _, keyword in ipairs (keywords_lists[metaparam_t[2]]) do -- spin through the list of keywords keywords_t[keyword] = metaparam_t[1]; -- add [keyword] = metaparameter to the map end end for _, param in ipairs (params_t) do -- spin through the {{cs1 config}} parameters and fill <global_cs1_config_t> local k, v = param:match ('([^=]-)%s*=%s*(.+)'); -- <k> is the parameter name; <v> is parameter's assigned value if k then if k:find ('^display') then -- if <k> is one of the |display-<namelist>= parameters if v:match ('%d+') then -- the assigned value must be digits; doesn't accept 'etal' global_cs1_config_t[meta_param_map_t[k]]=v; -- add the display param and its value to globals table end else if keywords_t[v] == meta_param_map_t[k] then -- keywords_t[v] returns nil or the metaparam name; these must be the same global_cs1_config_t[meta_param_map_t[k]]=v; -- add the parameter and its value to globals table end end end end end end get_cs1_config (); -- fill <global_cs1_config_t> --[[---------------------< S T R I P M A R K E R S >---------------------------- Common pattern definition location for stripmarkers so that we don't have to go hunting for them if (when) MediaWiki changes their form. ]] local stripmarkers = { ['any'] = '\127[^\127]*UNIQ%-%-(%a+)%-[%a%d]+%-QINU[^\127]*\127', -- capture returns name of stripmarker ['math'] = '\127[^\127]*UNIQ%-%-math%-[%a%d]+%-QINU[^\127]*\127' -- math stripmarkers used in coins_cleanup() and coins_replace_math_stripmarker() } --[[------------< I N V I S I B L E _ C H A R A C T E R S >--------------------- This table holds non-printing or invisible characters indexed either by name or by Unicode group. Values are decimal representations of UTF-8 codes. The table is organized as a table of tables because the Lua pairs keyword returns table data in an arbitrary order. Here, we want to process the table from top to bottom because the entries at the top of the table are also found in the ranges specified by the entries at the bottom of the table. Also here is a pattern that recognizes stripmarkers that begin and end with the delete characters. The nowiki stripmarker is not an error but some others are because the parameter values that include them become part of the template's metadata before stripmarker replacement. ]] local invisible_defs = { del = '\127', -- used to distinguish between stripmarker and del char zwj = '\226\128\141', -- used with capture because zwj may be allowed } local invisible_chars = { {'replacement', '\239\191\189'}, -- U+FFFD, EF BF BD {'zero width joiner', '('.. invisible_defs.zwj .. ')'}, -- U+200D, E2 80 8D; capture because zwj may be allowed {'zero width space', '\226\128\139'}, -- U+200B, E2 80 8B {'hair space', '\226\128\138'}, -- U+200A, E2 80 8A {'soft hyphen', '\194\173'}, -- U+00AD, C2 AD {'horizontal tab', '\009'}, -- U+0009 (HT), 09 {'line feed', '\010'}, -- U+000A (LF), 0A {'no-break space', '\194\160'}, -- U+00A0 (NBSP), C2 A0 {'carriage return', '\013'}, -- U+000D (CR), 0D {'stripmarker', stripmarkers.any}, -- stripmarker; may or may not be an error; capture returns the stripmaker type {'delete', '('.. invisible_defs.del .. ')'}, -- U+007F (DEL), 7F; must be done after stripmarker test; capture to distinguish isolated del chars not part of stripmarker {'C0 control', '[\000-\008\011\012\014-\031]'}, -- U+0000–U+001F (NULL–US), 00–1F (except HT, LF, CR (09, 0A, 0D)) {'C1 control', '[\194\128-\194\159]'}, -- U+0080–U+009F (XXX–APC), C2 80 – C2 9F -- {'Specials', '[\239\191\185-\239\191\191]'}, -- U+FFF9-U+FFFF, EF BF B9 – EF BF BF -- {'Private use area', '[\238\128\128-\239\163\191]'}, -- U+E000–U+F8FF, EE 80 80 – EF A3 BF -- {'Supplementary Private Use Area-A', '[\243\176\128\128-\243\191\191\189]'}, -- U+F0000–U+FFFFD, F3 B0 80 80 – F3 BF BF BD -- {'Supplementary Private Use Area-B', '[\244\128\128\128-\244\143\191\189]'}, -- U+100000–U+10FFFD, F4 80 80 80 – F4 8F BF BD } --[[ Indic script makes use of zero width joiner as a character modifier so zwj characters must be left in. This pattern covers all of the unicode characters for these languages: Devanagari 0900–097F – https://unicode.org/charts/PDF/U0900.pdf Devanagari extended A8E0–A8FF – https://unicode.org/charts/PDF/UA8E0.pdf Bengali 0980–09FF – https://unicode.org/charts/PDF/U0980.pdf Gurmukhi 0A00–0A7F – https://unicode.org/charts/PDF/U0A00.pdf Gujarati 0A80–0AFF – https://unicode.org/charts/PDF/U0A80.pdf Oriya 0B00–0B7F – https://unicode.org/charts/PDF/U0B00.pdf Tamil 0B80–0BFF – https://unicode.org/charts/PDF/U0B80.pdf Telugu 0C00–0C7F – https://unicode.org/charts/PDF/U0C00.pdf Kannada 0C80–0CFF – https://unicode.org/charts/PDF/U0C80.pdf Malayalam 0D00–0D7F – https://unicode.org/charts/PDF/U0D00.pdf plus the not-necessarily Indic scripts for Sinhala and Burmese: Sinhala 0D80-0DFF - https://unicode.org/charts/PDF/U0D80.pdf Myanmar 1000-109F - https://unicode.org/charts/PDF/U1000.pdf Myanmar extended A AA60-AA7F - https://unicode.org/charts/PDF/UAA60.pdf Myanmar extended B A9E0-A9FF - https://unicode.org/charts/PDF/UA9E0.pdf the pattern is used by has_invisible_chars() and coins_cleanup() ]] local indic_script = '[\224\164\128-\224\181\191\224\163\160-\224\183\191\225\128\128-\225\130\159\234\167\160-\234\167\191\234\169\160-\234\169\191]'; -- list of emoji that use a zwj character (U+200D) to combine with another emoji -- from: https://unicode.org/Public/emoji/15.1/emoji-zwj-sequences.txt; version: 15.1; 2023-06-05 -- table created by: [[:en:Module:Make emoji zwj table]] local emoji_t = { -- indexes are decimal forms of the hex values in U+xxxx [8596] = true, -- U+2194 ↔ left right arrow [8597] = true, -- U+2195 ↕ up down arrow [9760] = true, -- U+2620 ☠ skull and crossbones [9792] = true, -- U+2640 ♀ female sign [9794] = true, -- U+2642 ♂ male sign [9877] = true, -- U+2695 ⚕ staff of aesculapius [9878] = true, -- U+2696 ⚖ scales [9895] = true, -- U+26A7 ⚧ male with stroke and male and female sign [9992] = true, -- U+2708 ✈ airplane [10052] = true, -- U+2744 ❄ snowflake [10084] = true, -- U+2764 ❤ heavy black heart [10145] = true, -- U+27A1 ➡ black rightwards arrow [11035] = true, -- U+2B1B ⬛ black large square [127752] = true, -- U+1F308 🌈 rainbow [127787] = true, -- U+1F32B 🌫 fog [127806] = true, -- U+1F33E 🌾 ear of rice [127859] = true, -- U+1F373 🍳 cooking [127868] = true, -- U+1F37C 🍼 baby bottle [127876] = true, -- U+1F384 🎄 christmas tree [127891] = true, -- U+1F393 🎓 graduation cap [127908] = true, -- U+1F3A4 🎤 microphone [127912] = true, -- U+1F3A8 🎨 artist palette [127979] = true, -- U+1F3EB 🏫 school [127981] = true, -- U+1F3ED 🏭 factory [128102] = true, -- U+1F466 👦 boy [128103] = true, -- U+1F467 👧 girl [128104] = true, -- U+1F468 👨 man [128105] = true, -- U+1F469 👩 woman [128139] = true, -- U+1F48B 💋 kiss mark [128165] = true, -- U+1F4A5 💥 collision symbol [128168] = true, -- U+1F4A8 💨 dash symbol [128171] = true, -- U+1F4AB 💫 dizzy symbol [128187] = true, -- U+1F4BB 💻 personal computer [128188] = true, -- U+1F4BC 💼 brief case [128293] = true, -- U+1F525 🔥 fire [128295] = true, -- U+1F527 🔧 wrench [128300] = true, -- U+1F52C 🔬 microscope [128488] = true, -- U+1F5E8 🗨 left speech bubble [128640] = true, -- U+1F680 🚀 rocket [128658] = true, -- U+1F692 🚒 fire engine [129001] = true, -- U+1F7E9 🟩 large green square [129003] = true, -- U+1F7EB 🟫 large brown square [129309] = true, -- U+1F91D 🤝 handshake [129455] = true, -- U+1F9AF 🦯 probing cane [129456] = true, -- U+1F9B0 🦰 emoji component red hair [129457] = true, -- U+1F9B1 🦱 emoji component curly hair [129458] = true, -- U+1F9B2 🦲 emoji component bald [129459] = true, -- U+1F9B3 🦳 emoji component white hair [129466] = true, -- U+1F9BA 🦺 safety vest [129468] = true, -- U+1F9BC 🦼 motorized wheelchair [129469] = true, -- U+1F9BD 🦽 manual wheelchair [129489] = true, -- U+1F9D1 🧑 adult [129490] = true, -- U+1F9D2 🧒 child [129657] = true, -- U+1FA79 🩹 adhesive bandage [129778] = true, -- U+1FAF2 🫲 leftwards hand } --[[----------------------< L A N G U A G E S U P P O R T >------------------- These tables and constants support various language-specific functionality. ]] --local this_wiki_code = mw.getContentLanguage():getCode(); -- get this wiki's language code local this_wiki_code = lang_obj:getCode(); -- get this wiki's language code if string.match (mw.site.server, 'wikidata') then this_wiki_code = mw.getCurrentFrame():callParserFunction('int', {'lang'}); -- on Wikidata so use interface language setting instead end local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_code, 'all'); -- get a table of language tag/name pairs known to Wikimedia; used for interwiki tests local mw_languages_by_name_t = {}; for k, v in pairs (mw_languages_by_tag_t) do -- build a 'reversed' table name/tag language pairs know to MediaWiki; used for |language= v = mw.ustring.lower (v); -- lowercase for tag fetch; get name's proper case from mw_languages_by_tag_t[<tag>] if mw_languages_by_name_t[v] then -- when name already in the table if 2 == #k or 3 == #k then -- if tag does not have subtags mw_languages_by_name_t[v] = k; -- prefer the shortest tag for this name end else -- here when name not in the table mw_languages_by_name_t[v] = k; -- so add name and matching tag end end local inter_wiki_map = {}; -- map of interwiki prefixes that are language-code prefixes for k, v in pairs (mw.site.interwikiMap ('local')) do -- spin through the base interwiki map (limited to local) if mw_languages_by_tag_t[v["prefix"]] then -- if the prefix matches a known language tag inter_wiki_map[v["prefix"]] = true; -- add it to our local map end end --[[--------------------< S C R I P T _ L A N G _ C O D E S >------------------- This table is used to hold ISO 639-1 two-character and ISO 639-3 three-character language codes that apply only to |script-title= and |script-chapter= ]] local script_lang_codes = { 'ab', 'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'ce', 'dv', 'dz', 'el', 'fa', 'grc', 'gu', 'he', 'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'lo', 'mk', 'ml', 'mn', 'mni', 'mr', 'my', 'ne', 'or', 'ota', 'pa', 'ps', 'ru', 'sd', 'si', 'sr', 'syc', 'ta', 'te', 'tg', 'th', 'ti', 'tt', 'ug', 'uk', 'ur', 'uz', 'yi', 'yue', 'zh' }; --[[---------------< L A N G U A G E R E M A P P I N G >---------------------- These tables hold language information that is different (correct) from MediaWiki's definitions For each ['<tag>'] = 'language name' in lang_code_remap{} there must be a matching ['language name'] = {'language name', '<tag>'} in lang_name_remap{} lang_tag_remap{}: key is always lowercase ISO 639-1, -2, -3 language tag or a valid lowercase IETF language tag value is properly spelled and capitalized language name associated with <tag> only one language name per <tag>; key/value pair must have matching entry in lang_name_remap{} lang_name_remap{}: key is always lowercase language name value is a table the holds correctly spelled and capitalized language name [1] and associated tag [2] (tag must match a tag key in lang_tag_remap{}) may have multiple keys referring to a common preferred name and tag; For example: ['kolsch'] and ['kölsch'] both refer to 'Kölsch' and 'ksh' ]] local lang_tag_remap = { -- used for |language= and |script-title= / |script-chapter= ['als'] = 'Tosk Albanian', -- MediaWiki returns Alemannisch ['bh'] = 'Bihari', -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org ['bla'] = 'Blackfoot', -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name ['bn'] = 'Bengali', -- MediaWiki returns Bangla ['ca-valencia'] = 'Valencian', -- IETF variant of Catalan ['fkv'] = 'Kven', -- MediaWiki returns Kvensk ['gsw'] = 'Swiss German', ['ilo'] = 'Ilocano', -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name ['ksh'] = 'Kölsch', -- MediaWiki: Colognian; use IANA/ISO 639 preferred name ['ksh-x-colog'] = 'Colognian', -- override MediaWiki ksh; no IANA/ISO 639 code for Colognian; IETF private code created at Module:Lang/data ['mis-x-ripuar'] = 'Ripuarian', -- override MediaWiki ksh; no IANA/ISO 639 code for Ripuarian; IETF private code created at Module:Lang/data ['nan-tw'] = 'Taiwanese Hokkien', -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese and support en.wiki preferred name ['sr-ec'] = 'Serbian (Cyrillic script)', -- MediaWiki returns српски (ћирилица) ['sr-el'] = 'Serbian (Latin script)', -- MediaWiki returns srpski (latinica) } local lang_name_remap = { -- used for |language=; names require proper capitalization; tags must be lowercase ['alemannic'] = {'Swiss German', 'gsw'}, -- ISO 639-2, -3 alternate for Swiss German; MediaWiki mediawiki returns Alemannic for gsw; en.wiki preferred name ['alemannisch'] = {'Swiss German', 'gsw'}, -- not an ISO or IANA language name; MediaWiki uses 'als' as a subdomain name for Alemannic Wikipedia: als.wikipedia.org ['bangla'] = {'Bengali', 'bn'}, -- MediaWiki returns Bangla (the endonym) but we want Bengali (the exonym); here we remap ['bengali'] = {'Bengali', 'bn'}, -- MediaWiki doesn't use exonym so here we provide correct language name and 639-1 code ['bhojpuri'] = {'Bhojpuri', 'bho'}, -- MediaWiki uses 'bh' as a subdomain name for Bhojpuri Wikipedia: bh.wikipedia.org ['bihari'] = {'Bihari', 'bh'}, -- MediaWiki replaces 'Bihari' with 'Bhojpuri' so 'Bihari' cannot be found ['blackfoot'] = {'Blackfoot', 'bla'}, -- MediaWiki/IANA/ISO 639: Siksika; use en.wiki preferred name ['colognian'] = {'Colognian', 'ksh-x-colog'}, -- MediaWiki preferred name for ksh ['ilocano'] = {'Ilocano', 'ilo'}, -- MediaWiki/IANA/ISO 639: Iloko; use en.wiki preferred name ['kolsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name (use non-diacritical o instead of umlaut ö) ['kölsch'] = {'Kölsch', 'ksh'}, -- use IANA/ISO 639 preferred name ['kven'] = {'Kven', 'fkv'}, -- Unicode CLDR have decided not to support English language name for these two... ['kvensk'] = {'Kven', 'fkv'}, -- ...they say to refer to IANA registry for English names ['ripuarian'] = {'Ripuarian', 'mis-x-ripuar'}, -- group of dialects; no code in MediaWiki or in IANA/ISO 639 ['serbian (cyrillic script)'] = {'Serbian (Cyrillic script)', 'sr-cyrl'}, -- special case to get correct tag when |language=sr-ec ['serbian (latin script)'] = {'Serbian (Latin script)', 'sr-latn'}, -- special case to get correct tag when |language=sr-el ['swiss german'] = {'Swiss German', 'gsw'}, ['taiwanese hokkien'] = {'Taiwanese Hokkien', 'nan-tw'}, -- make room for MediaWiki/IANA/ISO 639 nan: Min Nan Chinese ['tosk albanian'] = {'Tosk Albanian', 'als'}, -- MediaWiki replaces 'Tosk Albanian' with 'Alemannisch' so 'Tosk Albanian' cannot be found ['valencian'] = {'Valencian', 'ca-valencia'}, -- variant of Catalan; categorizes as Valencian } --[[---------------< P R O P E R T I E S _ C A T E G O R I E S >---------------- Properties categories. These are used for investigating qualities of citations. ]] local prop_cats = { ['foreign-lang-source'] = 'sumber CS1 jaku $1 ($2)', -- |language= categories; $1 is foreign-language name, $2 is ISO639-1 code ['foreign-lang-source-2'] = 'sumber CS1 jaku luar (ISO 639-2)|$1', -- |language= category; a cat for ISO639-2 languages; $1 is the ISO 639-2 code used as a sort key ['interproj-linked-name'] = 'nama CS1 belink antara projek|$1', -- any author, editor, etc that has an interproject link; $1 is interproject tag used as a sort key ['interwiki-linked-name'] = 'nama CS1 belink antara wiki|$1', -- any author, editor, etc that has an interwiki link; $1 is interwiki tag used as a sort key; yeilds to interproject ['local-lang-source'] = 'sumber CS1 jaku $1 ($2)', -- |language= categories; $1 is local-language name, $2 is ISO639-1 code; not emitted when local_lang_cat_enable is false ['location-test'] = 'CS1 penguji endur', ['long-vol'] = 'CS1: Nilai isi padu panjai', -- probably temporary cat to identify scope of |volume= values longer than 4 characters ['script'] = 'CS1 ngena urup jaku $1 ($2)', -- |script-title=xx: has matching category; $1 is language name, $2 is ISO639-1 code ['tracked-param'] = 'CS1 tracked parameter: $1', -- $1 is base (enumerators removed) parameter name ['year-range-abbreviated'] = 'CS1: abbreviated year range', -- probably temporary cat to identify scope of |date=, |year= values using YYYY–YY form } --[[-------------------< T I T L E _ T Y P E S >-------------------------------- Here we map a template's CitationClass to TitleType (default values for |type= parameter) ]] local title_types = { ['AV-media-notes'] = 'Media notes', ['document'] = 'Document', ['interview'] = 'Interview', ['mailinglist'] = 'Mailing list', ['map'] = 'Map', ['podcast'] = 'Podcast', ['pressrelease'] = 'Press release', ['report'] = 'Report', ['speech'] = 'Speech', ['techreport'] = 'Technical report', ['thesis'] = 'Thesis', } --[[--------------------------< B U I L D _ K N O W N _ F R E E _ D O I _ R E G I S T R A N T S _ T A B L E >-- build a table of doi registrants known to be free-to-read In a doi, the registrant ID is the series of digits between the '10.' and the first '/': in doi 10.1100/sommat, 1100 is the registrant ID see §3.2.2 DOI prefix of the Doi Handbook p. 43 https://www.doi.org/doi-handbook/DOI_Handbook_Final.pdf#page=43 ]] local function build_free_doi_registrants_table() local registrants_t = {}; for _, v in ipairs ({ '1045', '1074', '1096', '1100', '1155', '1186', '1194', '1371', '1629', '1989', '1999', '2147', '2196', '3285', '3389', '3390', '3748', '3814', '3847', '3897', '4061', '4089', '4103', '4172', '4175', '4230', '4236', '4239', '4240', '4249', '4251', '4252', '4253', '4254', '4291', '4292', '4329', '4330', '4331', '5194', '5210', '5306', '5312', '5313', '5314', '5315', '5316', '5317', '5318', '5319', '5320', '5321', '5334', '5402', '5409', '5410', '5411', '5412', '5492', '5493', '5494', '5495', '5496', '5497', '5498', '5499', '5500', '5501', '5527', '5528', '5662', '6064', '6219', '7167', '7217', '7287', '7482', '7490', '7554', '7717', '7759', '7766', '11131', '11569', '11647', '11648', '12688', '12703', '12715', '12942', '12998', '13105', '14256', '14293', '14303', '15215', '15347', '15412', '15560', '16995', '17645', '19080', '19173', '20944', '21037', '21468', '21767', '22261', '22323', '22459', '24105', '24196', '24966', '26775', '30845', '32545', '35711', '35712', '35713', '35995', '36648', '37126', '37532', '37871', '47128', '47622', '47959', '52437', '52975', '53288', '54081', '54947', '55667', '55914', '57009', '58647', '59081', }) do registrants_t[v] = true; -- build a k/v table of known free-to-read doi registrants end return registrants_t; end local extended_registrants_t = { -- known free registrants identifiable by the doi suffix incipit ['1016'] = {'j.heliyon'}, -- Heliyon ['1046'] = {'j.1365-8711', 'j.1365-246x'}, -- MNRAS, GJI ['1093'] = {'mnras', 'mnrasl', 'gji', 'rasti'}, -- MNRAS, MNRAS Letters, GJI, RASTI ['1099'] = {'acmi', 'mic', '00221287', 'mgen'}, -- Access Microbiology, Microbiology, Journal of General Microbiology, Microbial Genomics ['1111'] = {'j.1365-2966', 'j.1745-3933', 'j.1365-246X'}, -- MNRAS, MNRAS Letters, GJI ['1210'] = {'jendso','jcemcr'}, -- Journal of the Endocrine Society, JCEM Case Reports } --[[===================<< E R R O R M E S S A G I N G >>====================== ]] --[[----------< E R R O R M E S S A G E S U P P L I M E N T S >------------- I18N for those messages that are supplemented with additional specific text that describes the reason for the error TODO: merge this with special_case_translations{}? ]] local err_msg_supl = { ['char'] = 'invalid character', -- |isbn=, |sbn= ['check'] = 'checksum', -- |isbn=, |sbn= ['flag'] = 'flag', -- |archive-url= ['form'] = 'invalid form', -- |isbn=, |sbn= ['group'] = 'invalid group id', -- |isbn= ['initials'] = 'initials', -- Vancouver ['invalid language code'] = 'invalid language code', -- |script-<param>= ['journal'] = 'journal', -- |bibcode= ['length'] = 'length', -- |isbn=, |bibcode=, |sbn= ['liveweb'] = 'liveweb', -- |archive-url= ['missing comma'] = 'missing comma', -- Vancouver ['missing prefix'] = 'missing prefix', -- |script-<param>= ['missing title part'] = 'missing title part', -- |script-<param>= ['name'] = 'name', -- Vancouver ['non-Latin char'] = 'non-Latin character', -- Vancouver ['path'] = 'path', -- |archive-url= ['prefix'] = 'invalid prefix', -- |isbn= ['punctuation'] = 'punctuation', -- Vancouver ['save'] = 'save command', -- |archive-url= ['suffix'] = 'suffix', -- Vancouver ['timestamp'] = 'timestamp', -- |archive-url= ['unknown language code'] = 'unknown language code', -- |script-<param>= ['value'] = 'value', -- |bibcode= ['year'] = 'year', -- |bibcode= } --[[--------------< E R R O R _ C O N D I T I O N S >--------------------------- Error condition table. This table has two sections: errors at the top, maintenance at the bottom. Maint 'messaging' does not have a 'message' (message=nil) The following contains a list of IDs for various error conditions defined in the code. For each ID, we specify a text message to display, an error category to include, and whether the error message should be wrapped as a hidden comment. Anchor changes require identical changes to matching anchor in Help:CS1 errors TODO: rename error_conditions{} to something more generic; create separate error and maint tables inside that? ]] local error_conditions = { err_accessdate_missing_url = { message = '<code class="cs1-code">&#124;access-date=</code> requires <code class="cs1-code">&#124;url=</code>', anchor = 'accessdate_missing_url', category = 'CS1 errors: access-date without URL', hidden = false }, err_apostrophe_markup = { message = 'Italic or bold markup not allowed in: <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'apostrophe_markup', category = 'CS1 errors: markup', hidden = false }, err_archive_date_missing_url = { message = '<code class="cs1-code">&#124;archive-date=</code> requires <code class="cs1-code">&#124;archive-url=</code>', anchor = 'archive_date_missing_url', category = 'CS1 errors: archive-url', hidden = false }, err_archive_date_url_ts_mismatch = { message = '<code class="cs1-code">&#124;archive-date=</code> / <code class="cs1-code">&#124;archive-url=</code> timestamp mismatch; $1 suggested', anchor = 'archive_date_url_ts_mismatch', category = 'CS1 errors: archive-url', hidden = false }, err_archive_missing_date = { message = '<code class="cs1-code">&#124;archive-url=</code> requires <code class="cs1-code">&#124;archive-date=</code>', anchor = 'archive_missing_date', category = 'CS1 errors: archive-url', hidden = false }, err_archive_missing_url = { message = '<code class="cs1-code">&#124;archive-url=</code> requires <code class="cs1-code">&#124;url=</code>', anchor = 'archive_missing_url', category = 'CS1 errors: archive-url', hidden = false }, err_archive_url = { message = '<code class="cs1-code">&#124;archive-url=</code> is malformed: $1', -- $1 is error message detail anchor = 'archive_url', category = 'CS1 errors: archive-url', hidden = false }, err_arxiv_missing = { message = '<code class="cs1-code">&#124;arxiv=</code> required', anchor = 'arxiv_missing', category = 'CS1 errors: arXiv', -- same as bad arxiv hidden = false }, err_asintld_missing_asin = { message = '<code class="cs1-code">&#124;$1=</code> requires <code class="cs1-code">&#124;asin=</code>', -- $1 is parameter name anchor = 'asintld_missing_asin', category = 'CS1 errors: ASIN TLD', hidden = false }, err_bad_arxiv = { message = 'Check <code class="cs1-code">&#124;arxiv=</code> value', anchor = 'bad_arxiv', category = 'CS1 errors: arXiv', hidden = false }, err_bad_asin = { message = 'Check <code class="cs1-code">&#124;asin=</code> value', anchor = 'bad_asin', category ='CS1 errors: ASIN', hidden = false }, err_bad_asin_tld = { message = 'Check <code class="cs1-code">&#124;asin-tld=</code> value', anchor = 'bad_asin_tld', category ='CS1 errors: ASIN TLD', hidden = false }, err_bad_bibcode = { message = 'Check <code class="cs1-code">&#124;bibcode=</code> $1', -- $1 is error message detail anchor = 'bad_bibcode', category = 'CS1 errors: bibcode', hidden = false }, err_bad_biorxiv = { message = 'Check <code class="cs1-code">&#124;biorxiv=</code> value', anchor = 'bad_biorxiv', category = 'CS1 errors: bioRxiv', hidden = false }, err_bad_citeseerx = { message = 'Check <code class="cs1-code">&#124;citeseerx=</code> value', anchor = 'bad_citeseerx', category = 'CS1 errors: citeseerx', hidden = false }, err_bad_date = { message = 'Check date values in: $1', -- $1 is a parameter name list anchor = 'bad_date', category = 'CS1 errors: dates', hidden = false }, err_bad_doi = { message = 'Check <code class="cs1-code">&#124;doi=</code> value', anchor = 'bad_doi', category = 'CS1 errors: DOI', hidden = false }, err_bad_hdl = { message = 'Check <code class="cs1-code">&#124;hdl=</code> value', anchor = 'bad_hdl', category = 'CS1 errors: HDL', hidden = false }, err_bad_isbn = { message = 'Check <code class="cs1-code">&#124;isbn=</code> value: $1', -- $1 is error message detail anchor = 'bad_isbn', category = 'CS1 errors: ISBN', hidden = false }, err_bad_ismn = { message = 'Check <code class="cs1-code">&#124;ismn=</code> value', anchor = 'bad_ismn', category = 'CS1 errors: ISMN', hidden = false }, err_bad_issn = { message = 'Check <code class="cs1-code">&#124;$1issn=</code> value', -- $1 is 'e' or '' for eissn or issn anchor = 'bad_issn', category = 'CS1 errors: ISSN', hidden = false }, err_bad_jfm = { message = 'Check <code class="cs1-code">&#124;jfm=</code> value', anchor = 'bad_jfm', category = 'CS1 errors: JFM', hidden = false }, err_bad_jstor = { message = 'Check <code class="cs1-code">&#124;jstor=</code> value', anchor = 'bad_jstor', category = 'CS1 errors: JSTOR', hidden = false }, err_bad_lccn = { message = 'Check <code class="cs1-code">&#124;lccn=</code> value', anchor = 'bad_lccn', category = 'CS1 errors: LCCN', hidden = false }, err_bad_medrxiv = { message = 'Check <code class="cs1-code">&#124;medrxiv=</code> value', anchor = 'bad_medrxiv', category = 'CS1 errors: medRxiv', hidden = false }, err_bad_mr = { message = 'Check <code class="cs1-code">&#124;mr=</code> value', anchor = 'bad_mr', category = 'CS1 errors: MR', hidden = false }, err_bad_oclc = { message = 'Check <code class="cs1-code">&#124;oclc=</code> value', anchor = 'bad_oclc', category = 'CS1 errors: OCLC', hidden = false }, err_bad_ol = { message = 'Check <code class="cs1-code">&#124;ol=</code> value', anchor = 'bad_ol', category = 'CS1 errors: OL', hidden = false }, err_bad_osti = { message = 'Check <code class="cs1-code">&#124;osti=</code> value', anchor = 'bad_osti', category = 'CS1 errors: OSTI', hidden = false }, err_bad_paramlink = { -- for |title-link=, |author/editor/translator-link=, |series-link=, |episode-link= message = 'Check <code class="cs1-code">&#124;$1=</code> value', -- $1 is parameter name anchor = 'bad_paramlink', category = 'CS1 errors: parameter link', hidden = false }, err_bad_pmc = { message = 'Check <code class="cs1-code">&#124;pmc=</code> value', anchor = 'bad_pmc', category = 'CS1 errors: PMC', hidden = false }, err_bad_pmid = { message = 'Check <code class="cs1-code">&#124;pmid=</code> value', anchor = 'bad_pmid', category = 'CS1 errors: PMID', hidden = false }, err_bad_rfc = { message = 'Check <code class="cs1-code">&#124;rfc=</code> value', anchor = 'bad_rfc', category = 'CS1 errors: RFC', hidden = false }, err_bad_s2cid = { message = 'Check <code class="cs1-code">&#124;s2cid=</code> value', anchor = 'bad_s2cid', category = 'CS1 errors: S2CID', hidden = false }, err_bad_sbn = { message = 'Check <code class="cs1-code">&#124;sbn=</code> value: $1', -- $1 is error message detail anchor = 'bad_sbn', category = 'CS1 errors: SBN', hidden = false }, err_bad_ssrn = { message = 'Check <code class="cs1-code">&#124;ssrn=</code> value', anchor = 'bad_ssrn', category = 'CS1 errors: SSRN', hidden = false }, err_bad_url = { message = 'Check $1 value', -- $1 is parameter name anchor = 'bad_url', category = 'CS1 errors: URL', hidden = false }, err_bad_usenet_id = { message = 'Check <code class="cs1-code">&#124;message-id=</code> value', anchor = 'bad_message_id', category = 'CS1 errors: message-id', hidden = false }, err_bad_zbl = { message = 'Check <code class="cs1-code">&#124;zbl=</code> value', anchor = 'bad_zbl', category = 'CS1 errors: Zbl', hidden = false }, err_bare_url_missing_title = { message = '$1 missing title', -- $1 is parameter name anchor = 'bare_url_missing_title', category = 'CS1 errors: bare URL', hidden = false }, err_biorxiv_missing = { message = '<code class="cs1-code">&#124;biorxiv=</code> required', anchor = 'biorxiv_missing', category = 'CS1 errors: bioRxiv', -- same as bad bioRxiv hidden = false }, err_chapter_ignored = { message = '<code class="cs1-code">&#124;$1=</code> ignored', -- $1 is parameter name anchor = 'chapter_ignored', category = 'CS1 errors: chapter ignored', hidden = false }, err_citation_missing_title = { message = 'Missing or empty <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'citation_missing_title', category = 'CS1 errors: missing title', hidden = false }, err_citeseerx_missing = { message = '<code class="cs1-code">&#124;citeseerx=</code> required', anchor = 'citeseerx_missing', category = 'CS1 errors: citeseerx', -- same as bad citeseerx hidden = false }, err_cite_web_url = { -- this error applies to cite web and to cite podcast message = 'Missing or empty <code class="cs1-code">&#124;url=</code>', anchor = 'cite_web_url', category = 'CS1 errors: requires URL', hidden = false }, err_class_ignored = { message = '<code class="cs1-code">&#124;class=</code> ignored', anchor = 'class_ignored', category = 'CS1 errors: class', hidden = false }, err_contributor_ignored = { message = '<code class="cs1-code">&#124;contributor=</code> ignored', anchor = 'contributor_ignored', category = 'CS1 errors: contributor', hidden = false }, err_contributor_missing_required_param = { message = '<code class="cs1-code">&#124;contributor=</code> requires <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'contributor_missing_required_param', category = 'CS1 errors: contributor', hidden = false }, err_deprecated_params = { message = 'Cite uses deprecated parameter <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'deprecated_params', category = 'CS1 errors: deprecated parameters', hidden = false }, err_disp_name = { message = 'Invalid <code class="cs1-code">&#124;$1=$2</code>', -- $1 is parameter name; $2 is the assigned value anchor = 'disp_name', category = 'CS1 errors: display-names', hidden = false, }, err_doibroken_missing_doi = { message = '<code class="cs1-code">&#124;$1=</code> requires <code class="cs1-code">&#124;doi=</code>', -- $1 is parameter name anchor = 'doibroken_missing_doi', category = 'CS1 errors: DOI', hidden = false }, err_embargo_missing_pmc = { message = '<code class="cs1-code">&#124;$1=</code> requires <code class="cs1-code">&#124;pmc=</code>', -- $1 is parameter name anchor = 'embargo_missing_pmc', category = 'CS1 errors: PMC embargo', hidden = false }, err_empty_citation = { message = 'Empty citation', anchor = 'empty_citation', category = 'CS1 errors: empty citation', hidden = false }, err_etal = { message = 'Explicit use of et al. in: <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'explicit_et_al', category = 'CS1 errors: explicit use of et al.', hidden = false }, err_extra_text_edition = { message = '<code class="cs1-code">&#124;edition=</code> has extra text', anchor = 'extra_text_edition', category = 'CS1 errors: extra text: edition', hidden = false, }, err_extra_text_issue = { message = '<code class="cs1-code">&#124;$1=</code> has extra text', -- $1 is parameter name anchor = 'extra_text_issue', category = 'CS1 errors: extra text: issue', hidden = false, }, err_extra_text_pages = { message = '<code class="cs1-code">&#124;$1=</code> has extra text', -- $1 is parameter name anchor = 'extra_text_pages', category = 'CS1 errors: extra text: pages', hidden = false, }, err_extra_text_volume = { message = '<code class="cs1-code">&#124;$1=</code> has extra text', -- $1 is parameter name anchor = 'extra_text_volume', category = 'CS1 errors: extra text: volume', hidden = false, }, err_first_missing_last = { message = '<code class="cs1-code">&#124;$1=</code> missing <code class="cs1-code">&#124;$2=</code>', -- $1 is first alias, $2 is matching last alias anchor = 'first_missing_last', category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator hidden = false }, err_format_missing_url = { message = '<code class="cs1-code">&#124;$1=</code> requires <code class="cs1-code">&#124;$2=</code>', -- $1 is format parameter $2 is url parameter anchor = 'format_missing_url', category = 'CS1 errors: format without URL', hidden = false }, err_generic_name = { message = '<code class="cs1-code">&#124;$1=</code> has generic name', -- $1 is parameter name anchor = 'generic_name', category = 'CS1 errors: generic name', hidden = false, }, err_generic_title = { message = 'Cite uses generic title', anchor = 'generic_title', category = 'CS1 errors: generic title', hidden = false, }, err_invalid_param_val = { message = 'Invalid <code class="cs1-code">&#124;$1=$2</code>', -- $1 is parameter name $2 is parameter value anchor = 'invalid_param_val', category = 'CS1 errors: invalid parameter value', hidden = false }, err_invisible_char = { message = '$1 in $2 at position $3', -- $1 is invisible char $2 is parameter name $3 is position number anchor = 'invisible_char', category = 'CS1 errors: invisible characters', hidden = false }, err_medrxiv_missing = { message = '<code class="cs1-code">&#124;medrxiv=</code> required', anchor = 'medrxiv_missing', category = 'CS1 errors: medRxiv', -- same as bad medRxiv hidden = false }, err_missing_name = { message = 'Missing <code class="cs1-code">&#124;$1$2=</code>', -- $1 is modified NameList; $2 is enumerator anchor = 'missing_name', category = 'CS1 errors: missing name', -- author, contributor, editor, interviewer, translator hidden = false }, err_missing_periodical = { message = 'Cite $1 requires <code class="cs1-code">&#124;$2=</code>', -- $1 is cs1 template name; $2 is canonical periodical parameter name for cite $1 anchor = 'missing_periodical', category = 'CS1 errors: missing periodical', hidden = false }, err_missing_pipe = { message = 'Missing pipe in: <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'missing_pipe', category = 'CS1 errors: missing pipe', hidden = false }, err_missing_publisher = { message = 'Cite $1 requires <code class="cs1-code">&#124;$2=</code>', -- $1 is cs1 template name; $2 is canonical publisher parameter name for cite $1 anchor = 'missing_publisher', category = 'CS1 errors: missing publisher', hidden = false }, err_numeric_names = { message = '<code class="cs1-code">&#124;$1=</code> has numeric name', -- $1 is parameter name', anchor = 'numeric_names', category = 'CS1 errors: numeric name', hidden = false, }, err_param_access_requires_param = { message = '<code class="cs1-code">&#124;$1-access=</code> requires <code class="cs1-code">&#124;$1=</code>', -- $1 is parameter name anchor = 'param_access_requires_param', category = 'CS1 errors: param-access', hidden = false }, err_param_has_ext_link = { message = 'External link in <code class="cs1-code">$1</code>', -- $1 is parameter name anchor = 'param_has_ext_link', category = 'CS1 errors: external links', hidden = false }, err_parameter_ignored = { message = 'Unknown parameter <code class="cs1-code">&#124;$1=</code> ignored', -- $1 is parameter name anchor = 'parameter_ignored', category = 'CS1 errors: unsupported parameter', hidden = false }, err_parameter_ignored_suggest = { message = 'Unknown parameter <code class="cs1-code">&#124;$1=</code> ignored (<code class="cs1-code">&#124;$2=</code> suggested)', -- $1 is unknown parameter $2 is suggested parameter name anchor = 'parameter_ignored_suggest', category = 'CS1 errors: unsupported parameter', hidden = false }, err_periodical_ignored = { message = '<code class="cs1-code">&#124;$1=</code> ignored', -- $1 is parameter name anchor = 'periodical_ignored', category = 'CS1 errors: periodical ignored', hidden = false }, err_redundant_parameters = { message = 'More than one of $1 specified', -- $1 is error message detail anchor = 'redundant_parameters', category = 'CS1 errors: redundant parameter', hidden = false }, err_script_parameter = { message = 'Invalid <code class="cs1-code">&#124;$1=</code>: $2', -- $1 is parameter name $2 is script language code or error detail anchor = 'script_parameter', category = 'CS1 errors: script parameters', hidden = false }, err_ssrn_missing = { message = '<code class="cs1-code">&#124;ssrn=</code> required', anchor = 'ssrn_missing', category = 'CS1 errors: SSRN', hidden = false }, err_text_ignored = { message = 'Text "$1" ignored', -- $1 is ignored text anchor = 'text_ignored', category = 'CS1 errors: unrecognized parameter', hidden = false }, err_trans_missing_title = { message = '<code class="cs1-code">&#124;trans-$1=</code> requires <code class="cs1-code">&#124;$1=</code> or <code class="cs1-code">&#124;script-$1=</code>', -- $1 is base parameter name anchor = 'trans_missing_title', category = 'CS1 errors: translated title', hidden = false }, err_param_unknown_empty = { message = 'Cite has empty unknown parameter$1: $2', -- $1 is 's' or empty space; $2 is emty unknown param list anchor = 'param_unknown_empty', category = 'CS1 errors: empty unknown parameters', hidden = false }, err_vancouver = { message = 'Vancouver style error: $1 in name $2', -- $1 is error detail, $2 is the nth name anchor = 'vancouver', category = 'CS1 errors: Vancouver style', hidden = false }, err_wikilink_in_url = { message = 'URL–wikilink conflict', -- uses ndash anchor = 'wikilink_in_url', category = 'CS1 errors: URL–wikilink conflict', -- uses ndash hidden = false }, --[[--------------------------< M A I N T >------------------------------------- maint messages do not have a message (message = nil); otherwise the structure is the same as error messages ]] maint_archived_copy = { message = nil, anchor = 'archived_copy', category = 'CS1 maint: archived copy as title', hidden = true, }, maint_bibcode = { message = nil, anchor = 'bibcode', category = 'CS1 maint: bibcode', hidden = true, }, maint_location_no_publisher = { -- cite book, conference, encyclopedia; citation as book cite or encyclopedia cite message = nil, anchor = 'location_no_publisher', category = 'CS1 maint: location missing publisher', hidden = true, }, maint_bot_unknown = { message = nil, anchor = 'bot:_unknown', category = 'CS1 maint: bot: original URL status unknown', hidden = true, }, maint_date_auto_xlated = { -- date auto-translation not supported by en.wiki message = nil, anchor = 'date_auto_xlated', category = 'CS1 maint: date auto-translated', hidden = true, }, maint_date_format = { message = nil, anchor = 'date_format', category = 'CS1 maint: date format', hidden = true, }, maint_date_year = { message = nil, anchor = 'date_year', category = 'CS1 maint: date and year', hidden = true, }, maint_doi_ignore = { message = nil, anchor = 'doi_ignore', category = 'CS1 maint: ignored DOI errors', hidden = true, }, maint_doi_inactive = { message = nil, anchor = 'doi_inactive', category = 'CS1 maint: DOI inactive', hidden = true, }, maint_doi_inactive_dated = { message = nil, anchor = 'doi_inactive_dated', category = 'CS1 maint: DOI inactive as of $2$3$1', -- $1 is year, $2 is month-name or empty string, $3 is space or empty string hidden = true, }, maint_doi_unflagged_free = { message = nil, anchor = 'doi_unflagged_free', category = 'CS1 maint: unflagged free DOI', hidden = true, }, maint_extra_punct = { message = nil, anchor = 'extra_punct', category = 'CS1 maint: extra punctuation', hidden = true, }, maint_isbn_ignore = { message = nil, anchor = 'ignore_isbn_err', category = 'CS1 maint: ignored ISBN errors', hidden = true, }, maint_issn_ignore = { message = nil, anchor = 'ignore_issn', category = 'CS1 maint: ignored ISSN errors', hidden = true, }, maint_jfm_format = { message = nil, anchor = 'jfm_format', category = 'CS1 maint: JFM format', hidden = true, }, maint_location = { message = nil, anchor = 'location', category = 'CS1 maint: location', hidden = true, }, maint_mr_format = { message = nil, anchor = 'mr_format', category = 'CS1 maint: MR format', hidden = true, }, maint_mult_names = { message = nil, anchor = 'mult_names', category = 'CS1 maint: multiple names: $1', -- $1 is '<name>s list'; gets value from special_case_translation table hidden = true, }, maint_numeric_names = { message = nil, anchor = 'numeric_names', category = 'CS1 maint: numeric names: $1', -- $1 is '<name>s list'; gets value from special_case_translation table hidden = true, }, maint_others = { message = nil, anchor = 'others', category = 'CS1 maint: others', hidden = true, }, maint_others_avm = { message = nil, anchor = 'others_avm', category = 'CS1 maint: others in cite AV media (notes)', hidden = true, }, maint_overridden_setting = { message = nil, anchor = 'overridden', category = 'CS1 maint: overridden setting', hidden = true, }, maint_page_art_num = { message = nil, anchor = 'page_art_num', category = 'CS1 maint: article number as page number', hidden = true, }, maint_pmc_embargo = { message = nil, anchor = 'embargo', category = 'CS1 maint: PMC embargo expired', hidden = true, }, maint_pmc_format = { message = nil, anchor = 'pmc_format', category = 'CS1 maint: PMC format', hidden = true, }, maint_postscript = { message = nil, anchor = 'postscript', category = 'CS1 maint: postscript', hidden = true, }, maint_ref_duplicates_default = { message = nil, anchor = 'ref_default', category = 'CS1 maint: ref duplicates default', hidden = true, }, maint_unfit = { message = nil, anchor = 'unfit', category = 'CS1 maint: unfit URL', hidden = true, }, maint_unknown_lang = { message = nil, anchor = 'unknown_lang', category = 'CS1 maint: unrecognized language', hidden = true, }, maint_untitled = { message = nil, anchor = 'untitled', category = 'CS1 maint: untitled periodical', hidden = true, }, maint_url_status = { message = nil, anchor = 'url_status', category = 'CS1 maint: url-status', hidden = true, }, maint_year= { message = nil, anchor = 'year', category = 'CS1 maint: year', hidden = true, }, maint_zbl = { message = nil, anchor = 'zbl', category = 'CS1 maint: Zbl', hidden = true, }, } --[[--------------------------< I D _ L I M I T S _ D A T A _ T >---------------------------------------------- fetch id limits for certain identifiers from c:Data:CS1/Identifier limits.tab. This source is a json tabular data file maintained at wikipedia commons. Convert the json format to a table of k/v pairs. The values from <id_limits_data_t> are used to set handle.id_limit. ]] local id_limits_data_t = {}; for _, limit_t in ipairs (mw.ext.data.get ("CS1/Identifier limits.tab").data) do id_limits_data_t[limit_t[1]] = limit_t[2]; -- <limit[1]> is identifier; <limit[2]> is upper limit for that identifier end --[[--------------------------< I D _ H A N D L E R S >-------------------------------------------------------- The following contains a list of values for various defined identifiers. For each identifier we specify a variety of information necessary to properly render the identifier in the citation. parameters: a list of parameter aliases for this identifier; first in the list is the canonical form link: Wikipedia article name redirect: a local redirect to a local Wikipedia article name; at en.wiki, 'ISBN (identifier)' is a redirect to 'International Standard Book Number' q: Wikidata q number for the identifier label: the label preceding the identifier; label is linked to a Wikipedia article (in this order): redirect from id_handlers['<id>'].redirect when use_identifier_redirects is true Wikidata-supplied article name for the local wiki from id_handlers['<id>'].q local article name from id_handlers['<id>'].link prefix: the first part of a URL that will be concatenated with a second part which usually contains the identifier suffix: optional third part to be added after the identifier encode: true if URI should be percent-encoded; otherwise false COinS: identifier link or keyword for use in COinS: for identifiers registered at info-uri.info use: info:.... where '...' is the appropriate identifier label for identifiers that have COinS keywords, use the keyword: rft.isbn, rft.issn, rft.eissn for |asin= and |ol=, which require assembly, use the keyword: url for others make a URL using the value in prefix/suffix and #label, use the keyword: pre (not checked; any text other than 'info', 'rft', or 'url' works here) set to nil to leave the identifier out of the COinS separator: character or text between label and the identifier in the rendered citation id_limit: for those identifiers with established limits, this property holds the upper limit access: use this parameter to set the access level for all instances of this identifier. the value must be a valid access level for an identifier (see ['id-access'] in this file). custom_access: to enable custom access level for an identifier, set this parameter to the parameter that should control it (normally 'id-access') ]] local id_handlers = { ['ARXIV'] = { parameters = {'arxiv', 'eprint'}, link = 'arXiv', redirect = 'arXiv (identifier)', q = 'Q118398', label = 'arXiv', prefix = 'https://arxiv.org/abs/', encode = false, COinS = 'info:arxiv', separator = ':', access = 'free', -- free to read }, ['ASIN'] = { parameters = { 'asin', 'ASIN' }, link = 'Amazon Standard Identification Number', redirect = 'ASIN (identifier)', q = 'Q1753278', label = 'ASIN', prefix = 'https://www.amazon.', COinS = 'url', separator = '&nbsp;', encode = false; }, ['BIBCODE'] = { parameters = {'bibcode'}, link = 'Bibcode', redirect = 'Bibcode (identifier)', q = 'Q25754', label = 'Bibcode', prefix = 'https://ui.adsabs.harvard.edu/abs/', encode = false, COinS = 'info:bibcode', separator = ':', custom_access = 'bibcode-access', }, ['BIORXIV'] = { parameters = {'biorxiv'}, link = 'bioRxiv', redirect = 'bioRxiv (identifier)', q = 'Q19835482', label = 'bioRxiv', prefix = 'https://doi.org/', COinS = 'pre', -- use prefix value access = 'free', -- free to read encode = true, separator = '&nbsp;', }, ['CITESEERX'] = { parameters = {'citeseerx'}, link = 'CiteSeerX', redirect = 'CiteSeerX (identifier)', q = 'Q2715061', label = 'CiteSeerX', prefix = 'https://citeseerx.ist.psu.edu/viewdoc/summary?doi=', COinS = 'pre', -- use prefix value access = 'free', -- free to read encode = true, separator = '&nbsp;', }, ['DOI'] = { -- Used by InternetArchiveBot parameters = { 'doi', 'DOI'}, link = 'Digital object identifier', redirect = 'doi (identifier)', q = 'Q25670', label = 'doi', prefix = 'https://doi.org/', COinS = 'info:doi', separator = ':', encode = true, custom_access = 'doi-access', }, ['EISSN'] = { parameters = {'eissn', 'EISSN'}, link = 'International Standard Serial Number#Electronic ISSN', redirect = 'eISSN (identifier)', q = 'Q46339674', label = 'eISSN', prefix = 'https://search.worldcat.org/issn/', COinS = 'rft.eissn', encode = false, separator = '&nbsp;', }, ['HDL'] = { parameters = { 'hdl', 'HDL' }, link = 'Handle System', redirect = 'hdl (identifier)', q = 'Q3126718', label = 'hdl', prefix = 'https://hdl.handle.net/', COinS = 'info:hdl', separator = ':', encode = true, custom_access = 'hdl-access', }, ['ISBN'] = { -- Used by InternetArchiveBot parameters = {'isbn', 'ISBN'}, link = 'International Standard Book Number', redirect = 'ISBN (identifier)', q = 'Q33057', label = 'ISBN', prefix = 'Special:BookSources/', COinS = 'rft.isbn', separator = '&nbsp;', }, ['ISMN'] = { parameters = {'ismn', 'ISMN'}, link = 'International Standard Music Number', redirect = 'ISMN (identifier)', q = 'Q1666938', label = 'ISMN', prefix = '', -- not currently used; COinS = nil, -- nil because we can't use pre or rft or info: separator = '&nbsp;', }, ['ISSN'] = { parameters = {'issn', 'ISSN'}, link = 'International Standard Serial Number', redirect = 'ISSN (identifier)', q = 'Q131276', label = 'ISSN', prefix = 'https://search.worldcat.org/issn/', COinS = 'rft.issn', encode = false, separator = '&nbsp;', }, ['JFM'] = { parameters = {'jfm', 'JFM'}, link = 'Jahrbuch über die Fortschritte der Mathematik', redirect = 'JFM (identifier)', q = '', label = 'JFM', prefix = 'https://zbmath.org/?format=complete&q=an:', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', }, ['JSTOR'] = { parameters = {'jstor', 'JSTOR'}, link = 'JSTOR', redirect = 'JSTOR (identifier)', q = 'Q1420342', label = 'JSTOR', prefix = 'https://www.jstor.org/stable/', COinS = 'pre', -- use prefix value encode = false, separator = '&nbsp;', custom_access = 'jstor-access', }, ['LCCN'] = { parameters = {'lccn', 'LCCN'}, link = 'Library of Congress Control Number', redirect = 'LCCN (identifier)', q = 'Q620946', label = 'LCCN', prefix = 'https://lccn.loc.gov/', COinS = 'info:lccn', encode = false, separator = '&nbsp;', }, ['MEDRXIV'] = { parameters = {'medrxiv'}, link = 'medRxiv', redirect = 'medRxiv (identifier)', q = 'Q58465838', label = 'medRxiv', prefix = 'https://www.medrxiv.org/content/', COinS = 'pre', -- use prefix value access = 'free', -- free to read encode = false, separator = '&nbsp;', }, ['MR'] = { parameters = {'mr', 'MR'}, link = 'Mathematical Reviews', redirect = 'MR (identifier)', q = 'Q211172', label = 'MR', prefix = 'https://mathscinet.ams.org/mathscinet-getitem?mr=', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', }, ['OCLC'] = { parameters = {'oclc', 'OCLC'}, link = 'OCLC', redirect = 'OCLC (identifier)', q = 'Q190593', label = 'OCLC', prefix = 'https://search.worldcat.org/oclc/', COinS = 'info:oclcnum', encode = true, separator = '&nbsp;', id_limit = id_limits_data_t.OCLC or 0, }, ['OL'] = { parameters = { 'ol', 'OL' }, link = 'Open Library', redirect = 'OL (identifier)', q = 'Q1201876', label = 'OL', prefix = 'https://openlibrary.org/', COinS = 'url', separator = '&nbsp;', encode = true, custom_access = 'ol-access', }, ['OSTI'] = { parameters = {'osti', 'OSTI'}, link = 'Office of Scientific and Technical Information', redirect = 'OSTI (identifier)', q = 'Q2015776', label = 'OSTI', prefix = 'https://www.osti.gov/biblio/', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', id_limit = id_limits_data_t.OSTI or 0, custom_access = 'osti-access', }, ['PMC'] = { parameters = {'pmc', 'PMC'}, link = 'PubMed Central', redirect = 'PMC (identifier)', q = 'Q229883', label = 'PMC', prefix = 'https://www.ncbi.nlm.nih.gov/pmc/articles/PMC', suffix = '', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', id_limit = id_limits_data_t.PMC or 0, access = 'free', -- free to read }, ['PMID'] = { parameters = {'pmid', 'PMID'}, link = 'PubMed Identifier', redirect = 'PMID (identifier)', q = 'Q2082879', label = 'PMID', prefix = 'https://pubmed.ncbi.nlm.nih.gov/', COinS = 'info:pmid', encode = false, separator = '&nbsp;', id_limit = id_limits_data_t.PMID or 0, }, ['RFC'] = { parameters = {'rfc', 'RFC'}, link = 'Request for Comments', redirect = 'RFC (identifier)', q = 'Q212971', label = 'RFC', prefix = 'https://tools.ietf.org/html/rfc', COinS = 'pre', -- use prefix value encode = false, separator = '&nbsp;', id_limit = id_limits_data_t.RFC or 0, access = 'free', -- free to read }, ['SBN'] = { parameters = {'sbn', 'SBN'}, link = 'Standard Book Number', -- redirect to International_Standard_Book_Number#History redirect = 'SBN (identifier)', label = 'SBN', prefix = 'Special:BookSources/0-', -- prefix has leading zero necessary to make 9-digit sbn a 10-digit isbn COinS = nil, -- nil because we can't use pre or rft or info: separator = '&nbsp;', }, ['SSRN'] = { parameters = {'ssrn', 'SSRN'}, link = 'Social Science Research Network', redirect = 'SSRN (identifier)', q = 'Q7550801', label = 'SSRN', prefix = 'https://papers.ssrn.com/sol3/papers.cfm?abstract_id=', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', id_limit = id_limits_data_t.SSRN or 0, custom_access = 'ssrn-access', }, ['S2CID'] = { parameters = {'s2cid', 'S2CID'}, link = 'Semantic Scholar', redirect = 'S2CID (identifier)', q = 'Q22908627', label = 'S2CID', prefix = 'https://api.semanticscholar.org/CorpusID:', COinS = 'pre', -- use prefix value encode = false, separator = '&nbsp;', id_limit = id_limits_data_t.S2CID or 0, custom_access = 's2cid-access', }, ['USENETID'] = { parameters = {'message-id'}, link = 'Usenet', redirect = 'Usenet (identifier)', q = 'Q193162', label = 'Usenet:', prefix = 'news:', encode = false, COinS = 'pre', -- use prefix value separator = '&nbsp;', }, ['ZBL'] = { parameters = {'zbl', 'ZBL' }, link = 'Zentralblatt MATH', redirect = 'Zbl (identifier)', q = 'Q190269', label = 'Zbl', prefix = 'https://zbmath.org/?format=complete&q=an:', COinS = 'pre', -- use prefix value encode = true, separator = '&nbsp;', }, } --[[--------------------------< E X P O R T S >--------------------------------- ]] return { use_identifier_redirects = use_identifier_redirects, -- booleans defined in the settings at the top of this module local_lang_cat_enable = local_lang_cat_enable, date_name_auto_xlate_enable = date_name_auto_xlate_enable, date_digit_auto_xlate_enable = date_digit_auto_xlate_enable, enable_sort_keys = enable_sort_keys, -- tables and variables created when this module is loaded global_df = get_date_format (), -- this line can be replaced with "global_df = 'dmy-all'," to have all dates auto translated to dmy format. global_cs1_config_t = global_cs1_config_t, -- global settings from {{cs1 config}} punct_skip = build_skip_table (punct_skip, punct_meta_params), url_skip = build_skip_table (url_skip, url_meta_params), known_free_doi_registrants_t = build_free_doi_registrants_table(), name_space_sort_keys = name_space_sort_keys, aliases = aliases, special_case_translation = special_case_translation, date_names = date_names, err_msg_supl = err_msg_supl, error_conditions = error_conditions, editor_markup_patterns = editor_markup_patterns, et_al_patterns = et_al_patterns, extended_registrants_t = extended_registrants_t, id_handlers = id_handlers, keywords_lists = keywords_lists, keywords_xlate = keywords_xlate, stripmarkers = stripmarkers, invisible_chars = invisible_chars, invisible_defs = invisible_defs, indic_script = indic_script, emoji_t = emoji_t, maint_cats = maint_cats, messages = messages, presentation = presentation, prop_cats = prop_cats, script_lang_codes = script_lang_codes, lang_tag_remap = lang_tag_remap, lang_name_remap = lang_name_remap, this_wiki_code = this_wiki_code, title_types = title_types, uncategorized_namespaces = uncategorized_namespaces_t, uncategorized_subpages = uncategorized_subpages, templates_using_volume = templates_using_volume, templates_using_issue = templates_using_issue, templates_not_using_page = templates_not_using_page, vol_iss_pg_patterns = vol_iss_pg_patterns, single_letter_2nd_lvl_domains_t = single_letter_2nd_lvl_domains_t, inter_wiki_map = inter_wiki_map, mw_languages_by_tag_t = mw_languages_by_tag_t, mw_languages_by_name_t = mw_languages_by_name_t, citation_class_map_t = citation_class_map_t, citation_issue_t = citation_issue_t, citation_no_volume_t = citation_no_volume_t, } elraypr8yjxl3lluj9je1bb952zw3ee Mawat 0 1385 19278 19105 2026-06-10T10:38:09Z Song GK 9 Song GK telah memindahkan laman [[Gibrael Mawat]] ke [[Mawat]] 19105 wikitext text/x-wiki {{Infobox musical artist | name = Gibrael Mawat | caption = | birth_name = Gibrael Mawat | birth_place = [[Sarawak]] | occupation = Penyanyi | genre = Pop | years_active = 2021- diatu | label = Assapai Music Production }} '''Gibrael Mawat Clement Saran'''<ref>{{cite web |url=https://utusansarawak.com.my/eksklusif-saya-mahu-dunia-tahu-keindahan-muzik-iban-mawat/ |title=Eksklusif: Saya mahu dunia tahu keindahan muzik Iban, Mawat |website=Utusan Sarawak |access-date=2026-05-17}}</ref> tauka dikelala enggau nama '''Mawat''' nya siku penanyi Iban ari [[Sarawak]]. Iya tebilang enggau lagu Mit Kelichit , Ulat Bulu , enggau Dayang Bintang. ==Kereban sanding== {{reflist}} [[Kategori:Artis Iban]] g8ug4u8lpp654s5dnblvx45x9y4szf5 Maria 0 1744 19267 12481 2026-06-10T07:18:59Z Song GK 9 /* Penyanding */ 19267 wikitext text/x-wiki {{Infobox person | name = Maria | image = The Mourning Virgin Daoud Corm.png | birth_date = {{Circa|20 BC}}{{Efn|Per the [[Bar and bat mitzvah#Significance|Jewish customs surrounding marriage]] at the time, and the apocryphal [[Gospel of James]], Mary was approximately 16-17{{Efn|if we got the early [[Christian]] traditions on Mary's birthday on September 8th and Jesus's birthday on December 25th we would get that Mary would be 17 when giving birth to Jesus}} years old when giving birth to Jesus.<ref>{{Cite web |title=CHURCH FATHERS: Protoevangelium of James |url=https://www.newadvent.org/fathers/0847.htm |access-date=2024-08-27 |website=www.newadvent.org |quote=And she was sixteen years old when these mysteries happened.}}</ref> Her year of birth is therefore contingent on [[Date of birth of Jesus|that of Jesus]], and though some posit slightly different dates (such as [[John P. Meier|Meier]]'s dating of {{C.|7}} or 6&nbsp;BC)<ref>{{Cite book |last=Meier |first=John P. |author-link=John P. Meier |title=A Marginal Jew: The Roots of the Problem and the Person |year=1991 |publisher=Yale University Press |isbn=978-0-300-14018-7|page=407}}</ref> general consensus places Jesus' birth in {{C.|4}}&nbsp;BC,<ref>{{Cite book|last=Sanders|first=E.&nbsp;P.|author-link=E. P. Sanders|title=The Historical Figure of Jesus|publisher=Allen Lane Penguin Press|year=1993|url=https://books.google.com/books?id=lkbTL36ZgPIC|isbn=978-0-14-192822-7|access-date=1 September 2022|archive-date=18 April 2017|archive-url=https://web.archive.org/web/20170418040039/https://books.google.com/books?id=lkbTL36ZgPIC|url-status=live|pages=10–11}}</ref> thus placing Mary's birth in {{C.|20}} BC.}} | birth_place = [[Herodian kingdom|Herodian Judea]] | death_date = After {{C.|33 AD}} | death_place = [[Jerusalem]], [[Province of Judea|Province of Judaea]], [[Roman Empire]]<br />or [[Ephesus]], [[Province of Asia]], [[Roman Empire]]<ref>{{Cite web |title=Catholic Enncyclopedia: Tomb of the Blessed Virgin Mary |url=https://www.newadvent.org/cathen/14774a.htm |access-date=2 January 2023 |website=New Advent}}</ref><ref>{{Cite web |title=Tomb of Mary: Location and Significance: University of Dayton, Ohio |url=https://udayton.edu/imri/mary/t/tomb-of-mary-location-and-significance.php |access-date=2 January 2023 |website=udayton.edu}}</ref> | spouse = [[Saint Joseph|Joseph]] | children = [[Jesus]] | parents = [[Joachim]] and [[Saint Anne|Anne]] (according to some apocryphal writings) }} '''Maria''' tau dikumbai mega '''Indai Maria''' nya indai [[Jesus|Jesus Christ]] enggau bini [[Joseph]]. Iya disebut dalam [[Sempekat Baru]] enggau mega ba [[Al-Quran]]. Gerija [[Ortodoks Timur]], [[Ortodoks Oriental]], [[Syiriak Timur]], [[Katolik]], [[Anglikan]] enggau [[Lutheran]] pechaya Maria, ukai mina indai Jesus, tang iya mega '''Indai Allah Taala''' lalu gelar '''Ratu Serega'''. Penemu orang [[Protestan]] bukai ngagai Maria bebida nitihka denominasyen sida. Ba pengarap [[Islam]], Maria dikelala enggau nama Maryam, lalu bisi surah dalam Al-Quran ke ngembuan nama iya, ke dikumbai [[Surah Maryam]]. Iya mega ngembuan penuduk ke pemadu tinggi entara semua indu nitihka pengarap Islam. Iya mega dikeninggika dalam pengarap [[Pengarap Baháʼí|Baháʼí]] enggau [[Druze]]. == Nota == <references group="lower-alpha" /> == Kereban sanding == {{reflist}} jx368kyddj1qxckhw9d7d3edo6dn24v Pengidup 0 1905 19268 11393 2026-06-10T07:19:40Z Song GK 9 19268 wikitext text/x-wiki {{Automatic taxobox | name = Life <!-- please see section "Biota" on Talk page before reverting--> | fossil_range = {{Long fossil range|3770|0|earliest=4280}} [[Archean]] – [[Holocene|present]] (possible [[Hadean]] origin) | image = Coral reef... South end of my area (14119221571).jpg | image_upright = 1.2 | image_caption = Diverse forms of life on a [[coral reef]] | taxon = Life | authority = | subdivision_ranks = [[Domain (biology)|Domains]] and [[Kingdom (biology)#Kingdoms of the Eukaryota|Supergroups]] | subdivision = Life on Earth: * [[Cellular life]] ** Domain [[Bacteria]] ** Domain [[Archaea]] ** Domain [[Eukaryota]] *** [[Diaphoretickes]] **** [[Archaeplastida]] <small>(includes [[plant]]s)</small> **** [[Haptista]] **** [[Cryptista]] **** [[TSAR]] *** "[[Excavata]]" *** [[Provora]] *** [[Ancyromonadida]] *** [[CRuMs]] *** [[Hemimastigophora]] *** [[Amorphea]] <small>(includes [[animal]]s and [[fungi]])</small> **''[[Parakaryon myojinensis]]'' (''[[incertae sedis]]'') * [[Non-cellular life]] ** [[Virus]]es{{Efn|Viruses are strongly believed not to descend from a common ancestor, with each [[Realm (virology)|realm]] corresponding to separate instances of a virus coming into existence.<ref name=exec >{{Cite journal |author=International Committee on Taxonomy of Viruses Executive Committee |date=May 2020 |title=The New Scope of Virus Taxonomy: Partitioning the Virosphere Into 15 Hierarchical Ranks |journal=Nature Microbiology |volume=5 |issue=5 |pages=668–674 |doi=10.1038/s41564-020-0709-x |pmc=7186216 |pmid=32341570}}</ref>}} ** [[Virusoid]]s ** [[Viroid]]s }} '''Pengidup''' tau dikumbai mega utai idup, organisma, ianya utai benyawa ke idup ba [[dunya raya]] tu enggau biuh ti mebidaka utai idup enggau utai enda idup baka bejalaika proses fisiologi dll. ari ke nadai, sekalika ketegal fungsi baka nya udah badu (tau dikumbai udah parai), tauka ketegal sida enda kala ngembuan fungsi baka nya lalu dikelas nyadi enda benyawa. Bemayuh macham utai hidup ke bisi, baka utai tumbuh, [[jelu]], [[kulat]], [[protista]], enggau [[monera]]. Penteba tu kadang-kadang ulih nyadi saru enggau engka enda ulih nentuka [[virus]], viroid, tauka pengidup sintetik ke bepotensi nyadi "idup". [[Biologi]] nya [[sains]] ke bekait enggau pansik pengidup. == Nota == <references group="lower-alpha"/> == Kereban sanding == <references /> rnvxfxm8vum5le1o2udzxruow40144s Modul:In lang 828 3284 19251 11612 2026-06-09T13:22:38Z Song GK 9 19251 Scribunto text/plain require('strict'); --[[--------------------------< _ I N _ L A N G >-------------------------------------------------------------- implements {{in lang}} Module entry point from another module |link=yes - creates wikilinked language names |template=<template name> - customizes error messages created by Module:lang |list-cats=yes - documentation tool returns language-category names of cats populated by this template <span class="languageicon">(in <language>)</span> ]] local function _in_lang (args) local yesno = require('Module:Yesno') local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local list_cats = 'yes' == args['list-cats']; -- make a boolean local list = {}; local cats = {}; local maint_msgs = {}; if not args[1] then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">error: ', template, 'missing language tag</span>'}); end local module = 'Module:Lang' .. (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- if this module is the sandbox, local name_from_tag = require (module)._name_from_tag; -- use Module:Lang/sandbox; Module:Lang else local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local this_wiki_lang = mw.language.getContentLanguage().code; -- get this wiki's language code local override_t = mw.loadData ('Module:Lang/data').override; -- this table holds IETF tag/name definitions known to Module:Lang for i, lang in ipairs (args) do local code = args[i]:lower(); local t = {code, ['link'] = args['link'], ['template'] = args['template']}; -- build an 'args' table lang = name_from_tag (t) -- get the language name table.insert (list, lang) -- add this language or error message to the list if code:find ('%-') and not override_t[code] then -- except for the IETF tags listed in <override_t> code = code:match ('^%a%a%a?%f[^%a]'); -- strip off region, script, and variant subtags so that they aren't used to make category names end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym if (0 == namespace) and not list_cats then -- when listing cats don't include this cat; TODO: right choice? table.insert (cats, table.concat ({'[[Category:Lang and lang-xx code promoted to ISO 639-1|', code ..']]'})); end table.insert (maint_msgs, ' <span class="lang-comment" style="font-style:normal; display:none; color:#33aa33; margin-left:0.3em">') table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]})); table.insert (maint_msgs, '</span>;'); code = synonym_table[code]; -- use the synonym end if (0 == namespace) or list_cats then -- when in article space if lang:find ('[Ee]rror') then -- add error category (message provided by Module:Lang) if not list_cats then -- don't include this cat when listing cats; TODO: right choice? table.insert (cats, '[[Category:in lang template errors]]'); end elseif this_wiki_lang ~= code:match ('^%a%a%a?') then -- categorize article only when code is not this wiki's language code or variants thereof if lang:match ('%[%[.-|.-%]%]') then -- wikilinked individual language name lang = lang:match ('%[%[.-|(.-)%]%]'); elseif lang:match ('%[%[.-%]%]') then -- wikilinked collective languages name lang = lang:match ('%[%[(.-)%]%]'); end -- neither of these then plain-text language name if lang:find ('languages') then -- add appropriate language-name category table.insert (cats, table.concat ({'[[Category:Artikel enggau sumber dalam jaku ', lang, ' (', code, ')]]'})); else table.insert (cats, table.concat ({'[[Category:Artikel enggau sumber jaku ', lang, ' (', code, ')]]'})); end end end end if list_cats then local cats = table.concat (cats, ', '):gsub ('[%[%]]', ''); -- make a string of categories and then strip wikilink markup return cats end local capBoolean = yesno(args['cap']) or yesno(args['caps']) local result = {'<span class="languageicon">('}; -- opening span and ( table.insert (result, capBoolean and 'Dalam jaku ' or 'dalam jaku '); -- add capitalized or uncapitalized 'in' table.insert (result, mw.text.listToText (list, ', ', (2 < #list) and ', and ' or ' and ' )); -- and concatenate the language list table.insert (result, ')</span>'); -- add closing ) and closing span table.insert (result, table.concat (maint_msgs) or ''); -- add maint messages, if any table.insert (result, table.concat (cats)); -- add categories return table.concat (result); -- make a big string and done end --[[--------------------------< I N _ L A N G >---------------------------------------------------------------- implements {{in lang}} Module entry point from an {{#invoke:lang/utilities/sanbox|in_lang|<code>|<code2>|<code3>|<code...>|link=yes|template=in lang|list-cats=yes}} ]] local function in_lang (frame) local args = require ('Module:Arguments').getArgs (frame); return _in_lang (args); end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { in_lang = in_lang, -- module entry from {{#invoke:}} _in_lang = _in_lang, -- module entry from another module } fy2c5vlf35n0pgv9hn6yop2255groq1 19256 19251 2026-06-09T13:31:48Z Song GK 9 19256 Scribunto text/plain require('strict'); --[[--------------------------< _ I N _ L A N G >-------------------------------------------------------------- implements {{in lang}} Module entry point from another module |link=yes - creates wikilinked language names |template=<template name> - customizes error messages created by Module:lang |list-cats=yes - documentation tool returns language-category names of cats populated by this template <span class="languageicon">(in <language>)</span> ]] local function _in_lang (args) local yesno = require('Module:Yesno') local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local list_cats = 'yes' == args['list-cats']; -- make a boolean local list = {}; local cats = {}; local maint_msgs = {}; if not args[1] then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">error: ', template, 'missing language tag</span>'}); end local module = 'Module:Lang' .. (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- if this module is the sandbox, local name_from_tag = require (module)._name_from_tag; -- use Module:Lang/sandbox; Module:Lang else local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local this_wiki_lang = mw.language.getContentLanguage().code; -- get this wiki's language code local override_t = mw.loadData ('Module:Lang/data').override; -- this table holds IETF tag/name definitions known to Module:Lang for i, lang in ipairs (args) do local code = args[i]:lower(); local t = {code, ['link'] = args['link'], ['template'] = args['template']}; -- build an 'args' table lang = name_from_tag (t) -- get the language name table.insert (list, lang) -- add this language or error message to the list if code:find ('%-') and not override_t[code] then -- except for the IETF tags listed in <override_t> code = code:match ('^%a%a%a?%f[^%a]'); -- strip off region, script, and variant subtags so that they aren't used to make category names end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym if (0 == namespace) and not list_cats then -- when listing cats don't include this cat; TODO: right choice? table.insert (cats, table.concat ({'[[Kategori:Lang and lang-xx code promoted to ISO 639-1|', code ..']]'})); end table.insert (maint_msgs, ' <span class="lang-comment" style="font-style:normal; display:none; color:#33aa33; margin-left:0.3em">') table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]})); table.insert (maint_msgs, '</span>;'); code = synonym_table[code]; -- use the synonym end if (0 == namespace) or list_cats then -- when in article space if lang:find ('[Ee]rror') then -- add error category (message provided by Module:Lang) if not list_cats then -- don't include this cat when listing cats; TODO: right choice? table.insert (cats, '[[Kategori:in lang template errors]]'); end elseif this_wiki_lang ~= code:match ('^%a%a%a?') then -- categorize article only when code is not this wiki's language code or variants thereof if lang:match ('%[%[.-|.-%]%]') then -- wikilinked individual language name lang = lang:match ('%[%[.-|(.-)%]%]'); elseif lang:match ('%[%[.-%]%]') then -- wikilinked collective languages name lang = lang:match ('%[%[(.-)%]%]'); end -- neither of these then plain-text language name if lang:find ('languages') then -- add appropriate language-name category table.insert (cats, table.concat ({'[[Kategori:Artikel enggau sumber dalam jaku ', lang, ' (', code, ')]]'})); else table.insert (cats, table.concat ({'[[Kategori:Artikel enggau sumber jaku ', lang, ' (', code, ')]]'})); end end end end if list_cats then local cats = table.concat (cats, ', '):gsub ('[%[%]]', ''); -- make a string of categories and then strip wikilink markup return cats end local capBoolean = yesno(args['cap']) or yesno(args['caps']) local result = {'<span class="languageicon">('}; -- opening span and ( table.insert (result, capBoolean and 'Dalam jaku ' or 'dalam jaku '); -- add capitalized or uncapitalized 'in' table.insert (result, mw.text.listToText (list, ', ', (2 < #list) and ', and ' or ' and ' )); -- and concatenate the language list table.insert (result, ')</span>'); -- add closing ) and closing span table.insert (result, table.concat (maint_msgs) or ''); -- add maint messages, if any table.insert (result, table.concat (cats)); -- add categories return table.concat (result); -- make a big string and done end --[[--------------------------< I N _ L A N G >---------------------------------------------------------------- implements {{in lang}} Module entry point from an {{#invoke:lang/utilities/sanbox|in_lang|<code>|<code2>|<code3>|<code...>|link=yes|template=in lang|list-cats=yes}} ]] local function in_lang (frame) local args = require ('Module:Arguments').getArgs (frame); return _in_lang (args); end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { in_lang = in_lang, -- module entry from {{#invoke:}} _in_lang = _in_lang, -- module entry from another module } m1oc8pxoxv248rt4mnb8otsevknqe89 Yukgaejang 0 4841 19250 15219 2026-06-09T13:20:34Z Song GK 9 19250 wikitext text/x-wiki {{Infobox food|name=''Yukgaejang''|image=Korean soup-Yukgaejang-01.jpg|caption=|alternate_name=Spicy beef soup|country=[[Korea]]|region=|national_cuisine=|creator=<!-- or | creators = -->|year=|mintime=|maxtime=|type=[[Guk]]|course=|served=Hot|main_ingredient=[[Beef]]|minor_ingredient=|variations=|serving_size=100 g|calories=|protein=|fat=|carbohydrate=|glycemic_index=|similar_dish=|other=}} '''''Yukgaejang''''' <ref name="standardized2">{{in lang|ko}} {{Cite web|url=http://www.korean.go.kr/common/download.do?file_path=notice&c_file_name=140730_%ED%95%9C%EC%8B%9D%EB%AA%85_%EB%A1%9C%EB%A7%88%EC%9E%90_%ED%91%9C%EA%B8%B0_%EB%B0%8F_%ED%91%9C%EC%A4%80_%EB%B2%88%EC%97%AD_%ED%99%95%EC%A0%95%EC%95%88_.pdf&o_file_name=140730_%ED%95%9C%EC%8B%9D%EB%AA%85_%EB%A1%9C%EB%A7%88%EC%9E%90_%ED%91%9C%EA%B8%B0_%EB%B0%8F_%ED%91%9C%EC%A4%80_%EB%B2%88%EC%97%AD_%ED%99%95%EC%A0%95%EC%95%88_.pdf|script-title=ko:주요 한식명(200개) 로마자 표기 및 번역(영, 중, 일) 표준안|date=2014-07-30|publisher=[[National Institute of Korean Language]]|trans-title=Standardized Romanizations and Translations (English, Chinese, and Japanese) of (200) Major Korean Dishes|format=PDF|access-date=2017-02-16}}</ref> ({{Korean|hangul=육개장}}) tauka '''sup dagin chapi pedas'''<ref name="standardized2" /> nya pemakai Korea ti pedas sereta baka sup ti digaga ari dagin chapi ti dikeretas enggau daun bawang sereta utai bukai, ti ditumis begulai ungkup awak ke lama. Iya nya mayuh macham ''gomguk'', tauka sup ti tebal, ti kala diberi ba pemakai istana diraja Korea. Pemakai tu dikumbai ulih mai pemanah dalam pengerai sereta dikerinduka ketegal gaya iya ti angat sereta pedas.<ref name="whatsonkorea2">{{cite web|url=http://english.whatsonkorea.com/main.ph?code=N&scode=N-16&pst=L|title=Perfect Food for Hot and Humid Weather,Yukgyejang (Spicy Beef Soup)|publisher=What's On Communications Inc.|date=2008-07-06|access-date=2008-05-16|archive-date=2021-11-24|archive-url=https://web.archive.org/web/20211124184842/http://english.whatsonkorea.com/main.ph?code=N&scode=N-16&pst=L|url-status=dead}}</ref> Pia mega, yukgaejang diempa tebal agi orang ke lelak ketegal angat tengah musin angat dikena ngintu diri.<ref>{{Cite web|script-title=ko:육개장, 닭개장|url=https://terms.naver.com/entry.naver?cid=48163&docId=1820009&categoryId=48200|access-date=4 April 2021|website=terms.naver.com|language=ko}}</ref> Kelimpah ari dagin chapi ti udah dikeretas, daun bawang, enggau ai, lauk tu mega nyengkaum pucuk kacang, ''gosari'' (paku bracken), ''torandae'' (batang keribang), bawang ti diiris, ''dangmyeon'' (mi keribang), serebuk chabi, bawang burak, lenga, kichap, minyak (minyak lenga enggau/tauka minyak sayur), lada burak, enggau [[garam]]. Minyak chabi mega tau dikena.<ref name="whatsonkorea2" /> ''Yukgaejang'' suah agi dipantaika enggau mangkuk asi enggau kimchi. == Sejarah == Asal nama jaku ''yukgaejang'' iya nya ''gaejang'' ({{Korean|hangul=개장}}), stew dagin ukui ("개") ti direbus enggau sos pedas sereta mayuh macham herba dikena ngelamun bau ti kuat ari dagin ti wangi nya.<ref>{{cite web|title=[홍익희의 음식이야기] 육개장의 유래|author=홍익희|newspaper=[[Kukmin Ilbo]]|url=https://www.kmib.co.kr/article/view.asp?arcid=0923932717|language=ko|date=April 13, 2018}}</ref> ''Yukgaejang'' digaga nyadi varian penganti ''gaejang'' bepelasarka dagin chapi ungkup sida ke enda rindu makai ukui, enggau ''yuk'' (肉, ''dagin'' ) nyadi metonim dagin chapi.<ref name="chosun2">{{cite web|url=https://biz.chosun.com/site/data/html_dir/2015/03/19/2015031902390.html|title=[맛있는 음식의 역사] 육개장|author=김정미|date=March 22, 2013|newspaper=[[Chosun Ilbo]]|language=ko}}</ref> Rikut kulinari keterubah ''yukgaejang'' bisi ayan ba ''Kyugonyoram'' ({{Korean|hangul=규곤요람|hanja=閨壼要覽|labels=no}}), bup nyumai [[Hangul]] ti ditulis ba pun taun 1800-an.<ref>{{cite web|title=규곤요람 (閨壼要覽)|website=[[Encyclopedia of Korean Culture]]|access-date=June 28, 2025|author=이효지|url=https://encykorea.aks.ac.kr/Article/E0007250|language=ko}}</ref> Maya jeman kolonial Jipun, siti varian Daegu ari lauk ti dikelala enggau nama ''Daegutang'' ({{Korean|hangul=대구탕|hanja=大邱湯|labels=no}}) nyadi tebilang. Seraya dagin chapi nyadi mudah agi diulih, lauk nya dibai ngagai Seoul ketegal pengawa ngaga Gyeongbu Line, lalu pengujung iya nyadi ngerembai di serata Korea.<ref name="chosun2" /> == Varian == [[Fail:Dakgaejang.jpg|thumb|''Dakgaejang'' (sup manuk pedas)]] Lauk tu tau mega digaga ngena [[Manuk|dagin manuk]] kena nganti dagin chapi, lalu dalam kes tu iya dikumbai ''dak-yukgaejang'' tauka ''dakgaejang''. == Kereban sanding == {{Reflist}} qhz52dz88kofju83a48pvtlgcdl1tsj Penyarut Gaza–Israel 0 5222 19269 16072 2026-06-10T07:20:34Z Song GK 9 19269 wikitext text/x-wiki {{Infobox military conflict|conflict=Penyarut Gaza–Israel|place=[[Semenanjung Gaza]] enggau [[Israel]]|campaignbox=|result=Benung nyadi|territory=* Egypt captures the Gaza Strip in [[1948 Arab–Israeli war|1948]] * [[Palestinian fedayeen]] fighters from [[Palestinian Fedayeen insurgency|1948–1956 conduct cross-border raids]] into Israel * Israel occupies the Gaza Strip during the [[Suez Crisis]] in 1956 but subsequently withdraws following intense US pressure * Israel reoccupies the Gaza Strip in 1967 during the [[Six-Day war]] * The [[Second Intifada]] lasts from 2000–2005 ** [[Israeli disengagement from the Gaza Strip|Israel disengages from the Gaza Strip]] in 2005 * Israel implements the ongoing [[Blockade of the Gaza Strip|Gaza blockade]] after [[Battle of Gaza (2007)|Hamas seizes control]] in 2007 * Many wars occur in the Gaza Strip since 2007 with the most recent [[Gaza war|war]] ongoing since 2023|image=Gaza Strip map2.svg|caption=Map of the Gaza Strip|map_size=300|combatant1={{tree list}} * {{flagicon image|Flag of Hejaz (1917).svg}} [[All-Palestine Protectorate]]{{efn|(1948–1959)}} ** [[Palestinian fedayeen]] <hr /> * {{flagicon|Palestin}} [[Palestinian Authority]]{{efn|(1994–2007)}}<hr />{{flagicon|Palestin}}{{flagicon image|}} [[Gaza Strip under Hamas|Hamas-ruled Gaza Strip]]{{efn|(2007–present)}}<hr /> [[Islamist anti-Hamas groups in the Gaza Strip|Gazan Salafi-jihadist groups]]{{efn|(2009–present)}} {{tree list/end}}|combatant2={{flag|Israel}}<br/>{{#invoke:collapsible list|main|title=[[Societal breakdown in the Gaza Strip during the Gaza war#Israeli-backed_groups|Israeli-backed groups]]:|{{tree list}} * {{flag|Popular Forces}}{{#tag:ref|From May 2024.<ref>{{#invoke:Cite|web|url=https://www.timesofisrael.com/liveblog_entry/leader-of-militia-in-gaza-fighting-hamas-admits-cooperating-with-idf/|title=Leader of militia in Gaza fighting Hamas admits cooperating with IDF|date=6 July 2025|website=The Times of Israel|archive-url=https://web.archive.org/web/20250706181426/https://www.timesofisrael.com/liveblog_entry/leader-of-militia-in-gaza-fighting-hamas-admits-cooperating-with-idf/|archive-date=6 July 2025|url-status=live}}</ref><ref name="Shabab">{{#invoke:cite|web|url=https://www.timesofisrael.com/israel-providing-guns-to-gaza-jihadist-gang-to-bolster-opposition-to-hamas/|title=Israel providing guns to Gaza gang to bolster opposition to Hamas|first1=Emanuel|last1=Fabian|first2=Nurit|last2=Yohanan|first3=Nava|last3=Freiberg|date=5 June 2025|website=The Times of Israel|access-date=5 June 2025|archive-url=https://web.archive.org/web/20250605180757/https://www.timesofisrael.com/israel-providing-guns-to-gaza-jihadist-gang-to-bolster-opposition-to-hamas/|archive-date=5 June 2025|url-status=live}}</ref><ref>{{#invoke:Cite|news|last=Rasgon |first=Adam |date=2025-06-06 |title=Who Is Yasser Abu Shabab, the Leader of the Israeli-Backed Militia in Gaza? |url=https://www.nytimes.com/2025/06/06/world/middleeast/israel-gaza-palestinian-militia-hamas-abu-shabab.html |access-date=2025-06-07 |work=The New York Times |language=en-US |issn=0362-4331}}</ref> Popular Forces have been described as a Salafi Jihadist organization with alleged ties to the [[Islamic State]]. Several senior leaders in the Popular Forces also allied with the Islamic State in the Sinai.<ref>{{#invoke:cite|web|last1=Uddin |first1=Rayhan |date=12 June 2025 |title='Popular Forces': Who are the Gaza gangsters being armed by Israel? |url=https://www.middleeasteye.net/explainers/popular-forces-who-are-gangsters-being-armed-israel |access-date=22 June 2025 |website=Middle East Eye}}</ref>|group=lower-alpha}} ** [[Popular Army – Northern Forces]] * {{flag icon|Fatah}} [[Fatah]]-affiliated groups ** [[Counter-Terrorism Strike Force]]<ref>{{Cite web |last=Matamis |first=Joaquin |date=2025-10-27 |title=Gaza's Armed Fragmentation: Clans, Militias, and Rival Power Centers • Stimson Center |url=https://www.stimson.org/2025/gazas-armed-fragmentation-clans-militias-and-rival-power-centers/ |access-date=2025-11-26 |website=Stimson Center |language=en-US}}</ref> ** [[Shuja'iyya Popular Defense Forces]] ** [[Societal breakdown in the Gaza Strip during the Gaza war#Khanidak clan|Khanidak clan]] (disputed)<ref>{{#invoke:Cite|news|last=Halabi |first=Einav |date=2025-07-03 |title=Israel arms Fatah-linked militias, combatting Hamas in Gaza |url=https://www.ynetnews.com/article/hj00b11cxrex |access-date=2025-07-09 |work=Ynet |language=en}}</ref><ref>{{#invoke:Cite|web|date=3 July 2025 |title=Palestinian man denies leading new Gaza gang following Israeli report |url=https://www.middleeasteye.net/news/israel-backs-two-new-armed-gangs-gaza |access-date=2025-10-16 |website=Middle East Eye |language=en}}</ref> ** [[Societal breakdown in the Gaza Strip during the Gaza war#Al-Mujaida clan|Al-Mujaida clan]] (disputed)<ref>{{#invoke:Cite|web |date=2025-10-04 |title=Bodies of Hamas terrorists dragged through the streets as terror group targets Gazan clan |url=https://www.jpost.com/israel-news/article-869352 |access-date=2025-10-04 |website=The Jerusalem Post |language=en}}</ref><ref>{{#invoke:Cite|news |date=2025-10-15 |title=Hamas reasserts control on streets of Gaza, turning guns on its rivals |url=https://www.washingtonpost.com/world/2025/10/15/gaza-hamas-control-clans-ceasefire/ |access-date=2025-10-16 |newspaper=The Washington Post |language=en-US |issn=0190-8286}}</ref> {{tree list/end}} }}|casualties1=56,000–80,000+ parai|casualties2=1,944+ parai}} '''Penyarut Gaza–Israel''' nyadi sebagi ari penyarut Israel-Palestin ke nyadi ba endur nya berengkah ari taun 1948, lebuh urung 200,000 ari lebih 700,000 [[Nakba|iku rayat Palestin ke rari tauka dibuai ari]] rumah sida ngentapka diri ba Semenanjung Gaza nyadi orang tasah.<ref>{{Cite book |last=Morris |first=Benny |title=Righteous Victims: A History of the Zionist-Arab Conflict, 1881–1999 |date=1999 |publisher=Knopf |isbn=978-0-679-74475-7 |language=en}}</ref> Kenyau ari nya, raban militan [[Israel]] enggau Palestin udah belaban dalam 15<ref>{{cite news|title=French historian: Israel destroyed 4,000-year-old culture in Gaza|url=https://www.aljazeera.com/program/the-bottom-line/2024/1/11/french-historian-israel-destroyed-4000-year-old-culture-in-gaza|website=[[Al Jazeera Media Network|Al-Jazeera]]|date=11 January 2024|access-date=20 January 2024|archive-date=2 May 2024|archive-url=https://web.archive.org/web/20240502182056/https://www.aljazeera.com/program/the-bottom-line/2024/1/11/french-historian-israel-destroyed-4000-year-old-culture-in-gaza|url-status=live}}</ref> perang ba Semenanjung Gaza. Penyampau orang Palestin ke parai dalam perang Gaza (benung nyadi kenyau ari taun 2023) (70,000+) tinggi agi ari penyampau pemati ke dipegulai dalam semua perang bukai dalam penyarut Israel–Palestin.<ref>{{cite news|title=Gaza Deaths Surpass Any Arab Loss in Wars With Israel in Past 40 Years|work=The New York Times|date=21 December 2023|url=https://www.nytimes.com/2023/12/21/world/middleeast/gaza-death-toll-palestinians.html|last1=Stack|first1=Liam|access-date=20 January 2024|archive-date=23 January 2024|archive-url=https://web.archive.org/web/20240123191810/https://www.nytimes.com/2023/12/21/world/middleeast/gaza-death-toll-palestinians.html|url-status=live}}</ref><ref name=":0">{{#invoke:Cite|web|date=13 December 2025 |title=386 Killed Since Ceasefire in Gaza|url=https://www.jordannews.jo/Section-20/Middle-East/386-Killed-Since-Ceasefire-in-Gaza-47336|access-date=14 December 2025 |website=Jordan News}}</ref> Israel belaban dalam tiga perang ba Semenanjung Gaza ti maya dipegai Ejipr: Perang Palestin 1948, keterubah iya nguasa Gaza maya Penyarut Suez, enggau pengawa ngambi menua Gaza dalam taun 1967. Maya pengawa nguasa keterubah, 1% ari penyampau tubuh Semenanjung Gaza sekalika dibunuh, diperinsa tauka dijil Israel.{{Sfn|Filiu|2014}} Berindik ari dua timpuh penyarut tikas baruh, penyarut besai entara Israel enggau Palestin nyadi dalam Intifada Keterubah. Sempekat Oslo 1993 mai timpuh ti belelak. Tang, dalam taun 2000 Intifada Kedua nyadi. Nengah pengujung Intifada Kedua, Israel ngelengka diri ari Gaza dalam taun 2005, [[Hamas]] menang ba pengawa bepilih taun 2006 lalu ngerampas kuasa Gaza dalam taun 2007.<ref>{{Cite news|last1=Perry|first1=Tom|last2=McDowall|first2=Angus|date=7 October 2023|title=Timeline of conflict between Israel and Palestinians in Gaza|work=Reuters|editor-last=Harvey|editor-first=Jan|url=https://www.reuters.com/world/middle-east/conflict-between-israel-palestinians-gaza-2023-10-07/|url-status=live|access-date=7 October 2023|archive-url=https://web.archive.org/web/20231007105909/https://www.reuters.com/world/middle-east/conflict-between-israel-palestinians-gaza-2023-10-07/|archive-date=7 October 2023}}</ref> Dalam taun 2007, Israel neritka sekat darat, langit enggau tasik ba Semenanjung Gaza,<ref name=":1">{{Cite news|last=Meakem|first=Allison|date=10 October 2023|title=The Geopolitics of Palestine, Explained|work=[[Foreign Policy]]|url=https://foreignpolicy.com/2023/10/10/israel-palestine-conflict-gaza-hamas-war-geography-history/|access-date=16 October 2023|archive-date=23 October 2023|archive-url=https://web.archive.org/web/20231023230350/https://foreignpolicy.com/2023/10/10/israel-palestine-conflict-gaza-hamas-war-geography-history/|url-status=live}}</ref> ngubah kandang menua tu nyadi "rumah jil tebuka".<ref>{{Cite web|url=https://www.pbs.org/wnet/wideangle/uncategorized/gaza-er-map-in-and-out-of-gaza/1226/|title=Gaza E.R. ~ Map: In and Out of Gaza &#124; Wide Angle|website=[[PBS]]|date=14 August 2007|accessdate=30 August 2024}}</ref><ref name=":1" /> Pengawa nyekat nya dikutuk mayuh nyadika sebengkah chara ngukum begulai,<ref>{{Cite news|last=Nebehay|first=Stephanie|date=13 September 2011|title=U.N. experts say Israel's blockade of Gaza illegal|work=Reuters|editor-last=Graff|editor-first=Peter|url=https://www.reuters.com/article/us-un-gaza-rights-idUSTRE78C59R20110913|access-date=15 October 2023|archive-date=15 June 2017|archive-url=https://web.archive.org/web/20170615210724/http://www.reuters.com/article/us-un-gaza-rights-idUSTRE78C59R20110913|url-status=live}}<cite id="CITEREFNebehay2011" class="citation news cs1"><span data-segmentid="1009" class="cx-segment">Graff, Peter (ed.). </span><span data-segmentid="1010" class="cx-segment">[https://www.reuters.com/article/us-un-gaza-rights-idUSTRE78C59R20110913 "U.N. experts say Israel's blockade of Gaza illegal"]. </span><span data-segmentid="1011" class="cx-segment">''Reuters''. </span><span data-segmentid="1012" class="cx-segment">[https://web.archive.org/web/20170615210724/http://www.reuters.com/article/us-un-gaza-rights-idUSTRE78C59R20110913 Archived] from the original on 15 June 2017<span class="reference-accessdate">. </span></span></cite><cite id="CITEREFNebehay2011" class="citation news cs1"><span class="reference-accessdate">Retrieved <span class="nowrap">15 October</span> 2023</span>.</cite> "A panel of five independent U.N. rights experts [said] the blockade had subjected Gazans to collective punishment in 'flagrant contravention of international human rights and humanitarian law.'"</ref> seraya Israel ngetanka nya enggau kebuah beguna dikena nagang serang roket Palestin.<ref>{{Cite news|last=Abdulrahim|first=Raja|date=7 October 2023|title=Gaza Has Suffered Under 16-Year Blockade|language=en-US|work=[[The New York Times]]|url=https://www.nytimes.com/2023/10/07/world/middleeast/gaza-blockade-israel.html|access-date=16 October 2023|issn=0362-4331|archive-date=24 October 2023|archive-url=https://web.archive.org/web/20231024053734/https://www.nytimes.com/2023/10/07/world/middleeast/gaza-blockade-israel.html|url-status=live}}</ref> Hamas ngumbai nya nyadika kangau perang.<ref>{{cite news|title=Israel declares Gaza Strip hostile territory|url=https://www.theguardian.com/world/2007/sep/20/israel1|first=Conal|last=Urquhart|work=[[The Guardian]]|date=21 September 2007|access-date=2 February 2024}}</ref> Serang Israel ngagai Gaza ba taun 2008–2009 ngujungka lebih 1,000 iku orang mati sereta rumah, sekula enggau sepital balat rusak. Operasyen Israel taun 2012 mega munuh lebih 100 iku orang. Ba taun 2014, Israel nyerang Gaza dalam perang besai ke ngujungka pemati 73 iku peranak Israel (tebal agi soldadu) enggau 2,251 iku peranak Palestin (tebal agi orang periman). Penyarut nya ngujungka pengerusak ti "enda kala nyadi sebedau tu"<ref name=":2">{{Cite news|last=Burke|first=Jason|date=11 August 2014|title=Gaza homes 'uninhabitable' as tens of thousands come back to rubble|url=https://www.theguardian.com/world/2014/aug/11/damage-gaza-homes-israel-hamas-conflict|access-date=12 May 2024|work=The Guardian|archive-date=27 August 2024|archive-url=https://web.archive.org/web/20240827082849/https://www.theguardian.com/world/2014/aug/11/damage-gaza-homes-israel-hamas-conflict|url-status=live}}</ref>, ngerusak 25% rumah di Nengeri Gaza enggau 70% rumah di Beit Hanoun.<ref name=":2" /> Pengudah taun 2014, pekara ke tampak nyadi dalam konflik nya nyengkaum " Pejalai Besai Pulai " (2018–2019) enggau penyarut ba bulan November 2018, Mei 2019 enggau November 2019. Penyarut taun 2021 beujung 256 iku rayat Palestin enggau 15 iku rayat Israel bebadi nyawa. Kena 7 Oktober 2023, raban militan Palestin nyerang Israel, munuh 1,143 iku orang (tebal agi orang periman) lalu ngepunka perang Gaza. Israel nimbal enggau ngebom Semenanjung Gaza lalu ngepunka serang ti udah munuh lebih 70,000 iku peranak Gaza naka bulan Disember 2025.<ref name=":0" /> == Nota == <references group="lower-alpha"/> == Kereban sanding == {{Reflist}} 1fkq9jpqh92nrdmkn58bibagvp7qogg Gabriel Mawat 0 6606 19280 19104 2026-06-10T10:38:25Z Song GK 9 Mengubah sasaran lencongan dari [[Gibrael Mawat]] ke [[Mawat]] 19280 wikitext text/x-wiki #LENCONG [[Mawat]] t010dnsk99wsamheqy2ut7s34disgid Kategori:Artikel enggau sumber jaku Korea (ko) 14 6658 19252 2026-06-09T13:24:02Z Song GK 9 Mencipta laman baru dengan kandungan '{{Kategori sumber ukai jaku Iban}}' 19252 wikitext text/x-wiki {{Kategori sumber ukai jaku Iban}} 6076wlzprhayhewk04jp9gd7ca0q8qv Templat:Kategori sumber ukai jaku Iban 10 6659 19253 2026-06-09T13:24:13Z Song GK 9 Mencipta laman baru dengan kandungan '<includeonly>{{#invoke:Lang/documentor tool|non_english_language_sources_category}}</includeonly> <noinclude> {{Documentation}} </noinclude>' 19253 wikitext text/x-wiki <includeonly>{{#invoke:Lang/documentor tool|non_english_language_sources_category}}</includeonly> <noinclude> {{Documentation}} </noinclude> tth392pjya3d72u358xiaffc3eucl79 Modul:Lang/documentor tool 828 6660 19254 2026-06-09T13:28:03Z Song GK 9 Mencipta laman baru dengan kandungan 'require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local priv...' 19254 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Artikel enggau sumber jaku %s (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "Sumber CS1 jaku %s (%s)", ["CS1_SCRIPT"] = "CS1 ngena urup jaku %s (%s)", ["LANGUAGE_TEXT"] = "Artikel ti ngundan teks jaku %s", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Lambar enggau IPA jaku %s" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the %s template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Category:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Category:Artikel ngundan teks ukai jaku Iban]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Category:Articles with non-English-language sources]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Category:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Category:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } i152m32an5j4f8n8lripgkyzjuyr3bi 19255 19254 2026-06-09T13:30:21Z Song GK 9 19255 Scribunto text/plain require('strict') local p = {} --[[ -------------------------< P R I V A T E _ T A G S >------------------------------------------------------ {{#invoke:Lang/documentor tool|private_tags}} Reads the override{} table in Module:Lang/data and renders a wiki table of private tags and their associated languages ]] local function private_tags (frame) local override_t = mw.loadData ('Module:Lang/data').override -- get the override table local private_t = {} for tag, lang in pairs (override_t) do if tag:find ('%-x%-') then table.insert (private_t, table.concat ({'\n|-\n|', lang, '||', tag})) end end table.sort (private_t) table.insert (private_t, 1, '{| class="wikitable sortable"') table.insert (private_t, 2, '\n|+ Supported private-use IETF language tags') table.insert (private_t, 3, '\n! Language !! Private-use tag') return table.concat (private_t) .. '\n|}' -- return '<pre>' .. table.concat (private_t) .. '\n|}' .. '</pre>' --error (mw.dumpObject (private_t)) end --[[ -------------------------< L A N G - X X _ S E T T I N G S >---------------------------------------------- {{#invoke:Lang/documentor tool|lang_xx_settings|template={{ROOTPAGENAME}}}} Reads the content of the template and extracts the parameters from {{#invoke:Lang|...}} for display on the template's documentation page. ]] local function lang_xx_settings(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end local out = {} local params local style if content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+|[^}]+}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+|[^}]+}}') then -- if this template uses [[Module:Lang]] params = content:match('{{%s*#invoke:%s*[Ll]ang%s*|[^|]+(|[^}]+)}}') or content:match('{{%s*#invoke:%s*[Ll]ang/sandbox%s*|[^|]+(|[^}]+)}}') -- extract the #invoke:'s parameters if not params then return '' -- there should be at least one or the template/module won't work TODO: error message? end table.insert(out, '{| class="wikitable" style="text-align: right; float: right;"\n|+settings') -- start a wikitable for k, v in params:gmatch('%s*|%s*([^%s=]+)%s*=%s*([^%s|]+)') do -- get the parameter names (k) and values (v) if 'label' == k then -- special case for labels because spaces and pipes v = params:match('label%s*=%s*(%[%[[^%]]+%]%])') or params:match('label%s*=%s*([^|\n]+)') or 'missing label' end table.insert(out, table.concat({k, '\n|', v})) -- make rudimentary wikitable entries end style = content:match('lang_xx_([^|]+)') if not style or ('italic' ~= mw.text.trim (style) and 'inherit' ~= mw.text.trim (style)) then return '<span style="color:#d33">Error: template #invoke calls unknown function</span>' end return table.concat({table.concat(out,'\n|-\n! scope="row" | '), '\n|-\n|colspan="2"|style: ', style, '\n|-\n|}'}) -- add inter-row markup and close the wikitable and done else return '' -- does not use [[Module:Lang]] so abandon quietly end end --[[ -------------------------- < U S E S _ M O D U L E > -------------------------- {{#invoke:Lang/documentor tool|uses_module|template={{ROOTPAGENAME}}}} Reads the content of the template to determine if this {{lang-xx}} template uses Module:Lang. Returns the index of the substring '{{#invoke|lang|' in the template page content if true; empty string if false. Used in template documentation {{#if:}} parser functions. ]] local function uses_module(frame) local page = mw.title.makeTitle('Template', frame.args['template'] or frame.args[1]) -- get a page object for this page in 'Template:' namespace if not page then return '' -- TODO: error message? end local content = page:getContent() -- get unparsed content if not page then return '' -- TODO: error message? end return content:find('{{%s*#invoke:[Ll]ang%s*|') or '' -- return index or empty string end --[[ -------------------------- < S H A R E D _ C O D E > -------------------------- - Tables: -- LANGUAGE_CATEGORIES -- error_messages -- strings - Functions: -- make_error(message, layout, parent_category, nocat) -- get_language_link(language_name, language_code) -- get_see_also_section(page_title, language_name, language_code) -- get_hidden_category_template(frame) -- get_top_section(frame) -- get_bottom_section(frame, language_name, see_also_section, parent_category) ]] local LANGUAGE_CATEGORIES = { ["LANGUAGES_SOURCES"] = "Artikel enggau sumber jaku %s (%s)", ["LANGUAGES_COLLECTIVE_SOURCES"] = "Articles with %s-collective sources (%s)", ["CS1"] = "Sumber CS1 jaku %s (%s)", ["CS1_SCRIPT"] = "CS1 ngena urup jaku %s (%s)", ["LANGUAGE_TEXT"] = "Artikel ti ngundan teks jaku %s", ["LANGUAGES_COLLECTIVE_TEXT"] = "Articles with text in %s", ["ENGLISH"] = "Articles containing explicitly cited %s-language text", ["IPA"] = "Lambar enggau IPA jaku %s" } local error_assistance = " Please see [[Template talk:Lang]] for assistance." local error_messages = { ["ASSISTANCE"] = "Please see [[Template talk:Lang]] for assistance.", ["INCORRECT_CATEGORY_TITLE"] = "[[:%s]] is not the category being populated by the %s template. The correct category is located at: [[:%s]].", ["NO_CATEGORY_TITLE_FOUND"] = "No language category found for '''%s.'''" .. error_assistance, ["NOT_VALID_CATEGORY_FORMAT"] = "'''%s''' is not a a valid category title." .. error_assistance, ["NOT_VALID_LANGUAGE_CODE"] = "[[%s]] is not a valid ISO 639 or IETF language name." .. error_assistance, } local strings = { ["ERROR_CATEGORY"] = "[[Kategori:Lang and lang-xx template errors]]", ["ERROR_SPAN"] = '<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s </span>', ["PURGE_DIV"] = '<div style="font-size: x-small;">%s</div>', ["SEE_ALSO"] = "\n==See also==", ["SEE_ALSO_ITEM"] = "* [[:%s]]", } --[[ -------------------------- < M A K E _ E R R O R > -------------------------- Create an error message. Does not place page in error category if args.nocat is used. Does not categorize in parent cateogory if used in category namespace (usually for /testcases). ]] local function make_error(message, layout, parent_category, nocat) table.insert(layout, string.format(strings["ERROR_SPAN"], message)) if not nocat then table.insert(layout, strings["ERROR_CATEGORY"]) end if mw.title.getCurrentTitle().nsText == "Category" then table.insert(layout, parent_category) end return table.concat(layout) end --[[ -------------------------- < G E T _ L A N G U A G E _ L I N K > -------------------------- Generates a language link for the correct style. Collective languages use the name_from_tag value, while other languages use a display name of "x-language". ]] local function get_language_link(language_name, language_code) local lang_module = require('Module:Lang') -- Is a language collective? if language_name:find('languages') then return lang_module.name_from_tag({language_code, link = "yes"}) else return lang_module.name_from_tag({language_code, link = "yes", label = lang_module.name_from_tag({language_code}) .. "-language"}) end end --[[ -------------------------- < G E T _ P R I M A R Y _ L A N G U A G E _ C O D E > -------------------------- Returns the primary language for sub-langage variants. ]] local function get_primary_language_code(language_code) -- If no hyphen exists, return nil (for cases like "el") if not language_code:find("-") then return nil end -- Match everything before the first hyphen, but only if a hyphen exists if language_code:match("^-") then return nil -- If the code starts with a hyphen, return nil end -- Look for the first part before any hyphen local primary_code = language_code:match("^[^-]+") return primary_code end --[[ -------------------------- < G E T _ S E E _ A L S O _ S E C T I O N > -------------------------- Generates a consistent style See also section for {{Category articles containing non-English-language text}} and {{Non-English-language source category}}. If {{CS1 language sources}} is converted, it should also use it. ]] local function get_see_also_section(page_title, language_name, language_code) local see_also_section = {} for _, category_name in pairs(LANGUAGE_CATEGORIES) do local category = mw.title.new(string.format(category_name, language_name, language_code), 14) if category and page_title ~= category.text and category.exists then table.insert(see_also_section, string.format(strings["SEE_ALSO_ITEM"], category.prefixedText)) end end table.sort(see_also_section) table.insert(see_also_section, 1, strings["SEE_ALSO"]) if table.getn(see_also_section) == 1 then return "" else return table.concat(see_also_section, "\n") end end --[[ -------------------------- < G E T _ H I D D E N _ C A T E G O R Y _ T E M P L A T E > -------------------------- Generates the Template:Hidden category template. This function is separate from the get_top_section() function as this should be used in both error categories and valid categories. ]] local function get_hidden_category_template(frame) return frame:expandTemplate{title = 'Hidden category'} end --[[ -------------------------- < G E T _ T O P _ S E C T I O N > -------------------------- Generates a consistent top maintenance template section which consists of: -- Template:Possibly empty category -- Template:Purge ]] local function get_top_section(frame) local top_section = {} if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category'}) else table.insert(top_section, frame:expandTemplate{title = 'Possibly empty category', args = {hidden=true}}) end local purge_module = require('Module:Purge') table.insert(top_section, string.format(strings["PURGE_DIV"], purge_module._main({"Purge page cache"}))) return table.concat(top_section, "\n\n") end --[[ -------------------------- < G E T _ B O T T O M _ S E C T I O N > -------------------------- Generates a consistent non-text section which consists of: -- Template:Automatic category TOC -- A see also section -- {{DEFAULTSORT}} -- Categorization in parent category ]] local function get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) local bottom_section = {} table.insert(bottom_section, frame:expandTemplate{title = 'Automatic category TOC'}) table.insert(bottom_section, see_also_section) if mw.title.getCurrentTitle().nsText == "Category" then table.insert(bottom_section, frame:preprocess{text = "{{DEFAULTSORT:" .. language_name .. "}}"}) if parent_language_category then table.insert(bottom_section, "[[" .. parent_language_category .. "]]") end table.insert(bottom_section, parent_category) end return table.concat(bottom_section, "\n\n\n") end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ T E X T _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_text_category}} This function implements {{Non-English-language text category}}. ]] local non_english_language_text_strings = { ["LINE1"] = "This category contains articles with %s%s text. The primary purpose of these categories is to facilitate manual or automated checking of text in other languages.", ["LINE2"] = "This category should only be added with the %s family of templates, never explicitly.", ["LINE3"] = 'For example %s, which wraps the text with %s. Also available is %s which displays as %s.', ["LINE3_SYNTAXHIGHLIGHT"] = "<span lang=\"%s\">", ["IN_SCRIPT"] = " (in %s)", ["EXAMPLE_DEFAULT_TEXT"] = "text in %s language here", ["PARENT_CATEGORY"] = "[[Kategori:Artikel ngundan teks ukai jaku Iban]]", ["TEMPLATE"] = "Lang", ["TEMPLATE2"] = "Langx", } local function non_english_language_text_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end -- Naming style: Articles with text from the Berber languages collective local page_title_modified = page.text local split_title = "([^,]+)%%s([^,]*)" local part1 = "" local part2 = "" if page_title_modified:find('Articles with text in') then -- Naming style: Category:Articles with text from Afro-Asiatic languages (as currently implemented in Module:lang) part1, part2 = LANGUAGE_CATEGORIES["LANGUAGES_COLLECTIVE_TEXT"]:match(split_title) elseif page_title_modified:find('explicitly cited') then part1, part2 = LANGUAGE_CATEGORIES["ENGLISH"]:match(split_title) else -- Naming style: Category:Articles containing French-language text part1, part2 = LANGUAGE_CATEGORIES["LANGUAGE_TEXT"]:match(split_title) end page_title_modified = page_title_modified:gsub(part1, "") page_title_modified = page_title_modified:gsub(part2, "") local language_name = page_title_modified local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_text_strings["PARENT_CATEGORY"] if language_name == page.text then -- Error: Category title format not supported. return make_error(string.format(error_messages["NOT_VALID_CATEGORY_FORMAT"], page.text), layout, parent_category, args.nocat) end local lang_module = require('Module:Lang') local language_code = lang_module._tag_from_name({language_name}) if language_code:find('[Ee]rror') then -- Error: Language code not found in database. return make_error(string.format(error_messages["NOT_VALID_LANGUAGE_CODE"], language_name), layout, parent_category, args.nocat) end local correct_language_category_title = lang_module._category_from_tag({language_code}) if correct_language_category_title:find('[Ee]rror') then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if current_category_title ~= correct_language_category_title then -- Error: The current title used is not in the supported format. TODO: can this still be reached? return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_text_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end table.insert(layout, get_top_section(frame)) local script_text = "" if args.script then script_text = string.format(non_english_language_text_strings["IN_SCRIPT"], args.script) end local language_link = get_language_link(language_name, language_code) table.insert(layout, string.format(non_english_language_text_strings["LINE1"], language_link, script_text)) local lang_template = frame:expandTemplate{title = 'Tl', args = {non_english_language_text_strings["TEMPLATE"]}} table.insert(layout, string.format(non_english_language_text_strings["LINE2"], lang_template)) local language_code_link = lang_module._name_from_tag({language_code, link="yes", label=language_code}) local example_default_text = string.format(non_english_language_text_strings["EXAMPLE_DEFAULT_TEXT"], language_name) local example_text = args.example or example_default_text local lang_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE"], language_code_link, example_text}} local langx_args = {non_english_language_text_strings["TEMPLATE2"], language_code_link, example_text} local langx_template_example = frame:expandTemplate{title = "Tlx", args = {non_english_language_text_strings["TEMPLATE2"], language_code, example_text}} local langx_template_code = frame:expandTemplate{title = non_english_language_text_strings["TEMPLATE2"], args = {language_code, example_text}} -- Strip private use subtag from code tag because this is what [[Module:Lang]] does. local language_code_without_private_use = language_code:gsub("%-x%-.*", "") -- Wrap in syntaxhighlight. local syntaxhighlight = frame:extensionTag( "syntaxhighlight", string.format(non_english_language_text_strings["LINE3_SYNTAXHIGHLIGHT"], language_code_without_private_use), {lang = "html", inline = true} ) table.insert(layout, string.format(non_english_language_text_strings["LINE3"], lang_template_example, syntaxhighlight, langx_template_example, langx_template_code)) local see_also_section = get_see_also_section(page.text, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = lang_module._category_from_tag({parent_language_code}) end local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_text_strings["PARENT_CATEGORY"], parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_sources_category}} This function implements {{Non-English-language sources category}}. ]] local non_english_language_sources_strings = { ["LINE1"] = "This is a tracking category for articles that use %s to identify %s sources.", ["PARENT_CATEGORY"] = "[[Kategori:Artikel enggau sumber ukai jaku Iban]]", ["TEMPLATE"] = "In lang", } local function non_english_language_sources_category(frame) local page = mw.title.getCurrentTitle() local args = require('Module:Arguments').getArgs(frame) -- args.test is used for /testcases if args.test then page = mw.title.new(args.test) end local page_title = page.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local parent_category = non_english_language_sources_strings["PARENT_CATEGORY"] local in_lang_module = require('Module:In lang') local correct_language_category_title = in_lang_module._in_lang({language_code, ["list-cats"]="yes"}) if correct_language_category_title == "" then -- Error: No category title found for language code. return make_error(string.format(error_messages["NO_CATEGORY_TITLE_FOUND"], language_code), layout, parent_category, args.nocat) end local current_category_title = page.prefixedText if correct_language_category_title ~= current_category_title then -- Error: The current title used is not in the supported format. return make_error( string.format(error_messages["INCORRECT_CATEGORY_TITLE"], current_category_title, frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"]}}, correct_language_category_title), layout, parent_category, args.nocat) end local language_link = get_language_link(language_name, language_code) local text = string.format(non_english_language_sources_strings["LINE1"], frame:expandTemplate{title = 'Tlx', args = {non_english_language_sources_strings["TEMPLATE"], language_code}}, language_link) table.insert(layout, get_top_section(frame)) table.insert(layout, text) local see_also_section = get_see_also_section(page_title, language_name, language_code) local parent_language_code = get_primary_language_code(language_code) local parent_language_category if parent_language_code then parent_language_category = in_lang_module._in_lang({parent_language_code, ["list-cats"]="yes"}) end local bottom = get_bottom_section(frame, language_name, see_also_section, parent_category, parent_language_category) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < N O N _ E N G L I S H _ L A N G U A G E _ C S 1 _ S O U R C E S _ C A T E G O R Y > -------------------------- {{#invoke:Lang/documentor tool|non_english_language_cs1_sources_category}} This function implements {{Non-English-language CS1 sources category}}. ]] local non_english_language_cs1_text_strings = { ["LINE1"] = "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to identify a source in [[%s language|%s]]. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", ["PARENT_CATEGORY"] = "[[Kategori:CS1 foreign language sources]]", -- #TODO change to "Articles with non-english CS1 language sources" or "CS1 non-English language sources" } --"This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", --"[[Kategori:CS1 uses foreign language script]]", -- "This is a tracking category for [[WP:CS1|CS1 citations]] that use the parameter %s. Pages in this category should only be added by CS1 templates and [[Module:Citation/CS1]].", -- "to identify a source in [[%s language|%s]].", -- "to hold a citation title that uses %s characters and contains the language prefix <code>%s:</code>.", local function non_english_language_cs1_sources_category(frame) local page_title_object = mw.title.getCurrentTitle() local page_title = page_title_object.text local language_code = page_title:match('%(([%a%-]+)%)') local language_name = require('Module:Lang')._name_from_tag({language_code}) local layout = {} table.insert(layout, get_hidden_category_template(frame)) local see_also_section = "" local parameter_doc = frame:expandTemplate{title = 'para', args = {"language", language_code}} table.insert(layout, get_top_section(frame)) table.insert(layout, string.format(non_english_language_cs1_text_strings["LINE1"], parameter_doc, language_name, language_name)) local see_also_section = get_see_also_section(page_title, language_name, language_code) local bottom = get_bottom_section(frame, language_name, see_also_section, non_english_language_cs1_text_strings["PARENT_CATEGORY"]) return table.concat(layout, "\n\n") .. bottom end --[[ -------------------------- < T E S T _ C A S E S _ S H A R E D _ C O D E > -------------------------- ]] local function compare_by_keys2(a, b) -- local function used by table.sort() return a[2] < b[2] -- ascending sort by code end local function compare_by_keys(a, b) -- local function used by table.sort() return a[1] < b[1] -- ascending sort by code end -- Used by testcases_iso_code_to_name() local function get_language_code_table_from_code(args) local entry = {} --if args.override_table[args.language_code] then -- table.insert(entry, args.override_table[args.language_code][1]) -- :gsub(' %b()$', '') fails here --else table.insert(entry, args.language_code) -- end return entry end -- Used by testcases_name_from_tag() local function get_language_code_and_name_table_from_code(args) local entry = {} if args.override_table and args.override_table[args.language_code] then table.insert(entry, args.language_code) local language_code, _ = args.override_table[args.language_code][1]:gsub(' %b()$', '') table.insert(entry, language_code) else table.insert(entry, args.language_code) table.insert(entry, args.language_table[args.language_code]) end return entry end -- Used by testcases_category_from_tag() local function get_language_code_and_category_table_from_code(args) local entry = {} table.insert(entry, args.language_code) table.insert(entry, args.test_function({args.language_code})) return entry end -- Used by testcases_iso_name_to_code() and testcases_tag_from_name() local function get_language_name_and_code_table_from_code(args) local entry = {} if args.override_table[args.language_code] then table.insert(entry, args.override_table[args.language_code][1]) -- only the first name when there are multiples table.insert(entry, args.language_code) else table.insert(entry, args.language_names[1]) -- only the first name when there are multiples table.insert(entry, args.language_code) end return entry end local function get_table(table_function, language_table, length, range, iso_number, test_function) local table_of_language_name_and_code_tables = {} local override_table_name = "override" if iso_number then override_table_name = "override_" .. iso_number end local override_table = require("Module:ISO 639 name/ISO_639_override/sandbox")[override_table_name] -- For most ISO 639s. if range then for language_code, language_names in pairs(language_table) do if language_code:find(range) then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For ISO 639-1. elseif length then for language_code, language_names in pairs(language_table) do if language_code:len() == 2 then table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end -- For general /testcases. else for language_code, language_names in pairs(language_table) do table.insert(table_of_language_name_and_code_tables, table_function({ override_table = override_table, language_code = language_code, language_names = language_names, test_function = test_function, language_table = language_table })) end end return table_of_language_name_and_code_tables end local function get_undabbed_table(language_list, length, range) local undabbed_language_table = {} -- for this test, ISO 639-3 language name disambiguators must be removed; un-dabbed names go here for language_code, language_names in pairs(language_list) do -- For most ISO 639s. if range then if language_code:find(range) then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For ISO 639-1. elseif length then if language_code:len() == 2 then undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') -- undab and save only the first name; ignore all other names assigned to a code end -- For general /testcases. else undabbed_language_table[language_code] = language_names[1]:gsub(' %b()$', '') end end return undabbed_language_table end --[[ -------------------------- < T E S T C A S E S _ C A T E G O R Y _ F R O M _ T A G > -------------------------- Entry point for the various category_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<category name according to Module:Lang>"} - "Expected" column value is the category name according to Module:Lang. - "Actual" column value is the result of {{#invoke:Lang/sandbox|category_from_tag|<language_code>}}. TODO: Currently not working. ]] local function testcases_category_from_tag(self, args) local cat_from_tag_function = require('Module:Lang')._category_from_tag local language_tables = get_table(get_language_code_and_category_table_from_code, args.language_list, args.length, args.range, args.iso_number, cat_from_tag_function) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|category_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ N A M E _ F R O M _ T A G > -------------------------- Entry point for the various name_from_tag testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_code>", "<language_name>"} - "Expected" column value is the <language_name>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|name_from_tag|<language_code>}}. ]] local function testcases_name_from_tag(self, args) local undabbed_language_table = get_undabbed_table(args.language_list, args.length, args.range, nil) local language_tables = get_table(get_language_code_and_name_table_from_code, undabbed_language_table, args.length, args.range) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|name_from_tag|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ T A G _ F R O M _ N A M E > -------------------------- Entry point for the various tag_from_name testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column value is the result of sandbox version {{#invoke:Lang/sandbox|tag_from_name|<language_name>}}. TODO: Currently not working. ]] local function testcases_tag_from_name(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) local ordered_table = {} table.sort(unordered_table) for _, key in ipairs(unordered_table) do table.insert(ordered_table, {key, reverse_table[key]}) end self:preprocess_equals_preprocess_many( '{{#invoke:Lang/sandbox|tag_from_name|', '}}', '', '', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ C O D E _ T O _ N A M E > -------------------------- Entry point for the various iso_code_to_name testcases. Build a table of test patterns where each entry in the table is a table with one member: {"<language_code>"} - "Expected" column value is the result of the live version of {{#invoke:ISO 639 name|iso_639_name_to_code|<language_code>}}. - "Actual" column value is the result of sandbox version {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_code>}}. ]] local function testcases_iso_code_to_name(self, args) local language_tables = get_table(get_language_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_code_to_name|link=yes|', '}}', '{{#invoke:ISO 639 name|iso_639_code_to_name|link=yes|', '}}', language_tables, {nowiki=false} ) end --[[ -------------------------- < T E S T C A S E S _ I S O _ N A M E _ T O _ C O D E > -------------------------- Entry point for the various iso_name_to_code testcases. Build a table of test patterns where each entry in the table is a table with two members: {"<language_name>", "<language_code>"} - "Expected" column value is the <language_code>. - "Actual" column is value the result of {{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|<language_name>}}. ]] local function testcases_iso_name_to_code(self, args) local language_tables = get_table(get_language_name_and_code_table_from_code, args.language_list, args.length, args.range, args.iso_number, nil) table.sort(language_tables, compare_by_keys2) self:preprocess_equals_preprocess_many( '{{#invoke:ISO 639 name/sandbox|iso_639_name_to_code|2=' .. args.iso_number .. "|", '}}', '', '', language_tables, {nowiki=false} ) end --[[--------------------------< S E E _ A L S O >-------------------------------------------------------------- adds items to the list of items in §See also section of Template:Lang-x/doc; Evaluates single positional parameter which is a comma-separated list of items including list markup. {{#invoke:Lang/documentor tool|see_also|*{{tl|Lang-tt-Cyrl}}, *{{tl|Lang-tt-Latn}}, *{{tl|Lang-tt-Arab}}}} ]] local function see_also (frame) if nil == frame.args[1] or '' == frame.args[1] then -- if empty, ... return -- ... return nothing end return frame:preprocess (frame.args[1]:gsub ('%s*,%s', '\n')) -- preprocess so any templates are rendered before saving and done end --[[ -------------------------< E X P O R T E D _ F U N C T I O N S > ----------------------------------------- ]] return { lang_xx_settings = lang_xx_settings, uses_module = uses_module, see_also = see_also, non_english_language_text_category = non_english_language_text_category, non_english_language_sources_category = non_english_language_sources_category, non_english_language_cs1_sources_category = non_english_language_cs1_sources_category, private_tags = private_tags, -- Module:Lang testcases testcases_category_from_tag = testcases_category_from_tag, testcases_name_from_tag = testcases_name_from_tag, testcases_tag_from_name = testcases_tag_from_name, -- Module:ISO 639 name testcases testcases_iso_code_to_name = testcases_iso_code_to_name, testcases_iso_name_to_code = testcases_iso_name_to_code, } ds27u7na3alrbanii9xpibt0ey76blc Templat:Possibly empty category 10 6661 19257 2026-06-09T13:33:26Z Song GK 9 Melencong ke [[Templat:Kategori engka puang]] 19257 wikitext text/x-wiki #REDIRECT [[Templat:Kategori engka puang]] dlpsvqw0hq5uo137hw8r43rg9kfmxsp Kategori:Artikel enggau sumber ukai jaku Iban 14 6662 19258 2026-06-09T13:37:18Z Song GK 9 Mencipta laman baru dengan kandungan '{{Tracking category}} {{Container category}} [[Kategori:Artikel ti ngena templat jaku]]' 19258 wikitext text/x-wiki {{Tracking category}} {{Container category}} [[Kategori:Artikel ti ngena templat jaku]] erx8qsfa84dqzdpksh162a2cfcwhsr7 Opis Kereja Raya Malaysia 0 6663 19259 2026-06-09T15:13:05Z Song GK 9 Digaga enggau chara nyalin lambar " [[:ms:Special:Redirect/revision/6641141|Jabatan Kerja Raya Malaysia]] " 19259 wikitext text/x-wiki {{Infobox government agency|agency_name=Opis Kereja Raya Malaysia|native_name={{lang|ms|Jabatan Kerja Raya Malaysia}}|logo=JKR Malaysia logo.png|logo_width=100px|logo_caption=|seal=Coat of arms of Malaysia.svg|seal_width=100px|seal_caption=|formed={{start date and age|1872}}|preceding1=|dissolved=|superseding=|jurisdiction=|headquarters=Ibu Pejabat JKR Malaysia, Jalan Sultan Salahuddin 50480 Kuala Lumpur|employees=|budget=|chief1_name=Datuk Wira Ir. Roslan bin Ismail|chief1_position=Ketuai Pengarah|agency_type=Perintah|parent_agency=[[Opis Menteri Kereja Raya Malaysia]]|child1_agency=|website={{url|https://www.jkr.gov.my/}}|footnotes=}} '''Opis Kereja Raya Malaysia''' ( [[Urup Jawi|skrip Jawi]] : جابتن كرجا راي مليسيا; pandak: '''JKR''' ) nya siti ari opis perintah [[Malaysia]] ti megai tanggung pengawa ngaga sereta ngintu infrastruktur mensia mayuh di Malaysia baka jalai alun perintah besai enggau nengeri, begunan perintah, kuasa karan, ai enggau mayuh agi. Ejensi tu bepalan ba baruh Opis Menteri Kereja Raya Malaysia.<ref>{{Cite web|url=https://www.jkr.gov.my/en/page/kpkr-history-0|title=Current Events 'Public Works Department' Established|last=|first=|date=|website=|archive-url=https://web.archive.org/web/20190221224227/https://www.jkr.gov.my/en/page/kpkr-history-0|archive-date=2019-02-21|access-date=|url-status=dead}}</ref> [[Fail:JKRHQKL.jpg|thumb|Indu Opis JKR di Kuala Lumpur.]] == Kereban sanding == == Laman web ke bukai == * [http://www.jkr.gov.my Laman web rasmi] Diarkibkan ezj4qd5qpv5qljkox656x6hjhubwlp7 19260 19259 2026-06-09T15:13:36Z Song GK 9 /* Kereban sanding */ 19260 wikitext text/x-wiki {{Infobox government agency|agency_name=Opis Kereja Raya Malaysia|native_name={{lang|ms|Jabatan Kerja Raya Malaysia}}|logo=JKR Malaysia logo.png|logo_width=100px|logo_caption=|seal=Coat of arms of Malaysia.svg|seal_width=100px|seal_caption=|formed={{start date and age|1872}}|preceding1=|dissolved=|superseding=|jurisdiction=|headquarters=Ibu Pejabat JKR Malaysia, Jalan Sultan Salahuddin 50480 Kuala Lumpur|employees=|budget=|chief1_name=Datuk Wira Ir. Roslan bin Ismail|chief1_position=Ketuai Pengarah|agency_type=Perintah|parent_agency=[[Opis Menteri Kereja Raya Malaysia]]|child1_agency=|website={{url|https://www.jkr.gov.my/}}|footnotes=}} '''Opis Kereja Raya Malaysia''' ( [[Urup Jawi|skrip Jawi]] : جابتن كرجا راي مليسيا; pandak: '''JKR''' ) nya siti ari opis perintah [[Malaysia]] ti megai tanggung pengawa ngaga sereta ngintu infrastruktur mensia mayuh di Malaysia baka jalai alun perintah besai enggau nengeri, begunan perintah, kuasa karan, ai enggau mayuh agi. Ejensi tu bepalan ba baruh Opis Menteri Kereja Raya Malaysia.<ref>{{Cite web|url=https://www.jkr.gov.my/en/page/kpkr-history-0|title=Current Events 'Public Works Department' Established|last=|first=|date=|website=|archive-url=https://web.archive.org/web/20190221224227/https://www.jkr.gov.my/en/page/kpkr-history-0|archive-date=2019-02-21|access-date=|url-status=dead}}</ref> [[Fail:JKRHQKL.jpg|thumb|Indu Opis JKR di Kuala Lumpur.]] == Kereban sanding == {{reflist}} == Laman web ke bukai == * [http://www.jkr.gov.my Laman web rasmi] Diarkibkan objni63ue4jfa6udlypd10nk5crqcln Saizeriya 0 6664 19261 2026-06-10T00:28:18Z Song GK 9 Digaga enggau chara nyalin lambar " [[:en:Special:Redirect/revision/1346523618|Saizeriya]] " 19261 wikitext text/x-wiki {{Infobox company | name = Saizeriya Co., Ltd. <br /> 株式会社サイゼリヤ | logo = | image = File:Saizeriya-OSU301.jpg | image_size = 300 | image_caption = Siti restoran Saizeriya di [[Nagoya]], [[Jipun]] | type = [[Kabushiki gaisha|Kompeni rama]] | traded_as = {{tyo|7581}} | industry = Restoran | founded = [[Yoshikawa, Saitama]], Jipun ({{Start date and age|1973|5|1}}) | hq_location_city = 〒 342-0008 No. 5, No. 2 Asahi, Nengeri Yoshikawa, Prefektur Saitama | hq_location_country = Jipun | area_served = Jipun, Singapura, Taiwan, Hong Kong, Tanah Besai China, Malaysia | key_people = {{nihongo|Yasuhiko Shōgaki|正垣泰彦}} (Direktor eksekutif) | services = Pemakai Itali gaya Jipun | revenue = ¥ 82,700,000,000 [[Yen Jipun|JPY]] | assets = ¥ 61,000,000,000 [[Yen Jipun|JPY]] | num_employees = 1,454 | website = {{url|www.saizeriya.co.jp}} Jipun, {{in lang|ja}}<br/>{{url|www.saizeriya.com.sg}} Singapura, {{in lang|en}} }} '''Saizeriya''' (サイゼリヤ) nya rengkayan restoran ''[[yōshoku]]'' gaya Itali, suah dikedut nyadi "Saize" (サイゼ). Tu diatur kompeni Saizeriya Co. (株式会社サイゼリヤ, Kabushiki-gaisha Saizeriya). Indu opis iya bepalan ba [[Yoshikawa, Saitama]].<ref>{{Cite web|url=https://www.saizeriya.co.jp/corporate/information/outline/|title=企業情報|publisher=Saizeriya|access-date=2021-05-27|quote=本社 〒342-0008 埼玉県吉川市旭2番地5}}</ref> Kelimpah ari Jopun, restoran tu mega bisi ba menua China, Hong Kong, Taiwan, Singapura, sereta Malaysia lalu bisi kilang ba [[Melton, Victoria]], Australia. == Sejarah == [[Fail:Saizeriya_Yoshikawa_factory.JPG|kanan|thumb|Indu opis Saizeriya, iya nya kilang Yoshikawa]] Presiden kompeni nya ke diatu, Yasuhiko Shōgaki, kala gawa ba sebengkah restoran barat di [[Ichikawa, Chiba]] ke dikumbai Saizeriya lebuh iya benung besekula ba [[Universiti Sains Tokyo]]. Menijar maya nya ngelala pengelandik iya, lalu lebuh Shōgaki nyadi senior ba sekula, iya bempu restoran nya. Pemakai Itali majak popular maya nya, nya alai Shōgaki nukar restoran nya ngagai pemakai Itali - tang pelanggan badu agi datai. Shōgaki lalu ngurangka rega 70%, lalu restoran nya bejalai enggau manah nyentukka baris berengkah ayan, lalu iya patut muka kedai bukai.<ref>「がっちりマンデー!!」(TBS系列)2008年9月14日放送分</ref> Kena bulan Me 1973, Shōgaki numbuhka sebuah [[kabushiki gaisha]] ke dikumbai Maria-nu di Ichikawa. Kompeni nya udah nya berengkah ngerembai nyadi rentayan restoran. Indu opis nya terus ba prefektur Chiba. Dalam taun 1987, kompeni nya nukar nama ngagai {{nihongo|Maria-no|マリアーノ}}. Dalam taun 1992, kompeni nya sekali agi nukar nama ngagai Saizeriya.<ref name="name-change2">{{in lang|ja}}Name changed to [https://www.saizeriya.co.jp/corporate/information/history/ (株)サイゼリヤ、ホーム > 企業情報 > 沿革:創業〜1999年] {{Webarchive|url=https://web.archive.org/web/20251123130215/https://www.saizeriya.co.jp/corporate/information/history/|date=2025-11-23}}</ref> [[Fail:Saizeriya_Milano_style_Doria_-_1.jpg|thumb|[[Doria (pemakai)|Doria]] Saizeriya "gaya Milano"]] [[Fail:SAIZERIYA_PRODUCTS_IN_CHINA_(36).jpg|thumb|Piring dagin ari endur Saizeriya di Shenzhen]] Dalam bulan Oktober 2006, bisi dipadahka kedai Saizeriya udah ngereja pengawa ti pemadu manah dalam kandang 8 taun. Naka bulan Ogos taun nya, asil jual niki 3%. Penyampau pelanggan niki 2.1%, lalu pukul rata penyampau belanja ke siku pelanggan udah niki 0.8%. Kompeni nya ulih nampung rega nambahka kedai iya, kelimpah ari mega ngangkatka kualiti menu sereta nyapai asil ke manah agi seraya mega nambahka pelanggan pangkalan enggau penyampau ke dijual.<ref>サイゼリヤ、1000店へ足場固め‐既存店、前期8年ぶり増収 - 日経流通新聞(2006年10月25日朝刊)</ref> == Galeri == <gallery mode="packed" widths="160px" heights="160px"> Fail:Saizeriya-Matsuoka-Building-B1F.jpg|alt=In Nagoya, Japan| Ba [[Nagoya]], [[Jipun]] Fail:Saizeriya_Foleo_Osaka_Dome_City.jpg|alt=In Osaka, Japan| Ba [[Osaka]], Jipun . Fail:A_SAIZERIYA_RESTAURANT_AT_SHENNAN_MIDDLE_ROAD,_SHENZHEN_(2).jpg|alt=In Shenzhen, China| Ba [[Shenzhen]], [[China]] Fail:Saizeriya_at_Jing_Liang_Plaza,_Tiancun_(20210513191512).jpg|alt=In Beijing, China| Ba [[Beijing]], China </gallery> == Kereban sanding == {{Reflist}} == Bacha ke silik agi == *  {{cite web|url=https://www.japantimes.co.jp/news/2020/08/08/business/corporate-business/japan-saizeriya-restaurant-face-mask/|title=Japan's Saizeriya restaurant 'develops' face mask to wear when eating|agency=[[Kyodo News]]|newspaper=[[The Japan Times]]|date=2020-08-08}} == Laman web == * {{Official website|http://www.saizeriya.co.jp/}} {{in lang|ja}} (Japan) * {{Official website|https://www.saizeriya.com.sg/}} {{in lang|en}} (Singapore) {{Authority control}} l0vvsj51npakxc7memmrf564xs9dyx8 Kategori:Artikel enggau sumber jaku Jipun (ja) 14 6665 19262 2026-06-10T00:29:50Z Song GK 9 Mencipta laman baru dengan kandungan '{{Kategori sumber ukai jaku Iban}}' 19262 wikitext text/x-wiki {{Kategori sumber ukai jaku Iban}} 6076wlzprhayhewk04jp9gd7ca0q8qv Templat:Container category 10 6666 19263 2026-06-10T07:12:52Z Song GK 9 Melencong ke [[Templat:Kategori bungkan]] 19263 wikitext text/x-wiki #REDIRECT [[Templat:Kategori bungkan]] bzwcymeefm9zxrj4gb9u83dkqxmf373 Templat:Kategori bungkan 10 6667 19264 2026-06-10T07:14:18Z Song GK 9 Mencipta laman baru dengan kandungan '{{Cmbox | type = notice | text = Tu '''[[:Kategori:Kategori bungkan|kategori bungkan]]'''. Ketegal fungsyen iya, tu patut ''mina'' ngundan subkategori. }}<includeonly>{{#ifeq: {{lc:{{{nocat|false}}}}}|false|{{Single namespace|category|{{{category|[[Kategori:Kategori bungkan]]}}}}}|<!-- Category suppressed -->}}</includeonly><noinclude> {{Documentation}} <!-- Please add metadata to the <includeonly> section at the bottom of the /doc sub-page. --> </noin...' 19264 wikitext text/x-wiki {{Cmbox | type = notice | text = Tu '''[[:Kategori:Kategori bungkan|kategori bungkan]]'''. Ketegal fungsyen iya, tu patut ''mina'' ngundan subkategori. }}<includeonly>{{#ifeq: {{lc:{{{nocat|false}}}}}|false|{{Single namespace|category|{{{category|[[Kategori:Kategori bungkan]]}}}}}|<!-- Category suppressed -->}}</includeonly><noinclude> {{Documentation}} <!-- Please add metadata to the <includeonly> section at the bottom of the /doc sub-page. --> </noinclude> 5gm91s6spd693skt78ehjj7p3x0e7jj Kategori:Artikel enggau sumber jaku Inggeris (en) 14 6668 19265 2026-06-10T07:15:23Z Song GK 9 Mencipta laman baru dengan kandungan '{{Kategori sumber ukai jaku Iban}}' 19265 wikitext text/x-wiki {{Kategori sumber ukai jaku Iban}} 6076wlzprhayhewk04jp9gd7ca0q8qv Kategori:Artikel enggau sumber jaku Melayu (ms) 14 6669 19266 2026-06-10T07:16:31Z Song GK 9 Mencipta laman baru dengan kandungan '{{Kategori sumber ukai jaku Iban}}' 19266 wikitext text/x-wiki {{Kategori sumber ukai jaku Iban}} 6076wlzprhayhewk04jp9gd7ca0q8qv Johan Ghazali 0 6670 19270 2026-06-10T07:41:12Z Song GK 9 Mencipta laman baru dengan kandungan '{{Infobox martial artist | name = Johan Ghazali <br><small>[[Derajat Utama Pemadu Mulia Bintang Sarawak|ABS]]</small> | image = | caption = | birth_name = Muhammad Johan Ghazali bin Zulfikar | birth_date = {{Birth date and age|2006|11|14|mf=y}} | birth_place = [[Kuala Lumpur]], [[Malaysia]] | death_date = | death_place = | height = 170 cm | weight_class =[[Kelas terebai (MMA)|Kelas terebai (135 lbs)]] ([[ONE Championship|ONE]]) | reach = 165 cm |...' 19270 wikitext text/x-wiki {{Infobox martial artist | name = Johan Ghazali <br><small>[[Derajat Utama Pemadu Mulia Bintang Sarawak|ABS]]</small> | image = | caption = | birth_name = Muhammad Johan Ghazali bin Zulfikar | birth_date = {{Birth date and age|2006|11|14|mf=y}} | birth_place = [[Kuala Lumpur]], [[Malaysia]] | death_date = | death_place = | height = 170 cm | weight_class =[[Kelas terebai (MMA)|Kelas terebai (135 lbs)]] ([[ONE Championship|ONE]]) | reach = 165 cm | style = [[Muay Thai]] | team =*Rentap Muaythai Gym (2016–''diatu'') | years_active = {{circa}} 2016–''diatu'' | kickbox_win = 7 | kickbox_kowin =6 | kickbox_loss = 3 | kickbox_koloss = | kickbox_draw = 0 | kickbox_nc = | other = | occupation = | spouse = | relatives = *General Tan Sri [[Mohd Ghazali Che Mat]] (aki) *SAC Zulfikar Mohd Ghazali (apai) *Jennana Lynn Johnson (indai) *Muhammad Elias Ghazali (abang) *Muhammad Mikael "Miki" Ghazali (madi laki) *Emylia Lynn "Mia" Ghazali (madi indu) | students = | university = | url = | boxrec = |nickname=Jojo Ghazali}} '''Muhammad Johan Ghazali bin Zulfikar''' (ada kena 14 November 2006), dikelala sechara profesional enggau nama '''Jojo Ghazali''' nya siku petinju [[Muay Thai]] Malaysia.<ref>{{cite web |title=Jojo – Biodata Johan Ghazali, Atlet Muay Thai Malaysia |url=https://ecentral.my/jojo/ |access-date=12 August 2025 |publisher=E-Central MY}}</ref> == Pengidup kediri == Jojo ada kena 14 November 2006 ba [[Kuala Lumpur]]. Ba taun 2015, iya mindah ngagai [[Kuching]], Sarawak. Iya anak kedua ari empat iku menyadi. Jojo nya anak SAC Zulfikar Ghazali, pegawai renggat tinggi dalam [[Polis Diraja Malaysia]] sereta uchu niang Jeneral [[Mohd Ghazali Che Mat]] ti nyadi [[Pengelima Raban Soldadu (Malaysia)|Pengelima Raban Soldadu]] ke-8. Iya bisi peturun Amerika nengah indai iya.<ref name=":2">{{cite web |last=Furness |first=Jay |date=7 December 2023 |title=Origins Of A Prodigy: Get To Know Teen Muay Thai Sensation Johan Ghazali Ahead Of His U.S. Primetime Debut |url=https://www.onefc.com/features/origins-of-a-prodigy-get-to-know-teen-muay-thai-sensation-johan-ghazali-ahead-of-his-u-s-primetime-debut/ |website=www.onefc.com}}</ref><ref>{{cite web |last=Coate |first=Ben |date=15 May 2024 |title=‘Warrior Blood Is Definitely In Me’ – Johan Ghazali’s Incredible Family History Of Fighters |url=https://www.onefc.com/features/warrior-blood-is-definitely-in-me-johan-ghazalis-incredible-family-history-of-fighters/#:~:text=Ghazali's%20warrior%20bloodline%20runs%20deeper,decorated%20figure%20in%20the%20country. |website=www.onefc.com}}</ref> Iya bulih pelajar tumu iya ba Sekula Sekondari St. Thomas, [[Kuching]], [[Sarawak]]. Jojo berengkah regas nyeretai [[Muay Thai]] ba umur 10, diiri enggau inspirasyen ari apai indai iya, ke sama-sama pengamal Muay Thai. Ke berat, semua menyadi iya mega pengamal Muay Thai sereta ngarika [[Malaysia]] ba mayuh bengkah pekit entarabansa.<ref name=":2" /> Kena 11 Oktober 2025, Jojo diberi Kaban [[Derajat Utama Pemadu Mulia Bintang Sarawak]] (A.B.S.) ari Gabenor Sarawak, [[Wan Junaidi Tuanku Jaafar]] ketegal pemujur enggau pemeri iya ke nyulut ngagai lumba enggau main tu.<ref name=":3" /> == Pengawa == Ba taun 2022, Jojo nyapai pemujur ke nyelai lebuh menang gelar kategori umur 14–15 taun (baruh 60 kg) ba Kejohanan Muay Thai Belia Dunia IFMA 2022. Ba renggat kepenudi, ke diatur ba Piramid Sunway di [[Petaling Jaya]] kena Hari Enam tu tadi, iya ngalahka pemekit Rusia Rustam Yunusob enggau skor keseluruhan 20-18.<ref name="marriage">{{cite web |last=Umpang |first=Matthew |date=22 August 2022 |title=Sarawak’s Johan wins 2022 IFMA World Youth Muay Thai Championship title |url=https://www.theborneopost.com/2022/08/22/sarawaks-johan-wins-2022-ifma-world-youth-muay-thai-championship-title/#:~:text=Sarawak's%20Johan%20wins%202022%20IFMA%20World%20Youth%20Muay%20Thai%20Championship%20title,-0&text=KUCHING%20(Aug%2022)%3A%20Sarawak's,World%20Youth%20Muay%20Thai%20Championship. |access-date=12 August 2025 |publisher=[[Borneo Post]]}}</ref> Ba bulan September, Jojo bepekit dalam kategori 60 kg laki ba [[Lumba Malaysia 2022]] ngelaban Wan Muhd Sabri Wan Zuki ari Melaka, nguasa renggat pemuka. Ba renggat kedua, Johan bulih pemenang enggau ‘knockout’, ngujungka main nya enggau skor 10-9 ke nyukung iya lalu ngujungka iya bulih midul emas.<ref name="ONE 157">{{cite web |last=Tieng Hee |first=Ting |date=21 September 2022 |title=Sukma: Sarawakian brothers strike double gold in Muay Thai |url=https://www.theborneopost.com/2022/09/21/sukma-sarawakian-brothers-strike-double-gold-in-muay-thai/ |access-date=12 August 2025 |website=[[Borneo Post]]}}</ref> '''Championsyip ONE''' Jojo ngaga pengawa promosyen keterubah iya ba [[Championsyip ONE]] ba pun bulan Februari 2023, ngalahka Padesuk Fairtex nengah chara knockout dalam timpuh semina 16 saat ngulihka pemenang keterubah iya ba [[Championsyip ONE]]. Jojo mega bulih [[Ringgit Malaysia|RM]] 46,000 ungkup bonus prestasi.<ref name=":0">{{cite web |last1= |first1= |date=26 February 2023 |title=M'sian teenage Muay Thai exponent makes stunning ONE Championship debut in Bangkok |url=https://www.bernama.com/en/news.php?id=2168020 |access-date=12 August 2025 |website=[[Bernama]]}}</ref> Kena 26 Me 2023, Jojo bepekit enggau bintang tinju Thailand Tai Sor Jor Piek Uthai dalam [[ONE Friday Fights 18]], ngulihka pemenang enggau knockout ti ngalit ati.<ref name=":1">{{cite web |first= |date=29 May 2023 |title=Malaysian teenage Muay Thai fighter dreams of claiming contract, ONE Championship belt |url=https://www.nst.com.my/sports/others/2023/05/914489/malaysian-teenage-muay-thai-fighter-dreams-claiming-contract-one |access-date=12 August 2025 |website=[[New Straits Times]]}}</ref> The win repeated the success of his debut match. In addition Jojo secured a contract valued $100,000 with ONE Championship and returned home with RM 46,000 for his second knockout in a row.<ref name=":1" /> Kena 9 Disember 2023, iya ngerembaika rikut pengawa iya ba Championsyip ONE enggau mark 5-0, pengudah ngalahka Edgar Tarbares dalam timpuh semina 36 saat. Jojo enda ulih ngetanka kesemua duit perais iya pengudah enda mujur ngaga pemerat ti dipinta. Ketegal nya, iya diwajibka ngelepaska 50 peratus duit dompet iya ngagai pangan iya.<ref>{{cite web |last=Siasat |first=JM |date=9 December 2023 |title=Teen sensation Johan Ghazali fires out 36-second win at ONE Fight Night 17, wants next bout to ‘make some noise’ |url=https://www.scmp.com/sport/martial-arts/muay-thai/article/3244500/teen-sensation-johan-ghazali-fires-out-36-second-win-one-fight-night-17-wants-next-bout-make-some |website=www.scmp.com}}</ref> ==Basa== *{{Flag|Sarawak}} **[[File:MY-SAR Order of the Star of Sarawak - 2 ribbon PNBS -JBS-PBS-ABS-BBS.svg|50px]] Kaban [[Derajat Utama Mulia Bintang Sarawak]] (ABS) (2025)<ref name=":3">{{cite news|url=https://www.sarawaktribune.com/from-mats-to-glory-jojo-honoured-with-ahli-bintang-sarawak-award/|title=From Mats to Glory: Jojo honoured with Ahli Bintang Sarawak award|date=15 October 2025|website=www.sarawaktribune.com}}</ref><ref>[https://suarasarawak.my/senarai-penerima-darjah-kebesaran-sempena-hari-jadi-tyt-sarawak/ Senarai Penerima Darjah Kebesaran Sempena Hari Jadi TYT Sarawak]</ref> ==Kereban sanding== {{reflist}} ==Laman web ke bukai== * [https://www.onefc.com/athletes/johan-ghazali/ Johan Ghazali] ba [[ONE Championship]] * {{Instagram|johanghazali_}} [[Kategori:Pengada 2006]] [[Kategori:Orang idup]] ou6qvb69ojcoz20bj9sy08e3w4bp6ia Templat:Infobox martial artist 10 6671 19271 2026-06-10T07:46:00Z Song GK 9 Mencipta laman baru dengan kandungan '{{#invoke:Infobox|infoboxTemplate | child = {{if empty|{{{child|}}}|{{{embed|}}}}} | subbox = {{{subbox|}}} | bodyclass = ib-martial-artist vcard | headerstyle = background-color:{{if empty|{{{color|}}}|{{{colour|}}}|#efefef}}; color:inherit; | above = {{#if:{{{child|}}}{{{embed|}}}{{{subbox|}}}||<includeonly><span class="fn">{{if empty|{{{name|}}}|{{PAGENAMEBASE}}}}</span></includeonly>}} | abovestyle = background-color:{{if empty|{{{color|}}...' 19271 wikitext text/x-wiki {{#invoke:Infobox|infoboxTemplate | child = {{if empty|{{{child|}}}|{{{embed|}}}}} | subbox = {{{subbox|}}} | bodyclass = ib-martial-artist vcard | headerstyle = background-color:{{if empty|{{{color|}}}|{{{colour|}}}|#efefef}}; color:inherit; | above = {{#if:{{{child|}}}{{{embed|}}}{{{subbox|}}}||<includeonly><span class="fn">{{if empty|{{{name|}}}|{{PAGENAMEBASE}}}}</span></includeonly>}} | abovestyle = background-color:{{if empty|{{{color|}}}|{{{colour|}}}|#efefef}}; color:inherit; | autoheaders = yes | title = {{#ifeq:{{{child|}}}{{{embed|}}}{{{subbox|}}}|yes|'''Pengawa seni ngetanka diri'''}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{#if:{{{child|}}}{{{embed|}}}{{{subbox|}}}||{{#invoke:WikidataIB |getValue|rank=best|P18 |name=image |qid={{{qid|}}} |suppressfields={{{suppressfields|}}} |fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}} |onlysourced={{if empty|{{{onlysourced|}}}|no}} |noicon=yes |maxvals=1 |{{{image|}}}}}|size={{if empty|{{{image_size|}}}|{{{imagesize|}}}}}|sizedefault=frameless|upright=1|alt={{{alt|}}}|suppressplaceholder=yes}}}} | caption = {{if empty|{{{caption|}}}|{{#invoke:WikidataIB|getValue|P18|rank=best|qual=P2096|qualsonly=y|lang=en|name=caption|maxvals=1|fetchwikidata={{{fetchwikidata|}}}|onlysourced={{if empty|{{{onlysourced|}}}|no}}|{{{caption|}}}}}}} | label1 = Ada | data1 = {{br separated entries |1={{#if:{{{birth_name|}}} {{{birthname|}}} |<span class="nickname">{{if empty|{{{birth_name|}}}|{{{birthname|}}}}}</span>}} |2={{#invoke:person date|birth}} |3={{#if:{{{birth_place|}}}|<span class="birthplace">{{{birth_place|}}}</span>}} }} | label2 = Mati | data2 = {{br separated entries |1={{#invoke:person date|death}} |2={{#if:{{{death_place|}}}|<span class="deathplace">{{{death_place|}}}</span>}} |3={{if empty|{{{death_cause|}}}|{{{deathcause|}}}}} }} | label3 = Nama asal | data3 = {{#if:{{{native_name|}}}|{{#if:{{{native_name_lang|}}}|<span class="nickname" lang="{{{native_name_lang}}}">}}{{{native_name}}}{{#if:{{{native_name_lang|}}}|</span> }} }} | label4 = Nama ke bukai | data4 = {{{other_names|}}} | class4 = nickname | label5 = Nama gela | data5 = {{{nickname|}}} | class5 = nickname | label7 = Peranak | data7 = {{{nationality|}}} | label8 = Citizenship | data8 = {{{citizenship|}}} | label9 = Peninggi | data9 = {{#if:{{{height_ft|}}} |{{convert|{{{height_ft}}}|ft|{{if empty|{{{height_in|}}}|0}}|in|cm|0|abbr=on}}{{{height_footnote|}}} |{{#if:{{{height_cm|}}} |{{convert|{{{height_cm}}}|cm|ftin|0|abbr=on}}{{{height_footnote|}}} |{{#if:{{{height_m|}}} |{{convert|{{{height_m}}}|m|ftin|0|abbr=on}}{{{height_footnote|}}} |{{#if:{{{height|}}}|{{Infobox person/height|{{{height}}}}}}}{{{height_footnote|}}} }} }} }} | label10 = Pemerat | data10 = {{#if:{{{weight_lb|}}}{{{weightlb|}}} |{{convert|{{if empty|{{{weight_lb|}}}|{{{weightlb}}}}}|lb|kg stlb|0|abbr=on}}{{{weight_footnote|}}} |{{#if:{{{weight_kg|}}}{{{weightkg|}}} |{{convert|{{if empty|{{{weight_kg|}}}|{{{weightkg}}}}}|kg|lb stlb|0|abbr=on}}{{{weight_footnote|}}} |{{#if:{{{weight|}}}|{{Infobox person/weight|kg-stlb=y|lb-stlb=y|{{{weight}}}}}}}{{{weight_footnote|}}} }} }} | label11 = Bagi | data11 = {{if empty|{{{weight_class|}}}|{{{weightclass|}}}}} | label12 = Reach | data12 = {{#if:{{{reach_in|}}}{{{reachin|}}} |{{convert|{{if empty|{{{reach_in|}}}|{{{reachin}}}}}|in|cm|0|abbr=on}}{{{reach_footnote|}}} |{{#if:{{{reach_cm|}}}{{{reachcm|}}} |{{convert|{{if empty|{{{reach_cm|}}}|{{{reachcm}}}}}|cm|in|1|abbr=on}}{{{reach_footnote|}}} |{{#if:{{{reach|}}}|{{Infobox person/length|{{{reach}}}}}}}{{{reach_footnote|}}} }} }} | label13 = Gaya | data13 = {{br separated entries||{{{martial_art|}}}|{{{style|}}}}} | label14 = Stance | data14 = {{#if:{{{stance|}}}|{{#switch:{{lc:{{{stance}}}}} |r|right|orthodox = [[Orthodox stance|Orthodox]] |l|left|southpaw = [[Southpaw stance|Southpaw]] | = <span style="color:red;">Unknown Value: {{{stance}}}</span> }} }} | label15 = Fighting out of | data15 = {{if empty|{{{fighting_out_of|}}}|{{{fightingoutof|}}}}} | label16 = Tim | data16 = {{{team|}}} | class16 = org | label17 = Pengajar | data17 = {{{teacher|}}} | label18 = Pematih | data18 = {{{trainer|}}} | class18 = agent | label19 = Rank | data19 = {{{rank|}}} | label20 = Wrestling | data20 = {{{wrestling|}}} | label21 = Taun aktif | data21 = {{if empty|{{{years_active|}}}|{{{yearsactive|}}}}} | data22 = {{Infobox martial artist/record |color = {{if empty|{{{color|}}}|{{{colour|}}}|#efefef}} |type = [[Professional boxing]] record |win = {{if empty|{{{box_win|}}}|{{{boxingwins|}}}}} |kowin = {{if empty|{{{box_kowin|}}}|{{{boxingkowins|}}}}} |loss = {{if empty|{{{box_loss|}}}|{{{boxinglosses|}}}}} |koloss = {{if empty|{{{box_koloss|}}}|{{{boxingkolosses|}}}}} |draw = {{if empty|{{{box_draw|}}}|{{{boxingdraws|}}}}} |nc = {{if empty|{{{box_nc|}}}|{{{boxingncs|}}}}} |win_ref = {{{box_win_ref|}}} |kowin_ref = {{{box_kowin_ref|}}} |loss_ref = {{{box_loss_ref|}}} |koloss_ref = {{{box_koloss_ref|}}} |draw_ref = {{{box_draw_ref|}}} |nc_ref = {{{box_nc_ref|}}} }} | data23 = {{Infobox martial artist/record |color = {{if empty|{{{color|}}}|{{{colour|}}}|#efefef}} |type = [[Kickboxing]] record |win = {{if empty|{{{kickbox_win|}}}|{{{kickboxingwins|}}}}} |kowin = {{if empty|{{{kickbox_kowin|}}}|{{{kickboxingkowins|}}}}} |loss = {{if empty|{{{kickbox_loss|}}}|{{{kickboxinglosses|}}}}} |koloss = {{if empty|{{{kickbox_koloss|}}}|{{{kickboxingkolosses|}}}}} |draw = {{if empty|{{{kickbox_draw|}}}|{{{kickboxingdraws|}}}}} |nc = {{if empty|{{{kickbox_nc|}}}|{{{kickboxingncs|}}}}} }} | data24 = {{#ifexpr:0{{{mma_win|{{{mmawins|{{#expr:0{{if empty|{{{mma_kowin|}}}|{{{mmakowins|}}}}} + 0{{if empty|{{{mma_subwin|}}}|{{{mmasubwins|}}}}} + 0{{if empty|{{{mma_decwin|}}}|{{{mmadecwins|}}}}} + 0{{if empty|{{{mma_otherwin|}}}|{{{mmaotherwins|}}}}} + 0{{if empty|{{{mma_dqwin|}}}|{{{mmadqwins|}}}}}}}}}}}}} + 0{{{mma_loss|{{{mmalosses|{{#expr:0{{if empty|{{{mma_koloss|}}}|{{{mmakolosses|}}}}} + 0{{if empty|{{{mma_subloss|}}}|{{{mmasublosses|}}}}} + 0{{if empty|{{{mma_decloss|}}}|{{{mmadeclosses|}}}}} + 0{{if empty|{{{mma_dqloss|}}}|{{{mmadqlosses|}}}}}}}}}}}}} > 0|{{Infobox martial artist/record |color = {{if empty|{{{color|}}}|{{{colour|}}}|#efefef}} |type = {{#if:{{{mma_label|}}}{{{mmalabel|}}}|{{if empty|{{{mma_label|}}}|{{{mmalabel}}}}}|[[Mixed martial arts]] record}} |win = {{{mma_win|{{{mmawins|{{#expr:0{{if empty|{{{mma_kowin|}}}|{{{mmakowins|}}}}} + 0{{if empty|{{{mma_subwin|}}}|{{{mmasubwins|}}}}} + 0{{if empty|{{{mma_decwin|}}}|{{{mmadecwins|}}}}} + 0{{if empty|{{{mma_otherwin|}}}|{{{mmaotherwins|}}}}} + 0{{if empty|{{{mma_dqwin|}}}|{{{mmadqwins|}}}}}}}}}}}}} |kowin = {{if empty|{{{mma_kowin|}}}|{{{mmakowins|}}}}} |subwin = {{if empty|{{{mma_subwin|}}}|{{{mmasubwins|}}}}} |decwin = {{if empty|{{{mma_decwin|}}}|{{{mmadecwins|}}}}} |dqwin = {{if empty|{{{mma_dqwin|}}}|{{{mmadqwins|}}}}} |otherwin= {{if empty|{{{mma_otherwin|}}}|{{{mmaotherwins|}}}}} |loss = {{{mma_loss|{{{mmalosses|{{#expr:0{{if empty|{{{mma_koloss|}}}|{{{mmakolosses|}}}}} + 0{{if empty|{{{mma_subloss|}}}|{{{mmasublosses|}}}}} + 0{{if empty|{{{mma_decloss|}}}|{{{mmadeclosses|}}}}} + 0{{if empty|{{{mma_otherloss|}}}|{{{mmaotherlosses|}}}}} + 0{{if empty|{{{mma_dqloss|}}}|{{{mmadqlosses|}}}}}}}}}}}}} |koloss = {{if empty|{{{mma_koloss|}}}|{{{mmakolosses|}}}}} |subloss = {{if empty|{{{mma_subloss|}}}|{{{mmasublosses|}}}}} |decloss = {{if empty|{{{mma_decloss|}}}|{{{mmadeclosses|}}}}} |dqloss = {{if empty|{{{mma_dqloss|}}}|{{{mmadqlosses|}}}}} |otherloss={{if empty|{{{mma_otherloss|}}}|{{{mmaotherlosses|}}}}} |draw = {{if empty|{{{mma_draw|}}}|{{{mmadraws|}}}}} |nc = {{if empty|{{{mma_nc|}}}|{{{mmancs|}}}}} }} }} | data25 = {{Infobox martial artist/record |color = {{if empty|{{{color|}}}|{{{colour|}}}|#efefef}} |type = {{#if:{{{am_label|}}}{{{amlabel|}}}|{{if empty|{{{am_label|}}}|{{{amlabel}}}}}|[[Amateur sports|Amateur]] record}} |win = {{if empty|{{{am_win|}}}|{{{amwins|}}}}} |kowin = {{if empty|{{{am_kowin|}}}|{{{amkowins|}}}}} |subwin = {{if empty|{{{am_subwin|}}}|{{{amsubwins|}}}}} |decwin = {{if empty|{{{am_decwin|}}}|{{{amdecwins|}}}}} |loss = {{if empty|{{{am_loss|}}}|{{{amlosses|}}}}} |koloss = {{if empty|{{{am_koloss|}}}|{{{amkolosses|}}}}} |subloss = {{if empty|{{{am_subloss|}}}|{{{amsublosses|}}}}} |decloss = {{if empty|{{{am_decloss|}}}|{{{amdeclosses|}}}}} |draw = {{if empty|{{{am_draw|}}}|{{{amdraws|}}}}} |nc = {{if empty|{{{am_nc|}}}|{{{amncs|}}}}} }} | header26 = Other information | label27 = Pengawa | data27 = {{{occupation|}}} | class27 = role | label28 = Universiti | data28 = {{{university|}}} | label29 = Kaling | data29 = {{{spouse|}}} | label30 = Anak | data30 = {{{children|}}} | label31 = Kaul sebilik tebilang | data31 = {{{relatives|}}} | label32 = Tarak tebilang | data32 = {{{students|}}} | label33 = Notable club{{pluralize from text|{{{club|}}}|plural=s}} | data33 = {{{club|}}} | label34 = Notable school{{pluralize from text|{{{school|}}}|plural=s}} | data34 = {{{school|}}} | label35 = Laman web | data35 = {{if empty|{{{url|}}}|{{{website|}}}}} | data36 = {{#if:{{{boxrec|}}}|[http://boxrec.com/en/boxer/{{{boxrec}}} Boxing record] from [[BoxRec]]}} | data37 = {{#if:{{{sherdog|}}}|[http://www.sherdog.com/fightfinder/fightfinder.asp?fighterID={{{sherdog|}}} Mixed martial arts record] from [[Sherdog]]}} | header38 = _BLANK_ | data39 = {{#if:{{{medaltemplates|}}}|{{Infobox medal templates |medals = {{{medaltemplates|}}} |expand = {{#ifeq:{{lc:{{{show-medals}}}}}|no||yes}} }}}} | data65 = {{if empty|{{{misc|}}}|{{{module|}}}}} | data66 = {{if empty|{{{misc2|}}}|{{{module2|}}}}} | below = {{#if:{{{footnotes|}}}|{{{footnotes}}}}}{{#if:{{{updated|}}}|<div style="margin-top: 1em; color: var(--color-subtle, #54595d)">Last updated on: {{{updated}}}</div>}} }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox martial artist with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox martial artist]] with unknown parameter "_VALUE_"|ignoreblank=y| alt | am_decloss | am_decwin | am_draw | am_koloss | am_kowin | am_label | am_loss | am_nc | am_subloss | am_subwin | am_win | amdeclosses | amdecwins | amdraws | amkolosses | amkowins | amlabel | amlosses | amncs | amsublosses | amsubwins | amwins | birth_date | birth_name | birth_place | birthname | box_draw | box_draw_ref | box_koloss | box_koloss_ref | box_kowin | box_kowin_ref | box_loss | box_loss_ref | box_nc | box_nc_ref | box_win | box_win_ref | boxingdraws | boxingkolosses | boxingkowins | boxinglosses | boxingncs | boxingwins | boxrec | caption | child | children | citizenship | club | color | colour | death_cause | death_date | death_place | deathcause | embed | fetchwikidata | fighting_out_of | fightingoutof | footnotes | height | height_cm | height_footnote | height_ft | height_in | height_m | image | image_size | imagesize | kickbox_draw | kickbox_koloss | kickbox_kowin | kickbox_loss | kickbox_nc | kickbox_win | kickboxingdraws | kickboxingkolosses | kickboxingkowins | kickboxinglosses | kickboxingncs | kickboxingwins | martial_art | medaltemplates | misc | misc2 | mma_decloss | mma_decwin | mma_dqloss | mma_dqwin | mma_draw | mma_koloss | mma_kowin | mma_label | mma_loss | mma_nc | mma_otherloss | mma_otherwin | mma_subloss | mma_subwin | mma_win | mmadeclosses | mmadecwins | mmadqlosses | mmadqwins | mmadraws | mmakolosses | mmakowins | mmalabel | mmalosses | mmancs | mmaotherlosses | mmaotherwins | mmasublosses | mmasubwins | mmawins | module | module2 | name | nationality | native_name | native_name_lang | nickname | occupation | other_names | qid | rank | reach | reach_cm | reach_footnote | reach_in | reachcm | reachin | relatives | school | sherdog | show-medals | spouse | stance | students | style | subbox | suppressfields | teacher | team | trainer | university | updated | url | website | weight | weight_class | weight_footnote | weight_kg | weight_lb | weightclass | weightkg | weightlb | wrestling | years_active | yearsactive }}{{#if: {{{boxrec|}}} | {{Wikidata check|property=P1967 |value={{#invoke:String|replace|source={{{boxrec|}}}|pattern=^0*|plain=false}} |category=Pages using infobox martial artist with boxrec parameter |namespaces=0 |nocatsame=1}} }}{{#if: {{{sherdog|}}} | {{Wikidata check|property=P2818 |value={{{sherdog|}}} |category=Pages using infobox martial artist with sherdog parameter |namespaces=0 |nocatsame=1}} }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox martial artist]] | cat = {{main other|Category:Pages using infobox martial artist with conflicting parameters}} | child; embed | color; colour | image_size; imagesize | birth_name; birthname | death_cause; deathcause | weight_lb; weightlb | weight_kg; weightkg | weight_class; weightclass | reach_in; reachin | reach_cm; reachcm | fighting_out_of; fightingoutof | years_active; yearsactive | box_win; boxingwins | box_kowin; boxingkowins | box_loss; boxinglosses | box_koloss; boxingkolosses | box_draw; boxingdraws | box_nc; boxingncs | kickbox_win; kickboxingwins | kickbox_kowin; kickboxingkowins | kickbox_loss; kickboxinglosses | kickbox_koloss; kickboxingkolosses | kickbox_draw; kickboxingdraws | kickbox_nc; kickboxingncs | mma_kowin; mmakowins | mma_subwin; mmasubwins | mma_decwin; mmadecwins | mma_otherwin; mmaotherwins | mma_dqwin; mmadqwins | mma_koloss; mmakolosses | mma_subloss; mmasublosses | mma_decloss; mmadeclosses | mma_dqloss; mmadqlosses | mma_label; mmalabel | mma_otherloss; mmaotherlosses | mma_draw; mmadraws | mma_nc; mmancs | am_label; amlabel | am_win; amwins | am_kowin; amkowins | am_subwin; amsubwins | am_decwin; amdecwins | am_loss; amlosses | am_koloss; amkolosses | am_subloss; amsublosses | am_decloss; amdeclosses | am_draw; amdraws | am_nc; amncs | url; website | misc; module | misc2; module2 }}<noinclude> {{documentation}}<!-- place categories on /doc sub-page, interwikis in Wikidata --> </noinclude> olhn36eyspic8p85oaq9xizwqbap0oh Templat:Infobox martial artist/record 10 6672 19272 2026-06-10T07:47:27Z Song GK 9 Mencipta laman baru dengan kandungan '{{#if:{{{win|}}}{{{kowin|}}}{{{loss|}}}{{{koloss|}}}{{{draw|}}}{{{nc|}}}<!-- -->|{{Infobox|child=yes | labelstyle = font-weight: normal | headerstyle = background-color:{{{color|{{{colour|#efefef}}}}}}; color:inherit; | header2 = {{{type|}}} | label4 = '''Penyampau''' | data4 = {{#if:{{{win|}}}{{{loss|}}}{{{draw|}}}{{{nc|}}}|{{#expr:{{#if:{{{win|}}}|{{{win}}}|0}} + {{#if:{{{loss|}}}|{{{loss}}}|0}} + {{#if:{{{draw|}}}|{{{draw}}}|0}} + {...' 19272 wikitext text/x-wiki {{#if:{{{win|}}}{{{kowin|}}}{{{loss|}}}{{{koloss|}}}{{{draw|}}}{{{nc|}}}<!-- -->|{{Infobox|child=yes | labelstyle = font-weight: normal | headerstyle = background-color:{{{color|{{{colour|#efefef}}}}}}; color:inherit; | header2 = {{{type|}}} | label4 = '''Penyampau''' | data4 = {{#if:{{{win|}}}{{{loss|}}}{{{draw|}}}{{{nc|}}}|{{#expr:{{#if:{{{win|}}}|{{{win}}}|0}} + {{#if:{{{loss|}}}|{{{loss}}}|0}} + {{#if:{{{draw|}}}|{{{draw}}}|0}} + {{#if:{{{nc|}}}|{{{nc}}}|0}}}}}} | label5 = '''Menang''' | data5 = {{#if:{{{win|}}}<!-- -->|{{{win}}}{{{win_ref|}}}<!-- -->|{{#if:{{{kowin|}}}{{{subwin|}}}{{{decwin|}}}{{{dqwin|}}}|&nbsp;<!-- -->}}<!-- -->}} | label6 = By&nbsp;knockout | data6 = {{{kowin|}}}{{{kowin_ref|}}} | label7 = By&nbsp;submission | data7 = {{{subwin|}}} | label8 = By&nbsp;decision | data8 = {{{decwin|}}} | label9 = By&nbsp;disqualification | data9 = {{{dqwin|}}} | label10 = Unknown | data10 = {{{otherwin|}}} | label11 = '''Alah''' | data11 = {{#if:{{{loss|}}}<!-- -->|{{{loss}}}{{{loss_ref|}}}<!-- -->|{{#if:{{{koloss|}}}{{{subloss|}}}{{{decloss|}}}{{{dqloss|}}}|&nbsp;<!-- -->}}<!-- -->}} | label12 = By&nbsp;knockout | data12 = {{{koloss|}}}{{{koloss_ref|}}} | label13 = By&nbsp;submission | data13 = {{{subloss|}}} | label14 = By&nbsp;decision | data14 = {{{decloss|}}} | label15 = By&nbsp;disqualification | data15 = {{{dqloss|}}} | label16 = Unknown | data16 = {{{otherloss|}}} | label17 = '''Bedu''' | data17 = {{{draw|}}}{{{draw_ref|}}} | label18 = '''No&nbsp;contests''' | data18 = {{{nc|}}}{{{nc_ref|}}} }}<!-- end if -->}}<noinclude> {{documentation|content = This subtemplate is used to create the record subsections of {{tl|Infobox martial artist}}. It should not be used directly. }}</noinclude> an3gg1sqvr78bopi9lw2fv80ogfny58 Modul:Person date 828 6673 19273 2026-06-10T07:49:32Z Song GK 9 Mencipta laman baru dengan kandungan 'require("strict") local p = {} local TEMPLATES = { birth_date = "Hari bulan pengada", birth_date_and_age = "Hari bulan pengada enggau umur", birth_year = "Taun pengada", birth_year_and_age = "Taun pengada enggau umur", death_date = "Hari bulan pemati", death_date_text = "Teks hari bulan pemati", death_date_and_age = "Hari bulan pemati enggau umur", death_year = "Taun pemati", death_year_and_age = "Taun pemati enggau umur", } local invalid_da...' 19273 Scribunto text/plain require("strict") local p = {} local TEMPLATES = { birth_date = "Hari bulan pengada", birth_date_and_age = "Hari bulan pengada enggau umur", birth_year = "Taun pengada", birth_year_and_age = "Taun pengada enggau umur", death_date = "Hari bulan pemati", death_date_text = "Teks hari bulan pemati", death_date_and_age = "Hari bulan pemati enggau umur", death_year = "Taun pemati", death_year_and_age = "Taun pemati enggau umur", } local invalid_date_category = '' local tracking_category = '' local Date = require('Module:Date')._Date local getArgs = require('Module:Arguments').getArgs if mw.title.getCurrentTitle():inNamespaces(0, 828, 829) then -- Category only in namespaces: 0=article, 828=module & 829=module talk (last 2 needed for testcases) tracking_category = '[[Category:Pages where birth or death is being automatically determined]]' invalid_date_category = '[[Category:Pages with invalid birth or death dates]]' end local function check_for_invalid_date(str) return mw.ustring.match(str, '^%?') or mw.ustring.match(str, '^%d%d%?') or mw.ustring.match(str, '^[Uu]nk') end local function expand_template(template, args) return mw.getCurrentFrame():expandTemplate{title = template, args = args} end local function parse_date(str) local date = Date(str) if date then return tostring(date.year), tostring(date.month), tostring(date.day) end -- TODO: Date has not been parsed. Need to work out what to do. For now, throw an error. -- Example where this can occur: "birth_date = 22 December 1946" at [[Maurice Pasternak]]. -- There was a nonbreaking space after "22" whidh Date does not accept. error('Module:Person_date parse_date invalid date: "' .. tostring(str) .. '"') end local function date_format(str) if mw.ustring.match (str, '^%d+%s*%a+[%.]*%s*%d%d%d%d$') then return 'df' elseif mw.ustring.match(str, '^%a+[%.]*%s+%d+,%s*%d%d%d%d$') then return 'mf' else return 'ERROR' end end local function is_valid_month (str) str = string.upper(mw.ustring.sub(str,1,1))..string.lower(mw.ustring.sub(str,2)) local months = {'Jan','Jan.','January','Feb','Feb.','February','Mar','March','Apr','Apr.','April','May','Jun','Jun.','June','Jul','Jul.','July','Aug','Aug.','August','Sep','Sept','Sep.','Sept.','September','Oct','Oct.','October','Nov','Nov','November','Dec','Dec.','December'} for index, value in ipairs(months) do if value == str then return true end end return false end local function is_month_year_only(str) local month = mw.ustring.match(str, '^(%a+)[%.]*%s+%d%d%d%d$') if month == nil then return false else return is_valid_month(month) end end local function is_valid_date(str) local month = mw.ustring.match (str, '^%d+%s*(%a+)[%.]*%s*%d%d%d%d$') or mw.ustring.match(str, '^(%a+)[%.]*%s+%d+,%s*%d%d%d%d$') if month == nil then return false else return is_valid_month(month) end end local function is_year_only(str) return mw.ustring.match(str, '^%d%d%d%d$') end local function already_has_template(str) str = mw.ustring.gsub(str, '&[Nn][Bb][Ss][Pp];', ' ') return mw.ustring.match(str, '<span') or mw.ustring.match(str, '<time') or mw.ustring.match(str,'%(aged%s*%d+') or mw.ustring.match(str,'%(age%s*%d+') end local function sanatize_date(str) -- Sanatize leading & trailing whitespace (this caused an issue before it was implemented) str = mw.ustring.gsub(str,'^%s*','') str = mw.ustring.gsub(str,'%s*$','') -- Sanatize ordinals str = mw.ustring.gsub(str, '(%d+)st([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)rd([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)th([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)nd([,%s])', '%1%2') return str end local function parse_birth(args) local birth_date = args['birth_date'] or '' local death_date = args['death_date'] or '' local disap_date = args['disappeared_date'] or '' local original = birth_date birth_date = sanatize_date(birth_date) death_date = sanatize_date(death_date) disap_date = sanatize_date(disap_date) -- Check for bad inputs. This used to be covered by a switch statement in infoboxes if check_for_invalid_date(birth_date) then return original..invalid_date_category end if already_has_template(birth_date) then return original end if is_valid_date(birth_date) then local location = mw.ustring.find(birth_date, '%d%d%d%d') local extra = mw.ustring.sub(birth_date, location+4) .. tracking_category local date = mw.ustring.sub(birth_date, 1,location+3) local year, month, day = parse_date(date) local format = date_format(date) if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_date_and_age, {year, month, day, [format] = 'yes'}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) or is_month_year_only(death_date) then return expand_template(TEMPLATES.birth_date, {year, month, day, [format] = 'yes'}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end if is_month_year_only(birth_date) then local year = Date('1 '..birth_date):text('%Y') local month = Date('1 '..birth_date):text('%-m') local location = mw.ustring.find(birth_date, '%d%d%d%d') local date = mw.ustring.sub(birth_date, 1,location+3) local extra = mw.ustring.sub(birth_date, location+4) .. tracking_category if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_year_and_age, {year, month}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) or is_month_year_only(death_date) then return expand_template(TEMPLATES.birth_year, {date}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end if is_year_only(birth_date) then local date = mw.ustring.sub(birth_date, 1, 5) local extra = mw.ustring.sub(birth_date, 5) .. tracking_category if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_year_and_age, {date}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) then return expand_template(TEMPLATES.birth_year, {date}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end return original end local function parse_death(args) local birth_date = args['birth_date'] or '' local death_date = args['death_date'] or '' local original = death_date birth_date = sanatize_date(birth_date) death_date = sanatize_date(death_date) -- Check for bad inputs. This used to be covered by a switch statement in infoboxes if check_for_invalid_date(death_date) then return original..invalid_date_category end if already_has_template(death_date) then return original end if is_valid_date(death_date) or is_month_year_only(death_date) then local location = mw.ustring.find(death_date, '%d%d%d%d') local date = mw.ustring.sub(death_date, 1,location+3) local extra = mw.ustring.sub(death_date, location+4) .. tracking_category local format = date_format(date) if birth_date == '' then if is_month_year_only(death_date) then return expand_template(TEMPLATES.death_date_text, {date}) .. extra end local year, month, day = parse_date(date) return expand_template(TEMPLATES.death_date, {year, month, day, [format] = 'yes'}) .. extra else if is_year_only(birth_date) then location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) if is_month_year_only(death_date) then return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end return expand_template(TEMPLATES.death_date_and_age, {date, bd, [format] = 'yes'}) .. extra elseif is_valid_date(birth_date) or is_month_year_only(birth_date) then location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) if (is_month_year_only(death_date)) then return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end return expand_template(TEMPLATES.death_date_and_age, {date, bd, [format] = 'yes'}) .. extra end end end if is_year_only(death_date) then if birth_date == '' then return expand_template(TEMPLATES.death_year, {mw.ustring.sub(death_date, 1, 5)}) .. mw.ustring.sub(death_date, 5) .. tracking_category else if is_year_only(birth_date) then return expand_template(TEMPLATES.death_year_and_age, {mw.ustring.sub(death_date, 1, 5), mw.ustring.sub(birth_date, 1, 5)}) .. mw.ustring.sub(death_date, 5) .. tracking_category else if is_valid_date(birth_date) then local location = mw.ustring.find(death_date, '%d%d%d%d') local date = mw.ustring.sub(death_date, 1,location+3) local extra = mw.ustring.sub(death_date, location+4) .. tracking_category location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end end end end return original end function p.birth(frame) return parse_birth(getArgs(frame, {parentFirst = true})) end function p.death(frame) return parse_death(getArgs(frame, {parentFirst = true})) end return p ljya27mn2nx14vgu0ruw9895v5thtld Templat:Infobox person/length 10 6674 19274 2026-06-10T07:50:27Z Song GK 9 Mencipta laman baru dengan kandungan '{{#invoke:Person length|length}}<noinclude> {{Documentation}} </noinclude>' 19274 wikitext text/x-wiki {{#invoke:Person length|length}}<noinclude> {{Documentation}} </noinclude> 0urzd0kzi0b9qp4ywelaup2q0q4cbab Modul:Person length 828 6675 19275 2026-06-10T07:51:33Z Song GK 9 Mencipta laman baru dengan kandungan '-- This module implements [[Template:Infobox person/length]] local p = {} local function clean_length(s) s = mw.ustring.gsub(s, 'centimetre', 'cm') s = mw.ustring.gsub(s, 'centimeter', 'cm') s = mw.ustring.gsub(s, 'cms', 'cm') s = mw.ustring.gsub(s, 'cm%.', 'cm') s = mw.ustring.gsub(s, 'metre', 'm') s = mw.ustring.gsub(s, 'meter', 'm') s = mw.ustring.gsub(s, 'ms', 'm') s = mw.ustring.gsub(s, 'm%.', 'm') s = mw.ustring.gsub(s, 'inches', 'in')...' 19275 Scribunto text/plain -- This module implements [[Template:Infobox person/length]] local p = {} local function clean_length(s) s = mw.ustring.gsub(s, 'centimetre', 'cm') s = mw.ustring.gsub(s, 'centimeter', 'cm') s = mw.ustring.gsub(s, 'cms', 'cm') s = mw.ustring.gsub(s, 'cm%.', 'cm') s = mw.ustring.gsub(s, 'metre', 'm') s = mw.ustring.gsub(s, 'meter', 'm') s = mw.ustring.gsub(s, 'ms', 'm') s = mw.ustring.gsub(s, 'm%.', 'm') s = mw.ustring.gsub(s, 'inches', 'in') s = mw.ustring.gsub(s, 'inch', 'in') s = mw.ustring.gsub(s, 'ins', 'in') s = mw.ustring.gsub(s, 'in%.', 'in') s = mw.ustring.gsub(s, '%[%[[Cc]entim|cm%]%]', '[[Centimetre|cm]]') s = mw.ustring.gsub(s, '%[%[cm%]%]s', '[[Centimetre|cm]]') s = mw.ustring.gsub(s, '%[%[m%]%]s', '[[Metre|m]]') s = mw.ustring.gsub(s, '%[%[in|in%]%]', '[[inch|in]]') return s end local function isnumber(s) if s then s = mw.ustring.gsub(s, '%+%s*%d+%s*/%s*%d+%s*$', '') return tonumber(s) end return nil end local function get_convert_length_args(s, prefer, enforce) local prefer_m = (prefer or '') == 'm' local force_m = (enforce or '') == 'm' local prefer_cm = (prefer or '') == 'cm' local force_cm = (enforce or '') == 'cm' unconverted = clean_length(s or '') -- basic unit cleaning s = mw.ustring.gsub(unconverted, '&[Nn][Bb][Ss][Pp];', ' ') local m = mw.ustring.find(s, 'm') local c = mw.ustring.find(s, 'cm') local i = mw.ustring.find(s, 'in') if m == nil and i == nil then return '', unconverted end if c ~= nil and i == nil then local n = mw.ustring.sub(s, 1, c - 1) if isnumber(n) then return force_m and {n/100,'m','in',0,['abbr']='on'} or {n,'cm','in',0,['abbr']='on'}, mw.ustring.sub(s, c+2) end return '', unconverted end if m ~= nil and c == nil and i == nil then local n = mw.ustring.sub(s, 1, m - 1) if isnumber(n) then return force_cm and {n*100,'cm','in',0,['abbr']='on'} or {n,'m','in',0,['abbr']='on'}, mw.ustring.sub(s, m+1) end return '', unconverted end if i ~= nil and m == nil then local n = mw.ustring.sub(s, 1, i - 1) if isnumber(n) then return (force_m or prefer_m) and {n,'in','m',2,['abbr']='on'} or {n,'in','cm',0,['abbr']='on'}, mw.ustring.sub(s, i+2) end return '', unconverted end return '', unconverted end function convert_length(frame, args) local targs, str = get_convert_length_args(args[1], args['prefer'] or '', args['enforce'] or '') if type(targs) == 'table' then return frame:expandTemplate{ title = 'convert', args = targs} .. str else return str end end function p.length(frame) return convert_length(frame, frame.args[1] and frame.args or frame:getParent().args) end return p s9kv9i5j8q4gp6orlczfrsph5u32jia Jefri Nichol 0 6676 19276 2026-06-10T10:17:10Z Changkir Langkau 674 Mencipta laman baru dengan kandungan '{{infobox person | name = Jefri Nichol | image = Jefri Nichol in 2019.png | alt = | caption = Jefri Nichol maya 2019 | birth_name = | birth_date = {{birth date and age|1999|1|15}} | birth_place = [[Jakarta]], Indonesia | education = | alma_mater = | occupation = {{hlist|Pengelulu|Model}} | years_active = 2013–diatu | known_for = |...' 19276 wikitext text/x-wiki {{infobox person | name = Jefri Nichol | image = Jefri Nichol in 2019.png | alt = | caption = Jefri Nichol maya 2019 | birth_name = | birth_date = {{birth date and age|1999|1|15}} | birth_place = [[Jakarta]], Indonesia | education = | alma_mater = | occupation = {{hlist|Pengelulu|Model}} | years_active = 2013–diatu | known_for = | notable_works = | spouse = | partner = | children = | parents = | relatives = | family = | awards = [[#Anugerah enggau penyalun|Peda rintai]] | website = <!-- {{URL|example.com}} --> | module = | module2 = | module3 = | module4 = | module5 = | module6 = | signature = Jefri Nichol (signature).svg | signature_size = | signature_alt = | footnotes = }} '''Jefri Nichol''' (ada 15 Januari 1999) nya siku pengelulu enggau model Indonesia. Iya dikelala bala mayuh ketegal pengawa iya dalam ''[[Dear Nathan]]'' (2017). == Pengidup tumu == Jefri Nichol ada kena 15 Januari 1999 ba Jakarta, Indonesia.<ref name="Profil">{{cite news|title=Profil Jefri Nichol|url=https://www.viva.co.id/siapa/read/708-jefri-nichol|first=|last=|date=|accessdate=|language=id|website=Viva.co.id|archive-date=2022-11-30|archive-url=https://web.archive.org/web/20221130110358/https://www.viva.co.id/siapa/read/708-jefri-nichol|url-status=live}}</ref> Iya anak sulung ari apai iya ti bebansa [[Minangkabau|Minang]] enggau indai iya ari Sungai Geringging, [[Kabupaten Padang Pariaman|Padang Pariaman]]. Iya bisi madi indu benama Jessie Putri.<ref>{{Cite web|date=2018-01-08|title=Jefri Nichol dan Caitlin Halderman Sambangi Padang|url=https://republika.co.id/share/p28e4k284|website=Republika Online|language=id|access-date=2023-08-11|archive-date=2023-06-28|archive-url=https://web.archive.org/web/20230628061237/https://republika.co.id/share/p28e4k284|url-status=live}}</ref> Iya besekula ba sekula vokasional SMK Tunas Jakasampurna ngambi pelajar dalam teknologi, tang ketegal jadual bekelulu ti kisuk, iya besekula rumah.<ref>{{Cite web|url=https://www.kapanlagi.com/showbiz/selebriti/pentingkan-pendidikan-jefri-nichol-cuti-dari-dunia-hiburan-6cd277.html|title=Pentingkan Pendidikan, Jefri Nichol Cuti Dari Dunia Hiburan|last=Nugraini|first=Galuh Esti|website=KapanLagi.com|date=2018-10-20|accessdate=2023-08-11|language=id|archive-date=2023-08-14|archive-url=https://web.archive.org/web/20230814085720/https://www.kapanlagi.com/showbiz/selebriti/pentingkan-pendidikan-jefri-nichol-cuti-dari-dunia-hiburan-6cd277.html|url-status=live}}</ref> == Pengawa == Jefri Nichol merengkahka pengawa iya nyadi model iklan lalu berengkah bekeulu nyadi watak sukung dalam [[Minisiri|minisiri televisyen]] ''Kami Rindu Ayah'' ba taun 2013. Ba taun 2017, iya belakun nyadi Elzan ba filem keterubah iya, ''[[At Stake]]''. Siti ari pengawa ti nyadika iya tebilang iya nya lebuh iya nyadi watak terubah dalam ''[[Dear Nathan]]'', ti dipansutka ba taun ke sama. == Pengidup kediri == Jefri Nichol nya siku orang ke beminatka lumba enggau main. Lumba ti dikerinduka iya bemacham, baka belanda, bejoging, enggau betinju.<ref>{{Cite web|url=https://www.jpnn.com/news/profil-jefri-nichol-si-ganteng-yang-hobi-bertinju|title=Profil Jefri Nichol, Si Ganteng yang Hobi Bertinju|website=jpnn.com|date=14 June 2022|accessdate=12 August 2023|language=id|archive-date=14 August 2023|archive-url=https://web.archive.org/web/20230814085723/https://www.jpnn.com/news/profil-jefri-nichol-si-ganteng-yang-hobi-bertinju|url-status=live}}</ref> ===Pengetan taun 2019=== Kena 23 Julai 2019, Jefri Nichol ditan [[Polis Kandang Menua Metropolitan Jakarta Raya]] ba endur iya diau ketegal ngempu [[marijuana]]. Iya udah diuji positif dadah pengudah beberapa jam ditan.<ref>{{Cite web|last=Hadiansyah|first=Surya|date=23 July 2019|title=Jefri Nichol Ditangkap Karena Kepemilikan Ganja|url=https://www.liputan6.com/showbiz/read/4019971/jefri-nichol-ditangkap-karena-kepemilikan-ganja|website=Liputan 6|language=id|archive-url=https://web.archive.org/web/20210729053758/https://www.liputan6.com/showbiz/read/4019971/jefri-nichol-ditangkap-karena-kepemilikan-ganja|archive-date=29 July 2021|access-date=23 July 2019}}</ref><ref>{{Cite web|last=Marhaenjati|first=Bayu|date=23 July 2019|title=Tangkap Aktor Muda Jefri Nichol, Polisi Sita Ganja|url=https://www.beritasatu.com/megapolitan/565930/tangkap-aktor-muda-jefri-nichol-polisi-sita-ganja|website=Berita Satu|language=id|archive-url=https://web.archive.org/web/20210729053755/https://www.beritasatu.com/megapolitan/565930/tangkap-aktor-muda-jefri-nichol-polisi-sita-ganja|archive-date=29 July 2021|access-date=23 July 2019}}</ref><ref>{{Cite web|last=Permana|first=Bayu Indra|date=23 July 2019|editor-last=Wardhani|editor-first=Anita K|title=Saat Geledah Apartemen Jefri Nichol, Polisi Temukan Ganja 6,01 Gram Jatuh Dari Kulkas|url=https://www.tribunnews.com/seleb/2019/07/23/saat-geledah-apartemen-jefri-nichol-polisi-temukan-ganja-601-gram-jatuh-dari-kulkas|website= Tribun Seleb|language=id|archive-url=https://web.archive.org/web/20210822094038/https://www.tribunnews.com/seleb/2019/07/23/saat-geledah-apartemen-jefri-nichol-polisi-temukan-ganja-601-gram-jatuh-dari-kulkas|archive-date=22 August 2021|access-date=23 July 2019}}</ref> == Filemografi == === Filem === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |rowspan="8"|2017 |''[[At Stake]]'' |Elzan | |- |''Love Letter for Starla'' |Hema Chandra |Filem pandak |- |rowspan="2"|''[[Dear Nathan]]'' |Nathan Januar Prasetyo |rowspan="2"| |- |Daniel Januar Prasetyo |- |''Jailangkung'' |Rama Putera | |- |''A: Aku, Benci & Cinta'' |Alvaro Radyana Putra | |- |''One Fine Day'' |Mahesa | |- |''[[Love Letter for Starla]]'' |Hema Chandra | |- |rowspan="4"|2018 |''Jailangkung 2'' |Rama Putera | |- |rowspan="2"|''Something in Between'' |Gema |rowspan="2"| |- |Abimanyu |- |''[[Dear Nathan: Hello Salma]]'' |Nathan Januar Prasetyo | |- |rowspan="5"|2019 |''The Woven Path: Perempuan Tana Humba'' |Narrator |Filem pandak |- |''DreadOut'' |Eric | |- |''Hit & Run'' |Jefri | |- |''Bebas'' |Mia's Bully |Cameo |- |''Habibie & Ainun 3'' |Ahmad Notosastro | |- |2020 |''[[Love like the Falling Rain]]'' |Kevin | |- |2021 |''[[Aum!]]'' |Satriya/Surya Jatitama | |- |rowspan="5"|2022 |''[[Dear Nathan: Thank You Salma]]'' |Nathan Januar Prasetyo | |- |''[[Jakarta, City of Dreamers]]'' |Dominik |Mega nyadi penulis |- |''My Sassy Girl'' |Gian Pratama | |- |''Jailangkung: Sandekala'' |Rama Putera |Cameo |- |''[[Sri Asih (2022 film)|Sri Asih]]'' |Tangguh | |- |rowspan="4"|2023 |''Tulah 6/13'' |Medical team |Cameo |- |''Why Do You Love Me'' |Danton | |- |''Mohon Doa Restu'' |Satya | |- |''[[Ali Topan]]'' |Ali Topan | |- | 2025 | ''[[Sammi, Who Can Detach His Body Parts]]'' | Sammi | Filem pandak |} === Siri web === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |2018–2019 |''Line Tutorial'' |Kala | |- |2021 |''Paradise Garden'' |Kalandra Rezvan | |- |2022 |''At Stake: the Series'' |Elzan | |- |rowspan="2"|2022–2023 |rowspan="2"|''Love Letter for Starla: the Series'' |Hema Chandra |rowspan="2"| |- |Arya |- |2023 |''At Stake: the Series 2'' |Elzan | |- |} === Siri televisyen === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |2013 |''Kami Rindu Ayah'' |Boni |Debut |- |2015 |''Keluarga Garuda di Dadaku'' |Abe | |- |2016 |''Sinema Pintu Taubat'' |Adit |Episod: "Rumah untuk Bapak" |- |2017 |''Pesantren & Rock n' Roll Reborn'' |Ken | |- |rowspan="2"|2020 |''Catatan Harianku'' |Bima |Episod: "Jatuh Cinta pada Catatan Terakhir" |- |''Pesantren Rock n' Dut'' |Jefri | |- |rowspan="3"|2022 |''Ikatan Cinta'' |rowspan="3"|Himself |rowspan="3"|Cameo; ngelakuka filem ''My Sassy Girl'' |- |''IPA & IPS'' |- |''Aku Jatuh Cinta'' |} === Video musik === {| class="wikitable unsortable" |- !Taun !Tajuk !Penanyi !Nota |- |2017 |"Surat Cinta untuk Starla" |Virgoun | |- |2020 |"Tak Bisa Bersama" |[[Prilly Latuconsina]], [[Vidi Aldiano]] | |- |2021 |"Apa Lagi" |[[Prilly Latuconsina]], [[Andi Rianto]] | |- |rowspan="4"|2022 |"Bintang di Surga" |[[Noah (ban)|Noah]] | |- |"Merasa Indah" |[[Tiara Andini]] | |- |"Deritaku" |rowspan="2"|David Bayu | |- |"It's OK for Me Now" | |- |2023 |"Love Me Back" |Christie | |} == Anugerah enggau penyalun == {| class="wikitable sortable" |- ! Taun ! Anugerah ! Kategori ! Pengawa ! Pemutus ! class="unsortable" | {{Abbr|Ref.|Reference(s)}} |- |rowspan="2"|2017 |Festival Filem Bandung |Pengelulu dipuji |rowspan="2" align="center"|''[[Dear Nathan]]'' |{{nom}} |align="center"|<ref>{{Cite news|first=Mitra|last=Tarigan|date=22 October 2017|title=Ini Pemenang Festival Film Bandung 2017|url=https://seleb.tempo.co/read/1026959/ini-pemenang-festival-film-bandung-2017|work=[[Tempo.co]]|access-date=12 August 2023|editor-last=Tarigan|editor-first=Mitra|language=id|archive-date=21 September 2022|archive-url=https://web.archive.org/web/20220921192142/https://seleb.tempo.co/read/1026959/ini-pemenang-festival-film-bandung-2017|url-status=live}}</ref><ref>{{cite web|title=Daftar Lengkap Pemenang Festival Film Bandung ke-30 Tahun 2017|url=https://www.festivalfilmbandung.com/2017/10/daftar-lengkap-pemenang-festival-film.html|first=|last=|date=|accessdate=|language=id|website=Festival Film Bandung|archive-date=2023-03-23|archive-url=https://web.archive.org/web/20230323051017/https://www.festivalfilmbandung.com/2017/10/daftar-lengkap-pemenang-festival-film.html|url-status=live}}</ref> |- |[[Anugerah Maya (Indonesia)|Anugerah Naya]] |[[Anugerah Maya (Indonesia)#Kategori|Pengelulu Baru Pemadu Manah]] |{{won}} |align="center"|<ref>{{Cite web|last=Aldida|first=Vania Ika|date=18 December 2017|title=Daftar Lengkap Pemenang Piala Maya 2017|url=https://celebrity.okezone.com/read/2017/12/17/206/1831826/daftar-lengkap-pemenang-piala-maya-2017|website=[[Okezone]]|language=id-ID|access-date=13 August 2023|archive-date=28 April 2023|archive-url=https://web.archive.org/web/20230428205923/https://celebrity.okezone.com/read/2017/12/17/206/1831826/daftar-lengkap-pemenang-piala-maya-2017|url-status=live}}</ref> |- |2018 |Anugerah Filem Box Office Indonesia |Midul Mas (enggau [[Amanda Rawles]]) |align="center"|''Jailangkung'' |{{won}} | |- |2019 |Anugerah Maya |Pengelulu Pemadu Manah ungkup Watak Sukung |rowspan="2" align="center"|''Habibie & Ainun 3'' |{{nom}} |align="center"|<ref>{{Cite news|url=https://www.cnnindonesia.com/hiburan/20200123150737-220-468045/daftar-nominasi-piala-maya-2020|title=Daftar Nominasi Piala Maya 2020|date=23 January 2020|accessdate=4 August 2023|work=[[CNN Indonesia]]|language=id|archive-date=6 July 2022|archive-url=https://web.archive.org/web/20220706223415/https://www.cnnindonesia.com/hiburan/20200123150737-220-468045/daftar-nominasi-piala-maya-2020|url-status=live}}</ref><ref>{{cite web|url=https://kumparan.com/kumparanhits/film-dua-garis-biru-raih-4-penghargaan-di-piala-maya-8-1snw3bq643X|title=Film Dua Garis Biru Raih 4 Penghargaan di Piala Maya 8|date=9 February 2023|accessdate=9 August 2023|work=Kumparan|language=id|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115062725/https://kumparan.com/kumparanhits/film-dua-garis-biru-raih-4-penghargaan-di-piala-maya-8-1snw3bq643X|url-status=live}}</ref> |- |2020 |Festival Filem Bandung |Pengelulu Sukung Dipuji |{{won}} |align="center"|<ref>{{Cite news|url= https://www.kompas.com/hype/read/2020/09/10/090717266/daftar-lengkap-nominasi-film-dan-narafilm-festival-film-bandung-2020|title= Daftar Lengkap Nominasi Film dan Narafilm Festival Film Bandung 2020|work= [[Kompas.com]]|access-date= 17 August 2023|last= Susanti|first= Reni|editor-last= Setuningsih|editor-first= Novianti|language= id|archive-date= 25 October 2020|archive-url= https://web.archive.org/web/20201025093153/https://www.kompas.com/hype/read/2020/09/10/090717266/daftar-lengkap-nominasi-film-dan-narafilm-festival-film-bandung-2020|url-status= live}}</ref><ref>{{cite web|title=Daftar Lengkap Pemenang Festival Film Bandung ke-33 Tahun 2020|url=https://www.festivalfilmbandung.com/2020/12/pemenang-festival-film-bandung-2020.html?m=1|first=|last=|date=|website=Festival Film Bandung|publisher=Forum Film Bandung|language=id|accessdate=6 August 2023|archive-date=10 December 2022|archive-url=https://web.archive.org/web/20221210143250/https://www.festivalfilmbandung.com/2020/12/pemenang-festival-film-bandung-2020.html?m=1|url-status=live}}</ref> |- |2021 |[[Festival Filem Indonesia]] |[[Anugerah Citra ungkup Pengelulu Pemadu Manah|Pengelulu Pemadu Manah]] |rowspan="2" align="center" |''[[Jakarta, City of Dreamers]]'' |rowspan="2" {{nom}} |align="center"| |- |rowspan="4"|2022 |Indonesian Journalist Film Festival |Best Actor – Drama |align="center"| |- |[[Anugerah Televisyen Asia]] |[[Anugerah Televisyen Asia#Kategori Digital|Pemerindang Tuai Laki Pemadu Manah – Digital]] |align="center"|''At Stake: the Series'' |{{nom}} |align="center"| |- |rowspan="2"|Anugerah Pengelulu Filem Indonesia |Pengelulu Sukung Pemadu Manah |rowspan="2" align="center"|''[[Aum!]]'' |rowspan="2" {{nom}} |rowspan="2" align="center"| |- |Pengelulu Sukung Pemadu Dikerindu |} == Kereban sanding == {{reflist}} == Laman web ke bukai == * {{IMDb name|8758347}} * {{instagram|jefrinichol}} [[Kategori:Pengada 1999]] [[Kategori:Orang idup]] [[Kategori:Pengelulu laku Indonesia kurun ke-21]] lwwjjubot84i52yioybpahbb2bl9w22 19277 19276 2026-06-10T10:18:49Z Changkir Langkau 674 /* Anugerah enggau penyalun */ 19277 wikitext text/x-wiki {{infobox person | name = Jefri Nichol | image = Jefri Nichol in 2019.png | alt = | caption = Jefri Nichol maya 2019 | birth_name = | birth_date = {{birth date and age|1999|1|15}} | birth_place = [[Jakarta]], Indonesia | education = | alma_mater = | occupation = {{hlist|Pengelulu|Model}} | years_active = 2013–diatu | known_for = | notable_works = | spouse = | partner = | children = | parents = | relatives = | family = | awards = [[#Anugerah enggau penyalun|Peda rintai]] | website = <!-- {{URL|example.com}} --> | module = | module2 = | module3 = | module4 = | module5 = | module6 = | signature = Jefri Nichol (signature).svg | signature_size = | signature_alt = | footnotes = }} '''Jefri Nichol''' (ada 15 Januari 1999) nya siku pengelulu enggau model Indonesia. Iya dikelala bala mayuh ketegal pengawa iya dalam ''[[Dear Nathan]]'' (2017). == Pengidup tumu == Jefri Nichol ada kena 15 Januari 1999 ba Jakarta, Indonesia.<ref name="Profil">{{cite news|title=Profil Jefri Nichol|url=https://www.viva.co.id/siapa/read/708-jefri-nichol|first=|last=|date=|accessdate=|language=id|website=Viva.co.id|archive-date=2022-11-30|archive-url=https://web.archive.org/web/20221130110358/https://www.viva.co.id/siapa/read/708-jefri-nichol|url-status=live}}</ref> Iya anak sulung ari apai iya ti bebansa [[Minangkabau|Minang]] enggau indai iya ari Sungai Geringging, [[Kabupaten Padang Pariaman|Padang Pariaman]]. Iya bisi madi indu benama Jessie Putri.<ref>{{Cite web|date=2018-01-08|title=Jefri Nichol dan Caitlin Halderman Sambangi Padang|url=https://republika.co.id/share/p28e4k284|website=Republika Online|language=id|access-date=2023-08-11|archive-date=2023-06-28|archive-url=https://web.archive.org/web/20230628061237/https://republika.co.id/share/p28e4k284|url-status=live}}</ref> Iya besekula ba sekula vokasional SMK Tunas Jakasampurna ngambi pelajar dalam teknologi, tang ketegal jadual bekelulu ti kisuk, iya besekula rumah.<ref>{{Cite web|url=https://www.kapanlagi.com/showbiz/selebriti/pentingkan-pendidikan-jefri-nichol-cuti-dari-dunia-hiburan-6cd277.html|title=Pentingkan Pendidikan, Jefri Nichol Cuti Dari Dunia Hiburan|last=Nugraini|first=Galuh Esti|website=KapanLagi.com|date=2018-10-20|accessdate=2023-08-11|language=id|archive-date=2023-08-14|archive-url=https://web.archive.org/web/20230814085720/https://www.kapanlagi.com/showbiz/selebriti/pentingkan-pendidikan-jefri-nichol-cuti-dari-dunia-hiburan-6cd277.html|url-status=live}}</ref> == Pengawa == Jefri Nichol merengkahka pengawa iya nyadi model iklan lalu berengkah bekeulu nyadi watak sukung dalam [[Minisiri|minisiri televisyen]] ''Kami Rindu Ayah'' ba taun 2013. Ba taun 2017, iya belakun nyadi Elzan ba filem keterubah iya, ''[[At Stake]]''. Siti ari pengawa ti nyadika iya tebilang iya nya lebuh iya nyadi watak terubah dalam ''[[Dear Nathan]]'', ti dipansutka ba taun ke sama. == Pengidup kediri == Jefri Nichol nya siku orang ke beminatka lumba enggau main. Lumba ti dikerinduka iya bemacham, baka belanda, bejoging, enggau betinju.<ref>{{Cite web|url=https://www.jpnn.com/news/profil-jefri-nichol-si-ganteng-yang-hobi-bertinju|title=Profil Jefri Nichol, Si Ganteng yang Hobi Bertinju|website=jpnn.com|date=14 June 2022|accessdate=12 August 2023|language=id|archive-date=14 August 2023|archive-url=https://web.archive.org/web/20230814085723/https://www.jpnn.com/news/profil-jefri-nichol-si-ganteng-yang-hobi-bertinju|url-status=live}}</ref> ===Pengetan taun 2019=== Kena 23 Julai 2019, Jefri Nichol ditan [[Polis Kandang Menua Metropolitan Jakarta Raya]] ba endur iya diau ketegal ngempu [[marijuana]]. Iya udah diuji positif dadah pengudah beberapa jam ditan.<ref>{{Cite web|last=Hadiansyah|first=Surya|date=23 July 2019|title=Jefri Nichol Ditangkap Karena Kepemilikan Ganja|url=https://www.liputan6.com/showbiz/read/4019971/jefri-nichol-ditangkap-karena-kepemilikan-ganja|website=Liputan 6|language=id|archive-url=https://web.archive.org/web/20210729053758/https://www.liputan6.com/showbiz/read/4019971/jefri-nichol-ditangkap-karena-kepemilikan-ganja|archive-date=29 July 2021|access-date=23 July 2019}}</ref><ref>{{Cite web|last=Marhaenjati|first=Bayu|date=23 July 2019|title=Tangkap Aktor Muda Jefri Nichol, Polisi Sita Ganja|url=https://www.beritasatu.com/megapolitan/565930/tangkap-aktor-muda-jefri-nichol-polisi-sita-ganja|website=Berita Satu|language=id|archive-url=https://web.archive.org/web/20210729053755/https://www.beritasatu.com/megapolitan/565930/tangkap-aktor-muda-jefri-nichol-polisi-sita-ganja|archive-date=29 July 2021|access-date=23 July 2019}}</ref><ref>{{Cite web|last=Permana|first=Bayu Indra|date=23 July 2019|editor-last=Wardhani|editor-first=Anita K|title=Saat Geledah Apartemen Jefri Nichol, Polisi Temukan Ganja 6,01 Gram Jatuh Dari Kulkas|url=https://www.tribunnews.com/seleb/2019/07/23/saat-geledah-apartemen-jefri-nichol-polisi-temukan-ganja-601-gram-jatuh-dari-kulkas|website= Tribun Seleb|language=id|archive-url=https://web.archive.org/web/20210822094038/https://www.tribunnews.com/seleb/2019/07/23/saat-geledah-apartemen-jefri-nichol-polisi-temukan-ganja-601-gram-jatuh-dari-kulkas|archive-date=22 August 2021|access-date=23 July 2019}}</ref> == Filemografi == === Filem === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |rowspan="8"|2017 |''[[At Stake]]'' |Elzan | |- |''Love Letter for Starla'' |Hema Chandra |Filem pandak |- |rowspan="2"|''[[Dear Nathan]]'' |Nathan Januar Prasetyo |rowspan="2"| |- |Daniel Januar Prasetyo |- |''Jailangkung'' |Rama Putera | |- |''A: Aku, Benci & Cinta'' |Alvaro Radyana Putra | |- |''One Fine Day'' |Mahesa | |- |''[[Love Letter for Starla]]'' |Hema Chandra | |- |rowspan="4"|2018 |''Jailangkung 2'' |Rama Putera | |- |rowspan="2"|''Something in Between'' |Gema |rowspan="2"| |- |Abimanyu |- |''[[Dear Nathan: Hello Salma]]'' |Nathan Januar Prasetyo | |- |rowspan="5"|2019 |''The Woven Path: Perempuan Tana Humba'' |Narrator |Filem pandak |- |''DreadOut'' |Eric | |- |''Hit & Run'' |Jefri | |- |''Bebas'' |Mia's Bully |Cameo |- |''Habibie & Ainun 3'' |Ahmad Notosastro | |- |2020 |''[[Love like the Falling Rain]]'' |Kevin | |- |2021 |''[[Aum!]]'' |Satriya/Surya Jatitama | |- |rowspan="5"|2022 |''[[Dear Nathan: Thank You Salma]]'' |Nathan Januar Prasetyo | |- |''[[Jakarta, City of Dreamers]]'' |Dominik |Mega nyadi penulis |- |''My Sassy Girl'' |Gian Pratama | |- |''Jailangkung: Sandekala'' |Rama Putera |Cameo |- |''[[Sri Asih (2022 film)|Sri Asih]]'' |Tangguh | |- |rowspan="4"|2023 |''Tulah 6/13'' |Medical team |Cameo |- |''Why Do You Love Me'' |Danton | |- |''Mohon Doa Restu'' |Satya | |- |''[[Ali Topan]]'' |Ali Topan | |- | 2025 | ''[[Sammi, Who Can Detach His Body Parts]]'' | Sammi | Filem pandak |} === Siri web === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |2018–2019 |''Line Tutorial'' |Kala | |- |2021 |''Paradise Garden'' |Kalandra Rezvan | |- |2022 |''At Stake: the Series'' |Elzan | |- |rowspan="2"|2022–2023 |rowspan="2"|''Love Letter for Starla: the Series'' |Hema Chandra |rowspan="2"| |- |Arya |- |2023 |''At Stake: the Series 2'' |Elzan | |- |} === Siri televisyen === {| class="wikitable unsortable" |- !Taun !Tajuk !Pengawa !Nota |- |2013 |''Kami Rindu Ayah'' |Boni |Debut |- |2015 |''Keluarga Garuda di Dadaku'' |Abe | |- |2016 |''Sinema Pintu Taubat'' |Adit |Episod: "Rumah untuk Bapak" |- |2017 |''Pesantren & Rock n' Roll Reborn'' |Ken | |- |rowspan="2"|2020 |''Catatan Harianku'' |Bima |Episod: "Jatuh Cinta pada Catatan Terakhir" |- |''Pesantren Rock n' Dut'' |Jefri | |- |rowspan="3"|2022 |''Ikatan Cinta'' |rowspan="3"|Himself |rowspan="3"|Cameo; ngelakuka filem ''My Sassy Girl'' |- |''IPA & IPS'' |- |''Aku Jatuh Cinta'' |} === Video musik === {| class="wikitable unsortable" |- !Taun !Tajuk !Penanyi !Nota |- |2017 |"Surat Cinta untuk Starla" |Virgoun | |- |2020 |"Tak Bisa Bersama" |[[Prilly Latuconsina]], [[Vidi Aldiano]] | |- |2021 |"Apa Lagi" |[[Prilly Latuconsina]], [[Andi Rianto]] | |- |rowspan="4"|2022 |"Bintang di Surga" |[[Noah (ban)|Noah]] | |- |"Merasa Indah" |[[Tiara Andini]] | |- |"Deritaku" |rowspan="2"|David Bayu | |- |"It's OK for Me Now" | |- |2023 |"Love Me Back" |Christie | |} == Anugerah enggau penyalun == {| class="wikitable sortable" |- ! Taun ! Anugerah ! Kategori ! Pengawa ! Pemutus ! class="unsortable" | {{Abbr|KS.|Kereban sanding}} |- |rowspan="2"|2017 |Festival Filem Bandung |Pengelulu dipuji |rowspan="2" align="center"|''[[Dear Nathan]]'' |{{nom}} |align="center"|<ref>{{Cite news|first=Mitra|last=Tarigan|date=22 October 2017|title=Ini Pemenang Festival Film Bandung 2017|url=https://seleb.tempo.co/read/1026959/ini-pemenang-festival-film-bandung-2017|work=[[Tempo.co]]|access-date=12 August 2023|editor-last=Tarigan|editor-first=Mitra|language=id|archive-date=21 September 2022|archive-url=https://web.archive.org/web/20220921192142/https://seleb.tempo.co/read/1026959/ini-pemenang-festival-film-bandung-2017|url-status=live}}</ref><ref>{{cite web|title=Daftar Lengkap Pemenang Festival Film Bandung ke-30 Tahun 2017|url=https://www.festivalfilmbandung.com/2017/10/daftar-lengkap-pemenang-festival-film.html|first=|last=|date=|accessdate=|language=id|website=Festival Film Bandung|archive-date=2023-03-23|archive-url=https://web.archive.org/web/20230323051017/https://www.festivalfilmbandung.com/2017/10/daftar-lengkap-pemenang-festival-film.html|url-status=live}}</ref> |- |[[Anugerah Maya (Indonesia)|Anugerah Naya]] |[[Anugerah Maya (Indonesia)#Kategori|Pengelulu Baru Pemadu Manah]] |{{won}} |align="center"|<ref>{{Cite web|last=Aldida|first=Vania Ika|date=18 December 2017|title=Daftar Lengkap Pemenang Piala Maya 2017|url=https://celebrity.okezone.com/read/2017/12/17/206/1831826/daftar-lengkap-pemenang-piala-maya-2017|website=[[Okezone]]|language=id-ID|access-date=13 August 2023|archive-date=28 April 2023|archive-url=https://web.archive.org/web/20230428205923/https://celebrity.okezone.com/read/2017/12/17/206/1831826/daftar-lengkap-pemenang-piala-maya-2017|url-status=live}}</ref> |- |2018 |Anugerah Filem Box Office Indonesia |Midul Mas (enggau [[Amanda Rawles]]) |align="center"|''Jailangkung'' |{{won}} | |- |2019 |Anugerah Maya |Pengelulu Pemadu Manah ungkup Watak Sukung |rowspan="2" align="center"|''Habibie & Ainun 3'' |{{nom}} |align="center"|<ref>{{Cite news|url=https://www.cnnindonesia.com/hiburan/20200123150737-220-468045/daftar-nominasi-piala-maya-2020|title=Daftar Nominasi Piala Maya 2020|date=23 January 2020|accessdate=4 August 2023|work=[[CNN Indonesia]]|language=id|archive-date=6 July 2022|archive-url=https://web.archive.org/web/20220706223415/https://www.cnnindonesia.com/hiburan/20200123150737-220-468045/daftar-nominasi-piala-maya-2020|url-status=live}}</ref><ref>{{cite web|url=https://kumparan.com/kumparanhits/film-dua-garis-biru-raih-4-penghargaan-di-piala-maya-8-1snw3bq643X|title=Film Dua Garis Biru Raih 4 Penghargaan di Piala Maya 8|date=9 February 2023|accessdate=9 August 2023|work=Kumparan|language=id|archive-date=15 January 2022|archive-url=https://web.archive.org/web/20220115062725/https://kumparan.com/kumparanhits/film-dua-garis-biru-raih-4-penghargaan-di-piala-maya-8-1snw3bq643X|url-status=live}}</ref> |- |2020 |Festival Filem Bandung |Pengelulu Sukung Dipuji |{{won}} |align="center"|<ref>{{Cite news|url= https://www.kompas.com/hype/read/2020/09/10/090717266/daftar-lengkap-nominasi-film-dan-narafilm-festival-film-bandung-2020|title= Daftar Lengkap Nominasi Film dan Narafilm Festival Film Bandung 2020|work= [[Kompas.com]]|access-date= 17 August 2023|last= Susanti|first= Reni|editor-last= Setuningsih|editor-first= Novianti|language= id|archive-date= 25 October 2020|archive-url= https://web.archive.org/web/20201025093153/https://www.kompas.com/hype/read/2020/09/10/090717266/daftar-lengkap-nominasi-film-dan-narafilm-festival-film-bandung-2020|url-status= live}}</ref><ref>{{cite web|title=Daftar Lengkap Pemenang Festival Film Bandung ke-33 Tahun 2020|url=https://www.festivalfilmbandung.com/2020/12/pemenang-festival-film-bandung-2020.html?m=1|first=|last=|date=|website=Festival Film Bandung|publisher=Forum Film Bandung|language=id|accessdate=6 August 2023|archive-date=10 December 2022|archive-url=https://web.archive.org/web/20221210143250/https://www.festivalfilmbandung.com/2020/12/pemenang-festival-film-bandung-2020.html?m=1|url-status=live}}</ref> |- |2021 |[[Festival Filem Indonesia]] |[[Anugerah Citra ungkup Pengelulu Pemadu Manah|Pengelulu Pemadu Manah]] |rowspan="2" align="center" |''[[Jakarta, City of Dreamers]]'' |rowspan="2" {{nom}} |align="center"| |- |rowspan="4"|2022 |Indonesian Journalist Film Festival |Best Actor – Drama |align="center"| |- |[[Anugerah Televisyen Asia]] |[[Anugerah Televisyen Asia#Kategori Digital|Pemerindang Tuai Laki Pemadu Manah – Digital]] |align="center"|''At Stake: the Series'' |{{nom}} |align="center"| |- |rowspan="2"|Anugerah Pengelulu Filem Indonesia |Pengelulu Sukung Pemadu Manah |rowspan="2" align="center"|''[[Aum!]]'' |rowspan="2" {{nom}} |rowspan="2" align="center"| |- |Pengelulu Sukung Pemadu Dikerindu |} == Kereban sanding == {{reflist}} == Laman web ke bukai == * {{IMDb name|8758347}} * {{instagram|jefrinichol}} [[Kategori:Pengada 1999]] [[Kategori:Orang idup]] [[Kategori:Pengelulu laku Indonesia kurun ke-21]] eilyrnrs9p0b32vt1trym56tv6irnon Gibrael Mawat 0 6677 19279 2026-06-10T10:38:09Z Song GK 9 Song GK telah memindahkan laman [[Gibrael Mawat]] ke [[Mawat]] 19279 wikitext text/x-wiki #LENCONG [[Mawat]] t010dnsk99wsamheqy2ut7s34disgid