Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

412 lines
14 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

hazardClassExplosive = 1
hazardClassGas = 2
hazardClassFlammableLiquid = 3
hazardClassFlammableSolid = 4
hazardClassOxidiser = 5
hazardClassOxidizer = hazardClassOxidiser
hazardClassPoison = 6
hazardClassToxic = hazardClassPoison
hazardClassInfectious = hazardClassPoison
hazardClassRadioactive = 7
hazardClassCorrosive = 8
hazardClassMiscellaneous = 9
hazardClassOther = hazardClassMiscellaneous
function adrData ( hazardousData )
local result = hazardousData
if result.unNumber ~= nil
then
result.unNumber = tostring ( result.unNumber )
else
result.unNumber = ""
end
if result.kemler ~= nil
then
if type ( result.kemler ) == "number"
then
if result.kemler < 0
then
result.kemler = "X" .. tostring ( -result.kemler )
else
result.kemler = tostring ( result.kemler )
end
elseif type ( result.kemler ) ~= "string"
then
result.kemler = "???"
end
else
result.kemler = ""
end
return result
end
function adrPictograms ( hazardousData, pictograms )
if hazardousData.hazardClass ~= nil
and type ( hazardousData.hazardClass ) == "table"
then
for index, class in pairs ( hazardousData.hazardClass )
do
if type ( class ) == "number"
then
if class == 3 -- flammable liquids
or class == 8 -- corrosive substancees
or class == 9 -- miscellaneous hazards
then
log.error
(
"adrPictograms",
"Only Class 3 (Flammable Liquids) and 8 (Corrosive Substances) do not need further specification"
)
end
elseif type ( class ) == "table"
then
if class.class ~= nil
and type ( class.class ) == "number"
then
if class.class == hazardClassExplosive
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- explosives
if class.compatibility == nil
then
class.compatibility = ""
elseif type ( class.compatibility ) == "number"
then
class.compatibility = "A"
end
if class.subClass > 0
and class.subClass < 4
then
-- with pictogram
table.insert
(
pictograms,
"\\adrExplosive"
.. "[\\@HazardousPictogramSize]"
.. "{" .. class.subClass .. "}"
.. "{" .. class.compatibility .. "}"
)
elseif class.subClass < 7
then
-- with subclass
table.insert
(
pictograms,
"\\adrLessExplosive"
.. "[\\@HazardousPictogramSize]"
.. "{" .. class.subClass .. "}"
.. "{" .. class.compatibility .. "}"
)
else
log.error
(
{ "adrPictograms", "explosives", },
"Invalid Subclass: " .. tostring ( class.subClass )
)
end
elseif class.class == hazardClassGas
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- gases
if class.subClass == 1
then
table.insert
(
pictograms,
"\\adrFlammableGas"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 2
then
table.insert
(
pictograms,
"\\adrNonFlammableGas"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 3
then
table.insert
(
pictograms,
"\\adrPoisonGas"
.. "[\\@HazardousPictogramSize]"
)
else
log.error
(
{ "adrPictograms", "gases", },
"Invalid Subclass: " .. tostring ( class.subClass )
)
end
elseif class.class == hazardClassFlammableLiquid
then
table.insert
(
pictograms,
"\\adrFlammableLiquid"
.. "[\\@HazardousPictogramSize]"
)
elseif class.class == hazardClassFlammableSolid
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- flammable solids
if class.subClass == 1
then
table.insert
(
pictograms,
"\\adrFlammableSolid"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 2
then
table.insert
(
pictograms,
"\\adrSpontaneouslyCombustible"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 3
then
table.insert
(
pictograms,
"\\adrDangerousWhenWet"
.. "[\\@HazardousPictogramSize]"
)
else
log.error
(
{ "adrPictograms", "flammable solids", },
"Invalid Subclass: " .. tostring ( class.subClass )
"error"
)
end
elseif class.class == hazardClassOxidiser
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- oxidising substances and organic peroxides
if class.subClass == 1
then
table.insert
(
pictograms,
"\\adrOxidiser"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 2
then
table.insert
(
pictograms,
"\\adrPeroxide"
.. "[\\@HazardousPictogramSize]"
)
else
log.error
(
{ "adrPictograms", "oxidising substances and organic peroxides", },
"Invalid Subclass: " .. tostring ( class.subClass )
)
end
elseif class.class == hazardClassPoison
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- toxic, poisonous and infectious substances
if class.subClass == 1
then
table.insert
(
pictograms,
"\\adrToxic"
.. "[\\@HazardousPictogramSize]"
)
elseif class.subClass == 2
then
table.insert
(
pictograms,
"\\adrInfectious"
.. "[\\@HazardousPictogramSize]"
)
else
log.error
(
{ "adrPictograms", "toxic, poisonous and infectious substances", },
"Invalid Subclass: " .. tostring ( class.subClass )
)
end
elseif class.class == hazardClassRadioactive
and class.subClass ~= nil
and type ( class.subClass ) == "number"
then
-- radioactive and fissile material
if class.subClass == 1
then
if class.activity ~= nil
and type ( class.activity ) == "number"
then
local exponent = math.floor ( math.log ( class.activity, 10 ) )
local decimal = tostring ( class.activity * 10 ^ -exponent )
if exponent == 0
then
exponent = ""
else
exponent = tostring ( exponent )
end
table.insert
(
pictograms,
"\\adrRadioactiveI"
.. "[\\@HazardousPictogramSize]"
.. "{" .. ( class.contents or "" ) .. "}"
.. "{{" .. decimal .. "}{" .. exponent .. "}{becquerel}{}\\Unit{kilogram}{-1}}"
)
else
log.error
(
{ "adrPictograms", "radioactive and fissile material", "RadioactiveI", },
"No Valid Activity Given."
)
end
elseif class.subClass == 2
or class.subClass == 3
then
local macro = ""
if class.subClass == 2
then
macro = "adrRadioactiveII"
else
macro = "adrRadioactiveIII"
end
if class.activity ~= nil
and type ( class.activity ) == "number"
and class.index ~= nil
and tostring ( class.index ) ~= nil
then
local exponent = math.floor ( math.log ( class.activity, 10 ) )
local decimal = tostring ( class.activity * 10 ^ -exponent )
if exponent == 0
then
exponent = ""
else
exponent = tostring ( exponent )
end
table.insert
(
pictograms,
bs .. macro
.. "[\\@HazardousPictogramSize]"
.. "{" .. ( class.contents or "" ) .. "}"
.. "{{" .. decimal .. "}{" .. exponent .. "}{becquerel}{}\\Unit{kilogram}{-1}}"
.. "{" .. tostring ( class.index ) .. "}"
)
else
log.error
(
{ "adrPictograms", "radioactive and fissile material", macro, },
"No Valid Activity and/or Index Given."
)
end
elseif class.subClass == 5
then
if class.index ~= nil
and tostring ( class.index ) ~= nil
then
table.insert
(
pictograms,
"\\adrFissile"
.. "[\\@HazardousPictogramSize]"
.. "{" .. tostring ( class.index ) .. "}"
)
else
log.error
(
{ "adrPictograms", "radioactive and fissile material", "Fissile", },
"No Valid Index Given."
)
end
else
log.error
(
{ "adrPictograms", "radioactive and fissile material", },
"Invalid Subclass: " .. tostring ( class.subClass )
)
end
elseif class.class == hazardClassCorrosive
then
-- corrosive substances
table.insert
(
pictograms,
"\\adrCorrosive"
.. "[\\@HazardousPictogramSize]"
)
elseif class.class == hazardClassMiscellaneous
then
-- lithium ion cells, miscellaneous
if class.subClass == "A"
then
table.insert
(
pictograms,
"\\adrLithiumCells"
.. "[\\@HazardousPictogramSize]"
)
else
table.insert
(
pictograms,
"\\adrOther"
.. "[\\@HazardousPictogramSize]"
)
end
elseif class.class >= 1
and class.class <= 9
then
log.error
(
"adrPictograms",
"SubClass must be specified as a number"
)
else
log.error
(
"adrPictograms",
"Class must be between 1 and 9"
)
end
else
log.error
(
"adrPictograms",
"Class must be specified as a number between 1 and 9"
)
end
else
log.error
(
"adrPictograms",
"Class must be of of type number or table, not " .. type ( class ) .. ""
)
end
end
end
if hazardousData.unNumber ~= ""
or hazardousData.kemler ~= ""
then
return tex.newline
.. "\\adrPlate[0.07]{" .. hazardousData.kemler .. "}{" .. hazardousData.unNumber .. "}"
.. "\\hspace{\\@HazardousPictogramSep}"
else
return ""
end
end