blob: 8af9f2d8a7b44af1f392a6f006db9e26349e07b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
%D \module
%D [ file=luatex-mplib,
%D version=2009.12.01,
%D title=\LUATEX\ Support Macros,
%D subtitle=\METAPOST\ to \PDF\ conversion,
%D author=Taco Hoekwater \& Hans Hagen,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%D This is the companion to the \LUA\ module \type {supp-mpl.lua}. Further
%D embedding is up to others. A simple example of usage in plain \TEX\ is:
%D
%D \starttyping
%D \pdfoutput=1
%D
%D \input luatex-mplib.tex
%D
%D \setmplibformat{plain}
%D
%D \mplibcode
%D beginfig(1);
%D draw fullcircle
%D scaled 10cm
%D withcolor red
%D withpen pencircle xscaled 4mm yscaled 2mm rotated 30 ;
%D endfig;
%D \endmplibcode
%D
%D \end
%D \stoptyping
\def\setmplibformat#1{\def\mplibformat{#1}}
\def\setupmplibcatcodes
{\catcode`\{=12 % could be optional .. not really needed
\catcode`\}=12 % could be optional .. not really needed
\catcode`\#=12
\catcode`\^=12
\catcode`\~=12
\catcode`\_=12
\catcode`\%=12
\catcode`\&=12
\catcode`\$=12 }
\def\mplibcode
{\bgroup
\setupmplibcatcodes
\domplibcode}
\long\def\domplibcode#1\endmplibcode
{\egroup
\directlua{metapost.process('\mplibformat',[[#1]])}}
%D We default to \type {plain} \METAPOST:
\def\mplibformat{plain}
%D We use a dedicated scratchbox:
\ifx\mplibscratchbox\undefined \newbox\mplibscratchbox \fi
%D Now load the needed \LUA\ code.
\directlua{dofile(kpse.find_file('luatex-mplib.lua'))}
%D The following code takes care of encapsulating the literals:
\def\startMPLIBtoPDF#1#2#3#4%
{\hbox\bgroup
\xdef\MPllx{#1}\xdef\MPlly{#2}%
\xdef\MPurx{#3}\xdef\MPury{#4}%
\xdef\MPwidth{\the\dimexpr#3bp-#1bp\relax}%
\xdef\MPheight{\the\dimexpr#4bp-#2bp\relax}%
\parskip0pt%
\leftskip0pt%
\parindent0pt%
\everypar{}%
\setbox\mplibscratchbox\vbox\bgroup
\noindent}
\def\stopMPLIBtoPDF
{\egroup
\setbox\mplibscratchbox\hbox
{\hskip-\MPllx bp%
\raise-\MPlly bp%
\box\mplibscratchbox}%
\setbox\mplibscratchbox\vbox to \MPheight
{\vfill
\hsize\MPwidth
\wd\mplibscratchbox0pt%
\ht\mplibscratchbox0pt%
\dp\mplibscratchbox0pt%
\box\mplibscratchbox}%
\wd\mplibscratchbox\MPwidth
\ht\mplibscratchbox\MPheight
\box\mplibscratchbox
\egroup}
%D The body of picture, except for text items, is taken care of by:
\ifnum\pdfoutput>0
\let\MPLIBtoPDF\pdfliteral
\else
\def\MPLIBtoPDF#1{\special{pdf:literal direct #1}} % not ok yet
\fi
%D Text items have a special handler:
\def\MPLIBtextext#1#2#3#4#5%
{\begingroup
\setbox\mplibscratchbox\hbox
{\font\temp=#1 at #2bp%
\temp
#3}%
\setbox\mplibscratchbox\hbox
{\hskip#4 bp%
\raise#5 bp%
\box\mplibscratchbox}%
\wd\mplibscratchbox0pt%
\ht\mplibscratchbox0pt%
\dp\mplibscratchbox0pt%
\box\mplibscratchbox
\endgroup}
\endinput
|