forked from github/pelican
829 lines
24 KiB
TeX
829 lines
24 KiB
TeX
|
|
% Generated by Sphinx.
|
|||
|
|
\documentclass[letterpaper,10pt,english]{manual}
|
|||
|
|
\usepackage[utf8]{inputenc}
|
|||
|
|
\usepackage[T1]{fontenc}
|
|||
|
|
\usepackage{babel}
|
|||
|
|
\usepackage{times}
|
|||
|
|
\usepackage[Bjarne]{fncychap}
|
|||
|
|
\usepackage{longtable}
|
|||
|
|
\usepackage{sphinx}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\title{Raclette Documentation}
|
|||
|
|
\date{January 24, 2011}
|
|||
|
|
\release{2}
|
|||
|
|
\author{Alexis Métaireau}
|
|||
|
|
\newcommand{\sphinxlogo}{}
|
|||
|
|
\renewcommand{\releasename}{Release}
|
|||
|
|
\makeindex
|
|||
|
|
\makemodindex
|
|||
|
|
|
|||
|
|
\makeatletter
|
|||
|
|
\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
|
|||
|
|
\let\PYG@ul=\relax \let\PYG@tc=\relax%
|
|||
|
|
\let\PYG@bc=\relax \let\PYG@ff=\relax}
|
|||
|
|
\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
|
|||
|
|
\def\PYG@toks#1+{\ifx\relax#1\empty\else%
|
|||
|
|
\PYG@tok{#1}\expandafter\PYG@toks\fi}
|
|||
|
|
\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
|
|||
|
|
\PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
|
|||
|
|
\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
|
|||
|
|
|
|||
|
|
\def\PYG@tok@gd{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
|
|||
|
|
\def\PYG@tok@gu{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
|
|||
|
|
\def\PYG@tok@gt{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.25,0.82}{##1}}}
|
|||
|
|
\def\PYG@tok@gs{\let\PYG@bf=\textbf}
|
|||
|
|
\def\PYG@tok@gr{\def\PYG@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
|
|||
|
|
\def\PYG@tok@cm{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
|
|||
|
|
\def\PYG@tok@vg{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
|
|||
|
|
\def\PYG@tok@m{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@mh{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@cs{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}\def\PYG@bc##1{\colorbox[rgb]{1.00,0.94,0.94}{##1}}}
|
|||
|
|
\def\PYG@tok@ge{\let\PYG@it=\textit}
|
|||
|
|
\def\PYG@tok@vc{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
|
|||
|
|
\def\PYG@tok@il{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@go{\def\PYG@tc##1{\textcolor[rgb]{0.19,0.19,0.19}{##1}}}
|
|||
|
|
\def\PYG@tok@cp{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@gi{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
|
|||
|
|
\def\PYG@tok@gh{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
|
|||
|
|
\def\PYG@tok@ni{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.84,0.33,0.22}{##1}}}
|
|||
|
|
\def\PYG@tok@nl{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.13,0.44}{##1}}}
|
|||
|
|
\def\PYG@tok@nn{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
|
|||
|
|
\def\PYG@tok@no{\def\PYG@tc##1{\textcolor[rgb]{0.38,0.68,0.84}{##1}}}
|
|||
|
|
\def\PYG@tok@na{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@nb{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@nc{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
|
|||
|
|
\def\PYG@tok@nd{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.33,0.33,0.33}{##1}}}
|
|||
|
|
\def\PYG@tok@ne{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@nf{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}}
|
|||
|
|
\def\PYG@tok@si{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.44,0.63,0.82}{##1}}}
|
|||
|
|
\def\PYG@tok@s2{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@vi{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
|
|||
|
|
\def\PYG@tok@nt{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.45}{##1}}}
|
|||
|
|
\def\PYG@tok@nv{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
|
|||
|
|
\def\PYG@tok@s1{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@gp{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
|
|||
|
|
\def\PYG@tok@sh{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@ow{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@sx{\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
|
|||
|
|
\def\PYG@tok@bp{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@c1{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
|
|||
|
|
\def\PYG@tok@kc{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@c{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
|
|||
|
|
\def\PYG@tok@mf{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@err{\def\PYG@bc##1{\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{##1}}}
|
|||
|
|
\def\PYG@tok@kd{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@ss{\def\PYG@tc##1{\textcolor[rgb]{0.32,0.47,0.09}{##1}}}
|
|||
|
|
\def\PYG@tok@sr{\def\PYG@tc##1{\textcolor[rgb]{0.14,0.33,0.53}{##1}}}
|
|||
|
|
\def\PYG@tok@mo{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@mi{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
|
|||
|
|
\def\PYG@tok@kn{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@o{\def\PYG@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
|
|||
|
|
\def\PYG@tok@kr{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@s{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@kp{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@w{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
|
|||
|
|
\def\PYG@tok@kt{\def\PYG@tc##1{\textcolor[rgb]{0.56,0.13,0.00}{##1}}}
|
|||
|
|
\def\PYG@tok@sc{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@sb{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@k{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
|
|||
|
|
\def\PYG@tok@se{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
\def\PYG@tok@sd{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
|
|||
|
|
|
|||
|
|
\def\PYGZbs{\char`\\}
|
|||
|
|
\def\PYGZus{\char`\_}
|
|||
|
|
\def\PYGZob{\char`\{}
|
|||
|
|
\def\PYGZcb{\char`\}}
|
|||
|
|
\def\PYGZca{\char`\^}
|
|||
|
|
\def\PYGZsh{\char`\#}
|
|||
|
|
\def\PYGZpc{\char`\%}
|
|||
|
|
\def\PYGZdl{\char`\$}
|
|||
|
|
\def\PYGZti{\char`\~}
|
|||
|
|
% for compatibility with earlier versions
|
|||
|
|
\def\PYGZat{@}
|
|||
|
|
\def\PYGZlb{[}
|
|||
|
|
\def\PYGZrb{]}
|
|||
|
|
\makeatother
|
|||
|
|
|
|||
|
|
\begin{document}
|
|||
|
|
|
|||
|
|
\maketitle
|
|||
|
|
\tableofcontents
|
|||
|
|
\hypertarget{--doc-index}{}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Pelican est un generateur de blog simple codé en python
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
Écrivez vos articles directement dans votre éditeur favori (vim !) et
|
|||
|
|
directement en syntaxe reStructuredText ou Markdown ;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
Un outil simple en ligne de conmmande pour (re)générer le blog ;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
Sortie complètement statique, facile pour l'héberger n'importe où ;
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\chapter{Fonctionnalités}
|
|||
|
|
|
|||
|
|
Pelican supporte actuellement :
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
des articles de blog ;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
des pages statiques ;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
les commentaires via un service externe (\href{http://disqus.com}{disqus})
|
|||
|
|
Notez qu'étant bien un service externe assez pratique, vous ne gérez pas
|
|||
|
|
vous même les commentaires. Ce qui pourrait occasionner une perte de vos données;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
support de template (les templates sont crées avec Jinja 2 \href{http://jinjna.pocoo.org}{jinja2}) ;
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
génération optionnelle de vos pages et articles en pdf.
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\chapter{Pourquoi le nom ``Pelican'' ?}
|
|||
|
|
|
|||
|
|
Vous n'avez pas remarqué ? ''Pelican'' est un anagramme pour ``Calepin'' ;)
|
|||
|
|
|
|||
|
|
|
|||
|
|
\chapter{Code source}
|
|||
|
|
|
|||
|
|
Vous pouvez accéder au code source via mercurial sur \href{http://hg.notmyidea.org/pelican/}{http://hg.notmyidea.org/pelican/}
|
|||
|
|
ou via git à l'adresse \href{http://github.com/ametaireau/pelican/}{http://github.com/ametaireau/pelican/}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\chapter{Feedback !}
|
|||
|
|
|
|||
|
|
Si vous voulez de nouvelles fonctionnalitées pour Pelican, n'hésitez pas à me le dire,
|
|||
|
|
à cloner le dépôt, etc … C'est open source !!!
|
|||
|
|
|
|||
|
|
Contactez moi à ``alexis at notmyidea dot org'' pour quelques requêtes ou retour d'expérience que ce soi !
|
|||
|
|
|
|||
|
|
|
|||
|
|
\chapter{Documentation}
|
|||
|
|
|
|||
|
|
\resetcurrentobjects
|
|||
|
|
\hypertarget{--doc-getting\_started}{}
|
|||
|
|
|
|||
|
|
\section{Installation et mise à jour de Pelican}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Installation}
|
|||
|
|
|
|||
|
|
Il y a deux façons d’installer Pelican sur son système. La première est via l’utilitaire
|
|||
|
|
pip, l’autre façon est de télécharger Pelican via Github. Ici nous allons voir les deux
|
|||
|
|
façons de procéder.
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{Via pip}
|
|||
|
|
|
|||
|
|
Pour installer Pelican via pip, vous aurez besoin du paquet python-pip. puis installez Pelican
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|||
|
|
\PYG{c}{\PYGZsh{} apt-get install python-pip}
|
|||
|
|
\PYG{c}{\PYGZsh{} pip install pelican}
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{Via Github}
|
|||
|
|
|
|||
|
|
Pour installer Pelican en reprenant le code via Github, nous aurons besoin du paquet
|
|||
|
|
git-core pour récupérez les sources de Pelican. Puis nous procédons à l’installation
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=@\[\]]
|
|||
|
|
@# apt-get install git-core
|
|||
|
|
@$ git clone https://github.com/ametaireau/pelican.git
|
|||
|
|
@$ cd pelican
|
|||
|
|
@# python setup.py install
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Mises à jour}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{Via pip}
|
|||
|
|
|
|||
|
|
Rien de bien compliqué pour mettre à jour via pip
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=@\[\]]
|
|||
|
|
@$ cd votreRepertoireSource
|
|||
|
|
@$ pip install --upgrade pelican
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{Via Github}
|
|||
|
|
|
|||
|
|
C'est un peu plus long avec Github par contre
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=@\[\]]
|
|||
|
|
@$ cd votreRepertoireSource
|
|||
|
|
@$ git pull origin master
|
|||
|
|
@$ cd pelican
|
|||
|
|
@# python setup.py install
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
Vous aurez un message d’erreur si le module setuptools de python n’est pas installé.
|
|||
|
|
La manipulation est la suivante
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|||
|
|
\PYG{c}{\PYGZsh{} apt-get install python-setuptools}
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Alors, quelle méthode choisir ?}
|
|||
|
|
|
|||
|
|
Vous avez le choix entre deux méthodes, mais aussi entre deux concepts. La méthode
|
|||
|
|
de Github est la version de développement, où les modifications arrivent assez
|
|||
|
|
fréquemment sans être testées à fond. La version de pip est une version arrêtée avec un
|
|||
|
|
numéro de version dans laquelle vous aurez moins de bug. N’oubliez cependant pas
|
|||
|
|
que le projet est très jeune et manque donc de maturité. Si vous aimez avoir les toutes
|
|||
|
|
dernières versions utilisez Github, sinon penchez vous sur pip.
|
|||
|
|
|
|||
|
|
\resetcurrentobjects
|
|||
|
|
\hypertarget{--doc-settings}{}
|
|||
|
|
|
|||
|
|
\section{Settings}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Specifying the settings}
|
|||
|
|
|
|||
|
|
Pelican is configurable thanks to a configuration file, that you can pass to
|
|||
|
|
the command line:
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=@\[\]]
|
|||
|
|
@$ pelican -s path/to/your/settingsfile.py path
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
Settings are given as the form of a python module (a file). You can have an
|
|||
|
|
example by looking at \href{https://github.com/ametaireau/pelican/raw/master/samples/pelican.conf.py}{/samples/pelican.conf.py}
|
|||
|
|
|
|||
|
|
All the settings identifiers must be set in caps, otherwise they will not be
|
|||
|
|
processed.
|
|||
|
|
|
|||
|
|
Here are the available settings. Please note that all the settings you put in
|
|||
|
|
this file will be passed to the templates as well.
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Setting name
|
|||
|
|
} & \textbf{
|
|||
|
|
what it does ?
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
\emph{AUTHOR}
|
|||
|
|
&
|
|||
|
|
Default author (put your name)
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{CATEGORY\_FEED}
|
|||
|
|
&
|
|||
|
|
Where to put the atom categories feeds. default is
|
|||
|
|
\emph{feeds/\%s.atom.xml}, where \%s is the name of the
|
|||
|
|
category.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{CATEGORY\_FEED\_RSS}
|
|||
|
|
&
|
|||
|
|
Where to put the categories rss feeds. default is None
|
|||
|
|
(no rss)
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{CSS\_FILE}
|
|||
|
|
&
|
|||
|
|
To specify the CSS file you want to load, if it's not
|
|||
|
|
the default one (`main.css')
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{DEFAULT\_CATEGORY}
|
|||
|
|
&
|
|||
|
|
The default category to fallback on. \emph{misc} by default.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{DEFAULT\_LANG}
|
|||
|
|
&
|
|||
|
|
The default language to use. Default is `en'.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{DISPLAY\_PAGES\_ON\_MENU}
|
|||
|
|
&
|
|||
|
|
Display or not the pages on the menu of the template.
|
|||
|
|
Templates can follow or not this settings.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{FALLBACK\_ON\_FS\_DATE}
|
|||
|
|
&
|
|||
|
|
If True, pelican will use the file system dates infos
|
|||
|
|
(mtime) if it can't get informations from the
|
|||
|
|
metadata?
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{FEED}
|
|||
|
|
&
|
|||
|
|
relative url to output the atom feed. Default is
|
|||
|
|
\emph{feeds/all.atom.xml}
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{FEED\_RSS}
|
|||
|
|
&
|
|||
|
|
relative url to output the rss feed. Default is
|
|||
|
|
None (no rss)
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{JINJA\_EXTENSIONS}
|
|||
|
|
&
|
|||
|
|
A list of any Jinja2 extensions you want to use.
|
|||
|
|
Default is no extensions (the empty list).
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{KEEP\_OUTPUT\_DIRECTORY}
|
|||
|
|
&
|
|||
|
|
Keep the output directory and just update all the generated files.
|
|||
|
|
Default is to delete the output directory.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{MARKUP}
|
|||
|
|
&
|
|||
|
|
A list of available markup languages you want to use.
|
|||
|
|
For the moment, only available values are \emph{rst} and \emph{md}.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{OUTPUT\_PATH}
|
|||
|
|
&
|
|||
|
|
Where to output the generated files. Default to
|
|||
|
|
``output''
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{PATH}
|
|||
|
|
&
|
|||
|
|
path to look at for input files.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{PDF\_PROCESSOR}
|
|||
|
|
&
|
|||
|
|
Put True if you want to have PDF versions of your
|
|||
|
|
documents. You will need to install \emph{rst2pdf}.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{REVERSE\_ARCHIVE\_ORDER}
|
|||
|
|
&
|
|||
|
|
Reverse the archives order. (True makes it in
|
|||
|
|
descending order: the newer first)
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{SITEURL}
|
|||
|
|
&
|
|||
|
|
base URL of your website.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{SITENAME}
|
|||
|
|
&
|
|||
|
|
Your site name,
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{STATIC\_PATHS}
|
|||
|
|
&
|
|||
|
|
The static paths you want to have accessible on the
|
|||
|
|
output path ``static''. By default, pelican will copy
|
|||
|
|
the `images' folder to the output folder.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{STATIC\_THEME\_PATHS}
|
|||
|
|
&
|
|||
|
|
Static theme paths you want to copy. Default values
|
|||
|
|
is \emph{static}, but if your theme have others static paths,
|
|||
|
|
you can put them here.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{THEME}
|
|||
|
|
&
|
|||
|
|
theme to use to product the output. can be the
|
|||
|
|
complete static path to a theme folder, or chosen
|
|||
|
|
between the list of default themes (see below)
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{TRANSLATION\_FEED}
|
|||
|
|
&
|
|||
|
|
Where to put the RSS feed for translations. Default
|
|||
|
|
is feeds/all-\%s.atom.xml where \%s is the name of the
|
|||
|
|
lang.
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Themes}
|
|||
|
|
|
|||
|
|
3 themes are available. You can specify them using the \emph{-t} option:
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
notmyidea
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
simple (a synonym for ``full text'' :)
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
martyalchin
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
You can define your own theme too, and specify it's emplacement in the same
|
|||
|
|
way (be sure to specify the full absolute path to it).
|
|||
|
|
|
|||
|
|
Here is \href{http://alexis.notmyidea.org/pelican/themes.html}{a guide on how to create your theme}
|
|||
|
|
|
|||
|
|
The \emph{notmyidea} theme can make good use of the following settings. I recommend
|
|||
|
|
to use them too in your themes.
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Setting name
|
|||
|
|
} & \textbf{
|
|||
|
|
what it does ?
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
\emph{DISQUS\_SITENAME}
|
|||
|
|
&
|
|||
|
|
Pelican can handle disqus comments, specify the
|
|||
|
|
sitename you've filled in on disqus
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{GITHUB\_URL}
|
|||
|
|
&
|
|||
|
|
Your github URL (if you have one), it will then
|
|||
|
|
use it to create a github ribbon.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{GOOGLE\_ANALYTICS}
|
|||
|
|
&
|
|||
|
|
`UA-XXXX-YYYY' to activate google analytics.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{LINKS}
|
|||
|
|
&
|
|||
|
|
A list of tuples (Title, Url) for links to appear on
|
|||
|
|
the header.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{SOCIAL}
|
|||
|
|
&
|
|||
|
|
A list of tuples (Title, Url) to appear in the ``social''
|
|||
|
|
section.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
\emph{TWITTER\_USERNAME}
|
|||
|
|
&
|
|||
|
|
Allows to add a button on the articles to tweet about
|
|||
|
|
them. Add you twitter username if you want this
|
|||
|
|
button to appear.
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
In addition, you can use the ``wide'' version of the \emph{notmyidea} theme, by
|
|||
|
|
adding that in your configuration:
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|||
|
|
\PYG{n}{CSS\PYGZus{}FILE} \PYG{o}{=} \PYG{l+s}{"}\PYG{l+s}{wide.css}\PYG{l+s}{"}
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
\resetcurrentobjects
|
|||
|
|
\hypertarget{--doc-themes}{}
|
|||
|
|
|
|||
|
|
\hypertarget{theming-pelican}{}\section{How to create themes for pelican}
|
|||
|
|
|
|||
|
|
Pelican uses the great \href{http://jinjna.pocoo.org}{jinja2} templating engine to
|
|||
|
|
generate it's HTML output. The jinja2 syntax is really simple. If you want to
|
|||
|
|
create your own theme, feel free to take inspiration from the ``simple'' theme,
|
|||
|
|
which is available \href{https://github.com/ametaireau/pelican/tree/master/pelican/themes/simple/templates}{here}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Structure}
|
|||
|
|
|
|||
|
|
To make your own theme, you must follow the following structure:
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=@\[\]]
|
|||
|
|
├-- static
|
|||
|
|
@textbar[] ├-- css
|
|||
|
|
@textbar[] └-- images
|
|||
|
|
└-- templates
|
|||
|
|
├-- archives.html // to display archives
|
|||
|
|
├-- article.html // processed for each article
|
|||
|
|
├-- categories.html // must list all the categories
|
|||
|
|
├-- category.html // processed for each category
|
|||
|
|
├-- index.html // the index. List all the articles
|
|||
|
|
├-- page.html // processed for each page
|
|||
|
|
├-- tag.html // processed for each tag
|
|||
|
|
└-- tags.html // must list all the tags. Can be a tag cloud.
|
|||
|
|
\end{Verbatim}
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
\emph{static} contains all the static content. It will be copied on the output
|
|||
|
|
\emph{theme/static} folder then. I've put the css and image folders, but they are
|
|||
|
|
just examples. Put what you need here.
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
\emph{templates} contains all the templates that will be used to generate the content.
|
|||
|
|
I've just put the mandatory templates here, you can define your own if it helps
|
|||
|
|
you to organize yourself while doing the theme.
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Templates and variables}
|
|||
|
|
|
|||
|
|
It's using a simple syntax, that you can embbed into your html pages.
|
|||
|
|
This document describes which templates should exists on a theme, and which
|
|||
|
|
variables will be passed to each template, while generating it.
|
|||
|
|
|
|||
|
|
All templates will receive the variables defined in your settings file, if they
|
|||
|
|
are in caps. You can access them directly.
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{Common variables}
|
|||
|
|
|
|||
|
|
All of those settings will be given to all templates.
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Variable
|
|||
|
|
} & \textbf{
|
|||
|
|
Description
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
articles
|
|||
|
|
&
|
|||
|
|
That's the list of articles, ordsered desc. by date
|
|||
|
|
all the elements are \emph{Article} objects, so you can
|
|||
|
|
access their properties (e.g. title, summary, author
|
|||
|
|
etc.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
dates
|
|||
|
|
&
|
|||
|
|
The same list of article, but ordered by date,
|
|||
|
|
ascending
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
tags
|
|||
|
|
&
|
|||
|
|
A dict containing each tags (keys), and the list of
|
|||
|
|
relative articles.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
categories
|
|||
|
|
&
|
|||
|
|
A dict containing each category (keys), and the
|
|||
|
|
list of relative articles.
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
pages
|
|||
|
|
&
|
|||
|
|
The list of pages
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{category.html}
|
|||
|
|
|
|||
|
|
This template will be processed for each of the existing categories, and will
|
|||
|
|
finally remain at output/category/\emph{category\_name}.html.
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Variable
|
|||
|
|
} & \textbf{
|
|||
|
|
Description
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
articles
|
|||
|
|
&
|
|||
|
|
The articles of this category
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
category
|
|||
|
|
&
|
|||
|
|
The name of the category being processed
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{article.html}
|
|||
|
|
|
|||
|
|
This template will be processed for each article. .html files will be outputed
|
|||
|
|
in output/\emph{article\_name}.html. Here are the specific variables it gets.
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Variable
|
|||
|
|
} & \textbf{
|
|||
|
|
Description
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
article
|
|||
|
|
&
|
|||
|
|
The article object to be displayed
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
category
|
|||
|
|
&
|
|||
|
|
The name of the category of the current article
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsubsection{tag.html}
|
|||
|
|
|
|||
|
|
For each tag, this template will be processed. It will create .html files in
|
|||
|
|
/output/tag/\emph{tag\_name}.html
|
|||
|
|
|
|||
|
|
\begin{tabulary}{\textwidth}{|L|L|}
|
|||
|
|
\hline
|
|||
|
|
\textbf{
|
|||
|
|
Variable
|
|||
|
|
} & \textbf{
|
|||
|
|
Description
|
|||
|
|
}\\
|
|||
|
|
\hline
|
|||
|
|
|
|||
|
|
tag
|
|||
|
|
&
|
|||
|
|
The name of the tag being processed
|
|||
|
|
\\
|
|||
|
|
|
|||
|
|
articles
|
|||
|
|
&
|
|||
|
|
Articles related to this tag
|
|||
|
|
\\
|
|||
|
|
\hline
|
|||
|
|
\end{tabulary}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\resetcurrentobjects
|
|||
|
|
\hypertarget{--doc-internals}{}
|
|||
|
|
|
|||
|
|
\section{Pelican internals}
|
|||
|
|
|
|||
|
|
This section describe how pelican is working internally. As you'll see, it's
|
|||
|
|
quite simple, but a bit of documentation doesn't hurt :)
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Overall structure}
|
|||
|
|
|
|||
|
|
What \emph{pelican} does, is taking a list of files, and processing them, to some
|
|||
|
|
sort of output. Usually, the files are restructured text and markdown files,
|
|||
|
|
and the output is a blog, but it can be anything you want.
|
|||
|
|
|
|||
|
|
I've separated the logic in different classes and concepts:
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
\emph{writers} are responsible of all the writing process of the
|
|||
|
|
files. It's writing .html files, RSS feeds and so on. Since those operations
|
|||
|
|
are commonly used, the object is created once, and then passed to the
|
|||
|
|
generators.
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
\emph{readers} are used to read from various formats (Markdown, and Restructured
|
|||
|
|
Text for now, but the system is extensible). Given a file, they return
|
|||
|
|
metadata (author, tags, category etc) and content (HTML formated)
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
\emph{generators} generate the different outputs. For instance, pelican comes with
|
|||
|
|
\emph{ArticlesGenerator} and \emph{PageGenerator}, into others. Given
|
|||
|
|
a configurations, they can do whatever they want. Most of the time it's
|
|||
|
|
generating files from inputs.
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
\emph{pelican} also uses \emph{templates}, so it's easy to write you own theme. The
|
|||
|
|
syntax is \emph{jinja2}, and, trust me, really easy to learn, so don't hesitate
|
|||
|
|
a second.
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{How to implement a new reader ?}
|
|||
|
|
|
|||
|
|
There is an awesome markup language you want to add to pelican ?
|
|||
|
|
Well, the only thing you have to do is to create a class that have a \emph{read}
|
|||
|
|
method, that is returning an HTML content and some metadata.
|
|||
|
|
|
|||
|
|
Take a look to the Markdown reader:
|
|||
|
|
|
|||
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|||
|
|
\PYG{k}{class} \PYG{n+nc}{MarkdownReader}\PYG{p}{(}\PYG{n+nb}{object}\PYG{p}{)}\PYG{p}{:}
|
|||
|
|
|
|||
|
|
\PYG{k}{def} \PYG{n+nf}{read}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{filename}\PYG{p}{)}\PYG{p}{:}
|
|||
|
|
\PYG{l+s+sd}{"""Parse content and metadata of markdown files"""}
|
|||
|
|
\PYG{n}{text} \PYG{o}{=} \PYG{n+nb}{open}\PYG{p}{(}\PYG{n}{filename}\PYG{p}{)}
|
|||
|
|
\PYG{n}{md} \PYG{o}{=} \PYG{n}{Markdown}\PYG{p}{(}\PYG{n}{extensions} \PYG{o}{=} \PYG{p}{[}\PYG{l+s}{'}\PYG{l+s}{meta}\PYG{l+s}{'}\PYG{p}{,} \PYG{l+s}{'}\PYG{l+s}{codehilite}\PYG{l+s}{'}\PYG{p}{]}\PYG{p}{)}
|
|||
|
|
\PYG{n}{content} \PYG{o}{=} \PYG{n}{md}\PYG{o}{.}\PYG{n}{convert}\PYG{p}{(}\PYG{n}{text}\PYG{p}{)}
|
|||
|
|
|
|||
|
|
\PYG{n}{metadatas} \PYG{o}{=} \PYG{p}{\PYGZob{}}\PYG{p}{\PYGZcb{}}
|
|||
|
|
\PYG{k}{for} \PYG{n}{name}\PYG{p}{,} \PYG{n}{value} \PYG{o+ow}{in} \PYG{n}{md}\PYG{o}{.}\PYG{n}{Meta}\PYG{o}{.}\PYG{n}{items}\PYG{p}{(}\PYG{p}{)}\PYG{p}{:}
|
|||
|
|
\PYG{k}{if} \PYG{n}{name} \PYG{o+ow}{in} \PYG{n}{\PYGZus{}METADATAS\PYGZus{}FIELDS}\PYG{p}{:}
|
|||
|
|
\PYG{n}{meta} \PYG{o}{=} \PYG{n}{\PYGZus{}METADATAS\PYGZus{}FIELDS}\PYG{p}{[}\PYG{n}{name}\PYG{p}{]}\PYG{p}{(}\PYG{n}{value}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{)}
|
|||
|
|
\PYG{k}{else}\PYG{p}{:}
|
|||
|
|
\PYG{n}{meta} \PYG{o}{=} \PYG{n}{value}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}
|
|||
|
|
\PYG{n}{metadatas}\PYG{p}{[}\PYG{n}{name}\PYG{o}{.}\PYG{n}{lower}\PYG{p}{(}\PYG{p}{)}\PYG{p}{]} \PYG{o}{=} \PYG{n}{meta}
|
|||
|
|
\PYG{k}{return} \PYG{n}{content}\PYG{p}{,} \PYG{n}{metadatas}
|
|||
|
|
\end{Verbatim}
|
|||
|
|
|
|||
|
|
Simple isn't it ?
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{How to implement a new generator ?}
|
|||
|
|
|
|||
|
|
Generators have basically two important methods. You're not forced to create
|
|||
|
|
both, only the existing ones will be called.
|
|||
|
|
\begin{itemize}
|
|||
|
|
\item {}
|
|||
|
|
\emph{generate\_context}, that is called in a first place, for all the generators.
|
|||
|
|
Do whatever you have to do, and update the global context if needed. This
|
|||
|
|
context is shared between all generators, and will be passed to the
|
|||
|
|
templates. For instance, the \emph{PageGenerator} \emph{generate\_context} method find
|
|||
|
|
all the pages, transform them into objects, and populate the context with
|
|||
|
|
them. Be careful to \emph{not} output anything using this context at this stage,
|
|||
|
|
as it is likely to change by the effect of others generators.
|
|||
|
|
|
|||
|
|
\item {}
|
|||
|
|
\emph{generate\_output} is then called. And guess what is it made for ? Oh,
|
|||
|
|
generating the output :) That's here that you may want to look at the context
|
|||
|
|
and call the methods of the \emph{writer} object, that is passed at the first
|
|||
|
|
argument of this function. In the \emph{PageGenerator} example, this method will
|
|||
|
|
look at all the pages recorded in the global context, and output a file on
|
|||
|
|
the disk (using the writer method \emph{write\_file}) for each page encountered.
|
|||
|
|
|
|||
|
|
\end{itemize}
|
|||
|
|
|
|||
|
|
\resetcurrentobjects
|
|||
|
|
\hypertarget{--doc-faq}{}
|
|||
|
|
|
|||
|
|
\section{Frequently Asked Questions (FAQ)}
|
|||
|
|
|
|||
|
|
Here is a summary of the frequently asked questions for pelican.
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{Is it mandatory to have a configuration file ?}
|
|||
|
|
|
|||
|
|
No, it's not. Configurations files are just an easy way to configure pelican.
|
|||
|
|
For the basic operations, it's possible to specify options while invoking
|
|||
|
|
pelican with the command line (see \emph{pelican --help} for more informations about
|
|||
|
|
that)
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{I'm creating my own theme, how to use pygments ?}
|
|||
|
|
|
|||
|
|
Pygment add some classes to the generated content, so the theming of your theme
|
|||
|
|
will be done thanks to a css file. You can have a look to the one proposed by
|
|||
|
|
default \href{http://pygments.org/demo/15101/}{on the project website}
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{How do I create my own theme ?}
|
|||
|
|
|
|||
|
|
Please refer yourself to \hyperlink{theming-pelican}{\emph{How to create themes for pelican}}.
|
|||
|
|
|
|||
|
|
|
|||
|
|
\subsection{How can I help ?}
|
|||
|
|
|
|||
|
|
You have different options to help. First, you can use pelican, and report any
|
|||
|
|
idea or problem you have on \href{http://github.com/ametaireau/pelican/issues}{the bugtracker}.
|
|||
|
|
|
|||
|
|
If you want to contribute, please have a look to \href{https://github.com/ametaireau/pelican/}{the git repository}, fork it, add your changes and do
|
|||
|
|
a pull request, I'll review them as soon as possible.
|
|||
|
|
|
|||
|
|
You can also contribute by creating themes, and making the documentation
|
|||
|
|
better.
|
|||
|
|
|
|||
|
|
|
|||
|
|
\renewcommand{\indexname}{Module Index}
|
|||
|
|
\printmodindex
|
|||
|
|
\renewcommand{\indexname}{Index}
|
|||
|
|
\printindex
|
|||
|
|
\end{document}
|