mirror of
https://github.com/CatalaLang/catala.git
synced 2024-09-20 08:47:14 +03:00
771 lines
15 KiB
TeX
771 lines
15 KiB
TeX
\documentclass{article}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{multicol}
|
|
\usepackage{calc}
|
|
\usepackage{ifthen}
|
|
\usepackage{epsfig}
|
|
%\usepackage{bookman}
|
|
%\usepackage{booktabs}
|
|
\usepackage{upquote} % Uncurly the quotes
|
|
\usepackage{etoolbox} % for backquote fix
|
|
\usepackage[scaled=0.9]{DejaVuSans}
|
|
\usepackage[scaled=0.9]{DejaVuSansMono}
|
|
\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{hyperref}
|
|
\usepackage{array}
|
|
\usepackage[none]{hyphenat}
|
|
\usepackage[document]{ragged2e}
|
|
|
|
\usemintedstyle{tango}
|
|
|
|
\setlist[itemize]{noitemsep, topsep=0pt}
|
|
|
|
\renewcommand{\MintedPygmentize}{../../_build/default/compiler/catala.exe pygmentize}
|
|
|
|
% backquote dejavu fix
|
|
\makeatletter
|
|
\chardef\straightquote@code=\catcode`'
|
|
\chardef\backquote@code=\catcode``
|
|
\catcode`'=\active \catcode``=\active
|
|
\patchcmd{\@noligs}
|
|
{\textasciigrave}
|
|
{\fixedtextasciigrave}
|
|
{}{}
|
|
\newcommand{\fixedtextasciigrave}{%
|
|
\makebox[.5em]{\fontencoding{TS1}\fontfamily{fvs}\selectfont\textasciigrave}% Vera Sans
|
|
}
|
|
\catcode\lq\'=\straightquote@code
|
|
\catcode\lq\`=\backquote@code
|
|
\makeatletter
|
|
|
|
% 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}
|
|
|
|
%% \makeatletter
|
|
%% \renewcommand{\section}{\@startsection{section}{1}{0mm}%
|
|
%% {-1ex plus -.5ex minus -.2ex}%
|
|
%% {0.5ex plus .2ex}%x
|
|
%% {\normalfont\large\bfseries}}
|
|
%% \renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}%
|
|
%% {-1ex plus -.5ex minus -.2ex}%
|
|
%% {0.5ex plus .2ex}%
|
|
%% {\normalfont\normalsize\bfseries}}
|
|
%% \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}%
|
|
%% {-1ex plus -.5ex minus -.2ex}%
|
|
%% {1ex plus .2ex}%
|
|
%% {\normalfont\small\bfseries}}
|
|
%% \makeatother
|
|
|
|
%% \makeatletter
|
|
%% \let\origsection\section
|
|
%% \renewcommand\section{\vspace{5em}\origsection}
|
|
%% \makeatother
|
|
|
|
% 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
|
|
|
|
%Url handling
|
|
\hypersetup{
|
|
colorlinks=true,
|
|
urlcolor=black,
|
|
linkcolor=black,
|
|
citecolor=black
|
|
}
|
|
|
|
% 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}
|
|
|
|
% 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.8.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}
|
|
> Inclusion: foo.catala_en
|
|
\end{catala}
|
|
& Inclusion de fichier
|
|
\\
|
|
\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
|
|
|2021-01-31|
|
|
```
|
|
\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
|
|
collection entier
|
|
```
|
|
\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{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.chp2
|
|
```
|
|
\end{catala}
|
|
& Champ de structure
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
f de 44,50€, 1/3
|
|
```
|
|
\end{catala}
|
|
& Appel de fonction
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
ss_ch1.var0
|
|
```
|
|
\end{catala}
|
|
& Var. de s/s-ch. d'app.
|
|
\\
|
|
\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
|
|
\\
|
|
\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
|
|
ss_ch1 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 ...
|
|
```
|
|
\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
|
|
date arrondi croissant
|
|
# ou décroissant
|
|
```
|
|
\end{catala}
|
|
& Mode arrondi dates
|
|
\\
|
|
\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{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_jour de ...
|
|
accès_mois de ...
|
|
accès_année de ...
|
|
```
|
|
\end{catala}
|
|
& Éléments de dates
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
a +! b # entier
|
|
a +. b # décimal
|
|
a +€ b # argent
|
|
a +^ b # durée
|
|
```
|
|
\end{catala}
|
|
& Opérateurs à types explicites
|
|
\\
|
|
\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 é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
|
|
\\
|
|
\end{tabular}
|
|
|
|
\section{Opérations sur les collections}
|
|
|
|
\begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}}
|
|
\begin{catala}
|
|
```catala
|
|
coll contient 3
|
|
```
|
|
\end{catala}
|
|
& Test de présence
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
nombre de coll
|
|
```
|
|
\end{catala}
|
|
& Cardinal
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
existe x parmi coll tel que x >= 2
|
|
```
|
|
\end{catala}
|
|
& Test d'existence
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
pour tout x parmi coll on a x >= 2
|
|
```
|
|
\end{catala}
|
|
& Test pour tout
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
(x + 2) pour x parmi coll
|
|
```
|
|
\end{catala}
|
|
& Application un-à-un
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
x parmi coll tel que x >= 2
|
|
```
|
|
\end{catala}
|
|
& Filtrage
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
(x - 2) pour x parmi coll
|
|
tel que x >= 2
|
|
```
|
|
\end{catala}
|
|
& Filtrage + application
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
coll1 ++ coll2
|
|
```
|
|
\end{catala}
|
|
& Réunion
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
somme entier coll
|
|
```
|
|
\end{catala}
|
|
& Aggrégation
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
nombre de coll
|
|
```
|
|
\end{catala}
|
|
& Comptage
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
maximum de coll
|
|
ou si collection vide alors -1
|
|
```
|
|
\end{catala}
|
|
& Extremums
|
|
\\
|
|
\begin{catala}
|
|
```catala
|
|
x parmi coll
|
|
tel que (x * x) est minimum
|
|
ou si collection vide alors -1
|
|
```
|
|
\end{catala}
|
|
& Élément selon extremum
|
|
\\
|
|
\end{tabular}
|
|
|
|
\end{multicols}
|
|
\end{document}
|