% utf8
% ------------------------------------------------
%  Created by Alain Matthes le 2012-02-22.
%  Copyright (C) 2016 Alain Matthes 
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License , either version 1.3
% of this license or (at your option) any later version and/or
% 2. under the GNU Public License. 
% ------------------------------------------------
%% pgfornament.sty 0.2 du 05/03/2016 inspired from psvectorian P Fradin H Voss
%% ------------------------------------------------
% Les options de \pgfornament sont:
%
% scale        : nombre (échelle, 1 par défaut)
% width        : nombre + unité (largeur, naturelle par défaut)
% height       : nombre + unité (hauteur, naturelle par défaut)
% color        : couleur ( par défaut couleur courante )
% symmetry=h   : true/false (symétrie horizontale, false par défaut)
% symmetry=v   : true/false (symétrie verticale,   false par défaut)
% symmetry=c   : true/false (symétrie centrale h+v,false par défaut)
\NeedsTeXFormat{LaTeX2e}% 
\RequirePackage{tikz,pgfopts}%
\ProvidesPackage{pgfornament}[2016/03/05 v0.21 vector ornaments]%
\gdef\pgfOrnamentsObject{pgflibraryvectorian.code.tex} 
\gdef\OrnamentsFamily{vectorian}  
\pgfkeys{
/pgfOrnaments/object/.cd,
/pgfOrnaments/object/.code = \gdef\pgfOrnamentsObject{pgflibrary#1.code.tex}
\gdef\OrnamentsFamily{#1}
}
\ProcessPgfOptions{/pgfOrnaments}
\input{\pgfOrnamentsObject}%
\makeatletter 

% appels des motifs 
\def\pgf@@ornament#1{%
\begingroup
\def\i{\pgfusepath{clip}}%
\def\k{\pgfusepath{stroke}}%
\let\o\pgfpathclose
\let\s\pgfusepathqfillstroke
\def\p ##1##2{\pgfqpoint{##1bp}{##2bp}}%
\def\m ##1 ##2 {\pgfpathmoveto{\p{##1}{##2}}}%
\def\l ##1 ##2 {\pgfpathlineto{\p{##1}{##2}}}%
\def\r ##1 ##2 ##3 ##4 {\pgfpathrectangle{\p{##1}{##2}}{\p{##3}{##4}}}%
\def\c ##1 ##2 ##3 ##4 ##5 ##6 {%
\pgfpathcurveto{\p{##1}{##2}}{\p{##3}{##4}}{\p{##5}{##6}}}%
\@@input \OrnamentsFamily#1.pgf%
\endgroup}%  

\tikzset{pgfornamentstyle/.style={}}%  
\pgfkeys{%
/ornament/.cd,
scale/.code         =  {\def\pgfornamentscale{#1}},
width/.code         =  {\def\pgfornamentwidth{#1}},
height/.code        =  {\def\pgfornamentheight{#1}},
color/.code         =  {\def\pgfornamentcolor{#1}},
opacity/.code       =  {\def\pgfornamentopacity{#1}},
anchor/.code        =  {\def\pgfornamentanchor{#1}},
ydelta/.code        =  {\def\pgfornamentydelta{#1}}, 
symmetry/.is choice,
symmetry/v/.code     = {\tikzset{pgfornamentstyle/.append style={cm={-1,0,0,1,(0,0)}}}},
symmetry/c/.code     = {\tikzset{pgfornamentstyle/.append style={cm={-1,0,0,-1,(0,0)}}}},
symmetry/h/.code     = {\tikzset{pgfornamentstyle/.append style={cm={1,0,0,-1,(0,0)}}}},
symmetry/none/.code  = {\tikzset{pgfornamentstyle/.append style={cm={1,0,0,1,(0,0)}}}}}%
\def\pgfornament{\pgfutil@ifnextchar[{\pgf@ornament}{\pgf@ornament[]}}%
\def\pgf@ornament[#1]#2{%
\pgfkeys{/ornament/.cd,
         scale    =  1,
         opacity  =  {},
		 width    =  {},
         height   =  {},
         color    =  {},
         ydelta   =  0 pt,
         symmetry =  none ,
         anchor   =  center}% 
%
\pgfqkeys{/ornament}{#1}%
\ifx\pgfornamentcolor\empty 
    \tikzset{pgfornamentstyle/.append style={}}%
\else 
    \tikzset{pgfornamentstyle/.append style={color=\pgfornamentcolor}}%
\fi
\ifx\pgfornamentopacity\empty 
    \tikzset{pgfornamentstyle/.append style={}}%
\else 
    \tikzset{pgfornamentstyle/.append style={opacity=\pgfornamentopacity}}%
\fi
\ifx\pgfornamentwidth\empty
   \else
  \@pgfornamentDim{#2}% 
  \pgfmathsetmacro{\pgfornamentscale}{\pgfornamentwidth/\@pgfornamentX bp}%
\fi  
\ifx\pgfornamentheight\empty
   \else
  \@pgfornamentDim{#2}% 
  \pgfmathsetmacro{\pgfornamentscale}{\pgfornamentheight/\@pgfornamentY bp}%
\fi
\begin{tikzpicture}[%
   baseline={([yshift=\pgfornamentydelta]current bounding box.\pgfornamentanchor)},pgfornamentstyle]
   \pgftransformscale{\pgfornamentscale}%
   \pgf@@ornament{#2}%
\end{tikzpicture}%
\tikzset{pgfornamentstyle/.style={cm={1,0,0,1,(0,0)}}}%
}%
\gdef\ornamenttopos{.5}
\gdef\ornamenttoanchor{center}
\gdef\ornamenttosymmetry{none} 
\tikzset{options default/.style={anchor=center,sloped,allow upside down,inner sep=0pt}}
\tikzset{%
ornament/at/.code={\def\ornamenttopos{#1}},
options/.style={options default,#1},
ornament symmetry/.code={\def\ornamenttosymmetry{#1}},
node anchor/.code={\def\ornamenttoanchor{#1}}, 
ornament/.style={%
to path={%
\pgfextra{%
      \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
         \pgf@xa=\pgf@x
         \pgf@ya=\pgf@y 
      \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
         \pgf@xb=\pgf@x
         \pgf@yb=\pgf@y
         \advance\pgf@xa by-\pgf@xb
         \advance\pgf@ya by-\pgf@yb
      \pgfmathveclen{\pgf@xa}{\pgf@ya}%
      \global\let\ornamentlen\pgfmathresult} 
	     --  node [pos=\ornamenttopos,options,
		          anchor=\ornamenttoanchor]{%
        \pgfornament[width    = \ornamentlen,
		             symmetry=\ornamenttosymmetry]{#1}}  
            (\tikztotarget)\tikztonodes %end pgfextra    
    }% end to path
  }% end style
}% 
\def\pgfornamenthline#1#2#3#4{%
  \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{#3 east}}
  \pgf@xa=\pgf@x 
  \pgfextractx{\pgf@x}{\pgfpointanchor{#2}{#3 west}} 
  \pgf@xb=\pgf@x
  \advance\pgf@xb by -\pgf@xa
\node[inner sep=0pt] at ($(#1.#3 east)!.5!(#2.#3 west)$) {\pgfornament[width=\pgf@xb]{#4}} ;  
}
\def\pgfornamentvline#1#2#3#4{%
  \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{south #3}}
  \pgf@ya=\pgf@y 
  \pgfextracty{\pgf@y}{\pgfpointanchor{#2}{north #3}} 
  \pgf@yb=\pgf@y
  \advance\pgf@yb by -\pgf@ya
\node[inner sep=0pt,rotate=90] at ($(#1.south #3)!.5!(#2.north #3)$) {\pgfornament[width=\pgf@yb]{#4}} ;  
}%
\def\getornamentlength#1#2#3#4{%
 \pgfpointdiff{\pgfpointanchor{#1}{#2}}%
              {\pgfpointanchor{#3}{#4}}%
   \pgf@xa=\pgf@x
   \pgf@ya=\pgf@y
   \pgfmathveclen{\pgf@xa}{\pgf@ya}%
   \global\let\ornamentlen\pgfmathresult 
}%
\def\getornamentangle#1#2#3{%
  \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
  \pgfmathsetmacro{#1}{atan2(\pgf@x,\pgf@y)}%
}%
\makeatother

\newcommand{\resetpgfornamentstyle}{\tikzset{pgfornamentstyle/.style={}}}
 

\endinput
% End
