Module documentation
- Implements templates {{GHS phrases}} (talk) (tests), {{H-phrases}} and {{P-phrases}}.
List all phrases
List of H-phrases
Code | Phrase |
---|---|
H200 | Unstable explosive |
H201 | Explosive: mass explosion hazard |
H202 | Explosive: severe projection hazard |
H203 | Explosive: fire, blast or projection hazard |
H204 | Fire or projection hazard |
H205 | May mass explode in fire |
H206 | Fire, blast or projection hazard: increased risk of explosion if desensitizing agent is reduced |
H207 | Fire or projection hazard; increased risk of explosion if desensitizing agent is reduced |
H208 | Fire hazard; increased risk of explosion if desensitizing agent is reduced |
H209 | Explosive |
H210 | Very explosive |
H211 | May be sensitive |
H220 | Extremely flammable gas |
H221 | Flammable gas |
H222 | Extremely flammable material |
H223 | Flammable material |
H224 | Extremely flammable liquid and vapour |
H225 | Highly flammable liquid and vapour |
H226 | Flammable liquid and vapour |
H227 | Combustible liquid |
H228 | Flammable solid |
H229 | Pressurized container: may burst if heated |
H230 | May react explosively even in the absence of air |
H231 | May react explosively even in the absence of air at elevated pressure and/or temperature |
H232 | May ignite spontaneously if exposed to air |
H240 | Heating may cause an explosion |
H241 | Heating may cause a fire or explosion |
H242 | Heating may cause a fire |
H250 | Catches fire spontaneously if exposed to air |
H251 | Self-heating: may catch fire |
H252 | Self-heating in large quantities: may catch fire |
H260 | In contact with water releases flammable gases which may ignite spontaneously |
H261 | In contact with water releases flammable gas |
H270 | May cause or intensify fire: oxidizer |
H271 | May cause fire or explosion: strong oxidizer |
H272 | May intensify fire: oxidizer |
H280 | Contains gas under pressure: may explode if heated |
H281 | Contains refrigerated gas: may cause cryogenic burns or injury |
H282 | Extremely flammable chemical under pressure: May explode if heated |
H283 | Flammable chemical under pressure: May explode if heated |
H284 | Chemical under pressure: May explode if heated |
H290 | May be corrosive to metals |
H300 | Fatal if swallowed |
H300+H310 | Fatal if swallowed or in contact with skin |
H300+H310+H330 | Fatal if swallowed, in contact with skin or if inhaled |
H300+H330 | Fatal if swallowed or if inhaled |
H301 | Toxic if swallowed |
H301+H311 | Toxic if swallowed or in contact with skin |
H301+H311+H331 | Toxic if swallowed, in contact with skin or if inhaled |
H301+H331 | Toxic if swallowed or if inhaled |
H302 | Harmful if swallowed |
H302+H312 | Harmful if swallowed or in contact with skin |
H302+H312+H332 | Harmful if swallowed, in contact with skin or if inhaled |
H302+H332 | Harmful if swallowed or inhaled |
H303 | May be harmful if swallowed |
H303+H313 | May be harmful if swallowed or in contact with skin |
H303+H313+H333 | May be harmful if swallowed, in contact with skin or if inhaled |
H303+H333 | May be harmful if swallowed or if inhaled |
H304 | May be fatal if swallowed and enters airways |
H305 | May be harmful if swallowed and enters airways |
H310 | Fatal in contact with skin |
H310+H330 | Fatal in contact with skin or if inhaled |
H311 | Toxic in contact with skin |
H311+H331 | Toxic in contact with skin or if inhaled |
H312 | Harmful in contact with skin |
H312+H332 | Harmful in contact with skin or if inhaled |
H313 | May be harmful in contact with skin |
H313+H333 | May be harmful in contact with skin or if inhaled |
H314 | Causes severe skin burns and eye damage |
H315 | Causes skin irritation |
H315+H320 | Causes skin and eye irritation |
H316 | Causes mild skin irritation |
H317 | May cause an allergic skin reaction |
H318 | Causes serious eye damage |
H319 | Causes serious eye irritation |
H320 | Causes eye irritation |
H330 | Fatal if inhaled |
H331 | Toxic if inhaled |
H332 | Harmful if inhaled |
H333 | May be harmful if inhaled |
H334 | May cause allergy or asthma symptoms of breathing difficulties if inhaled |
H335 | May cause respiratory irritation |
H336 | May cause drowsiness or dizziness |
H340 | May cause genetic defects |
H341 | Suspected of causing genetic defects |
H350 | May cause cancer |
H350i | May cause cancer by inhalation |
H351 | Suspected of causing cancer |
H360 | May damage fertility or the unborn child |
H360D | May damage the unborn child |
H360Df | May damage the unborn child. Suspected of damaging fertility. |
H360F | May damage fertility |
H360FD | May damage fertility. May damage the unborn child. |
H360Fd | May damage fertility. Suspected of damaging the unborn child. |
H361 | Suspected of damaging fertility or the unborn child |
H361d | Suspected of damaging the unborn child |
H361f | Suspected of damaging fertility |
H361fd | Suspected of damaging fertility. Suspected of damaging the unborn child. |
H362 | May cause harm to breast-fed children |
H370 | Causes damage to organs |
H371 | May cause damage to organs |
H372 | Causes damage to organs through prolonged or repeated exposure |
H373 | May cause damage to organs through prolonged or repeated exposure |
H400 | Very toxic to aquatic life |
H401 | Toxic to aquatic life |
H402 | Harmful to aquatic life |
H410 | Very toxic to aquatic life with long lasting effects |
H411 | Toxic to aquatic life with long lasting effects |
H412 | Harmful to aquatic life with long lasting effects |
H413 | May cause long lasting harmful effects to aquatic life |
H420 | Harms public health and the environment by destroying ozone in the upper atmosphere |
H441 | Very toxic to terrestrial invertebrates |
List of P-phrases
Code | Phrase |
---|---|
P103 | Read label before use. |
P201 | Obtain special instructions before use. |
P202 | Do not handle until all safety precautions have been read and understood. |
P203 | Obtain, read and follow all safety instructions before use. |
P210 | Keep away from heat, hot surfaces, sparks, open flames and other ignition sources. No smoking. |
P211 | Do not spray on an open flame or other ignition source. |
P212 | Avoid heating under confinement or reduction of the desensitized agent. |
P220 | Keep/Store away from clothing/.../combustible materials. |
P221 | Take any precaution to avoid mixing with combustibles. |
P222 | Do not allow contact with air. |
P223 | Do not allow contact with water. |
P230 | Keep wetted with ... |
P231 | Handle and store contents under inert gas/... |
P231+P232 | Handle and store contents under inert gas. Protect from moisture |
P232 | Protect from moisture. |
P233 | Keep container tightly closed. |
P234 | Keep only in original container/packaging. |
P235 | Keep cool. |
P235+P410 | Keep cool. Protect from sunlight. |
P236 | Keep only in original packaging; division .. in the transport configuraion. |
P240 | Ground and bond container and receiving equipment. |
P241 | Use explosion-proof electrical/ventilating/light/.../equipment. |
P242 | Use only non-sparking tools. |
P243 | Take precautionary measures to prevent static discharges. |
P244 | Keep valves and fittings free from grease and oil |
P250 | Do not subject to grinding/shock/.../friction. |
P251 | Pressurized container – Do not pierce or burn, even after use. |
P260 | Do not breathe dust/fume/gas/mist/vapours/spray. |
P261 | Avoid breathing dust/fume/gas/mist/vapours/spray. |
P262 | Do not get in eyes, on skin, or on clothing. |
P263 | Avoid contact during pregnancy and while nursing. |
P264 | Wash ... thoroughly after handling. |
P264+P265 | Wash ... thoroughly after handling. Do not touch eyes. |
P265 | Do not touch eyes. |
P270 | Do not eat, drink or smoke when using this product. |
P271 | Use only outdoors or in a well-ventilated area. |
P272 | Contaminated work clothing should not be allowed out of the workplace. |
P273 | Avoid release to the environment. |
P280 | Wear protective gloves/protective clothing/eye protection/face protection. |
P281 | Use personal protective equipment as required. |
P282 | Wear cold insulating gloves and either face shield or eye protection. |
P283 | Wear fire resistant or flame retardant clothing. |
P284 | Wear respiratory protection. |
P285 | In case of inadequate ventilation wear respiratory protection. |
P301 | IF SWALLOWED: |
P301+P310 | IF SWALLOWED: Immediately call a POISON CENTER or doctor/physician. |
P301+P310+P330 | IF SWALLOWED: Immediately call a POISON CENTER or doctor/physician. Rinse mouth. |
P301+P312 | IF SWALLOWED: Call a POISON CENTER or doctor/physician if you feel unwell. |
P301+P312+P330 | IF SWALLOWED: Call a POISON CENTER or doctor/physician if you feel unwell. Rinse mouth. |
P301+P316 | IF SWALLOWED: Get immediate emergency medical help. |
P301+P317 | IF SWALLOWED: IF SWALLOWED: Get medical help. |
P301+P330+P331 | IF SWALLOWED: Rinse mouth. Do NOT induce vomiting. |
P302 | IF ON SKIN: |
P302+P312 | IF ON SKIN: Call a POISON CENTER or doctor/physician if you feel unwell. |
P302+P317 | IF ON SKIN: Get medical help. |
P302+P334 | IF ON SKIN: Immerse in cool water or wrap in wet bandages. |
P302+P335+P334 | IF ON SKIN: Brush off loose particles from skin. Immerse in cool water or wrap in wet bandages. |
P302+P350 | IF ON SKIN: Gently wash with soap and water. |
P302+P352 | IF ON SKIN: Wash with soap and water. |
P302+P352+P312 | IF ON SKIN: Wash with soap and water. Call a POISON CENTER or doctor/physician if you feel unwell. |
P302+P353 | IF ON SKIN: Rinse skin with water [or shower]. |
P302+P361+P354 | IF ON SKIN: Take off Immediately all contaminated clothing. Immediately rinse with water for several minutes. |
P303 | IF ON SKIN (or hair): |
P303+P361+P353 | IF ON SKIN (or hair): Remove/Take off immediately all contaminated clothing. Rinse skin with water [or shower]. |
P303+P361+P353+P315 | IF ON SKIN (or hair): Remove/Take off immediately all contaminated clothing. Rinse skin with water [or shower]. Get immediate medical advice/attention. |
P304 | IF INHALED: |
P304+P312 | IF INHALED: Call a POISON CENTER or doctor/physician if you feel unwell. |
P304+P317 | IF INHALED: Get medical help. |
P304+P340 | IF INHALED: Remove victim to fresh air and keep at rest in a position comfortable for breathing. |
P304+P340+P310 | IF INHALED: Remove victim to fresh air and keep at rest in a position comfortable for breathing. Immediately call a POISON CENTER or doctor/physician. |
P304+P340+P311 | IF INHALED: Remove victim to fresh air and keep at rest in a position comfortable for breathing. Call a POISON CENTER or doctor/physician. |
P304+P340+P312 | IF INHALED: Remove victim to fresh air and keep at rest in a position comfortable for breathing. Call a POISON CENTER or doctor/physician if you feel unwell. |
P304+P340+P315 | IF INHALED: Remove victim to fresh air and keep at rest in a position comfortable for breathing. Get immediate medical advice/attention. |
P304+P341 | IF INHALED: If breathing is difficult, remove victim to fresh air and keep at rest in a position comfortable for breathing. |
P305 | IF IN EYES: |
P305+P351+P338+P310 | IF IN EYES: Rinse continuously with water for several minutes. Remove contact lenses if present and easy to do. Continue rinsing. Immediately call a POISON CENTER or doctor/physician. |
P305+P351+P338+P315 | IF IN EYES: Rinse cautiously with water for several minutes. Remove contact lenses if present and easy to do. Continue rinsing. Get immediate medical advice/attention. |
P305+P354+P338 | IF IN EYES: Immediately rinse with water for several minutes. Remove contact lenses if present and easy to do. Continue rinsing. |
P306 | IF ON CLOTHING: |
P306+P360 | IF ON CLOTHING: Rinse immediately contaminated clothing and skin with plenty of water before removing clothes. |
P307 | IF exposed: |
P307+P311 | IF exposed: Call a POISON CENTER or doctor/physician. |
P308 | IF exposed or concerned: |
P308+P310 | IF exposed or concerned: Immediately call a POISON CENTER or doctor/physician. |
P308+P311 | IF exposed or concerned: Call a POISON CENTER or doctor/physician. |
P308+P313 | IF exposed or concerned: Get medical advice/attention. |
P308+P316 | IF exposed or concerned: Get emergency medical help immediately. |
P308+P360 | IF ON CLOTHING: Rinse Immediately contaminated CLOTHING and SKIN with plenty of water before removing clothes. |
P309 | IF exposed or you feel unwell: |
P309+P311 | IF exposed or you feel unwell: Call a POISON CENTER or doctor/physician. |
P310 | Immediately call a POISON CENTER or doctor/physician. |
P311 | Call a POISON CENTER or doctor/physician. |
P312 | Call a POISON CENTER or doctor/physician if you feel unwell. |
P313 | Get medical advice/attention. |
P314 | Get Medical advice/attention if you feel unwell. |
P315 | Get immediate medical advice/attention. |
P316 | Get immediate emergency medical help. |
P317 | Get emergency medical help. |
P318 | If exposed or concerned, get medical advice. |
P319 | Get medical help if you feel unwell. |
P320 | Specific treatment is urgent (see ... on this label). |
P321 | Specific treatment (see ... on this label). |
P322 | Specific measures (see ... on this label). |
P330 | Rinse mouth. |
P331 | Do NOT induce vomiting. |
P332 | If skin irritation occurs: |
P332+P313 | If skin irritation occurs: Get medical advice/attention. |
P332+P317 | If skin irritation occurs: Get medical help. |
P333 | If skin irritation or a rash occurs: |
P333+P313 | If skin irritation or a rash occurs: Get medical advice/attention. |
P333+P317 | If skin irritation or rash occurs: Get medical help. |
P334 | Immerse in cool water [or wrap in wet bandages]. |
P335 | Brush off loose particles from skin. |
P335+P334 | Brush off loose particles from skin. Immerse in cool water/wrap in wet bandages. |
P336 | Thaw frosted parts with lukewarm water. Do not rub affected areas. |
P336+P315 | Thaw frosted parts with lukewarm water. Do not rub affected area. Get immediate medical advice/attention. |
P336+P317 | Immediately thaw frosted parts with lukewarm water. Do not rub affected area. Get medical help. |
P337 | If eye irritation persists: |
P337+P313 | If eye irritation persists: Get medical advice/attention. |
P337+P317 | If eye irritation persists: Get medical help. |
P338 | Remove contact lenses if present and easy to do. Continue rinsing. |
P340 | Remove victim to fresh air and keep at rest in a position comfortable for breathing. |
P341 | If breathing is difficult, remove victim to fresh air and keep at rest in a position comfortable for breathing. |
P342 | If experiencing respiratory symptoms: |
P342+P311 | If experiencing respiratory symptoms: Call a POISON CENTER or doctor/physician. |
P342+P316 | If experiencing respiratory symptoms: Get emergence medical help immediately. |
P350 | Gently wash with soap and water. |
P351 | Rinse cautiously with water for several minutes. |
P352 | Wash with plenty of water. |
P353 | Rinse skin with water [or shower]. |
P354 | Immediately rinse with water for several minutes. |
P360 | Rinse immediately contaminated clothing and skin with plenty of water before removing clothes. |
P361 | Remove/Take off immediately all contaminated clothing. |
P361+P364 | Take off immediately all contaminated clothing and wash it before reuse. |
P362 | Take off contaminated clothing. |
P362+P364 | Take off contaminated clothing and wash it before reuse. |
P363 | Wash contaminated clothing before reuse. |
P364 | And wash it before reuse. |
P370 | In case of fire: |
P370+P372+P380+P373 | In case of fire: Explosion risk. Evacuate area. DO NOT fight fire when fire reaches explosives. |
P370+P376 | In case of fire: Stop leak if safe to do so. |
P370+P378 | In case of fire: Use ... to extinguish. |
P370+P380 | In case of fire: Evacuate area. |
P370+P380+P375 | In case of fire: Evacuate area. Fight fire remotely due to the risk of explosion. |
P370+P380+P375+P378 | In case of fire: Evacuate area. Fight fire remotely due to the risk of explosion. Use ... to extinguish. |
P371 | In case of major fire and large quantities: |
P371+P380+P375 | In case of major fire and large quantities: Evacuate area. Fight fire remotely due to the risk of explosion. |
P372 | Explosion risk. |
P373 | DO NOT fight fire when fire reaches explosives. |
P374 | Fight fire with normal precautions from a reasonable distance. |
P375 | Fight fire remotely due to the risk of explosion. |
P376 | Stop leak if safe to do so. |
P377 | Leaking gas fire – do not extinguish unless leak can be stopped safely. |
P378 | Use ... to extinguish. |
P380 | Evacuate area. |
P381 | In case of leakage, eliminate all ignition sources. |
P390 | Absorb spillage to prevent material damage. |
P391 | Collect spillage. |
P401 | Store in accordance with ... |
P402 | Store in a dry place. |
P402+P404 | Store in a dry place. Store in a closed container. |
P403 | Store in a well ventilated place. |
P403+P233 | Store in a well ventilated place. Keep container tightly closed. |
P403+P235 | Store in a well ventilated place. Keep cool. |
P404 | Store in a closed container. |
P405 | Store locked up. |
P406 | Store in a corrosive resistant/... container with a resistant inner liner. |
P407 | Maintain air gap between stacks or pallets. |
P410 | Protect from sunlight. |
P410+P403 | Protect from sunlight. Store in a well ventilated place. |
P410+P412 | Protect from sunlight. Do not expose to temperatures exceeding 50 ºC/122 ºF. |
P411 | Store at temperatures not exceeding ... ºC/... ºF. |
P411+P235 | Store at temperatures not exceeding ... ºC/... ºF. Keep cool. |
P412 | Do not expose to temperatures exceeding 50 ºC/122 ºF. |
P413 | Store bulk masses greater than ... kg/... lbs at temperatures not exceeding ... °C/... °F. |
P420 | Store separately/away from other materials. |
P422 | Store contents under ... |
P501 | Dispose of contents/container to ... |
P502 | Refer to manufacturer or supplier for information on recovery or recycling. |
P503 | Refer to manufacturer/supplier... for information on disposal/recovery/recycling. |
List formats
|listtype=abbr
(default)- P201, P302+P334, P502
Listtype options |
---|
|
Full abbr list
Complete H, P lists (H200, H201, H202, ...) |
---|
As of 31 May 2023:
|
Features
Hide Doubles
Repeated phrase codes are hidden:
{{GHS phrases|H400|H401|H401|H401}}
→ H400, H401
Omit Rules
|omit=true
(default)
Omit Rules: when the keep ID is present, do not show the omit ID phrase
|
{{GHS phrases|H314|H318}}
→ H314
All module functions
module function | template | note |
---|---|---|
main | {{GHS phrases}} {{H-phrases}} {{P-phrases}} | |setid=H, P preset |
listAll | {{GHS phrases/inline}} | equals main + |listtype=inline |
numberOfPhrases | {{GHS phrases/number of phrases}} | |
listAll | {{GHS phrases/list all}} | |
listOmitRules | {{GHS phrases/list omit rules}} | documentation only; no |setid= |
Tracking
- First Help page: Template:GHS phrases (including documentation)
- Category:GHS errors (0) (includes: "unknown parameter used")
- Category:GHS warnings (0)
See also
- Main article: Globally Harmonized System of Classification and Labelling of Chemicals (GHS);
- {{Chembox}}, {{Chembox Hazards}}
- Source: "Globally Harmonized System of Classification and Labelling of Chemicals" (pdf). 2021. Annex 3: Codification of Statements and Pictograms (pp 268–385).
---------------------------------------------------------------------------------- Module:GHS phrases-- -- main: reads GHS parameters (arguments like "H301", "P401")--and returns for each (listtype='abbr'):--phraseID visible; formal phrase text as <abbr title="...">-- setID= "H" or "P"-- phraseID = e.g. "H201", "P231+P234"-- phrase text read from array tables in [[Module:GHS phrases/data]]---- Implements: [[Template:GHS phrases]]-- Helppage: [[Template:GHS phrases]]-- Error category: [[Category:GHS errors]], [[Category:GHS warnings]] (mainspace pages only)---- Also: -- listAll(), numberOfPhrases(), listOmitRules(),-- listtype, omit--------------------------------------------------------------------------------require('strict')local r = {}-- "r" for return, so no confusion with setID Plocal GHSdata= mw.loadData('Module:GHS phrases/data/sandbox')local getArgs= require('Module:Arguments').getArgslocal tTools= require('Module:TableTools')local yesno= require('Module:Yesno')local tArgName= {} -- named parameters (setid, omit, listtype)local tMessagesToShow = {} -- the tail: Preview, Categories---------------------------------------------------------------------------------- wlHelpPage---- Formats page as [[Helppage#Section|Label]]-- by default, sLabel == sSection--------------------------------------------------------------------------------local function wlHelpPage(sSection, sLabel)local sHelpPage = 'Template:GHS phrases'if sLabel == nil then sLabel = sSection endif (sLabel or '') == '' thensLabel = ''elsesLabel = '|' .. sLabel endif (sSection or '') == '' thensSection = ''elsesSection = '#' .. sSectionendreturn '[[' .. sHelpPage .. sSection .. sLabel .. ']]'end---------------------------------------------------------------------------------- addErrorCategory---- Formats as [[Category:GHS errors|catsort]]-- or '' when in other namespace.-- sCatsort option using: H, P, _--------------------------------------------------------------------------------local function addErrorCategory(sCatsort)local pagetype = require('Module:Pagetype').mainlocal wlErrCat = ''if pagetype() == 'article' then -- mainspace onlyif sCatsort == nil then sCatsort = tArgName['setID'] endif sCatsort == '' thenwlErrCat = '[[Category:GHS errors]]'elsewlErrCat = '[[Category:GHS errors|' .. sCatsort .. ']]'endelsereturn ''endtable.insert(tMessagesToShow, wlErrCat)returnend---------------------------------------------------------------------------------- addWarningCategory---- Formats as [[Category:GHS warnings|catsort]]-- mainspace only, or '' when in other namespace.-- sCatsort option using: H, P, U, ?, D, O--------------------------------------------------------------------------------local function addWarningCategory(sCatsort)local pagetype = require('Module:Pagetype').mainif sCatsort == nil then sCatsort = tArgName['setID'] endlocal wlWarnCat = ''if pagetype() == 'article' then -- mainspace onlyif sCatsort == '' thenwlWarnCat = '[[Category:GHS warnings]]'elsewlWarnCat = '[[Category:GHS warnings|' .. sCatsort .. ']]'endelsereturn endtable.insert(tMessagesToShow, wlWarnCat)returnend---------------------------------------------------------------------------------- addPreviewMsg--------------------------------------------------------------------------------local function addPreviewMsg(sMsg)local previewWarn = require('Module:If preview')._warningtable.insert(tMessagesToShow, previewWarn({sMsg}))returnend---------------------------------------------------------------------------------- showPreviewMsg---- show table tMessagesToShow-- preview-messages and errorcat-- all namespaces--------------------------------------------------------------------------------local function showPreviewMsg()if tTools.size(tMessagesToShow) > 0 thenreturn table.concat(tMessagesToShow, '')elsereturn ''endend---------------------------------------------------------------------------------- applyRemoveDuplicates---- returns edited table, with double Codes removed-- adds warning with codes.-- base table tArgs is walked through by a iwalker that reads a singel code,-- then a ikiller checks the upward part of the same table to delete all copies-- ikiller starts at end of table, walks towards iwalker; then tArgs is compressed-- iwalker steps 1 up in the freshly compressed table-- Used: iArgs is sorted, and order stays same. compress does not change that.--------------------------------------------------------------------------------local function applyRemoveDuplicates(tArgs)local iR, iK -- iR = reader, iK = killerlocal hit = falseiR = 1while iR < #tArgs doiK = #tArgs -- will be counting downwardswhile iK > iR doif tArgs[iK] == tArgs[iR] thenhit = trueaddPreviewMsg('Duplicate removed: ' .. tArgs[iR])table.remove(tArgs, iK)tTools.compressSparseArray(tArgs)endiK = iK - 1endtTools.compressSparseArray(tArgs)iR = iR + 1endif hit thenaddWarningCategory('D')endreturn tArgsend---------------------------------------------------------------------------------- applyOmitRules---- returns edited table, with Omit phraseID's removed-- Omit rule is per GHS_Rev9E_0.pdf (2021)--------------------------------------------------------------------------------local function applyOmitRules(tArgs)local tRules = GHSdata['tOmitRules']local hit = falsefor keep, omit in pairs(tRules) doif tTools.inArray(tArgs, omit) thenif tTools.inArray(tArgs, keep) thenhit = truefor i, k in pairs(tArgs) doif k == omit thentable.remove(tArgs, i)endendaddPreviewMsg(wlHelpPage('Omit Rules') .. ': keep ' .. keep .. ', omit ' .. omit)endendendif hit thentTools.compressSparseArray(tArgs)addWarningCategory('O')endreturn tArgsend---------------------------------------------------------------------------------- label H-phrases or P-phrases--------------------------------------------------------------------------------local function PHlabel()if tArgName['setID'] == 'GHS' thenreturn 'GHS phrases'elsereturn tArgName['setID'] .. '-phrases'endend---------------------------------------------------------------------------------- inMono---- Use mono font-family (from: Template:Mono)--------------------------------------------------------------------------------local function inMono(s)if s == nil then s = '' endreturn '<span class="monospaced" style="font-family: monospace;">' .. s .. '</span>'end---------------------------------------------------------------------------------- wlInlineTag---- Returns <sup>[?]</sup> with wikilink to [[helppage#section|errormessage]]--------------------------------------------------------------------------------local function wlInlineTag(phraseID)local sMsgsMsg = '<sup><span class="noprint Inline-Template">[<i>'.. wlHelpPage(PHlabel(), '<span title="' .. PHlabel() .. ': '.. phraseID.. ' not found'.. '">?</span>').. '</i>]</span></sup>'return sMsgend---------------------------------------------------------------------------------- errorPhraseIDnotFound---- Returns single value when error (not found in list):-- plain value + inline warning [?] (linked) + error cat (mainsp) + preview warning--------------------------------------------------------------------------------local function errorPhraseIDnotFound(phraseID)if phraseID == nil then phraseID = '' endlocal inlineTag = wlInlineTag(phraseID)local previewMsg = wlHelpPage(PHlabel()) .. ': \"' .. phraseID .. '\" not found'addPreviewMsg(previewMsg)addErrorCategory()return phraseID .. inlineTagend---------------------------------------------------------------------------------- errorHPsetIDnotFound---- setID H or P could not be found--------------------------------------------------------------------------------local function errorHPsetIDnotFound()local sMsgsMsg = wlHelpPage('', PHlabel()).. ': "H" or "P" set id not found' .. ' (please use form like "|H200" or "|P300+P301")'addPreviewMsg(sMsg)addErrorCategory('?')return showPreviewMsg()end---------------------------------------------------------------------------------- errorHPsetIDmissing---- parameter |setid= to be used--------------------------------------------------------------------------------local function errorHPsetIDmissing()local sMsgsMsg = wlHelpPage( '', PHlabel()).. ': "H" or "P" set id not found,' .. ' please use |setid=... (H or P)'addPreviewMsg(sMsg)returnend---------------------------------------------------------------------------------- formatPhraseAbbr---- format phraseID and text, for abbr-form (infobox list form)--------------------------------------------------------------------------------local function formatPhraseAbbr(phraseID, sPhrase)return '<abbr class="abbr" title=" ' .. phraseID .. ': ' .. sPhrase .. '">'.. phraseID .. '</abbr>'end---------------------------------------------------------------------------------- formatPhraseInline---- format phraseID and text, for inline form (in sentence)-- adds "quotes"--------------------------------------------------------------------------------local function formatPhraseInline(phraseID, sPhrase)return inMono(phraseID) .. ': \"' .. sPhrase .. '\"'end---------------------------------------------------------------------------------- formatPhraseList---- as inline, but no "quotes" added.--------------------------------------------------------------------------------local function formatPhraseList(phraseID, sPhrase)return inMono(phraseID) .. ': ' .. sPhraseend---------------------------------------------------------------------------------- getSetID---- Determines setID (expected either 'H' or 'P')-- First route is: read |setid=-- When |setid= is not set, --it looks for a first parameter that has an H of P prefix (in |P201|P202|...)--when not found, 'GHS' is retured-- In one call, P and H numbers can *not* be mixed--so "|H201|P202|" will cause error "P202 not found" (... in H-list)--------------------------------------------------------------------------------local function getSetID(tArgs)local setIDfound = 'GHS'local paramsetID = tArgs['setid'] or nilif (paramsetID ~= nil) and (paramsetID == 'P' or paramsetID == 'H') thensetIDfound = paramsetIDelselocal initial = nilfor i, v in ipairs(tArgs) doinitial = mw.ustring.match(v, '^[PH]')if initial ~=nil thensetIDfound = initialbreakendendendreturn setIDfoundend---------------------------------------------------------------------------------- getListType---- Checks list format, including those from Module:List--------------------------------------------------------------------------------local function getListType(tArgs)local listTypes = {['abbr'] = true,['bulleted'] = true,['unbulleted'] = true,['horizontal'] = true,['ordered'] = true,['horizontal_ordered'] = true,['horizontal ordered'] = true,['inline'] = true}local sListType = tArgs['listtype'] or 'abbr'if sListType == '' or sListType == 'abbr' thenreturn 'abbr'elseif listTypes[sListType] == true thenif sListType == 'horizontal ordered' thensListType = 'horizontal_ordered'endreturn sListTypeelse sListType = 'abbr'endreturn sListTypeend---------------------------------------------------------------------------------- getDoOmitRules--------------------------------------------------------------------------------local function getDoOmitRules(tArgs)local b = yesno(tArgs['omit'], true)if b == nil then b = true endreturn yesno(b, true)end---------------------------------------------------------------------------------- prepareArgs---- First: determine setID (from |setID= OR from prefixes in parameters)-- Then: clean up & format phrase IDs (=unnamed parameters)--remove bad characters, create H/P pattern "H201", "P310+P302"-- straight array, no nil's, sorted--------------------------------------------------------------------------------local function prepareArgs(tArgs)tArgName['setID'] = getSetID(tArgs)tArgName['listtype'] = getListType(tArgs)tArgName['omit'] = getDoOmitRules(tArgs)tArgs = tTools.compressSparseArray(tArgs) -- removes all named argsif string.len(tArgName['setID']) == 1 and #tArgs > 0 thenfor i, v in ipairs(tArgs) dov = mw.text.decode(v)v = mw.ustring.gsub(v, '[^%d%+A-Za-z]', '')v = mw.ustring.gsub(v, '^(%d)', tArgName['setID'] .. '%1')v = mw.ustring.gsub(v, '%+(%d)', '+' .. tArgName['setID'] .. '%1')tArgs[i] = vendtable.sort(tArgs)endreturn tArgsend---------------------------------------------------------------------------------- listAll---- Returns wikitable rows for each phrase id.-- requires |setID=P/H-- returns full list, all phrases, for a setID-- 2-columns wikitable, sorted, sortable, anchor like "H201" for each--------------------------------------------------------------------------------function r.listAll(frame)local newArgs = getArgs(frame)local tL = {}prepareArgs(newArgs)local tReadif tArgName['setID'] == 'H' thentRead = GHSdata['Hphrases']elseif tArgName['setID'] == 'P' thentRead = GHSdata['Pphrases']else errorHPsetIDmissing()return showPreviewMsg()end-- Intermediate table t2 to maintain order; read from original table (/data)local t2 = {}local iPhfor s, v in pairs(tRead) doiPh = tonumber(mw.ustring.match(s, '[PH](%d%d%d)'))if string.len(s) > 4 theniPh = tTools.size(t2) + 1endtable.insert(t2, iPh, s)endt2 = tTools.compressSparseArray(t2)table.sort(t2)local sTR, v, sAnchor-- i = array index, s = phraseID, v = phrase textfor i, s in ipairs(t2) dov = tRead[s]sAnchor = '<span class="anchor" id="' .. s .. '"></span>'sTR = '|- ' .. sAnchor .. '\n| datasortvalue="' .. i .. '" | <span style="font-family: monospace;">' .. s .. '</span> || ' .. vtable.insert(tL, sTR)endreturn table.concat(tL, '\n')end---------------------------------------------------------------------------------- numberOfPhrases---- Documentation-- requires |setID=H/P-- Returns number of phrases, in format--"GHS H-phrases (123)"--------------------------------------------------------------------------------function r.numberOfPhrases(frame)local newArgs = getArgs(frame)prepareArgs(newArgs)local iTif tArgName['setID'] == 'H' theniT = tTools.size(GHSdata['Hphrases'])elseif tArgName['setID'] == 'P' theniT = tTools.size(GHSdata['Pphrases'])elseerrorHPsetIDmissing()return showPreviewMsg()endreturn 'GHS ' .. PHlabel() .. ' <span style="font-weight: normal;">(' .. tostring(iT) .. ')</span>'end---------------------------------------------------------------------------------- listOmitRules---- self-documentation--------------------------------------------------------------------------------function r.listOmitRules()local tRules = GHSdata['tOmitRules']local tL = {}local ss = wlHelpPage('Omit Rules').. ': when the <i>keep</i> ID is present, do not show the <i>omit</i> ID phrase'table.insert(tL, s)for keep, omit in pairs (tRules) dos = '• keep ' .. inMono(keep) .. ', omit ' .. inMono(omit)table.insert(tL, s)endreturn table.concat(tL, '<br/>')end---------------------------------------------------------------------------------- _main---- processes setID (H, P) and phrase codes--error:setID not P, H--code not found-- cannot mix H and P phrases-- reads phrases from /data H or P phrases tables-- formats phrase (abbreviation, abbr-title, phraseID)--------------------------------------------------------------------------------function r._main(tArgs)tArgs = prepareArgs(tArgs)if #tArgs == 0 thenreturn showPreviewMsg() -- no contentelseif tArgName['setID'] == 'GHS' thenreturn errorHPsetIDnotFound()endtArgs = applyRemoveDuplicates(tArgs)if tArgName['omit'] thentArgs = applyOmitRules(tArgs)endlocal formatterFif tArgName['listtype'] == 'abbr' thenformatterF = formatPhraseAbbrelseif tArgName['listtype'] == 'inline' thenformatterF = formatPhraseInlineelse --- Module:List optionsformatterF = formatPhraseListendlocal tReadD = {}if tArgName['setID'] == 'H' thentReadD = GHSdata['Hphrases']elseif tArgName['setID'] == 'P' thentReadD = GHSdata['Pphrases']elsereturn showPreviewMsg()endlocal sPhraselocal tR = {}for i, v in ipairs(tArgs) dosPhrase = tReadD[v]if sPhrase == nil thentable.insert(tR, errorPhraseIDnotFound(tostring(v)))elsetable.insert(tR, formatterF(v, sPhrase))endendif tArgName['listtype'] == 'abbr' thenreturn table.concat(tR, ', ') .. showPreviewMsg()elseif tArgName['listtype'] == 'inline' thenreturn table.concat(tR, ', ') .. showPreviewMsg()elselocal mList = require('Module:List')return mList[tArgName['listtype']](tR) .. showPreviewMsg()endend---------------------------------------------------------------------------------- main---- handles template input frame, then calls generic _main() function-- To be invoked from {{template}}--------------------------------------------------------------------------------function r.main(frame)local newArgs = getArgs(frame)return r._main(newArgs) endreturn r
🔥 Top keywords: Main PageSpecial:SearchWikipedia:Featured picturesYasukeHarrison ButkerRobert FicoBridgertonCleopatraDeaths in 2024Joyce VincentXXXTentacionHank AdamsIt Ends with UsYouTubeNew Caledonia2024 Indian general electionHeeramandiDarren DutchyshenSlovakiaKingdom of the Planet of the ApesAttempted assassination of Robert FicoLawrence WongBaby ReindeerXXX: Return of Xander CageThelma HoustonFuriosa: A Mad Max SagaMegalopolis (film)Richard GaddKepler's SupernovaWicked (musical)Sunil ChhetriXXX (2002 film)Ashley MadisonAnya Taylor-JoyPlanet of the ApesNava MauYoung SheldonPortal:Current eventsX-Men '97