From f0b3901f183621b9000493d3ec263c69ac868156 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 5 Apr 2021 03:00:44 +0000 Subject: CTAN sync 202104050300 --- graphics/mcf2graph/mcf2graph.mf | 133 ++++++++++++++++++++++++++++++---------- 1 file changed, 101 insertions(+), 32 deletions(-) (limited to 'graphics/mcf2graph/mcf2graph.mf') diff --git a/graphics/mcf2graph/mcf2graph.mf b/graphics/mcf2graph/mcf2graph.mf index 350a3e973c..2388b2f278 100644 --- a/graphics/mcf2graph/mcf2graph.mf +++ b/graphics/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.61 Copyright (c) 2013-2021 Akira Yamaji +% mcf2graph ver 4.62 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, @@ -33,11 +33,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 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.61 2021.03.21"; +message "* This is mcf2graph ver 4.62 2021.04.04"; %------------------------------------------------------------------------------------------------- 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; @@ -46,16 +47,16 @@ 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[],out_file_name,out_file_aux, +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, - inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW,blank_str; + 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:=0; +sw_rep_out:=sw_mol_out:=sw_group_off:=sw_single:=sw_arrow_emu:=sw_file_open:=0; numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; %------------------------------------------------------------------------------------------------- aux_max:=max_inf_num:=20; @@ -102,7 +103,7 @@ if (known green)and(known ahlength): out_file_aux:=jobname&"-info.aux"; out_file_mpc:=jobname&"-mpc.txt"; out_file_rep:=jobname&"-report.txt"; - def out_file_mol= jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol" enddef; + 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) @@ -136,7 +137,7 @@ if (known green)and(known ahlength): fi %----------------------------------------------------------------------------------------- def endchar = endfig enddef; - def printf expr s= write s to out_file_name enddef; + def printf expr s= write s to file_name_output enddef; def # = enddef; vardef totalweight expr a= 0 enddef; def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef; @@ -221,7 +222,7 @@ def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_t %-------------------------------------------------------------------------------------------------- def parameter_list= sw_rep_out,sw_numberA,sw_numberB,sw_mframe,sw_aux_out,sw_expand,sw_mol_out,sw_calc, - sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu, + sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu,sw_file_open, 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, @@ -263,8 +264,10 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def beginfont(text s)= begingroup - save ',f_beginchar,f_ext,blen,ext,add,ang_br,s_fw,s_bw,s_len,at_colon,info,mc; - string info[],mc[],mc; + 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; + numeric at_semicol[]; + string info[],mc[],temps,temps_a,mc,file_name_input,t_tag; %------------------------------------------------------------------------------------------------ def ext=ext_to_font enddef; def add=add_to_molecule enddef; @@ -282,20 +285,22 @@ def beginfont(text s)= for list=s: inf_num:=inf_num+1; info[inf_num]:=list; mc[inf_num]:=""; endfor %------------------------------------------------------------------------------------------------ for j=1 upto inf_num: - at_colon:=0; - for i=1 upto 9: if subc(i,info[j])=":": at_colon:=i; fi exitif at_colon>0; endfor - s_len:=length(info[j]); + at_colon:=scan_char(":",info[j],0,1); if at_colon=1: - s_fw:=0; for k=2 upto s_len: if subc(k,info[j])<>" ": s_fw:=k; fi exitif s_fw>0; endfor - s_bw:=0; for k=s_len downto 2: if subc(k,info[j])<>" ": s_bw:=k; fi exitif s_bw>0; endfor + n_fw:=scan_char(" ",info[j],1,2); + n_bw:=scan_char(" ",info[j],-1,2); mc_row:=mc_row+1; - mc_indent[mc_row]:=s_fw-2; - mc[mc_row]:=substring (s_fw-1,s_bw) of info[j]; + mc_indent[mc_row]:=n_fw-2; + mc[mc_row]:=substring (n_fw-1,n_bw) of info[j]; mc:=mc&mc[mc_row]; ef at_colon>=1: - s_tag:=substring (0,at_colon-1) of info[j]; - s_var:=substring (at_colon,s_len) of info[j]; - if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi + 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 + else: if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi + fi fi endfor %------------------------------------------------------------------------------------------------ @@ -355,6 +360,65 @@ def endfont= %% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start); %----------------------------------------------------------------------------------------------- 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; + if t="n": n_var:=scantokens(v); fi + forever: + temps:=readfrom file_name_input; + 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 + else: if v=scantokens("inf_"&t): cond:=1; fi + fi + if cond=1: + forever: + temps:=readfrom file_name_input; + exitif subc(1,temps)="-"; + mc_row:=mc_row+1; + n_fw:=scan_char(" ",temps,1,1); + mc_indent[mc_row]:=n_fw-1; + mc[mc_row]:=substring (n_fw-1,length(temps)) of temps; + mc:=mc&mc[mc_row]; + endfor + f_end:=1; + else: + forever: temps:=readfrom file_name_input; 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; + 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; + 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 +enddef; +%-------------------------------------------------------------------------------------------------- +vardef scan_char(expr c,s,d,n)= + save k,n_s; + n_s:=0; + if d=0: for k=n upto length(s): if subc(k,s)=c: n_s:=k; fi exitif n_s>0; endfor + ef d=1: for k=n upto length(s): if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor + ef d=-1: for k=length(s) downto n: if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor + fi + n_s +enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def set_def_MC= save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_def_MC; @@ -1531,7 +1595,7 @@ enddef; %================================================================================================= def proc_auxfile_out= message "["&decimal(char_num)&"]:"&inf_EN; - out_file_name:=out_file_aux; + file_name_output:=out_file_aux; %-------------------------------------------------------------------------------------- if (char_num=1)and(sw_aux_out=2): printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ; @@ -1541,7 +1605,7 @@ def proc_auxfile_out= if i=1: printf "" else: &aux_delimiter fi if (sw_aux_out=1)or(sw_aux_out=3): &tag[i]&":" fi %------------------------------------------- - if tag[i]="F": & jobname + if tag[i]="J": & jobname ef tag[i]="C": & decimal(char_num) ef tag[i]="mw": & cal_MW ef tag[i]="fm": & cal_FM @@ -1576,7 +1640,7 @@ enddef; %------------------------------------------------------------------------------------------------- def proc_report_out= message "["&decimal(char_num)&"]:"&inf_EN; - out_file_name:=out_file_rep; + file_name_output:=out_file_rep; printf "==========================================================================="; printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN; if mc_row>=1: @@ -1640,7 +1704,7 @@ enddef; %================================================================================================= def proc_mol_out= message "["&decimal(char_num)&"]:"&inf_EN; - out_file_name:=out_file_mol; + file_name_output:=file_mol_output; %-V2000--------------------------------------------------------------------------------------- if sw_mol_out=1: printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; @@ -1818,13 +1882,13 @@ vardef check(expr s)= if mc_row>=1: %--------------------------------------------------------------------------------------------- for i=1 upto length(s): - temp_c:=subc(i,s); if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi + temp_c:=subc(i,s); + if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi endfor mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm; %-- argument missing chkeck ---------------------------------------------------------------- cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0; - cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=0; - nA:=f_depth:=0; + cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0; forever: nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1]; %----------------------------------------------------------------------------------------- @@ -1869,16 +1933,21 @@ vardef check(expr s)= if nB<>a_cmm: proc_err(8,nA) fi % a | fi %------------------------------------------------------------------------------------------ - ef nC=a_prn_s: cnt_prn_s:=cnt_prn_s+1; f_depth:=1; + ef nC=a_prn_s: if nD= a_cmm: proc_err(7,nA) fi % ( x + cnt_prn_s:=cnt_prn_s+1; f_depth:=1; if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0; - ef nC=a_brc_s: cnt_brc_s:=cnt_brc_s+1; f_depth:=1; - ef nC=a_brc_e: cnt_brc_e:=cnt_brc_e+1; f_depth:=0; + ef nC=a_brc_s: if nD= a_cmm: proc_err(7,nA) fi % { x + cnt_brc_s:=cnt_brc_s+1; f_depth:=1; + ef nC=a_brc_e: if nD= a_cmm: proc_err(7,nA) fi % } x + cnt_brc_e:=cnt_brc_e+1; f_depth:=0; if nD=a_cln: cnt_chg_atoms:=cnt_chg_atoms+1; ef nD=a_equ: cnt_chg_bonds:=cnt_chg_bonds+1; fi - ef nC=a_brk_s: cnt_brk_s:=cnt_brk_s+1; f_depth:=1; - ef nC=a_brk_e: cnt_brk_e:=cnt_brk_e+1; f_depth:=0; + ef nC=a_brk_s: if nD= a_cmm: proc_err(7,nA) fi % [ x + cnt_brk_s:=cnt_brk_s+1; f_depth:=1; + ef nC=a_brk_e: if nB= a_cmm: proc_err(7,nA) fi % x ] + cnt_brk_e:=cnt_brk_e+1; f_depth:=0; %------------------------------------------------------------------------------------------- fi exitif nA>=char_cnt+1; -- cgit v1.2.3