summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-02-02 21:54:50 +0000
committerKarl Berry <karl@freefriends.org>2014-02-02 21:54:50 +0000
commit854f058d812a95468e75e7e8f722c2fa29a18305 (patch)
tree2edee8d02b0d310e227a9a900c2637e82ae9e8e8 /Master/texmf-dist/tex/latex/mhchem/mhchem.sty
parent02a4fc71679895429385a94acdbd1f9f37a23b13 (diff)
mhchem (2feb14)
git-svn-id: svn://tug.org/texlive/trunk@32850 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/mhchem/mhchem.sty')
-rw-r--r--Master/texmf-dist/tex/latex/mhchem/mhchem.sty2143
1 files changed, 1113 insertions, 1030 deletions
diff --git a/Master/texmf-dist/tex/latex/mhchem/mhchem.sty b/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
index 9f8d8f2fc34..949bd97f148 100644
--- a/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
+++ b/Master/texmf-dist/tex/latex/mhchem/mhchem.sty
@@ -1,5 +1,5 @@
%% mhchem.sty
-%% Copyright 2004-2013 Martin Hensel
+%% Copyright 2004-2014 Martin Hensel
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c
@@ -27,7 +27,7 @@
% This work consists of all files listed in manifest.txt.
%
%
-\ProvidesPackage{mhchem}[2013/06/17 v3.12 for typesetting chemical formulae]
+\ProvidesPackage{mhchem}[2014/02/01 v3.15 for typesetting chemical formulae]
\RequirePackage{ifthen}
\RequirePackage{calc}[1998/07/07]
\RequirePackage{twoopt}
@@ -35,6 +35,7 @@
\RequirePackage{keyval}
\RequirePackage{graphics}
\RequirePackage{pdftexcmds}
+\RequirePackage{expl3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% misc %%%%%%%%%%
@@ -52,7 +53,7 @@
\newcommand*{\cee}[1]{%
\def\mhchem@ce@out{}%
- {\mhchem@cee@i#1\mhchem@empty\\\mhchem@END\mhchem@ENDEND}%
+ {\mhchem@cee@i#1\\\mhchem@END\mhchem@ENDEND}%
\ensuremath{%
\mhchem@ce@out%
}%
@@ -793,10 +794,16 @@
\def\mhchem@bond#1{%
\ifnum\pdf@strcmp{#1}{-}=0%
\sbond%
+ \else\ifnum\pdf@strcmp{#1}{1}=0%
+ \sbond%
\else\ifnum\pdf@strcmp{#1}{=}=0%
\dbond%
+ \else\ifnum\pdf@strcmp{#1}{2}=0%
+ \dbond%
\else\ifnum\pdf@strcmp{#1}{##}=0%
\tbond%
+ \else\ifnum\pdf@strcmp{#1}{3}=0%
+ \tbond%
\else\ifnum\pdf@strcmp{#1}{~}=0%
\mhchem@setbondwidth%
\mhchem@halfbond%
@@ -829,944 +836,1039 @@
{\leftarrow}%
\else
\PackageError{mhchem}{Unknown bond type in \string\bond (#1)}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% loop helper %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ExplSyntaxOn
+
+\msg_new:nnn { mhchem } { cf / unexpected-input } { Assertion~failed:~Unexpected~input~character.~You~found~a~bug.~Please~contact~the~author. }
+\msg_new:nnn { mhchem } { cf / unexpected-state } { Assertion~failed:~Unexpected~internal~state~'#1'.~You~found~a~bug.~Please~contact~the~author. }
+\msg_new:nnn { mhchem } { cf / unexpected-two-superscripts } { Assertion~failed:~Two~superscripts.~You~entered~an~invalid~formula.~Or~you~found~a~bug,~in~which~case~you~should~contact~the~author. }
+
+\cs_generate_variant:Nn \peek_catcode_remove:NTF { oTF }
+\cs_generate_variant:Nn \peek_catcode:NTF { oTF }
+\cs_generate_variant:Nn \str_case:nnn { Vnn }
+
+\cs_new:Npn \__mhchem_loopHelper_appendNextToken:NNn #1#2#3
+ {
+ \tl_put_right:Nn #1 { #3 }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_appendNextGroup:NNn #1#2#3
+ {
+ \tl_put_right:Nn #1 { { #3 } }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_appendMath:NNw #1#2#3$
+ {
+ \tl_put_right:Nn #1 { \text { \ensuremath { #3 } } }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_appendMathAsGroup:NNw #1#2#3$
+ {
+ \tl_put_right:Nn #1 { \text { \ensuremath { #3 } } }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn #1#2#3
+ {
+ \tl_put_right:Nn #1 { \ensuremath { \mathrm{ #3 } } }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_useNone:Nn #1#2
+ {
+ #1
+ }
+\cs_new:Npn \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn #1#2#3
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl { \mhchem@mathOrText{#3} }
+ \tl_set:Nn \__mhchem_cf_state_tl { #1 }
+ #2
+ }
+\cs_new:Npn \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn #1#2#3#4
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl { #1 }
+ \tl_set:Nn \__mhchem_cf_state_tl { #2 }
+ #3
+ }
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% \cf %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\newtoks\mhchem@cf@result%
\newcommand*\mhchem@cf[2][]{%
- \bgroup%
- \def\sbond{{\ensuremath{-}}}%
- \ifnum 2=\mhchem@option@version%
- \let\bond\sbond%
- \else\ifnum 2<\mhchem@option@version%
- \DeclareRobustCommand*\bond{\mhchem@bond}%
- \fi\fi%
- \DeclareRobustCommand\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}%
- \DeclareRobustCommand\tbond{\rlap{\protect\raisebox{.4ex}{\sbond}}%
- \rlap{\sbond}\protect\raisebox{-.4ex}{\sbond}}%
- \def\hyphen{\mhchem@hyphen}%
- \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi%
- \if 1\mhchem@option@alwaystextmode%
- \edef\mhchem@mathOrText##1{\noexpand\text{##1}}%
- \edef\mhchem@mathOrText@ii##1##2{##2}%
- \else%
- \ifnum 1<\mhchem@option@version%
- \edef\mhchem@mathOrText##1{\ifmmode\noexpand\mhchem@option@mathFont{##1}\else\noexpand\text{##1}\fi}%
- \edef\mhchem@mathOrText@ii##1##2{\ifmmode\noexpand\mhchem@option@mathFont{##1}\else ##2\fi}%
- \else%
- \edef\mhchem@mathOrText##1{\ifmmode ##1\else\noexpand\text{##1}\fi}%
- \edef\mhchem@mathOrText@ii##1##2{\ifmmode ##1\else ##2\fi}%
- \fi%
- \fi%
- \ifmmode\else\mhchem@option@textFont\fi%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@startedWithBond{0}%
- \mhchem@cf@outputReset%
- \mhchem@cf@result={}%
- \mhchem@cf@continue#2\mhchem@END%
- \ifthenelse{\equal{#1}{}}%
- {%
- \ensuremath{\the\mhchem@cf@result}%
- }{%
- \ensuremath{\overset{#1}{\the\mhchem@cf@result}}%
- }%
- \egroup%
-}%
-\def\mhchem@cf@i{%
- \ifx\mhchem@END\mhchem@cf@lookahead%
- \if -\mhchem@cf@state%
- \ifnum 4>\mhchem@option@version%
- \mhchem@appendToks{\mhchem@cf@sup}{-}%
- \else%
- \if 0\mhchem@cf@startedWithBond%
- \mhchem@appendToks{\mhchem@cf@sup}{-}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\sbond}%
- \fi%
- \fi%
- \else\if 1\mhchem@cf@state%
- \def\mhchem@cf@state{9}%
- \fi\fi%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \let\mhchem@cf@action\mhchem@gobble%
- \else\ifx\relax\mhchem@cf@lookahead%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\ifx\protect\mhchem@cf@lookahead%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \if -\mhchem@cf@state%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\sbond}%
- \def\mhchem@cf@state{+}%
- \fi%
- \if s\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \def\mhchem@cf@state{q}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{P}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{Q}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}%
- \fi%
- \else\if .\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \fi%
- \else\if +\mhchem@cf@lookahead%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
- \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \def\mhchem@cf@startedWithBond{1}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \def\mhchem@cf@startedWithBond{1}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\if |\mhchem@cf@lookahead%
- \let\mhchem@cf@action\mhchem@cf@switchState%
- \else\if (\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if )\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if [\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if ]\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if *\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}%
- \fi%
- \else\if $\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
- \else%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}%
- \fi%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else\if C\mhchem@cf@state%
- \if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi%
- \def\mhchem@cf@state{c}%
- \else\if c\mhchem@cf@state%
- \if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@continue}%
- \fi%
- \else\if 1\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{q}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{E}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}%
- \else\if .\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if |\mhchem@cf@lookahead%
- \PackageWarning{mhchem}{The symbol | is not allowed here}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if (\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if )\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if [\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if ]\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if *\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}%
- \fi%
- \else\if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else\if a\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \def\mhchem@cf@state{f}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{E}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
- \fi%
- \else\if .\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if +\mhchem@cf@lookahead%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
- \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\if |\mhchem@cf@lookahead%
- \PackageWarning{mhchem}{The symbol | is not allowed here}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if (\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if )\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if [\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if ]\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if *\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \def\mhchem@cf@state{2}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroupAsMath{%
- \mhchem@cf@element}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
- \fi%
- \else\if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else\if 2\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \def\mhchem@cf@state{f}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{E}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{F}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{,}}%
- \fi%
- \else\if .\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \fi%
- \else\if +\mhchem@cf@lookahead%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
- \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\if |\mhchem@cf@lookahead%
- \PackageWarning{mhchem}{The symbol | is not allowed here}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if (\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if )\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if [\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if ]\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if *\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
- \fi%
- \else\if $\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else\if e\mhchem@cf@state%
- \def\mhchem@cf@state{+}%
- \if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@sup}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
- \fi%
- \else\if f\mhchem@cf@state%
- \def\mhchem@cf@state{+}%
- \if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@amount}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \fi%
- \else\if p\mhchem@cf@state%
- \def\mhchem@cf@state{*}%
- \if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presup}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presup}}%
- \fi%
- \else\if q\mhchem@cf@state%
- \def\mhchem@cf@state{*}%
- \if $\mhchem@cf@lookahead%
- \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presub}}%
- \else%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presub}}%
- \fi%
- \else\if E\mhchem@cf@state%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{%
- \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@sup}}%
- \else\if F\mhchem@cf@state%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{%
- \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@amount}}%
- \else\if P\mhchem@cf@state%
- \def\mhchem@cf@state{*}%
- \def\mhchem@cf@action{%
- \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presup}}%
- \else\if Q\mhchem@cf@state%
- \def\mhchem@cf@state{*}%
- \def\mhchem@cf@action{%
- \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presub}}%
- \else\if +\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \def\mhchem@cf@state{e}%
- \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
- \mhchem@appendToks{\mhchem@cf@sup}{,}%
- \fi%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \def\mhchem@cf@state{f}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{E}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{F}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
- \fi%
- \else\if .\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if +\mhchem@cf@lookahead%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
- \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@lookahead%
- \ifnum 1<\mhchem@option@version%
- \def\mhchem@cf@state{-}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{+}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
- \fi%
- \else\if |\mhchem@cf@lookahead%
- \PackageWarning{mhchem}{The symbol | is not allowed here}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if (\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if )\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if [\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if ]\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if *\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
- \fi%
- \else\if $\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else\if *\mhchem@cf@state%
- \ifx \{\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifx \}\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\expandafter\ifx\mhchem@char@equal@other\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@equal@active\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\dbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if ##\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \mhchem@appendToks{\mhchem@cf@result}{\tbond}%
- \def\mhchem@cf@state{+}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@super\mhchem@cf@lookahead%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\expandafter\ifx\mhchem@char@caret@active\mhchem@cf@lookahead%
- \def\mhchem@cf@state{p}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if _\mhchem@cf@lookahead%
- \def\mhchem@cf@state{q}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if `\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{P}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if ,\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \def\mhchem@cf@state{Q}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
- \fi%
- \else\if .\mhchem@cf@lookahead%
- \ifnum 4>\mhchem@option@version%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \fi%
- \else\if |\mhchem@cf@lookahead%
- \PackageWarning{mhchem}{The symbol | is not allowed here}%
- \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
- \else\if (\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\if )\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\if [\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\if ]\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\if *\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
- {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
- \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{c}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \else\ifcat a\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
- \else\ifcat 1\mhchem@cf@lookahead%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{1}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
- \else\if $\mhchem@cf@lookahead%
- \def\mhchem@cf@state{a}%
- \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
- \else%
- \mhchem@cf@outputAndReset{\mhchem@cf@result}%
- \def\mhchem@cf@state{s}%
- \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \else%
- \PackageWarning{mhchem}{Assertion failed: unknown internal state \mhchem@cf@state}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
- \fi\fi\fi%
- \mhchem@cf@action%
-}%
-\def\mhchem@cf@continue{%
- \futurelet\mhchem@cf@lookahead\mhchem@cf@i%
-}%
-\def\mhchem@cf@gobbleNextToken#1{%
- \mhchem@cf@continue%
-}%
-\def\mhchem@cf@appendNextToken#1#2{%
- \mhchem@appendToks{#1}{#2}%
- \mhchem@cf@continue%
+ \__mhchem_cf{#1}{#2}%
}
-\def\mhchem@cf@appendNextTokenAsMathrm#1#2{%
- \mhchem@appendToks{#1}{\ensuremath{\mathrm{#2}}}%
- \mhchem@cf@continue%
-}
-\def\mhchem@cf@appendNextGroup#1#2{%
- \mhchem@appendToks{#1}{{#2}}%
- \mhchem@cf@continue%
-}
-\def\mhchem@cf@appendNextGroupAsMath#1#2{%
- \mhchem@appendToks{#1}{\text{\ensuremath{#2}}}%
- \mhchem@cf@continue%
-}
-\def\mhchem@cf@append#1#2#3{%
- \mhchem@appendToks{#1}{#2}%
- \mhchem@cf@continue%
-}%
-\def\mhchem@cf@appendMath#1#2#3${%
- \mhchem@appendToks{#1}{\text{\ensuremath{#3}}}%
- \mhchem@cf@continue%
-}%
-\def\mhchem@cf@appendMathAsGroup#1#2#3${%
- \mhchem@appendToks{#1}{{\text{\ensuremath{#3}}}}%
- \mhchem@cf@continue%
-}%
+\tl_new:N \__mhchem_cf_state_tl
+\bool_new:N \__mhchem_cf_startedWithBond_bool
+\bool_new:N \__mhchem_cf_cfActive_bool
+\bool_set_false:N \__mhchem_cf_cfActive_bool
+\int_new:N \__mhchem_option_version_int
+\cs_new:Npn \__mhchem_cf #1#2
+ {
+ \group_begin:
+ \int_set:Nn \__mhchem_option_version_int { \mhchem@option@version }
+ \def\sbond{{\ensuremath{-}}}%
+ \ifnum 2=\mhchem@option@version%
+ \let\bond\sbond%
+ \else\ifnum 2<\mhchem@option@version%
+ \DeclareRobustCommand*\bond{\mhchem@bond}%
+ \fi\fi%
+ \DeclareRobustCommand\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}%
+ \DeclareRobustCommand\tbond{\rlap{\protect\raisebox{.4ex}{\sbond}}%
+ \rlap{\sbond}\protect\raisebox{-.4ex}{\sbond}}%
+ \def\hyphen{\mhchem@hyphen}%
+ \bool_if:NF \__mhchem_cf_cfActive_bool
+ {
+ \bool_set_true:N \__mhchem_cf_cfActive_bool
+ \mode_if_math:F
+ {
+ \def\mhchem@option@alwaystextmode{1}
+ \mhchem@option@textFont
+ }
+ \str_if_eq:nnTF { 1 } { \mhchem@option@alwaystextmode }
+ {
+ \cs_set:Npx \mhchem@mathOrText ##1 { \exp_not:N \text{##1} }
+ \cs_set:Npx \mhchem@mathOrText@ii ##1##2 { ##2 }
+ }
+ {
+ \int_compare:nTF { 1 < \mhchem@option@version }
+ {
+ \cs_set:Npx \mhchem@mathOrText ##1
+ {
+ \mode_if_math:TF { \exp_not:N \mhchem@option@mathFont{##1} } { \exp_not:N \text{##1} }
+ }
+ \cs_set:Npx \mhchem@mathOrText@ii ##1##2
+ {
+ \mode_if_math:TF { \exp_not:N \mhchem@option@mathFont{##1} } { ##2 }
+ }
+ }
+ {
+ \cs_set:Npx \mhchem@mathOrText ##1
+ {
+ \mode_if_math:TF { ##1 } { \exp_not:N \text{##1} }
+ }
+ \cs_set:Npx \mhchem@mathOrText@ii ##1##2
+ {
+ \mode_if_math:TF { ##1 } { ##2 }
+ }
+ }
+ }
+ }
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \bool_set_false:N \__mhchem_cf_startedWithBond_bool
+ \__mhchem_cf_resetOutput:
+ \tl_clear_new:N \__mhchem_cf_result_tl
+ \__mhchem_cf_loop: #2 \q_recursion_stop
+ \str_if_eq:nnTF {#1} {}
+ { \ensuremath{\tl_use:N \__mhchem_cf_result_tl} }
+ { \ensuremath{\overset{#1}{\tl_use:N \__mhchem_cf_result_tl}} }
+ \bool_set_false:N \__mhchem_cf_cfActive_bool
+ \group_end:
+ }
+\cs_new:Nn \__mhchem_cf_loop:
+ {
+ \peek_meaning_remove:NTF \q_recursion_stop
+ {
+ \str_case:Vnn { \__mhchem_cf_state_tl }
+ {
+ { - }
+ {
+ \bool_if:NTF \__mhchem_cf_startedWithBond_bool
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl {\sbond}
+ }
+ { \tl_put_right:Nn \__mhchem_cf_sup_tl {-} }
+ }
+ { 1 }
+ { \tl_set:Nn \__mhchem_cf_state_tl {9} }
+ }
+ {}
+ \__mhchem_cf_outputAndReset:
+ }{
+ \peek_meaning:NTF \relax
+ { \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: }{
+ \peek_meaning:NTF \protect
+ { \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop: }{
+ \str_case:Vnn { \__mhchem_cf_state_tl }
+ {
+ { - }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl {\sbond}
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_cf_loop:
+ }
+ { s }
+ {
+ \peek_charcode:NTF -
+ {
+ \int_compare:nTF { 1 < \__mhchem_option_version_int }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { - }
+ \bool_set_true:N \__mhchem_cf_startedWithBond_bool
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \tl_put_right:Nn \__mhchem_cf_sup_tl { - }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF =
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \dbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ##
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \tbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ^
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { p }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF _
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { q }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF `
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { P }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF ,
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { Q }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 1 }
+ \tl_put_right:Nn \__mhchem_cf_sub_tl { {,} }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF .
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF *
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF +
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF |
+ {
+ \let\mhchem@cf@action\mhchem@cf@switchState
+ }{
+ \peek_charcode:NTF (
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF )
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF [
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ]
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF \mhchem@macro
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { c }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF a
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn
+ \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF 1
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 1 }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 1 }
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 1 }
+ \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }
+ {
+ \msg_error:nnn { mhchem } { cf/unexpected-input }
+ }
+ }}}}}}}}}}}}}}}}}}}
+ }
+ { C }
+ {
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ \tl_set:Nn \__mhchem_cf_state_tl { c }
+ }
+ { c }
+ {
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_cf_loop:
+ }
+ }
+ { 1 }
+ {
+ \peek_charcode:NTF 1
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 2
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 3
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 4
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 5
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 6
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 7
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 8
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 9
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF 0
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF .
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \peek_charcode:NTF ,
+ {
+ \tl_put_right:Nn \__mhchem_cf_element_tl { {,} }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \peek_charcode:NTF /
+ { \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop: }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_cf_loop:
+ }}}}}}}}}}}}}
+ }
+ { a }
+ {
+ \peek_charcode:NTF -
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { - }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF =
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \dbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ##
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \tbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ^
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { k }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF _
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { f }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF `
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { E }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF ,
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { F }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 1 }
+ \tl_put_right:Nn \__mhchem_cf_sub_tl { , }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF .
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF *
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF +
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF |
+ {
+ \PackageWarning{mhchem}{The symbol | is not allowed here}
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF (
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF )
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF [
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ]
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF \mhchem@macro
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { c }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF a
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF 1
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { 2 }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \__mhchem_cf_outputAndReset:
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \msg_error:nnn { mhchem } { cf/unexpected-input }
+ }}}}}}}}}}}}}}}}}}}}
+ }
+ { 2 }
+ {
+ \peek_charcode:NTF -
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { - }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF =
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl {\dbond}
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ##
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_put_right:Nn \__mhchem_cf_result_tl {\tbond}
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ^
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { e }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF _
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { f }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF `
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { E }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF ,
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { F }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_put_right:Nn \__mhchem_cf_sub_tl { , }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF .
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF *
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF +
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF |
+ {
+ \PackageWarning{mhchem}{The symbol | is not allowed here}
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF (
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF )
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF [
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ]
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF \mhchem@macro
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { c }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF a
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF 1
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }}}}}}}}}}}}}}}}}}}}
+ }
+ { e }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }
+ }
+ { k }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_supA_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_supA_tl \__mhchem_cf_loop:
+ }
+ }
+ { f }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ }
+ { p }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { * }
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_presup_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_presup_tl \__mhchem_cf_loop:
+ }
+ }
+ { q }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { * }
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_loopHelper_appendMathAsGroup:NNw \__mhchem_cf_presub_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_presub_tl \__mhchem_cf_loop:
+ }
+ }
+ { E }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }
+ { F }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_sub_tl \__mhchem_cf_loop:
+ }
+ { P }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { * }
+ \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_presup_tl \__mhchem_cf_loop:
+ }
+ { Q }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { * }
+ \__mhchem_loopHelper_appendNextTokenAsMathrm:NNn \__mhchem_cf_presub_tl \__mhchem_cf_loop:
+ }
+ { + }
+ {
+ \peek_charcode:NTF -
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { - }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF =
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \dbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ##
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \tbond }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ^
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { e }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF _
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { f }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF `
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { E }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF ,
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { F }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \tl_put_right:Nn \__mhchem_cf_element_tl { , }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF .
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF *
+ {
+ \__mhchem_loopHelper_outputAndReset_appendToResult_setState_useNone:NNn
+ { \mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot} }
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF +
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { + }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_sup_tl \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF |
+ {
+ \PackageWarning{mhchem}{The symbol | is not allowed here}
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF (
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF )
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF [
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { s }
+ \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF ]
+ {
+ \__mhchem_loopHelper_outputAndReset_appendNextTokenToResult_setState:NNn
+ { a }
+ \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF \mhchem@macro
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { c }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF a
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:NTF 1
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }{
+ \peek_catcode:oTF \c_group_begin_token
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_catcode_remove:oTF \c_math_toggle_token
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }}}}}}}}}}}}}}}}}}}}
+ }
+ { * }
+ {
+ \peek_charcode:NTF ^
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { p }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF _
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { q }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }{
+ \peek_charcode:NTF `
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { P }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_element_tl \__mhchem_cf_loop:
+ }
+ }{
+ \peek_charcode:NTF ,
+ {
+ \int_compare:nTF { 4 > \mhchem@option@version }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { Q }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ {
+ \tl_set:Nn \__mhchem_cf_state_tl { a }
+ \tl_put_right:Nn \__mhchem_cf_element_tl { , }
+ \__mhchem_loopHelper_useNone:Nn \__mhchem_cf_loop:
+ }
+ }
+ {
+ \__mhchem_cf_outputAndReset:
+ \tl_set:Nn \__mhchem_cf_state_tl { s }
+ \__mhchem_cf_loop:
+ }}}}
+ }
+ }
+ {
+ \msg_error:nnx { mhchem } { cf / unexpected-state } { \__mhchem_cf_state_tl }
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_result_tl \__mhchem_cf_loop:
+ }
+ }}}
+ }
\def\mhchem@cf@switchState#1#2|{%
\ifthenelse{\equal{1}{#2}}{%
- \def\mhchem@cf@state{a}%
+ \tl_set:Nn \__mhchem_cf_state_tl { a }%
}{%
\PackageWarning{mhchem}{Command |#2| unknown}%
}%
\mhchem@cf@continue%
}%
-\newtoks\mhchem@cf@element%
-\newtoks\mhchem@cf@amount%
-\newtoks\mhchem@cf@sup%
-\newtoks\mhchem@cf@presub%
-\newtoks\mhchem@cf@presup%
-\def\mhchem@cf@output{%
- \if s\mhchem@cf@state%
- \else\if 1\mhchem@cf@state%
- \noexpand\mhchem@mathOrText{\noexpand\mhchem@cf@frac\the\mhchem@cf@amount/\noexpand\mhchem@END{\mhchem@option@skipAfterFracAmount}}%
- \else\if 9\mhchem@cf@state%
- \noexpand\mhchem@mathOrText{\noexpand\mhchem@cf@frac\the\mhchem@cf@amount/\noexpand\mhchem@END{}}%
- \else%
- \if\mhchem@option@usenonsimultaneoussubsuperscripts 0\relax%
- \noexpand\mhchem@chemfive%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}%
- {\the\mhchem@cf@element}%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}%
- {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}%
- {}%
- \else%
- \noexpand\mhchem@chemfive%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}%
- {\the\mhchem@cf@element}%
- {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}%
- {}%
- {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}%
- \fi%
- \fi\fi\fi%
+\tl_new:N \__mhchem_cf_presup_tl
+\tl_new:N \__mhchem_cf_presub_tl
+\tl_new:N \__mhchem_cf_element_tl
+\tl_new:N \__mhchem_cf_supA_tl
+\tl_new:N \__mhchem_cf_sub_tl
+\tl_new:N \__mhchem_cf_sup_tl
+\cs_new:Nn \__mhchem_cf_output:
+ {
+ \str_case:Vnn { \__mhchem_cf_state_tl }
+ {
+ { s } { }
+ { 1 }
+ {
+ \tl_put_right:Nx \__mhchem_cf_result_tl
+ { \exp_not:N \mhchem@mathOrText { \exp_not:N \mhchem@cf@frac \exp_not:V \__mhchem_cf_element_tl / \exp_not:N \mhchem@END { \mhchem@option@skipAfterFracAmount } } } }
+ { 9 }
+ {
+ \tl_put_right:Nx \__mhchem_cf_result_tl
+ { \exp_not:N \mhchem@mathOrText { \exp_not:N \mhchem@cf@frac \exp_not:V \__mhchem_cf_element_tl / \exp_not:N \mhchem@END {} } }
+ }
+ }
+ {
+ \tl_if_empty:NTF \__mhchem_cf_sub_tl
+ {
+ \tl_put_right:NV \__mhchem_cf_supA_tl \__mhchem_cf_sup_tl
+ \tl_clear:N \__mhchem_cf_sup_tl
+ }
+ {
+ \tl_if_empty:NTF \__mhchem_cf_sup_tl
+ { }
+ {
+ \tl_if_empty:NTF \__mhchem_cf_supA_tl
+ { }
+ {
+ \msg_error:nnn { mhchem } { cf/unexpected-two-superscripts }
+ }
+ }
+ }
+ \tl_put_right:Nx \__mhchem_cf_result_tl
+ {
+ \exp_not:N \__mhchem_chemfive:nnnnnn
+ { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_presup_tl } }
+ { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_presub_tl } }
+ { \exp_not:V \__mhchem_cf_element_tl }
+ { \exp_not:N \__mhchem_cf_replaceMathMinusDot:n { \exp_not:V \__mhchem_cf_supA_tl } }
+ { \exp_not:N \__mhchem_cf_replaceMath:n { \exp_not:V \__mhchem_cf_sub_tl } }
+ { \exp_not:N \__mhchem_cf_replaceMathMinusDot:n { \exp_not:V \__mhchem_cf_sup_tl } }
+ }
+ }
+ }
+\cs_new:Npn \__mhchem_cf_output_aux:NV #1#2 {
+ #1 { #2 }
}
-\def\mhchem@cf@outputReset{%
- \mhchem@cf@element={}%
- \mhchem@cf@amount={}%
- \mhchem@cf@sup={}%
- \mhchem@cf@presub={}%
- \mhchem@cf@presup={}%
-}
-\def\mhchem@cf@outputAndReset#1{%
- \edef\mhchem@cf@outputAndReset@i{#1={\the#1\mhchem@cf@output}}%
- \mhchem@cf@outputAndReset@i%
- \mhchem@cf@outputReset%
-}
-
-
+\cs_new:Nn \__mhchem_cf_resetOutput:
+ {
+ \tl_clear:N \__mhchem_cf_presup_tl
+ \tl_clear:N \__mhchem_cf_presub_tl
+ \tl_clear:N \__mhchem_cf_element_tl
+ \tl_clear:N \__mhchem_cf_supA_tl
+ \tl_clear:N \__mhchem_cf_sub_tl
+ \tl_clear:N \__mhchem_cf_sup_tl
+ }
+\cs_new:Nn \__mhchem_cf_outputAndReset:
+ {
+ \__mhchem_cf_output:
+ \__mhchem_cf_resetOutput:
+ }
%%% frac
\def\mhchem@cf@frac#1/#2\mhchem@END#3{%
@@ -1786,152 +1888,137 @@
\def\mhchem@getlastchars#1#2\mhchem@ENDgetlastchars{#2}
%%% replaceMath
-\newtoks\mhchem@cf@replaceMath@result
-\newcommand\mhchem@cf@replaceMath[1]{%
- \mhchem@cf@replaceMath@result={}%
- \mhchem@cf@replaceMath@continue#1\mhchem@END%
- \the\mhchem@cf@replaceMath@result%
-}
-\def\mhchem@cf@replaceMath@i{%
- \ifx\mhchem@END\mhchem@cf@replaceMath@lookahead%
- \let\mhchem@cf@replaceMath@action\mhchem@gobble%
- \else\if\mhchem@char@lbrace\mhchem@cf@replaceMath@lookahead%
- \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextGroup%
- \else\if $\mhchem@cf@replaceMath@lookahead%
- \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendMath%
- \else%
- \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextToken%
- \fi\fi\fi%
- \mhchem@cf@replaceMath@action%
-}
-\def\mhchem@cf@replaceMath@continue{%
- \futurelet\mhchem@cf@replaceMath@lookahead\mhchem@cf@replaceMath@i%
-}
-\def\mhchem@cf@replaceMath@appendNextGroup#1{%
- \mhchem@appendToks{\mhchem@cf@replaceMath@result}{{#1}}%
- \mhchem@cf@replaceMath@continue%
-}
-\def\mhchem@cf@replaceMath@appendNextToken#1{%
- \mhchem@appendToks{\mhchem@cf@replaceMath@result}{#1}%
- \mhchem@cf@replaceMath@continue%
-}
-\def\mhchem@cf@replaceMath@appendMath#1#2${%
- \mhchem@appendToks{\mhchem@cf@replaceMath@result}{\text{\ensuremath{#2}}}%
- \mhchem@cf@replaceMath@continue%
-}
+\tl_new:N \__mhchem_cf_replaceMath_result_tl
+\cs_new:Npn \__mhchem_cf_replaceMath:n #1
+ {
+ \tl_clear:N \__mhchem_cf_replaceMath_result_tl
+ \__mhchem_cf_replaceMath_loop: #1 \q_recursion_stop
+ \__mhchem_cf_replaceMath_result_tl
+ }
+\cs_new:Nn \__mhchem_cf_replaceMath_loop:
+ {
+ \peek_meaning:NTF \q_recursion_stop
+ { \use_none:n }
+ {
+ \peek_catcode_remove:oTF \c_math_toggle_token % math $
+ { \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop: }
+ {
+ \peek_catcode:oTF \c_group_begin_token
+ { \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop: }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_replaceMath_result_tl \__mhchem_cf_replaceMath_loop:
+ }}}
+ }
%%% replaceMathMinusDot
-\newtoks\mhchem@cf@replaceMathMinusDot@result
-\newcommand\mhchem@cf@replaceMathMinusDot[1]{%
- \mhchem@cf@replaceMathMinusDot@result={}%
- \mhchem@cf@replaceMathMinusDot@continue#1\mhchem@END%
- \the\mhchem@cf@replaceMathMinusDot@result%
-}
-\def\mhchem@cf@replaceMathMinusDot@i{%
- \ifx\mhchem@END\mhchem@cf@replaceMathMinusDot@lookahead%
- \let\mhchem@cf@replaceMathMinusDot@action\mhchem@gobble%
- \else\expandafter\ifx\mhchem@char@hyphen@other\mhchem@cf@replaceMathMinusDot@lookahead\relax%
- \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\mhchem@mathOrText@ii{-}{\mhchem@option@textminus}}}%
- \else\expandafter\ifx\mhchem@char@hyphen@active\mhchem@cf@replaceMathMinusDot@lookahead\relax%
- \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\mhchem@mathOrText@ii{-}{\mhchem@option@textminus}}}%
- \else\if .\mhchem@cf@replaceMathMinusDot@lookahead\relax%
- \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}}}}%
- \else\if\mhchem@char@lbrace\mhchem@cf@replaceMathMinusDot@lookahead%
- \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextGroup%
- \else\if $\mhchem@cf@replaceMathMinusDot@lookahead%
- \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendMath%
- \else%
- \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextToken%
- \fi\fi\fi\fi\fi\fi%
- \mhchem@cf@replaceMathMinusDot@action%
-}
-\def\mhchem@cf@replaceMathMinusDot@continue{%
- \futurelet\mhchem@cf@replaceMathMinusDot@lookahead\mhchem@cf@replaceMathMinusDot@i%
-}
-\def\mhchem@cf@replaceMathMinusDot@append#1#2{%
- \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{#1}%
- \mhchem@cf@replaceMathMinusDot@continue%
-}
-\def\mhchem@cf@replaceMathMinusDot@appendNextGroup#1{%
- \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{{#1}}%
- \mhchem@cf@replaceMathMinusDot@continue%
-}
-\def\mhchem@cf@replaceMathMinusDot@appendNextToken#1{%
- \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{#1}%
- \mhchem@cf@replaceMathMinusDot@continue%
-}
-\def\mhchem@cf@replaceMathMinusDot@appendMath#1#2${%
- \mhchem@appendToks{\mhchem@cf@replaceMathMinusDot@result}{\text{\ensuremath{#2}}}%
- \mhchem@cf@replaceMathMinusDot@continue%
-}%
+\tl_new:N \__mhchem_cf_replaceMathMinusDot_result_tl
+\cs_new:Npn \__mhchem_cf_replaceMathMinusDot:n #1
+ {
+ \tl_clear:N \__mhchem_cf_replaceMathMinusDot_result_tl
+ \__mhchem_cf_replaceMathMinusDot_loop: #1 \q_recursion_stop
+ \__mhchem_cf_replaceMathMinusDot_result_tl
+ }
+\cs_new:Nn \__mhchem_cf_replaceMathMinusDot_loop:
+ {
+ \peek_meaning:NTF \q_recursion_stop
+ { \use_none:n }
+ {
+ \peek_charcode_remove:NTF -
+ {
+ \tl_put_right:Nn \__mhchem_cf_replaceMathMinusDot_result_tl
+ { \mhchem@mathOrText@ii{-}{\mhchem@option@textminus} }
+ \__mhchem_cf_replaceMathMinusDot_loop:
+ }{
+ \peek_charcode_remove:NTF .
+ {
+ \tl_put_right:Nn \__mhchem_cf_replaceMathMinusDot_result_tl
+ { \ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}} }
+ \__mhchem_cf_replaceMathMinusDot_loop:
+ }{
+ \peek_catcode_remove:oTF \c_math_toggle_token % math $
+ { \__mhchem_loopHelper_appendMath:NNw \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop: }
+ {
+ \peek_catcode:oTF \c_group_begin_token
+ { \__mhchem_loopHelper_appendNextGroup:NNn \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop: }
+ {
+ \__mhchem_loopHelper_appendNextToken:NNn \__mhchem_cf_replaceMathMinusDot_result_tl \__mhchem_cf_replaceMathMinusDot_loop:
+ }}}}}
+ }
%%%%%%%%%%%%%%%%%%%%%
%%% @chemfive %%%
%%%%%%%%%%%%%%%%%%%%%
-\newcommand*\mhchem@chemfive[6]{%
- {%
+\cs_new:Npn \__mhchem_chemfive:nnnnnn #1#2#3#4#5#6
+ {
\mhchem@prepostscript%
- [\mhchem@mathOrText{\smash[t]{2+}}]%
+ {\mhchem@mathOrText{\smash[t]{2+}}}%
+ {\mhchem@mathOrText{\smash[t]{2}}}%
{\mhchem@mathOrText{#1}}%
{\mhchem@mathOrText{#2}}%
{\mhchem@mathOrText@ii{\mhchem@option@mathFont{#3}}{\text{#3}}}%
{\mhchem@mathOrText{#4}}%
{\mhchem@mathOrText{#5}}%
{\mhchem@mathOrText{#6}}%
- }%
-}
+ }
+\ExplSyntaxOff
+
%%% @prepostscript
\newlength\mhchem@prepostscript@tmp@i%
\newlength\mhchem@prepostscript@tmp@ii%
-\newcommand*\mhchem@prepostscript[7][]{%
+\newcommand*\mhchem@prepostscript[8]{%
\m@th%
\ensuremath{%
- \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#2#3$}}%
+ \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#3#4$}}%
\ifdim\mhchem@prepostscript@tmp@i>0pt%
- \setlength{\mhchem@prepostscript@tmp@i}{\widthof{${}^{#2}$}}%
- \setlength{\mhchem@prepostscript@tmp@ii}{\widthof{${}_{#3}$}}%
+ \setlength{\mhchem@prepostscript@tmp@i}{\widthof{${}^{#3}$}}%
+ \setlength{\mhchem@prepostscript@tmp@ii}{\widthof{${}_{#4}$}}%
\ifdim\mhchem@prepostscript@tmp@i<\mhchem@prepostscript@tmp@ii%
\setlength{\mhchem@prepostscript@tmp@i}{\mhchem@prepostscript@tmp@ii}\fi%
- \vphantom{#4}%
+ \vphantom{#5}%
{}%
^{%
\mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{%
- \vphantom{#6#7}%
+ \vphantom{#6#8}%
\vphantom{#1}%
- #2%
+ #3%
}%
}%
_{%
\mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{%
- \vphantom{#5}%
- #3%
+ \vphantom{#7}%
+ \vphantom{#2}%
+ #4%
}%
}%
\mhchem@minispace%
\fi%
- #4%
- \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#5#6$}}%
+ #5%
+ \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#7#6$}}%
\ifdim\mhchem@prepostscript@tmp@i>0pt%
_{%
- \vphantom{#3}%
- #5%
+ \vphantom{#4}%
+ \vphantom{#2}%
+ #7%
}%
^{%
- \vphantom{#2#7}%
+ \vphantom{#3#8}%
\vphantom{#1}%
#6%
}%
\fi%
- \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#7$}}%
+ \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#8$}}%
\ifdim\mhchem@prepostscript@tmp@i>0pt%
\mhchem@minispace%
{}%
- _{\vphantom{#3#5}}%
+ _{%
+ \vphantom{#4#7}%
+ \vphantom{#2}%
+ }%
^{%
- \vphantom{#2#6}%
+ \vphantom{#3#6}%
\vphantom{#1}%
- #7%
+ #8%
}%
\fi%
}%
@@ -2009,10 +2096,6 @@
\define@key{mhchem}{minus-sidebearing-right}{\setlength\mhchem@option@minussidebearingright{#1}}
-% Replicate layout of MS Word (superscript after subscript, not over)
-\def\mhchem@option@usenonsimultaneoussubsuperscripts{0}%
-% There is no key defined for this option, as to promote good typographic conventions.
-
\mhchem@definearrows{font}
\define@key{mhchem}{arrows}{%
\ifthenelse{\equal{pgf}{#1} \or \equal{pgf-filled}{#1}}{%
@@ -2072,7 +2155,7 @@
\def\mhchem@option@version{3}%
\else\ifnum 4=\mhchem@option@version%
\PackageWarningNoLine{mhchem}{%
- You are using version 3.09 of mhchem. You entered\MessageBreak
+ You are using version 3.xx of mhchem. You entered\MessageBreak
the parameter version=4. This means, you are using\MessageBreak
some beta features of mhchem that are subject\MessageBreak
to change without notice}%
@@ -2086,4 +2169,4 @@
\newcommand*\mhchem@cmath[1]{\ensuremath{\text{\ensuremath{#1}}}}%
\newcommand*\cmath[1]{\mhchem@cmath{#1}}
\DeclareRobustCommand\cf[2][]{\mhchem@cf[#1]{#2}}
-\fi
+\fi \ No newline at end of file