diff options
author | Karl Berry <karl@freefriends.org> | 2021-04-18 20:19:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-04-18 20:19:06 +0000 |
commit | 2a141a45d1c30aec1e0bfe3ea8bd36e40689c686 (patch) | |
tree | 31894bbd325d3e7958cb430b104443c5a20d50b3 /Master/texmf-dist/metapost | |
parent | 11b705571c5f5ab267a39994b9a717fa284dc38f (diff) |
mcf2graph (18apr21)
git-svn-id: svn://tug.org/texlive/trunk@58904 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r-- | Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf | 284 |
1 files changed, 147 insertions, 137 deletions
diff --git a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf index 2388b2f2780..0c935ab56a1 100644 --- a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf +++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.62 Copyright (c) 2013-2021 Akira Yamaji +% mcf2graph ver 4.63 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, @@ -22,9 +22,8 @@ % 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 outputformat to "eps"(.mps) : mpost FILENAME % Set output first font only : mpost -s bboxmargin=1 FILENAME -% Set outputformat to "eps"(.mps) : mpost -s ahangle=0 FILENAME % Set outputformat to "png" : mpost -s ahangle=1 FILENAME % Set outputformat to "svg" : mpost -s ahangle=2 FILENAME % Set outputformat to "eps" (.eps) : mpost -s ahangle=3 FILENAME @@ -33,12 +32,12 @@ % Set output report : mpost -s ahlength=3 FILENAME % Set output MOL(V2000) : mpost -s ahlength=5 FILENAME % Set output MOL(V3000) : mpost -s ahlength=6 FILENAME -% Set output souce file for metafont : mpost -s ahlength=7 FILENAME +% Set output aux file for metafont : mpost -s ahlength=7 FILENAME % Set to use plain.mp (label,arrow) : mpost -s labeloffset=1 FILENAME % Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracingstats:=1; -message "* This is mcf2graph ver 4.62 2021.04.04"; +message "* This is mcf2graph ver 4.63 2021.04.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; @@ -47,23 +46,22 @@ numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_ com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[], lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[], mc_indent[],cmm_adr[]; -string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,out_file_aux,blank_str,temp_str, - out_file_rep,out_file_mpc,aux_delimiter,atomfont,mpfont,s_tag,s_var,cal_FM,cal_MW,cal_MI, +string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,temps,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; path arrow_path,dottedline_path,line_path,arrow_head; %------------------------------------------------------------------------------------------------- -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:=sw_file_open:=0; +char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=0; +sw_numberA:=sw_numberB:=sw_expand:=sw_fframe:=sw_mframe:=sw_aframe:=sw_trimming:=sw_ext_all:=0; +sw_group_off:=sw_single:=sw_arrow_emu:=sw_output:=0; numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; %------------------------------------------------------------------------------------------------- -aux_max:=max_inf_num:=20; -aux_delimiter:=";"; +aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= " "; for i=1 upto aux_max: tag[i]:=""; endfor -blank_str:= " "; dum:=(-4091,0); +None:=11; Info1:=21; Info2:=22; Report:=31; MOL2k:=41; MOL3k:=42; Mfont:=51; %------------------------------------------------------------------------------------------------- a_prn_s:=ASCII("("); a_prn_e:=ASCII(")"); a_brc_s:=ASCII("{"); a_brc_e:=ASCII("}"); a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("="); @@ -98,35 +96,25 @@ if (known green)and(known ahlength): color color_list[]; prologues:=3; mpfont:="uhvr8r"; - %----------------------------------------------------------------------------------------- atomfont:=defaultfont:=""; - out_file_aux:=jobname&"-info.aux"; - out_file_mpc:=jobname&"-mpc.txt"; - out_file_rep:=jobname&"-report.txt"; - def file_mol_output= 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=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) - elseif ahangle=15: outputformat:="png"; hppp:=vppp:=0.03; % png format(2400dpi) + elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi) elseif ahangle=2: outputformat:="svg"; % svg format elseif ahangle=3: outputformat:="eps"; % eps format(.eps) + elseif ahangle=45: outputformat:="eps"; % eps format(.eps) fi %--default ahlength=4--------------------------------------------------------------------- - if ahlength=1: sw_aux_out:=1; bboxmargin:=0; % output aux file - elseif ahlength=2: sw_aux_out:=2; bboxmargin:=0; % output aux file(fixed mode) - elseif ahlength=3: sw_rep_out:=1; bboxmargin:=0; % output report - elseif ahlength=5: sw_mol_out:=1; bboxmargin:=0; % output MOL(V2000) - elseif ahlength=6: sw_mol_out:=2; bboxmargin:=0; % output MOL(V3000) + if ahlength=1: sw_output:=Info1; % output aux file + elseif ahlength=2: sw_output:=Info2; % output aux file(fixed mode) + elseif ahlength=3: sw_output:=Report; % output report + elseif ahlength=5: sw_output:=MOL2k; % output MOL(V2000) + elseif ahlength=6: sw_output:=MOL3k; % output MOL(V3000) + elseif ahlength=7: sw_output:=Mfont; % output Mfont fi %-- default bboxmargin=2------------------------------------------------------------------ - if bboxmargin=0: def shipit = enddef; % No image file - elseif bboxmargin=1: proc_end:=1; % output first font only - elseif bboxmargin=3: def shipit = enddef;proc_end:=1; % No image file ,first font only - fi + if bboxmargin=1: proc_end:=1; fi % output first font only %--default labeloffset=3------------------------------------------------------------------ if labeloffset=1: defaultfont:=mpfont; % mpost label elseif labeloffset=2: defaultfont:=atomfont:=mpfont; % mpost label,atom @@ -163,21 +151,20 @@ fi clearit; %-------------------------------------------------------------------------------------------------- if f_MP=1: - if bboxmargin=0: message "* output no image file"; - elseif bboxmargin=1: message "* output first font only"; - elseif bboxmargin=3: message "* no image,first only"; - fi + if bboxmargin=1: message "* output first font only"; fi message "* jobname="&jobname; message "* numbersystem="&numbersystem; - if ahlength=1: message "* output aux file"; - message "* out_file_aux="&out_file_aux; - message "* aux_delimiter="&aux_delimiter; - elseif ahlength=2: message "* output report file"; - message "* out_file_rep="&out_file_rep; - elseif ahlength=5: message "* output MOL file(V2000)"; - message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; - elseif ahlength=6: message "* output MOL file(V3000)"; - message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; + if ahlength=1: message "* output info file"; + message "* file name="&jobname&"-info.aux"; + message "* info delimiter="&aux_delimiter; + ef ahlength=2: message "* output report file"; + message "* file name="jobname&"-report.txt"; + ef ahlength=5: message "* output MOL file(V2000)"; + message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; + ef ahlength=6: message "* output MOL file(V3000)"; + message "* "&jobname&"-nnn-"&"inf_EN"&".mol"; + ef ahlength=7: message "* output mf file"; + message "* mf file name="&jobname&"-mf.aux"; fi message "* outputformat="&outputformat; if outputformat="png": message "* hppp="&decimal(hppp)&"/vppp="&decimal(vppp); fi @@ -221,8 +208,8 @@ def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_t 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_file_open, + sw_numberA,sw_numberB,sw_mframe,sw_expand,sw_output, + sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu, ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond, ratio_hash_black,ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom, lonepairdiam,lonepairspace,blength,offset_atom,offset_wedge,max_blength,offset_hash_gap, @@ -265,23 +252,23 @@ enddef; def beginfont(text s)= begingroup save ',f_beginchar,f_ext,blen,ext,add,ang_br,n_fw,n_bw,at_colon,at_semicol,info,mc,temps, - file_name_input,temps_a,t_tag; + file_name_input,t_tag,f_close; numeric at_semicol[]; - string info[],mc[],temps,temps_a,mc,file_name_input,t_tag; + string info[],mc[],temps,mc,file_name_input,t_tag; %------------------------------------------------------------------------------------------------ def ext=ext_to_font enddef; def add=add_to_molecule enddef; def '=read_ud enddef; %------------------------------------------------------------------------------------------------ inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:="-"; - mc:=cal_MW:=cal_MI:=cal_FM:=""; + mc:=t_tag:=file_name_input:=cal_MW:=cal_MI:=cal_FM:=""; %------------------------------------------------------------------------------------------------ parts_cnt:=parts_usr_start; parts_int:=parts_int_start; %------------------------------------------------------------------------------------------------ char_num:=char_num+1; store_par(parameter_list); - f_ext:=cntM:=mc_row:=inf_num:=0; + f_ext:=cntM:=mc_row:=inf_num:=f_EOF:=0; f_close:=1; for list=s: inf_num:=inf_num+1; info[inf_num]:=list; mc[inf_num]:=""; endfor %------------------------------------------------------------------------------------------------ for j=1 upto inf_num: @@ -296,9 +283,10 @@ def beginfont(text s)= ef at_colon>=1: s_tag:=substring (0,at_colon-1) of info[j]; s_var:=substring (at_colon,length(info[j])) of info[j]; - if s_tag="f": if f_MP=1: file_name_input:=s_var&".mcf"; fi - ef s_tag="t": if f_MP=1: t_tag:=s_var; fi - ef s_tag="v": if f_MP=1: nA:=extract_data(t_tag,s_var); fi + if s_tag="f": if f_MP=1: file_name_input:=s_var&".mcf"; fi + ef s_tag="f+": if f_MP=1: file_name_input:=s_var&".mcf"; f_close:=0; fi + ef s_tag="t": if f_MP=1: t_tag:=s_var; fi + ef s_tag="v": if f_MP=1: pickup_data_unit(t_tag,s_var); fi else: if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi fi fi @@ -308,77 +296,77 @@ def beginfont(text s)= enddef; %================================================================================================== def endfont= - 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); + if (sw_output=0)or(sw_output=None): + 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; + if (sw_fframe<>1)and(sw_fframe<>3): draw_corner((0,0),w,h,0.05bp); fi + fi + if (sw_fframe=1)or(sw_fframe=3): draw_frame((0,0),w,h,thickness_fframe); fi + if (sw_fframe=2)or(sw_fframe=3): + draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_fframe); + fi 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); + 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 + %----------------------------------------------------------------------------------------- + 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 thickness_fframe; 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; - if (sw_fframe<>1)and(sw_fframe<>3): draw_corner((0,0),w,h,0.05bp); fi - fi - if (sw_fframe=1)or(sw_fframe=3): draw_frame((0,0),w,h,thickness_fframe); fi - if (sw_fframe=2)or(sw_fframe=3): - draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_fframe); - 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 %----------------------------------------------------------------------------------------- - 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 thickness_fframe; + endchar; + clearit; + %----------------------------------------------------------------------------------------------- + %% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start); + %% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start); + %----------------------------------------------------------------------------------------------- fi - %----------------------------------------------------------------------------------------- - endchar; - clearit; restore_par(parameter_list); - endgroup; if proc_end=1: scantokens("bye"); fi - %----------------------------------------------------------------------------------------------- -%% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start); -%% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start); - %----------------------------------------------------------------------------------------------- + endgroup; enddef; %------------------------------------------------------------------------------------------------- -vardef extract_data(expr t,v)= - save data_cnt,f_end,semicol_cnt,cond,n_var; - f_end:=data_cnt:=semicol_cnt:=cond:=at_semicol[0]:=0; +def pickup_data_unit(expr t,v)= + begingroup + save data_unit_cnt,f_end,semicol_cnt,cond,n_var; + f_end:=data_unit_cnt:=semicol_cnt:=cond:=at_semicol[0]:=inf_num:=0; if t="n": n_var:=scantokens(v); fi forever: - temps:=readfrom file_name_input; - exitif temps=EOF; + temps:=readfrom file_name_input; if temps=EOF: f_EOF:=1; fi exitif temps=EOF; if subc(1,temps)="%": - ef subc(1,temps)="*": f_end:=1; ef subc(1,temps)="+": - data_cnt:=data_cnt+1; - if t="n": if n_var=0: cond:=1; else: if data_cnt=n_var: cond:=1; fi fi + data_unit_cnt:=data_unit_cnt+1; + if v="*": cond:=1; + ef t="n": if data_unit_cnt=n_var: cond:=1; fi else: if v=scantokens("inf_"&t): cond:=1; fi fi if cond=1: forever: - temps:=readfrom file_name_input; - exitif subc(1,temps)="-"; + temps:=readfrom file_name_input; exitif temps=EOF; exitif subc(1,temps)="+"; mc_row:=mc_row+1; n_fw:=scan_char(" ",temps,1,1); mc_indent[mc_row]:=n_fw-1; @@ -387,27 +375,30 @@ vardef extract_data(expr t,v)= endfor f_end:=1; else: - forever: temps:=readfrom file_name_input; exitif subc(1,temps)="-"; endfor + forever: + temps:=readfrom file_name_input; exitif temps=EOF; exitif subc(1,temps)="+"; + endfor fi else: semicol_cnt:=0; for i=1 upto length(temps): if subc(i,temps)=";": semicol_cnt:=semicol_cnt+1; at_semicol[semicol_cnt]:=i; fi endfor - for i=1 upto semicol_cnt+1: - if i<=semicol_cnt: temps_a:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; - else: temps_a:=substring (at_semicol[semicol_cnt],length(temps)) of temps; + inf_num:=semicol_cnt+1; + for i=1 upto inf_num: + if i<=semicol_cnt: info[i]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; + else: info[i]:=substring (at_semicol[semicol_cnt],length(temps)) of temps; fi - at_colon:=scan_char(":",temps_a,0,1); - s_tag:=substring (0,at_colon-1) of temps_a; - s_var:=substring (at_colon,length(temps_a)) of temps_a; + at_colon:=scan_char(":",info[i],0,1); + s_tag:=substring (0,at_colon-1) of info[i]; + s_var:=substring (at_colon,length(info[i])) of info[i]; if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi endfor fi exitif f_end=1; endfor - if sw_file_open=0: closefrom file_name_input; fi - data_cnt + if f_close=1: closefrom file_name_input; fi + endgroup; enddef; %-------------------------------------------------------------------------------------------------- vardef scan_char(expr c,s,d,n)= @@ -845,7 +836,9 @@ def MC(text TXT)= pair temp_p; %----------------------------------------------------------------------------------------------- if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi - if (sw_expand=1)or(sw_mol_out>=1): expand_set; crR:=1; else: crR:=-ratio_chain_ring; fi + if (sw_expand=1)or(sw_output=MOL2k)or(sw_output=MOL3k): + expand_set; crR:=1; else: crR:=-ratio_chain_ring; + fi cntA:=cntB:=cnt_group:=cntC:=0; strD[0]:="C"; str_cnt:=2000; %----------------------------------------------------------------------------------------------- font_wd:=xpart(fsize); @@ -944,7 +937,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)or(sw_calc=1)): proc_calc; fi + if cntM=1: if (sw_output>=None)and(sw_output<=Mfont): proc_output(sw_output); fi fi enddef; %------------------------------------------------------------------------------------------------- def add_group= @@ -1516,10 +1509,10 @@ vardef erase_brace(expr ATOM)= fi enddef; %================================================================================================= -def proc_calc= +def proc_output(expr n)= begingroup - save warning_cnt,knownA,bondC,tmp_wtp,bond_cnt,hideH_cnt; - hideH_cnt:=warning_cnt:=num_MW:=num_MI:=cen_MW:=cen_MI:=tbl_atom_max:=0; + save knownA,bondC,tmp_wtp,bond_cnt,warning_cnt,hideH_cnt; + num_MW:=num_MI:=cen_MW:=cen_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0; nE:=parts_emb_start; for i=1 upto tbl_atom_end: sumA[i]:=0; endfor for i=1 upto cntA: @@ -1587,23 +1580,28 @@ def proc_calc= else: num_MW:=cen_MW; cal_MW:=fdr(6)(cen_MW)&"*100"; fi if cen_MI<40: cal_MI:=substring (0,10) of decimal(num_MI); else: num_MI:=cen_MI; cal_MI:=fdr(8)(cen_MI)&"*100"; fi - if (sw_aux_out>=1)and(cntM=1): proc_auxfile_out; fi - if (sw_rep_out=1)and(cntM=1): proc_report_out; fi - if (sw_mol_out>=1)and(cntM=1): proc_mol_out; fi + %------------------------------------------------------------------------------------- + if n=Report: proc_report_out(0); + ef n=Info1: proc_auxfile_out(1); + ef n=Info2: proc_auxfile_out(2); + ef n=MOL2k: proc_mol_out(1); + ef n=MOL3k: proc_mol_out(2); + ef n=Mfont: proc_mf_out(0); + fi endgroup enddef; %================================================================================================= -def proc_auxfile_out= +def proc_auxfile_out(expr n)= message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=out_file_aux; + file_name_output:=jobname&"-info.aux"; %-------------------------------------------------------------------------------------- - if (char_num=1)and(sw_aux_out=2): + if (char_num=1)and(n=2): printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ; fi %-------------------------------------------------------------------------------------- for i=1 upto aux_max: exitif tag[i]=""; if i=1: printf "" else: &aux_delimiter fi - if (sw_aux_out=1)or(sw_aux_out=3): &tag[i]&":" fi + if n=1: &tag[i]&":" fi %------------------------------------------- if tag[i]="J": & jobname ef tag[i]="C": & decimal(char_num) @@ -1630,7 +1628,6 @@ def proc_auxfile_out= 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 enddef; %================================================================================================= vardef round_auto(expr n)= @@ -1638,11 +1635,11 @@ vardef round_auto(expr n)= elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi enddef; %------------------------------------------------------------------------------------------------- -def proc_report_out= +def proc_report_out(expr n)= message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=out_file_rep; + file_name_output:=jobname&"-report.txt"; printf "==========================================================================="; - printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN; + printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input; if mc_row>=1: printf "---------------------------------------------------------------------------"; for i=1 upto mc_row: @@ -1702,11 +1699,11 @@ def proc_report_out= printf "==========================================================================="; enddef; %================================================================================================= -def proc_mol_out= +def proc_mol_out(expr n)= message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=file_mol_output; + file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol"; %-V2000--------------------------------------------------------------------------------------- - if sw_mol_out=1: + if n=1: 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: @@ -1721,7 +1718,7 @@ def proc_mol_out= endfor printf "M END"; %-V3000--------------------------------------------------------------------------------------- - elseif sw_mol_out=2: + elseif n=2: printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; printf " 0 0 0 0 0 999 V3000"; printf "M V30 BEGIN CTAB"; @@ -1743,6 +1740,19 @@ def proc_mol_out= printf "M V30 END BOND"; printf "M V30 END CTAB"; printf "M END"; fi enddef; +%================================================================================================= +def proc_mf_out(expr n)= + message "["&decimal(char_num)&"]:"&inf_EN; + file_name_output:=jobname&"-mf.aux"; + printf "beginfont(" + for i=1 upto inf_num: &ditto&info[i]&ditto&"," endfor ; + for i=1 upto mc_row: + printf ditto&": " if i=mc_row: &mc[i]&ditto&")"; else: &mc[i]&ditto&","; fi + endfor + printf "if check(mc)=0: MC(scantokens(mc)) fi"; + printf "endfont"; + if n=1: printf "%-------------------------------------------------------------------------"; fi +enddef; %------------------------------------------------------------------------------------------------- vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef; %------------------------------------------------------------------------------------------------- |