summaryrefslogtreecommitdiff
path: root/graphics/mcf2graph/mcf2graph.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-07-19 03:01:01 +0000
committerNorbert Preining <norbert@preining.info>2021-07-19 03:01:01 +0000
commit38358cf733cc4815df695ae9c5539f8d7deba8e8 (patch)
treea86407ed7930e2c2e120facd12870f78a5922507 /graphics/mcf2graph/mcf2graph.mf
parentba3d555da29f2da7ca04bf225218e22c8d12d7f8 (diff)
CTAN sync 202107190301
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mf')
-rw-r--r--graphics/mcf2graph/mcf2graph.mf58
1 files changed, 42 insertions, 16 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mf b/graphics/mcf2graph/mcf2graph.mf
index 33fec242fe..d248fe014a 100644
--- a/graphics/mcf2graph/mcf2graph.mf
+++ b/graphics/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;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%