มอดูล:Citation/CS1/Whitelist

------------------------------------------------------------------
Because a steady-state signal conveys no useful information, whitelist.basic_arguments list items can have three values:
	true - these parameters are valid and supported parameters
	false - these parameters are deprecated but still supported
	tracked - these parameters are valid and supported parameters tracked in an eponymous properties category
	nil - these parameters are no longer supported. remove entirely
	
local basic_arguments = {
	'accessdate' = true,
	'access-date' = true,
	'agency' = true,
	'archivedate' = true,
	'archive-date' = true,
	'archive-format' = true,
	'archiveurl' = true,
	'archive-url' = true,
	'article' = true,
	'article-format' = true,
	'article-url' = true,
	'article-url-access' = true,
	'arxiv' = true,															-- cite arxiv; here because allowed in cite ... as identifier
	'asin' = true,
	'ASIN' = true,
	'asin-tld' = true,
	'at' = true,
	'author' = true,
	'author-first' = true,
	'author-given' = true,
	'author-last' = true,
	'author-surname' = true,
	'authorlink' = true,
	'author-link' = true,
	'author-mask' = true,
	'authors' = true,
	'bibcode' = true,
	'bibcode-access' = true,
	'biorxiv' = true,															-- cite biorxiv; here because allowed in cite ... as identifier
	'chapter' = true,
	'chapter-format' = true,
	'chapter-url' = true,
	'chapter-url-access' = true,
	'citeseerx' = true,														-- cite citeseerx; here because allowed in cite ... as identifier
	'collaboration' = true,
	'contribution' = true,
	'contribution-format' = true,
	'contribution-url' = true,
	'contribution-url-access' = true,
	'contributor' = true,
	'contributor-first' = true,
	'contributor-given' = true,
	'contributor-last' = true,
	'contributor-surname' = true,
	'contributor-link' = true,
	'contributor-mask' = true,
	'date' = true,
	'department' = true,
	'df' = true,
	'dictionary' = true,
	'display-authors' = true,
	'display-contributors' = true,
	'display-editors' = true,
	'display-interviewers' = true,
	'display-subjects' = true,
	'display-translators' = true,
	'doi' = true,
	'DOI' = true,
	'doi-access' = true,
	'doi-broken-date' = true,
	'edition' = true,
	'editor' = true,
	'editor-first' = true,
	'editor-given' = true,
	'editor-last' = true,
	'editor-surname' = true,
	'editor-link' = true,
	'editor-mask' = true,
	'eissn' = true,
	'EISSN' = true,
	'encyclopaedia' = true,
	'encyclopedia' = true,
	'entry' = true,
	'entry-format' = true,
	'entry-url' = true,
	'entry-url-access' = true,
	'eprint' = true,															-- cite arxiv; here because allowed in cite ... as identifier
	'first' = true,
	'format' = true,
	'given' = true,
	'hdl' = true,
	'HDL' = true,
	'hdl-access' = true,
	'host' = true,															-- unique to certain templates?
	'id' = true,
	'ID' = true,
	'institution' = true,														-- constrain to cite thesis?
	'interviewer' = true,
	'interviewer-first' = true,
	'interviewer-given' = true,
	'interviewer-last' = true,
	'interviewer-surname' = true,
	'interviewer-link' = true,
	'interviewer-mask' = true,
	'isbn' = true,
	'ISBN' = true,
	'ismn' = true,
	'ISMN' = true,
	'issn' = true,
	'ISSN' = true,
	'issue' = true,
	'jfm' = true,
	'JFM' = true,
	'journal' = true,
	'jstor' = true,
	'JSTOR' = true,
	'jstor-access' = true,
	'lang' = true,
	'language' = true,
	'last' = true,
	'lay-date' = false,
	'lay-format' = false,
	'lay-source' = false,
	'lay-url' = false,
	'lccn' = true,
	'LCCN' = true,
	'location' = true,
	'magazine' = true,
	'medium' = true,
	'minutes' = true,															-- constrain to cite AV media and podcast?
	'mode' = true,
	'mr' = true,
	'MR' = true,
	'name-list-style' = true,
	'newspaper' = true,
	'no-pp' = true,
	'no-tracking' = true,
	'number' = true,
	'oclc' = true,
	'OCLC' = true,
	'ol' = true,
	'OL' = true,
	'ol-access' = true,
	'orig-date' = true,
	'origyear' = true,
	'orig-year' = true,
	'osti' = true,
	'OSTI' = true,
	'osti-access' = true,
	'others' = true,
	'p' = true,
	'page' = true,
	'pages' = true,
	'people' = true,
	'periodical' = true,
	'place' = true,
	'pmc' = true,
	'PMC' = true,
	'pmc-embargo-date' = true,
	'pmid' = true,
	'PMID' = true,
	'postscript' = true,
	'pp' = true,
	'publication-date' = true,
	'publication-place' = true,
	'publisher' = true,
	'quotation' = true,
	'quote' = true,
	'quote-page' = true,
	'quote-pages' = true,
	'ref' = true,
	'rfc' = true,
	'RFC' = true,
	'sbn' = true,
	'SBN' = true,
	'scale' = true,
	'script-article' = true,
	'script-chapter' = true,
	'script-contribution' = true,
	'script-entry' = true,
	'script-journal' = true,
	'script-magazine' = true,
	'script-newspaper' = true,
	'script-periodical' = true,
	'script-quote' = true,
	'script-section' = true,
	'script-title' = true,
	'script-website' = true,
	'script-work' = true,
	'section' = true,
	'section-format' = true,
	'section-url' = true,
	'section-url-access' = true,
	'series' = true,
	'ssrn' = true,															-- cite ssrn; these three here because allowed in cite ... as identifier
	'SSRN' = true,
	'ssrn-access' = true,
	'subject' = true,
	'subject-link' = true,
	'subject-mask' = true,
	'surname' = true,
	's2cid' = true,
	'S2CID' = true,
	's2cid-access' = true,
	'template-doc-demo' = true,
	'time' = true,															-- constrain to cite av media and podcast?
	'time-caption' = true,													-- constrain to cite av media and podcast?
	'title' = true,
	'title-link' = true,
	'translator' = true,
	'translator-first' = true,
	'translator-given' = true,
	'translator-last' = true,	
	'translator-surname' = true,
	'translator-link' = true,
	'translator-mask' = true,
	'trans-article' = true,
	'trans-chapter' = true,
	'trans-contribution' = true,
	'trans-entry' = true,
	'trans-journal' = true,
	'trans-magazine' = true,
	'trans-newspaper' = true,
	'trans-periodical' = true,
	'trans-quote' = true,
	'trans-section' = true,
	'trans-title' = true,
	'trans-website' = true,
	'trans-work' = true,
	'type' = true,
	'url' = true,
	'URL' = true,
	'url-access' = true,
	'url-status' = true,
	'vauthors' = true,
	'veditors' = true,
	'version' = true,
	'via' = true,
	'volume' = true,
	'website' = true,
	'work' = true,
	'year' = true,
	'zbl' = true,
	'ZBL' = true,
	}
local numbered_arguments = {
	'author#' = true,
	'author-first#' = true,
	'author#-first' = true,
	'author-given#' = true,
	'author#-given' = true,
	'author-last#' = true,
	'author#-last' = true,
	'author-surname#' = true,
	'author#-surname' = true,
	'author-link#' = true,
	'author#-link' = true,
	'authorlink#' = true,
	'author#link' = true,
	'author-mask#' = true,
	'author#-mask' = true,
	'contributor#' = true,
	'contributor-first#' = true,
	'contributor#-first' = true,
	'contributor-given#' = true,
	'contributor#-given' = true,
	'contributor-last#' = true,
	'contributor#-last' = true,
	'contributor-surname#' = true,
	'contributor#-surname' = true,
	'contributor-link#' = true,
	'contributor#-link' = true,
	'contributor-mask#' = true,
	'contributor#-mask' = true,
	'editor#' = true,
	'editor-first#' = true,
	'editor#-first' = true,
	'editor-given#' = true,
	'editor#-given' = true,
	'editor-last#' = true,
	'editor#-last' = true,
	'editor-surname#' = true,
	'editor#-surname' = true,
	'editor-link#' = true,
	'editor#-link' = true,
	'editor-mask#' = true,
	'editor#-mask' = true,
	'first#' = true,
	'given#' = true,
	'host#' = true,
	'interviewer#' = true,
	'interviewer-first#' = true,
	'interviewer#-first' = true,
	'interviewer-given#' = true,
	'interviewer#-given' = true,
	'interviewer-last#' = true,
	'interviewer#-last' = true,
	'interviewer-surname#' = true,
	'interviewer#-surname' = true,
	'interviewer-link#' = true,
	'interviewer#-link' = true,
	'interviewer-mask#' = true,
	'interviewer#-mask' = true,
	'last#' = true,
	'subject#' = true,
	'subject-link#' = true,
	'subject#-link' = true,
	'subject-mask#' = true,
	'subject#-mask' = true,
	'surname#' = true,
	'translator#' = true,
	'translator-first#' = true,
	'translator#-first' = true,
	'translator-given#' = true,
	'translator#-given' = true,
	'translator-last#' = true,
	'translator#-last' = true,
	'translator-surname#' = true,
	'translator#-surname' = true,
	'translator-link#' = true,
	'translator#-link' = true,
	'translator-mask#' = true,
	'translator#-mask' = true,
	}
--2 templates.
Same conventions for true/false/tracked/nil as above.
local preprint_arguments = {
	arxiv = {
		'arxiv' = true,														-- cite arxiv and arxiv identifiers
		'class' = true,
		'eprint' = true,														-- cite arxiv and arxiv identifiers
		},
	biorxiv = {
		'biorxiv' = true,
		},
	citeseerx = {
		'citeseerx' = true,
		},
	ssrn = {
		'ssrn' = true,
		'SSRN' = true,
		'ssrn-access' = true,
		},
	}
--2 templates.  The limited subset is defined here.
Same conventions for true/false/tracked/nil as above.
	
local limited_basic_arguments = {
	'at' = true,
	'author' = true,
	'author-first' = true,
	'author-given' = true,
	'author-last' = true,
	'author-surname' = true,
	'author-link' = true,
	'authorlink' = true,
	'author-mask' = true,
	'authors' = true,
	'collaboration' = true,
	'date' = true,
	'df' = true,
	'display-authors' = true,
	'first' = true,
	'given' = true,
	'language' = true,
	'last' = true,
	'mode' = true,
	'name-list-style' = true,
	'no-tracking' = true,
	'p' = true,
	'page' = true,
	'pages' = true,
	'postscript' = true,
	'pp' = true,
	'quotation' = true,
	'quote' = true,
	'ref' = true,
	'surname' = true,
	'template-doc-demo' = true,
	'title' = true,
	'trans-title' = true,
	'vauthors' = true,
	'year' = true,
	}
local limited_numbered_arguments = {
	'author#' = true,
	'author-first#' = true,
	'author#-first' = true,
	'author-given#' = true,
	'author#-given' = true,
	'author-last#' = true,
	'author#-last' = true,
	'author-surname#' = true,
	'author#-surname' = true,
	'author-link#' = true,
	'author#-link' = true,
	'authorlink#' = true,
	'author#link' = true,
	'author-mask#' = true,
	'author#-mask' = true,
	'first#' = true,
	'given#' = true,
	'last#' = true,
	'surname#' = true,
	}
--------------------------------------------------------------------------
Some templates have unique parameters.  Those templates and their unique parameters are listed here. Keys in this
table are the template's CitationClass parameter value
Same conventions for true/false/tracked/nil as above.
local unique_arguments = {
	'audio-visual' = {
		'transcript' = true,
		'transcript-format' = true,
		'transcript-url' = true,
		},
	conference = {
		'book-title' = true,
		'conference' = true,
		'conference-format' = true,
		'conference-url' = true,
		'event' = true,
		},
	episode = {
		'airdate' = true,
		'air-date' = true,
		'credits' = true,
		'episode-link' = true,												-- alias of |title-link=
		'network' = true,
		'season' = true,
		'series-link' = true,
		'series-no' = true,
		'series-number' = true,
		'station' = true,
		'transcript' = true,
		'transcript-format' = true,
		'transcripturl' = false,
		'transcript-url' = true,
		},
	mailinglist = {
		'mailing-list' = true,
		},
	map = {
		'cartography' = true,
		'inset' = true,
		'map' = true,
		'map-format' = true,
		'map-url' = true,
		'map-url-access' = true,
		'script-map' = true,
		'sections' = true,
		'sheet' = true,
		'sheets' = true,
		'trans-map' = true,
		},
	newsgroup = {
		'message-id' = true,
		'newsgroup' = true,
		},
	report = {
		'docket' = true,
		},
	serial = {
		'airdate' = true,
		'air-date' = true,
		'credits' = true,
		'episode' = true,														-- cite serial only TODO: make available to cite episode?
		'episode-link' = true,												-- alias of |title-link=
		'network' = true,
		'series-link' = true,
		'station' = true,
		},
	speech = {
		'conference' = true,
		'conference-format' = true,
		'conference-url' = true,
		'event' = true,
		},
	thesis = {
		'degree' = true,
		'docket' = true,
		},
	}
------------------------------------------------------------------------
gets a list of the templates from table t
local function template_list_get (t)
	local out = {};																-- a table for output
	for k, _ in pairs (t) do													-- spin through the table and collect the keys
		table.insert (out, k)													-- add each key to the output table
	end
	return out;																	-- and done
end
----------------------------------------------------------------------------
return {
	basic_arguments = basic_arguments,
	numbered_arguments = numbered_arguments,
	limited_basic_arguments = limited_basic_arguments,
	limited_numbered_arguments = limited_numbered_arguments,
	preprint_arguments = preprint_arguments,
	preprint_template_list = template_list_get (preprint_arguments),			-- make a template list from preprint_arguments{} table
	unique_arguments = unique_arguments,
	unique_param_template_list = template_list_get (unique_arguments),			-- make a template list from unique_arguments{} table
	};