From 1f17918f6a9af739d984a5ea165dcbbe1c78f0b6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 11 May 2019 21:31:07 +0000 Subject: mcf2graph (11may19) git-svn-id: svn://tug.org/texlive/trunk@51090 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf | 140 ++++++++++++---------- 1 file changed, 77 insertions(+), 63 deletions(-) (limited to 'Master/texmf-dist/metapost') diff --git a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf index 75deb69c4d4..12652c004bf 100644 --- a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf +++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.40 Copyright (c) 2013-2019 Akira Yamaji +% mcf2graph ver 4.41 Copyright (c) 2013-2019 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, @@ -18,10 +18,10 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % mcf2graph is METAFONT/METAPOST macro package convert % Molecular Coding Format(MCF) to font(pk)/eps/sgv/png/mdl molfile -%---------------------------------------------------------------------------------------------- +%-------------------------------------------------------------------------------------------------- % This package is located at : http://www.ctan.org/pkg/mcf2graph % Suggestion or request mail to : mcf2graph@gmail.com -%---------------------------------------------------------------------------------------------- +%-------------------------------------------------------------------------------------------------- % Set output no image file : mpost -s bboxmargin=0 FILENAME % Set output first font only : mpost -s bboxmargin=1 FILENAME % Set outputformat to "eps"(.mps) : mpost -s ahangle=0 FILENAME @@ -36,7 +36,7 @@ % Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracingstats:=1; -message " This is mcf2graph ver 4.40 2019.03"; +message " This is mcf2graph ver 4.41 2019.05"; %------------------------------------------------------------------------------------------------- newinternal char_num,str_cnt,sub_usr,sub_int,tbl_cnt,sharp_char; numeric save_num[],comD[][],parD[][],cntD[],tbl_atom[],tbl_subst[][], @@ -47,7 +47,7 @@ pair save_pair[],msize,mposition,fsize,fmargin,save_mposition; picture mol_stru[]; path arrow_path,arrow_head; %------------------------------------------------------------------------------------------------- -char_num:=str_cnt:=proc_end:=mangle:=sw_label_emu:=0; +char_num:=str_cnt:=proc_end:=mangle:=sw_label_emu:=sw_calc:=sw_extall:=0; sw_numberA:=sw_numberB:=sw_mframe:=sw_aux_out:=sw_expand:=sw_fframe:=sw_trimming:=0; sw_aframe:=sw_rep_out:=sw_mol_out:=sw_subst_off:=sw_single:=sw_auxfix:=sw_arrow:=0; numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; aux_max:=max_inf_num:=20; @@ -98,6 +98,7 @@ if (known green)and(known ahlength): def printf expr s= write s to out_file_name enddef; def # = enddef; def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef; + def ext(text TXT)= sw_extall:=sw_calc:=1; def EXTALL = TXT enddef; enddef; if atomfont="": atomfont:="draw"; fi % default atom font if defaultfont="": defaultfont:="draw"; fi % default label font %----------------------------------------------------------------------------------------- @@ -106,6 +107,7 @@ else: f_MP:=0; dotlabeldiam:=3bp; def Cp(expr s) = enddef; def color = transform enddef; + def ext(text TXT)= enddef; sw_arrow:=0; atomfont:="draw"; defaultfont:="draw"; @@ -125,7 +127,7 @@ ratio_char_bond:=1.5; ratio_bondgap_bond:=0.15; ratio_zebragap_bond:=0. ratio_zebra_black:=0.4; ratio_wedge_bond:=0.12; ratio_atomgap_atom:=0.050; offset_thickness:=0.2bp; offset_bond_gap:=0.3bp; offset_zebra_gap:=0.1bp; offset_atom:=0.8pt; offset_wedge:=0.4bp; -thickness_fframe:=0.2bp; thickness_mframe:=0.2bp; thickness_aframe:=0.1bp; +thickness_fframe:=0.2bp; thickness_mframe:=0.2bp; thickness_aframe:=0.1bp; max_blength:=10mm; blength:=0; mangle:=0; %-------------------------------------------------------------------------------------------------- fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5); @@ -151,7 +153,7 @@ def_com(-4000)(_term,_jp_atom,_jp_atom_abs,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_li def_com(1)(si,dl,dr,db,dm,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,si_,wf_,wb_,bd_); %-------------------------------------------------------------------------------------------------- def parameter_list= - sw_rep_out,sw_numberA,sw_numberB,sw_mframe,sw_aux_out,sw_expand,sw_mol_out, + sw_rep_out,sw_numberA,sw_numberB,sw_mframe,sw_aux_out,sw_expand,sw_mol_out,sw_calc,sw_extall, sw_aframe,sw_fframe,sw_subst_off,sw_single,sw_trimming,sw_arrow,sw_label_emu, ratio_atom_bond,ratio_thickness_bond,ratio_char_bond, ratio_chain_ring,ratio_bondgap_bond,ratio_zebra_black,ratio_zebragap_bond,ratio_thickness_char, @@ -202,24 +204,41 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def beginfont(text s)= begingroup - save cntA,cntB,cntM,minX,minY,f_beginchar,numS,sftX,sftY,f_ext,blen, + save cntA,cntB,cntM,minX,minY,f_beginchar,numS,sftX,sftY,f_ext,blen,ext,add, cal_FM,cal_MW,cal_MW_str,cal_MI,cal_MI_str,wdM,htM, inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW, posA,posM,lineB,sB,eB,angB,angA,wdA,dxA,lenB,ang_br,info; numeric lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[],dx_A[]; pair posA[],posM[][]; - string info[],cal_FM,cal_MW,cal_MW_str,cal_MI,cal_MI_str, + string info[],sumA,s_tag,s_var,cal_FM,cal_MW,cal_MW_str,cal_MI,cal_MI_str, inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW; %------------------------------------------------------------------------------------------------ + def ext=ext_font enddef; + def add=add_mol enddef; + %------------------------------------------------------------------------------------------------ + inf_NO:=inf_EN:=inf_JN:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:=inf_MW:=""; + cal_MW:=cal_MW_str:=cal_FM:=""; + %------------------------------------------------------------------------------------------------ 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 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 pic_c(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]; + if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi + fi + endfor + %------------------------------------------------------------------------------------------------ mol_stru[0]:=nullpicture; enddef; %================================================================================================== def endfont= + if (f_MP=1)and(sw_extall=1): ext_font(EXTALL); fi if sw_trimming>=1: nA:=nC:=4095; nB:=nD:=-4095; for i=1 upto cntM: @@ -240,12 +259,12 @@ def endfont= 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(drawdot(0,0); drawdot(w,0); drawdot(w,h); drawdot(0,h);) 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(drawdot(0,0); drawdot(w,0); drawdot(w,h); drawdot(0,h);) 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 + 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; @@ -257,7 +276,7 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def set_def_MC= save /,//,/*,*/,**,*/*,~,~~,^,^^,`,'`,<,>,>>,:>,&,:,=,\,\\,*\,\*,*\*,@,$,{,},#, - |,||,|<,>|,|<=,|:,:|,_,d,w,z,inside_def_MC; + |,||,|<,>|,|<=,|=,=|,|:,:|,_,d,w,z,inside_def_MC; inside_def_MC:=1; _:=Me; d:=db; w:=wf; z:=zf; tertiarydef a=b == change_bond(a,b) enddef; @@ -275,7 +294,9 @@ def set_def_MC= def \\ == \~dm enddef; def *\ == \~wf enddef; def \* == \~zf enddef; def *\* == \~wv enddef; def |: == (_push,0) enddef; def :| == (_pop,0) enddef; def |< == (_push,1) enddef; def >| == (_pop,1) enddef; - def |<=primary n == ``n,(_push,1) enddef; + def |<=primary n == ``n,(_push,0) enddef; + def |=primary n == (_push,0),``n enddef; + def =| == (_pop,0) enddef; def | == (_push,2) enddef; def || == (_pop,2) enddef; def /secondary n == (_postA,n) enddef; def //secondary n == (_postB,n) enddef; def */secondary n == (_postC,n) enddef; def /*secondary n == (_postD,n) enddef; @@ -333,13 +354,13 @@ vardef '''(text TXT)= sub_int %------- Retern value ------- enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def FR(expr a,b) = +def fuse_ring(expr a,b) = PA(_jp_bond,a) PA(_rot_ang,180) PA(_get_len,a) PA(_push,0) PA(_chg_len,_ring_len) for i==1 upto b-2:: PA(_mk_bond,360 DIV b) endfor PA(_pop,0) if a>=1:: PA(_cyc_eB,0) elseif a>=-999:: PA(_cyc_eB,a-b+2) else:: PA(_cyc_eB,a) fi enddef; %------------------------------------------------------------------------------------------------- -def FFR(expr a,b,c) = +def fuse_ring_bonds(expr a,b,c) = PA(_jp_bond,xpart(a)) PA(_rot_ang,180) PA(_push,0) if b==6:: PA(_chg_len,0) for i==1 upto c-1:: PA(_mk_bond,60) endfor elseif b==5:: if c==2:: PA(_chg_len,1.25) PA(_mk_bond,80) @@ -348,7 +369,7 @@ def FFR(expr a,b,c) = PA(_pop,0) if ypart(a)<=0:: PA(_cyc_eB,ypart(a)-c+1) else:: PA(_cyc_eB,ypart(a)) fi enddef; %------------------------------------------------------------------------------------------------- -def FRR(expr a,b,c) = +def fuse_ring_rate(expr a,b,c) = PA(_jp_bond,a) PA(_rot_ang,180) PA(_push,0) PA(_chg_len,c DIV 10) if b==5:: PA(_mk_bond,72-((c-9) MUL 1.5)) PA(_mk_bond,72+(c-9)) PA(_mk_bond,72+(c-9)) elseif b==6:: PA(_mk_bond,60-(c-8)) for i==1 upto 3:: PA(_mk_bond,60+((c-8) DIV 2)) endfor @@ -365,16 +386,16 @@ vardef change_bond(expr a,b) = if known b:: if numeric b:: if (b>=si)and(b<=bd_):: if b==dl:: PP(a,_dl) else:: PX(a)(_set_line,b) fi elseif (b>=?3)and(b<=?20):: - if a>=sub_int_start:: for i==1 upto cntD[a]:: FR(parD[a][i],b-?3+3) endfor - else:: FR(a,b-?3+3) + if a>=sub_int_start:: for i==1 upto cntD[a]:: fuse_ring(parD[a][i],b-?3+3) endfor + else:: fuse_ring(a,b-?3+3) fi - elseif b==Ph1:: FR(a,6) PA(_dl,-2) PA(_dl,-4) - elseif b==Ph2:: FR(a,6) PA(_dl,-1) PA(_dl,-3) PA(_dl,-5) + elseif b==Ph1:: fuse_ring(a,6) PA(_dl,-2) PA(_dl,-4) + elseif b==Ph2:: fuse_ring(a,6) PA(_dl,-1) PA(_dl,-3) PA(_dl,-5) elseif b==_jump_at:: PA(_jp_bond,a) elseif b==_connect_at:: PA(_cyc_sB,a) elseif comD[b][1]==_fuse:: - if comD[b][2]<=6:: FFR(a,parD[b][1],comD[b][2]) - elseif (comD[b][2]>=11)and(comD[b][2]<=15):: FRR(a,parD[b][1],comD[b][2]) + if comD[b][2]<=6:: fuse_ring_bonds(a,parD[b][1],comD[b][2]) + elseif (comD[b][2]>=11)and(comD[b][2]<=15):: fuse_ring_rate(a,parD[b][1],comD[b][2]) fi fi elseif color b:: color_list[incr cntC]:=b; PX(a)(_set_colorB,cntC) @@ -443,10 +464,12 @@ def ext_setup= labeloffset:=3bp; save em; em=defaultscale*defaultsize; - if (defaultfont="draw")or(f_MP=0)or(sw_label_emu=1): + if (f_MP=0)or(sw_label_emu=1): save label,dotlabel; - def label = label_emu enddef; + def label = label_emu enddef; def dotlabel = dotlabel_emu enddef; + else: + defaultfont:="uhvr8r"; fi if (sw_arrow=0)or(f_MP=0): save drawarrow,drawdblarrow; @@ -455,24 +478,7 @@ def ext_setup= fi enddef; %-------------------------------------------------------------------------------------------------- -def EXT(text TXT)= - begingroup - save w,h,wd,ht,n,p,am,aw; - pair p[]; - ext_setup; - w:=xpart(fsize); - h:=ypart(fsize); - w0:=w-2margin_lr; - h0:=h-2margin_tb; - p0:=(margin_lr,margin_tb); - aw:=atom_wd; - n:=cntM; - for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor - TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1; - endgroup; -enddef; -%-------------------------------------------------------------------------------------------------- -def ext(text TXT)= +def add_mol(text TXT)= begingroup save w,h,n,l,p,am,aw,A,B; numeric A[]dir,B[]dir; @@ -489,6 +495,23 @@ def ext(text TXT)= endgroup; enddef; %-------------------------------------------------------------------------------------------------- +def ext_font(text TXT)= + begingroup + save w,h,wd,ht,n,p,am,aw; + pair p[]; + ext_setup; + w:=xpart(fsize); + h:=ypart(fsize); + w0:=w-2margin_lr; + h0:=h-2margin_tb; + p0:=(margin_lr,margin_tb); + aw:=atom_wd; + n:=cntM; + for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor + TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1; + endgroup; +enddef; +%-------------------------------------------------------------------------------------------------- vardef label_emu@#(expr STR,POS) = %% modified 'thelabel@#(expr s,z)' of plain.mp save oft,fx,fy,wds,sC,bA; pair oft,oft.lft,oft.rt,oft.top,oft.bot,oft.ulft,oft.llft,oft.urt,oft.lrt; @@ -706,7 +729,7 @@ def MC(text TXT)= mol_stru[cntM]:=currentpicture; clearit; endgroup; - if ((sw_aux_out=1)or(sw_rep_out=1)or(sw_mol_out>=1))and(f_MP=1): proc_calc_out; fi + if ((sw_aux_out=1)or(sw_rep_out=1)or(sw_mol_out>=1)or(sw_calc=1))and(f_MP=1): proc_calc; fi %----------------------------------------------------------------------------------------------- %%%% message "count of usr ="& decimal(sub_usr) &" "& decimal(sub_usr-sub_usr_start); %%%% message "count of int ="& decimal(sub_int) &" "& decimal(sub_int-sub_int_start); @@ -1164,7 +1187,7 @@ OCOMe:=OCO!:='(O,!,//O,!); NMeMe:=NMe!:='(N!,!); NHCOMe:=NHCO!:='(NH,!,//O,!); NHiPr:=NHMe!:='(NH,!,iPr); NHtBu:='(NH,!,tBu); NHMe:=NH!:='(NH,!); NHEt:=NH!2:='(NH,!x2); !NH!:='(!,NH,!); !CO!:='(!,//O,!); !OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !OMe:=!O!:='(!,OMe); !COOH:='(!,COOH); !CH3:='(!,CH3); !CN:='(!,CN); !iPr:=!Me!:='(!,iPr); !tBu:='(!,tBu); !Ph:='(!,Ph); -!CHO:='(!,CHO); !NO2:='(!,NO2); +!CHO:='(!,CHO); !NO2:='(!,NO2); !Cl:='(!,Cl); !F:='(!,F); !?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); CF2:='(/F,60,F); CCl2:='(/Cl,60,Cl); CBr2:='(/Br,60,Br); CF3:='(/F,/F^60,60,F); CCl3:='(/Cl,/Cl^60,60,Cl); CBr3:='(/Br,/Br^60,60,Br); %================================================================================================== @@ -1383,22 +1406,13 @@ STb("SH")("S","H"); STb("CHO")("C","H","O"); STb("N{O_2_}")("N","O","O"); STb("N{H_2_}")("N","H","H"); STb("S{O_3_}")("S","O","O","O"); STb("COOH")("C","O","O","H"); STb("C{H_3_}")("C","H","H","H"); STb("C{F_3_}")("C","F","F","F"); %================================================================================================== -def proc_calc_out= +def proc_calc= begingroup save warning_cnt,MWp,knownA,bondC,tmp_wtp,bond_cnt,cnt_hide_H; numeric sumA[],bondC[],hideH[]; - string sumA,s_tag,s_var; - inf_NO:=inf_EN:=inf_JN:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:=inf_MW:=""; - cal_MW:=cal_MW_str:=cal_FM:=""; cnt_hide_H:=warning_cnt:=MW_num:=MI_num:=MWp:=0; + string sumA; + cnt_hide_H:=warning_cnt:=num_MW:=num_MI:=MWp:=0; %------------------------------------------------------------------------------------------ - for j=1 upto inf_num: - nA:=0; for i=0 upto length(info[j]): if pic_c(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]; - if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi - fi - endfor for i=1 upto tbl_cnt: sumA[i]:=0; endfor for i=1 upto cntA: knownA:=bond_cnt:=0; @@ -1442,14 +1456,14 @@ def proc_calc_out= nA:=tbl_atom_wt[i]/100*sumA[i]; MWp:=MWp+nA; if (MWp<40)and(nA<40): - MW_num:= MW_num+tbl_atom_wt[i]*sumA[i]; - MI_num:= MI_num+tbl_atom_mi[i]*sumA[i]; + 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&stripP(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi; fi endfor - cal_MI:=substring (0,10) of decimal(MI_num); - cal_MW:=substring (0,8) of decimal(MW_num); + cal_MI:=substring (0,10) of decimal(num_MI); + cal_MW:=substring (0,8) of decimal(num_MW); if sw_aux_out=1: proc_auxfile_out; fi if sw_rep_out=1: proc_report_out; fi if sw_mol_out>=1: proc_mol_out; fi @@ -1529,7 +1543,7 @@ def proc_report_out= fixed_r(12)(cal_MW_str)&"["&fixed_r(12)(cal_MI_str)&"]"; printf "------------------------------------------------------------------"; printf " Weight Calc: " &cal_MW_str &" / Input: " - if inf_MW<>"": &inf_MW &" / weight gap= " &decimal(MW_num-scantokens(inf_MW)) fi; + if inf_MW<>"": &inf_MW &" / weight gap= " &decimal(num_MW-scantokens(inf_MW)) fi; printf " Fomula Calc: "&cal_FM&" / Input: " if inf_FM<>"": &inf_FM&" / "& iif(inf_FM=cal_FM,"MACTCH","NOT MACTCH") fi; printf "=================================================================="; -- cgit v1.2.3