%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% --------------------------------------------------------------------------- %
% - the CHEMMACROS bundle                                                   - %
% - ghsystem.sty                                                            - %
% - macros and commands for chemists                                        - %
% --------------------------------------------------------------------------- %
% - Clemens Niederberger                                                    - %
% --------------------------------------------------------------------------- %
% - https://bitbucket.org/cgnieder/chemmacros/                              - %
% - contact@mychemistry.eu                                                  - %
% --------------------------------------------------------------------------- %
% - If you have any ideas, questions, suggestions or bugs to report, please - %
% - feel free to contact me.                                                - %
% --------------------------------------------------------------------------- %
% - Copyright 2011-2012 Clemens Niederberger                                - %
% -                                                                         - %
% - This work may be distributed and/or modified under the                  - %
% - conditions of the LaTeX Project Public License, either version 1.3      - %
% - of this license or (at your option) any later version.                  - %
% - The latest version of this license is in                                - %
% -   http://www.latex-project.org/lppl.txt                                 - %
% - and version 1.3 or later is part of all distributions of LaTeX          - %
% - version 2005/12/01 or later.                                            - %
% -                                                                         - %
% - This work has the LPPL maintenance status `maintained'.                 - %
% -                                                                         - %
% - The Current Maintainer of this work is Clemens Niederberger.            - %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{ chemmacros }
\ProvidesExplPackage
  {ghsystem}
  {\chemmacros@date}
  {\chemmacros@version}
  {globally harmonised system}

% --------------------------------------------------------------------------- %
% error and warning messages:
\msg_set:nnnn { ghsystem } { explicit }
  { It~seems~you've~loaded~`ghsystem'~explicitly. }
  {
    It~seems~you've~loaded~`ghsystem'~explicitly.~This~should~work~but~the~
    recommended~way~is~to~load~it~via~the~bundle,~i.e.~by~using~
    \token_to_str:N \usepackage \{ chemmacros \}.
  }
  
\msg_set:nnnn { ghsystem } { statements }
  {
    You've~tried~to~call~statement~#1#2~ \msg_line_context: \c_space_tl but~it~
    it~is~not~defined~in~ghsystem.sty .
  }
  {
    You've~tried~to~call~statement~#1#2~ \msg_line_context: \c_space_tl but~it~
    it~is~not~defined~in~ghsystem.sty . ~ Are~you~sure~it~exists? ~ If~so~please
    ~send~a~message~to~the~author.~Thanks.
  }

\msg_set:nnnn { ghsystem } { booktabs }
  { Package~`booktabs'~missing~\msg_line_context: . }
  {
    Option~#1~of~the~\token_to_str:N \ghslistall \c_space_tl command~
    \msg_line_context: \c_space_tl needs~the~`booktabs'~package . ~Please~make~
    sure~to~load~it~in~your~preamble.
  }

% --------------------------------------------------------------------------- %
% gobble options
\DeclareOption*  {  }
\ProcessOptions \scan_stop:

% load required packages:
\RequirePackage{ graphicx , tabu , longtable , ifpdf }

% --------------------------------------------------------------------------- %
% define variables:
\prop_new:N \l_ghsystem_h_prop
\prop_new:N \l_ghsystem_euh_prop
\prop_new:N \l_ghsystem_p_prop

\cs_new:Npn \ghsystem_exposure: {}
\cs_new:Npn \ghsystem_effect: {}
\cs_new:Npn \ghsystem_organs: {}
\cs_new:Npn \ghsystem_substance: {}
\cs_new:Npn \ghsystem_text: {}

\bool_new:N \l_ghsystem_fill_in_bool
\bool_new:N \l_ghsystem_show_number_bool
\bool_new:N \l_ghsystem_substance_bool
\bool_new:N \l_ghsystem_organs_bool
\bool_new:N \l_ghsystem_hide_statement_bool
\bool_new:N \l_ghsystem_engine_pdftex_bool
\bool_new:N \l_ghsystem_engine_xetex_bool
\bool_new:N \l_ghsystem_engine_luatex_bool

\tl_new:N \l_ghsystem_number_space_tl
\tl_new:N \l_ghsystem_celsius_temperature_tl
\tl_new:N \l_ghsystem_fahrenheit_temperature_tl
\tl_new:N \l_ghsystem_kg_mass_tl
\tl_new:N \l_ghsystem_lbs_mass_tl
\tl_new:N \l_ghsystem_dots_tl
\tl_set:Nn \l_ghsystem_dots_tl { \ldots }
\tl_new:N \l_ghsystem_picture_scale_default_tl
\tl_set:Nn \l_ghsystem_picture_scale_default_tl { .05 }
\tl_new:N \l_ghsystem_picture_scale_tl
\tl_set_eq:NN \l_ghsystem_picture_scale_tl \l_ghsystem_picture_scale_default_tl
\tl_new:N \l_ghsystem_picture_includegraphics_tl
\tl_new:N \l_ghsystem_picture_type_tl
\tl_new:N \l_ghsystem_identifier_tl
\tl_new:N \l_ghsystem_table_text_tl
\tl_new:N \l_ghsystem_table_next_page_tl
\tl_new:N \l_ghsystem_table_head_rule_tl
\tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline }
\tl_new:N \l_ghsystem_table_top_head_rule_tl
\tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline }
\tl_new:N \l_ghsystem_table_foot_rule_tl
\tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline }
\tl_new:N \l_ghsystem_table_last_foot_rule_tl
\tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline }
\tl_new:N \l_ghsystem_table_caption_tl
\tl_new:N \l_ghsystem_table_caption_short_tl
\tl_new:N \l_ghsystem_table_label_tl
\tl_set:Nn \l_ghsystem_table_label_tl { tab : ghs-hp-statements }

\dim_new:N \l_ghsystem_table_line_sep_dim
\dim_set:Nn \l_ghsystem_table_line_sep_dim { 3pt }

\fp_new:N \l_ghsystem_picture_scale_fp
\fp_set:Nn \l_ghsystem_picture_scale_fp { \l_ghsystem_picture_scale_tl }

\DeclareSIUnit { \GHSfahrenheit } { \SIUnitSymbolDegree F }
\DeclareSIUnit { \GHScelsius } { \SIUnitSymbolDegree C }
\DeclareSIUnit { \GHSkilogram } { kg }
\DeclareSIUnit { \GHSpounds } { lbs }

% language settings
\bool_new:N \l_ghsystem_language_file_loaded_bool
\bool_new:N \l_ghsystem_language_directory_bool
\file_if_exist:nTF { language / ghsystem_english_def }
  { \bool_set_true:N \l_ghsystem_language_directory_bool }
  { \bool_set_false:N \l_ghsystem_language_directory_bool }

\bool_if:NTF \l_ghsystem_language_directory_bool
  {
    \prop_map_inline:Nn \l_chemmacros_language_prop
      {
        \bool_if:cT { l_chemmacros_#1_bool }
          {
            \file_if_exist:nTF { language / ghsystem_#2.def }
              {
                \bool_set_true:N \l_ghsystem_language_file_loaded_bool
                \input { language / ghsystem_#2.def } \ExplSyntaxOn
              }
              { \input { language / ghsystem_english.def } \ExplSyntaxOn }
          }
      }
  }
  {
    \prop_map_inline:Nn \l_chemmacros_language_prop
      {
        \bool_if:cT { l_chemmacros_#1_bool }
          {
            \file_if_exist:nTF { ghsystem_#2.def }
              {
                \bool_set_true:N \l_ghsystem_language_file_loaded_bool
                \input { ghsystem_#2.def } \ExplSyntaxOn
              }
              { \input { ghsystem_english.def } \ExplSyntaxOn }
          }
      }
  }

\bool_if:NF \l_ghsystem_language_file_loaded_bool
  {
    \bool_if:NTF \l_ghsystem_language_directory_bool
      { \input { language / ghsystem_english.def } \ExplSyntaxOn }
      { \input { ghsystem_english.def } \ExplSyntaxOn }
  }

\cs_new_nopar:Nn \ghsystem_booktabs:n
  {
    \cs_if_exist:cF { ver@booktabs.sty }
      { \msg_error:nnx { ghsystem } { booktabs } { #1 } }
  }

% --------------------------------------------------------------------------- %
% define options:
\keys_define:nn { chemmacros / ghsystem }
  {
    % general options:
    language                        .code:n     =
      \bool_set_true:c { l_ghsystem_#1_bool }
      \bool_if:NTF \l_ghsystem_language_directory_bool
        { \input { language / ghsystem_#1.def } \ExplSyntaxOn }
        { \input { ghsystem_#1.def } \ExplSyntaxOn } ,
    % \ghs options:
    hide                            .bool_set:N =
      \l_ghsystem_hide_statement_bool ,
    hide                            .default:n  = true ,
    fill-in                         .bool_set:N = \l_ghsystem_fill_in_bool ,
    fill-in                         .default:n  = true ,
    exposure                        .code:n     =
      \cs_set:Npn \ghsystem_exposure: { ~ #1 } ,
    effect                          .code:n     =
      \cs_set:Npn \ghsystem_effect: { ~ #1 } ,
    organs                          .code:n     =
      \bool_set_true:N \l_ghsystem_organs_bool
      \cs_set:Npn \ghsystem_organs: { ~ #1 } ,
    substance                       .code:n     =
      \bool_set_true:N \l_ghsystem_substance_bool
      \cs_set:Npn \ghsystem_substance: { ~ #1 } ,
    text                            .code:n     =
      \cs_set:Npn \ghsystem_text: { ~ #1 } ,
    space                           .tl_set:N   =
      \l_ghsystem_number_space_tl ,
    C-temperature                   .tl_set:N   =
      \l_ghsystem_celsius_temperature_tl ,
    F-temperature                   .tl_set:N   =
      \l_ghsystem_fahrenheit_temperature_tl ,
    kg-mass                         .tl_set:N   = \l_ghsystem_kg_mass_tl ,
    lbs-mass                        .tl_set:N   = \l_ghsystem_lbs_mass_tl ,
    dots                            .tl_set:N   = \l_ghsystem_dots_tl ,
    % \ghspic options:
    scale                           .code:n     =
      \fp_mul:Nn \l_ghsystem_picture_scale_fp { #1 } ,
    includegraphics                 .code:n     =
      \tl_set:Nn \l_ghsystem_picture_includegraphics_tl { , #1 } ,
    pic-type                        .choices:nn = { eps , jpg , png , pdf }
      { \tl_set_eq:NN \l_ghsystem_picture_type_tl \l_keys_choice_tl } ,
    % \ghslistall options:
    table-head-number               .tl_set:N   = \l_ghsystem_identifier_tl ,
    table-head-text                 .tl_set:N   = \l_ghsystem_table_text_tl ,
    table-next-page                 .tl_set:N   =
      \l_ghsystem_table_next_page_tl ,
    table-row-sep                   .dim_set:N  =
      \l_ghsystem_table_line_sep_dim ,
    table-head-rule                 .choice: ,
    table-head-rule / default       .code:n     =
      \tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline } ,
    table-head-rule / booktabs      .code:n     =
      \ghsystem_booktabs:n { table-head-rule }
      \tl_set:Nn \l_ghsystem_table_head_rule_tl { \midrule } ,
    table-head-rule / none          .code:n     =
      \tl_clear:N \l_ghsystem_table_head_rule_tl ,
    table-top-head-rule             .choice: ,
    table-top-head-rule / default   .code:n     =
      \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline } ,
    table-top-head-rule / booktabs  .code:n     =
      \ghsystem_booktabs:n { table-top-head-rule }
      \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \toprule } ,
    table-top-head-rule / none      .code:n     =
      \tl_clear:N \l_ghsystem_table_top_head_rule_tl ,
    table-foot-rule                 .choice: ,
    table-foot-rule / default       .code:n     =
      \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline } ,
    table-foot-rule / booktabs      .code:n     =
      \ghsystem_booktabs:n { table-foot-rule }
      \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \midrule } ,
    table-foot-rule / none          .code:n     =
      \tl_clear:N \l_ghsystem_table_foot_rule_tl ,
    table-last-foot-rule            .choice: ,
    table-last-foot-rule / default  .code:n     =
      \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline } ,
    table-last-foot-rule / booktabs .code:n     =
      \ghsystem_booktabs:n { table-last-foot-rule }
      \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \bottomrule } ,
    table-last-foot-rule / none     .code:n     =
      \tl_clear:N \l_ghsystem_table_last_foot_rule_tl ,
    table-rules                     .choice: ,
    table-rules / default           .code:n     =
      \tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline }
      \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline }
      \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline }
      \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline } ,
    table-rules / booktabs          .code:n     =
      \ghsystem_booktabs:n { table-rules }
      \tl_set:Nn \l_ghsystem_table_head_rule_tl { \midrule }
      \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \toprule }
      \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \midrule }
      \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \bottomrule } ,
    table-rules / none              .code:n     =
      \tl_clear:N \l_ghsystem_table_head_rule_tl
      \tl_clear:N \l_ghsystem_table_top_head_rule_tl
      \tl_clear:N \l_ghsystem_table_foot_rule_tl
      \tl_clear:N \l_ghsystem_table_last_foot_rule_tl ,
    table-caption                   .tl_set:N   = \l_ghsystem_table_caption_tl ,
    table-caption-short             .tl_set:N   =
      \l_ghsystem_table_caption_short_tl ,
    table-label                     .tl_set:N   = \l_ghsystem_table_label_tl
  }

% --------------------------------------------------------------------------- %
% the main command for getting the H/EUH/P statements
%   \ghs{<type>}{<num>}
%   \ghs*{<type>}{<num>} : type without number
%
\NewDocumentCommand \ghs { somm }
  {
    \group_begin:
      \IfBooleanF { #1 } { \bool_set_true:N \l_ghsystem_show_number_bool }
      \IfNoValueF { #2 } { \keys_set:nn { chemmacros / ghsystem } { #2 } }
      \ghsystem_read_args:nn { #3 } { #4 }
    \group_end:
  }

\cs_new:Nn \ghsystem_read_args:nn
  {
    \ghsystem_get_type:nN { #1 } \l_tmpa_tl
    \prop_get:cnNTF { l_ghsystem_ \l_tmpa_tl _prop } { #2 } \l_tmpb_tl
      {
        \ghsystem_is_combination:nn { #1 } { #2 }
        \bool_if:NF \l_ghsystem_hide_statement_bool
          { \tl_use:N \l_tmpb_tl  }
      }
      { \chemmacros_msg:nnxx { ghsystem } { statements } { #1 } { #2 } }
  }

\cs_new:Nn \ghsystem_get_type:nN
  {
    \tl_if_eq:nnT { #1 } { h }   { \tl_set:Nn #2 { h } }
    \tl_if_eq:nnT { #1 } { H }   { \tl_set:Nn #2 { h } }
    \tl_if_eq:nnT { #1 } { euh } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { Euh } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { euH } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { eUh } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { EUh } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { EuH } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { eUH } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { EUH } { \tl_set:Nn #2 { euh } }
    \tl_if_eq:nnT { #1 } { p }   { \tl_set:Nn #2 { p } }
    \tl_if_eq:nnT { #1 } { P }   { \tl_set:Nn #2 { p } }
  }

\cs_new:Nn \ghsystem_is_combination:nn
  {
    \tl_if_in:nnTF { #2 } { + }
      { \ghsystem_is_combination_aux_i:w #1,#2 \q_stop }
      { \ghsystem_is_combination_aux_ii:w #1,#2 \q_stop }
  }

\cs_new:Npn \ghsystem_is_combination_aux_i:w #1,#2+#3 \q_stop
  {
    \bool_if:NT \l_ghsystem_show_number_bool
      {
        \tl_to_uppercase:n { #1 }
        \tl_use:N \l_ghsystem_number_space_tl
        #2 ~ + ~
        \tl_if_in:nnTF { #3 } { + }
          { \ghsystem_is_combination_aux_iii:w #1,#3 \q_stop }
          {
            \tl_to_uppercase:n { #1 }
            \tl_use:N \l_ghsystem_number_space_tl
            #3 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ }
          }
      }
  }

\cs_new:Npn \ghsystem_is_combination_aux_ii:w #1,#2 \q_stop
  {
    \bool_if:NT \l_ghsystem_show_number_bool
      {
        \tl_to_uppercase:n { #1 }
        \tl_use:N \l_ghsystem_number_space_tl
        #2 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ }
      }
  }

\cs_new:Npn \ghsystem_is_combination_aux_iii:w #1,#2+#3 \q_stop
  {
    \bool_if:NT \l_ghsystem_show_number_bool
      {
        \tl_to_uppercase:n { #1 }
        \tl_use:N \l_ghsystem_number_space_tl
        #2 ~ + ~
        \tl_to_uppercase:n { #1 }
        \tl_use:N \l_ghsystem_number_space_tl
        #3 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ }
      }
  }

% --------------------------------------------------------------------------- %
% list all statements in a table
%
\NewDocumentCommand \ghslistall { o }
  {
    \group_begin:
      \IfNoValueF { #1 } { \keys_set:nn { chemmacros / ghsystem } { #1 } }
      \int_zero:N \l_tmpa_int
      \int_zero:N \l_tmpb_int
      \prop_map_inline:Nn \l_ghsystem_p_prop { \int_incr:N \l_tmpa_int }
      \dim_set_eq:NN \tabulinesep \l_ghsystem_table_line_sep_dim
      \begin { longtabu } { X[3]X[7,L] }
          \caption [ \l_ghsystem_table_caption_short_tl ]
            {
              \l_ghsystem_table_caption_tl
              \exp_args:No \label { \l_ghsystem_table_label_tl }
            } \\
          \l_ghsystem_table_top_head_rule_tl
          \textbf { \l_ghsystem_identifier_tl } &
          \textbf { \l_ghsystem_table_text_tl } \\
          \l_ghsystem_table_head_rule_tl
        \endfirsthead
          \l_ghsystem_table_top_head_rule_tl
          \textbf { \l_ghsystem_identifier_tl } &
          \textbf { \l_ghsystem_table_text_tl } \\
          \l_ghsystem_table_head_rule_tl
        \endhead
          \l_ghsystem_table_last_foot_rule_tl
          \multicolumn{2}{r} { \textit { \l_ghsystem_table_next_page_tl } }
        \endfoot
          \l_ghsystem_table_foot_rule_tl \multicolumn{2}{r} { }
        \endlastfoot
        \prop_map_inline:Nn \l_ghsystem_h_prop
          { \ghsystem_read_number:nn { H } { ##1 } & ##2 \\ }
        \prop_map_inline:Nn \l_ghsystem_euh_prop
          { \ghsystem_read_number:nn { EUH } { ##1 } & ##2 \\ }
        \int_zero:N \l_tmpa_int
        \prop_map_inline:Nn \l_ghsystem_p_prop { \int_gincr:N \l_tmpa_int }
        \int_zero:N \l_tmpb_int
        \prop_map_inline:Nn \l_ghsystem_p_prop
          {
            \int_gincr:N \l_tmpb_int
            \ghsystem_read_number:nn { P } { ##1 } & ##2
            \int_compare:nNnT { \l_tmpb_int } < { \l_tmpa_int } { \\ }
          }
      \end { longtabu }
    \group_end:
  }

\cs_new:Nn \ghsystem_read_number:nn
  {
    \tl_if_in:nnTF { #2 } { + }
      { \ghsystem_read_number_aux_i:w #1 , #2 \q_stop }
      { #1 \tl_use:N \l_ghsystem_number_space_tl #2 }
  }

\cs_new:Npn \ghsystem_read_number_aux_i:w #1,#2+#3\q_stop
  {
     #1 \tl_use:N \l_ghsystem_number_space_tl #2 ~+~
     \tl_if_in:nnTF { #3 } { + }
       { \ghsystem_read_number_aux_ii:w #1,#3 \q_stop }
       { #1#3 }
  }

\cs_new:Npn \ghsystem_read_number_aux_ii:w #1,#2+#3\q_stop { #1#2 ~+~ #1#3 }

% --------------------------------------------------------------------------- %
% the picture command
%   \ghspic[<options>]{<name>}
%
% test for compilation engine/mode:
\pdftex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_pdftex_bool }
\xetex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_xetex_bool }
\luatex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_luatex_bool }

\bool_new:N \l_ghsystem_picture_directory_bool

\bool_if:NT \l_ghsystem_engine_pdftex_bool
  {
    \ifpdf
      \tl_set:Nn \l_ghsystem_picture_type_tl { pdf }
    \else
      \tl_set:Nn \l_ghsystem_picture_type_tl { eps }
    \fi
  }
\bool_if:NT \l_ghsystem_engine_xetex_bool
  { \tl_set:Nn \l_ghsystem_picture_type_tl { pdf } }
\bool_if:NT \l_ghsystem_engine_luatex_bool
  { \tl_set:Nn \l_ghsystem_picture_type_tl { pdf } }

% the command:
\NewDocumentCommand \ghspic { om }
  {
    \file_if_exist:nTF { pictures / ghsystem_ #2 . \l_ghsystem_picture_type_tl }
      { \bool_set_true:N \l_ghsystem_picture_directory_bool }
      { \bool_set_false:N \l_ghsystem_picture_directory_bool }
    \group_begin:
      \IfNoValueF { #1 } { \keys_set:nn { chemmacros / ghsystem } { #1 } }
      \bool_if:NTF \l_ghsystem_picture_directory_bool
        {
          \ghsystem_includegraphics:xn
            {
              scale = \fp_to_tl:N \l_ghsystem_picture_scale_fp
              \l_ghsystem_picture_includegraphics_tl
            }
            { pictures / ghsystem_ #2 . \l_ghsystem_picture_type_tl }
        }
        {
          \ghsystem_includegraphics:xn
            {
              scale = \fp_to_tl:N \l_ghsystem_picture_scale_fp
              \l_ghsystem_picture_includegraphics_tl
            }
            { ghsystem_ #2 . \l_ghsystem_picture_type_tl }
        }
    \group_end:
  }

\cs_new:Nn \ghsystem_includegraphics:nn
  { \includegraphics[#1]{#2} }
\cs_generate_variant:Nn \ghsystem_includegraphics:nn { xn }

\tex_endinput:D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
VERSION HISTORY
2012/01/28 - version 3.0  - first published to CTAN with the chemmacros bundle
2012/01/30 - version 3.0a - bugfix in chemormula.sty, renamed ghs => ghsystem
2012/02/03 - version 3.0b - updated documentation
2012/02/05 - version 3.0c - renamed pictogram files
2012/02/10 - version 3.0d - several bugfixes in chemformula, some new commands
                            and options in chemmacros
2012/02/19 - version 3.1  - new functions in the chemmacros package
                          - new arrow types and functions in the chemformula
                            package
2012/02/26 - version 3.1a - changes in the chemmacros package
2012/03/03 - version 3.1b - changes in packages chemformula and chemmacros
2012/03/14 - version 3.1c - changes in packages chemformula and chemmacros
2012/03/20 - version 3.2  - changes in packages chemformula and chemmacros
2012/05/07 - version 3.3  - changes in packages chemformula and chemmacros
                          - support for chemmacros' new language settings
2012/05/13 - version 3.3a - Italian translations of the H, EUH and P statements
                          - removed erroneous empty line at the end of the table
                            created by \ghslistall
2012/05/18 - version 3.3b - compatibility with MiKTeX
2012/05/18 - version 3.3c - fix in the `ghsystem/language' option
2012/07/24 - version 3.3d - additional picture file type `pdf'
                          - default bond length set to 1.1667ex
                          - bug fix in the bonds
                          - added kerning to cip commands, new option
                            `iupac/cip-kern'
                          - bug fix: messages needed to be defined before the
                            options
2012/08/08 - version 3.3e - new option ox/align=center|right

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% TODO:
- add option to switch between `longtable` and `supertabular` for \ghslistall ?