diff options
author | Karl Berry <karl@freefriends.org> | 2021-07-18 20:22:29 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-07-18 20:22:29 +0000 |
commit | 07a55c4c3220d83181e9bca4a0fd432e567a42aa (patch) | |
tree | 1341ac421ad5c562d97b0374124ff6f65df23fb2 /Master/texmf-dist | |
parent | 78591567fc12bcecdf39f8d632d39c12568401ea (diff) |
mcf2graph (18jul21)
git-svn-id: svn://tug.org/texlive/trunk@59974 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG | 9 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/README | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf | 43 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf | 13 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf | bin | 319297 -> 320334 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf | 158 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf | bin | 381229 -> 383107 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex | 103 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf | bin | 184370 -> 184371 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex | 4 | ||||
-rw-r--r-- | Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf | 58 |
12 files changed, 239 insertions, 153 deletions
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG index 684fdf8016d..fcde9811d39 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG +++ b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG @@ -1,7 +1,12 @@ ******************************************************************************* - Changelog of mcf2graph software package by Akira Yamaji 2021-06-28 + Changelog of mcf2graph software package by Akira Yamaji 2021-07-18 ******************************************************************************* -[ver. 4.68 / 2021-06-28 +[ver. 4.69 / 2021-07-18] + -add bond type wf_r,wb_r,bd_r for steric ring + -update mcf_data_base.mcf + -update MCF manual,example + +[ver. 4.68 / 2021-06-28] -fix bug in data base file handling -update mcf_data_base.mcf -update MCF manual,example diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/README b/Master/texmf-dist/doc/metapost/mcf2graph/README index 3f1624af40f..c6252c7f5c7 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/README +++ b/Master/texmf-dist/doc/metapost/mcf2graph/README @@ -1,7 +1,7 @@ ******************************************************************************** mcf2graph : Convert Molecular Coding Format to graphics with METAFONT/METAPOST Author : Akira Yamaji - version : 4.68 2021-06-28 + version : 4.69 2021-07-18 E-mail : mcf2graph@gmail.com Located at : http://www.ctan.org/pkg/mcf2graph ******************************************************************************** diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf index 10944442eab..3b561412035 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf @@ -1,9 +1,10 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% molecular data base file mcf_data_base.mcf by Akira Yamaji 2021.06.28 +% molecular data base file mcf_data_base.mcf by Akira Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tag1:var1;tag2:var2;tag3:var3 ..... -% first character of line '%' comment out -% first character of line '+' begin MCF , end MCF +% first character of line "%" comment out +% first character of line "+" begin MCF +% first string of line "+-" end MCF % Cat = Category %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %============================================================================== @@ -148,6 +149,38 @@ Cat:biological;EN:Oxaloacetate;MW:132.07;EXA:3 <30,COOH,!,//O,!2,COOH +------------------------------------------------------------------------------ %============================================================================== +Cat:biological;EN:Glucose;MW:180.16;EXA:- ++ +<30,?6,5:O,2:*/OH,{1,3}:/*OH,4:*/*OH,6:*/!OH ++------------------------------------------------------------------------------ +Cat:biological;EN:Glucose;MW:180.16;EXA:- ++ +<-30,OH,!2,*/OH,!,/*OH,!,/*OH,!,/*OH,!,//O,!,H ++------------------------------------------------------------------------------ +Cat:biological;EN:Fructose;MW:180.16;EXA:- ++ +<30,OH,!2,/*OH,!,*/OH,!,*/OH,!,//O,!2,OH ++------------------------------------------------------------------------------ +Cat:biological;EN:Fructose;MW:180.16;EXA:- ++ +<-18,?5,5:O,1^-48:*/*!OH,1^48:/OH,2:/*OH,3:*/OH,4:/*!OH ++------------------------------------------------------------------------------ +Cat:biological;EN:Glucose(1);MW:180.16;EXA:1 ++ +#1,-60~wf_r,75~bd_r,-30~wb_r,130,O,75,&1,##, +{1^$-160,2^$175,3^$-60}:/OH`-.5,4:*/*OH`-.5,6:/!OH^$90`-.5 ++------------------------------------------------------------------------------ +Cat:biological;EN:Glucose(2);MW:180.16;EXA:1 ++ +#1.25,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##, + {1^$-90,2^$90,3^$-90,4^$90}:/OH`-.5,6^$90:/!OH`-.5 ++------------------------------------------------------------------------------ +Cat:biological;EN:Fluctose;MW:180.16;EXA:- ++ +#1.4,-35~wf_r,35~bd_r`1,30~wb_r,130`1.66,O,&1,##, + 1^$-90:/OH,{2^$-90,3^$90}:/OH`-.45,{1^$90,4^$90}:/!OH`-.45 ++------------------------------------------------------------------------------ +%============================================================================== Cat:biological;EN:Geraniol;MW:154.25;EXA:1 + <30,!8,OH,{2,6}=dr,{2,6}:/_ @@ -868,11 +901,11 @@ Cat:biological;EN:Warfarin;MW:308.333;EXA:1 + <30,Ph,3=?6,8=dl,10:O,7:/OH,9://O,@8,\,/Ph`1,60,!,//O,! +------------------------------------------------------------------------------ -Cat:biological;EN:Genistein;MW:270.24;EXA:1 +Cat:biological;EN:Genistein;MW:270.24;EXA:- + <30,Ph,3=?6,9=dl,10:O,{2,6}:/OH,7://O,@8,\,Ph,-3:/OH +------------------------------------------------------------------------------ -Cat:biological;EN:Baicalein;MW:270.24;EXA:1 +Cat:biological;EN:Baicalein;MW:270.24;EXA:1- + <30,Ph,3=?6,9=dl,10:O,{1,2,6}:/OH,7://O,@8,\,Ph +------------------------------------------------------------------------------ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf index 516424a5497..1f947a342f0 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf @@ -1,8 +1,8 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format for mcf_example.tex by Akira Yamaji 2021.06.28 +% Molecular Coding Format for mcf_example.tex by Akira Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %%% it must be version 4.68 -message "* mcf_exa_soc 2021.06.28"; +input mcf2graph.mf; %%% it must be version 4.69 +message "* mcf_exa_soc 2021.07.18"; message ""; %------------------------------------------------------------------------------ fsize:=(35mm,24mm); @@ -12,9 +12,16 @@ tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW"; %%%%sw_fframe:=1; %%%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png"; %ext(defaultfont:="uhvr8r"; defaultscale:=.6; label.lrt(inf_EN,(-2bp,1.5bp));) +%sw_output:=Font; +%ext(defaultfont:="uhvr8r"; defaultscale:=.6; +%label.lrt(inf_EN&"MW="&cal_MW +% &"("&decimal(num_MW-scantokens(inf_MW))&")",(-2bp,1.5bp)); +%) %------------------------------------------------------------------------------ if f_MP=0: input mcf_exa_soc-mf.aux; % (metafont) make aux file before typeset else: % mpost -s ahlength=7 mcf_exa_soc.mf +%------------------------------------------------------------------------------ +%%message "counr unit= "&decimal(count_data_unit("mcf_data_base")); %****************************************************************************** beginfont("f:mcf_data_base","t:EN","v:Adenine") % select EN=Adenine if check(mc)=0: MC(scantokens(mc)) fi diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf Binary files differindex 3e206972ac5..0201f795ed3 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex index 8d44f7522ba..0069f100e6e 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typeset by LaTeX mcf_examples.tex by A.Yamaji 2021.06.28 +% Example of MCF typeset by LaTeX mcf_examples.tex by A.Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[a4paper]{article} \usepackage{graphicx} diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf index 75591a8fe33..1561ec3b647 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf @@ -1,9 +1,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2021.06.28 +% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %% it must be version 4.68 +input mcf2graph.mf; %% it must be version 4.69 % ** use data base file 'mcf_data_base.mcf' -message "mcf_man_soc 2021.06.28"; message ""; +message "mcf_man_soc 2021.07.18"; message ""; %------------------------------------------------------------------------ sw_mframe:=0; sw_expand:=0; @@ -257,96 +257,95 @@ beginfont("EN:rotate 1") endfont %*********************************************************************** beginfont("EN:change bond 1") - fsize:=(70mm,12mm); - fmargin:=(2mm,3mm); + fsize:=(70mm,10mm); + fmargin:=(2mm,2mm); sw_trimming:=0; ratio_chain_ring:=1; MC(<-30,!~dm,!,!~dl,!,!~dr,!~db,!~db,!,!~tm) add(defaultscale:=0.6; labeloffset:=0; - label.rt("(dm)",A1+(0,-0.8l)); - label.rt("(dl)",A3+(0,-0.8l)); - label.rt("(dr)",A5+(0,-0.8l)); - label.rt("(db)",A6+(0,-0.3l)); - label.rt("(db)",A7+(0,-0.8l)); - label.rt("(tm)",A9+(0,-0.8l)); + label.rt("(dm)",A1+(0,-0.7l)); + label.rt("(dl)",A3+(0,-0.7l)); + label.rt("(dr)",A5+(0,-0.7l)); + label.rt("(db)",A6+(0,-0.7l)); + label.rt("(db)",A7+(0,-0.7l)); + label.rt("(tm)",A9+(0,-0.7l)); ) endfont %*********************************************************************** beginfont("EN:change bond 2") - fsize:=(60mm,12mm); - fmargin:=(2mm,3mm); - blength:=9.5mm; - sw_trimming:=1; + fsize:=(70mm,10mm); + fmargin:=(2mm,2mm); + sw_trimming:=0; ratio_chain_ring:=1; - MC(<-30,!~wf,!,!~wb,!,!~zf,!,!~zb) + MC(<-30,!~wf,!,!~wb,!,!~zf,!,!~zb,!,!~vf,!,!~vb) add(defaultscale:=0.6; labeloffset:=0; label.rt("(wf)",A1+(0,-0.7l)); label.rt("(wb)",A3+(0,-0.7l)); label.rt("(zf)",A5+(0,-0.7l)); label.rt("(zb)",A7+(0,-0.7l)); + label.rt("(vf)",A9+(0,-0.7l)); + label.rt("(vb)",A11+(0,-0.7l)); ) endfont %*********************************************************************** beginfont("EN:change bond 3") - fsize:=(70mm,12mm); - fmargin:=(2mm,3mm); - blength:=10mm; - sw_trimming:=1; - ratio_chain_ring:=1; - MC(<-30,!~vf,!,!~vb) - add(defaultscale:=0.6; labeloffset:=0; - label.rt("(vf)",A1+(0,-0.7l)); - label.rt("(vb)",A3+(0,-0.7l)); - ) -endfont -%*********************************************************************** -beginfont("EN:change bond 3") - fsize:=(70mm,12mm); - fmargin:=(2mm,3mm); + fsize:=(70mm,10mm); + fmargin:=(2mm,2mm); blength:=9mm; sw_trimming:=1; ratio_chain_ring:=1; MC(<-30,!7,1=dt,3=wv,5=bd,7=bz) add(defaultscale:=0.6; labeloffset:=0; - label.rt("(dt)",A1+(0,-0.7l)); - label.rt("(wv)",A3+(0,-0.7l)); - label.rt("(bd)",A5+(0,-0.7l)); - label.rt("(bz)",A7+(0,-0.7l)); + label.rt("(dt)",A1+(0,-0.6l)); + label.rt("(wv)",A3+(0,-0.6l)); + label.rt("(bd)",A5+(0,-0.6l)); + label.rt("(bz)",A7+(0,-0.6l)); ) endfont %*********************************************************************** -beginfont("EN:change bond 4") - fsize:=(60mm,12mm); - fmargin:=(2mm,3mm); - blength:=9mm; - sw_trimming:=1; - ratio_chain_ring:=1; - MC(<30,!7,{2,4,6}=dr) -endfont -%*********************************************************************** beginfont("EN:over line") sw_trimming:=1; - fsize:=(80mm,20mm); + fsize:=(75mm,20mm); ratio_chain_ring:=1; - MC(<30,!18,!,60,90`17, + MC(<30,!18,$90`1.5,90`15.5, {2~si_,4~wf_,6~wb_,8~zf_,10~zb_, 12~bd_,14~dl_,16~dr_,18~dm_}:/_`2) endfont %*********************************************************************** +beginfont("EN:Steric ring") + fsize:=(75mm,16mm); + MCat(0.05,0.5)(#1.25,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##, + {1^$-90,2^$90,3^$-90,4^$90}:/OH`-.5,6^$90:/!OH`-.5) + defaultscale:=0.6; + MCat(0.5,0.7)(0~wf_r) add(label.lft("wf_r:",A1);) + MCat(0.5,0.2)(0~wf) add(label.lft("wf:",A1);) + MCat(0.75,0.7)(0~bd_r) add(label.lft("bd_r:",A1);) + MCat(0.75,0.2)(0~bd) add(label.lft("bd:",A1);) + MCat(1,0.7)(0~wb_r) add(label.lft("wb_r:",A1);) + MCat(1,0.2)(0~wb) add(label.lft("wb:",A1);) +endfont +%*********************************************************************** +beginfont("EN:change multi bond") + fsize:=(40mm,8mm); + fmargin:=(2mm,3mm); + ratio_chain_ring:=1; + MC(<30,!7,{2,4,6}=dr) +endfont +%*********************************************************************** beginfont("EN:change bond length1") - fsize:=(75mm,10mm); + fsize:=(55mm,8mm); sw_numbering:=Bond; MC(<-30,!2,!4`1.2,!2) endfont %*********************************************************************** beginfont("EN:change bond length2") - fsize:=(75mm,10mm); + fsize:=(55mm,8mm); sw_numbering:=Bond; MC(<-30,!2,#1.2,!4,##,!2) endfont %*********************************************************************** beginfont("EN:change ring length") - fsize:=(60mm,20mm); + fsize:=(60mm,16mm); fmargin:=(2mm,2mm); sw_trimming:=1; sw_numbering:=Bond; @@ -355,7 +354,7 @@ endfont %*********************************************************************** beginfont("EN:Insert atom") sw_trimming:=1; - fsize:=(70mm,12mm); + fsize:=(50mm,7mm); MC(<-30,!2,O,!2,N,!2) endfont %*********************************************************************** @@ -368,7 +367,7 @@ beginfont("EN:change atom") endfont %*********************************************************************** beginfont("EN:change atom brock address 1") - fsize:=(70mm,15mm); + fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); MCat(0,.5)(?6,@4,\,|,?6,2:O) sw_numbering:=Atom; @@ -377,7 +376,7 @@ beginfont("EN:change atom brock address 1") endfont %*********************************************************************** beginfont("EN:change atom brock address 2") - fsize:=(70mm,15mm); + fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); MCat(0,.5)(?6,@4,\,|,?6,||,2:N) sw_numbering:=Atom; @@ -386,7 +385,7 @@ beginfont("EN:change atom brock address 2") endfont %*********************************************************************** beginfont("EN:change atom absolute address") - fsize:=(70mm,15mm); + fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); MCat(0,.5)(?6,@4,\,?6,$2:N) sw_numbering:=Atom; @@ -395,7 +394,7 @@ beginfont("EN:change atom absolute address") endfont %*********************************************************************** beginfont("EN:change atom relative adress") - fsize:=(70mm,15mm); + fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); MCat(0,.5)(?6,@4,\,?6,-2:N) sw_numbering:=Atom+Inverse; @@ -414,7 +413,7 @@ beginfont("EN:fused ring") fmargin:=(2mm,1.5mm); sw_trimming:=1; sw_numbering:=Bond; - MC(<30,?6,3=?6,3=dt,{7--11}=bd) + MC(<30,?6,3=?6,3=dt,{7--11}=bd_r) endfont %----------------------------------------------------------------------- beginfont("EN:change ring length") @@ -423,7 +422,7 @@ beginfont("EN:change ring length") sw_trimming:=1; sw_numbering:=Bond; MC(?6,@4,\,?6`1.2,5=?6,11=?6, - {14--23}=bd,{5,11}=dt) + {14--23}=bd_r,{5,11}=dt) endfont %----------------------------------------------------------------------- beginfont("EN:fused large 6 ring") @@ -432,7 +431,7 @@ beginfont("EN:fused large 6 ring") margin_top_bottom:=1.5mm; sw_numbering:=Bond; sw_trimming:=1; - MC(<30,?6,3=?6[13],3=dt,{7--11}=bd) + MC(<30,?6,3=?6[13],3=dt,{7--11}=bd_r) endfont %----------------------------------------------------------------------- beginfont("EN:fuse multi ring") @@ -448,13 +447,13 @@ beginfont("EN:fused ring 2") fmargin:=(2mm,2mm); sw_numbering:=Bond; msize:=(1,.9); - MCat( 0,.5)(<30,?6,3=?6,(11,4)=?6[4],{11,4}=dt,{12--15}=bd) + MCat( 0,.5)(<30,?6,3=?6,(11,4)=?6[4],{11,4}=dt,{12--15}=bd_r) add(defaultscale:=0.4; label("(1)",p0);) msize:=(1,.9); - MCat(.5,.5)(<30,?6,3=?6,(11,4)=?5[3],{11,4}=dt,{12--14}=bd) + MCat(.5,.5)(<30,?6,3=?6,(11,4)=?5[3],{11,4}=dt,{12--14}=bd_r) add(defaultscale:=0.4; label("(2)",p0);) msize:=(1,.9); - MCat( 1,.5)(<30,?6,3=?6,(11,4)=?4[2],{11,4}=dt,{12,13}=bd) + MCat( 1,.5)(<30,?6,3=?6,(11,4)=?4[2],{11,4}=dt,{12,13}=bd_r) add(defaultscale:=0.4; label("(3)",p0);) endfont %*********************************************************************** @@ -462,24 +461,22 @@ beginfont("EN:fused ring 3") fsize:=(60mm,20mm); fmargin:=(2mm,2mm); sw_numbering:=Bond; - MCat(0,1)(?6,{3,10}=?6,(16,4)=?6[3],{16,4}=dt,{17--19}=bd) + MCat(0,1)(?6,{3,10}=?6,(16,4)=?6[3],{16,4}=dt,{17--19}=bd_r) add(defaultscale:=0.4; label("(1)",p0);) - MCat(1,0)(?6,{3,10}=?6,(16,4)=?5[2],{16,4}=dt,{17,18}=bd) + MCat(1,0)(?6,{3,10}=?6,(16,4)=?5[2],{16,4}=dt,{17,18}=bd_r) add(defaultscale:=0.4; label("(2)",p0);) endfont %*********************************************************************** beginfont("EN:fused ring 4") - fsize:=(60mm,22mm); + fsize:=(60mm,20mm); fmargin:=(2mm,2mm); sw_trimming:=1; sw_numbering:=Bond; - MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2],{21,4}=dt,{22,23}=bd) + MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2],{21,4}=dt,{22,23}=bd_r) endfont %*********************************************************************** beginfont("EN:Spiro ring ") - sw_trimming:=1; - fsize:=(60mm,18mm); - fmargin:=(2mm,3mm); + fsize:=(40mm,15mm); sw_numbering:=Atom; numbering_end:=7; ratio_chain_ring:=1; @@ -487,14 +484,12 @@ beginfont("EN:Spiro ring ") endfont %*********************************************************************** beginfont("EN:group 1") - fsize:=(60mm,25mm); - sw_trimming:=1; - MC(<-30,!,/_,!,/!,!3,/!2,!,/iPr,!3,/tBu,!,/Ph^-30,!) + fsize:=(75mm,18mm); + MC(<30,!,/_,!2,/!,!2,/!2,!4,/?!,!4,/??!,!2,/'(Ph`0.8)^-60,!) endfont %*********************************************************************** beginfont("EN:group 2") - fsize:=(80mm,15mm); - sw_trimming:=1; + fsize:=(70mm,14mm); MC(<30,!`1,//O,!2`1,*/H,!2`1,/*H,!2`1,*/*H,!2`1,**?3,!`1) add(defaultscale:=0.75; label("//",A2-(0,0.45l)); @@ -506,18 +501,17 @@ beginfont("EN:group 2") endfont %*********************************************************************** beginfont("EN:group 3") - fsize:=(60mm,18mm); + fsize:=(60mm,16mm); sw_trimming:=1; MC(<-30,#1,!2,/_`2^30,!2,/!2>lr,!2,/!2>rl,!) endfont %*********************************************************************** beginfont("EN:group 3") - fsize:=(80mm,18mm); + fsize:=(75mm,18mm); fmargin:=(2mm,2mm); sw_numbering:=Atom; - sw_trimming:=1; numbering_end:=17; - MC(<30,!16,2:/_,4:/!,6:/!2,10:/iPr,14:/tBu,16:/Ph^-60) + MC(<30,!16,2:/_,4:/!,6:/!2,10:/iPr,14:/tBu,16:/'(Ph`0.8)^-60) endfont %*********************************************************************** beginfont("EN:group 4") @@ -529,14 +523,14 @@ beginfont("EN:group 4") endfont %*********************************************************************** beginfont("EN:group 5") - fsize:=(60mm,18mm); + fsize:=(60mm,16mm); sw_trimming:=1; sw_numbering:=Atom; numbering_end:=8; MC(<-30,!7`1,3:/_`2^30,5:/!2>lr,7:/!2>rl) endfont %*********************************************************************** beginfont("EN:chain strech direction mode 1") - fsize:=(50mm,35mm); + fsize:=(50mm,25mm); sw_trimming:=1; ratio_chain_ring:=1; MC( @@ -546,7 +540,7 @@ beginfont("EN:chain strech direction mode 1") endfont %*********************************************************************** beginfont("EN:chain strech direction mode 2") - fsize:=(60mm,23mm); + fsize:=(60mm,20mm); sw_trimming:=1; ratio_chain_ring:=1; MC( @@ -562,7 +556,7 @@ beginfont("EN:chain strech direction mode 3") endfont %*********************************************************************** beginfont("EN:chain strech direction mode 4") - fsize:=(60mm,22mm); + fsize:=(60mm,20mm); sw_trimming:=1; MC(<30,!6,6>'(90,-90,90,-90,90):/!5) endfont @@ -574,7 +568,7 @@ beginfont("EN:change atom and group") endfont %*********************************************************************** beginfont("EN:methyl*2,isopropyl,tert-butyl") - fsize:=(60mm,15mm); + fsize:=(60mm,12mm); sw_trimming:=1; MC(<30,!9`1,?!,!,??,!,2:??,4:/?!,6:/??!,8:/N?!) endfont @@ -612,7 +606,7 @@ beginfont("EN:Serial number") fsize:=(75mm,14mm); max_blength:=8mm; sw_numbering:=Atom; numbering_end:=15; - MC(<30,!14,{2,6--10,14}:/_~bd`0.5) + MC(<30,!14,{2,6--10,14}:/_~bd_r`0.5) endfont %*********************************************************************** beginfont("EN:Change color") diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf Binary files differindex 02bb3fa0e25..e3f8d908bcb 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex index a40f0331f2d..415adf1bf09 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format manual by Akira Yamaji 2021.06.28 +% Molecular Coding Format manual by Akira Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[a4paper]{article} \usepackage[pdftex]{graphicx} @@ -228,29 +228,20 @@ tm : triple \index{wb}% \index{zf}% \index{zb}% +\index{vf}% +\index{vb}% \begin{verbatim} -(Wedge) +(Wedge,Vector) wf: wedge forward wb: wedge backward zf: hashed(zebra stripe) wedge foward zb: hashed(zebra stripe) wedge backward - -<-30,!~wf,!,!~wb,!,!~zf,!,!~zb -\end{verbatim} -\MCFgraph -\vspace{-3mm}% -%----------------------------------------------------------------------------- -%%\subsubsection{Vector} -\index{vf}% -\index{vb}% -\begin{verbatim} - -(Vector) vf:vector forward vb:vector backward -<-30,!~vf,!,!~vb +<-30, + !~wf,!,!~wb,!,!~zf,!,!~zb,!,!~vf,!~vb \end{verbatim} \MCFgraph \vspace{-3mm}% @@ -264,25 +255,14 @@ vb:vector backward (Dotted,wave) Bn=bond type : change bond type at Bn -dt : dotted -wv : wave -bd : broad -bz : broad dotted +dt : dotted / wv : wave +bd : broad / bz : broad dotted <-30,!7,1=dt,3=wv,5=bd,7=bz \end{verbatim} \MCFgraph \vspace{-3mm}% %----------------------------------------------------------------------------- -\subsubsection{Change multiple bond type} -\index{vf}% -\begin{verbatim} -{2,4,6}=dr : 2=dr,4=dr,6=dr - -<30,!7,{2,4,6}=dr -\end{verbatim} -\MCFgraph -%----------------------------------------------------------------------------- \subsubsection{Over line} \index{si\_}% \index{wf\_}% @@ -310,6 +290,30 @@ dm_ : duble over line \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- +\subsubsection{Steric ring} +\index{wf\_r}% +\index{wb\_r}% +\index{bd\_r}% +\begin{verbatim} +wf_r : wedge foward (half width) +bd_r : broad (half width, rounded) +wb_r : wedge backward (half width) + +#1.25,-30~wf_r,30~bd_r`1,30~wb_r, + 120,O,30,&1,##,6^$90:/!OH`-.5, + {1^$-90,2^$90,3^$-90,4^$90}:/OH`-.5, +\end{verbatim} +\MCFgraph +%----------------------------------------------------------------------------- +\subsubsection{Change multiple bond type} +\index{vf}% +\begin{verbatim} +{2,4,6}=dr : 2=dr,4=dr,6=dr + +<30,!7,{2,4,6}=dr +\end{verbatim} +\MCFgraph +%----------------------------------------------------------------------------- \subsection{Change bond length} \subsubsection{Chain length} \index{`}% @@ -401,9 +405,13 @@ p_ : positive / n_ : negative \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- +\newpage +%----------------------------------------------------------------------------- \subsection{Fuse ring} -\subsubsection{Attached 1 bond} +%%%\subsubsection{Attached 1 bond} \begin{verbatim} +(Attached 1 bond) + ?6,3=?6 : fuse ?6 at B3 ** Bn(n:-999<=n<=4095): bond number @@ -434,8 +442,10 @@ attached bond length \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- -\subsubsection{Attached 2 bond} +%%%\subsubsection{Attached 2 bond} \begin{verbatim} +(Attached 2 bond) + (4,11)=?6[4] : fuse 4/6 ring to B11..B4 (4,11)=?5[3] : fuse 3/5 ring to B11..B4 (4,11)=?4[2] : fuse 2/4 ring to B11..B4 @@ -450,8 +460,10 @@ attached bond length \begin{verbatim} \end{verbatim} %----------------------------------------------------------------------------- -\subsubsection{Attached 3 bond} +%%%\subsubsection{Attached 3 bond} \begin{verbatim} +(Attached 3 bond) + (16,4)=?6[3] : fuse 3/6 ring to B16..B4 (16,4)=?5[2] : fuse 2/5 ring to B16..B4 ** ?m[n] (5<=m<=6,n=m-3) @@ -464,8 +476,10 @@ attached bond length \begin{verbatim} \end{verbatim} %----------------------------------------------------------------------------- -\subsubsection{Attached 4 bond} +%%%%\subsubsection{Attached 4 bond} \begin{verbatim} +(Attached 4 bond) + (21,4)=?6[2] : fuse 2/6 ring to B21..B4 MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) @@ -474,7 +488,7 @@ MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- -\subsubsection{Spiro ring} +\subsection{Spiro ring} \begin{verbatim} @4,?5 : add ?5 at A4 @@ -487,13 +501,17 @@ MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) \index{/}% \index{Ph}% \begin{verbatim} -/ : single -<-30,!,/_,!,/!,!3,/!2,!,/?!, - !3,/??!,!,/Ph^-30,! +/ : group start single bond + +/_ : methyl +/! : ethyl +/!2 : propyl +/?! : isopropyl +/??! : tert-butyl +/Ph : phenyl -** /_ : methyl /! : ethyl - /!2 : propyl /?! : isopropyl - /??! : tert-butyl /Ph : phenyl +<30,!,/_,!2,/!,!2,/!2,!4,/?!, + !4,/??!,!2,/Ph^-60,! \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- @@ -532,7 +550,7 @@ MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) \subsubsection{Add group} \begin{verbatim} <30,!17,2:/_,4:/!,6:/!2, -10:/?!,14:/??!,16:/Ph^-60 + 10:/?!,14:/??!,16:/Ph^-60 \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- @@ -552,6 +570,8 @@ MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- +\newpage +%----------------------------------------------------------------------------- \subsection{Chain environment} \subsubsection{Horizontal,vertical} \index{hz}% @@ -600,6 +620,7 @@ MC(<-30,?6,{3,10,15}=?6,(21,4)=?6[2]) \end{verbatim} \MCFgraph %----------------------------------------------------------------------------- +\newpage \subsection{Miscellaneous} %----------------------------------------------------------------------------- \subsubsection{Abbreviated parts} @@ -657,7 +678,7 @@ MC(<30,?6,{4,6}:/iBuOH) \index{--}% \begin{verbatim} 6--10 : 6,7,8,9,10 -<30,!14,{2,6--10,14}:/_~bd`0.5 +<30,!14,{2,6--10,14}:/_~bd_r`0.5 \end{verbatim} \MCFgraph \newpage diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf Binary files differindex b488e6cb46d..a7641d4bada 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex index d8496b1212c..b536b628605 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2021.06.28 +% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2021.07.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ** mcf2graph.mf must be version 4.68 +% ** mcf2graph.mf must be version 4.69 % ** use mcf_data_base.mcf \documentclass{article} %------------------------------------------------------------------------------ diff --git a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf index 33fec242fe0..d248fe014a8 100644 --- a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf +++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.68 Copyright (c) 2013-2021 Akira Yamaji +% mcf2graph ver 4.69 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,16 @@ % Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracingstats:=1; -message "* This is mcf2graph ver 4.68 2021.06.28"; +message "* This is mcf2graph ver 4.69 2021.07.18"; %------------------------------------------------------------------------------------------------- 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,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[],cmm_adr[], - mc_indent[]; -string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,aux_delimiter, - atomfont,mpfont,s_tag,s_var,cal_FM,cal_MW,cal_MI, + com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],lineB[], + sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[],cmm_adr[],mc_indent[]; +string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,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; pair save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe,dum; picture mol_stru[],atom_picture,save_picture,temp_picture; @@ -207,7 +206,8 @@ def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_t _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,_from,_until, - 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_); + si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,wf_r,wb_r,bd_r, + si_,wf_,wb_,zf_,zb_,wv_,bd_); %-------------------------------------------------------------------------------------------------- def parameter_list= sw_numbering,sw_expand,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_arrow_emu,sw_abbreviate, @@ -384,7 +384,7 @@ def pickup_data_unit(expr t,v)= if temps=EOF: f_EOF:=1; fi exitif temps=EOF; if subc(1,temps)="%": - ef subc(1,temps)="+": + ef (subc(1,temps)="+")and(subc(2,temps)<>"-"): data_unit_cnt:=data_unit_cnt+1; if v="*": cond:=1; ef t="n": if data_unit_cnt=n_var: cond:=1; fi @@ -410,7 +410,7 @@ def pickup_data_unit(expr t,v)= temps:=readfrom file_name_input; if temps=EOF: f_EOF:=1; fi exitif temps=EOF; - exitif subc(1,temps)="+"; + exitif (subc(1,temps)="+")and(subc(2,temps)="-"); endfor fi else: @@ -464,8 +464,8 @@ 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)(dum,dum,|,TXT,(_com,_rest)); parts_cnt enddef; -vardef abs_adress primary n == n-4095 enddef; -primarydef a from_until b == (_from,a),(_until,b) enddef; +vardef abs_adress primary n = if n LT 0:: (n+360)-4095 else:: n-4095 fi enddef; +primarydef a from_until b = (_from,a),(_until,b) 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; @@ -478,10 +478,10 @@ def jump_atom primary a = if numeric a:: (_jp_atom,a) elseif pair a:: (_jp_atom,$1),<$0,angle(a)~0`length(a),<$0 fi 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; +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; %------------------------------------------------------------------------------------------------- def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef; %================================================================================================= @@ -1323,6 +1323,11 @@ def draw_bond(expr NUM)= draw Le for i=1 upto nB: ..controls(((i-.5)/nB)[sfrt(Le,nA,iif(odd(i),ap,am)),sfrt(Ls,nA,iif(odd(i),ap,am))]) ..(i/nB)[Le,Ls] endfor ..Ls Cp(col); +% + ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww Cp(col); + ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww Cp(col); + ef nL=bd_r: draw zA wpcs .65bondgap Cp(col); +% ef nL=vf: draw zA Cp(col);draw sfrt(Le,bondgap,ang-150)--Le--sfrt(Le,bondgap,ang+150) Cp(col); ef nL=vb: draw zA Cp(col);draw sfrt(Ls,bondgap,ang-30)--Ls--sfrt(Ls,bondgap,ang+30) Cp(col); ef nL=si_: erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; draw zA Cp(col); @@ -2053,3 +2058,24 @@ def proc_err(expr ERR_CODE,ADR)= fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +vardef count_data_unit(expr f)= + save temps,file_name,f_mcf,f_error,line_cnt,unit_cnt; + string temps,file_name; + line_cnt:=unit_cnt:=f_mcf:=f_error:=0; + file_name:=f&".mcf"; + forever: + temps:=readfrom file_name; + exitif temps=EOF; + line_cnt:=line_cnt+1; + if subc(1,temps)="%": + else: + if (subc(1,temps)="+")and(subc(2,temps)<>"-"): if f_mcf=1: f_error:=1; fi f_mcf:=1; fi + if (subc(1,temps)="+")and(subc(2,temps)="-"): + if f_mcf=0: f_error:=1; else: f_mcf:=0; unit_cnt:=unit_cnt+1; fi + fi + exitif f_error=1; + fi + endfor + if f_error=1: -line_cnt else: unit_cnt fi +enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |