summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/epsincl/epsincl.awk
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/epsincl/epsincl.awk')
-rw-r--r--Master/texmf-dist/doc/metapost/epsincl/epsincl.awk176
1 files changed, 176 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/epsincl/epsincl.awk b/Master/texmf-dist/doc/metapost/epsincl/epsincl.awk
new file mode 100644
index 00000000000..2c394da7ac9
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/epsincl/epsincl.awk
@@ -0,0 +1,176 @@
+# made in BOP s.c., bop@bop.com.pl; public domain software
+# history: 20.08.1999: ver. 0.1, pre-release
+# 05.01.2000: ver. 0.2, first release
+BEGIN {
+ hd["0"]=0; hd["1"]=1; hd["2"]=2; hd["3"]=3; hd["4"]=4
+ hd["5"]=5; hd["6"]=6; hd["7"]=7; hd["8"]=8; hd["9"]=9
+ hd["a"]=hd["A"]=10; hd["b"]=hd["B"]=11; hd["c"]=hd["C"]=12
+ hd["d"]=hd["D"]=13; hd["e"]=hd["E"]=14; hd["f"]=hd["F"]=15
+ #
+ hb["0"]="0000"; hb["1"]="0001"; hb["2"]="0010"; hb["3"]="0011"
+ hb["4"]="0100"; hb["5"]="0101"; hb["6"]="0110"; hb["7"]="0111"
+ hb["8"]="1000"; hb["9"]="1001"; hb["a"]="1010"; hb["b"]="1011"
+ hb["c"]="1100"; hb["d"]="1101"; hb["e"]="1110"; hb["f"]="1111"
+ #
+ for (i in hb) bh[hb[i]]=i
+ #
+ hb["A"]="1010"; hb["B"]="1011"; hb["C"]="1100"
+ hb["D"]="1101"; hb["E"]="1110"; hb["F"]="1111"
+ #
+ comments=1
+}
+
+/^[^%]/ && (comments==1) {comments=0; flush_prolog()}
+
+comments==1 {process_prolog()}
+
+(l==7) {l=0}
+
+(l==6) {
+ if ($0~/ *closepath/) {l=7; IncludeEPS(Anum)} else l=-6
+}
+
+(l==5) {
+ if (is_lineto()) {l=6}
+ else if (is_curveto()) {l=6}
+ else if ($0~/ *closepath/) {l=7; IncludeEPS(Anum)}
+ else l=-5
+}
+
+(l==4) {
+ if (is_lineto()) {l=5; Aulx=$1; Auly=$2}
+ else if (is_curveto()) {l=5; Aulx=$5; Auly=$6}
+ else l=-4
+}
+
+(l==3) {
+ if (is_lineto()) {l=4; Aurx=$1; Aury=$2}
+ else if (is_curveto()) {l=4; Aurx=$5; Aury=$6}
+ else l=-3
+}
+
+(l==2) {
+ if (is_lineto()) {l=3; Adrx=$1; Adry=$2}
+ else if (is_curveto()) {l=3; Adrx=$5; Adry=$6}
+ else l=-2
+}
+
+(l==1) {
+ if ($0~/^newpath -?[0-9\.]+ -?[0-9\.]+ moveto$/) {
+ l=2
+ Adlx=$2; Adly=$3
+ } else l=-1
+}
+
+(l<0) {
+ print "Something strange in EPS colour (" (-l) ")" > "CON"
+ print NR, is_lineto(), is_curveto() > "CON"
+ print $0 > "CON"
+ exit
+ l=0
+}
+
+/setrgbcolor$/ && (n>0) && (comments==0) {
+ for (i in Ename)
+ if ((Ecolr[i]==$1) && (Ecolg[i]==$2) && (Ecolb[i]==$3)) {
+ Anum=i; l=1
+ }
+}
+
+(l==0) && (comments==0) {gsub(/fshow/, "nshow"); print}
+
+function hexval(x) {return hd[substr(x,1,1)]*16+hd[substr(x,2,1)]}
+
+function process_prolog(){
+ if (/^%\*Font:/) {
+ f_ch[$2 "\001" $4]=fix_chars(f_ch[$2 "\001" $4],$5)
+ } else
+ if (/^%EPS/) {
+ Ecolr[++n]=$2+0; Ecolg[n]=$3+0; Ecolb[n]=$4+0
+ Ename[n]=$5 ""
+ Ebbl[n]=$6+0; Ebbd[n]=$7+0; Ebbr[n]=$8+0; Ebbu[n]=$9+0
+ } else
+ prolog[++prolog[0]]=$0
+}
+
+function flush_prolog( j,l){
+ for (l=1; l<=prolog[0]; ++l) {
+ if (prolog[l]~/^%%EndProlog/) j=flush_fonts();
+ print prolog[l]
+ }
+ if (j>0) print "/nshow {gsave 10 div dup scale 10 fshow grestore} def"
+ if (n>0) print "/MEPSDict 50 dict def"
+}
+
+function flush_fonts( i,j) {
+ j=0
+ for (i in f_ch) {
+ j++
+ split(i,a,"\001")
+ printf("%%*Font: %s 10.0 %s %s\n", a[1], a[2], out_chars(f_ch[i]))
+ }
+ return j
+}
+
+function fix_chars(f,c, a) {
+ split(c,a,":")
+ return mix_chars((f=="" ? sprintf("%0256d", 0) : f), a[2], hexval(a[1]))
+}
+
+function mix_chars(f,c,x, h,k,l) {
+ for (k=1; k<=length(c); k++) {
+ h=hb[substr(c,k,1)]
+ for (l=1; l<=length(h); l++)
+ if (substr(h,l,1)=="1") f=substr(f,1,x+4*k+l-5) "1" substr(f,x+4*k+l-3)
+ }
+ return f
+}
+
+function out_chars(f, i,j,k,g) {
+ while ((i<256) && (substr(f,i,1)=="0")) ++i
+ g=""
+ for (j=i; j<=length(f); j+=4) {
+ k=sprintf("%-4s", substr(f,j,4)); gsub(/ /,"0",k); g=g bh[k]
+ }
+ sub (/0+$/,"",g)
+ return sprintf("%02X", (i-1)) ":" g
+}
+
+function is_lineto() {
+ return ($0~/^-?[0-9\.]+ -?[0-9\.]+ lineto$/)
+}
+
+function is_curveto() {
+ return ($0~/^-?[0-9\.]+ -?[0-9\.]+ -?[0-9\.]+ -?[0-9\.]+ -?[0-9\.]+ -?[0-9\.]+ curveto$/)
+}
+
+function IncludeEPS(i, comments, s) {
+ print "%BeginInclude"
+ print "MEPSDict begin /MEPSSave save def gsave"
+ print "count /MEPSocount exch def /MEPSdcount countdictstack def"
+ print "/showpage {} def /erasepage {} def /copypage {} def"
+ print "/letter {} def /note {} def /a4 {} def /legal {} def"
+ printf ("[ %f %f %f %f %f %f ] matrix invertmatrix\n",
+ Ebbr[i]-Ebbl[i], 0, 0, Ebbu[i]-Ebbd[i], Ebbl[i], Ebbd[i])
+ printf ("[ %f %f %f %f %f %f ] matrix concatmatrix\n",
+ Adrx-Adlx, Adry-Adly, Aulx-Adlx, Auly-Adly, Adlx, Adly)
+ print "concat"
+ print "0 setlinecap 0 setlinejoin 10 setmiterlimit [] 0 setdash"
+ print "1 setlinewidth 0 setgray newpath"
+ print "%StartInclude"
+#
+ comments=1
+ while (getline s < Ename[i] >0)
+ if ((s!~/^%[%!\*]/) || (comments==0)) {
+ comments=0; gsub(/fshow/, "nshow", s); print s
+ }
+ close(Ename[i])
+#
+ print "%StopInclude"
+ print "count MEPSocount sub {pop} repeat"
+ print "countdictstack MEPSdcount sub {end} repeat"
+ print "grestore MEPSSave restore end"
+ print "%EndInclude"
+}
+
+