summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-08-30 21:13:16 +0000
committerKarl Berry <karl@freefriends.org>2020-08-30 21:13:16 +0000
commit60f804ac1611688a14b28d3f7e614866d4e66973 (patch)
treefc91376d75f3d621a1c59214c571358912bbab79 /Master/texmf-dist/metapost
parentb3ce6bf1f797b134ca88af1975d9bcfa3a71f162 (diff)
mcf2graph (30aug20)
git-svn-id: svn://tug.org/texlive/trunk@56217 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r--Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf105
1 files changed, 61 insertions, 44 deletions
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;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------