Permanently protected module

Difference between revisions of "Module:Data"

From Yugipedia
Jump to: navigation, search
m (Use actual template names.)
(Adapt for Special:Diff/3920269. Cleaner.)
Line 1: Line 1:
 
-- <pre>
 
-- <pre>
 
-- @name Data
 
-- @name Data
-- @description Interface for Module:Database.
+
-- @description Interface for [[Module:Data/data]].
 
-- @notes Internal-only, so far.
 
-- @notes Internal-only, so far.
 
-- @author [[User:Becasita]]
 
-- @author [[User:Becasita]]
Line 14: Line 14:
 
-- Load data:
 
-- Load data:
 
--------------
 
--------------
local DATA = mw.loadData( 'Module:Database' );
+
local DATA = mw.loadData( 'Module:Data/data' );
 +
local NORM = DATA.normalize -- mw.loadData( 'Module:Data/normalize' );
 +
 
 +
-------------
 +
-- Constants:
 +
-------------
 +
-- @description
 +
--local WORD_DELIMITERS = "[%s%-_]";
  
 
---------------------
 
---------------------
Line 23: Line 30:
  
 
-- @name normalize
 
-- @name normalize
-- @parameter {*} «arg» - Argument to be normalize.
 
-- @parameter {function} «rules» - Normalization rules to apply.
 
 
-- @description Normalizes the input applying a specific set of rules.
 
-- @description Normalizes the input applying a specific set of rules.
 +
-- The rules are applied in case the input is of the type `string`
 +
-- @parameter {*} arg Argument to be normalized.
 +
-- @parameter {function} rules Normalization rules to apply.
 +
-- @return A generally normalized arg to be used to index the normalization table.
 
local function normalize( arg, rules )
 
local function normalize( arg, rules )
 
return type( arg ) == type( 'string' )
 
return type( arg ) == type( 'string' )
Line 33: Line 42:
 
end
 
end
  
-- @name normalizeGlobals
+
-- @name normalizeRegionLanguageMedium
-- @description Normalizes the input for:
+
-- @description Normalizes the input for region, language and medium,
-- rg, region, ln, language, ed, edition,
+
-- since there are dependencies between these.
-- rel, release, amRel, amRelease, r and rarity.
+
-- @parameter {*} arg Argument to be normalized.
local function normalizeGlobals( arg )
+
-- @return A normalized arg to be used to index the normalization table.
return normalize( arg, function( normalizedArg )
+
local function normalizeRegionLanguageMedium( arg )
return normalizedArg
 
:gsub(  ' rare$', '' ) -- Remove " rare" at the end (and with a space before it).
 
:gsub(      '%s', '' ) -- Remove whitespace.
 
:gsub(      '%-', '' ) -- Remove dashes.
 
:gsub(      '/', '' ) -- Remove slashes.
 
:gsub(      "'", '' ) -- Remove apostrophe.
 
:gsub(  'north', '' ) -- Remove "north".
 
:gsub( 'edition', '' ) -- Remove "edition".
 
;
 
end );
 
end
 
 
 
-- @name normalizeSeries
 
-- @description Normalizes the input for: ser and series.
 
local function normalizeSeries( arg )
 
 
return normalize( arg, function( normalizedArg )
 
return normalize( arg, function( normalizedArg )
 
return normalizedArg
 
return normalizedArg
:gsub(     '%s', '' ) -- Remove whitespace.
+
:gsub( "[%s%-_'!]", '' ) -- Remove a bunch of commonly used characters.
:gsub(      '%-', '' ) -- Remove dashes.
+
:gsub(     'north', '' ) -- Remove "north" (for region and language).
:gsub(       '/', '' ) -- Remove slashes.
+
:gsub(   'yugioh', '' ) -- Remove "yugioh" (becuase of the medium).
:gsub(       ':', '' ) -- Remove semi-colon.
+
:gsub( 'cardgame', '' ) -- Remove "cardgame" (because of the medium).
:gsub(       '!', '' ) -- Remove exclamation mark.
 
:gsub(      "'", '' ) -- Remove apostrophe.
 
:gsub(     'the', '' ) -- Remove "the".
 
:gsub(     'ygo', '' )
 
:gsub(  'yugioh', '' )
 
 
;
 
;
 
end );
 
end );
 
end
 
end
  
-- @name normalizeCardGalleryTypes
+
-- @name normalizeRarity
-- @description Normalizes the input for: CardGallery.types.
+
-- @description Normalizes the input for rarity.
local function normalizeCardGalleryTypes( arg )
+
-- @parameter {*} arg Argument to be normalized.
 +
-- @return A normalized arg to be used to index the normalization table.
 +
--[[local function normalizeRarity( arg )
 
return normalize( arg, function( normalizedArg )
 
return normalize( arg, function( normalizedArg )
return normalizedArg
+
return NORM.rarity[ normalizedArg
:gsub(   '%s', '' ) -- Remove whitespace.
+
:gsub(   ' rare$', '' ) -- Remove " rare" at the end (and with a space before it).
:gsub(   '%-', '' ) -- Remove dashes.
+
:gsub( "[%s%-_']", '' ) -- Remove a bunch of commonly used characters.
:gsub(     's', '' ) -- Remove "s".
+
];
:gsub( 'video', '' ) -- Remove "video".
 
;
 
 
end );
 
end );
end
+
end--]]
  
 
-----------------------
 
-----------------------
 
-- Methods (Interface):
 
-- Methods (Interface):
 
-----------------------
 
-----------------------
-- @name getRg
 
-- @parameter {string} «arg»
 
-- @return {string|nil} Region index.
 
-- @description Gets the region index for «arg». «nil» if not found.
 
function D.getRg( arg )
 
return DATA.rg[ normalizeGlobals( arg ) ];
 
end
 
 
 
-- @name getRegion
 
-- @name getRegion
-- @parameter {string} «arg»
+
-- @description Gets the region for `arg`. `nil` if not found.
-- @return {string|nil} Region name.
+
-- @parameter {string} arg
-- @description Gets the region name for «arg». «nil» if not found.
+
-- @return {table|nil} A region or nil.
 
function D.getRegion( arg )
 
function D.getRegion( arg )
return DATA.region[ D.getRg( arg ) ];
+
return DATA.region[
end
+
NORM.region[
 
+
normalizeRegionLanguageMedium( arg )
-- @name getLn
+
]
-- @parameter {string} «arg»
+
];
-- @return {string|nil} Language index.
 
-- @description Gets the language index for «arg». «nil» if not found.
 
function D.getLn( arg )
 
return DATA.ln[ D.getRg( arg ) ];
 
 
end
 
end
  
 
-- @name getLanguage
 
-- @name getLanguage
-- @parameter {string} «arg»
+
-- @description Gets the language for `arg`. `nil` if not found.
-- @return {string|nil} Language name.
+
-- @parameter {string} arg
-- @description Gets the language name for «arg». «nil» if not found.
+
-- @return {table|nil} A language or nil.
 
function D.getLanguage( arg )
 
function D.getLanguage( arg )
return DATA.language[ D.getLn( arg ) ];
+
return DATA.language[
 +
NORM.language[
 +
NORM.region[
 +
normalizeRegionLanguageMedium( arg )
 +
]
 +
]
 +
];
 
end
 
end
  
-- @name getEd
+
-- @name getMedium
-- @parameter {string} «arg»
+
-- @description Gets the language for `arg`. `nil` if not found.
-- @return {string|nil} Edition abbreviation.
+
-- @parameter {string} arg
-- @description Gets the edition abbreviation for «arg». «nil» if not found.
+
-- @return {table|nil} A language or nil.
function D.getEd( arg )
+
function D.getMedium( arg )
return DATA.ed[ normalizeGlobals( arg ) ];
+
local normalizedArg = normalizeRegionLanguageMedium( arg );
 +
return DATA.medium[
 +
NORM.medium[
 +
NORM.region[
 +
normalizedArg
 +
] or normalizedArg
 +
]
 +
];
 
end
 
end
  
 
-- @name getEdition
 
-- @name getEdition
-- @parameter {string} «arg»
+
-- @description Gets the edition for `arg`. `nil` if not found.
-- @return {string|nil} Edition name.
+
-- @parameter {string} arg
-- @description Gets the edition name for «arg». «nil» if not found.
+
-- @return {string|nil} An edition or nil.
 
function D.getEdition( arg )
 
function D.getEdition( arg )
return DATA.edition[ D.getEd( arg ) ];
+
return DATA.edition[
end
+
normalize( arg, function( normalizedArg )
 
+
return NORM.edition[ normalizedArg
-- @name getRel
+
:gsub( '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
-- @parameter {string} «arg»
+
:gsub( 'edition', '' ) -- Redundant.
-- @return {string|nil} Release abbreviation.
+
];
-- @description Gets the release abbreviation for «arg». «nil» if not found.
+
end )
function D.getRel( arg )
+
];
return DATA.rel[ normalizeGlobals( arg ) ];
 
 
end
 
end
  
 
-- @name getRelease
 
-- @name getRelease
-- @parameter {string} «arg»
+
-- @description Gets the release for `arg`. `nil` if not found.
-- @return {string|nil} Release name.
+
-- @parameter {string} arg
-- @description Gets the release name for «arg». «nil» if not found.
+
-- @return {string|nil} A release or `nil`.
 
function D.getRelease( arg )
 
function D.getRelease( arg )
return DATA.release[ D.getRel( arg ) ];
+
return DATA.release[
end
+
normalize( arg, function( normalizedArg )
 
+
return NORM.release[ normalizedArg
-- @name getAnimeMangaRel
+
:gsub( '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
-- @parameter {string} «arg»
+
:gsub(    'case', '' ) -- for "Case Topper".
-- @return {string|nil} Anime and manga release abbreviation.
+
:gsub(    'card', '' ) -- for "Giant Card".
-- @description Gets the anime and manga release abbreviation for «arg». «nil» if not found.
+
:gsub( 'official', '' ) -- For "Official Proxy".
function D.getAnimeMangaRel( arg )
+
];
return DATA.amRel[ normalizeGlobals( arg ) ];
+
end )
end
+
];
 
 
-- @name getAnimeMangaRelease
 
-- @parameter {string} «arg»
 
-- @return {string|nil} Anime and manga release name.
 
-- @description Gets the anime and manga release name for «arg». «nil» if not found.
 
function D.getAnimeMangaRelease( arg )
 
return DATA.amRelease[ D.getAnimeMangaRel( arg ) ];
 
end
 
 
 
-- @name getR
 
-- @parameter {string} «arg»
 
-- @return {string|nil} Rarity abbreviation.
 
-- @description Gets the rarity abbreviation for «arg». «nil» if not found.
 
function D.getR( arg )
 
return DATA.r[ normalizeGlobals( arg ) ];
 
 
end
 
end
  
 
-- @name getRarity
 
-- @name getRarity
-- @parameter {string} «arg»
+
-- @description Gets the rarity for `arg`. `nil` if not found.
-- @return {string|nil} Rarity name.
+
-- @parameter {string} arg
-- @description Gets the rarity name for «arg». «nil» if not found.
+
-- @return {string|nil} A rarity or `nil`.
 
function D.getRarity( arg )
 
function D.getRarity( arg )
return DATA.rarity[ D.getR( arg ) ];
+
return DATA.rarity[
 +
normalize( arg, function( normalizedArg )
 +
return NORM.rarity[ normalizedArg
 +
:gsub(  ' rare$', '' ) -- Remove " rare" at the end (and with a space before it).
 +
:gsub( "[%s%-_']", '' ) -- Remove a bunch of commonly used characters.
 +
];
 +
end )
 +
];
 
end
 
end
  
-- @name getAnimeSer
+
---------------
-- @parameter {string} «arg»
+
-- Anime stuff:
-- @return {string|nil} Anime series code.
+
---------------
-- @description Gets the anime series code for «arg». «nil» if not found.
+
-- @name getAnimeRelease
function D.getAnimeSer( arg )
+
-- @description Gets the anime release for `arg`. `nil` if not found.
return DATA.ser.anime[ normalizeSeries( arg ) ];
+
-- @parameter {string} arg
 +
-- @return {string|nil} Anime release or `nil`.
 +
function D.getAnimeRelease( arg )
 +
return DATA.anime.release[
 +
normalize( arg, function( normalizedArg )
 +
return NORM.anime.release[ normalizedArg
 +
:gsub( '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
 +
];
 +
end )
 +
];
 
end
 
end
  
 
-- @name getAnimeSeries
 
-- @name getAnimeSeries
-- @parameter {string} «arg»
+
-- @description Gets the anime series name for `arg`. `nil` if not found.
-- @return {string|nil} Anime series name.
+
-- @parameter {string} arg
-- @description Gets the anime series name for «arg». «nil» if not found.
+
-- @return {string|nil} Anime series or `nil`.
 
function D.getAnimeSeries( arg )
 
function D.getAnimeSeries( arg )
return DATA.series.anime[ D.getAnimeSer( arg ) ];
+
return DATA.anime.series[
end
+
normalize( arg, function( normalizedArg )
 
+
return NORM.anime.series[ normalizedArg
-- @name getMangaSer
+
:gsub( "[%s%-_'/:!]", '' ) -- Remove a bunch of commonly used characters.
-- @parameter {string} «arg»
+
:gsub(        'the', '' )
-- @return {string|nil} Manga series code.
+
:gsub(         'ygo', '' )  
-- @description Gets the manga series code for «arg». «nil» if not found.
+
:gsub(     'yugioh', '' )
function D.getMangaSer( arg )
+
];
return DATA.ser.manga[ normalizeSeries( arg ) ];
+
end )
end
+
];
 
 
-- @name getMangaSeries
 
-- @parameter {string} «arg»
 
-- @return {string|nil} Manga series name.
 
-- @description Gets the manga series name for «arg». «nil» if not found.
 
function D.getMangaSeries( arg )
 
return DATA.series.manga[ D.getMangaSer( arg ) ];
 
 
end
 
end
  
 +
-------------------
 +
-- Templates stuff:
 +
-------------------
 
-- @name getCardGalleryType
 
-- @name getCardGalleryType
-- @parameter {string} «arg»
+
-- @description Gets the `{{Card gallery}}` type for `arg`. `nil` if not found.
-- @return {string|nil} {{Card gallery}} type.
+
-- @parameter {string} arg
-- @description Gets the {{Card gallery}} type for «arg». «nil» if not found.
+
-- @return {string|nil} `{{Card gallery}}` possible `{{{type}}}`s.
 
function D.getCardGalleryType( arg )
 
function D.getCardGalleryType( arg )
return DATA['Card gallery'].types[ normalizeCardGalleryTypes( arg ) ];
+
return DATA.templates[ 'Card gallery' ].types[
 +
normalize( arg, function( normalizedArg )
 +
return normalizedArg
 +
:gsub( "[%s%-s]", '' ) -- Remove a bunch of commonly used characters.
 +
:gsub(  'video', '' ) -- Remove "video".
 +
;
 +
end )
 +
];
 
end
 
end
  
Line 224: Line 217:
 
-- Return:
 
-- Return:
 
----------
 
----------
 +
-- @exports `D`: Interface to interact with [[Module:Data/data]].
 
return D;
 
return D;
 
-- </pre>
 
-- </pre>

Revision as of 14:04, 10 August 2018

-- <pre>
-- @name Data
-- @description Interface for [[Module:Data/data]].
-- @notes Internal-only, so far.
-- @author [[User:Becasita]]
-- @contact [[User talk:Becasita]]

-------------------
-- Export variable:
-------------------
local D = {};

--------------
-- Load data:
--------------
local DATA = mw.loadData( 'Module:Data/data' );
local NORM = DATA.normalize -- mw.loadData( 'Module:Data/normalize' );

-------------
-- Constants:
-------------
-- @description
--local WORD_DELIMITERS = "[%s%-_]";

---------------------
-- Utility functions:
---------------------
-- mw functions:
local trim = mw.text.trim;

-- @name normalize
-- @description Normalizes the input applying a specific set of rules.
-- The rules are applied in case the input is of the type `string`
-- @parameter {*} arg Argument to be normalized.
-- @parameter {function} rules Normalization rules to apply.
-- @return A generally normalized arg to be used to index the normalization table.
local function normalize( arg, rules )
	return type( arg ) == type( 'string' )
		and rules( trim( arg ):lower() )
		or nil
	;
end

-- @name normalizeRegionLanguageMedium
-- @description Normalizes the input for region, language and medium,
-- since there are dependencies between these.
-- @parameter {*} arg Argument to be normalized.
-- @return A normalized arg to be used to index the normalization table.
local function normalizeRegionLanguageMedium( arg )
	return normalize( arg, function( normalizedArg )
		return normalizedArg
			:gsub( "[%s%-_'!]", '' ) -- Remove a bunch of commonly used characters.
			:gsub(     'north', '' ) -- Remove "north" (for region and language).
			:gsub(    'yugioh', '' ) -- Remove "yugioh" (becuase of the medium).
			:gsub(  'cardgame', '' ) -- Remove "cardgame" (because of the medium).
		;
	end );
end

-- @name normalizeRarity
-- @description Normalizes the input for rarity.
-- @parameter {*} arg Argument to be normalized.
-- @return A normalized arg to be used to index the normalization table.
--[[local function normalizeRarity( arg )
	return normalize( arg, function( normalizedArg )
		return NORM.rarity[ normalizedArg
			:gsub(   ' rare$', '' ) -- Remove " rare" at the end (and with a space before it).
			:gsub( "[%s%-_']", '' ) -- Remove a bunch of commonly used characters.
		];
	end );
end--]]

-----------------------
-- Methods (Interface):
-----------------------
-- @name getRegion
-- @description Gets the region for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {table|nil} A region or nil.
function D.getRegion( arg )
	return DATA.region[
		NORM.region[
			normalizeRegionLanguageMedium( arg )
		]
	];
end

-- @name getLanguage
-- @description Gets the language for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {table|nil} A language or nil.
function D.getLanguage( arg )
	return DATA.language[
		NORM.language[
			NORM.region[
				normalizeRegionLanguageMedium( arg )
			]
		]
	];
end

-- @name getMedium
-- @description Gets the language for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {table|nil} A language or nil.
function D.getMedium( arg )
	local normalizedArg = normalizeRegionLanguageMedium( arg );
	return DATA.medium[
		NORM.medium[
			NORM.region[
				normalizedArg
			] or normalizedArg
		]
	];
end

-- @name getEdition
-- @description Gets the edition for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} An edition or nil.
function D.getEdition( arg )
	return DATA.edition[
		normalize( arg, function( normalizedArg )
			return NORM.edition[ normalizedArg
				:gsub( '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
				:gsub( 'edition', '' ) -- Redundant.
			];
		end )
	];
end

-- @name getRelease
-- @description Gets the release for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} A release or `nil`.
function D.getRelease( arg )
	return DATA.release[
		normalize( arg, function( normalizedArg )
			return NORM.release[ normalizedArg
				:gsub(  '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
				:gsub(     'case', '' ) -- for "Case Topper".
				:gsub(     'card', '' ) -- for "Giant Card".
				:gsub( 'official', '' ) -- For "Official Proxy".
			];
		end )
	];
end

-- @name getRarity
-- @description Gets the rarity for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} A rarity or `nil`.
function D.getRarity( arg )
	return DATA.rarity[
		normalize( arg, function( normalizedArg )
			return NORM.rarity[ normalizedArg
				:gsub(   ' rare$', '' ) -- Remove " rare" at the end (and with a space before it).
				:gsub( "[%s%-_']", '' ) -- Remove a bunch of commonly used characters.
			];
		end )
	];
end

---------------
-- Anime stuff:
---------------
-- @name getAnimeRelease
-- @description Gets the anime release for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} Anime release or `nil`.
function D.getAnimeRelease( arg )
	return DATA.anime.release[
		normalize( arg, function( normalizedArg )
			return NORM.anime.release[ normalizedArg
				:gsub( '[%s%-_]', '' ) -- Remove a bunch of commonly used characters.
			];
		end )
	];
end

-- @name getAnimeSeries
-- @description Gets the anime series name for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} Anime series or `nil`.
function D.getAnimeSeries( arg )
	return DATA.anime.series[
		normalize( arg, function( normalizedArg )
			return NORM.anime.series[ normalizedArg
				:gsub( "[%s%-_'/:!]", '' ) -- Remove a bunch of commonly used characters.
				:gsub(         'the', '' )
				:gsub(         'ygo', '' ) 
				:gsub(      'yugioh', '' )
			];
		end )
	];
end

-------------------
-- Templates stuff:
-------------------
-- @name getCardGalleryType
-- @description Gets the `{{Card gallery}}` type for `arg`. `nil` if not found.
-- @parameter {string} arg
-- @return {string|nil} `{{Card gallery}}` possible `{{{type}}}`s.
function D.getCardGalleryType( arg )
	return DATA.templates[ 'Card gallery' ].types[
		normalize( arg, function( normalizedArg )
			return normalizedArg
				:gsub( "[%s%-s]", '' ) -- Remove a bunch of commonly used characters.
				:gsub(   'video', '' ) -- Remove "video".
			;
		end )
	];
end

----------
-- Return:
----------
-- @exports `D`: Interface to interact with [[Module:Data/data]].
return D;
-- </pre>