From 60f804ac1611688a14b28d3f7e614866d4e66973 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 30 Aug 2020 21:13:16 +0000 Subject: mcf2graph (30aug20) git-svn-id: svn://tug.org/texlive/trunk@56217 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf | 105 +++++++++++++--------- 1 file changed, 61 insertions(+), 44 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 6011d247e68..e28af21d625 100644 --- a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf +++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.51 Copyright (c) 2013-2020 Akira Yamaji +% mcf2graph ver 4.52 Copyright (c) 2013-2020 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, @@ -42,7 +42,7 @@ newinternal com,par,nA,nB,nC,nD,nE,nF,nP; 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[],andA[],and_rot[],chargeA[], com_group[][],par_group[][],cnt_group[],colorA[],colorB[]; -string save_str[],tbl_atom_str[],strD[],var[],tag[],mpc_name[],out_file_name,out_file_aux, +string save_str[],tbl_atom_str[],strD[],tag[],mpc_name[],out_file_name,out_file_aux, out_file_rep,out_file_mpc,aux_delimiter,atomfont,save_atomfont,save_defaultfont; pair save_pair[],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe; picture mol_stru[],save_picture,temp_picture; @@ -55,7 +55,7 @@ numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; %------------------------------------------------------------------------------------------------- aux_max:=max_inf_num:=20; aux_delimiter:=";"; -for i=1 upto aux_max: var[i]:=tag[i]:=""; endfor +for i=1 upto aux_max: tag[i]:=""; endfor %================================================================================================= if (known green)and(known ahlength): f_MP:=1; @@ -126,7 +126,7 @@ fi clearit; %-------------------------------------------------------------------------------------------------- message "---------------------------------------------"; -message "This is mcf2graph ver 4.51 2020.08"; +message "This is mcf2graph ver 4.52 2020.08"; if f_MP=1: if bboxmargin=0: message "output no image file"; elseif bboxmargin=1: message "output first font only"; @@ -254,7 +254,7 @@ def beginfont(text s)= def ext=ext_to_font enddef; def add=add_to_molecule enddef; %------------------------------------------------------------------------------------------------ - inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:=""; + inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:="-"; cal_MW:=cal_MW_str:=cal_MI:=cal_MI_str:=cal_FM:=""; %------------------------------------------------------------------------------------------------ char_num:=char_num+1; @@ -299,7 +299,7 @@ def endfont= 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=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 @@ -909,6 +909,13 @@ def draw_frame(expr PS,LX,LY,PN)= draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN; enddef; %------------------------------------------------------------------------------------------------- +def draw_corner(expr PS,LX,LY,PN)= + draw( 0, 0) shifted PS withpen pencircle scaled PN; + draw(LX, 0) shifted PS withpen pencircle scaled PN; + draw(LX,LY) shifted PS withpen pencircle scaled PN; + draw( 0,LY) shifted PS withpen pencircle scaled PN; +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; @@ -1105,13 +1112,13 @@ def termA= f_term:=1; fi enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- def termB= if f_term=0: if f_bra=0: cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi f_term:=1; fi enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- def proc_cyc(expr n)= add_bond(angle(posA[n]-posBs)-angT); enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- vardef glu_atom(expr NUM)= if numS[NUM]<>0: nE:=angT mod 90; nF:=0.5atom_wd;(iif(nE<45,sind(nE),cosd(nE))*nF)++nF else: 0 fi enddef; @@ -1278,7 +1285,7 @@ COMe:=CO!:='(//O,!); COEt:=CO!2:='(//O,!,!); COPr:=CO!3:='(//O,!,!,!); OCOMe:=OCO!:='(O,!,//O,!); NMeMe:=NMe!:='(N!,!); NMeEt:=NMe!2:='(N!,!,!); NMePr:=NMe!3:='(N!,!,!,!); NHCOMe:=NHCO!:='(NH,!,//O,!); NHiPr:=NHMe!:='(NH,!,iPr); NHtBu:='(NH,!,tBu); NHMe:=NH!:='(NH,!); NHEt:=NH!2:='(NH,!,!); NHPr:=NH!3:='(NH,!,!,!); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- !OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !COMe:=!CO!:='(!,//O,!); !COEt:=!CO!2:='(!,CO!2); !COPr:=!CO!3:='(!,CO!3); !OMe:=!O!:='(!,O!); !OEt:=!O!2:='(!,O!2); !OPr:=!O!3:='(!,O!3); !OiPr:=!OMe!:='(!,OMe!); @@ -1290,29 +1297,29 @@ NHEt:=NH!2:='(NH,!,!); NHPr:=NH!3:='(NH,!,!,!); !CH3:='(!,CH3); !CN:='(!,CN); !iPr:=!Me!:='(!,iPr); !tBu:='(!,tBu); !CHO:='(!,CHO); !NO2:='(!,NO2); !Cl:='(!,Cl); !Br:='(!,Br); !F:='(!,F); !?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); !?7:='(!,?7); !?8:='(!,?8); !Ph:='(!,Ph); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- !2OH:='(!,!,OH); !2COOH:='(!,!,COOH); !2NH2:='(!,!,NH2); !2CN:='(!,!,CN); !2NO2:='(!,!,NO2); !2CH3:='(!,!,CH3); !2CHO:='(!,!,CHO); !2SH:='(!,!SH); !2tBu:='(!,!,tBu); !2Cl:='(!,!,Cl); !2?5:='(!,!,?5); !2?6:='(!,!,?6); !2Ph:='(!,!,Ph); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- 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); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- xCH3:='(/H,/H^60,60,H); xNH:='(N,/H); xNH2:='(N,/H,60,H); xNO2:='(N,//O,60~dm,O); xOH:='(O,!,H); xCHO:='(//O,!,H); xCOOH:='(//O,!,O,!,H); xCN:='(!~tm,N); xSH:='(S,!,H); -%================================================================================================== +%================================================================================================= init_par(parameter_list); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- parts_emb_end:=parts_usr; %%%%% message "parts_emb =" & decimal(parts_emb_start) &" => " & decimal(parts_emb_end); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- def expand_set= CH3:=xCH3; NH:=xNH; NH2:=xNH2; NO2:=xNO2; OH:=xOH; CHO:=xCHO; COOH:=xCOOH; CN:=xCN; SH:=xSH; !CH3:='(!,CH3); !OH:='(!,OH); !NH2:='(!,NH2); !CHO:='(!,CHO); !COOH:='(!,COOH); !CN:='(!,CN); !SH:='(!,SH); !NO2:='(!,NO2); !2CH3:='(!,!CH3); !2OH:='(!,!OH); !2NH2:='(!,!NH2); !2CHO:='(!,!CHO); !2COOH:='(!,!COOH); !2CN:='(!,!CN); !2SH:='(!,!SH); !2NO2:='(!,!NO2); enddef; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def char_size_set(expr WD)(expr HT)(expr STR)= for j=0 upto length(STR)-1: nA:=ASCII(pic_c(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT; @@ -1334,7 +1341,7 @@ char_size_set(.35)( .9)("i"); char_size_set( .5)( .9)("j"); char_size_set(.35)( 1)("!|"); char_size_set( .4)( 1)(".,:;'`^"); -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def draw_char(expr CHR,POS,WD,PEN,NUM)= begingroup save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,ppcs,sbp,sC; @@ -1470,28 +1477,28 @@ 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 bond_check(expr a)(text s)= nF:=0; for list=s: if list=bond_cnt: nF:=1; fi endfor if nF=0: warning("A"&decimal(a)&" ( "&fixed_l(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds"); fi enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- vardef stripP(expr ATOM)= if length(ATOM)=4: substring (1,3) of ATOM elseif length(ATOM)=6: substring (1,2) of ATOM else: ATOM fi enddef; -%================================================================================================== +%================================================================================================= def STa(expr ATOM,WT,MI)= tbl_cnt:=tbl_cnt+1; tbl_atom_str[tbl_cnt]:=ATOM; @@ -1511,7 +1518,7 @@ def STb(expr ATOM)(text TXT)= endfor endfor enddef; -%================================================================================================== +%================================================================================================= tbl_cnt:=0; STa("C" ,12.0107, 12.0000000); STa("H" , 1.00794, 1.00782503223); STa("{Al}",26.9815, 26.98153853); STa("{As}",74.9216, 74.92159457); @@ -1533,12 +1540,12 @@ STa("{S^m^}",32.065, 31.9720711744); STa("{Se}",78.971, 79.9165218); STa("{Si}",28.0855, 27.97692653465); STa("{Sn}",118.71, 119.90220163); STa("{Ti}",47.867, 47.94794198); STa("{Zn}",65.409, 63.92914201); -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- STb("{H_2_}")("H","H"); STb("OH")("O","H"); STb("O{Na}")("O","{Na}"); STb("CN")("C","N"); 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= begingroup save warning_cnt,MWp,knownA,bondC,tmp_wtp,bond_cnt,cnt_hide_H; @@ -1602,7 +1609,7 @@ def proc_calc= if sw_mol_out>=1: proc_mol_out; fi endgroup enddef; -%================================================================================================== +%================================================================================================= def proc_auxfile_out= message "["&decimal(char_num)&"]:"&inf_EN; out_file_name:=out_file_aux; @@ -1613,29 +1620,39 @@ def proc_auxfile_out= %-------------------------------------------------------------------------------------- for i=1 upto aux_max: exitif tag[i]=""; if i=1: printf "" else: &aux_delimiter fi - if sw_aux_out=1: &tag[i]&":" fi - if tag[i]="F": & jobname - elseif tag[i]="C": & decimal(char_num) - elseif tag[i]="mw": & cal_MW - elseif tag[i]="fm": & cal_FM - elseif tag[i]="mi": & cal_MI - elseif tag[i]="w": & decimal(xpart(fsize)) - elseif tag[i]="h": & decimal(ypart(fsize)) - elseif tag[i]="w1": & decimal(mol_wd) - elseif tag[i]="h1": & decimal(mol_ht) - elseif tag[i]="An": & decimal(cntA) - elseif tag[i]="Bn": & decimal(cntB) - else: + if (sw_aux_out=1)or(sw_aux_out=3): &tag[i]&":" fi + if tag[i]="F": & jobname + elseif tag[i]="C": & decimal(char_num) + elseif tag[i]="mw": & cal_MW + elseif tag[i]="fm": & cal_FM + elseif tag[i]="mi": & cal_MI + elseif tag[i]="w": & decimal(xpart(fsize)) + elseif tag[i]="h": & decimal(ypart(fsize)) + elseif tag[i]="w1": & decimal(mol_wd) + elseif tag[i]="h1": & decimal(mol_ht) + elseif tag[i]="An": & decimal(cntA) + elseif tag[i]="Bn": & decimal(cntB) + %------------------------------------------- + elseif tag[i]="NO": & inf_NO + elseif tag[i]="EN": & inf_EN + elseif tag[i]="JN": & inf_JN + elseif tag[i]="MW": & inf_MW + elseif tag[i]="MI": & inf_MI + elseif tag[i]="FM": & inf_FM + elseif tag[i]="CAS": & inf_CAS + elseif tag[i]="USE": & inf_USE + elseif tag[i]="EXA": & inf_EXA + elseif tag[i]="EXB": & inf_EXB fi endfor - if (sw_aux_out=1)or(sw_aux_out=3): for i=1 upto inf_num: &aux_delimiter&info[i] endfor; fi + if sw_aux_out=3: for i=1 upto inf_num: &aux_delimiter&info[i] endfor; fi enddef; -%================================================================================================== +%================================================================================================= vardef round_auto(expr n)= if (n<4) and(n>-4): round(n*1000)/1000 elseif (n<40) and(n>-40): round(n*100)/100 elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- def proc_report_out= message "["&decimal(char_num)&"]:"&inf_EN; out_file_name:=out_file_rep; @@ -1693,7 +1710,7 @@ def proc_report_out= if inf_FM<>"": &inf_FM&" / "& iif(inf_FM=cal_FM,"MACTCH","NOT MACTCH") fi; printf "=================================================================="; enddef; -%================================================================================================== +%================================================================================================= def proc_mol_out= begingroup save chg_cnt,chg_atm,chg_chg,nA,nB; @@ -1765,4 +1782,4 @@ def proc_bond_class(expr n)= else: nA:=1; nB:=0; fi enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- -- cgit v1.2.3