% \iffalse meta-comment
%
% Copyright (C) 2011 by Raphaël Pinson <raphink@gmail.com>
% ---------------------------------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Raphaël Pinson.
%
% This work consists of the files fontbook.dtx and fontbook.ins
% and the derived filebase fontbook.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{fontbook.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{fontbook}
%<*package>
    [2011/08/17 0.2 Generate a font book]
%</package>
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage{fontbook}[2011/07/05]
\usepackage{xltxtra}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{fontbook.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{69}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{0.2}{2011/08/17}{Fix some licenses and name}
% \changes{0.1}{2011/07/05}{Converted to DTX file}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
% \providecommand*{\url}{\texttt}
% \GetFileInfo{fontbook.dtx}
% \title{The \textsf{fontbook} package}
% \author{Raphaël Pinson \\ \url{raphink@gmail.com}}
% \date{\fileversion~from \filedate}
%
% \maketitle
%
% \section{Introduction}
%
% \XeTeX{} allows us to make use of pretty much all possible fonts.
% With all the possible fonts that can be used and the many features provided
% by OpenType fonts, it can be useful to compile a font book of your favorite
% fonts, so you can find the one you need more easily. This is what the 
% \textsf{fontbook} package is about.
% 
%
% \section{Usage}
%
% To use this package, simply include it:
%
% \begin{verbatim}
% \usepackage{fontbook}
% \end{verbatim}
%
% \subsection{Package Options}
%
% This package provides several options to fine-tune the way its commands react.
%
% \subsubsection{The \textsf{sizes} option}
%
%   The \textsf{sizes} option lets you define which sizes
%   are to be printed for each font.
%   By default, all sizes from \textsf{huge} to \textsf{tiny} downward
%   are used:
%   \makeatletter\textsf{\fontbook@allsizes}\makeatother.
%   This option can take a single value or a list
%   of comma-separated values:
%
% \begin{verbatim}
% \usepackage[sizes={large,huge}]{fontbook}
% \end{verbatim}
%
% \subsubsection{The \textsf{features} option}
% 
%   Similarly to the \textsf{sizes} option, the \textsf{features} option
%   lets you define which features you wish to print for each font.
%   By default, the following features are used:
%   \makeatletter\textsf{\fontbook@allfeatures}\makeatother.
%   This option can take a single value or a list
%   of comma-separated values:
%
% \begin{verbatim}
% \usepackage[features=scshape]{fontbook}
% \end{verbatim}
%
% \subsubsection{The \textsf{featuresize} option}
%
%   By default, features are typeset in size
%   \makeatletter\textsf{\fontbook@defaultfeaturesize}\makeatother.
%   This can be changed by passing the desired size name
%   as the \textsf{featuresize} option:
%
% \begin{verbatim}
% \usepackage[featuresize=huge]{fontbook}
% \end{verbatim}
%
% \subsection{Package commands}
%
% \DescribeMacro{\setsampletext}
%
%   Set the sample text used in the font demo.
%
% \DescribeMacro{\printfont}
%
%   This is the main command of this package
%   It takes 2 mandatory arguments and 1 optional argument.
%   The 2 mandatory arguments are the font name, as passed to
%   \textsf{fontspec}, and the license.
%   The optional argument is the fontspec option that allow
%   to set OpenType features for example:
%
% \begin{verbatim}
% \printfont[Ligatures=Rare]{Linux Libertine O}{Public Domain}
% \end{verbatim}
%
% \StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
%
%    \begin{macrocode}
\ProvidesPackage{fontbook}
\RequirePackage{fontspec}
\RequirePackage{xunicode}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{
   family=fontbook,
   prefix=fontbook@,
}
%    \end{macrocode}
%% Options
%
%
% \begin{macro}{\fontbook@allsizes}
% Sizes
%    \begin{macrocode}
\def\fontbook@allsizes{%
 huge, LARGE, Large, large, normalsize,
 small, footnotesize, scriptsize, tiny}
\expandafter\DeclareStringOption\expandafter[\fontbook@allsizes]{sizes}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fontbook@allfeatures}
% Features
%    \begin{macrocode}
\def\fontbook@allfeatures{%
 scshape, itshape, bfseries}
\expandafter\DeclareStringOption\expandafter[\fontbook@allfeatures]{features}
\def\fontbook@defaultfeaturesize{large}
\expandafter\DeclareStringOption\expandafter[\fontbook@defaultfeaturesize]{featuresize}
\ProcessKeyvalOptions*
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fontbook@sampletext}
%    \begin{macrocode}
\def\fontbook@sampletext{%
 Dans l'affliction éphémère qui m'accable, je teste
 la police d'affichage qui est utilisée sur cette page 1 2 3 4 5.
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\sampletext}
%    \begin{macrocode}
\newcommand{\sampletext}[2][]{%
 {\par\csname#2\endcsname \csname#1\endcsname
 #2 #1\\ \fontbook@sampletext}}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\setsampletext}
%    \begin{macrocode}
\newcommand{\setsampletext}[1]{%
 \def\fontbook@sampletext{#1}}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\samplefeature}
%    \begin{macrocode}
\newcommand{\samplefeature}[1]{%
 \sampletext[#1]{\fontbook@featuresize}}
%% TODO: call font once
%%%% print all variants
%
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\printfont}
%    \begin{macrocode}
\newcommand{\printfont}[3][\empty]{%
   \fontspec[#1]{#2}
   \section*{#2 #1 --- Licence: #3}
   \ifx#1\empty
     \addcontentsline{toc}{section}{#2}
   \else
     \addcontentsline{toc}{subsection}{#1}
   \fi
   \expandafter\forcsvlist\expandafter\sampletext\expandafter{\fontbook@sizes}
   \expandafter\forcsvlist\expandafter\samplefeature\expandafter{\fontbook@features}
   \pagebreak
}
%    \end{macrocode}
% \end{macro}
%
%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput
