% --------------------------------------------------------------------------
%
% the CHEMMACROS package -- module: `polymers'
%
% --------------------------------------------------------------------------
% Clemens Niederberger
% --------------------------------------------------------------------------
% https://github.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--2020 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.
% --------------------------------------------------------------------------
\ChemModule{polymers}{2018/03/02 polymers}

\chemmacros_load_modules:n {nomenclature,tikz}

% --------------------------------------------------------------------------
% copolymers
\NewChemIUPAC \copolymer { \textit {co} }
\LetChemIUPAC \co \copolymer

\NewChemIUPAC \statistical { \textit {stat} }
\LetChemIUPAC \stat \statistical

\NewChemIUPAC \random { \textit {ran} }
\LetChemIUPAC \ran \random

\NewChemIUPAC \alternating { \textit {alt} }
\LetChemIUPAC \alt \alternating

\NewChemIUPAC \periodic { \textit {per} }
\LetChemIUPAC \per \periodic

\NewChemIUPAC \block { \textit {block} }
\NewChemIUPAC \graft { \textit {graft} }

% --------------------------------------------------------------------------
% non-linear (co)polymers
\NewChemIUPAC \blend { \textit {blend} }
\NewChemIUPAC \comb { \textit {comb} }

\NewChemIUPAC \complex { \textit {compl} }
\LetChemIUPAC \compl \complex

\NewChemIUPAC \cyclic { \textit {cyclo} }
\LetChemIUPAC \cyclo \cyclic

\NewChemIUPAC \branch { \textit {branch} }
\NewChemIUPAC \network { \textit {net} }
\LetChemIUPAC \net \network

\NewChemIUPAC \ipnetwork { \textit {ipn} }
\LetChemIUPAC \ipn \ipnetwork

\NewChemIUPAC \sipnetwork { \textit {sipn} }
\LetChemIUPAC \sipn \sipnetwork

\NewChemIUPAC \star { \textit {star} }

% --------------------------------------------------------------------------

\tl_new:N \l__chemmacros_polymer_delimiter_left_tl
\tl_new:N \l__chemmacros_polymer_delimiter_right_tl

\tl_new:N \l__chemmacros_polymer_subscript_tl
\tl_new:N \l__chemmacros_polymer_superscript_tl

\dim_new:N \l__chemmacros_polymer_delimiter_height_dim
\dim_new:N \l__chemmacros_polymer_delimiter_depth_dim

\cs_new_protected:Npn \__chemmacros_set_polymer_delimiters:NN #1#2
  {
    \tl_set:Nn \l__chemmacros_polymer_delimiter_left_tl  {#1}
    \tl_set:Nn \l__chemmacros_polymer_delimiter_right_tl {#2}
  }

% #1: height
% #2: depth
% #3: opening node
% #4: closing node
% #5: subscript
% #6: superscript 
\cs_new_protected:Npn \chemmacros_make_polymer_braces:nnnnnn #1#2#3#4#5#6
  {
    \dim_set:Nn \l__chemmacros_polymer_delimiter_height_dim { (#1+#2)/2 }
    \dim_set:Nn \l__chemmacros_polymer_delimiter_depth_dim  { (#1-#2)/2 }
    \chemmacros_tikz_picture:nn {remember~ picture, overlay }
      {
        \chemmacros_tikz_node:n
          { at = (#3) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
          {
            \c_math_toggle_token
              \tex_left:D \l__chemmacros_polymer_delimiter_left_tl
              \tex_vrule:D
                height \l__chemmacros_polymer_delimiter_height_dim
                depth \l__chemmacros_polymer_delimiter_height_dim
                width \c_zero_dim
              \tex_right:D .
            \c_math_toggle_token
          } ;
        \chemmacros_tikz_node:n
          { at = (#4) , yshift = \l__chemmacros_polymer_delimiter_depth_dim }
          {
            \c_math_toggle_token
              \tex_left:D .
              \tex_vrule:D
                height \l__chemmacros_polymer_delimiter_height_dim
                depth \l__chemmacros_polymer_delimiter_height_dim
                width \c_zero_dim
              \tex_right:D \l__chemmacros_polymer_delimiter_right_tl
              \c_math_subscript_token
                {
                  \hbox_overlap_right:n
                    {
                      \chemmacros_if_compatibility:nnTF {>} {5.8b}
                        { \smash {#5} }
                        {#5}
                    }
                }
              \c_math_superscript_token
                {
                  \hbox_overlap_right:n
                    {
                      \chemmacros_if_compatibility:nnTF {>} {5.8b}
                        { \smash {#6} }
                        {#6}
                    }
                }
            \c_math_toggle_token
          } ;
      }
  }
\cs_generate_variant:Nn \chemmacros_make_polymer_braces:nnnnnn {nnnnVV}

\chemmacros_define_keys:nn {polymers}
  {
    delimiters  .code:n = \__chemmacros_set_polymer_delimiters:NN #1 ,
    delimiters  .initial:n = [] ,
    superscript .tl_set:N = \l__chemmacros_polymer_superscript_tl ,
    subscript   .tl_set:N = \l__chemmacros_polymer_subscript_tl ,
    subscript   .initial:n = $n$
  }

\NewDocumentCommand \makepolymerdelims {O{}momm}
  {
    \group_begin:
      \chemmacros_set_keys:nn {polymers} {#1}
      \IfNoValueTF {#3}
        {
          \chemmacros_make_polymer_braces:nnnnVV {#2} {#2} {#4} {#5}
            \l__chemmacros_polymer_subscript_tl
            \l__chemmacros_polymer_superscript_tl
        }
        {
          \chemmacros_make_polymer_braces:nnnnVV {#2} {#3} {#4} {#5}
            \l__chemmacros_polymer_subscript_tl
            \l__chemmacros_polymer_superscript_tl
        }
    \group_end:
  }
  
% --------------------------------------------------------------------------
\file_input_stop:

2016/03/07 - first version
2016/03/08 - \makepolymerdelims
2018/03/02 - smash sub- and superscripts of polymer delimiters
