412 lines
14 KiB
Lua
412 lines
14 KiB
Lua
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
|