From 9fd0a0bb2a40ac6581d2d04df1393e79f78f1db5 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 30 Sep 2010 21:54:38 +0000
Subject: ltr-* in runtime

git-svn-id: svn://tug.org/texlive/trunk@19953 c570f23f-e606-0410-a88d-b1316a301751
---
 .../tex/generic/lecturer/ltr-graphics.tex          | 644 +++++++++++++++++++++
 1 file changed, 644 insertions(+)
 create mode 100644 Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex

(limited to 'Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex')

diff --git a/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex b/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex
new file mode 100644
index 00000000000..c42ef9f1d26
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex
@@ -0,0 +1,644 @@
+% This file is part of the Lecturer package.
+% Paul Isambert -- July 2010.
+% 
+% COLORS
+% No attributes here. Cool.
+%
+\def\newcolor#1#2{%
+  \ifnextnospace[{\ltr@newcolor{#1}{#2}}{\ltr@newcolor{#1}{#2}[]}%
+  }
+\def\ltr@newcolor#1#2[#3]#4{%
+  \ifcs{ltr@colormodel_#2}  
+       {\xdefcs{ltr@color_user:#1}{%
+          \usecs{ltr@colormodel_#2}#4\ltr@color_end
+          \ifemptystring{#3}{/ltr@opacity_1 gs }{/ltr@opacity_#3 gs }}%
+        \reverse\iffemptystring{#3}{\ltr@create_opacity{#3}}%
+        \xdefcs{ltr@jscolor_user:#1}{\usecs{ltr@jscolormodel_#2}#4\ltr@color_end}%
+        }%
+       {\ltr@error{Unknown color model `#2'. Color `#1' won't be defined}}%
+  }
+\def\ltr@create_opacity#1{%
+  \reverse\iffcs{ltr@opacity_#1}
+    {\immediate\pdfobj{<< /Type/ExtGState /CA #1 /ca #1 >>}%
+    \addgstate{ltr@opacity_#1}{\the\pdflastobj}%
+    \gdefcs{ltr@opacity_#1}{}}%
+  }
+
+\def\ltr@colormodel_grey#1\ltr@color_end{#1 g #1 G }
+\let\ltr@colormodel_gray\ltr@colormodel_grey
+\def\ltr@colormodel_rgb#1\ltr@color_end{#1 rg #1 RG }
+\def\ltr@colormodel_cmyk#1\ltr@color_end{#1 k #1 K }
+%
+\def\ltr@color_use#1{%
+  \ifcs{ltr@color_user:#1}
+       {\usecs{ltr@color_user:#1}}
+       {\ltr@color_analyze#1 0 0 0 0 \ltr@color_end}%
+  }
+\def\ltr@color_analyze#1 {%
+  \ifcs{ltr@color_usemodel:#1}
+       {\usecs{ltr@color_usemodel:#1}}%
+       {\ltr@use_defaultcolor}%
+  }
+%
+\defcs{ltr@color_usemodel:grey}#1 #2\ltr@color_end{#1 g #1 G }
+\letcstocs{ltr@color_usemodel:gray}{ltr@color_usemodel:grey}
+\defcs{ltr@color_usemodel:rgb}#1 #2 #3 #4\ltr@color_end{#1 #2 #3 rg #1 #2 #3 RG }
+\defcs{ltr@color_usemodel:cmyk}#1 #2 #3 #4 #5\ltr@color_end{#1 #2 #3 #4 k #1 #2 #3 #4 K }
+\def\ltr@use_defaultcolor#1\ltr@color_end{1 g 1 G }
+%
+% A simple macro for everybody.
+%
+\long\def\usecolor#1#2{%
+  \pdfcolorstack0 push {\ltr@color_use{#1}}%
+  #2%
+  \pdfcolorstack0 pop%
+  }
+%
+% And the same in JavaScript, just for the background in full screen. Ain't it nice?
+%
+\def\ltr@jscolormodel_grey#1\ltr@color_end{["G",#1]}
+\let\ltr@jscolormodel_gray\ltr@jscolormodel_grey
+\def\ltr@jscolormodel_rgb#1 #2 #3\ltr@color_end{["RGB",#1,#2,#3]}
+\def\ltr@jscolormodel_cmyk#1 #2 #3 #4\ltr@color_end{["CMYK",#1,#2,#3,#4]}
+%
+\def\ltr@jscolor_use#1#2#3{%
+  \ltr@ifattribute #1:#2;
+    {\ifcs{ltr@jscolor_user:\ltr@usevalueor#1:#2;{ltr@novalue}}
+          {\usecs{ltr@jscolor_user:\ltr@usevalue#1:#2;}}
+          {\ltr@passvaluenobraces{\ltr@jscolor_analyze{#3}}#1:#2; \ltr@color_end}}
+    {["G",#3]}%
+  }
+\def\ltr@jscolor_analyze#1#2 {%
+  \ifcs{ltr@jscolor_usemodel:#2}
+       {\usecs{ltr@jscolor_usemodel:#2}}%
+       {\ltr@jsuse_defaultcolor{#1}}%
+  }
+\defcs{ltr@jscolor_usemodel:grey}#1 \ltr@color_end{["G",#1]}
+\letcstocs{ltr@jscolor_usemodel:gray}{ltr@jscolor_usemodel:grey}
+\defcs{ltr@jscolor_usemodel:rgb}#1 #2 #3 \ltr@color_end{["RGB",#1,#2,#3]}
+\defcs{ltr@jscolor_usemodel:cmyk}#1 #2 #3 #4 \ltr@color_end{["CMYK",#1,#2,#3,#4]}
+\def\ltr@jsuse_defaultcolor#1#2\ltr@color_end{["G",#1]}
+
+\ltr@create_opacity{1}
+\newcolor{black}{grey}{0}
+\newcolor{white}{grey}{1}
+\newcolor{red}{rgb}{1 0 0}
+\newcolor{green}{rgb}{0 1 0}
+\newcolor{blue}{rgb}{0 0 1}
+\newcolor{cyan}{cmyk}{1 0 0 0}
+\newcolor{magenta}{cmyk}{0 1 0 0}
+\newcolor{yellow}{cmyk}{0 0 1 0}
+
+%
+%
+%
+%
+% SHADES
+%
+\def\ltr@newshade_do#1#2#3{%
+  \immediate\pdfobj stream attr {
+    /FunctionType 4
+    /Domain [0 1]
+    /Range  [#1]
+    }
+  {{\ltr@usevalueor ltr@inner_shade:speed;1 mul dup #3}}%
+  \edef\ltr@temp{\the\pdflastobj\spacecs}
+  \immediate\pdfobj{
+     <<
+     /ShadingType 2
+     /Coords[0 0 1 0]
+     /Extend [true true]
+     /ColorSpace /Device#2
+     /Function \ltr@temp 0 R
+    >>}
+  \edef\ltr@temp{\the\pdflastobj\spacecs}%
+  \addshading{ltr@shade_\ltr@usevalue ltr@inner_shade:name;}{\ltr@temp}
+  }
+\def\ltr@newshade_trig#1#2{%
+  \ltr@nopt{%
+    \dimexpr(\ltr@nopt{#1pt*71/4068}%
+      \dimexpr(#2\dimexpr(#2\dimexpr(#2\dimexpr(#2pt/72-1pt)\relax+42pt)\relax-840pt)\relax+5040pt)\relax/5040)\relax}%
+  }
+\def\ltr@newshade_sin#1{%
+  \ltr@newshade_trig{#1}{\ltr@nopt{\ltr@nopt{#1pt*71/4068}\dimexpr(#1pt*71/4068)}}%
+  }
+\def\ltr@newshade_cos#1{%
+  \ltr@newshade_trig{\ltr@nopt{90pt-#1pt}}{\ltr@nopt{\ltr@nopt{\ltr@nopt{90pt-#1pt}pt*71/4068}\dimexpr(\ltr@nopt{90pt-#1pt}pt*71/4068)}}%
+  }
+\def\ltr@newshade_removepoint#1.#2#3#4#5\ltr@end{#1#2#3#4}
+\def\ltr@newshade_removesign-{}%
+\def\ltr@newshade_doscale#1{%
+  \xdefcs{ltr@shade_user:\ltr@usevalue ltr@inner_shade:name;_scale}{\ltr@nopt{1000pt/\expandafter\ltr@newshade_removepoint#1000\ltr@end}}%
+  }
+\defactiveparameter ltr@inner_shade {%
+  \ltr@todim_loop{#1}{width height }%
+  \ifdim\ltr@usevalueor #1:angle;{90}pt>90pt
+    \ltr@error{A shade's angle can't be more than 90 [shade `\ltr@usevalue #1:name;']}%
+    \ltr@esetattribute #1:angle; = 90
+  \else
+    \ifdim\ltr@usevalueor #1:angle;{90}pt<-90pt
+      \ltr@error{A shade's angle can't be less than -90 [shade `\ltr@usevalue #1:name;']}%
+      \ltr@esetattribute #1:angle; = -90
+    \fi
+  \fi
+  \ifdim\ltr@usevalueor #1:angle;{90}pt<0pt
+    \ltr@esetattribute #1:angle; = \ltr@passvaluenobraces\ltr@newshade_removesign#1:angle;
+    \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{reversed}%
+  \else
+    \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{normal}%
+  \fi
+  \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_sin}{\ltr@newshade_sin{\ltr@usevalueor#1:angle;{90}}}%
+  \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_cos}{\ltr@newshade_cos{\ltr@usevalueor#1:angle;{90}}}%
+  \ifdim\ltr@usevalueor#1:angle;{90}pt<45pt
+    \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_cos}%
+  \else
+    \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_sin}%
+  \fi
+  \ltr@ifvalue #1:fixed; = true
+    {\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_fixed}{}
+%
+%     This would force fixed shades to have at least the slide's dimension,
+%     so it would never take the area's dimensions. But after all why forbid
+%     an option simply because I can't see the point of it?
+%
+%     \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}{\pdfpagewidth}
+%     \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}{\pdfpageheight}
+    }{}%
+  \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}}#1:width;%
+  \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}}#1:height;%
+  \ltr@ifcasevalue#1:model;
+    \val grey
+      \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+      \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }%
+      \ltr@newshade_do{0 1}{Gray}{%
+        \ltr@newshade_setcolor{grey}}%
+    \val gray
+      \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+      \edef\ltr@to_grey  {\ltr@usevalueor#1:to;0 }%
+      \ltr@newshade_do{0 1}{Gray}{%
+        \ltr@newshade_setcolor{grey}}%
+    \val rgb
+      \ltr@passvaluenobracesor{\ltr@newshade_getrgb{from}}#1:from;
+        {\def\ltr@from_red{0 }\def\ltr@from_green{0 }\def\ltr@from_black{0 }} %
+      \ltr@passvaluenobracesor{\ltr@newshade_getrgb{to}}#1:to; 
+        {\def\ltr@to_red{1 }\def\ltr@to_green{1 }\def\ltr@to_blue{1 }} %
+      \ltr@newshade_do{0 1 0 1 0 1}{RGB}{%
+        \ltr@newshade_setcolor{red}%
+        exch dup \ltr@newshade_setcolor{green}%
+        exch \ltr@newshade_setcolor{blue}}%
+    \val cmyk
+      \ltr@passvaluenobracesor{\ltr@newshade_getcmyk{from}}#1:from; 
+        {\def\ltr@from_cyan{0 }\def\ltr@from_magenta{0 }\def\ltr@from_yellow{ }\def\ltr@from_black{0 }} %
+      \ltr@passvaluenobraces{\ltr@newshade_getcmyk{to}}#1:to; 
+        {\def\ltr@to_cyan{1 }\def\ltr@to_magenta{1 }\def\ltr@to_yellow{1 }\def\ltr@to_black{1 }} %
+      \ltr@newshade_do{0 1 0 1 0 1 0 1}{CMYK}{%
+        \ltr@newshade_setcolor{cyan}%
+        exch dup \ltr@newshade_setcolor{magenta}%
+        exch dup \ltr@newshade_setcolor{yellow}%
+        exch \ltr@newshade_setcolor{black}%
+        }%
+    \elseval
+      \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }%
+      \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }%
+      \ltr@newshade_do{0 1}{Gray}{%
+        \ltr@newshade_setcolor{grey}}%
+  \endval
+  \ltr@deleteattribute#1:name;%
+  \ltr@deleteattribute#1:width;%
+  \ltr@deleteattribute#1:height;%
+  \ltr@deleteattribute#1:fixed;%
+  \ltr@deleteattribute#1:model;%
+  \ltr@deleteattribute#1:from;%
+  \ltr@deleteattribute#1:to;%
+  \ltr@deleteattribute#1:angle;%
+  \ltr@deleteattribute#1:speed;%
+  }
+\def\ltr@newshade_getrgb#1#2 #3 #4 {%
+  \defcs{ltr@#1_red}{#2 }\defcs{ltr@#1_green}{#3 }\defcs{ltr@#1_blue}{#4 }%
+  \skipspace{}%
+  }
+\def\ltr@newshade_getcmyk#1#2 #3 #4 #5 {%
+  \defcs{ltr@#1_cyan}{#2 }\defcs{ltr@#1_magenta}{#3 }\defcs{ltr@#1_yellow}{#4 }\defcs{ltr@#1_black}{#5 }%
+  \skipspace{}%
+  }
+\def\ltr@newshade_setcolor#1{%
+  \usecs{ltr@from_#1} \usecs{ltr@to_#1} sub mul \usecs{ltr@from_#1} exch sub 
+  }
+\restrictparameter ltr@inner_shade: name model from to angle speed width height fixed\par
+\ltr@boolean_attr{ltr@inner_shade:fixed}
+\ltr@restrictattribute ltr@inner_shade:model; grey gray rgb cmyk\par
+\def\newshade#1{%
+  \setparameter ltr@inner_shade:
+    name = {#1}
+  }
+
+%
+%
+%
+%
+% PAINTING
+%
+\def\ltr@paint_area#1#2#3#4#5{%
+  \ifcs{ltr@shade_user:#1}
+       {\ltr@point_convert{#2-\pdfhorigin}
+        \ltr@point_convert{\pdfvorigin-#3}
+        \ltr@point_convert{#4}
+        \ltr@point_convert{-#5} re W* n
+        \ltr@paint_shade{#1}}
+       {\ltr@paint_color{f}{#1}}
+       {#2}{#3}{#4}{#5}
+  }
+\def\ltr@paint_path#1#2#3#4#5{%
+  \ifcs{ltr@shade_user:\ltr@usevalueor#1:frame_color;{ltr@novalue}}
+    {\ltr@point_convert{#2-\dimexpr(\pdfhorigin+\ltr@usevalue #1:frame_width;)}
+     \ltr@point_convert{\dimexpr(\pdfvorigin+\ltr@usevalue #1:frame_width;)-#3}
+     \ltr@point_convert{#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)}
+     \ltr@point_convert{-#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)} re
+     \ltr@point_convert{#2-\pdfhorigin}
+     \ltr@point_convert{\pdfvorigin-#3}
+     \ltr@point_convert{#4}
+     \ltr@point_convert{-#5} re W* n
+     \ltr@passvalue\ltr@paint_shade #1:frame_color;
+         {\dimexpr(#2-\ltr@usevalue #1:frame_width;)\relax}
+         {\dimexpr(#3-\ltr@usevalue #1:frame_width;)\relax}
+         {#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)}
+         {#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)}}
+    {%
+     \ltr@point_convert{\ifdim\ltr@usevalue #1:frame_width;<0pt -\fi\ltr@usevalue #1:frame_width;} w
+     \ltr@ifcasevalue#1:frame_corner;
+       \val round 1
+       \val bevel 2
+       \elseval 0
+     \endval\spacecs j
+     \ltr@ifattribute#1:frame_dash;{[\ltr@usevalue#1:frame_dash;] 0 d }{}%
+     \ltr@passvalue{\ltr@paint_color{S}}#1:frame_color;
+       {\dimexpr(#2-\ltr@usevalue #1:frame_width;/2)}
+       {\dimexpr(#3-\ltr@usevalue #1:frame_width;/2)}
+       {\dimexpr(#4+\ltr@usevalue #1:frame_width;)}
+       {\dimexpr(#5+\ltr@usevalue #1:frame_width;)}}
+  }
+\def\ltr@paint_shade#1#2#3#4#5{%
+% Translation, and reversal of vertical dimension.
+  1 0 0 -1
+    \passexpandedcs\ifstring{ltr@shade_user:#1}{reversed}
+                          {\ifcs{ltr@shade_user:#1_fixed}
+                                {\ltr@point_convert{\pdfpagewidth-\pdfhorigin}}
+                                {\ltr@point_convert{\dimexpr(#4+#2)-\pdfhorigin}}}
+                          {\ifcs{ltr@shade_user:#1_fixed}
+                                {\ltr@point_convert{-\pdfhorigin}}
+                                {\ltr@point_convert{#2-\pdfhorigin}}}
+    \ifcs{ltr@shade_user:#1_fixed}{\ltr@point_convert{\pdfvorigin}}{\ltr@point_convert{\pdfvorigin-#3}} cm
+% Scaling.
+  \passexpandedcs\iffstring{ltr@shade_user:#1}{reversed}{-}%
+    \ifcs{ltr@shade_user:#1_width}
+         {\ltr@point_convert{\usecs{ltr@shade_user:#1_width}}}
+         {\ltr@point_convert{#4}}%
+  0 0
+  \ifcs{ltr@shade_user:#1_height}
+       {\ltr@point_convert{\usecs{ltr@shade_user:#1_height}}}
+       {\ltr@point_convert{#5}}%
+   0 0 cm
+% Rotation.
+  \usecs{ltr@shade_user:#1_cos} \usecs{ltr@shade_user:#1_sin} -\usecs{ltr@shade_user:#1_sin}
+    \usecs{ltr@shade_user:#1_cos} 0 0 cm
+% Scaling of rotated material top accommodate the new length (diagonal, not side).
+  \usecs{ltr@shade_user:#1_scale} 0 0 1 0 0 cm
+  /ltr@shade_#1 sh
+  }
+\def\ltr@paint_color#1#2#3#4#5#6{%
+  \ltr@color_use{#2}%
+  \ltr@point_convert{#3-\pdfhorigin} \ltr@point_convert{\pdfvorigin-#4}
+  \ltr@point_convert{#5} \ltr@point_convert{-#6} re #1
+  }
+
+%
+%
+%
+%
+% SYMBOLS
+%
+\def\ltr@draw_dim#1{%
+  \ltr@nopt{#1pt}%
+  }
+\newfornoempty\ltr@draw_loop{1}#2,{%
+  \passtrim{#2}{\ltr@draw_addspace{#1}}%
+  }[\ltr@draw_add{}{}{}{#1}]
+\def\ltr@draw_addspace#1#2{%
+  \reverse\iffemptystring{#2}{\ltr@draw_decide{#1}#2 }% SPACE!!!
+  }
+\def\ltr@draw_decide#1#2 {%
+  \ifcs{ltr@draw_#2}
+       {\usecs{ltr@draw_#2}{#1}}
+       {\ltr@draw_line{#1}#2 }%
+  }
+\def\ltr@draw_line#1#2 #3 {%
+  \ifstring{#2}{+}
+    {\ltr@draw_relativeline#3 }
+    {\ltr@draw_add{}{#2}{#3}{l}%
+    \passarguments{S}}%
+  }
+\def\ltr@draw_relativeline#1 #2 {%
+  \ltr@draw_add{}{\ltr@nopt{#1pt+\ltr@draw_x pt}}{\ltr@nopt{#2pt+\ltr@draw_y pt}}{l}%
+  \passarguments{S}
+  }
+\def\ltr@draw_move#1#2 #3 {%
+  \ifstring{#2}{+}
+    {\ltr@draw_relativemove{#1}#3 }
+    {\ltr@draw_add{#1}{#2}{#3}{m}%
+    \passarguments{}}%
+  }
+\def\ltr@draw_relativemove#1#2 #3 {%
+  \ltr@draw_add{#1}{\ltr@nopt{#2pt+\ltr@draw_x pt}}{\ltr@nopt{#3pt+\ltr@draw_y pt}}{m}%
+  \passarguments{}
+  }
+\def\ltr@draw_stroke#1{%
+  \ltr@draw_add{S}{\ltr@draw_x}{\ltr@draw_y}{m}%
+  \passarguments{}
+  }
+\def\ltr@draw_close#1{%
+  \ltr@draw_add{h}{\ltr@draw_x}{\ltr@draw_y}{m}%
+  \passarguments{S}
+  }
+\def\ltr@draw_fill#1{%
+  \ltr@draw_add{f*}{\ltr@draw_x}{\ltr@draw_y}{m}%
+  \passarguments{}
+  }
+\def\ltr@draw_paint#1{%
+  \ltr@draw_add{h B*}{\ltr@draw_x}{\ltr@draw_y}{m}%
+  \passarguments{}
+  }
+\def\ltr@draw_pen#1#2 {%
+  \ltr@draw_add{}{}{}{#2 w }%
+  \passarguments{}
+  }
+\def\ltr@draw_color#1#2 {%
+  \ifcs{ltr@color_user:#2}
+       {\ltr@draw_add{}{}{}{\usecs{ltr@color_user:#2}}}
+       {\usecs{ltr@draw_color#2}}%
+  }
+\def\ltr@draw_colorrgb#1 #2 #3 {%
+  \ltr@draw_add{}{}{}{#1 #2 #3 rg #1 #2 #3 RG }%
+  }
+\def\ltr@draw_colorcmyk#1 #2 #3 #4 {%
+  \ltr@draw_add{}{}{}{#1 #2 #3 #4 k #1 #2 #3 #4 K }%
+  }
+\def\ltr@draw_colorgrey#1 {%
+  \ltr@draw_add{}{}{}{#1 g #1 G }%
+  }
+\let\ltr@draw_colorgray\ltr@draw_colorgrey
+\def\ltr@draw_add#1#2#3#4{%
+  \eaddright\ltr@draw_temp{%
+    \reverse\iffemptystring{#1}{#1 }%
+    \reverse\iffemptystring{#2}{\ltr@draw_dim{#2} }%
+    \reverse\iffemptystring{#3}{\ltr@draw_dim{#3} }%
+    #4 }%
+  \reverse\iffemptystring{#2}
+    {\edef\ltr@draw_x{#2}%
+     \ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi
+     \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}%
+  \reverse\iffemptystring{#3}
+    {\edef\ltr@draw_y{#3}%
+     \ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi
+     \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}%
+  }
+\def\ltr@draw_circle#1#2 #3 {%
+  \usecs{ltr@draw_circle#2}{\ltr@draw_x}{\ltr@draw_y}{#3}%
+  \passarguments{S}
+  }
+\def\ltr@draw_kappa{5522847}
+\def\ltr@draw_circleur#1#2#3{%
+  \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt}
+                     {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}%
+  }
+\def\ltr@draw_circledr#1#2#3{%
+  \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt}
+                     {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}%
+  }
+\def\ltr@draw_circleru#1#2#3{%
+  \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+                     {#1pt+#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}%
+  }
+\def\ltr@draw_circlerd#1#2#3{%
+  \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+                     {#1pt+#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}%
+  }
+\def\ltr@draw_circleul#1#2#3{%
+  \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt}
+                     {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}%
+  }
+\def\ltr@draw_circledl#1#2#3{%
+  \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt}
+                     {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}%
+  }
+\def\ltr@draw_circlelu#1#2#3{%
+  \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+                     {#1pt-#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}%
+  }
+\def\ltr@draw_circleld#1#2#3{%
+  \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt}
+                     {#1pt-#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}
+                     {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}%
+  }
+\def\ltr@draw_addcircle#1#2#3#4#5#6#7#8{%
+  \eaddright\ltr@draw_temp{%
+    \ltr@nopt{#1} \ltr@nopt{#2}
+    \ltr@nopt{#3} \ltr@nopt{#4}
+    \ltr@nopt{#5} \ltr@nopt{#6} c
+    }%
+  \edef\ltr@draw_x{\ltr@nopt{\ltr@draw_x pt+#7pt}}%
+  \edef\ltr@draw_y{\ltr@nopt{\ltr@draw_y pt+#8pt}}%
+  \reverse\iffemptycommand\ltr@draw_x
+    {\ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi
+     \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}%
+  \reverse\iffemptycommand\ltr@draw_y
+    {\ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi
+     \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}%  
+  }
+
+\def\newsymbol#1{%
+  \ifnextnospace[{\ltr@newsymbol{#1}}{\ltr@newsymbol{#1}[1pt]}%
+  }
+\def\ltr@newsymbol#1[#2]#3{%
+  \def\ltr@draw_temp{}%
+  \def\ltr@draw_x{0}\def\ltr@draw_y{0}%
+  \def\ltr@draw_xmax{0}\def\ltr@draw_xmin{0}%
+  \def\ltr@draw_ymax{0}\def\ltr@draw_ymin{0}%
+  \def\ltr@draw_unit{1pt}%
+  \def\ltr@draw_leftpadding{1cm}\def\ltr@draw_rightpadding{1pt}%
+  \def\ltr@draw_toppadding{1pt}\def\ltr@draw_bottompadding{1pt}%
+  \ltr@option_launchloop{draw}{#2}%
+  \deftrim\ltr@temp{#3}%
+  \passexpanded{\ltr@draw_loop{}}{\ltr@temp,}%
+  \setbox\ltr@temp_box=\hbox{% Need the total width (not just positive) of the drawing.
+    % \ltr@draw_xmin is negative, hence the somewhat confusing signs.
+    \kern-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+    \pdfliteral{q \ltr@point_convert{\ltr@draw_unit} 0 0 \ltr@point_convert{\ltr@draw_unit} 0 0 cm 1 w 0 0 m \ltr@draw_temp Q}}%
+  \wd\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmax pt-\ltr@draw_xmin pt)\relax+\ltr@draw_leftpadding+\ltr@draw_rightpadding)\relax
+  \ht\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymax pt)\relax+\ltr@draw_toppadding)\relax
+  \dp\ltr@temp_box=-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymin pt)\relax-\ltr@draw_bottompadding)\relax
+  \pdfxform resources {/ExtGState << \ltr@page_extgstate >>} \ltr@temp_box
+  \setbox\ltr@temp_box=\hbox{%
+    \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+    \pdfrefxform\the\pdflastxform}%
+  \xdefcs{ltr@\commandtoname#1@symbol_width}{\the\wd\ltr@temp_box}%
+  \xdefcs{ltr@\commandtoname#1@symbol_height}{\the\ht\ltr@temp_box}%
+  \xdefcs{ltr@\commandtoname#1@symbol_depth}{\the\dp\ltr@temp_box}%
+  \xdef#1{%
+    \hbox{%
+      \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax
+      \pdfrefxform\the\pdflastxform}%
+    }%
+  }
+\def\ltr@draw_usepair#1#2{%
+  \ifstring{#1}{padding}
+    {\def\ltr@draw_leftpadding{#2}%
+     \def\ltr@draw_rightpadding{#2}%
+     \def\ltr@draw_toppadding{#2}%
+     \def\ltr@draw_bottompadding{#2}}
+     {\ifcs{ltr@draw_#1padding}
+       {\defcs{ltr@draw_#1padding}{#2}}
+       {\ltr@error{Unknown option `#1' in \string\newsymbol}}}%
+  }
+\def\ltr@draw_useatom#1{%
+  \def\ltr@draw_unit{#1}%
+  }
+\def\symbolwidth#1{%
+  \ltr@symbol_dimensions{#1}{width}%
+  }
+\def\symbolheight#1{%
+  \ltr@symbol_dimensions{#1}{height}%
+  }
+\def\symboldepth#1{%
+  \ltr@symbol_dimensions{#1}{depth}%
+  }
+\def\ltr@symbol_dimensions#1#2{%
+  \ifcs{ltr@\commandtoname#1@symbol_#2}
+    {\usecs{ltr@\commandtoname#1@symbol_#2}}
+    {\ltr@error{\string#1 is not a symbol}}%
+  }
+%
+%
+% IMAGES
+%
+\def\newimage#1{%
+  \ifnextnospace[{\ltr@newimage{#1}}{\ltr@newimage{#1}[,]}%
+  }
+\def\ltr@newimage#1[#2,#3]#4{%
+  \pdfximage\reverse\iffemptystring{#2}{width \dimexpr(#2)\relax }
+            \reverse\iffemptystring{#3}{height \dimexpr(#3)\relax }
+            {#4}%
+  \xdefcs{ltr@image_user:#1}{%
+    \hbox{\pdfrefximage\the\pdflastximage}%
+    }%
+  \setbox\ltr@temp_box=\usecs{ltr@image_user:#1}%
+  \xdefcs{ltr@image_height:#1}{\the\ht\ltr@temp_box}%
+  }
+\def\useimage#1{%
+  \ifcs{ltr@image_user:#1}
+    {\usecs{ltr@image_user:#1}}
+    {\ltr@error{Unkown image `#1'. Declare it with \string\useimage}}%
+  }
+\def\ltr@image_use#1#2#3{%
+  \iffcs{ltr@image_user:#1}
+    {\kern\dimexpr(#3-\pdfvorigin)\relax
+     \moveright\dimexpr(#2-\pdfhorigin)\relax
+       \usecs{ltr@image_user:#1}
+     \kern-\dimexpr(#3+\usecs{ltr@image_height:#1}-\pdfvorigin)\relax
+     \prevdepth-1000pt}%
+  }%
+
+%
+% TRANSITIONS
+% Attributes : type, motion, direction, dimension, duration, scale.
+%
+\def\ltr@transition_restrictions{name type motion direction dimension duration scale}
+\passexpandednobraces{\restrictparameter ltr@inner_transition:}\ltr@transition_restrictions\par
+\ltr@restrictattribute ltr@inner_transition:type;
+   split Split blinds Blinds box Box wipe Wipe
+   dissolve Dissolve glitter Glitter fly Fly
+   push Push cover Cover uncover Uncover fade Fade\par
+\ltr@restrictattribute ltr@inner_transition:motion; inward outward\par
+\ltr@restrictattribute ltr@inner_transition:direction; lr bt rl tb dx\par
+\ltr@restrictattribute ltr@inner_transition:dimension; horizontal vertical\par
+\defactiveparameter ltr@inner_transition{%
+  \immediate\pdfobj{
+    << /Type/Trans
+    /S/%
+    \ltr@ifcasevalue #1:type;
+      \val split    Split
+      \val Split    Split
+      \val blinds   Blinds
+      \val Blinds   Blinds
+      \val box      Box
+      \val Box      Box
+      \val wipe     Wipe
+      \val Wipe     Wipe
+      \val dissolve Dissolve
+      \val Dissolve Dissolve
+      \val glitter  Glitter
+      \val Glitter  Glitter
+      \val fly      Fly
+      \val Fly      Fly
+      \val push     Push
+      \val Push     Push
+      \val cover    Cover
+      \val Cover    Cover
+      \val uncover  Uncover
+      \val Uncover  Uncover
+      \val fade     Fade
+      \val Fade     Fade
+      \elseval      R
+    \endval\spacecs
+    \ltr@ifcasevalue #1:motion;
+      \val inward  /M/I
+      \val outward /M/O      
+    \endval\spacecs
+    \ltr@ifcasevalue #1:direction;
+      \val lr /Di 0
+      \val bt /Di 90
+      \val rl /Di 180
+      \val tb /Di 270
+      \val dx /Di 315
+    \endval\spacecs
+    \ltr@ifcasevalue #1:dimension;
+      \val horizontal /Dm/H
+      \val vertical   /Dm/V
+    \endval\spacecs
+    \ltr@ifattribute #1:duration;{/D \ltr@usevalue #1:duration;}{}
+    \ltr@ifattribute #1:scale;{/SS \ltr@usevalue #1:scale;}{}
+    >>}%
+  \xdefcs{ltr@inner_transition:\ltr@usevalue #1:name;}{\the\pdflastobj\spacecs}%
+  \ltr@deleteattribute#1:name;%
+  \ltr@deleteattribute#1:type;%
+  \ltr@deleteattribute#1:motion;%
+  \ltr@deleteattribute#1:direction;%
+  \ltr@deleteattribute#1:dimension;%
+  \ltr@deleteattribute#1:duration;%
+  \ltr@deleteattribute#1:scale;%
+  }
+\def\newtransition#1{%
+  \restrictallattributes transition #1\par
+  \setparameter ltr@inner_transition:
+    name = {#1}
+  }
+\newtransition{split}    type = split\par
+\newtransition{blinds}   type = blinds\par
+\newtransition{box}      type = box\par
+\newtransition{wipe}     type = wipe\par
+\newtransition{dissolve} type = dissolve\par
+\newtransition{glitter}  type = glitter\par
+\newtransition{fly}      type = fly\par
+\newtransition{push}     type = push\par
+\newtransition{cover}    type = cover\par
+\newtransition{uncover}  type = uncover\par
+\newtransition{fade}     type = fade\par
+\restrictallattributes transition none\par
+
+\endinput
\ No newline at end of file
-- 
cgit v1.2.3

