%!
% $Id: pst-text.pro 891 2018-12-29 19:42:20Z herbert $
%
% PostScript header file pst-text.pro
% Version 1.02, 2018-12-28 (hv)
% For distribution, see pstricks.tex.
%
/tx@TextPathDict 45 dict def
tx@TextPathDict begin
%
% Syntax:  <dist> PathPosition -
% Function: Searches for position of currentpath distance <dist> from
%           beginning. Sets (X,Y)=position, and Angle=tangent.
/PathPosition
{ /targetdist exch def
 /pathdist 0 def
 /continue true def
 /X { newx } def /Y { newy } def /Angle 0 def
 gsave
   flattenpath
   { movetoproc }  { linetoproc } { } { firstx firsty linetoproc }
   /pathforall load stopped { pop pop pop pop /X 0 def /Y 0 def } if
 grestore
} def
%
/movetoproc { continue { @movetoproc } { pop pop } ifelse } def
%
/@movetoproc
{ /newy exch def /newx exch def
 /firstx newx def /firsty newy def
} def
%
/linetoproc { continue { @linetoproc } { pop pop } ifelse } def
%
/@linetoproc {
 /oldx newx def /oldy newy def
 /newy exch def /newx exch def
 /dx newx oldx sub def
 /dy newy oldy sub def
 /dist dx dup mul dy dup mul add sqrt def
 /pathdist pathdist dist add def
 pathdist targetdist ge
 { pathdist targetdist sub dist div dup
   dy mul neg newy add /Y exch def
   dx mul neg newx add /X exch def
   /Angle dy dx atan def
   /continue false def
 } if
} def
%
/TextPathShow {
 /String exch def
 /CharCount 0 def
% hv begin 2005-11-29   1.00
%   String length
%   { String CharCount 1 getinterval ShowChar
%     /CharCount CharCount 1 add def
  /CharSize 1 def
  currentfont /FontType get 0 eq
  { currentfont /FMapType get dup 2 eq exch dup 5 eq exch 9 eq or or
    { /CharSize 2 def} if
  } if
  String length CharSize idiv
  { String CharCount CharSize getinterval ShowChar
    /CharCount CharCount CharSize add def
% hv end 2005-11-29   1.00
 } repeat
} def
%
% Syntax: <pathlength> <position> InitTextPath -
/InitTextPath
{ gsave
   currentpoint /Y exch def /X exch def
   exch X Hoffset sub sub mul
   Voffset Hoffset sub add
   neg X add /Hoffset exch def
   /Voffset Y def
 grestore
} def
%
/Transform
{ PathPosition
 dup
 Angle cos mul Y add exch
 Angle sin mul neg X add exch
 translate
 Angle rotate
} def
%
/ShowChar {
 /Char exch def
 gsave
   Char end stringwidth
   tx@TextPathDict begin
   2 div /Sy exch def 2 div /Sx exch def
%
%%%  MV 10-09-99 00:36
   /sc?currentpoint where {pop sc?currentpoint} {currentpoint} ifelse
%   currentpoint
   Voffset sub Sy add exch
   Hoffset sub Sx add
   Transform
   Sx neg Sy neg moveto
   Char end tx@TextPathSavedShow
   tx@TextPathDict begin
 grestore
 Sx 2 mul Sy 2 mul rmoveto
} def
%
/warp {
   1 index
   1.4 mul
   cos 2 add
   mul
} def
/warpmove{
   2 index {
       newpath
   } if
   warp moveto
   pop false
} def
/warpline { warp lineto } def
/warpcurve {
   6 2 roll warp
   6 2 roll warp
   6 2 roll warp
   curveto
} def
/warpit {
   true
   { warpmove } { warpline } { warpcurve } { closepath } pathforall
   pop
} def
%
/circle {
   exch neg
   % .5 mul
   90 add
   dup cos 2 index mul
   3 1 roll
   sin mul
} bind def

/circmove{
   2 index { newpath } if
   circle moveto
   pop false
} bind def

/circline { circle lineto } bind def

/circcurve {
   6 2 roll circle
   6 2 roll circle
   6 2 roll circle
   curveto
} bind def

/circit { true { circmove } { circline } { circcurve } { closepath } pathforall pop } bind def
%
end
% END pst-text.pro