catala/doc/syntax/syntax_fr.tex
Louis Gesbert a6911a4cd5 Cheat-sheet: remove need for exotic latex package
And add required latex fonts
2024-06-27 17:01:55 +02:00

753 lines
14 KiB
TeX

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage{calc}
\usepackage{ifthen}
\usepackage{epsfig}
%\usepackage{bookman}
%\usepackage{booktabs}
\usepackage{fontspec}
\usepackage{upquote} % Uncurly the quotes
\usepackage{etoolbox} % for backquote fix
\usepackage{mdframed} % nice frames
\usepackage[nobottomtitles]{titlesec} % better titles
\usepackage{enumitem}
\usepackage{minted}
\usepackage[a4paper,landscape,margin=1cm,includehead,headsep=2ex,nofoot]{geometry}
\usepackage{fancyhdr}
\usepackage{array}
\usepackage[document]{ragged2e}
\usemintedstyle{tango}
\hyphenpenalty=10000
\exhyphenpenalty=10000
\setsansfont{DejaVu Sans}[Scale=0.9]
\setmonofont{DejaVu Sans Mono}[Scale=0.9]
\setlist[itemize]{noitemsep, topsep=0pt}
\renewcommand{\MintedPygmentize}{../../_build/default/compiler/catala.exe pygmentize}
% fancyvrb and mdframed stuff
\newmdenv[bottomline=false,rightline=false]{topleft}
\newmdenv[topline=false,leftline=false]{bottomright}
\DefineVerbatimEnvironment{Verbacorner}{Verbatim}{}
\surroundwithmdframed[bottomline=false,rightline=false]{Verbacorner}
\fvset{commandchars=@\{\}}
\ifthenelse{\lengthtest { \paperwidth = 11in}}
{ \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} }
{\ifthenelse{ \lengthtest{ \paperwidth = 297mm}}
{\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} }
{\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} }
}
\pagestyle{empty}
% Don't print section numbers
\setcounter{secnumdepth}{0}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex}
\pagestyle{fancy}
\newcommand{\makeheader}[3]{
\fancyhead[L]{
\begin{minipage}{30pt}
\vspace{-3pt}
\includegraphics[width=\textwidth]{logo.pdf}
\end{minipage}
}
\fancyhead[C]{
\LARGE{#1}
}
\fancyhead[R]{
{\scriptsize
#2 $\cdot$ Révision \#1 $\cdot$ \copyright\ \the\year$\quad$
%% \begin{minipage}{30pt}
%% \vspace{-3pt}
%% \includegraphics[width=\textwidth]{logo.pdf} %defined at bottom
%% \end{minipage}
}}
\fancyfoot[L]{}
\fancyfoot[C]{}
\fancyfoot[R]{}
}
\renewcommand\headrule{}
\newenvironment{absolutelynopagebreak}
{\par\nobreak\vfil\penalty0\vfilneg
\vtop\bgroup}
{\par\xdef\tpd{\the\prevdepth}\egroup
\prevdepth=\tpd}
\newcommand{\vb}{\usefont{T1}{DejaVuSansMono-TLF}{b}{n}}
\newenvironment{libcomments}{\begin{itemize}[topsep=-10000pt]}{\end{itemize}}
\setlength{\headheight}{20.1pt}
\setlength{\headsep}{10pt}
\renewcommand{\familydefault}{\sfdefault} % everything sans-serif
% font size -> set to equivalent to footnotesize of 10 pt
% it affect only the \\normalsize command, all are still relative to default's
% article one (10pt)
\newcommand\articlenormalsize{\fontsize{10pt}{12pt}\selectfont}
\renewcommand\normalsize{\footnotesize}
% redefine sections padding
\makeatletter
\renewcommand{\section}{\@startsection{section}{1}{0mm}%
{-1ex plus -.5ex minus -.2ex}%
{1ex}%
{\normalfont\articlenormalsize\bfseries}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{4mm}%
{-1ex}%
{0.5ex}%
{\normalfont\articlenormalsize\bfseries}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{16mm}%
{-1ex plus -.5ex minus -.2ex}%
{1ex plus .2ex}%
{\normalfont\small\bfseries}}
\makeatother
%\pagestyle{empty}
% set section counter to 0
\setcounter{secnumdepth}{0}
% Text at right
%\raggedright
\renewcommand{\baselinestretch}{0.9}
% Set up the interline space in tables
\renewcommand{\arraystretch}{0.0}
\linespread{0.85}
% https://github.com/gpoore/minted/issues/82
\makeatletter
\newenvironment{catala}{%
\VerbatimEnvironment
\let\FV@ListVSpace\relax
\begin{minted}[autogobble]{catala_fr}}%
{\end{minted}}
\makeatother
\setlength{\columnsep}{12pt}
\setlength{\columnseprule}{.1pt}
\begin{document}
\makeheader{\MakeUppercase{La syntaxe de Catala} \hspace{2em}\small version française}{v0.10.0}{1}
% warning: this is repeated for p.2
% \begin{center}
% 2022-12-15
% \hfill
% {\Huge\bfseries\sffamily
% Catala Syntax Cheat Sheet}
% \hfill
% v.0.8.0
% \end{center}
% \hrule
\null
\begin{multicols}{3}
\newlength\cola
\setlength\cola{\dimexpr .65\columnwidth -2\tabcolsep}
\newlength\colb
\setlength\colb{\dimexpr .35\columnwidth -2\tabcolsep}
\section{Programmation littéraire}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
# Titre
### Sous-sous-titre
\end{catala}
& En-têtes
\\
\begin{catala}
# Article 1 | JORFARTI000012345678
# Article 2 | LEGIARTI000012345678
# Décision 3 | CETATEXT000012345678
\end{catala}
& Référence au journal officiel
\\
\begin{catala}
```catala ```catala-metadata
``` ```
\end{catala}
& Bloc de code / métadonnées
\\
\begin{catala}
> Module Mdl
\end{catala}
& Déclaration de mod.
\\
\begin{catala}
> Usage de Mdl en tant que M
\end{catala}
& Import de module
\\
\begin{catala}
> Inclusion: foo.catala_en
\end{catala}
& Inclusion textuelle
\\
\end{tabular}
\newcommand*\FancyVerbStartString{\PYG{l+s}{```catala}}
\newcommand*\FancyVerbStopString{\PYG{l+s}{```}}
\section{Littéraux et types}
\begin{tabular}{@{}p{\cola}p{\colb}@{}}
\begin{catala}
```catala
vrai faux
```
\end{catala}
& \begin{catala}
```catala
booléen
```
\end{catala}
\\
\begin{catala}
```catala
65536
```
\end{catala}
& \begin{catala}
```catala
entier
```
\end{catala}
\\
\begin{catala}
```catala
65536,262144 37%
```
\end{catala}
& \begin{catala}
```catala
décimal
```
\end{catala}
\\
\begin{catala}
```catala
1 234 567,89€
```
\end{catala}
& \begin{catala}
```catala
argent
```
\end{catala}
\\
\begin{catala}
```catala
|2024-04-01|
```
\end{catala}
& \begin{catala}
```catala
date
```
\end{catala}
\\
\begin{catala}
```catala
254 jour 4 mois 1 an
```
\end{catala}
& \begin{catala}
```catala
durée
```
\end{catala}
\\
\begin{catala}
```catala
[ 12; 24; 36 ]
```
\end{catala}
& \begin{catala}
```catala
liste de entier
```
\end{catala}
\\
\begin{catala}
```catala
(|2024-04-01|, 30€, 1%)
```
\end{catala}
& \begin{catala}
```catala
(date,argent,décimal)
```
\end{catala}
\\
\begin{catala}
```catala
f de x, y égal à
x * y / 12,0€
```
\end{catala}
& \begin{catala}
```catala
décimal dépend de
x contenu argent,
y contenu décimal
```
\end{catala}
\\
\begin{catala}
```catala
Struct1 { -- chp1: 9 -- chp2: 7% }
```
\end{catala}
& \begin{catala}
```catala
Struct1
```
\end{catala}
\\
\begin{catala}
```catala
Cas1 contenu 12 Cas2
```
\end{catala}
& \begin{catala}
```catala
Énum1
```
\end{catala}
\\
\end{tabular}
\section{Opérations}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
```catala
non a a et b
a ou b # "ou à défaut"
a ou bien b # ou exclusif
```
\end{catala}
& Opérateurs logiques
\\
\begin{catala}
```catala
- a a + b a - b
a * b a / b
```
\end{catala}
& Arithmétique
\\
\begin{catala}
```catala
a = b a < b a <= b
a != b a > b a >= b
```
\end{catala}
& Comparaisons
\\
\begin{catala}
```catala
décimal de 44
argent de 23,15
```
\end{catala}
& Conversions
\\
\begin{catala}
```catala
arrondi de 9,99€
```
\end{catala}
& Arrondis
\\
\begin{catala}
```catala
accès_année de ...
premier_jour_du_mois de ...
```
\end{catala}
& Éléments de dates
\\
\begin{catala}
```catala
a +! b a +. b a +€ b a +^ b
# entier décimal argent durée
```
\end{catala}
& Opérateurs à types explicites
\\
\end{tabular}
\section{Déclaration des métadonnées}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
```catala
déclaration structure Struct1:
donnée chp1 contenu entier
donnée chp2 contenu décimal
```
\end{catala}
& Déclaration de structure
\\
\begin{catala}
```catala
déclaration énumération Énum1:
-- Cas1 contenu entier
-- Cas2
```
\end{catala}
& Déclaration d'énumération
\\
\begin{catala}
```catala
déclaration champ d'application Chp1:
interne var1 contenu entier
interne var2 condition
sub1 champ d'application Chp0
```
\end{catala}
& Déclaration de champ d'application
\\
\begin{catala}
```catala
interne var1 contenu ...
résultat var3 contenu ...
entrée var4 contenu ...
entrée résultat var5 contenu ...
contexte var6 contenu ...
contexte résultat var7 contenu ...
résultat sub2 scope Scope0
```
\end{catala}
& Qualificateurs d'entrée-sortie
\\
\begin{catala}
```catala
interne var1 contenu ...
état avant
état après
```
\end{catala}
& Transitions d'état
\\
\begin{catala}
```catala
déclaration const contenu décimal
égal à 17,1
```
\end{catala}
& Définition globale
\\
\begin{catala}
```catala
déclaration carré contenu décimal
dépend de x contenu décimal
égal à x * x
```
\end{catala}
& Définition de fonction globale
\\
\end{tabular}
\section{Expressions}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
```catala
soit x égal à 36 - 5 dans ...
```
\end{catala}
& Définition locale
\\
\begin{catala}
```catala
selon expr sous forme
-- Cas1 de x : ...
-- Cas2 : ...
-- n'importe quel : ...
```
\end{catala}
& Filtrage par motif
\\
\begin{catala}
```catala
expr sous forme Cas1
expr sous forme Cas1 de x
et x >= 2
```
\end{catala}
& Test de filtrage\newline avec variable optionnelle
\\
\begin{catala}
```catala
struc1 mais en remplaçant
{ -- fld2: 8% }
```
\end{catala}
& Remplacement de champs
\\
\begin{catala}
```catala
struc1.chp2 tuple1.2
sub1.var0
```
\end{catala}
& Champ, élément de n-uplet, var. de s/s-champ
\\
\begin{catala}
```catala
f de 44,50€, 1/3
```
\end{catala}
& Appel de fonction
\\
\begin{catala}
```catala
résultat de Chp1
avec { -- chp1: 9 -- chp2: 15% }
```
\end{catala}
& Appel direct de champ d'application
\\
\begin{catala}
```catala
si ... alors ... sinon ...
```
\end{catala}
& Branchement
\\
\begin{catala}
```catala
var1 état avant
```
\end{catala}
& Accès à un état
\\
\end{tabular}
\columnbreak
\section{Définition de champ d'application}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
```catala
champ d'application Chp1: ...
```
\end{catala}
& Utilisation
\\
\begin{catala}
```catala
champ d'application Chp1
sous condition var1 >= 2: ...
```
\end{catala}
& Avec condition générale
\\
\begin{catala}
```catala
définition var1 égal à ...
```
\end{catala}
& Déf. inconditionnelle
\\
\begin{catala}
```catala
définition var1
sous condition ...
conséquence égal à ...
```
\end{catala}
& Définition conditionnelle
\\
\begin{catala}
```catala
règle var2
sous condition var1 >= 2
conséquence rempli
```
\end{catala}
& Règle\newline(définition de condition)
\\
\begin{catala}
```catala
conséquence non rempli
```
\end{catala}
& Règle négative
\\
\begin{catala}
```catala
définition f de x, y égal à ...
```
\end{catala}
& Déf./règle fonction
\\
\begin{catala}
```catala
étiquette étq1 définition var1 ...
```
\end{catala}
& Déf./règle étiquetée
\\
\begin{catala}
```catala
exception étq1 définition var1 ...
```
\end{catala}
& Exc. à déf. étiquetée
\\
\begin{catala}
```catala
exception définition var1 ...
```
\end{catala}
& Exception à implicite
\\
\begin{catala}
```catala
définition var1
état avant
égal à ...
```
\end{catala}
& Définition d'états
\\
\begin{catala}
```catala
assertion ...
```
\end{catala}
& Assertion
\\
\begin{catala}
```catala
date arrondi décroissant
```
\end{catala}
& Mode arrondi dates
\\
\end{tabular}
\vfill
\section{Opérations sur les listes}
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
\begin{catala}
```catala
lst contient 3
```
\end{catala}
& Test de présence
\\
\begin{catala}
```catala
existe x parmi lst tel que x > 2
```
\end{catala}
& Test d'existence
\\
\begin{catala}
```catala
pour tout x parmi lst on a x > 2
```
\end{catala}
& Test pour tout
\\
\begin{catala}
```catala
(x + 2) pour x parmi lst
```
\end{catala}
& Application un-à-un
\\
\begin{catala}
```catala
liste de x parmi lst tel que x > 2
```
\end{catala}
& Filtrage
\\
\begin{catala}
```catala
(x - 2) pour x parmi lst
tel que x > 2
```
\end{catala}
& Filtrage + application
\\
\begin{catala}
```catala
(x + y) pour (x, y) parmi (lst1, lst2)
```
\end{catala}
& Multiple mapping
\\
\begin{catala}
```catala
lst1 ++ lst2
```
\end{catala}
& Réunion
\\
\begin{catala}
```catala
somme entier de lst
```
\end{catala}
& Agrégation
\\
\begin{catala}
```catala
nombre de lst
```
\end{catala}
& Comptage
\\
\begin{catala}
```catala
maximum de lst
ou si liste vide alors -1
```
\end{catala}
& Extremums
\\
\begin{catala}
```catala
contenu de x parmi lst
tel que x * x est minimum
ou si liste vide alors -1
```
\end{catala}
& Élément selon extremum
\\
\end{tabular}
\end{multicols}
\end{document}