texlive[44395] Master: scratch (17may17)

commits+karl at tug.org commits+karl at tug.org
Wed May 17 23:54:24 CEST 2017


Revision: 44395
          http://tug.org/svn/texlive?view=revision&revision=44395
Author:   karl
Date:     2017-05-17 23:54:24 +0200 (Wed, 17 May 2017)
Log Message:
-----------
scratch (17may17)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/scratch/
    trunk/Master/texmf-dist/doc/latex/scratch/README
    trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf
    trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.tex
    trunk/Master/texmf-dist/tex/latex/scratch/
    trunk/Master/texmf-dist/tex/latex/scratch/scratch.sty
    trunk/Master/tlpkg/tlpsrc/scratch.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/scratch/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/scratch/README	2017-05-17 21:54:24 UTC (rev 44395)
@@ -0,0 +1,21 @@
+___________________________________
+
+             L'extension
+               scratch
+               
+                v0.1
+
+             16 mai 2017
+___________________________________
+
+Authors   : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail    : unbonpetit at openmailbox.org     (CT)
+            Commentaires, signalements de bugs et
+            suggestions bienvenus
+Licence   : Released under the LaTeX Project Public License v1.3c or
+            later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Draw programs like scratch (https://scratch.mit.edu/)


Property changes on: trunk/Master/texmf-dist/doc/latex/scratch/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf	2017-05-17 21:53:12 UTC (rev 44394)
+++ trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf	2017-05-17 21:54:24 UTC (rev 44395)

Property changes on: trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.tex	2017-05-17 21:54:24 UTC (rev 44395)
@@ -0,0 +1,407 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "scratch"
+%
+% Fichier compil\xE9 avec pdflatex
+\documentclass[frenchb,a4paper,10pt]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,scratch}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=\xAB,fg=\xBB}
+\def\SCRATCH{\texttt{scratch}\xspace}
+\makeatletter
+\def\code{\expandafter\code at i\string}
+\def\code at i#1{%
+	\begingroup
+		\par\nobreak\medskip\parindent0pt
+		\leftskip.1\linewidth
+		\catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+		\let\do\@makeother \dospecials
+		\ttfamily\small\@noligs
+		\make at car@active\<{$\langle$\begingroup\itshape}%
+		\make at car@active\>{\endgroup$\rangle$}%
+		\obeylines\obeyspaces
+		\def\code at ii##1#1{##1\par\medbreak\endgroup}%
+		\code at ii
+}
+\long\def\grab at toks#1\relax{\gdef\right at content{#1}}
+
+\newcommand\disable at lig[1]{%
+	\catcode`#1\active
+	\begingroup
+		\lccode`\~`#1\relax
+		\lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\make at car@active[1]{%
+	\catcode`#1\active
+	\begingroup
+		\lccode`\~`#1\relax
+		\lowercase{\endgroup\def~}%
+}
+
+\newcommand\exemple{%
+	\begingroup
+	\parskip\z@
+	\exemple@}
+
+\newcommand\exemple@{%
+	\medbreak\noindent
+	\begingroup
+		\let\do\@makeother\dospecials
+		\make at car@active\ { {}}%
+		\make at car@active\^^M{\par\leavevmode}%
+		\make at car@active\^^I{\space\space}%
+		\make at car@active\,{\leavevmode\kern\z@\string,}%
+		\make at car@active\-{\leavevmode\kern\z@\string-}%
+		\make at car@active\>{\leavevmode\kern\z@\string>}%
+		\make at car@active\<{\leavevmode\kern\z@\string<}%
+		\@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+		\exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+	\def\@tempa##1#1{\exemple@@@{##1}}%
+	\@tempa
+}
+
+\newcommand\exemple@@@[1]{%
+	\xdef\the at code{#1}%
+	\endgroup
+		\begingroup
+			\fboxrule0.4pt \fboxsep=5pt
+			\let\breakboxparindent\z@
+			\def\bkvz at top{\hrule\@height\fboxrule}%
+			\def\bkvz at bottom{\hrule\@height\fboxrule}%
+			\let\bkvz at before@breakbox\relax
+			\def\bkvz at set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
+			\def\bkvz at left{\vrule\@width\fboxrule\kern\fboxsep}%
+			\def\bkvz at right{\kern\fboxsep\vrule\@width\fboxrule}%
+			\breakbox
+				\kern.5ex\relax
+				\begingroup
+					\ttfamily\small\the at code\par
+				\endgroup
+				\kern3pt
+				\hrule height0.1pt width\linewidth depth0.1pt
+				\vskip5pt
+				\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
+			\endbreakbox
+		\endgroup
+	\medbreak
+	\endgroup
+}
+\begingroup
+	\catcode`\<13 \catcode`\>13
+	\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+		\bgroup
+			\verb at eol@error \let\do\@makeother \dospecials
+			\verbatim at font\@noligs
+			\catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
+			\@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrscrdate at i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or f\xE9vrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or d\xE9cembre\fi\space#1}
+\edef\longfrscrdate{\expandafter\longfrscrdate at i\scrdate\@nil}
+\makeatother
+\begingroup
+	\catcode`\_11 
+	\gdef\cleval#1#2{%
+		\bigbreak\noindent
+		\hbox to .25\linewidth{%
+			\color{teal}\bfseries\ttfamily
+			\detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em 
+		(\textit{D\xE9faut} : {\color{teal}\ttfamily
+		\hlst_eearg\hlst_ifempty{\useKV[scratch]{#1}}
+			{\detokenize{{}}}
+			{\detokenize\expandafter\expandafter\expandafter{\useKV[scratch]{#1}}}})%
+		\par\nobreak
+	}
+\endgroup
+\def\suffixe#1{\begingroup\sffamily\bfseries\color{scr#1}#1\endgroup}
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+	\begingroup
+		\centering
+		\null\vskip.25\vsize
+		{\large\bfseries L'extension pour \LaTeX\par \Huge \scrname\par}
+		\bigbreak
+		v \scrver
+		\smallbreak
+		\longfrscrdate
+		\vskip1.5cm
+		Christian \bsc{Tellechea}\footnote{\texttt{unbonpetit at openmailbox.org}}\par
+	\endgroup
+	\vskip2cm
+	\leftskip=.2\linewidth \rightskip=.2\linewidth \small
+	Cette extension permet de dessiner des empilements de blocs similaires \xE0 ceux que l'on trouve dans le logiciel de programmation \emph{visuelle} \xAB \SCRATCH\footnote{Le logiciel que l'on peut utiliser en ligne \xE0 \texttt{https://scratch.mit.edu/}} \xBB.
+\end{titlepage}
+\parindent1.5em
+\section{L'environnement \SCRATCH}
+Pour dessiner un programme comme le fait \SCRATCH, il faut ouvrir un environnement \xAB\SCRATCH\xBB et \xE9crire dans cet environnement les macros correspondant aux \emph{blocs} que l'on veut y mettre :
+
+\code|\begin{scratch}
+	macros pour dessiner des blocs
+\end{scratch}|
+
+Comme le savent ceux qui enseignent l'algorithmique et la programmation avec le tr\xE8s-\xE0-la-mode logiciel \xAB \SCRATCH \xBB, les programmes sont construits avec des briques, appel\xE9s \xABblocs\xBB, qui peuvent s'emboiter les uns sur les autres. Ces blocs sont de plusieurs couleurs, chacune correspondant \xE0 un type d'instruction que l'on retrouve dans les menus de \SCRATCH.
+
+J'ai pris le parti d'\xE9crire des macros ayant comme argument le texte qui figure dans le bloc. Ce faisant, on a plus de libert\xE9 que dans \SCRATCH o\xF9 les blocs ont des textes pr\xE9d\xE9finis, mais cette libert\xE9 permet d'utiliser cette extension quelle que soit la langue dans laquelle on \xE9crit.
+
+Enfin, j'ai cherch\xE9 le bon compromis entre complexit\xE9 du code et qualit\xE9 des dessins obtenus avec cette extension: ils \emph{ressemblent} \xE0 ceux du logiciel \SCRATCH, mais le but de cette extension n'est \emph{pas} la ressemblance absolue au pixel pr\xE8s!
+
+\section{Les blocs normaux}
+Ces blocs sont les plus courants et poss\xE8dent une encoche d'emboitement, femelle en haut et m\xE2le en bas. Les macros permettant de dessiner ces blocs ont des noms de la forme \verb|\block<suffixe>| et ont un seul argument obligatoire qui est le texte que l'on souhaite mettre dans le bloc. Par exemple, un bloc bleu (correspondant au menu \xABmouvement\xBB) a un suffixe \suffixe{move}, et est dessin\xE9 gr\xE2ce \xE0 la macro \verb|\blocmove{<texte>}|. Ainsi, dans l'environnement \SCRATCH, \xE9crire \verb|\blockmove{Bonjour le monde}| donne
+\begin{center}\begin{scratch}\blockmove{Bonjour le monde}\end{scratch}\end{center}
+
+La police d'\xE9criture dans chaque bloc est la police \xAB \textsf{sans serif} \xBB en gras qui est d\xE9finie dans le document au moment o\xF9 l'environnement est appel\xE9 : pratiquement, cela signifie que les macros \verb|\sffamily| et \verb|\bfseries| sont ex\xE9cut\xE9es avant que le texte des blocs ne soit compos\xE9. Dans cette documentation, la police sans serif est \xAB\textsf{biolinum}\xBB.
+
+La plupart des dimensions des blocs sont proportionnelles \xE0 la taille de la police en cours. On peut donc jouer sur la taille de la police (via les classiques macros \verb|\small|, \verb|\large|, \verb|\footnotesize|, etc) pour modifier la taille des blocs.
+
+Voici un inventaire des tous les blocs disponibles, empil\xE9s les uns sous les autres :
+
+\exemple/Voici un algorithme bizarre : \begin{scratch}
+	\blockmove{bloc de mouvement}
+	\blocklook{bloc d'apparence}
+	\blocksound{bloc de son}
+	\blockpen{bloc de stylo}
+	\blockvariable{bloc de variable}
+	\blocklist{bloc de liste}
+	\blockevent{bloc d'\xE9v\xE9nement}
+	\blockcontrol{bloc de contr\xF4le}
+	\blocksensing{bloc de capteur}
+\end{scratch}/
+
+Il faut donc retenir cette logique : les suffixes \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{pen}, \suffixe{variable}, \suffixe{list}, \suffixe{event}, \suffixe{control} et \suffixe{sensing} correspondent aux couleurs des blocs. Il existe aussi le suffixe \suffixe{operator} qui n'a pas \xE9t\xE9 montr\xE9 pr\xE9c\xE9demment puisqu'aucun bloc n'existe pour la fonction \xABop\xE9rateurs\xBB.
+
+\section{Les ovales}
+Les \xAB ovales \xBB sont, selon le code graphique de \SCRATCH, cens\xE9s contenir des nombres. Lorsque ces nombres sont explicitement \xE9crits en chiffres, ces ovales ont un fond blanc : \begin{center}\begin{scratch}\blockmove{ajouter \ovalnum{10} \xE0 x}\end{scratch}\end{center}
+Les valeurs num\xE9riques sont parfois issues de valeurs pr\xE9d\xE9finies auquel cas, une fl\xE8che de s\xE9lection doit apparaitre apr\xE8s le nombre pr\xE9d\xE9fini choisi : \begin{center}\begin{scratch}\blockmove{s'orienter \xE0 \ovalnum{180\selectarrownum}}\end{scratch}\end{center}
+
+Au niveau des macros utilis\xE9es dans l'exemple plus bas :
+\begin{itemize}
+	\item la macro \verb|\ovalnum{<nombre>}| dessine un nombre dans un ovale \xE0 fond blanc;
+	\item la macro \verb|\selectarrownum| trace la fl\xE8che de s\xE9lection;
+	\item les macros \verb|\turnleft| et \verb|\turnright| dessinent des fl\xE8ches de rotation dans les blocs \verb|\blockmove|.
+\end{itemize}
+
+\exemple/Ovales sur fond blanc : \begin{scratch}
+	\blockmove{ajouter \ovalnum{10} \xE0 x}
+	\blockmove{s'orienter \xE0 \ovalnum{180\selectarrownum}}
+	\blockmove{tourner de \turnleft{} de \ovalnum{45} degr\xE9s}
+	\blockcontrol{attendre \ovalnum{1} seconde}
+	\blockpen{mettre l'intensit\xE9 du stylo \xE0 \ovalnum{50}}
+\end{scratch}/
+
+Lorsque les \verb|<nombres>| sont contenus dans des variables, les ovales prennent alors la couleur de la fonction correspondant \xE0 ces variables. Les macros ont des noms de la forme \verb|\oval<suffixe>| et ont pour suffixe \suffixe{move}, \suffixe{look}, \suffixe{sound}, \suffixe{variable}, \suffixe{list}, \suffixe{sensing} et \suffixe{operator}.
+
+Voici quelques exemples :
+\exemple/Ovales divers : \begin{scratch}
+	\blockmove{s'orienter \xE0 \ovalmove{direction}}
+	\blocksound{ajouter \ovaloperator{\ovalnum{-0.5} * \ovalsound{volume}} au volume}
+	\blockmove{glisser en \ovalsound{tempo} secondes \xE0 x: \ovalsensing{souris x}
+	           y: \ovaloperator{\ovalnum{4} * \ovalsensing{souris y}}}
+\end{scratch}
+
+Toutes les macros ayant pour pr\xE9fixe \verb|\oval| sont utilisables \emph{en dehors} de l'environnement \texttt{scratch}, la preuve : voici \ovalvariable{une variable} et \ovaloperator{un op\xE9rateur}./
+
+\section{Les blocs de d\xE9but}
+Ces blocs sont de la couleur \suffixe{event} pour la plupart (macro \verb|\blockinit|), mais il existe aussi un bloc de d\xE9but de couleur \suffixe{control} (macro \verb|\blockinitclone|). Le drapeau vert est dessin\xE9 avec la macro \verb|\greenflag|.
+
+\exemple/Voici un d\xE9but :
+\begin{scratch}
+	\blockinit{quand \greenflag est cliqu\xE9}
+	\blockmove{suite de l'algorithme...}
+\end{scratch}
+et un autre :
+\begin{scratch}
+	\blockinitclone{quand je commence comme un clone}
+	\blocklook{enfiler le costume de clown !}
+\end{scratch}/
+
+\section{Les rectangles}
+Du texte sp\xE9cifi\xE9 par l'utilisateur se trouve dans un rectangle sur fond blanc, en graisse normale et en couleur noir. La macro \verb|\txtbox{<du texte>}| permet, dans l'environnement \SCRATCH d'ins\xE9rer ces rectangles \xAB de texte \xBB:
+
+\exemple/\begin{scratch}
+	\blocklook{dire \txtbox{Hello} pendant \ovalnum{2} secondes}
+	\blocksensing{demander \txtbox{Quel est votre nom ?} et attendre}
+\end{scratch}/
+
+Un menu d\xE9roulant ayant des valeurs pr\xE9d\xE9finies est \xE9galement symbolis\xE9 par un rectangle dont la couleur reprend la fonction du bloc qui le contient. Pour ce faire, la macro \verb|\selectmenu{<texte>}| doit \xEAtre ex\xE9cut\xE9e :
+
+\exemple/\begin{scratch}
+	\blockinit{Quand je re\xE7ois \selectmenu{message 1}}
+	\blockcontrol{cr\xE9er un clone de \selectmenu{moi m\xEAme}}
+	\blockmove{aller \xE0 \selectmenu{pointeur de souris}}
+	\blocklook{ajouter \xE0 l'effet \selectmenu{couleur} \ovalnum{25}}
+\end{scratch}/
+
+Un carr\xE9 rempli de couleur et accessible avec la macro \verb|\squarecolor{<couleur>}| ach\xE8ve cet inventaire sur les rectangles :
+
+\exemple/\begin{scratch}
+	\blockpen{stylo en position d'\xE9criture}
+	\blockpen{mettre la couleur du style \xE0 \squarecolor{red!75!black}}
+	\blockmove{avancer de \ovalnum{25}}
+\end{scratch}/
+
+\section{Les losanges et les blocs de test}
+Dans la symbolique graphique de \SCRATCH, les losanges contiennent des valeurs bool\xE9ennes ayant vocation \xE0 se retrouver dans un bloc de test. Pour dessiner de tels objets bool\xE9ens, les macros \verb|\bool<suffixe>{<texte>}| sont utilis\xE9es o\xF9 les \verb|<suffixes>| repr\xE9sentent les couleurs correspondant \xE0 la fonction du bool\xE9en trac\xE9 : \suffixe{list}, \suffixe{sensing} ou \suffixe{operator}.
+
+Les blocs de test sont de deux types,selon qu'ils poss\xE8dent ou pas une branche \xAB else\xBB.
+\code|\blocif{<texte du test>}
+	{<instructions si test vrai>}|
+et
+\code|\blocifelse{<texte du test>}
+	{<instructions si test vrai>}
+	{<instructions si test faux>}|
+
+
+\exemple/Conditions :\begin{scratch}
+	\blockif{si \booloperator{\ovalmove{abscisse x} < \txtbox{7}} alors}
+		{\blockmove{aller \xE0 \selectmenu{position al\xE9atoire}}
+		 \blocklook{basculer sur costume \selectmenu{costume 4}}
+		}
+	\blockmove{aller \xE0 \selectmenu{pointeur souris}}
+\end{scratch}
+et
+\begin{scratch}
+	\blockifelse{si \boolsensing{couleur \squarecolor{blue!65} touch\xE9e ?} alors}
+		{\blockmove{avancer de \ovalnum{2}}
+		\blocksound{jouer le son \selectmenu{miaou}}
+		}
+		{\blockvariable{mettre \ovalvariable{total} \xE0 \ovaloperator{\ovalvariable{total} + \ovalnum{1}}}
+		\blocksound{arr\xEAter tous les sons}
+		}
+	\blockmove{aller \xE0 \selectmenu{pointeur souris}}
+\end{scratch}/
+
+Les macros \verb|\squarecolor| et celles de la forme \verb|\bool<suffixe>| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :
+
+\exemple/Une couleur : \squarecolor{cyan}.\par
+Un bool\xE9en : \boollist{liste \selectmenu{malist} contient \txtbox{foobar}}.\par
+Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \txtbox{1}}
+et \booloperator{\ovalvariable{varx} < \txtbox{5}}}./
+
+\section{Les blocs de fin}
+Ces blocs sont susceptibles de clore un algorithme et n'ont donc pas d'encoche m\xE2le dans leur partie basse. Ils ne peuvent \xEAtre que du type \suffixe{control} et sont dessin\xE9s avec la macro \verb|\blockstop{<texte>}|
+
+\exemple/\begin{scratch}\blockstop{supprimer ce clone}\end{scratch}
+ou
+\begin{scratch}\blockstop{stop \selectmenu{ce script}}\end{scratch}/
+
+\section{Les blocs de r\xE9p\xE9tition}
+Ces blocs sont de deux types, selon que la r\xE9p\xE9tition est pr\xE9vue pour s'arr\xEAter ou pas (boucle infinie). Ils seront dessin\xE9s par les macros \verb|\blockrepeat| et \verb|\blocinfloop| ayant chacune \emph{deux} arguments : le premier \xE9tant le \verb|<texte>| du bloc et le second la suite d'instructions \xE0 r\xE9p\xE9ter.
+
+\exemple/\begin{scratch}
+	\blockpen{stylo en position d'\xE9criture}
+	\blockrepeat{r\xE9p\xE9ter \ovalnum{4} fois}
+		{
+		\blockmove{avancer de \ovalnum{10}}
+		\blockmove{tourner \turnright{} de \ovalnum{90} degr\xE9s}
+		}
+\end{scratch}
+et
+\begin{scratch}
+	\blockpen{stylo en position d'\xE9criture}
+	\blockinfloop{r\xE9p\xE9ter ind\xE9finiment}
+		{
+		\blockmove{s'orienter \xE0 \ovaloperator{nombre al\xE9atoire entre \ovalnum{0} et \ovalnum{359}}}
+		\blockmove{avancer de \ovaloperator{nombre al\xE9atoire entre \ovalnum{1} et \ovalnum{10}}}
+		\blockif{si \boolsensing{\selectmenu{bord} touch\xE9?}}
+			{
+			\blockmove{aller \xE0 x: \ovalnum{0} y: \ovalnum{0}}
+			}
+		}
+\end{scratch}/
+
+\section{Les blocs de d\xE9finition}
+Les \xAB proc\xE9dures \xBB, ayant le suffixe \suffixe{moreblocks}, permettent d'\xE9tendre les maigres possibilit\xE9s donn\xE9es au programmeur en \SCRATCH.
+
+\exemple/\begin{scratch}
+	\initmoreblocks{d\xE9finir \namemoreblocks{trace_carr\xE9 \ovalmoreblocks{cot\xE9_carr\xE9}}}
+	\blockrepeat{r\xE9p\xE9ter \ovalnum4 fois}
+		{\blockmove{avancer de \ovalmoreblocks{cot\xE9_carr\xE9}}
+		\blockmove{tourner \turnleft{} de \ovalnum{90} degr\xE9s}
+		}
+\end{scratch}
+puis
+\begin{scratch}
+	\blockinit{Quand \greenflag est cliqu\xE9}
+	\blockpen{effacer tout}
+	\blockpen{relever le stylo}
+	\blockmove{aller \xE0 x: \ovalnum0 y: \ovalnum0}
+	\blockmove{s'orienter \xE0 \ovalnum{90\selectarrownum} degr\xE9s}
+	\blockpen{stylo en position d'\xE9criture}
+	\blockrepeat{r\xE9p\xE9ter \ovalnum{10} fois}
+		{
+		\blockmoreblocks{trace carr\xE9 \ovalnum{50}}
+		\blockmove{avancer de \ovalnum{10}}
+		\blockmove{tourner \turnleft{} de \ovalnum{36} degr\xE9s}
+		}
+\end{scratch}/
+
+\section{Bloc invisible}
+Bien que ce genre de bloc n'existe pas avec \SCRATCH, cette fonctionnalit\xE9 peut s'av\xE9rer utile. On ins\xE8re un espace vide avec \verb|\blockspace[<coeff>]|. L'espace verticale ins\xE9r\xE9e est \xE9gale \xE0 la hauteur normale d'un bloc multipli\xE9e par le \verb|<coeff>|, valeur optionnelle qui vaut 1 par d\xE9faut.
+
+\exemple/\begin{scratch}
+	\blockmove{ci-dessous, une espace d'un bloc}
+	\blockspace
+	\blockmove{ci dessous, une espace \xE9gale \xE0 la moiti\xE9 d'un bloc}
+	\blockspace[0.5]
+	\blockmove{la suite}
+\end{scratch}/
+
+\section{Personnalisation}
+Plusieurs \verb|<param\xE8tres>| peuvent \xEAtre r\xE9gl\xE9s par l'utilisateur selon la syntaxe \verb|<cl\xE9>=<valeur>|. Cas param\xE8tres peuvent \xEAtre sp\xE9cifi\xE9s dans :
+
+\begin{itemize}
+	\item l'argument optionnel de l'environnement \verb|\begin{scratch}[<param\xE8tres>]| auquel cas les \verb|<param\xE8tres>| ne s'appliquent qu'\xE0 cet environnement;
+	\item l'argument de la macro \verb|\setscratch{<param\xE8tres>}| pour sp\xE9cifier des \verb|<param\xE8tres>| pour les environnements \SCRATCH \xE0 venir;
+	\item l'argument de \verb|\setdefaultscratch{<param\xE8tres>}| pour sp\xE9cifier des \verb|<param\xE8tres>| \emph{par d\xE9faut}.
+\end{itemize}
+
+Il existe la macro \verb|\resetscratch| qui remet \xE0 leur valeur par d\xE9faut tous les \verb|<param\xE8tres>| de \SCRATCH, pour annuler les effets d'une macro \verb|\setscratch|.\bigbreak
+
+Voici les \verb|<param\xE8tres>| disponibles :
+
+\cleval{else word}{caract\xE8res}
+Repr\xE9sente est le mot qui est ins\xE9r\xE9 dans la branche \xAB else \xBB d'un bloc de test.
+
+\cleval{x sep}{dimension}
+Repr\xE9sente l'espace horizontale ins\xE9r\xE9e entre les bords droit et gauche du texte du bloc et les bords droits et gauche du bloc.
+
+\cleval{y sepsup}{dimension}
+Repr\xE9sente l'espace verticale ins\xE9r\xE9e entre le bas de l'encoche femelle et le bord sup\xE9rieur du texte du bloc.
+
+\cleval{y sepinf}{dimension}
+Repr\xE9sente l'espace verticale ins\xE9r\xE9e entre le bas du bloc et le bord inf\xE9rieur du texte du bloc.
+
+\cleval{line width}{dimension}
+Repr\xE9sente l'\xE9paisseur des lignes de relief des blocs et le double des lignes de relief des losanges bool\xE9ens.
+
+\cleval{loop width}{dimension}
+Repr\xE9sente est la largeur de la barre verticale des blocs de r\xE9p\xE9tition ou de test.
+
+\cleval{loop height}{dimension}
+Repr\xE9sente est l'\xE9paisseur des barres horizontales \xAB else \xBB et inf\xE9rieure des blocs de r\xE9p\xE9tition ou de test.
+
+\cleval{corner}{dimension}
+Repr\xE9sente la dimension des chanfreins des blocs. Cette dimension est utilis\xE9e proportionnellement pour le placement horizontal, l'\xE9paisseur et la largeur des encoches des blocs.
+
+\cleval{init arcangle}{angle}
+Repr\xE9sente l'angle avec l'horizontale de l'arc de cercle trac\xE9 dans la partie haute des blocs de d\xE9part.
+
+\cleval{init arclength}{dimension}
+Repr\xE9sente la longueur horizontale de l'arc de cercle trac\xE9 dans la partie haute des blocs de d\xE9part.*
+
+\cleval{moreblock arcangle}{angle}
+Repr\xE9sente l'angle avec l'horizontale de l'arc de cercle trac\xE9 dans la partie haute des blocs de de type \xAB moreblock\xBB.
+
+\section{Mot de la fin}
+Le code de cette extension d\xE9montre mon immense ignorance de ti\textit kz/pgf et les m\xE9thodes de programmation qui lui sont propres que, d\xE9cid\xE9ment, je ne comprendrai jamais! C'est sans doute le trop grand \xE9loignement avec la logique de \TeX{} et la documentation de ti\textit kz/pgf, aussi indigeste qu'illisible, qui explique cette incompatibilit\xE9 d'humeur et mon d\xE9sint\xE9r\xEAt \xE0 l'\xE9gard de ti\textit kz. Toujours est-il que cette extension fonctionne, avec une lenteur certaine que j'attribue \xE0 ma programmation hasardeuse ainsi qu'\xE0 la lenteur intrins\xE8que de ti\textit kz.
+
+Toute remarque, remont\xE9e de bug ---~je n'ose pas dire am\xE9lioration du code~---, demande d'impl\xE9mentation de fonctionnalit\xE9 est bien \xE9videmment bienvenue; j'invite les utilisateurs \xE0 m'en faire part \emph{via} email.
+\end{document}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/latex/scratch/scratch-fr.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/scratch/scratch.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/scratch/scratch.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/scratch/scratch.sty	2017-05-17 21:54:24 UTC (rev 44395)
@@ -0,0 +1,484 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "scratch"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                    %
+\def\scrname                   {scratch}                             %
+\def\scrver                      {0.1}                               %
+%                                                                    %
+\def\scrdate                 {2017/05/16}                            %
+%                                                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% 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 Christian Tellechea
+% email: unbonpetit at openmailbox.org
+%        Commentaires, suggestions et signalement de bugs bienvenus !
+%        Comments, bug reports and suggestions are welcome.
+% --------------------------------------------------------------------
+% L'extension scratch est compos\xE9e des 4 fichiers suivants :
+%   - code               : scratch.sty
+%   - manuel en fran\xE7ais : scratch-fr         (.tex et .pdf)
+%   - fichier lisezmoi   : README
+% --------------------------------------------------------------------
+\ProvidesPackage{scratch}[\scrdate\space v\scrver\space Draw scratch instructions (CT)]
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{hlist,tikz}
+\usepgflibrary{shapes.misc,arrows.meta}
+\usetikzlibrary{bending}
+
+\expandafter\edef\csname scr\string_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+% Les r\xE9glages par d\xE9faut (modifiables avec \setdefaulthlist)
+\setKVdefault[\scrname]{
+	else word          = sinon,% mot dans branche "else"
+	x sep              = 0.5em,% s\xE9paration entre c\xF4t\xE9s droits et gauche du bloc et le texte
+	y sepsup           = 1pt,% s\xE9paration entre c\xF4t\xE9 sup (insert) et haut texte
+	y sepinf           = 3pt,% s\xE9paration entre c\xF4t\xE9 inf et bas texte
+	line width         = 0.8pt,% \xE9paisseur des lignes de relief
+	loop width         = 3ex,% \xE9paisseur de la barre verticale \xE0 gauche d'un bloc de boucle
+	loop height        = 1.75ex,% hauteur de la barre du else et la barre finale
+	corner             = 0.66667ex,% valeur du chanfrein
+	init arcangle      = 30,% angle d\xE9but et fin de l'arc
+	init arclength     = 5em,% longueur de l'arc
+	moreblock arcangle = 15,% angle de d\xE9part et arri\xE9ve des "more blmocks"
+}
+\expandafter\let\expandafter\resetscratch\csname hlst_[\scrname]\endcsname
+\def\setscratch#{\setKV[\scrname]}
+\def\setdefaultscratch#{\setKVdefault[\scrname]}
+
+\def\scr_thesentinelkern{17}% nombre de "sp" sentinelle pour les booleanbox. Personne n'utilise 17sp j'esp\xE8re ?
+\def\scr_blockstrut{\vrule height2.1ex depth.9ex width0pt\relax}% TODO \xE0 modifier ?
+\def\scr_ovalstrut{\vphantom{lp}}% TODO c'est pas un peu petit en hauteur tout \xE7a ?
+\def\scr_cslet#1{\expandafter\let\csname#1\endcsname}
+\def\scr_csedef#1{\expandafter\edef\csname#1\endcsname}
+\newcount\scr_loopnest
+\newbox\scr_box
+\newdimen\scr_yoffset
+\newdimen\scr_xoffset
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                        dessine un bloc normal                        %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_normalblock#1#2{% #1=couleur #2=texte
+	\def\current_bloccolor{#1}%
+	\node[at=(origin)](x){%
+		\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#2\scr_blockstrut\endgroup}%
+		\xdef\__boxht{\the\ht\scr_box}%
+		\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\xdef\__boxwd{\the\wd\scr_box}%
+	};%
+	\let\scr_boxht\__boxht\let\scr_totht\__totht\let\scr_boxwd\__boxwd
+	\draw[draw=none,fill=#1,yshift=\scr_yoffset,xshift=\scr_xoffset]
+		(\scr_corner,0)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner)% ligne sup
+		--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf-\scr_corner)--cycle
+		node[at=(origin),draw=none,anchor=base west,xshift=\scr_xoffset+\scr_xsep,yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,text=white](texte){\sffamily\bfseries#2\scr_blockstrut};
+	\draw[draw=#1!80!black,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_boxwd+\scr_xsep*2,-\scr_corner)--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0);
+	\draw[draw=#1!80!white,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_corner,-\scr_corner-\scr_ysepsup-\scr_totht-\scr_ysepinf)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf-\scr_corner)--++(\scr_corner,\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner);
+	\advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+	\gdef\scr_blockstop{0}%
+}
+\newcommand*\blockspace[1][1]{%
+	\advance\scr_yoffset#1\dimexpr-\scr_blockstruttotht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+		\gdef\scr_blockstop{1}%
+}
+\def\blockstop#1{% #1=texte
+	\def\current_bloccolor{scrcontrol}%
+	\node[at=(origin)](x){%
+		\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#1\scr_blockstrut\endgroup}%
+		\xdef\__boxht{\the\ht\scr_box}%
+		\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\xdef\__boxwd{\the\wd\scr_box}%
+	};%
+	\let\scr_boxht\__boxht\let\scr_totht\__totht\let\scr_boxwd\__boxwd
+	\draw[draw=none,fill=\current_bloccolor,yshift=\scr_yoffset,xshift=\scr_xoffset]
+		(\scr_corner,0)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner)% ligne sup
+		--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2,0)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf-\scr_corner)--cycle
+		node[at=(origin),draw=none,anchor=base west,xshift=\scr_xoffset+\scr_xsep,yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,text=white](texte){\sffamily\bfseries#1\scr_blockstrut};
+	\draw[draw=\current_bloccolor!80!black,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_boxwd+\scr_xsep*2,-\scr_corner)--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2,0);
+	\draw[draw=\current_bloccolor!80!white,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_corner,-\scr_corner*2-\scr_ysepsup-\scr_totht-\scr_ysepinf+\scr_corner)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf-\scr_corner)--++(\scr_corner,\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner);
+	\advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+	\gdef\scr_blockstop{1}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                       dessine un bloc de d\xE9part                      %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_initblock#1#2{%
+	\def\current_bloccolor{#1}%
+	\node[at=(origin)](x){%
+		\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#2\scr_blockstrut\endgroup}%
+		\xdef\__boxht{\the\ht\scr_box}%
+		\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\xdef\__boxwd{\the\wd\scr_box}%
+	};%
+	\let\scr_boxht\__boxht\let\scr_totht\__totht\let\scr_boxwd\__boxwd
+	\draw[draw=none,fill=\current_bloccolor,yshift=\scr_yoffset,xshift=\scr_xoffset]
+		(0,0)to[out=\scr_initarcangle,in=180-\scr_initarcangle](\scr_xsep+\scr_initarclength,0)--(\scr_boxwd+2*\scr_xsep-\scr_corner,0)--++(\scr_corner,-\scr_corner)% ligne sup
+		--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf)--cycle
+		node[at=(origin),draw=none,anchor=base west,xshift=\scr_xoffset+\scr_xsep,yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,text=white](texte){\sffamily\bfseries#2\scr_blockstrut};
+	\draw[draw=\current_bloccolor!80!black,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_boxwd+\scr_xsep*2,-\scr_corner)--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0);
+	\draw[draw=\current_bloccolor!80!white,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_corner,-\scr_corner-\scr_ysepsup-\scr_totht-\scr_ysepinf)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf)--(0,0);
+	\draw[draw=\current_bloccolor!80!white,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_xsep+\scr_initarclength,0)--(\scr_boxwd+2*\scr_xsep-\scr_corner,0)--++(\scr_corner,-\scr_corner);
+	\advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+	\gdef\scr_blockstop{0}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                    dessine un bloc de d\xE9finition                     %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\initmoreblocks#1{%
+	\def\current_bloccolor{scrmoreblocks}%
+	\node[at=(origin)](x){%
+		\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#1\scr_blockstrut\endgroup}%
+		\xdef\__boxht{\the\ht\scr_box}%
+		\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\xdef\__boxwd{\the\wd\scr_box}%
+	};%
+	\let\scr_boxht\__boxht\let\scr_totht\__totht\let\scr_boxwd\__boxwd
+	\draw[draw=none,fill=\current_bloccolor,yshift=\scr_yoffset,xshift=\scr_xoffset]
+		(0,0)to[out=\scr_moreblockarcangle,in=180-\scr_moreblockarcangle](\scr_boxwd+2*\scr_xsep,0)% ligne sup
+		--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf)--cycle
+		node[at=(origin),draw=none,anchor=base west,xshift=\scr_xoffset+\scr_xsep,yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,text=white](texte){\sffamily\bfseries#1\scr_blockstrut};
+	\draw[draw=\current_bloccolor!80!black,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_boxwd+\scr_xsep*2,0)--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0);
+	\draw[draw=\current_bloccolor!80!white,yshift=\scr_yoffset,xshift=\scr_xoffset](\scr_corner,-\scr_corner-\scr_ysepsup-\scr_totht-\scr_ysepinf)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf)--(0,0);
+	\draw[line width=1.5pt,draw=scrmoreblocksurround,shorten <=-\scr_linewidth,shorten >=-\scr_linewidth](0,0)to[out=15,in=165](\scr_boxwd+2*\scr_xsep,0);
+	\advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+	\gdef\scr_blockstop{0}%
+}
+\def\namemoreblocks#1{%
+	\begin{tikzpicture}[baseline=(moreblocksdef.base)]
+		\def\scr_ysepinf{2pt}\def\scr_ysepsup{2pt}%
+		\edef\scr_xsep{\the\dimexpr\scr_xsep*3/2\relax}%
+		\node(moreblocksdefaux){%
+			\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#1\strut\endgroup}%
+			\xdef\__boxht{\the\ht\scr_box}%
+			\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+			\xdef\__boxwd{\the\wd\scr_box}%
+		};%
+		\let\scr_boxht\__boxht\let\scr_totht\__totht\let\scr_boxwd\__boxwd
+		\draw[draw=scrmoreblockcontour,line width=\scr_linewidth*2]
+			(\scr_corner,0)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner)% ligne sup
+			--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(0,\scr_totht+\scr_ysepsup+\scr_ysepinf-\scr_corner)--cycle
+			node[at=(moreblocksdefaux),draw=none,anchor=base west,xshift=\scr_xoffset+\scr_xsep,yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,text=white](moreblocksdef){\sffamily\bfseries#1\strut};
+	\end{tikzpicture}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                dessine un bloc de r\xE9p\xE9tition ou test                 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blockloop#1#2#3#4#5{% #1=texte  #2=instructions sup  #3=instructions inf #4=boucle infinie (1 ou 0)  #5=fleche de r\xE9p\xE9tition (1 ou 0)
+	\def\current_bloccolor{scrcontrol}%
+	\edef\scr_blocminheight{\dimexpr\scr_loopblockheight+\scr_ysepinf+\scr_ysepsup+\scr_corner\relax}% hauteur minimale d'un bloc normal
+	\node[at=(origin)](x){%
+		\setbox\scr_box\hbox{\begingroup\color{white}\sffamily\bfseries#1\scr_blockstrut\endgroup}%
+		\xdef\__boxht{\the\ht\scr_box}%
+		\xdef\__totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\xdef\__boxwd{\the\wd\scr_box}%
+	};%
+	\scr_cslet{scr_txtloopht\number\scr_loopnest}\__boxht
+	\scr_cslet{scr_txtlooptotht\number\scr_loopnest}\__totht
+	\scr_cslet{scr_txtloopwd\number\scr_loopnest}\__boxwd
+	\scr_csedef{toploopx\number\scr_loopnest}{\the\scr_xoffset}% coordonn\xE9es du point nord-west
+	\scr_csedef{toploopy\number\scr_loopnest}{\the\scr_yoffset}%
+		\advance\scr_xoffset by \scr_loopblockwidth
+		\advance\scr_yoffset\dimexpr-\scr_corner-\scr_ysepsup-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepinf-\scr_linewidth\relax
+		\advance\scr_loopnest1
+		#2%
+		\advance\scr_loopnest-1
+		\expandafter\let\csname scr_blockstopif_\number\scr_loopnest\endcsname\scr_blockstop
+		\scr_csedef{bottomifx\number\scr_loopnest}{\the\scr_xoffset}%
+		\scr_csedef{bottomify\number\scr_loopnest}{\the\scr_yoffset}%
+		\ifcat\relax\detokenize{#3}\relax\else% si instruction #3
+			\advance\scr_yoffset\dimexpr-\scr_blocminheight-\scr_linewidth\relax% \xE9paisseur th\xE9orique de la branche "sinon"
+			\advance\scr_loopnest1
+			#3%
+			\advance\scr_loopnest-1
+			\scr_csedef{bottomelsex\number\scr_loopnest}{\the\scr_xoffset}%
+			\scr_csedef{bottomelsey\number\scr_loopnest}{\the\scr_yoffset}%
+		\fi
+		\advance\scr_yoffset by \dimexpr-\scr_blocminheight-\scr_linewidth\relax% \xE9paisseur de la branche du bas
+	\draw[draw=none,fill=scrcontrol](\csname toploopx\number\scr_loopnest\endcsname+\scr_corner,\csname toploopy\number\scr_loopnest\endcsname)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10,0)% ligne haut du titre boucle "--\__/---------"
+	--++(\scr_corner,-\scr_corner)--++(0,-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)% ligne est "\ + | + /"
+	--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3-\scr_linewidth,0)--++(-\scr_corner,-\scr_corner)% ligne sud "/--\__/---------"
+	--(\csname bottomifx\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomify\number\scr_loopnest\endcsname+\scr_corner)% descente gauche bloc "if"
+	\ifcat\relax\detokenize{#3}\relax\else% trac\xE9 de la branche du bas du else
+		--++(\scr_corner,-\scr_corner)% chanfrein"\" pour raccord sur ligne haut
+		\ifnum\csname scr_blockstopif_\number\scr_loopnest\endcsname=1
+			--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_loopblockwidth+\scr_linewidth,0)% ligne haut de la barre else "--\__/---------"
+		\else
+			--++(\scr_corner*3+\scr_linewidth,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10-\scr_loopblockwidth,0)% ligne haut de la barre else "--\__/---------"
+		\fi
+		--++(\scr_corner,-\scr_corner)--++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)% ligne Est "\ + | + /"
+		--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3-\scr_linewidth,0)--++(-\scr_corner,-\scr_corner)% ligne sud "/--\__/---------"
+		--(\csname bottomelsex\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomelsey\number\scr_loopnest\endcsname+\scr_corner)% descente gauche bloc "else"
+	\fi
+	--++(\scr_corner,-\scr_corner)% chanfrein "\" pour rejoindre haut de la ligne de fin
+	\ifnum\scr_blockstop=1
+		--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_loopblockwidth+\scr_linewidth,0)% ligne haut de la barre de fin "--\__/---------"
+	\else
+		--++(\scr_corner*3+\scr_linewidth,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10-\scr_loopblockwidth,0)% ligne haut de la barre de fin "--\__/---------"
+	\fi
+	--++(\scr_corner,-\scr_corner)--++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)% ligne Est "\ + | + /"
+	\ifnum#4=1 %infiniteloop
+		--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2,0)% ligne Sud "\---------------"
+	\else
+		--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)% ligne Sud "\--\__/---------"
+	\fi
+	--++(-\scr_corner,\scr_corner)
+	--(\csname toploopx\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname-\scr_corner)--cycle% remont\xE9e tout en haut et cycle
+	;%
+	\advance\scr_xoffset by -\scr_loopblockwidth
+	\draw[draw=scrcontrol!80!white](\scr_xoffset+\scr_corner,\scr_yoffset+\scr_linewidth)--++(-\scr_corner,\scr_corner)
+		--(\csname toploopx\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname-\scr_corner)--++(\scr_corner,\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10,0)--++(\scr_corner,-\scr_corner);% remont\xE9e gauche + ligne haut bandeau
+	\draw[draw=scrcontrol!80!black](\csname toploopx\number\scr_loopnest\endcsname+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname-\scr_corner)--++(0,-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3-\scr_linewidth,0)--++(-\scr_corner,-\scr_corner)--(\csname bottomifx\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomify\number\scr_loopnest\endcsname+\scr_corner);
+	\draw[draw=scrcontrol!80!white](\csname bottomifx\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomify\number\scr_loopnest\endcsname+\scr_corner)--++(\scr_corner,-\scr_corner)
+	\ifnum\csname scr_blockstopif_\number\scr_loopnest\endcsname=1
+		--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_loopblockwidth+\scr_linewidth,0)
+	\else
+		--++(\scr_corner*3+\scr_linewidth,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10-\scr_loopblockwidth,0)
+	\fi
+	--++(\scr_corner,-\scr_corner);
+	\edef\scr_tempname{\ifcat\relax\detokenize{#3}\relax bottomif\else bottomelse\fi}%
+	\draw[draw=scrcontrol!80!black](\csname \scr_tempname x\number\scr_loopnest\endcsname+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_loopblockwidth,\csname \scr_tempname y\number\scr_loopnest\endcsname-\scr_corner)--++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)
+	\ifnum#4=1 %infiniteloop
+		--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2,0)
+	\else
+		--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3,0)
+	\fi
+	;% ligne Sud de la barre du bas
+	\node[at=(origin),draw=none,anchor=base west,xshift=\csname toploopx\number\scr_loopnest\endcsname+\scr_xsep,yshift=\csname toploopy\number\scr_loopnest\endcsname-\csname scr_txtloopht\number\scr_loopnest\endcsname-\scr_corner-\scr_ysepsup,text=white](texte){\sffamily\bfseries#1\scr_blockstrut};
+	\ifcat\relax\detokenize{#3}\relax\else
+		\node[at=(origin),draw=none,anchor=base west,xshift=\csname toploopx\number\scr_loopnest\endcsname+\scr_xsep,yshift=\csname bottomify\number\scr_loopnest\endcsname-\scr_loopblockheight-\scr_corner,text=white](texte){\sffamily\bfseries\useKV[\scrname]{else word}};
+		\draw[draw=scrcontrol!80!black](\csname bottomifx\number\scr_loopnest\endcsname+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_loopblockwidth,\csname bottomify\number\scr_loopnest\endcsname-\scr_corner)--++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf+\scr_corner)--++(-\scr_corner,-\scr_corner)--++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*10+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)% ligne Est "\ + | + /"
+		--++(-\scr_corner*3,0)--++(-\scr_corner,\scr_corner)--++(-\scr_corner*3-\scr_linewidth,0)--++(-\scr_corner,-\scr_corner)% ligne sud "/--\__/---------"
+		--(\csname bottomelsex\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomelsey\number\scr_loopnest\endcsname+\scr_corner)
+		;
+		\draw[draw=scrcontrol!80!white](\csname bottomelsex\number\scr_loopnest\endcsname-\scr_linewidth,\csname bottomelsey\number\scr_loopnest\endcsname+\scr_corner)--++(\scr_corner,-\scr_corner)% chanfrein "\" pour rejoindre haut de la ligne de fin
+			\ifnum\scr_blockstop=1
+				--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_loopblockwidth+\scr_linewidth,0)--++(\scr_corner,-\scr_corner);
+			\else
+				--++(\scr_corner*3+\scr_linewidth,0)--++(\scr_corner,-\scr_corner)--++(\scr_corner*3,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*10-\scr_loopblockwidth,0)--++(\scr_corner,-\scr_corner);
+			\fi
+	\fi
+	\ifnum#5=1 %fleche
+		\draw[scrcontrol!80!black,line width=1.5pt,-{Triangle[length=1.25ex,width=1.5ex]},rounded corners=1pt](\scr_xoffset+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_ex*3.5+1pt,\scr_yoffset+\scr_linewidth+\scr_ysepinf-1.25pt)--++(\scr_loopblockheight,0)--++(0,\scr_loopblockheight+\scr_corner*0.5);
+		\draw[white,line width=1.5pt,-{Triangle[length=1.25ex,width=1.5ex]},rounded corners=1pt](\scr_xoffset+\scr_xsep*2+\csname scr_txtloopwd\number\scr_loopnest\endcsname-\scr_ex*3.5,\scr_yoffset+\scr_linewidth+\scr_ysepinf)--++(\scr_loopblockheight,0)--++(0,\scr_loopblockheight+\scr_corner*0.5);
+	\fi
+	\xdef\scr_blockstop{\ifnum#4=1 1\else0\fi}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                           dessine un ovale                           %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_ovalbox#1#2{% #1=couleur remplissage et contour  #2=texte
+	\edef\scr_linewidth{\the\dimexpr\useKV[\scrname]{line width}\relax}%
+	\begin{tikzpicture}[baseline=(x.base),x=1ex,y=1ex,inner ysep=0.25ex,inner xsep=0.1ex,line width=\scr_linewidth]
+		\node[rounded rectangle,draw=none,fill=#1,text=white](x){\sffamily\bfseries\relax#2\scr_ovalstrut};%
+		\draw[draw=#1!80!black](x.west)to[out=270,in=180](x.south west)--(x.south east)to[out=0,in=270](x.east);
+		\draw[draw=#1!80!white](x.west)to[out=90,in=180](x.north west)--(x.north east)to[out=0,in=90](x.east);
+	\end{tikzpicture}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                   dessine un triangle de s\xE9lection                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_menuselectarrow{%
+	\tikz[baseline=-1ex,x=1ex,y=1ex,rounded corners=0pt]\draw[fill=\current_bloccolor!35!black,draw=none](0,0)--(1,0)--(0.5,-0.6)--cycle;%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                           dessine un menu                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\selectmenu#1{% #1=texte du menu (sera compos\xE9 et suivi du triangle de s\xE9lection)
+	\begin{tikzpicture}[anchor=base west,baseline=(textmenu.base west),outer sep=0pt,inner sep=0pt]
+		\node[draw=none,inner xsep=0.2em,fill=\current_bloccolor!85!black](textmenu){\normalfont\sffamily#1\scr_ovalstrut\hskip.6666em \scr_menuselectarrow};
+		\draw[draw=\current_bloccolor!80!black,line width=0.5pt](textmenu.south west)--(textmenu.north west)--(textmenu.north east);
+		\draw[draw=\current_bloccolor!80!white,line width=0.5pt](textmenu.south west)--(textmenu.south east)--(textmenu.north east);
+	\end{tikzpicture}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                          dessine un losange                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_boolbox#1#2{%
+	\begingroup
+		\edef\scr_previouskern{\number\lastkern}%
+		\edef\scr_linewidth{\useKV[\scrname]{line width}}%
+		\def\current_bloccolor{#1}%
+		\setbox\scr_box\hbox{\begingroup\color{white}\bfseries\scr_ovalstrut\kern\scr_thesentinelkern sp #2\xdef\__tmpkern{\number\lastkern}\endgroup}%
+		\let\scr_endkern\__tmpkern
+		\edef\scr_totheight{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+		\def\scr_sep{1pt}%
+		\edef\scr_retainedwd{\the\dimexpr\wd\scr_box\ifnum\scr_endkern=\scr_thesentinelkern-\scr_totheight/2+\scr_sep\fi\relax}%
+		\begin{tikzpicture}[baseline=(x.base),x=1ex,y=1ex,line width=\scr_linewidth/2]
+			\draw[draw=none,use as bounding box](\ifnum\scr_previouskern=\scr_thesentinelkern\space -\scr_sep\else -\scr_totheight/2\fi,-1pt)rectangle(\scr_retainedwd+\scr_totheight/2,\scr_totheight+1pt);
+			\draw[fill=#1,draw=none](\scr_sep,-\scr_sep)--++(\scr_retainedwd-\scr_sep*2,0)--++(\scr_totheight/2+\scr_sep,\scr_totheight/2+\scr_sep)--++(-\scr_totheight/2-\scr_sep,\scr_totheight/2+\scr_sep)--++(-\scr_retainedwd+\scr_sep*2,0)--++(-\scr_totheight/2-\scr_sep,-\scr_totheight/2-\scr_sep)--cycle;
+			\draw[#1!80!black](\scr_sep,-\scr_sep)--++(\scr_retainedwd-\scr_sep*2,0)--++(\scr_totheight/2+\scr_sep,\scr_totheight/2+\scr_sep);
+			\draw[#1!80!white](\scr_retainedwd-\scr_sep,\scr_totheight+\scr_sep)--++(-\scr_retainedwd+\scr_sep*2,0)--++(-\scr_totheight/2-\scr_sep,-\scr_totheight/2-\scr_sep);
+			\node[inner sep=0pt,outer sep=0pt,minimum size=0pt,draw=none,anchor=south west,text=white](x){\sffamily\bfseries\scr_ovalstrut\kern\scr_thesentinelkern sp #2};
+		\end{tikzpicture}%
+	\endgroup
+	\kern\scr_thesentinelkern sp
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                        environnement scratch                         %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{scratch}[1][]
+	{\hlst_ifempty{#1}{}{\setscratch{#1}}%
+	\normalfont
+	\edef\scr_ex{\the\dimexpr1ex\relax}% valeur d'1ex pour le trac\xE9 de la fl\xE8che
+	\edef\scr_corner{\the\dimexpr\useKV[\scrname]{corner}\relax}
+	\edef\scr_xsep{\the\dimexpr\useKV[\scrname]{x sep}\relax}%
+	\edef\scr_ysepsup{\the\dimexpr\useKV[\scrname]{y sepsup}\relax}%
+	\edef\scr_ysepinf{\the\dimexpr\useKV[\scrname]{y sepinf}\relax}%
+	\edef\scr_linewidth{\the\dimexpr\useKV[\scrname]{line width}\relax}%
+	\edef\scr_loopblockwidth{\the\dimexpr\useKV[\scrname]{loop width}\relax}%
+	\edef\scr_loopblockheight{\the\dimexpr\useKV[\scrname]{loop height}\relax}%
+	\edef\scr_initarcangle{\useKV[\scrname]{init arcangle}}%
+	\edef\scr_initarclength{\useKV[\scrname]{init arclength}}%
+	\edef\scr_moreblockarcangle{\useKV[\scrname]{moreblock arcangle}}%
+	\setbox\scr_box\hbox{\scr_blockstrut}\edef\scr_blockstruttotht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}% haut totale du strut
+	\def\turnleft{\turn_arrow{}}\def\turnright{\turn_arrow{xscale=-1}}%
+	\let\blockmove\scr_blockmove\let\blocklook\scr_blocklook\let\blocksound\scr_blocksound
+	\let\blockpen\scr_blockpen\let\blockvariable\scr_blockvariable\let\blocklist\scr_blocklist
+	\let\blockevent\scr_blockevent\let\blockinit\scr_blockinit
+	\let\blockrepeat\scr_blockrepeat\let\blockinfloop\scr_blockinfloop
+	\let\blockifelse\scr_blockifelse\let\blockif\scr_blockif
+	\let\blockinitclone\scr_blockinitclone\let\blockcontrol\scr_blockcontrol
+	\let\blocksensing\scr_blocksensing\let\blockmoreblocks\scr_blockmoreblocks
+	\catcode`\:12 \catcode`\;12 \catcode`\!12 \catcode`\?12 \catcode`\_12
+	\begin{tikzpicture}[line width=\scr_linewidth,inner sep=0pt,outer sep=0pt,minimum size=0pt,line cap=round]
+		\node[shape=coordinate](origin){};% origine
+	}
+	{\end{tikzpicture}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                            menu mouvement                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrmove}{rgb}{0.2902,0.4235,0.8314}
+\def\scr_blockmove{\scr_normalblock{scrmove}}
+\def\ovalmove{\scr_ovalbox{scrmove}}
+\def\ovalnum#1{% ovale blanc qui doit contenir un _nombre_
+	\begin{tikzpicture}[baseline=(x.base),x=1ex,y=1ex,minimum size=2.5ex,inner ysep=1pt,inner xsep=0.15em,outer sep=0pt]
+		\node[rounded rectangle,draw=none,fill=white,text=black](x){\vphantom{0}\let\select\selectarrownum\normalfont#1};%
+	\end{tikzpicture}%
+}
+\def\turn_arrow#1{\tikz[baseline=.25ex,x=6.5ex,y=6.5ex,#1]\draw[-{Triangle[angle=45:0.5ex 0.5ex,bend]},line width=.3333ex](0,0) arc[start angle=-80,end angle=190,radius=1ex];}
+\def\selectarrownum{% le petit triangle verss le bas \xE0 c\xF4t\xE9 d'un _nombre_
+	\unskip\hskip0.125em \tikz[baseline=-1.25ex,x=1ex,y=1ex,rounded corners=0pt]\draw[fill=black!70,draw=none](0,0)--(1,0)--(0.5,-0.6)--cycle;
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                            menu apparence                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrlook}{rgb}{0.5412,0.3333,0.8431}
+\def\scr_blocklook{\scr_normalblock{scrlook}}
+\def\ovallook{\scr_ovalbox{scrlook}}
+\def\txtbox#1{% #1=texte dans un rectangle blanc
+	\begin{tikzpicture}[inner xsep=0.2em,inner ysep=0pt,baseline=(text.base west)]
+		\node[fill=white,text=black](text){\normalfont\sffamily\strut#1};
+		\draw[draw=white!80!black,line width=0.5pt](text.south west)--(text.north west)--(text.north east);
+	\end{tikzpicture}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                               menu son                               %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrsound}{rgb}{0.7333,0.2588,0.7647}
+\def\scr_blocksound{\scr_normalblock{scrsound}}
+\def\ovalsound{\scr_ovalbox{scrsound}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                              menu stylo                              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrpen}{rgb}{0.0549,0.6039,0.4235}
+\def\scr_blockpen{\scr_normalblock{scrpen}}
+\def\ovalpen{\scr_ovalbox{scrpen}}
+\def\squarecolor#1{% #1 est la couleur
+	\begin{tikzpicture}[x=1ex,y=1ex,baseline=.33333ex]
+		\colorlet{__tempcolor}{#1}%
+		\draw[fill=__tempcolor,draw=none](0,0) rectangle (2,2);
+		\draw[draw=__tempcolor!80!black](0,0)--(0,2)--(2,2);
+		\draw[draw=__tempcolor!80!white](0,0)--(2,0)--(2,2);
+	\end{tikzpicture}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                             menu donn\xE9es                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrvariable}{rgb}{0.9333,0.4902,0.0863}
+\definecolor{scrlist}{rgb}{0.8,0.3569,0.1333}
+\def\scr_blockvariable{\scr_normalblock{scrvariable}}
+\def\scr_blocklist{\scr_normalblock{scrlist}}
+\def\ovalvariable{\scr_ovalbox{scrvariable}}
+\def\ovallist{\scr_ovalbox{scrvariable}}
+\def\boollist{\scr_boolbox{scrlist}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                            menu \xE9v\xE9nement                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{screvent}{rgb}{0.7843,0.5137,0.1882}
+\def\scr_blockevent{\scr_normalblock{screvent}}
+\def\scr_blockinit{\scr_initblock{screvent}}
+\definecolor{greenflag}{rgb}{0.2471,0.5529,0.0824}
+\def\greenflag{%
+	\tikz[baseline=2pt]\draw[fill=greenflag,draw=none,scale=.4,rotate=-12]
+		(-.1,0)--(-.1,1)--(0,1)--(0,0.95)..controls(.5,1.2) and (.7,.8)..(1,1)..controls(.95,.7)..
+		(1,.4)..controls(.7,.3)and(.45,.6)..(0,.4)--(0,0)--cycle; % espace ici
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                            menu contr\xF4le                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrcontrol}{rgb}{0.8824,0.6627,0.1020}
+\def\scr_blockrepeat#1#2{\scr_blockloop{#1}{#2}{}01}
+\def\scr_blockinfloop#1#2{\scr_blockloop{#1}{#2}{}11}% 1= texte   #2=instructions dans la boucle
+\def\scr_blockifelse#1#2#3{\scr_blockloop{#1}{#2}{#3}00}% 1= texte   #2=instructions dans la boucle
+\def\scr_blockif#1#2{\scr_blockifelse{#1}{#2}{}}
+\def\scr_blockinitclone{\scr_initblock{scrcontrol}}
+\def\scr_blockcontrol{\scr_normalblock{scrcontrol}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                             menu capteur                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrsensing}{rgb}{0.1725,.6471,0.8863}
+\definecolor{scroperator}{rgb}{0.3608,0.7176,0.0706}
+\def\ovalsensing{\scr_ovalbox{scrsensing}}
+\def\scr_blocksensing{\scr_normalblock{scrsensing}}
+\def\boolsensing{\scr_boolbox{scrsensing}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                            menu op\xE9rateur                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ovaloperator{\scr_ovalbox{scroperator}}
+\def\booloperator{\scr_boolbox{scroperator}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                           menu ajouter bloc                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrmoreblocks}{rgb}{0.3882,0.1765,0.6}
+\definecolor{scrmoreblocksurround}{rgb}{0.5569,0.1804,0.7608}
+\definecolor{scrmoreblockcontour}{rgb}{0.5098,0.3412,0.6784}
+\definecolor{scrmoreblocksaux}{rgb}{0.3504,0.2784,0.6941}
+\def\ovalmoreblocks{\scr_ovalbox{scrmoreblocksaux}}
+\def\scr_blockmoreblocks{\scr_normalblock{scrmoreblocks}}
+\def\boolmoreblocks{\scr_boolbox{scrmoreblocksaux}}
+
+\scr_restorecatcode
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version |    Date    | Changements                                          |
+|-----------------------------------------------------------------------------|
+|   0.1   | 16/05/2017 | Premi\xE8re version                                     |
+|-----------------------------------------------------------------------------|
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/latex/scratch/scratch.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2017-05-17 21:53:12 UTC (rev 44394)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2017-05-17 21:54:24 UTC (rev 44395)
@@ -540,7 +540,7 @@
     sauter sauterfonts savefnmark savesym savetrees
     scale scalebar scalerel scanpages
     schemabloc schemata sclang-prettifier schule schulschriften schwalbe-chess
-    sciposter screenplay screenplay-pkg scrjrnl scrlttr2copy scsnowman
+    sciposter scratch screenplay screenplay-pkg scrjrnl scrlttr2copy scsnowman
     sdrt sduthesis
     secdot section sectionbox sectsty seealso
     selectp selnolig semantic semantic-markup semaphor

Modified: trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc	2017-05-17 21:53:12 UTC (rev 44394)
+++ trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc	2017-05-17 21:54:24 UTC (rev 44395)
@@ -108,6 +108,7 @@
 depend sa-tikz
 depend schemabloc
 depend scsnowman
+depend scratch
 depend setdeck
 depend signchart
 depend smartdiagram

Added: trunk/Master/tlpkg/tlpsrc/scratch.tlpsrc
===================================================================


More information about the tex-live-commits mailing list