texlive[57830] Master/texmf-dist: mcf2graph (21feb21)

commits+karl at tug.org commits+karl at tug.org
Sun Feb 21 23:14:56 CET 2021


Revision: 57830
          http://tug.org/svn/texlive?view=revision&revision=57830
Author:   karl
Date:     2021-02-21 23:14:56 +0100 (Sun, 21 Feb 2021)
Log Message:
-----------
mcf2graph (21feb21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
    trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,6 +1,13 @@
 *******************************************************************************
- Changelog of mcf2graph software package          by Akira Yamaji 2021-02-11
+ Changelog of mcf2graph software package          by Akira Yamaji 2021-02-21
 *******************************************************************************
+[ver. 4.58  / 2021-02-21]
+  -change syntax
+     "+" => p_
+     "-" => n_
+  -add function check_mc()
+  -update MCF manual,example
+
 [ver. 4.57  / 2021-02-11]
   -change syntax
      n:@ => @n

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,7 +1,7 @@
 ********************************************************************************
  mcf2graph  : Convert Molecular Coding Format to graphics with METAFONT/METAPOST
  Author     : Akira Yamaji
- version    : 4.57 2021-02-11
+ version    : 4.58 2021-02-21
  E-mail     : mcf2graph at gmail.com
  Located at : http://www.ctan.org/pkg/mcf2graph
 ********************************************************************************

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,8 +1,8 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2021.02.11
+% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2021.02.21
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %%% it must be version 4.57
-message "* mcf_exa_soc 2021.02.11";
+input mcf2graph.mf;   %%% it must be version 4.58
+message "* mcf_exa_soc 2021.02.21";
 message "";
 %-------------------------------------------------------------------------
 fsize:=(35mm,24mm);
@@ -29,12 +29,7 @@
 %%%%     for i=nA step nA until w: draw(i,0)--(i,h); endfor
 %%%%     for i=nA step nA until h: draw(0,i)--(w,i); endfor );
 %---------------------------------------------------------------------------
-%%%%sw_calc:=1;
-%%%%ext(defaultfont:="uhvr8r"; defaultscale:=.3;
-%%%%  label.lrt(decimal(char_num)&":"&inf_EN&" MW="&cal_MW
-%%%%    if (inf_MW<>"-")and(cen_MW<40):
-%%%%      &"("& decimal(num_MW-scantokens(inf_MW))&")"
-%%%%    else: &"(-)" fi ,(-2bp,1.5bp));)
+%%%%ext(defaultfont:="uhvr8r"; defaultscale:=.3; label.lrt(mc,(-2bp,1.5bp));)
 %***************************************************************************
 beginfont("EN:Adenine","MW:135.13")
   MC(<30,?6,3=?5,{1,3,5,9}=dl,{2,6,9}:N,5:/NH2,7:NH)
@@ -116,8 +111,8 @@
 %***************************************************************************
 beginfont("EN:Thiamine","MW:300.81")
   MC(<30,Ph,4:/NH2, at 3,\`1,!,<-12,?5,{-1,-4}=dl,{1,5,8}:N,11:S,{6,9}:/_,
-      @-3,\,!2,OH,8:"+"^72)
-  MCat(.95,.75)(Cl,"-"^15)
+      @-3,\,!2,OH,8:p_^72)
+  MCat(.95,.75)(Cl,n_^15)
 endfont
 %**************************************************************************
 beginfont("EN:Gibberellin A3","MW:346.379");
@@ -183,8 +178,8 @@
 endfont
 %***************************************************************************
 beginfont("EN:Basic blue 1","MW:319.86")
-  MC(<30,Ph,3=Ph,6=Ph,2:S,5:N,{8,13}:/N?!,2:"+")
-  MCat(1,.7)(Cl,"-"^15)
+  MC(<30,Ph,3=Ph,6=Ph,2:S,5:N,{8,13}:/N?!,2:p_)
+  MCat(1,.7)(Cl,n_^15)
 endfont
 %***************************************************************************
 beginfont("EN:Disperse violet 1","MW:238.25")
@@ -240,9 +235,9 @@
 endfont
 %***************************************************************************
 beginfont("EN:Paraquat","MW:257.16")
-  MC(Ph, at 4,\,Ph,{1,10}:N!,1:"+"^-90,10:"+"^90)
-  MCat(1,.75)(Cl,"-"^15)
-  MCat(1,.60)(Cl,"-"^15)
+  MC(Ph, at 4,\,Ph,{1,10}:N!,1:p_^-90,10:p_^90)
+  MCat(1,.75)(Cl,n_^15)
+  MCat(1,.60)(Cl,n_^15)
 endfont
 %***************************************************************************
 beginfont("EN:Picolinafen","MW:376.331")
@@ -484,9 +479,9 @@
 %***************************************************************************
 beginfont("EN:Cefalonium","MW:458.5107")
   MC(<45,?4,-3=?6,-4=dl,2:N,8:S,
-    3^45:/*H,1://O^15, at 5,\*,//O,!,O,"-"^40,
+    3^45:/*H,1://O^15, at 5,\*,//O,!,O,n_^40,
     @4,*\^15,NH,!,//O,!2,?5,{-1,-3}=dl,-4:S,
-    @6,\,!,|,Ph,1:N,1:"+"^180, at 4,\,//O,!,NH2)
+    @6,\,!,|,Ph,1:N,1:p_^180, at 4,\,//O,!,NH2)
 endfont
 %***************************************************************************
 beginfont("EN:Cefazorin","MW:454.51")
@@ -498,9 +493,9 @@
 %***************************************************************************
 beginfont("EN:Cefquinome","MW:528.6")
   MC(<45,?4,-3=?6,-4=dl,2:N,8:S,
-    3^45:/*H,1://O^15, at 5,\*,//O,!,O,"-"^40,
+    3^45:/*H,1://O^15, at 5,\*,//O,!,O,n_^40,
     @4,*\^15,NH,!,//O,!,//'(N,!,O,!),!,?5,{-2,-5}=dl,-3:S,-1:N,-2:/NH2,
-    @6,\,!,Ph,-2=?6,-10:N,-10:"+"^180)
+    @6,\,!,Ph,-2=?6,-10:N,-10:p_^180)
 endfont
 %***************************************************************************
 beginfont("EN:Ceftiofur","MW:523.5626")
@@ -803,7 +798,7 @@
 endfont
 %***************************************************************************
 beginfont("EN:Muscarine","MW:174.26")
-  MC(<18,?5,2:O,1:*/_,5:/*OH, at 3,*\,48,N,??,"+"^180,!)
+  MC(<18,?5,2:O,1:*/_,5:/*OH, at 3,*\,48,N,??,p_^180,!)
 endfont
 %***************************************************************************
 beginfont("EN:Psilocybin","MW:284.248")

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,128 +1,134 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2021.02.11
+% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2021.02.21
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %% it must be version 4.57
-message "mcf_man_soc 2021.01.31"; message "";
+input mcf2graph.mf;   %% it must be version 4.578
+message "mcf_man_soc 2021.02.21"; message "";
 %------------------------------------------------------------------------
 sw_mframe:=0;
 sw_expand:=0;
 %%%%sw_aux_out:=0;
 %%%%sw_rep_out:=1;
-%ext(defaultscale:=.5; label.bot(decimal(char_num)&":"&inf_EN,(.5w,0));)
+%%%%ext(defaultscale:=.5; label.bot(decimal(char_num)&":"&inf_EN,(.5w,0));)
+%%%%ext(defaultscale:=.5; label.bot(mc,(.5w,0));)
 %***********************************************************************
 fsize:=(40mm,25mm);
 blength:=6mm;
 %***********************************************************************
-beginfont("EN:Glycine")
-  MC(<30,NH2,!2,COOH)
+beginfont("EN:Glycine",":<30,NH2,!2,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Alanine")
-  MC(<30,NH2,!~wb,/_,!,COOH)
+beginfont("EN:L-Alanine",":<30,NH2,!~wb,/_,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Valine")
-  MC(<30,NH2,!~wb,/!?!,!,COOH)
+beginfont("EN:L-Valine",":<30,NH2,!~wb,/!?!,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Leucine")
-  MC(<30,NH2,!~wb,/!?!,!,COOH)
+beginfont("EN:L-Leucine",":<30,NH2,!~wb,/!?!,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Isoleucine")
-  MC(<30,NH2,!~wb,/'(/*_,!2),!,COOH)
+beginfont("EN:L-Isoleucine",":<30,NH2,!~wb,/'(/*_,!2),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Serine")
-  MC(<30,NH2,!~wb,/!OH,!,COOH)
+beginfont("EN:L-Serine",":<30,NH2,!~wb,/!OH,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Threonine")
-  MC(<30,NH2,!~wb,/'(/_,!~wf,OH),!,COOH)
+beginfont("EN:L-Threonine",":<30,NH2,!~wb,/'(/_,!~wf,OH),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Cysteine")
-  MC(<30,NH2,!~wb,/!SH,!,COOH)
+beginfont("EN:L-Cysteine",":<30,NH2,!~wb,/!SH,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Methionine")
-  MC(<30,NH2,!~wb,/'(!2,S,!),!,COOH)
+beginfont("EN:L-Methionine",":<30,NH2,!~wb,/'(!2,S,!),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Phenylalanine")
-  MC(<30,NH2,!~wb,/!Ph,!,COOH)
+beginfont("EN:L-Phenylalanine",":<30,NH2,!~wb,/!Ph,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Tyrosine")
-  MC(<30,NH2,!~wb,/'(!Ph,-3:/OH),!,COOH)
+beginfont("EN:L-Tyrosine",":<30,NH2,!~wb,/'(!Ph,-3:/OH),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Triptophan")
-  MC(<30,NH2,!~wb,!,COOH, at 2,\,!,<24,|,?5,-4=Ph,2=dr,5=dl,4:NH)
+beginfont("EN:L-Triptophan",
+  ":<30,NH2,!~wb,!,COOH, at 2,\,!,<24,|,?5,-4=Ph,2=dr,5=dl,4:NH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Prorine")
-  MC(<18,?5,3:NH,4:*/COOH)
+beginfont("EN:L-Prorine",":<18,?5,3:NH,4:*/COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Glutamine")
-  MC(<30,NH2,!~wb,!,COOH, at 2,\`1,!`1,!,//O,!,NH2)
+beginfont("EN:L-Glutamine",
+  ":<30,NH2,!~wb,!,COOH, at 2,\`1,!`1,!,//O,!,NH2")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Asparagine")
-  MC(<30,NH2,!~wb,/'(!,//O,!,NH2),!,COOH)
+beginfont("EN:L-Asparagine",":<30,NH2,!~wb,/'(!,//O,!,NH2),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Aspartic acid")
-  MC(<30,NH2,!~wb,/!COOH,!,COOH)
+beginfont("EN:L-Aspartic acid",":<30,NH2,!~wb,/!COOH,!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Glutamic acid")
-  MC(<30,NH2,!~wb,/'(!2,COOH),!,COOH)
+beginfont("EN:L-Glutamic acid",":<30,NH2,!~wb,/'(!2,COOH),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Lysine")
-  MC(<30,NH2,!~wb,/'(!4,NH2),!,COOH)
+beginfont("EN:L-Lysine",":<30,NH2,!~wb,/'(!4,NH2),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Arginine")
-  MC(<30,NH2,!~wb,!,COOH, at 2,\`1,!`1,!2,NH,!,//NH,!,NH2)
+beginfont("EN:L-Arginine",
+  ":<30,NH2,!~wb,!,COOH, at 2,\`1,!`1,!2,NH,!,//NH,!,NH2")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Hystidine")
-  MC(<30,NH2,!~wb,!,COOH, at 2,\,!,|,?5,{1,3}=dl,3:N,5:NH)
+beginfont("EN:L-Hystidine",
+  ":<30,NH2,!~wb,!,COOH, at 2,\,!,|,?5,{1,3}=dl,3:N,5:NH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-DOPA")
-  MC(<30,NH2,!~wb,!,COOH, at 2,\,!,Ph,{-3,-4}:/OH)
+beginfont("EN:L-DOPA",":<30,NH2,!~wb,!,COOH, at 2,\,!,Ph,{-3,-4}:/OH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:Ornithine")
-  MC(<30,NH2,!~wb,/'(!3,NH2),!,COOH)
+beginfont("EN:Ornithine",":<30,NH2,!~wb,/'(!3,NH2),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:Citrulline")
-  MC(<30,NH2,!~wb,/'(!3,NH,!,//O,!,NH2),!,COOH)
+beginfont("EN:Citrulline",":<30,NH2,!~wb,/'(!3,NH,!,//O,!,NH2),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:GABA")
-  MC(<30,NH2,!4,COOH)
+beginfont("EN:GABA",":<30,NH2,!4,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:amino Levulinic acid")
-  MC(<30,NH2,!2,//O,!3,COOH)
+beginfont("EN:amino Levulinic acid",":<30,NH2,!2,//O,!3,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:4-amino benzoic acid")
-  MC(<30,Ph,1:/NH2,4:/COOH)
+beginfont("EN:4-amino benzoic acid",":<30,Ph,1:/NH2,4:/COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Carboxyl glutamic acid")
-  MC(<30,NH2,!~wb,/'(!,/COOH,!,COOH),!,COOH)
+beginfont("EN:L-Carboxyl glutamic acid",
+  ":<30,NH2,!~wb,/'(!,/COOH,!,COOH),!,COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:L-Hydroxy Prorine")
-  MC(<18,?5,1:/OH,3:NH,4:*/COOH)
+beginfont("EN:L-Hydroxy Prorine",":<18,?5,1:/OH,3:NH,4:*/COOH")
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -376,7 +382,7 @@
 beginfont("EN:Charged atom")
   sw_trimming:=1;
   fsize:=(60mm,12mm);
-  MC(<-30,!2,N,??,"+",!2,S,"-"^180,!6,7:N,7:??,9:S,7:"+",9:"-"^180)
+  MC(<-30,!2,N,??,p_,!2,S,n_^180,!6,7:N,7:??,9:S,7:p_,9:n_^180)
 endfont
 %***********************************************************************
 beginfont("EN:fused ring")
@@ -883,25 +889,25 @@
 endfont
 %***********************************************************************
 beginfont("EN:Switwch font frame 1")
-  fsize:=(40mm,10mm);
+  fsize:=(30mm,10mm);
   fmargin:=(5mm,1.5mm);
   sw_fframe:=1;
   MC(<30,Ph)
 endfont
 beginfont("EN:Switwch font frame 2")
-  fsize:=(40mm,10mm);
+  fsize:=(30mm,10mm);
   fmargin:=(5mm,1.5mm);
   sw_fframe:=2;
   MC(<30,Ph)
 endfont
 beginfont("EN:Switwch font frame 3")
-  fsize:=(40mm,10mm);
+  fsize:=(30mm,10mm);
   fmargin:=(5mm,1.5mm);
   sw_fframe:=3;
   MC(<30,Ph)
 endfont
 beginfont("EN:Switwch font frame 4")
-  fsize:=(40mm,10mm);
+  fsize:=(30mm,10mm);
   fmargin:=(5mm,1.5mm);
   sw_fframe:=4;
   MC(<30,Ph)
@@ -962,23 +968,33 @@
 %-----------------------------------------------------------------------
 beginfont("EN:MCat()")
   defaultsize:=5bp;
-  fsize:=(75mm,75mm);
+  fsize:=(40mm,40mm);
   fmargin:=(3mm,3mm);
-  blength:=0.07;
+  blength:=0.1;
   sw_fframe:=1;
   mangle:=0;
-  for i=1 step -0.25 until 0:
-    for j=0 step 0.25 until 1:
+  for i=1 step -0.5 until 0:
+    for j=0 step 0.5 until 1:
       MCat(j,i)(Ph,4:N)
       add(
         drawarrow((A1+A1up**aw)..A1);
         label(decimal(mangle),p0+(0.5w,0.5h));
       )
-      mangle:=mangle+15;
+      mangle:=mangle+30;
     endfor
   endfor
 endfont
 %***********************************************************************
+beginfont("EN:Pyridine",":<30,Ph,2:N")
+  fsize:=(12mm,12mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
+endfont
+%-----------------------------------------------------------------------
+beginfont("EN:Pyridine",":<30,Ph,2):N")
+  fsize:=(12mm,12mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
+endfont
+%***********************************************************************
 beginfont("EN:add() 1")
  fsize:=(70mm,43mm);
  sw_aframe:=sw_mframe:=1;
@@ -1097,102 +1113,115 @@
 endfont
 defaultsize:=save_defaultsize;
 %***************************************************************************
-beginfont("EN:Luciferin","MW:280.33")
-  fsize:=(60mm,20mm);
-  MC(
-    <30,Ph,3=?5, at 8,\,?5,{9,16}=dl,
-    {9,14}:N,{7,11}:S,1:/OH,-2:*/COOH
-  )
+beginfont("EN:Luciferin","MW:280.33",
+  %---------------------------------------
+  ": <30,Ph,3=?5, at 8,\,?5,{9,16}=dl,    ",
+  ": {9,14}:N,{7,11}:S,1:/OH,-2:*/COOH ")
+  %---------------------------------------
+  fsize:=(50mm,15mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***************************************************************************
-beginfont("EN:Colchicine","MW:385.41")
-  fsize:=(60mm,25mm);
-  MC(
-    <30,Ph,{1,2,6}:/O!,-4=?7,-5=?7,{-1,-4,-6}=dl,-2://O,-3:/O!,
-    @9,\,NH,!,//O,!
-  )
+beginfont("EN:Colchicine","MW:385.41",
+  %---------------------------------------
+  ": <30,Ph,{1,2,6}:/O!,-4=?7,-5=?7,  ",
+  ": {-1,-4,-6}=dl,-2://O,-3:/O!,     ",
+  ": @9,\,NH,!,//O,!                  ")
+  %---------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***************************************************************************
-beginfont("EN:Paclitaxel","MW:853.91")
-  MC(
-    ?6,5=dl, at 3,#1,36,45,45,45,45,##,
-    &($5),-4=?6,-4=?4,-1=wb,-3=wf,-1:O,||,
-    4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,
-    9:*/_^60,10://O,
-    @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,
-    @7,\*,O,-45,//O,60,Ph, at 11,*\,O,-60,//O,60,
-    @12,\*^-15,O,60,//O,-60
-  )
+beginfont("EN:Paclitaxel","MW:853.91",
+  %------------------------------------------------------
+  ": ?6,5=dl, at 3,#1,36,45,45,45,45,##,                   ",
+  ": &($5),-4=?6,-4=?4,-1=wb,-3=wf,-1:O,||,             ",
+  ": 4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,               ",
+  ": 9:*/_^60,10://O,                                   ",
+  ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,  ",
+  ": @7,\*,O,-45,//O,60,Ph, at 11,*\,O,-60,//O,60,         ",
+  ": @12,\*^-15,O,60,//O,-60                            ")
+  %------------------------------------------------------
+  fsize:=(50mm,25mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***************************************************************************
-beginfont("EN:Lycorine","MW:287.31")
-  fsize:=(60mm,25mm);
-  MC(<30,
-    Ph,-4=?6,-2=?6,6=?5,(9,12)=?5[3],
-    13=dl,8:N,{15,17}:O,
-    9:/*H^180,10:*/H^60,13:*/OH,14:/*OH
-  )
+beginfont("EN:Lycorine","MW:287.31",
+  %-----------------------------------------
+  ": <30,Ph,-4=?6,-2=?6,6=?5,(9,12)=?5[3], ",
+  ": 13=dl,8:N,{15,17}:O,                  ",
+  ": 9:/*H^180,10:*/H^60,13:*/OH,14:/*OH   ")
+  %-----------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***********************************************************************
-beginfont("EN:Gibberellin A3","MW:346.37");
-  fsize:=(60mm,20mm);
-  MC(
-    <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,
-    13=dl,6=wf,8=wb,
-    @5,40~zf`1,O,50,//O^180,&14~zb,
-    2:/COOH,7://_,13:*/OH,8:/*OH,
-    14:*/_,{1,4}:*/H^60
-  )
+beginfont("EN:Gibberellin A3","MW:346.37",
+  %----------------------------------------
+  ": <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3, ",
+  ": 13=dl,6=wf,8=wb,                    ",
+  ": @5,40~zf`1,O,50,//O^180,&14~zb,     ",
+  ": 2:/COOH,7://_,13:*/OH,8:/*OH,       ",
+  ": 14:*/_,{1,4}:*/H^60                 ")
+  %----------------------------------------
+  fsize:=(50mm,18mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***************************************************************************
-beginfont("EN:Quinine","MW:324.42")
-  fsize:=(60mm,25mm);
-  MC(
-    <30,Ph,3=Ph,7:N,6:/O!,
-    @10,\,*/OH,/H~zf^-60,!,
-    |,?6,2:N,1:*/H^60,4:*/!!,
-    @2,165~zf,60,&5~zb
-  )
+beginfont("EN:Quinine","MW:324.42",
+  %----------------------------------------
+  ": <30,Ph,3=Ph,7:N,6:/O!,     ",
+  ": @10,\,*/OH,/H~zf^-60,!,    ",
+  ": |,?6,2:N,1:*/H^60,4:*/!!,  ",
+  ": @2,165~zf,60,&5~zb         ")
+  %----------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 %***************************************************************************
 sw_calc:=1;
 ext(defaultfont:="uhvr8r"; defaultscale:=.75;
-  label.urt("NO = "&decimal(char_num),(0.1w,0.60h));
-  label.urt("EN = "&inf_EN           ,(0.1w,0.56h));
-  label.urt("MW = "&inf_MW           ,(0.1w,0.52h));
-  label.urt("mw = "&cal_MW           ,(0.1w,0.48h));
-  label.urt("fm = "&cal_FM           ,(0.1w,0.44h));
-  label.urt("w  = "&decimal(w)       ,(0.1w,0.40h));
-  label.urt("h  = "&decimal(h)       ,(0.1w,0.36h));
-  label.urt("n  = "&decimal(n)       ,(0.1w,0.32h));
+  label.urt("NO = "&decimal(char_num),(0.01w,0.60h));
+  label.urt("EN = "&inf_EN           ,(0.01w,0.57h));
+  label.urt("MW = "&inf_MW           ,(0.01w,0.54h));
+  label.urt("mw = "&cal_MW           ,(0.01w,0.51h));
+  label.urt("fm = "&cal_FM           ,(0.01w,0.48h));
+  label.urt("w  = "&decimal(w)       ,(0.01w,0.45h));
+  label.urt("h  = "&decimal(h)       ,(0.01w,0.42h));
+  label.urt("n  = "&decimal(n)       ,(0.01w,0.39h));
   label.urt("ratio_thickness_bond = "&decimal(ratio_thickness_bond),
-            (0.1w,0.28h));
+            (0.01w,0.36h));
   label.urt("ratio_atom_bond = "&decimal(ratio_atom_bond),
-            (0.1w,0.24h));
+            (0.01w,0.33h));
   label.urt("ratio_bondgap_bond = "&decimal(ratio_bondgap_bond),
-            (0.1w,0.20h));
+            (0.01w,0.30h));
   label.urt("ratio_chain_ring = "&decimal(ratio_chain_ring),
-            (0.1w,0.16h));
-  label.urt("sw_fframe = "&decimal(sw_fframe),(0.1w,0.12h));
-  label.urt("sw_aframe = "&decimal(sw_aframe),(0.1w,0.08h));
-  label.urt("sw_trimming = "&decimal(sw_trimming),(0.1w,0.04h));
+            (0.01w,0.27h));
+  label.urt("sw_fframe = "&decimal(sw_fframe),(0.01w,0.24h));
+  label.urt("sw_aframe = "&decimal(sw_aframe),(0.01w,0.21h));
+  label.urt("sw_trimming = "&decimal(sw_trimming),(0.01w,0.18h));
+  label.urt("mc1 ="&mc1,(0.01w,0.12h));
+  label.urt("mc2 ="&mc2,(0.01w,0.09h));
+  label.urt("mc3 ="&mc3,(0.01w,0.06h));
 )
 %***************************************************************************
-beginfont("EN:Ampicillin","MW:349.405")
-  fsize:=(60mm,90mm);
-  MCat(0.5,1)(<45,?4,-3=?5,2:N,7:S,
-    {3^45,4^-45}:/*H,1://O^15,5:/*COOH^-18,6:??,
-     @4,*\^75,NH,!,//O,!,/*NH2,!,Ph)
+beginfont("EN:Ampicillin","MW:349.405",
+": <45,?4,-3=?5,2:N,7:S,",
+": 3^45:/*H,1://O^15,5:/*COOH^-18,6:??,",
+": @4,*\^15,NH,!,//O,!,/*NH2,!,Ph"
+)
+  fsize:=(72mm,110mm);
+  blength:=7mm;
+  if check_mc(mc)=0: MCat(0.5,0.95)(scantokens(mc)) fi
 endfont
 %***************************************************************************
-beginfont("EN:Cholesterol","CAS:57-88-5","FM:C27H46O","MW:386.65")
-  fsize:=(60mm,90mm);
-  MCat(0.5,1)(
-  <30,?6,{-4,-2}=?6,-4=?5,7=dl,
-    1:*/OH,{4,12}:*/_^60,9:*/H^60,
-    10:/*H^180,11:/*H^-60,17:/*H^-54,
-    @-1,18,/*_,-60,!3,?!
-  )
+beginfont("EN:Cholesterol","MW:386.65",
+  ": <30,?6,{-4,-2}=?6,-4=?5,7=dl,            ",
+  ": 10:/*H^180,11:/*H^-60,17:/*H^-54,        ",
+  ": 1:*/OH,{4,12}:*/_^60, at -1,18,/*_,-60,!3,?!")
+  fsize:=(72mm,110mm);
+  blength:=7mm;
+  if check_mc(mc)=0: MCat(0.5,0.95)(scantokens(mc)) fi
 endfont
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 bye

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  Molecular Coding Format manual                by  Akira Yamaji 2021.02.11
+%  Molecular Coding Format manual                by  Akira Yamaji 2021.02.21
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[a4paper]{article}
 \usepackage[pdftex]{graphicx}
@@ -52,9 +52,9 @@
 }%
 %---------------------------------------------------------------------------
 \def\put at char{%
-  \begin{picture}(75,110)%
-     \put(0,100){\bf [\NO]\EN}%
-     \put(5,95){\small\tt FM:\fm{ }MW:\mw}%
+  \begin{picture}(75,130)%
+     \put(0,120){\bf [\NO]\EN}%
+     \put(5,115){\small\tt FM:\fm{ }MW:\mw}%
      \put(5,0){\font\@strufont=\File\relax%
                \hbox{\@strufont\char\Char}}%
   \end{picture}%
@@ -394,10 +394,10 @@
 %-----------------------------------------------------------------------------
 \subsubsection{Charged atom}
 \begin{verbatim}
-  "+" : positive / "-" : negative
+  p_ : positive / n_ : negative
 
-<-30,!2,N,??,"+",!2,S,"-"^180,
-!6,7:N,7:??,9:S,7:"+",9:"-"^180
+<-30,!2,N,??,p_,!2,S,n_^180,
+!6,7:N,7:??,9:S,7:n_,9:n_^180
 \end{verbatim}
 \MCFgraph
 %-----------------------------------------------------------------------------
@@ -902,7 +902,7 @@
        0.06      0.12      0.20
 \end{verbatim}
 %-----------------------------------------------------------------------------
-\newpage
+%%\newpage
 %-----------------------------------------------------------------------------
 \subsection{Drawing mode}
 %-----------------------------------------------------------------------------
@@ -989,7 +989,7 @@
 \end{verbatim}
 \MCFgraph
 \begin{verbatim}
-  (Draw frame inside margin)
+  (Frame inside margin)
   sw_fframe=2
 \end{verbatim}
 \MCFgraph
@@ -999,7 +999,7 @@
 \end{verbatim}
 \MCFgraph
 \begin{verbatim}
-  (Draw small dot at corner)
+  (Small dot at corner)
   sw_fframe=4
 \end{verbatim}
 \MCFgraph
@@ -1018,6 +1018,28 @@
   MC(<30,COOH,!,COOH)
 \end{verbatim}
 \MCFgraph
+%-----------------------------------------------------------------------------
+\subsubsection{Remove indent}
+\index{sw\_indent\_off}%
+\begin{verbatim}
+  ** default  sw_indent_off=0
+  beginfont(": Ph         ",
+            ":  ,{1,4}:N  ",
+            ":  ,{2,3}:/_ ")
+  endfont
+
+    mc1=" Ph"
+    mc2="  ,{1,4}:N"
+    mc3="  ,{2,3}:/_"
+
+  sw_indent_off=1
+    mc1="Ph"
+    mc2=",{1,4}:N"
+    mc3=",{2,3}:/_"
+
+  mc="Ph,{1,4}:N,{2,3}:/_" ** 0 or 1
+\end{verbatim}
+%-----------------------------------------------------------------------------
 \newpage
 %-----------------------------------------------------------------------------
 \subsection{Parameter setting}
@@ -1085,36 +1107,53 @@
 
   MCat(c,d)(....) :
 
-  mposition:=(c,d);
-  MC(....)
+  mposition:=(c,d); MC(....)
 
-  c: x axis position
-  d: y axis position
+  c: x axis position  d: y axis position
 
-  beginfont()
   defaultsize:=5bp;
-  fsize:=(75mm,75mm);
-  fmargin:=(3mm,3mm);
-  blength:=0.07;
-  sw_fframe:=1;
+  fsize:=(40mm,40mm); fmargin:=(3mm,3mm);
+  blength:=0.1; sw_fframe:=1;
   mangle:=0;
-  for i=1 step -0.25 until 0:
-    for j=0 step 0.25 until 1:
-      %----------------
+  for i=1 step -0.5 until 0:
+    for j=0 step 0.5 until 1:
       MCat(j,i)(Ph,4:N)
-      %----------------
-      add(
-        drawarrow((A1+A1up**aw)..A1);
-        label(decimal(mangle),
-              p0+(0.5w,0.5h));
+      add(drawarrow((A1+A1up**aw)..A1);
+          label(decimal(mangle),
+                p0+(0.5w,0.5h));
       )
-      mangle:=mangle+15;
+      mangle:=mangle+30;
     endfor
   endfor
+
+\end{verbatim}
+\MCFgraph
+%-----------------------------------------------------------------------------
+\subsection{Function check\_mc()}
+\index{check\_mc()}%
+\begin{verbatim}
+  (immediately compile)
+
+  beginfont("EN:Pyridine")
+    MC(Ph,<30,2:N)
   endfont
 
+  (check mcf and compile)
+
+  beginfont("EN:Pyridine",":<30,Ph,2:N")
+    if check_mc(mc)=0: MC(scantokens(mc)) fi
+  endfont
+
+  ** error in mcf  check_mc(mc)=1
+  beginfont("EN:Pyridine",":<30,Ph,2):N")
+    if check_mc(mc)=0: MC(scantokens(mc)) fi
+  endfont
+
 \end{verbatim}
-\MCFgraph
+\MCFgraph\hspace{15mm}\MCFgraph
+\begin{verbatim}
+  check_mc(mc)=0   check_mc(mc)>=1
+\end{verbatim}
 %===============================================================================
 \newpage
 \subsection{Function add()}
@@ -1380,13 +1419,15 @@
 \section{MCF example}
 %-----------------------------------------------------------------------------
 \subsection{Luciferin}
+\index{check\_mc()}%
 \begin{verbatim}
-beginfont("EN:Luciferin","MW:280.33")
-  fsize:=(60mm,20mm);
-  MC(
-    <30,Ph,3=?5, at 8,\,?5,{9,16}=dl,
-    {9,14}:N,{7,11}:S,1:/OH,-2:*/COOH
-  )
+beginfont("EN:Luciferin","MW:280.33",
+  %-------------------------------------
+  ": <30,Ph,3=?5, at 8,\,?5,{9,16}=dl,    ",
+  ": {9,14}:N,{7,11}:S,1:/OH,-2:*/COOH ")
+  %-------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1393,14 +1434,14 @@
 %-----------------------------------------------------------------------------
 \subsection{Colchicine}
 \begin{verbatim}
-beginfont("EN:Colchicine","MW:385.41")
-  fsize:=(60mm,25mm);
-  MC(
-    <30,Ph,{1,2,6}:/O!,-4=?7,
-    -5=?7,{-1,-4,-6}=dl,
-    -2://O,-3:/O!,
-    @9,\,NH,!,//O,!
-  )
+beginfont("EN:Colchicine","MW:385.41",
+  %-------------------------------------
+  ": <30,Ph,{1,2,6}:/O!,-4=?7,-5=?7,  ",
+  ": {-1,-4,-6}=dl,-2://O,-3:/O!,     ",
+  ": @9,\,NH,!,//O,!                  ")
+  %-------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1407,17 +1448,22 @@
 %-----------------------------------------------------------------------------
 \subsection{Paclitaxel}
 \begin{verbatim}
-beginfont("EN:Paclitaxel","MW:853.91")
-  MC(
-    ?6,5=dl, at 3,#1,36,45,45,45,45,##,
-    &.$5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O,||,
-    {4^35,4^-35,6}:/_,{3^-60,15}:*/OH,
-    8:/*H^-60,9:*/_^60,10://O,
-    @1,\,O,!,//O,!,*/OH,!,/Ph,
-    60~wf,NH,-60,//O,60,Ph,
-    @7,\*,O,-45,//O,60,Ph,
-    @11,*/OCO!>rl,12:/*OCO!^-15>lr
-  )
+beginfont("EN:Paclitaxel","MW:853.91",
+  %------------------------------------
+  ": ?6,5=dl, at 3,#1,36,45,45,45,45,##, ",
+  ": &.$5",                           ",
+  ": -4=?6,-4=?4,-1=wb,-3=wf,-1:O,||, ",
+  ": 4:??,6:/_,{3^-60,15}:*/OH,       ",
+  ": 8:/*H^-60,",                     ",
+  ": 9:*/_^60,10://O,                 ",
+  ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf, ",
+  ":   NH,-60,//O,60,Ph,              ",
+  ": @7,\*,O,-45,//O,60,Ph,           ",
+  ": @11,*\,O,-60,//O,60,             ",
+  ": @12,\*^-15,O,60,//O,-60          ")
+  %------------------------------------
+  fsize:=(50mm,25mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1425,12 +1471,14 @@
 \subsection{Lycorine}
 \begin{verbatim}
 beginfont("EN:Lycorine","MW:287.31")
-  fsize:=(60mm,25mm);
-  MC(<30,
-    Ph,-4=?6,-2=?6,6=?5,(9,12)=?5[3],
-    13=dl,8:N,{15,17}:O,
-    9:/*H^180,10:*/H^60,13:*/OH,14:/*OH
-  )
+  %--------------------------------------
+  ": Ph,-4=?6,-2=?6,6=?5,(9,12)=?5[3], ",
+  ": 13=dl,8:N,{15,17}:O,              ",
+  ": 9:/*H^180,10:*/H^60,              ",
+  ": 13:*/OH,14:/*OH                   ")
+  %--------------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1437,15 +1485,16 @@
 %-----------------------------------------------------------------------------
 \subsection{Gibberellin}
 \begin{verbatim}
-beginfont("EN:Gibberellin","MW:346.37");
-  fsize:=(60mm,20mm);
-  MC(
-    <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,
-    13=dl,6=wf,8=wb,
-    @5,40~zf`1,O,50,//O^180,&14~zb,
-    2:/COOH,7://_,13:*/OH,8:/*OH,
-    14:*/_,{1,4}:*/H^60
-  )
+beginfont("EN:Gibberellin A3","MW:346.37");
+  %----------------------------------------
+  ": <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3, ",
+  ": 13=dl,6=wf,8=wb,                    ",
+  ": @5,40~zf`1,O,50,//O^180,&14~zb,     ",
+  ": 2:/COOH,7://_,13:*/OH,8:/*OH,       ",
+  ": 14:*/_,{1,4}:*/H^60                 ")
+  %----------------------------------------
+  fsize:=(50mm,18mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1453,13 +1502,14 @@
 \subsection{Quinine}
 \begin{verbatim}
 beginfont("EN:Quinine","MW:324.42")
-  fsize:=(60mm,25mm);
-  MC(
-    <30,Ph,3=Ph,7:N,6:/O!,
-    @10,\,*/OH,/H~zf^-60,!,
-    |,?6,2:N,1:*/H^60,4:*/!!,
-    @2,165~zf,60,&5~zb
-  )
+  %-------------------------------
+  ": <30,Ph,3=Ph,7:N,6:/O!,     ",
+  ": @10,\,*/OH,/H~zf^-60,!,    ",
+  ": |,?6,2:N,1:*/H^60,4:*/!!,  ",
+  ": @2,165~zf,60,&5~zb         ")
+  %-------------------------------
+  fsize:=(50mm,20mm);
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 \MCFgraph
@@ -1486,33 +1536,45 @@
 outputformat:="png"; hppp:=vppp:=0.1;                   > PNG output
 outputtemplate:="%j-%3c.png";                           >
 %-------------------------------------------------------------------------
-beginfont("N:1","EN:Ampicillin")                 > begin font(information)
-  MC(<45,?4,2:N,2=?5,-1:S,                              > begin MCF (1)
-     {3^45,4^-45}:/*H,1://O^15,5:/*COOH^-18,6:??,       >
-     @4,75,NH,!,//O,!,/*NH,!,Ph)                        > end MCF 
+beginfont("EN:Ampicillin","MW:349.405",                 > information
+  %----------------------------------------             >
+  ": <45,?4,-3=?5,2:N,7:S,                ",            > mc1
+  ": 3^45:/*H,1://O^15,5:/*COOH^-18,6:??, ",            > mc2
+  ": @4,*\^15,NH,!,//O,!,/*NH2,!,Ph       ")            > mc3
+  %----------------------------------------             >
+  if check_mc(mc)=0: MC(scantokens(mc)) fi              > mc=mc1&mc2&mc3
 endfont                                                 > end font
 %------------------------------------------------------------------------
-beginfont("N:2","EN:Cholesterol")                > begin font(information)
-  MC(<30,?6,{-4,-2}=?6,-4=?5,7=dl,                      > begin MCF (2)
-      1:*/OH,{4,12}:*/_^60,9:*/H^60,                    >
-      10:/*H^180,{11,-1}:/*H^-60,                       >
-      @-1,17,/*_,!4,?!)                                 > end MCF
+beginfont("EN:Cholesterol","MW:386.65",                 >information
+  %----------------------------------------             >
+  ": <30,?6,{-4,-2}=?6,-4=?5,7=dl,      ",              > mc1
+  ": 10:/*H^180,11:/*H^-60,17:/*H^-54,  ",              > mc2
+  ": {4,12}:*/_^60,                     ",              > mc3
+  ": @-1,18,/*_,-60,!3,?!               ")              > mc4
+  %----------------------------------------             >
+  if check_mc(mc)=0: MC(scantokens(mc)) fi              > mc=mc1&mc2&mc3
 endfont                                                 > end font
 %------------------------------------------------------------------------
-beginfont("N:3","EN:Limonin")                    > begin font(information)
-  MC(<30,?6,{-3,-4}=?6,                                 > begin MCF (3)
-      -5=?3,-2=wf,-1=wb,6=?5,-4=?6,-5=wf,               >
-      {13,15,17,20}:O,{3,12,21}://O,                    >
-      {4~wf^60,8~zf^60,18^35,18^-35}:/_,                >
-      {1^60,5^180,16^60}:/*H,                           >
-      @14,\*,|,?5,{1,4}=dl,3:O)                         > end MCF
+beginfont("EN:Limonin",                                 > information
+  %-----------------------------------------            >
+  ": <30,?6,{-3,-4}=?6,                    ",           > mc1
+  ":  -5=?3,-2=wf,-1=wb,6=?5,-4=?6,-5=wf,  ",           > mc2
+  ":  {13,15,17,20}:O,{3,12,21}://O,       ",           > mc3
+  ":  {4~wf^60,8~zf^60,18^35,18^-35}:/_,   ",           > mc4
+  ":  {1^60,5^180,16^60}:/*H,              ",           > mc5
+  ":  @14,\*,|,?5,{1,4}=dl,3:O)            ")           > mc6
+  %-----------------------------------------            >
+  if check_mc(mc)=0: MC(scantokens(mc)) fi              > mc=mc1 - mc6
 endfont                                                 > end font
 %------------------------------------------------------------------------
-beginfont("N:4","EN:beta-carotene)               > begin font(information)
-  MC(<30,?6,3=dl,{3,5^35,5^-35}:/_,                     > begin MCF (4)
-      @4,\,|,!18,{1,3,5,7,9,11,13,15,17}=dr,            >
-      {3,7,12,16}:/_,                                   >
-      |,?6,6=dl,2:??,6:/_)                              > end MCF
+beginfont("EN:beta-carotene",                           > information
+  %------------------------------------------           >
+  ": <30,?6,3=dl,{3,5^35,5^-35}:/_,         ",          > mc1
+  ": @4,\,|,!18,{1,3,5,7,9,11,13,15,17}=dr, ",          > mc2
+  ": {3,7,12,16}:/_,                        ",          > mc3
+  ": |,?6,6=dl,2:??,6:/_)                   ")          > mc4
+  %------------------------------------------           >
+  if check_mc(mc)=0: MC(scantokens(mc)) fi              > mc=mc1 - mc4
 endfont                                                 > end font
 %------------------------------------------------------------------------
 bye
@@ -1718,60 +1780,64 @@
 \subsection{LuaTeX file example}
 %############################################################################
 \begin{verbatim}
-%--------------------------------------------------------------------
 \documentclass{article}
 \usepackage{luamplib}%
+\usepackage[T1]{fontenc}%
+\usepackage{textcomp}%
 \mplibcodeinherit{enable}%
 \mplibverbatim{enable}%
-\everymplib{if unknown Ph1:
-              input mcf2graph.mf;
-              mp_log_name:="temp-info.aux";
-              sw_aux_out:=1; 
-            fi}%
-%--------------------------------------------------------------------
+\mplibnumbersystem{double}%
+\everymplib{%
+  if unknown Ph1: input mcf2graph.mf; fi
+  sw_calc:=1;  sw_fframe:=4;  max_blength:=4.5mm;
+  defaultfont:="uhvr8r"; defaultsize:=8bp; defaultscale:=1;
+}%
 \begin{document}
 \noindent%
 %--------------------------------------------------------------------
 \begin{mplibcode}
   fsize:=(50mm,50mm);
-  beginfont("NO:1","EN:Limonin","MW:470.51")
-  MC(<30,
-    ?6,{-3,-4}=?6,
-      -5=?3,-2=wf,-1=wb,6=?5,-4=?6,-5=wf,
-      {13,15,17,20}:O,{3,12,21}://O,
-      {4~wf^60,8~zf^60,18^35,18^-35}:/_,
-      {1^60,5^180,16^60}:/*H,
-      @14,\*,|,?5,{1,4}=dl,3:O
-  )
+  beginfont("NO:1","EN:Limonin","MW:470.51",
+    %----------------------------------------
+    ": <30,?6,{-3,-4}=?6,                  ",
+    ": -5=?3,-2=wf,-1=wb,6=?5,-4=?6,-5=wf, ",
+    ": {13,15,17,20}:O,{3,12,21}://O,      ",
+    ": {4~wf^60,8~zf^60,18^35,18^-35}:/_,  ",
+    ": {1^60,5^180,16^60}:/*H,             ",
+    ": @14,\*,|,?5,{1,4}=dl,3:O            ")
+    %----------------------------------------
+  if check_mc(mc)=0: MC(scantokens(mc)) fi 
   endfont
 \end{mplibcode}\\
 %--------------------------------------------------------------------
 \begin{mplibcode}
   fsize:=(80mm,50mm);
-  beginfont("NO:2","EN:beta-carotene","MW:536.87")
-    MC(<30,
-      ?6,3=dl,{3,5^35,5^-35}:/_,
-      @4,\,|,!18,{1,3,5,7,9,11,13,15,17}=dr,
-      {3,7,12,16}:/_,
-      |,?6,6=dl,{6,2^35,2^-35}:/_
-    )
+  beginfont("NO:2","EN:beta-carotene","MW:536.87",
+    %------------------------------------------
+    ": <30,?6,3=dl,{3,5^35,5^-35}:/_,         ",
+    ": @4,\,|,!18,{1,3,5,7,9,11,13,15,17}=dr, ",
+    ": {3,7,12,16}:/_,                        ",
+    ": |,?6,6=dl,{6,2^35,2^-35}:/_            ")
+    %------------------------------------------
+  if check_mc(mc)=0: MC(scantokens(mc)) fi 
   endfont
 \end{mplibcode}\\
 %--------------------------------------------------------------------
 \begin{mplibcode}
   fsize:=(50mm,50mm);
-  beginfont("NO:3","EN:Gibberellin A3","MW:346.37");
-  MC(<18,?5,3=?7,5=?6[12],
-     @8,160`1.3,&3,13=dl,6=wf,8=wb,
-     @5,40~zf`1,O,60,//O^180,&14~zb,
-     2:/COOH,7://_,13:*/OH,8:/*OH,
-     14:*/_,{1^60,4^60}:*/H
-  )
+  beginfont("NO:3","EN:Gibberellin A3","MW:346.37",
+    %------------------------------------
+    ": <18,?5,3=?7,5=?6[12],           ",
+    ": @8,160`1.3,&3,13=dl,6=wf,8=wb,  ",
+    ": @5,40~zf`1,O,60,//O^180,&14~zb, ",
+    ": 2:/COOH,7://_,13:*/OH,8:/*OH,   ",
+    ": 14:*/_,{1^60,4^60}:*/H          ")
+    %------------------------------------
+  if check_mc(mc)=0: MC(scantokens(mc)) fi 
 endfont;
+%--------------------------------------------------------------------
 \end{mplibcode}\\
-%--------------------------------------------------------------------
 \end{document}
-%--------------------------------------------------------------------
 \end{verbatim}%
 %############################################################################
 %------------------------------------------------------------------------
@@ -1801,16 +1867,16 @@
 %--------------------------------------------------------------------
 \begin{document}
 \unitlength=1mm%
-\INFO{F:mcf_man_soc,C:139,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}%
-\INFO{F:mcf_man_soc,C:140,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}%
+\INFO{F:mcf_man_soc,C:141,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}%
+\INFO{F:mcf_man_soc,C:142,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}%
 \end{document}
 %--------------------------------------------------------------------
 \end{verbatim}%
 %############################################################################
 %------------------------------------------------------------------------
-\INFO{F:mcf_man_soc,C:139,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}%
-\INFO{F:mcf_man_soc,C:140,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}%
+\INFO{F:mcf_man_soc,C:141,NO:1,mw:349.40462,fm:C16H19N3O4S,EN:Ampicillin}%
+\INFO{F:mcf_man_soc,C:142,NO:2,mw:386.6532,fm:C27H46O,EN:Cholesterol}%
 %------------------------------------------------------------------------
-\printindex
+\texttt{\printindex}
 %------------------------------------------------------------------------
 \end{document}

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2021.02.11
+% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2021.02.21
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% mcf2graph.mf must be version 4.57
+%%% mcf2graph.mf must be version 4.58
 \documentclass{article}
 %------------------------------------------------------------------------------
 \usepackage{luamplib}%
@@ -101,30 +101,32 @@
 \subsection{Chlorophyll a}
 \noindent%
 \begin{verbatim}
-beginfont("NO:1","EN:Chlorophyll a","MW:893.49")
+beginfont("NO:1","EN:Chlorophyll a","MW:893.49",
+  %-----------------------------------------------------------------------
+  ": <54,#1,?5,{2,5}=dl,4:N, at 3,\,54~dl,|,?5,{2,4}=dl,5:N,               ",
+  ": @-2,\,54~dl,|,?5,2=dl,5:N, at -2,\~dl,54,|,?5,5=dl,5:N, at -2,\~dl,&.$5, ",
+  ": @-1,24,/*COO!^15,72,//O,&.$1,##,||,                                ",
+  ": {2,9,15,20~zf}:/_,8:/!,14:/!!,                                     ",
+  ": @4,\`1.45,Mg,&17, at -1,&11~vb, at -1,&23~vb,                            ",
+  ": @21,-6~wf,!2,//O,!,O,!2,!!,|,!13,{1,5,9,13}:/_                     ")
+  %-----------------------------------------------------------------------
   fsize:=(100mm,50mm);
-  MC(
-  <54,#1,?5,{2,5}=dl,4:N, at 3,\,54~dl,|,?5,{2,4}=dl,5:N,
-  @-2,\,54~dl,|,?5,2=dl,5:N, at -2,\~dl,54,|,?5,5=dl,5:N, at -2,\~dl,&.$5,
-  @-1,24,/*COO!^15,72,//O,&.$1,##,||,
-  {2,9,15,20~zf}:/_,8:/!,14:/!!,
-  @4,\`1.45,Mg,&17, at -1,&11~vb, at -1,&23~vb,
-  @21,-6~wf,!2,//O,!,O,!2,!!,|,!13,{1,5,9,13}:/_
-  )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 %------------------------------------------------------------------------------------
 \begin{mplibcode}
-beginfont("NO:1","EN:Chlorophyll a","MW:893.49")
+beginfont("NO:1","EN:Chlorophyll a","MW:893.49",
+  %-----------------------------------------------------------------------
+  ": <54,#1,?5,{2,5}=dl,4:N, at 3,\,54~dl,|,?5,{2,4}=dl,5:N,               ",
+  ": @-2,\,54~dl,|,?5,2=dl,5:N, at -2,\~dl,54,|,?5,5=dl,5:N, at -2,\~dl,&.$5, ",
+  ": @-1,24,/*COO!^15,72,//O,&.$1,##,||,                                ",
+  ": {2,9,15,20~zf}:/_,8:/!,14:/!!,                                     ",
+  ": @4,\`1.45,Mg,&17, at -1,&11~vb, at -1,&23~vb,                            ",
+  ": @21,-6~wf,!2,//O,!,O,!2,!!,|,!13,{1,5,9,13}:/_                     ")
+  %-----------------------------------------------------------------------
   fsize:=(100mm,50mm);
-  MC(
-  <54,#1,?5,{2,5}=dl,4:N, at 3,\,54~dl,|,?5,{2,4}=dl,5:N,
-  @-2,\,54~dl,|,?5,2=dl,5:N, at -2,\~dl,54,|,?5,5=dl,5:N, at -2,\~dl,&.$5,
-  @-1,24,/*COO!^15,72,//O,&.$1,##,||,
-  {2,9,15,20~zf}:/_,8:/!,14:/!!,
-  @4,\`1.45,Mg,&17, at -1,&11~vb, at -1,&23~vb,
-  @21,-6~wf,!2,//O,!,O,!2,!!,|,!13,{1,5,9,13}:/_
-  )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
   ext(
    defaultscale:=0.8;
    label.lrt("FM(C): "&cal_FM,(0,h-5mm));
@@ -137,29 +139,32 @@
 \subsection{Gibberellin A3}
 \noindent%
 \begin{verbatim}
-beginfont("NO:4","EN:Gibberellin A3","MW:346.37");
+beginfont("NO:4","EN:Gibberellin A3","MW:346.37",
+  %--------------------------------------------------------
+  ": <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,13=dl,6=wf,8=wb, ",
+  ": @5,40~zf`1,O,60,//O^180,&14~zb,                     ",
+  ": 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60    ")
+  %--------------------------------------------------------
   fsize:=(120mm,20mm);
-  MC(
-   <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,13=dl,6=wf,8=wb,
-   @5,40~zf`1,O,60,//O^180,&14~zb,
-   2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60
-  )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont;
 \end{verbatim}
 %----------------------------------------------------------------------------
 \begin{mplibcode}
-beginfont("NO:4","EN:Gibberellin A3","MW:346.37");
+beginfont("NO:4","EN:Gibberellin A3","MW:346.37",
+  %--------------------------------------------------------
+  ": <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,13=dl,6=wf,8=wb, ",
+  ": @5,40~zf`1,O,60,//O^180,&14~zb,                     ",
+  ": 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60    ")
+  %--------------------------------------------------------
   fsize:=(120mm,20mm);
-  MC(
-   <18,?5,3=?7,5=?6[12], at 8,160`1.3,&3,13=dl,6=wf,8=wb,
-   @5,40~zf`1,O,60,//O^180,&14~zb,
-   2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60)
-    ext(
-      defaultscale:=0.8;
-      label.lrt("FM(C): "&cal_FM,(0,h-5mm));
-      label.lrt("MW(C): "&cal_MW,(0,h-9mm));
-      label.lrt("MW(D): "&inf_MW,(0,h-13mm));
-    )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
+  ext(
+    defaultscale:=0.8;
+    label.lrt("FM(C): "&cal_FM,(0,h-5mm));
+    label.lrt("MW(C): "&cal_MW,(0,h-9mm));
+    label.lrt("MW(D): "&inf_MW,(0,h-13mm));
+  )
 endfont;
 \end{mplibcode}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -167,34 +172,36 @@
 \noindent%
 %----------------------------------------------------------------------------
 \begin{verbatim}
-beginfont("NO:5","EN:Erythromycin","MW:733.93");
+beginfont("NO:5","EN:Erythromycin","MW:733.93",
+  %------------------------------------------------------------------
+  ": <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, ",
+  ": 14:O,13:/*Et,{1,9}://O,{2,10}:*/_,{4,6^-35,8,12^35}:/*_,      ",
+  ": {6^35,11,12^-35}:*/OH,                                        ",
+  ": @.$3,\*,O,30,|,?6`.7,2:O,{3,5^35}:/_,4:/OH,5^-35:/O!,         ",
+  ": @.$5,\*^30`1.7,O,!,|,?6`.7,6:O,5:/_,2:/OH,3:/N?!              ")
+  %------------------------------------------------------------------
   fsize:=(120mm,35mm);
-  MC(
-    <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
-     14:O,13:/*Et,{1,9}://O,{2,10}:*/_,{4,6^-35,8,12^35}:/*_,
-     {6^35,11,12^-35}:*/OH,
-     @.$3,\*,O,30,|,?6`.7,2:O,{3,5^35}:/_,4:/OH,5^-35:/O!,
-     @.$5,\*^30`1.7,O,!,|,?6`.7,6:O,5:/_,2:/OH,3:/N?!
-     )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont;
 \end{verbatim}
 %----------------------------------------------------------------------------
 \begin{mplibcode}
-beginfont("NO:5","EN:Erythromycin","MW:733.93");
+beginfont("NO:5","EN:Erythromycin","MW:733.93",
+  %------------------------------------------------------------------
+  ": <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, ",
+  ": 14:O,13:/*Et,{1,9}://O,{2,10}:*/_,{4,6^-35,8,12^35}:/*_,      ",
+  ": {6^35,11,12^-35}:*/OH,                                        ",
+  ": @.$3,\*,O,30,|,?6`.7,2:O,{3,5^35}:/_,4:/OH,5^-35:/O!,         ",
+  ": @.$5,\*^30`1.7,O,!,|,?6`.7,6:O,5:/_,2:/OH,3:/N?!              ")
+  %------------------------------------------------------------------
   fsize:=(120mm,35mm);
-  MC(
-    <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
-     14:O,13:/*Et,{1,9}://O,{2,10}:*/_,{4,6^-35,8,12^35}:/*_,
-     {6^35,11,12^-35}:*/OH,
-     @.$3,\*,O,30,|,?6`.7,2:O,{3,5^35}:/_,4:/OH,5^-35:/O!,
-     @.$5,\*^30`1.7,O,!,|,?6`.7,6:O,5:/_,2:/OH,3:/N?!
-     )
-    ext(
-      defaultscale:=0.8;
-      label.lrt("FM(C): "&cal_FM,(0,h-5mm));
-      label.lrt("MW(C): "&cal_MW,(0,h-9mm));
-      label.lrt("MW(D): "&inf_MW,(0,h-13mm));
-    )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
+  ext(
+    defaultscale:=0.8;
+    label.lrt("FM(C): "&cal_FM,(0,h-5mm));
+    label.lrt("MW(C): "&cal_MW,(0,h-9mm));
+    label.lrt("MW(D): "&inf_MW,(0,h-13mm));
+  )
 endfont;
 \end{mplibcode}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -201,26 +208,28 @@
 \subsection{Paclitaxel}
 \noindent%
 \begin{verbatim}
-beginfont("EN:Paclitaxel","MW:853.918")
+beginfont("EN:Paclitaxel","MW:853.918",
+  %---------------------------------------------------------------------
+  ": ?6,5=dl, at 3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O, ",
+  ": 4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O,             ",
+  ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,                ",
+  ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr              ")
+  %---------------------------------------------------------------------
   fsize:=(120mm,35mm);
-  MC(
-    ?6,5=dl, at 3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O,
-    4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O,
-    @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,
-    @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr
-  )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
 endfont
 \end{verbatim}
 %----------------------------------------------------------------------------
 \begin{mplibcode}
-beginfont("EN:Paclitaxel","MW:853.918")
+beginfont("EN:Paclitaxel","MW:853.918",
+  %---------------------------------------------------------------------
+  ": ?6,5=dl, at 3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O, ",
+  ": 4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O,             ",
+  ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,                ",
+  ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr              ")
+  %---------------------------------------------------------------------
   fsize:=(120mm,35mm);
-  MC(
-    ?6,5=dl, at 3,#1,36,45,45,45,45,##,&5,-4=?6,-4=?4,-1=wb,-3=wf,-1:O,
-    4:??,6:/_,{3^-60,15}:*/OH,8:/*H^-60,9:*/_^60,10://O,
-    @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,
-    @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr
-  )
+  if check_mc(mc)=0: MC(scantokens(mc)) fi
   ext(
     defaultscale:=0.8;
     label.lrt("FM(C): "&cal_FM,(0,h-5mm));

Modified: trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf
===================================================================
--- trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2021-02-21 22:09:56 UTC (rev 57829)
+++ trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2021-02-21 22:14:56 UTC (rev 57830)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.57     Copyright (c) 2013-2021   Akira Yamaji
+% mcf2graph ver 4.58     Copyright (c) 2013-2021   Akira Yamaji
 %
 % Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 % and associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -37,17 +37,17 @@
 % Set to use plain.mp (label,arrow,atom)     : mpost -s labeloffset=2  FILENAME
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 tracingstats:=1;
-message "* This is mcf2graph ver 4.57  2021.02.11";
+message "* This is mcf2graph ver 4.58  2021.02.21";
 %-------------------------------------------------------------------------------------------------
 newinternal cntA,cntB,cntM,minX,minY,maxX,maxY,sftX,sftY,com,par,envT,envB,lenT,lineT,angT,rotT,
-            crR,nA,nB,nC,nD,nE,nF,nN,nP,nU,nP,nL,nR,nS,nW,xpos,ypos,markA,markB,saveA,saveB,bondL;
+            crR,nA,nB,nC,nD,nE,nF,nS,nL,nR,nU,nP,xpos,ypos,markA,markB,saveA,saveB,bondL;
 numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_char[],
         tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],addA[],add_rot[],chargeA[],
         com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],
         lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[];
-string  info[],save_str[],tbl_atom_str[],strD[],tag[],out_file_name,out_file_aux,
-        out_file_rep,out_file_mpc,aux_delimiter,atomfont,mpfont,s_tag,s_var,
-        cal_FM,cal_MW,cal_MI,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW;
+string  info[],mc[],save_str[],tbl_atom_str[],strD[],tag[],out_file_name,out_file_aux,
+        out_file_rep,out_file_mpc,aux_delimiter,atomfont,mpfont,s_tag,s_var,cal_FM,cal_MW,cal_MI,
+        inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW,mc,blank_str;
 pair    save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe;
 picture mol_stru[],atom_picture,save_picture,temp_picture;
 path    arrow_path,dottedline_path,line_path,arrow_head;
@@ -54,12 +54,38 @@
 %-------------------------------------------------------------------------------------------------
 char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_calc:=sw_ext_all:=0;
 sw_numberA:=sw_numberB:=sw_aux_out:=sw_expand:=sw_fframe:=sw_mframe:=sw_aframe:=sw_trimming:=0;
-sw_rep_out:=sw_mol_out:=sw_group_off:=sw_single:=sw_arrow_emu:=0;
+sw_rep_out:=sw_mol_out:=sw_group_off:=sw_single:=sw_arrow_emu:=sw_indent_off:=0;
 numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095;
 %-------------------------------------------------------------------------------------------------
 aux_max:=max_inf_num:=20;
 aux_delimiter:=";";
 for i=1 upto aux_max: tag[i]:=""; endfor
+blank_str:= "                             ";
+%-------------------------------------------------------------------------------------------------
+a_paren_s:=ASCII("("); a_paren_e:=ASCII(")"); a_brace_s:=ASCII("{"); a_brace_e:=ASCII("}");
+a_bracket_s:=ASCII("["); a_bracket_e:=ASCII("]"); a_comma:=ASCII(","); a_equal:=ASCII("=");
+a_colon:=ASCII(":"); a_atmark:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9");
+%--------------------------------------------------------------------------------------------------
+let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
+def ]]]=] ] ] enddef;
+%--------------------------------------------------------------------------------------------------
+primarydef a at b = fat(a,b) enddef;
+def fat(expr a,b)= mposition:=b; a enddef;
+def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef;
+def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef;
+%--------------------------------------------------------------------------------------------------
+vardef iif(expr a,b,c)=if a: b else: c fi enddef;
+vardef subc(expr i,s)= substring(i-1,i) of s enddef;
+vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef;
+def wpcs expr n= withpen pencircle scaled n enddef;
+def ppcs expr n= pickup pencircle scaled n enddef;
+def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef;
+%-------------------------------------------------------------------------------------------------
+vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef;
+vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef;
+vardef fdr(expr n)(expr s)= fsr(n)(decimal(s)) enddef;
+vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef;
+def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef;
 %=================================================================================================
 if (known green)and(known ahlength):
   f_MP:=1;
@@ -74,8 +100,8 @@
   def out_file_mol= jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol" enddef;
   %--default ahangle=45---------------------------------------------------------------------
   if     ahangle=0:  outputformat:="eps";                      % eps format(.mps)
+  elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.24;    % png format(300dpi)
   elseif ahangle=1:  outputformat:="png"; hppp:=vppp:=0.12;    % png format(600dpi)
-  elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.24;    % png format(300dpi)
   elseif ahangle=12: outputformat:="png"; hppp:=vppp:=0.10;    % png format(720dpi)
   elseif ahangle=13: outputformat:="png"; hppp:=vppp:=0.06;    % png format(1200dpi)
   elseif ahangle=14: outputformat:="png"; hppp:=vppp:=0.04;    % png format(1800dpi)
@@ -154,13 +180,6 @@
   message "* defaultfont="&defaultfont;
 fi
 %--------------------------------------------------------------------------------------------------
-let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
-%--------------------------------------------------------------------------------------------------
-primarydef a at b = fat(a,b) enddef;
-def fat(expr a,b)= mposition:=b; a enddef;
-def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef;
-def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef;
-%--------------------------------------------------------------------------------------------------
 ?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1;
 ratio_chain_ring:=0.66;       ratio_atom_bond:=0.36;     ratio_thickness_bond:=0.015;
 ratio_thickness_char:=0.1;    ratio_char_bond:=1.5;      ratio_bondgap_bond:=0.15;
@@ -190,14 +209,14 @@
 def def_com(expr n)(text tx)= nA:=n; forsuffixes list=tx:: list:=nA; nA:=nA+1; endfor enddef;
 def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_tmp_line,
   _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env,_set_colorA,_set_colorB,
-  _group_si,_set_adr,_mk_bond,_set_atom,_arg_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric,
+  _group_si,_set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric,
   _jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,_len_e,_len_ss,_len_ee,
   _group_s,_group_e,_rest,_charge,
-  si,dl,dr,db,dm,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,si_,dl_,dr_,dm_,wf_,wb_,zf_,zb_,wv_,bd_);
+  si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,si_,wf_,wb_,zf_,zb_,wv_,bd_);
 %--------------------------------------------------------------------------------------------------
 def parameter_list=
   sw_rep_out,sw_numberA,sw_numberB,sw_mframe,sw_aux_out,sw_expand,sw_mol_out,sw_calc,
-  sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu,
+  sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu,sw_indent_off,
   ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond,
   ratio_zebra_black,ratio_zebragap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom,
   lonepairdiam,lonepairspace,blength,offset_atom,offset_wedge,max_blength,offset_zebra_gap,
@@ -207,14 +226,6 @@
   Me,Et,CH3,NH,NH2,NO,NO2,OH,CHO,COOH,CN,SH,!CH3,!NH2,!NO2,!OH,!CHO,!COOH,!CN,!SH
 enddef;
 %--------------------------------------------------------------------------------------------------
-def ]]]=] ] ] enddef;
-vardef iif(expr a,b,c)=if a: b else: c fi enddef;
-vardef subc(expr i,s)= substring(i,i+1) of s enddef;
-vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef;
-def wpcs expr n= withpen pencircle scaled n enddef;
-def ppcs expr n= pickup pencircle scaled n enddef;
-def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef;
-%--------------------------------------------------------------------------------------------------
 def init_par(text t)=
   nA:=nB:=nC:=0;
   for list=t:
@@ -247,14 +258,14 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def beginfont(text s)=
   begingroup
-  save ',f_beginchar,f_ext,blen,ext,add,ang_br;
+  save ',f_beginchar,f_ext,blen,ext,add,ang_br,s_fw,s_bw,s_len,at_colon;
   %------------------------------------------------------------------------------------------------
   def ext=ext_to_font enddef;
   def add=add_to_molecule enddef;
-  vardef '(text TXT)== read_mcf(incr parts_cnt)((_com,_mark),TXT,(_com,_rest)); parts_cnt enddef;
+  def '=read_ud enddef;
   %------------------------------------------------------------------------------------------------
   inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:="-";
-  cal_MW:=cal_MI:=cal_FM:="";
+  mc:=cal_MW:=cal_MI:=cal_FM:="";
   %------------------------------------------------------------------------------------------------
   parts_cnt:=parts_usr_start;
   parts_int:=parts_int_start;
@@ -261,15 +272,28 @@
   %------------------------------------------------------------------------------------------------
   char_num:=char_num+1;
   store_par(parameter_list);
-  for i:=1 upto max_inf_num: info[i]:=":"; endfor
-  f_ext:=inf_num:=cntM:=0;
+  for i:=1 upto max_inf_num: info[i]:=":"; mc[i]:=""; endfor
+  f_ext:=inf_num:=cntM:=mc_low:=0;
   for list=s: inf_num:=inf_num+1; info[inf_num]:=list; endfor
   %------------------------------------------------------------------------------------------------
   for j=1 upto inf_num:
-    nA:=0; for i=0 upto length(info[j]): if subc(i,info[j])=":": nA:=i; fi exitif nA>0; endfor
-    if nA>0:
-      s_tag:=substring (0,nA) of info[j];
-      s_var:=substring (nA+1,length(info[j])) of info[j];
+    at_colon:=0;
+    for i=1 upto 9: if subc(i,info[j])=":": at_colon:=i; fi exitif at_colon>0; endfor
+    s_len:=length(info[j]);
+    if at_colon=1:
+      s_fw:=0; for k=2 upto s_len:   if subc(k,info[j])<>" ": s_fw:=k; fi exitif s_fw>0; endfor
+      s_bw:=0; for k=s_len downto 2: if subc(k,info[j])<>" ": s_bw:=k; fi exitif s_bw>0; endfor
+      mc_low:=mc_low+1;
+      if sw_indent_off=0:
+        mc[mc_low]:=substring (2,s_len) of info[j];
+        mc:=mc&substring (s_fw-1,s_bw) of info[j];
+      else:
+        mc[mc_low]:=substring (s_fw-1,s_len) of info[j];
+        mc:=mc&mc[mc_low];
+      fi
+    ef at_colon>=1:
+      s_tag:=substring (0,at_colon-1)   of info[j];
+      s_var:=substring (at_colon,s_len) of info[j];
       if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi
     fi
   endfor
@@ -278,35 +302,46 @@
 enddef;
 %==================================================================================================
 def endfont=
-  if sw_ext_all=1: ext_to_font(EXT_ALL); fi
-  if sw_trimming>=1:
-    nA:=nC:=4095; nB:=nD:=-4095;
+  if cntM>=1:
+    %-----------------------------------------------------------------------------------------
+    if sw_ext_all=1: ext_to_font(EXT_ALL); fi
+    if sw_trimming>=1:
+      nA:=nC:=4095; nB:=nD:=-4095;
+      for i=1 upto cntM:
+        if xpart(posM[1][i])<nA: nA:=xpart(posM[1][i]); fi
+        if xpart(posM[2][i])>nB: nB:=xpart(posM[2][i]); fi
+        if ypart(posM[1][i])<nC: nC:=ypart(posM[1][i]); fi
+        if ypart(posM[2][i])>nD: nD:=ypart(posM[2][i]); fi
+      endfor
+      font_wd:=nB-nA+2margin_lr;
+      font_ht:=nD-nC+2margin_tb;
+      fsize:=(font_wd,font_ht);
+      for i=1 upto cntM:
+        posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC);
+        posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC);
+      endfor
+    fi
+    %----------------------------------------------------------------------------------------
+    if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
+    else:      beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; chardp:=0;
+    fi
+    if (sw_fframe=1)or(sw_fframe=3): ext(draw_frame((0,0),w,h,thickness_fframe);) fi
+    if (sw_fframe=2)or(sw_fframe=3): ext(draw_frame(p0,w0,h0,thickness_fframe);) fi
+    if sw_fframe=4: ext(draw_corner((0,0),w,h,0.2bp);) fi
     for i=1 upto cntM:
-      if xpart(posM[1][i])<nA: nA:=xpart(posM[1][i]); fi
-      if xpart(posM[2][i])>nB: nB:=xpart(posM[2][i]); fi
-      if ypart(posM[1][i])<nC: nC:=ypart(posM[1][i]); fi
-      if ypart(posM[2][i])>nD: nD:=ypart(posM[2][i]); fi
+      addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
+      if sw_mframe=1: ext(draw_frame(p[i],w[i],h[i],thickness_mframe)) fi
     endfor
-    font_wd:=nB-nA+2margin_lr;
-    font_ht:=nD-nC+2margin_tb;
-    fsize:=(font_wd,font_ht);
-    for i=1 upto cntM:
-      posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC);
-      posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC);
-    endfor
+    if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
+    %-----------------------------------------------------------------------------------------
+  else:
+    font_wd:=xpart(fsize); font_ht:=ypart(fsize);
+    if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
+    else:      beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht;
+    fi
+    draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs 0.2bp;
   fi
-  %-----------------------------------------------------------------------------------------------
-  if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
-  else:      beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; chardp:=0;
-  fi
-  if (sw_fframe=1)or(sw_fframe=3): ext(draw_frame((0,0),w,h,thickness_fframe);) fi
-  if (sw_fframe=2)or(sw_fframe=3): ext(draw_frame(p0,w0,h0,thickness_fframe);) fi
-  if sw_fframe=4: ext(draw_corner((0,0),w,h,0.2bp);) fi
-  for i=1 upto cntM:
-    addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
-    if sw_mframe=1: ext(draw_frame(p[i],w[i],h[i],thickness_mframe)) fi
-  endfor
-  if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
+  %-----------------------------------------------------------------------------------------
   endchar;
   clearit;
   restore_par(parameter_list);
@@ -321,28 +356,36 @@
 def set_def_MC=
   save /,//,/*,*/,**,*/*,~,^,',`,<,>,&,:,=,\,\\,*\,\*,*\*,@,$,&,#,##,{,},|,||,_,inside_def_MC;
   inside_def_MC:=1;
-  _:=Me;
-  tertiarydef a=b == if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; 
-  tertiarydef a:b == if (known a)and(known b):: change_atom(a,b) else:: _nop fi enddef;
-  def { == read_number( enddef; let } == ); def <primary n  == (_rot_ang,n) enddef;
-  tertiarydef a^b == if known b:: (_tmp_rot,b),a  else:: _nop,a fi enddef;
-  tertiarydef a`b == if known b:: (_tmp_len,b),a  else:: _nop,a fi enddef;
-  tertiarydef a~b == if known b:: (_tmp_line,b),a else:: _nop,a fi enddef;
-  tertiarydef a>b == if known b:: (_tmp_env,b),a  else:: _nop,a fi enddef;
-  def @primary n == (_jp_atom,n) enddef; def &primary n == (_cyc,n) enddef;
-  def \  == 0 enddef; def \\ == \~dm enddef; def *\ == \~wf enddef; def \* == \~zf enddef;
-  def *\* == \~wv enddef;
-  def |  == (_com,_mark) enddef; def || == (_com,_moff) enddef;
-  def #primary n == (_com,_len_s),(_chg_len,n) enddef; def ## == (_com,_len_e) enddef;
-  def /secondary n  == if known n:: (_group_si,n) else:: _nop fi enddef;
-  def //secondary n == /n~dm enddef; def */secondary n  == /n~wf enddef;
-  def /*secondary n == /n~zf enddef; def */*secondary n == /n~wv enddef;
-  def **secondary n == /n~nb enddef; vardef $primary a == a-4095 enddef;
-  vardef '(text TXT)==read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef;
+  pair |,||,##;
+  | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e);
+  _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv;
+  let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq;
+  def { == read_number( enddef; let } == ); def '==read_id enddef;
+  def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef;
+  def # == chg_length enddef; def $ == abs_adress enddef;
+  def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef;
+  def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef;
 enddef;
 %-------------------------------------------------------------------------------------------------
-def CP == com_par enddef; def CPe == com_par_ex(0) enddef; def CPx == com_par_ex(1) enddef;
 vardef '(text TXT)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(TXT); parts_cnt enddef;
+vardef read_id(text TXT)=read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef;
+vardef read_ud(text TXT)=read_mcf(incr parts_cnt)(|,TXT,(_com,_rest)); parts_cnt enddef;
+tertiarydef a op_equ b = if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; 
+tertiarydef a op_col b = if (known a)and(known b):: change_atom(a,b) else:: _nop fi enddef;
+tertiarydef a op_hat b = if known b:: (_tmp_rot,b),a  else:: _nop,a fi enddef;
+tertiarydef a op_til b = if known b:: (_tmp_line,b),a else:: _nop,a fi enddef;
+tertiarydef a op_lt  b = if known b:: (_tmp_env,b),a  else:: _nop,a fi enddef;
+tertiarydef a op_bq  b = if known b:: (_tmp_len,b),a  else:: _nop,a fi enddef;
+def rot_angle primary n = (_rot_ang,n) enddef; def jump_atom primary n = (_jp_atom,n) enddef;
+def cyc_atom  primary n = (_cyc,n) enddef;
+def chg_length  primary n = (_com,_len_s),(_chg_len,n) enddef;
+def group_si secondary n == if known n:: (_group_si,n) else:: _nop fi enddef;
+def group_dm secondary n == /n~dm enddef;  def group_wf secondary n == /n~wf enddef;
+def group_zf secondary n == /n~zf enddef;  def group_wv secondary n == /n~wv enddef;
+def group_nb secondary n == /n~nb enddef;
+vardef abs_adress primary n == n-4095 enddef;
+%-------------------------------------------------------------------------------------------------
+def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef;
 %=================================================================================================
 def read_mcf(expr n)(text TXT)=
   begingroup
@@ -362,12 +405,8 @@
         else:: nCP:=nCP+1; comD[n][nCP]:=_mk_bond; parD[n][nCP]:=list;
         fi
       elseif string list::
-        if (list=="+")or(list=="-")::
-          nCP:=nCP+1; comD[n][nCP]:=_set_add; parD[n][nCP]:=ASCII(list);
-        else::
-          str_cnt:=str_cnt+1; strD[str_cnt]:=list;
-          nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt;
-        fi
+        str_cnt:=str_cnt+1; strD[str_cnt]:=list;
+        nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt;
       fi
     else:: message "unknown command in "AND decimal(n);
     fi
@@ -378,20 +417,20 @@
 %-------------------------------------------------------------------------------------------------
 vardef read_number(text TXT)=
   parts_int:=parts_int+1;
-  nN:=0;
+  nA:=0;
   for list==TXT::
     if known list::
       if numeric list::
         if list==_nop:: message "unknown command in "AND decimal(parts_int);
-        else:: nN:=nN+1; comD[parts_int][nN]:=_numeric; parD[parts_int][nN]:=list;
+        else:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=list;
         fi
       elseif pair list::
-        nN:=nN+1; comD[parts_int][nN]:=xpart(list); parD[parts_int][nN]:=ypart(list);
+        nA:=nA+1; comD[parts_int][nA]:=xpart(list); parD[parts_int][nA]:=ypart(list);
       fi
     else:: message "unknown command in "AND decimal(parts_int);
     fi
   endfor
-  cntD[parts_int]:=nN;
+  cntD[parts_int]:=nA;
   parts_int    %------- Retern value -------
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -465,9 +504,10 @@
                 CP(_tmp_line,dm) CP(_tmp_rot,-35) CPx(a)(_group_si,O) CP(_com,_group_e)
     ef b==SO::  CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_line,dm) 
                 CPx(a)(_group_si,O) CP(_com,_group_e)
+    ef b==n_::  CP(_com,_group_s) CP(_set_add,ASCII("-")) CP(_chg_add,a) CP(_com,_group_e)
+    ef b==p_::  CP(_com,_group_s) CP(_set_add,ASCII("+")) CP(_chg_add,a) CP(_com,_group_e)
     fi
   ef pair b::   CP(_com,_group_s) CPx(a)(xpart(b),ypart(b)) CP(_com,_group_e)
-  ef string b:: CP(_com,_group_s) CP(_set_add,ASCII(b)) CP(_chg_add,a) CP(_com,_group_e)
   ef color b::  color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC)
   fi
   cntD[parts_int]:=nCP;
@@ -495,13 +535,13 @@
   temp_p:=POS;
   nC:=defaultscale*defaultsize;
   if (defaultfont="draw")or(f_MP=0):
-    for i=0 upto length(STR)-1:
+    for i=1 upto length(STR):
       temp_c:=subc(i,STR);
       draw_char(temp_c,temp_p,nC,ratio_thickness_char*nC,0);
       temp_p:=temp_p+(nC*tbl_char_wd[ASCII(temp_c)],0);
     endfor
   else:
-    for i=0 upto length(STR)-1:
+    for i=1 upto length(STR):
       temp_c:=subc(i,STR);
       temp_picture:=temp_c infont defaultfont scaled defaultscale;
       addto currentpicture also temp_picture shifted temp_p;
@@ -554,11 +594,11 @@
   lonepairspace:=.7aw;
   circlediam:=.6aw;
   circlepen:=.2bp;
-  for i=1 upto An:
+  for i=1 upto cntA:
     A[i]:=posA[i]; A[i]ang:=angX[i]; A[i]up:=dir(angX[i]);
     A[i]left:=dir(angX[i]+90); A[i]right:=dir(angX[i]-90); A[i]down:=dir(angX[i]+180);
   endfor
-  for i=1 upto Bn:
+  for i=1 upto cntB:
     B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e];
     B[i]:=B[i]s--B[i]e;
     B[i]ang:=angB[i]; B[i]up:=dir(angB[i]);
@@ -652,18 +692,18 @@
 enddef;
 %--------------------------------------------------------------------------------------------------
 vardef label_emu@#(expr OBJ,POS) = %% modified 'thelabel@#(expr s,z)' of plain.mp
-  save oft,fx,fy,wds,pA,pB,pC,pD,sC;
+  save oft,fx,fy,wd_s,wd_c,pA,pB,pC,pD,sC;
   pair oft,oft.lft,oft.rt,oft.top,oft.bot,oft.ulft,oft.llft,oft.urt,oft.lrt,pA,pB,pC,pD;
-  wds:=0;
-  nC:=defaultscale*defaultsize;
+  wd_s:=0;
+  wd_c:=defaultscale*defaultsize;
   %---------------------------------------------------------------
   if string OBJ:
     if (defaultfont="draw")or(f_MP=0):
-      for i=0 upto length(OBJ)-1: wds:=wds+nC*tbl_char_wd[ASCII(subc(i,OBJ))]; endfor
+      for i=1 upto length(OBJ): wd_s:=wd_s+wd_c*tbl_char_wd[ASCII(subc(i,OBJ))]; endfor
     else:
-      for i=0 upto length(OBJ)-1:
+      for i=1 upto length(OBJ):
         temp_picture:=subc(i,OBJ) infont defaultfont scaled defaultscale;
-        wds:=wds+xpart(lrcorner temp_picture-llcorner temp_picture);
+        wd_s:=wd_s+xpart(lrcorner temp_picture-llcorner temp_picture);
       endfor
     fi
   fi
@@ -679,7 +719,7 @@
   oft.lrt:= ( .7,-.7);   fx.lrt:=0;    fy.lrt:=1;
   %---------------------------------------------------------------
   if string OBJ:
-    puts(POS+(labeloffset*oft@#)-(wds*fx@#,nC*fy@#))(OBJ);
+    puts(POS+(labeloffset*oft@#)-(wd_s*fx@#,wd_c*fy@#))(OBJ);
   elseif picture OBJ:
     pA:=llcorner(OBJ);
     pB:=urcorner(OBJ);
@@ -730,8 +770,8 @@
 def MC(text TXT)=
   begingroup
   save f_bra,strAT,cnt_group,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT,
-       f_lenT,f_envT,sA,factor,m_wd,m_ht,temp_p,defaultsize,defaultscale;
-  string sA;
+       f_lenT,f_envT,temp_c,factor,m_wd,m_ht,temp_p,defaultsize,defaultscale;
+  string temp_c;
   pair temp_p;
   %-----------------------------------------------------------------------------------------------
   if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi
@@ -775,13 +815,13 @@
   %-draw add to atom------------------------------------------------------------------------------
   for i=1 upto cntA:
     if addA[i]<>0:
-      sA:=char(addA[i]); nA:=angX[i]+add_rot[i]; nC:=nA mod 90;
-      if sA="+": chargeA[i]:=1; elseif sA="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi
+      temp_c:=char(addA[i]); nA:=angX[i]+add_rot[i]; nC:=nA mod 90;
+      if temp_c="+": chargeA[i]:=1; elseif temp_c="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi
       if numS[i]=0: nB:=.5atom_wd;
       else:         nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i];
       fi
       temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
-      draw_char(sA,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0);
+      draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0);
     else: chargeA[i]:=0;
     fi
   endfor
@@ -885,8 +925,10 @@
 enddef;
 %-------------------------------------------------------------------------------------------------
 def proc_size_setup=
-  if (blen*ratio_atom_bond+offset_atom)<.8blen: atom_wd:=blen*ratio_atom_bond+offset_atom;
-  else:                                         atom_wd:=.8blen; ratio_chain_ring:= .5;
+  if (blen*ratio_atom_bond+offset_atom)<.8blen:
+    atom_wd:=blen*ratio_atom_bond+offset_atom;
+  else:
+    atom_wd:=.8blen; ratio_chain_ring:= .5;
   fi
   wedge_wd:=    blen*ratio_wedge_bond+offset_wedge;
   zebra_gap:=   blen*ratio_zebragap_bond+offset_zebra_gap;
@@ -902,11 +944,11 @@
     ypos:=ypart(posA[i]);
     if numS[i]<>0:
       nU:=nD:=nP:=nL:=nR:=0;
-      for j=0 upto length(strD[numS[i]])-1:
-        sA:=subc(j,strD[numS[i]]);
-        if     (sA="^"): nU:=.5atom_wd;
-        elseif (sA="_"): nD:=.5atom_wd;
-        elseif (sA<>"{")and(sA<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(sA)];
+      for j=1 upto length(strD[numS[i]]):
+        temp_c:=subc(j,strD[numS[i]]);
+        if     (temp_c="^"): nU:=.5atom_wd;
+        elseif (temp_c="_"): nD:=.5atom_wd;
+        elseif (temp_c<>"{")and(temp_c<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(temp_c)];
         fi  
       endfor
       if (angX[i]<=90)or(angX[i]>=270): nR:=nP; else: nL:=nP; fi
@@ -923,12 +965,11 @@
 %-------------------------------------------------------------------------------------------------
 def char_use_check=
   for i=1 upto 128: f_char[i]:=0; endfor
-  if (sw_numberA<>0)or(sw_numberB<>0):
-    for j=ASCII("0") upto ASCII("9"): f_char[j]:=1; endfor
+  if (sw_numberA<>0)or(sw_numberB<>0): for j=a_zero upto a_nine: f_char[j]:=1; endfor
   else:
     for i=1 upto cntA:
       if numS[i]<>0:
-        for j=0 upto length(strD[numS[i]])-1: f_char[ASCII(subc(j,strD[numS[i]]))]:=1; endfor
+        for j=1 upto length(strD[numS[i]]): f_char[ASCII(subc(j,strD[numS[i]]))]:=1; endfor
       fi
     endfor
   fi
@@ -1012,10 +1053,9 @@
   ef com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0;
   ef com=_jp_absA: adrT:=par; posBs:=posA[adrT];
                    angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB;
-  ef com=_adj_ang:  if (angT<40)or(angT>320): angT:=0;
-                    ef angT<140: angT:=90; ef angT<220: angT:=180; else: angT:=270; fi
-  ef com=_rot_ang:  angT:=(angT+par) mod 360;
-  ef com=_tmp_rot:  rotT:=par;
+  ef com=_adj_ang: angT:=adjust_ang(angT);
+  ef com=_rot_ang: angT:=(angT+par) mod 360;
+  ef com=_tmp_rot: rotT:=par;
   ef com=_group_si: rotT:=0;
   ef com=_chg_env: envB:=par;
   ef com=_tmp_env: envT:=par;
@@ -1028,7 +1068,7 @@
 enddef;
 %-------------------------------------------------------------------------------------------------
 def add_bond(expr ROT,FLG)=
-  if ROT=_arg_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi
+  if ROT=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi
   if f_bra=0:
     adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT;
     angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360;
@@ -1052,12 +1092,14 @@
   if cntB=0: angT:=(angT-180) mod 360; 180
   else:
     if    envB>=parts_emb_start: parD[envB][cntB-temp_cntB+2]
-    else: if envB=hz: if n=0: 60 ef n<=90:-60 ef n<=180: 60 ef n<270: -60 else: 60 fi
-          ef envB=vt: if n=0:-60 ef n<90:  60 ef n<=180:-60 ef n<=270: 60 else:-60 fi
+    else: if envB=hz: if n=0:  60 ef n<=90: -60 ef n<=180:  60 ef n<270: -60 else:  60 fi
+          ef envB=vt: if n=0: -60 ef n<90:   60 ef n<=180: -60 ef n<=270: 60 else: -60 fi
           ef abs(envB)<=180: envB fi
     fi
   fi
 enddef;
+%-------------------------------------------------------------------------------------------------
+vardef adjust_ang(expr n)= if (n<40)or(n>320): 0 ef n<140: 90 ef n<220: 180 else: 270 fi enddef;
 %=================================================================================================
 vardef getA(expr n)= if n>=0: markA+n ef n>=-999: cntA+n+1 else: n+4095 fi enddef;
 vardef getB(expr n)= if n>=0: markB+n ef n>=-999: cntB+n+1 else: n+4095 fi enddef;
@@ -1085,44 +1127,45 @@
 def draw_atom(expr NUM)=
   begingroup
   if numS[NUM]<>0:
-    save slen,f_wd,f_ht,r_ff,pA,pB,sA,sB,dx;
-    string sA,sB;
-    pair pA,pB;
+    save slen,f_wd,f_ht,r_ff,pos_a,pos_c,temp_c,temp_s,dir_str;
+    string temp_c,temp_s;
+    pair pos_a,pos_c;
     %-------------------------------------------------------
-    sA:=strD[numS[NUM]]; slen:=length(sA)-1; nA:=angX[NUM];
-    dxA[NUM]:=dx:=iif((nA<=90)or(nA>=270),1,-1);
-    wdA[NUM]:=nC:=0; pB:=(0,0);
-    pA:=posA[NUM]-(.5atom_wd*dx,.5atom_wd);
+    temp_s:=strD[numS[NUM]]; slen:=length(temp_s); nA:=angX[NUM];
+    dxA[NUM]:=dir_str:=iif((nA<=90)or(nA>=270),1,-1);
+    wdA[NUM]:=nC:=0; pos_c:=(0,0);
+    pos_a:=posA[NUM]-(.5atom_wd*dir_str,.5atom_wd);
     if (atomfont<>"draw")and(f_MP=1):
       atom_picture:="C" infont atomfont;
       r_ff:=atom_wd/(ypart(ulcorner atom_picture)-ypart(llcorner atom_picture));
     fi
-    for i=0 upto slen:
+    for i=1 upto slen:
       if nC=0:
-        sB:=subc(i,sA);
-        if (dx=-1)and(sB="{"):
-          nD:=i+1; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,sA)="}"; endfor
+        temp_c:=subc(i,temp_s);
+        if (dir_str=-1)and(temp_c="{"):
+          nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temp_s)="}"; endfor
         fi
-      else: nC:=nC-1; sB:=subc(nD+nC,sA);
+      else: nC:=nC-1; temp_c:=subc(nD+nC,temp_s);
       fi
-      if     sB="_": pB:=iif(pB=(0,0),(0,-.5atom_wd),(0,0));
-      elseif sB="^": pB:=iif(pB=(0,0),(0, .5atom_wd),(0,0));
-      elseif (sB<>"{")and(sB<>"}"):
+      if     temp_c="_": pos_c:=iif(pos_c=(0,0),(0,-.5atom_wd),(0,0));
+      elseif temp_c="^": pos_c:=iif(pos_c=(0,0),(0, .5atom_wd),(0,0));
+      elseif (temp_c<>"{")and(temp_c<>"}"):
         if (atomfont="draw")or(f_MP=0):
-          f_wd:=atom_wd*tbl_char_wd[ASCII(sB)];
-          if dx=-1: pA:=pA-(f_wd,0); fi
-          draw_char(sB,pA+pB,atom_wd,bond_pen_wd*ratio_char_bond,NUM);
-          if sw_aframe=1: draw_frame(pA+pB,f_wd,atom_wd,thickness_aframe); fi
-          if dx=1: pA:=pA+(f_wd,0); fi
+          f_wd:=atom_wd*tbl_char_wd[ASCII(temp_c)];
+          if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi
+          draw_char(temp_c,pos_a+pos_c,atom_wd,bond_pen_wd*ratio_char_bond,NUM);
+          if sw_aframe=1: draw_frame(pos_a+pos_c,f_wd,atom_wd,thickness_aframe); fi
+          if dir_str=1:  pos_a:=pos_a+(f_wd,0); fi
         else:
-          atom_picture:=sB infont atomfont;
+          atom_picture:=temp_c infont atomfont;
           f_wd:=(xpart(lrcorner atom_picture)-xpart(llcorner atom_picture))*r_ff;
           f_ht:=(ypart(urcorner atom_picture)-ypart(llcorner atom_picture))*r_ff;
-          if dx=-1: pA:=pA-(f_wd,0); fi
+          if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi
           addto currentpicture also atom_picture scaled (r_ff*(1-2ratio_atomgap_atom))
-            shifted (pA+pB+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom)) Cp(colorA[NUM]);
-          if sw_aframe=1: draw_frame(pA+pB,f_wd,f_ht,thickness_aframe); fi
-          if dx=1: pA:=pA+(f_wd,0); fi
+            shifted (pos_a+pos_c+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom))
+            Cp(colorA[NUM]);
+          if sw_aframe=1: draw_frame(pos_a+pos_c,f_wd,f_ht,thickness_aframe); fi
+          if dir_str=1: pos_a:=pos_a+(f_wd,0); fi
         fi
         wdA[NUM]:=wdA[NUM]+f_wd;
       fi
@@ -1219,7 +1262,7 @@
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def char_size_set(expr WD)(expr HT)(expr STR)=
-  for j=0 upto length(STR)-1:
+  for j=1 upto length(STR):
     nA:=ASCII(subc(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT;
   endfor
 enddef;
@@ -1227,7 +1270,7 @@
 char_size_set(  1)(  1)("CGHMNOQW");
 char_size_set( .9)(  1)("ABDFIJKPRSTUVXY/><#\%@");
 char_size_set( .8)(  1)("ELZ&");
-char_size_set( .7)(  1)(" ()[]0123456789nh=tfg?~^");
+char_size_set( .7)(  1)(" ()[]{}0123456789nh=tfg?~^");
 char_size_set( .7)( .9)("$");
 char_size_set( .7)( .7)("-+*_");
 char_size_set(.45)(.95)("l");
@@ -1254,10 +1297,10 @@
 def dwh expr p=draw (p) withpen penrazor rotated 90 scaled fP shifted pos Cp(colorA[NUM]) enddef;
 def cdw expr p=cutdraw (p) shifted pos Cp(colorA[NUM]) enddef;
 %-------------------------------------------------------------------------------------------------
-sC:=CHR; fP:=PEN; hP:=0.5fP; nW:=WD;
-aW:=nW*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom);
-aH:=nW*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom);
-pos:=POS+(nW*ratio_atomgap_atom,nW*ratio_atomgap_atom);
+sC:=CHR; fP:=PEN; hP:=0.5fP;
+aW:=WD*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom);
+aH:=WD*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom);
+pos:=POS+(WD*ratio_atomgap_atom,WD*ratio_atomgap_atom);
 %-------------------------------------------------------------------------------------------------
 fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH;
 Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0);
@@ -1350,8 +1393,10 @@
 ef sC=")": dw Z19...Z10...Z14;
 ef sC="[": dwv Z07--Z06; dwh Z14--Z22; dwh Z19--Z21;
 ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19;
-ef sC="<": cdw Z01--Z17--Z12;
-ef sC=">": cdw Z16--Z08--Z04;
+ef sC="{": dw Z19..(.3aW,.2aH)..(.3aW,.45aH)..(.2aW,.5aH)..(.3aW,.55aH)..(.3aW,.8aH)..Z14;
+ef sC="}": dw Z19..(.7aW,.2aH)..(.7aW,.45aH)..(.8aW,.5aH)..(.7aW,.55aH)..(.7aW,.8aH)..Z14;
+ef sC="<": cdw Z16--Z08--Z04;
+ef sC=">": cdw Z01--Z17--Z12;
 ef sC="-": dwh Z09--Z10;
 ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH);
 ef sC="/": dw Z22..Z01;
@@ -1372,31 +1417,24 @@
 ef sC="@": cdw sbp(0,.7)zO; dwv (fW,hH)--(fW,0);
            dw (fW,.45aH)..(.7aW,.75aH)..(.3aW,.45aH)..(.7aW,.15aH)..cycle;
 ef sC="_": dwh Z01--Z04;
-ef sC="^": dwv (hP,.6aH)..(.5aW,.7aH)..(fW,.6aH);
+ef sC="^": dw (hP,.6aH)--(.5aW,fH)--(fW,.6aH);
 else:
 fi
 endgroup
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def blank_str:= "                             " enddef;
-vardef fixed_r(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef;
-vardef fixed_l(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef;
-vardef fdr(expr n)(expr s)=fixed_r(n)(decimal(s)) enddef;
-vardef fdl(expr n)(expr s)=fixed_l(n)(decimal(s)) enddef;
-def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef;
-%-------------------------------------------------------------------------------------------------
 def warning_bond(expr a)=
   if addA[a]=0:
-    warning("A"&decimal(a)&" ( "&fixed_l(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds");
+    warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds");
   fi
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef cut_paren(expr ATOM)=
+vardef erase_brace(expr ATOM)=
   save temp_c,temp_s;
   string temp_c,temp_s;
   temp_s:="";
   if (length(ATOM)>=4)and(ATOM<>"COOH"):
-    for i=0 upto length(ATOM)-1:
+    for i=1 upto length(ATOM):
       temp_c:=subc(i,ATOM);
       if (temp_c<>"{")and(temp_c<>"}")and(temp_c<>"_")and(temp_c<>"^")
                       and(temp_c<>"+")and(temp_c<>"-"):
@@ -1417,11 +1455,11 @@
     knownA:=bond_cnt:=0;
     nS:=numS[i];
     for j=1 upto cntB:
-      if (lineB[j]>=dl)and(lineB[j]<=dm): bondC[j]:=2;
-      ef lineB[j]=tm:                     bondC[j]:=3;
-      ef (lineB[j]=vf)or(lineB[j]=vb):    bondC[j]:=0;
-      ef lineB[j]=0:                      bondC[j]:=0;
-      else:                               bondC[j]:=1;
+      if (lineB[j]>=dl)and(lineB[j]<=dm_): bondC[j]:=2;
+      ef lineB[j]=tm:                      bondC[j]:=3;
+      ef (lineB[j]=vf)or(lineB[j]=vb):     bondC[j]:=0;
+      ef lineB[j]=0:                       bondC[j]:=0;
+      else:                                bondC[j]:=1;
       fi
       if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi
     endfor
@@ -1464,15 +1502,13 @@
   if (tbl_atom_max=1)and(sumA[2]>0): tbl_atom_max:=2; fi
   for i=1 upto tbl_atom_max:
     if sumA[i]>=1:
-      nA:=tbl_atom_wt[i]/100*sumA[i];
-      nB:=tbl_atom_mi[i]/100*sumA[i];
-      cen_MW:=cen_MW+nA;
-      cen_MI:=cen_MI+nB;
+      nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i];
+      cen_MW:=cen_MW+nA;              cen_MI:=cen_MI+nB;
       if (cen_MW<40)and(cen_MI<40):
         num_MW:= num_MW+tbl_atom_wt[i]*sumA[i];
         num_MI:= num_MI+tbl_atom_mi[i]*sumA[i];
       fi
-      cal_FM:=cal_FM&cut_paren(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi;
+      cal_FM:=cal_FM&erase_brace(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi;
     fi
   endfor
   %-------------------------------------------------------------------------------------
@@ -1520,6 +1556,7 @@
     ef tag[i]="USE": & inf_USE
     ef tag[i]="EXA": & inf_EXA
     ef tag[i]="EXB": & inf_EXB
+    ef tag[i]="MC":  & inf_MC
     fi
   endfor
   if sw_aux_out=3: for i=1 upto inf_num: &aux_delimiter&info[i] endfor; fi
@@ -1544,7 +1581,7 @@
   printf "------------------------------------------------------------------";
   printf "< NO. ><atom(s) >(  x axis   ,   y axis   )<bond><hideH><chg>";
   for i=1 upto cntA:
-    printf " A"&fdl(6)(i)&fixed_l(8)(cut_paren(strD[numS[i]]))&
+    printf " A"&fdl(6)(i)&fsl(8)(erase_brace(strD[numS[i]]))&
            " ("&fdr(10)(round_auto(xpart(posA[i])/blen))&" , "&
             fdr(10)(round_auto(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])&
             iif(hideH[i]>0,fdr(6)(hideH[i]),"        ")
@@ -1567,7 +1604,7 @@
     if sumA[i]>=1:
        nA:=tbl_atom_wt[i]/100*sumA[i]; nB:=tbl_atom_mi[i]/100*sumA[i];
        printf " "&
-         fixed_l(5)(cut_paren(tbl_atom_str[i]))&
+         fsl(5)(erase_brace(tbl_atom_str[i]))&
          "("&fdr(9)(tbl_atom_wt[i])&")"&"["&fdr(9)(tbl_atom_mi[i])&"]"&" * "&fdr(4)(sumA[i])
        if nA<40: &fdr(15)(tbl_atom_wt[i]*sumA[i])&"["&fdr(12)(tbl_atom_mi[i]*sumA[i])&"]";
        else:     &fdr(11)(nA)&"*100"&"["&fdr(9)(nB)&"*100"&"]";
@@ -1574,7 +1611,7 @@
        fi
      fi
   endfor
-  printf " Molecular Weight [Mono Isotopic] =   "&fixed_r(12)(cal_MW)&"["&fixed_r(12)(cal_MI)&"]";
+  printf " Molecular Weight [Mono Isotopic] =   "&fsr(12)(cal_MW)&"["&fsr(12)(cal_MI)&"]";
   printf "------------------------------------------------------------------";
   printf " Weight  Calc: " &cal_MW &" / Input: "
     if inf_MW<>"-": &inf_MW &" / weight gap= " &decimal(num_MW-scantokens(inf_MW)) fi;
@@ -1588,11 +1625,11 @@
   out_file_name:=out_file_mol;
   %-V2000---------------------------------------------------------------------------------------
   if sw_mol_out=1:
-    printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info[1]); printf "";
     printf fdr(3)(cntA)&fdr(3)(cntB)&"  0  0  0  0  0  0  0  0999 V2000";
     for i=1 upto cntA:
       printf fdr(10)(xpart(posA[i])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "&
-             fixed_l(2)(cut_paren(strD[numS[i]]))&"  0"&fdr(3)(bond_charge(chargeA[i]))&"  0  0";
+             fsl(2)(erase_brace(strD[numS[i]]))&"  0"&fdr(3)(bond_charge(chargeA[i]))&"  0  0";
     endfor
     for i=1 upto cntB:
       if lineB[i]<>0:
@@ -1603,13 +1640,13 @@
     printf "M  END";
   %-V3000---------------------------------------------------------------------------------------
   elseif sw_mol_out=2:
-    printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info[1]); printf "";
     printf "  0  0  0     0  0     999 V3000"; 
     printf "M  V30 BEGIN CTAB";
     printf "M  V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0";
     printf "M  V30 BEGIN ATOM";
     for i=1 upto cntA:
-      printf "M  V30 "&decimal(i)&" "&cut_paren(strD[numS[i]])&" "&
+      printf "M  V30 "&decimal(i)&" "&erase_brace(strD[numS[i]])&" "&
              decimal(xpart(posA[i])/blen)&" "&decimal(ypart(posA[i])/blen)&" 0 0"
              if chargeA[i]<>0: &" CHG="&decimal(chargeA[i]) fi;
     endfor
@@ -1697,11 +1734,13 @@
 for i==3 upto 20: ?[i]:='((_com,_len_ss),(_get_len,_ring_len),<((-180 DIV i)-90)
   for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_com,_len_ee)); endfor
 Ph:=Ph1:='(?6,-2=dl,-4=dl,-6=dl); Ph2:='(?6,-1=dl,-3=dl,-5=dl);
-!:=!1:='((_mk_bond,_arg_ang)); !!:='(!~db); !!!:='(!~tm);
+!:=!1:='((_mk_bond,_arrange_ang)); !!:='(!~db); !!!:='(!~tm);
 for i==2  upto 20:
   ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee));
 endfor
 Me:='(); Et:='(!); iPr:=?!:='(/_,!); tBu:=??!:='(/_,/_^60,60); !?!:='(!,?!); !??!:='(!,??!);
+n_:='((_set_add,ASCII("-"))); p_:='((_set_add,ASCII("+")));
+zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv);
 %-------------------------------------------------------------------------------------------------
 NH:='(N,/H~nl); N!:='(N,/_); N!2:='(N,/!); SO:='(S,//O); SOO:='(S,//O^-35,//O^35);
 O!:='(O,!); O!2:='(O,!,!); O!3:='(O,!,!,!); O!?!:='(O,!,?!); O!??!:='(O,!,??!);
@@ -1744,4 +1783,27 @@
   !CH3:='(!,CH3); !OH:='(!,OH); !NH2:='(!,NH2); !CHO:='(!,CHO); !COOH:='(!,COOH); !CN:='(!,CN);
   !SH:='(!,SH); !NO2:='(!,NO2);
 enddef;
-%-------------------------------------------------------------------------------------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+vardef check_mc(expr s)=   %%%%% prototype version %%%%%%
+  save mc_char,mc_char,temp_c,err_cnt,char_cnt;
+  string temp_c;
+  numeric mc_char[];
+  err_cnt:=char_cnt:=nA:=nB:=nC:=nD:=nE:=nF:=0;
+  %-----------------------------------------------------------------------------------------------
+  for i=1 upto length(s):
+    temp_c:=subc(i,s); if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi
+  endfor
+  %-- check brackets -----------------------------------------------------------------------------
+  for i=1 upto char_cnt:
+    if mc_char[i]=a_paren_s:   nA:=nA+1; ef mc_char[i]=a_paren_e:   nB:=nB+1;
+    ef mc_char[i]=a_brace_s:   nC:=nC+1; ef mc_char[i]=a_brace_e:   nD:=nD+1;
+    ef mc_char[i]=a_bracket_s: nE:=nE+1; ef mc_char[i]=a_bracket_e: nF:=nF+1;
+    fi
+  endfor
+  if nA<>nB: err_cnt:=err_cnt+1; fi  if nC<>nD: err_cnt:=err_cnt+1; fi
+  if nE<>nF: err_cnt:=err_cnt+1; fi
+  %-----------------------------------------------------------------------------------------------
+  if err_cnt>=1: message "* "&decimal(err_cnt)&"fatal error"; fi
+  err_cnt
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



More information about the tex-live-commits mailing list.