texlive[50077] Master: scratch3 (20feb19)
commits+karl at tug.org
commits+karl at tug.org
Wed Feb 20 23:43:16 CET 2019
Revision: 50077
http://tug.org/svn/texlive?view=revision&revision=50077
Author: karl
Date: 2019-02-20 23:43:15 +0100 (Wed, 20 Feb 2019)
Log Message:
-----------
scratch3 (20feb19)
Modified Paths:
--------------
trunk/Master/tlpkg/bin/tlpkg-ctan-check
trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/scratch3/
trunk/Master/texmf-dist/doc/latex/scratch3/README
trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf
trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.tex
trunk/Master/texmf-dist/tex/latex/scratch3/
trunk/Master/texmf-dist/tex/latex/scratch3/scratch3.sty
trunk/Master/tlpkg/tlpsrc/scratch3.tlpsrc
Added: trunk/Master/texmf-dist/doc/latex/scratch3/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch3/README (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/scratch3/README 2019-02-20 22:43:15 UTC (rev 50077)
@@ -0,0 +1,21 @@
+___________________________________
+
+ L'extension
+ scratch3
+
+ v0.1
+
+ 19 f\'evier 2019
+___________________________________
+
+Author : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail : unbonpetit at netc.fr (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/scratch3/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf 2019-02-20 22:42:23 UTC (rev 50076)
+++ trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf 2019-02-20 22:43:15 UTC (rev 50077)
Property changes on: trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.tex (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.tex 2019-02-20 22:43:15 UTC (rev 50077)
@@ -0,0 +1,588 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "scratch3"
+%
+% Fichier compil\xE9 avec pdflatex
+\documentclass[french,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,scratch3}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=\xAB,fg=\xBB}
+\def\SCRATCH{\texttt{scratch}\xspace}
+\def\SSCRATCH{\texttt{\scrname}\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
+ \skv_eearg\skv_ifempty{\useKV[\scrname]{#1}}
+ {\detokenize{{}}}
+ {\detokenize\expandafter\expandafter\expandafter{\useKV[\scrname]{#1}}}}\unskip)%
+ \par\nobreak
+ }
+\endgroup
+\def\suffixe#1{\begingroup\sffamily\bfseries\color{scr#1}#1\endgroup}
+\newenvironment{version}[2]
+ {%
+ \paragraph{\hbox to 4em {v\hskip1pt #1\hfill}#2}\hskip0pt \par
+ \catcode`\>13 \begingroup\lccode`\~`\> \lowercase{\endgroup\let~}\item
+ \begin{itemize}%
+ }
+ {%
+ \end{itemize}%
+ }
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+ \begingroup
+ \centering
+ \null\vskip.25\vsize
+ {\large\bfseries L'extension pour \LaTeX\medbreak
+ \Huge \begin{scratch}[line width=1.5pt]\blockmove\scrname\end{scratch}\par}
+ \bigbreak
+ v \scrver
+ \smallbreak
+ \longfrscrdate
+ \vskip1.5cm
+ Christian \bsc{Tellechea}\par
+ \texttt{unbonpetit at netc.fr}\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 v3\footnote{Le logiciel que l'on peut utiliser en ligne \xE0 \texttt{https://scratch.mit.edu/}} \xBB.
+\end{titlepage}
+\parindent0pt
+\section{Avant propos}
+La pr\xE9sente extension intitul\xE9e \SSCRATCH, est une \xE9volution de l'extension \SCRATCH qui imitait la version 2 du logiciel. Depuis janvier~2019, le logiciel est pass\xE9 \xE0 la version~3 et l'extension \SCRATCH est donc devenue obsol\xE8te et non maintenue.\medbreak
+
+Cette version de \SSCRATCH \xE9tant la premi\xE8re, elle est susceptible d'\xEAtre immature, c'est-\xE0-dire de contenir des bugs, des incoh\xE9rences ou des effets non d\xE9sir\xE9s. Si cela se produit, je remercie les utilisateurs de bien vouloir me le faire savoir par email ou \emph{via} le \xAB bugtracker \xBB de \texttt{gitlab} \xE0 l'adresse \begin{center}
+\texttt{\detokenize{https://framagit.org/unbonpetit/scratch3/issues}}
+\end{center}
+
+Les utilisateurs les plus atentifs auront sans oute remarqu\xE9 que seuls les blocs de type \xABstylo\xBB sont disponibles parmi ceux qui sont dor\xE9navant consid\xE9r\xE9s comme \xABextension\xBB. Il s'agit, pour l'instant, d'un choix d\xE9lib\xE9r\xE9...
+
+\paragraph{Attention} Il est fortement d\xE9conseill\xE9 de charger les packages \SCRATCH et \SSCRATCH en raison de plusieurs d\xE9finitions communes qu'ils partagent et qui conduiraient in\xE9vitablement \xE0 des dysfonctionnements. L'erreur qui survient ---~et le refus de charger le deuxi\xE8me~--- lorsqu'on tente de charger ces deux packages ne doivent pas \xEAtre d\xE9sactiv\xE9s par une modification de leurs codes.\medbreak
+
+L'extension \SSCRATCH requiert les extensions \texttt{simplekv} et \texttt{ti\textit kz} qui sont automatiquement charg\xE9es si cela s'av\xE8re n\xE9cessaire.\medbreak
+
+Fid\xE8le \xE0 mes convictions, la documentation de cette extension n'est disponible qu'en fran\xE7ais.
+
+\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\footnote{Je ne d\xE9teste rien de plus comme langage de programmation que ce \emph{truc} vaguement graphique, ultra limit\xE9 et contre-productif dans l'apprentissage du codage qu'est \SCRATCH et que l'\xE9ducation nationale veut \xE0 tout prix imposer. Je ne compte bien \xE9videmment pas me plier \xE0 ce nouveau dogme ridicule et ne l'utiliserai ni ne l'enseignerai; je consid\xE8re que les \xE9l\xE8ves m\xE9ritent mieux que \SCRATCH --~ADA, java ou lua par exemple~-- comme entr\xE9e dans le monde de la programmation.} 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|\blockmove{<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 qui est d\xE9finie dans le document au moment o\xF9 l'environnement est appel\xE9 : pratiquement, cela signifie que la macro \verb|\sffamily| est ex\xE9cut\xE9e avant que le texte des blocs ne soit compos\xE9. La cl\xE9 \xAB\texttt{pre text}\xBB (voir page~\pageref{pre text}), modifiable par l'utilisateur, contient par d\xE9faut le code ex\xE9cut\xE9 avant que du texte ne soit affich\xE9, c'est-\xE0-dire \verb|\sffamily|. 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\footnote{Il y a aussi la cl\xE9 \xAB\texttt{scale}\xBB pour mettre le dessin \xE0 l'\xE9chelle que l'on souhaite, voir page~\pageref{cle-scale}} .
+
+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 variables que l'utilisateur sp\xE9cifie lui-m\xEAme (comme des nombres ou du texte) :
+\begin{center}
+ \begin{scratch}
+ \blockmove{tourner de \turnleft{} de \ovalnum{45} degr\xE9s}
+ \blocklook{penser \xE0 \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
+ \end{scratch}
+\end{center}
+Les variables peuvent \xEAtre pr\xE9d\xE9finies dans \SCRATCH ou cr\xE9\xE9es par l'utilisateur et dans ce cas, les ovales sont de couleur identique \xE0 la couleur du th\xE8me auquel appartient la variable:
+\begin{center}
+ \begin{scratch}
+ \blocklook{penser \xE0 \ovalsensing{r\xE9ponse}}
+ \blockmove{aller \xE0 x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonn\xE9e y}}
+ \end{scratch}
+\end{center}
+Ces variables peuvent \xE9galement \xEAtre sp\xE9cifiques aux blocs concern\xE9s, s\xE9lectionn\xE9es parmi plusieurs possibilit\xE9s, auquel cas l'ovale est de couleur plus sombre que le bloc et se termine avec une fl\xE8che de s\xE9lection :
+\begin{center}
+ \begin{scratch}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockcontrol{cr\xE9er un clone de \ovalcontrol*{moi m\xEAme}}
+ \end{scratch}
+\end{center}
+Au niveau des macros utilis\xE9es :
+\begin{itemize}
+ \item la macro \verb|\ovalnum{<nombre>}| dessine un ovale \xE0 fond blanc;
+ \item la macro \verb|\oval<suffixe>| trace un ovale de la couleur de \verb|<suffixe>|;
+ \item en version \xE9toil\xE9e, \verb|\oval<suffixe>*| trace un ovale de couleur plus sombre avec une 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 de toutes sortes : \begin{scratch}
+ \blockmove{tourner de \turnleft{} de \ovalnum{45} degr\xE9s}
+ \blocklook{penser \xE0 \ovalnum{Hmm..} pendant \ovalnum{2} secondes}
+ \blocklook{penser \xE0 \ovalsensing{r\xE9ponse}}
+ \blockmove{aller \xE0 x: \ovaloperator{\ovalmove{ abscisse x} + \ovalnum{1}} y: \ovalmove{ordonn\xE9e y}}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockcontrol{cr\xE9er un clone de \ovalcontrol*{moi m\xEAme}}
+\end{scratch}/
+
+Toutes les macros de la forme \verb|\oval<suffixe>| sont utilisables \emph{en dehors} de l'environnement \SCRATCH:
+
+\exemple/Voici une variable simple \xAB\ovalmove{direction}\xBB,
+une variable s\xE9lectionn\xE9e \xAB\ovalsound*{Meow}\xBB./
+
+Il faut signaler que les blocs de suffixes \suffixe{operator}, \suffixe{variable} , \suffixe{list} ou \suffixe{moreblocks} ne peuvent avoir d'ovales de s\xE9lection. N'ayant pas de sens pour \SCRATCH, une erreur sera \xE9mise si une macro \xE9toil\xE9e \verb|\oval<suffixe>*| est utilis\xE9e, et visuellement, cela se traduira par une couleur de remplissage du bloc en rouge.
+\medbreak
+Un ovale rempli de couleur et accessible avec la macro \verb|\pencolor{<couleur>}| permet de s\xE9lectionner la couleur du stylo:
+
+\exemple/\begin{scratch}
+ \blockpen{stylo en position d'\xE9criture}
+ \blockpen{mettre la couleur du style \xE0 \pencolor{red!75!black}}
+ \blockmove{avancer de \ovalnum{25}}
+\end{scratch}/
+
+\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}
+Un menu d\xE9roulant contenant des valeurs pr\xE9d\xE9finies est symbolis\xE9 par un rectangle dont la couleur reprend celle du bloc dans lequel il se trouve. Pour ce faire, la macro \verb|\selectmenu{<texte>}| doit \xEAtre ex\xE9cut\xE9e :
+
+\exemple/\begin{scratch}
+ \blockinit{Quand je re\xE7ois \selectmenu{message 1}}
+ \blocksound{ajouter \ovalnum{10} \xE0 l'effet \selectmenu{hauteur}}
+ \blocklook{mettre l'effet \selectmenu{couleur} \xE0 \ovalnum{0}}
+ \blockvariable{mettre \selectmenu{ma_variable} \xE0 \ovalnum{10}}
+\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|\blockif{<texte du test>}
+ {<instructions si test vrai>}|
+et
+\code|\blockifelse{<texte du test>}
+ {<instructions si test vrai>}
+ {<instructions si test faux>}|
+
+
+\exemple/Conditions : \begin{scratch}
+ \blockif{si \booloperator{\ovalmove{abscisse x} < \ovalnum{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 \pencolor{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}/
+
+La macros \verb|\pencolor| et celles de la forme \verb|\bool<suffixe>| sont utilisables \emph{en dehors} d'un environnement \SCRATCH :
+
+\exemple/Une couleur : \pencolor{cyan}.\par
+Un bool\xE9en : \boollist{liste \selectmenu{malist} contient \ovalnum{foobar}}.\par
+Un autre : \booloperator{\booloperator{\ovalvariable{varx} > \ovalnum{1}}
+et \booloperator{\ovalvariable{varx} < \ovalnum{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} 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{pre text}{code}\label{pre text}
+C'est le \verb|code| qui est ex\xE9cut\xE9 avent que du texte ne soit affich\xE9 par \SSCRATCH.
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3pt ; 1em].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3pt ; 3ex].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3pt ; 3ex].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0pt ; 5pt].
+
+\cleval{loop width}{dimension}
+Repr\xE9sente est la largeur de la barre verticale des blocs de r\xE9p\xE9tition ou de test. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3pt ; 3em].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3pt ; 3ex].
+
+\cleval{corner}{dimension}
+Repr\xE9sente la dimension des chanfreins des blocs. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0.33333ex ; 1ex].
+
+\cleval{notch}{dimension}
+Repr\xE9sente la largeur des encoches. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0.33333em ; 3em].
+
+\cleval{scale}{coefficient}\label{cle-scale}
+Repr\xE9sente l'\xE9chelle \xE0 laquelle est repr\xE9sent\xE9 le dessin. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0.2 ; 5].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [20 ; 40].
+
+\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. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [3em ; 8em].
+
+\cleval{print}{bool\xE9en}
+Lorsque ce bool\xE9en est vrai, les dessins se font en noir et blanc de fa\xE7on \xE0 pouvoir \xEAtre dirig\xE9s vers une impression en noir et blanc.
+
+\exemple/\begin{scratch}
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{fill blocks}{bool\xE9en}
+Ce bool\xE9en n'est pris en compte que lorsque le bool\xE9en \verb|print| est vrai. Si \verb|fill blocks| est vrai, tous les dessins (sauf les ovales contenant des nombres) seront remplis avec un gris choisi avec la cl\xE9 suivante.
+
+\cleval{fill gray}{taux de gris}
+Lorsque \verb|fill blocks| est vrai, ce taux de blanc dans le gris (nombre compris entre 0 pour noir et 1 pour blanc) est utilis\xE9 pour d\xE9finir une couleur de remplissage des dessins. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0 ; 1].
+
+\exemple/\begin{scratch}
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks,fill gray=0.66]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{contrast}{entier}
+Lorsque l'option \verb|print| est vraie, cet entier, compris entre 0 et 100 inclus, qualifie la diff\xE9rence de teinte entre les lignes de relief et la teinte de gris de ces blocs, sp\xE9cifi\xE9e par la cl\xE9 \texttt{fill gray}. L'entier 0 s\xE9lectionne la couleur sp\xE9cifi\xE9e par \texttt{fill gray} tandis que 100 trace les lignes en noir. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0 ; 100].
+
+\cleval{text color}{couleur}
+Lorsque \verb|fill blocks| est vrai, cette couleur sera utilis\xE9e pour le texte des blocs.
+
+\cleval{flag gray}{taux de gris}
+Lorsque \verb|print| est vrai, ce taux de gris est utilis\xE9 pour la couleur du drapeau trac\xE9 avec \verb|\greenflag| ainsi que pour la fl\xE8che se trouvant au bas des blocs de r\xE9p\xE9tition. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0 ; 1].
+
+\exemple/\begin{scratch}[print,fill blocks,fill gray=0.66]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch} puis
+\begin{scratch}[print,fill blocks,fill gray=0.33,text color=white,flag gray=0.66]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{line gray}{taux de gris}
+Lorsque \verb|print| est vrai, ce taux de gris est utilis\xE9 pour la couleur des lignes de relief. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0 ; 1].
+
+\cleval{num blocks}{bool\xE9en}
+Lorsque ce bool\xE9en est vrai, les blocs sont num\xE9rot\xE9s.
+
+\cleval{num sep}{dimension}
+Cette cl\xE9 contient l'espacement entre les num\xE9ros de blocs et leur fronti\xE8re gauche. La valeur est ramen\xE9e si n\xE9cessaire dans l'intervalle [0pt ; 1.5em].
+
+\cleval{num start}{entier}
+Cette cl\xE9 contient le premier num\xE9ro du bloc.
+
+La macro \verb|\numblock| est charg\xE9e d'imprimer les num\xE9ros de ligne. Elle admet un argument (le num\xE9ro de ligne) et permet, lorsqu'elle est red\xE9finie, de personnaliser la num\xE9rotation : choix de la couleur, de la police, de sa taille et des effets applicables \xE0 son argument. Par d\xE9faut, cette macro est d\xE9finie par
+\begin{center}
+ \verb|\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}|
+\end{center}
+
+Dans l'environnement \SCRATCH, entre des instructions \SCRATCH, on peut activer ou d\xE9sactiver la num\xE9rotation \emph{pour le dessin en cours} \xE0 l'aide de
+\begin{center}
+ \verb|\setscratch{num blocks=<bool\xE9en>}|
+\end{center}
+
+\exemple/\begin{scratch}[num blocks]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch} puis
+\renewcommand*\numblock[1]{\color{blue!80}\itshape#1}
+\begin{scratch}[num blocks,num start=3]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}
+puis
+\renewcommand*\numblock[1]{\fboxsep=0.5pt\fbox{\bfseries#1}}
+\begin{scratch}[num blocks=false]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \setscratch{num blocks=true}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}/
+
+\cleval{baseline}{alignement}
+Cette cl\xE9 contient la consigne d'alignement du dessin tout entier, c'est-\xE0-dire :
+\begin{itemize}
+ \item la lettre \xAB\verb|c|\xBB auquel cas, le dessin est centr\xE9 sur la ligne de base
+ \item un entier qui sp\xE9cifie un num\xE9ro de bloc existant : la num\xE9rotation est coh\xE9rente avec l'entier initial contenu dans la cl\xE9 \verb|num start|. Dans ce cas, la ligne de base choisie est celle du texte contenu dans le bloc portant le num\xE9ro choisi.
+\end{itemize}
+
+\exemple/D\xE9faut : \begin{scratch}
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}
+bloc 3 : \begin{scratch}[baseline=3]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}
+centr\xE9
+\begin{scratch}[baseline=c]
+ \blockinit{Quand \greenflag est cliqu\xE9}
+ \blockpen{effacer tout}
+ \blocksound{jouer le son \ovalsound*{Meow}}
+ \blockmove{ajouter \ovalnum{5} \xE0 \ovalvariable{abscisse}}
+\end{scratch}/
+
+\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 \xE0 \texttt{unbonpetit at netc.fr}
+
+\section{Historique}
+\begin{version}{0.1}{19/02/2019}
+ >Premi\xE8re version.
+\end{version}
+\end{document}
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/doc/latex/scratch3/scratch3-fr.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/scratch3/scratch3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/scratch3/scratch3.sty (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/scratch3/scratch3.sty 2019-02-20 22:43:15 UTC (rev 50077)
@@ -0,0 +1,995 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code de l'extension "scratch3"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+\def\scrname{ scratch3 }%
+\def\scrver { 0.1 }%
+% %
+\def\scrdate{ 2019/02/19 }%
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% Author : Christian Tellechea
+% Status : Maintained
+% Email : unbonpetit at netc.fr
+% Package URL: https://www.ctan.org/pkg/scratch3
+% Bug tracker: https://framagit.org/unbonpetit/scratch3/issues
+% Repository : https://framagit.org/unbonpetit/scratch3/tree/master
+% Copyright : Christian Tellechea 2019
+% Licence : Released under the LaTeX Project Public License v1.3c
+% or later, see http://www.latex-project.org/lppl.txt
+% Files : 1) scratch3.sty
+% 2) scratch3-fr.tex
+% 3) scratch3-fr.pdf
+% 4) README
+% --------------------------------------------------------------------
+\csname @ifpackageloaded\endcsname{scratch}
+ {\PackageError{scratch3}{scratch3 cannot be used since scratch is already loaded}{}%
+ \endinput
+ }
+ {}
+\ProvidesPackage{scratch3}[\scrdate\space v\scrver\space Draw scratch3 instructions (CT)]
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{simplekv,tikz}
+\usepgflibrary{shapes.misc,arrows.meta}
+\usetikzlibrary{bending}
+
+\expandafter\edef\csname scr\string _restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+\def\scr_removespaces#1{\edef#1{\skv_exparg\skv_removeextremespaces#1}}
+\scr_removespaces\scrname\scr_removespaces\scrver\scr_removespaces\scrdate
+% Les r\xE9glages par d\xE9faut (modifiables avec \setdefaultscratch)
+\setKVdefault[\scrname]{
+ pre text = \sffamily ,% choix de la police
+ else word = sinon ,% mot dans branche "else"
+ x sep = 0.33333em ,% s\xE9paration entre c\xF4t\xE9s droits et gauche du bloc et le texte
+ y sepsup = 3pt ,% s\xE9paration entre c\xF4t\xE9 sup (insert) et haut texte
+ y sepinf = 5pt ,% s\xE9paration entre c\xF4t\xE9 inf et bas texte
+ line width = .4pt ,% \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
+ notch = 1em ,% longueur des encoches
+ scale = 1 ,% \xE9chelle du dessin
+ init arcangle = 30 ,% angle d\xE9but et fin de l'arc
+ init arclength = 5em ,% longueur de l'arc
+ contrast = 20 ,% contraste des lignes de relief
+ print = false ,% impression noir et blanc ?
+ fill blocks = false ,% remplissage des blocks lorsque l'option "print" est vraie
+ fill gray = 0.85 ,% taux de gris pour le remplissage si fill blocks est vraie
+ text color = black ,% couleur du texte lorsque l'option "print" est vraie
+ flag gray = 0.33 ,% taux de gris pour le drapeau et la fl\xE8che de r\xE9p\xE9tition lorsque l'option "print" est vraie
+ line gray = 0.4 ,% taux de gris pour les lignes lorsque l'option "print" est vraie
+ bool sep = 1.25pt ,% s\xE9paration entre les blocs bool\xE9ens imbriqu\xE9s
+ num blocks = false ,% num\xE9rotation des blocs
+ num sep = 3pt ,% s\xE9paration entre bord gauche et num\xE9rotation
+ num start = 1 ,% num\xE9ro de d\xE9part
+ baseline = 1 ,% alignement sur le 1er bloc (en partant du haut)
+}
+\newcommand*\numblock[1]{\color{black}\footnotesize\bfseries#1}
+\newcommand*\resetscratch{\csname skv_[\scrname]\endcsname\scr_setcolors}
+\newcommand*\setscratch[1]{\setKV[\scrname]{#1}\scr_setcolors}
+\newcommand*\setdefaultscratch[1]{\setKVdefault[\scrname]{#1}\scr_setcolors}
+\def\scr_setcolors{%
+ \scr_normalizedec\scr_fillgray fill gray[0,1]\skv_exparg{\definecolor{scr_fillgray}{gray}}\scr_fillgray
+ \scr_normalizedec\scr_linegray line gray[0,1]\skv_exparg{\definecolor{scr_linegray}{gray}}\scr_linegray
+ \scr_normalizedec\scr_flaggray flag gray[0,1]\skv_exparg{\definecolor{scr_flaggray}{gray}}\scr_flaggray
+}
+\expandafter\let\expandafter\scr_ifstar\csname @ifstar\endcsname
+\def\scr_boolsentinel{17}%
+\def\scr_ovalsentinel{18}%
+\def\scr_blockstrut{\vrule height2.1ex depth.9ex width0pt\relax}
+\def\scr_ovalstrut{\vphantom{\`Ag}}
+\def\scr_cslet#1{\expandafter\let\csname#1\endcsname}
+\def\scr_csdef#1{\expandafter\def\csname#1\endcsname}
+\def\scr_csedef#1{\expandafter\edef\csname#1\endcsname}
+\def\scr_execfirst#1#2{#1}
+\def\scr_execsecond#1#2{#2}
+\def\scr_firsttonil#1#2\_nil{#1}
+\def\scr_maxdim(#1,#2){\the\dimexpr\ifdim\dimexpr#1-(#2)\relax<0pt #2\else#1\fi\relax}
+\def\scr_normalizedec#1#2[#3,#4]{%
+ \edef#1{\useKV[\scrname]{#2}}%
+ \ifdim#1pt<#3pt
+ \def#1{#3}%
+ \else
+ \ifdim#1pt>#4pt
+ \def#1{#4}%
+ \fi
+ \fi
+}
+\def\scr_normalizedim#1#2[#3,#4]{%
+ \edef#1{\the\dimexpr\useKV[\scrname]{#2}}%
+ \ifdim\dimexpr#1-(#3)\relax<0pt
+ \edef#1{\the\dimexpr#3}%
+ \else
+ \ifdim\dimexpr#1-(#4)\relax>0pt
+ \edef#1{\the\dimexpr#4}%
+ \fi
+ \fi
+}
+\newcount\scr_loopnest
+\newcount\scr_blocknum
+\newbox \scr_box
+\newdimen\scr_yoffset
+\newdimen\scr_xoffset
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc normal %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_normalblock#1#2{% #1=couleur #2=texte
+ \def\scr_current_blockcolor{#1}%
+ \def\scr_currentstuff{%
+ \if_pen
+ \scr_drawpen
+ \kern.6em
+ \begingroup
+ \ifboolKV[\scrname]{print}
+ {\color{scr_linegray}}
+ {\color{penvline}}%
+ \vrule width0.5pt
+ \endgroup
+ \kern.6em
+ \fi
+ \useKV[\scrname]{pre text}%
+ #2%
+ \scr_blockstrut
+ }%
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \scr_currentstuff
+ \endpgfinterruptpicture
+ }%
+ \edef\scr_boxwd{\scr_maxdim(\wd\scr_box,\scr_minwd)}%
+ \edef\scr_boxht{\the\ht\scr_box}%
+ \edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+ \draw[
+ draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#1dd}},
+ line width=\scr_linewidth,
+ rounded corners=0.4*\scr_ex,
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{#1}},
+ yshift=\scr_yoffset,
+ xshift=\scr_xoffset
+ ]
+ (0,0)--++(0.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666,0)% ligne sup
+ --++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
+ --++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-0.66666*\scr_notch,0)% logne sud
+ --cycle;
+ \node[
+ at=(origin),
+ draw=none,
+ anchor=base west,
+ xshift=\scr_xoffset+\scr_xsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\number\scr_blocknum)
+ {\scr_currentstuff};
+ \ifboolKV[\scrname]{num blocks}
+ {\node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup
+ ]
+ (num)
+ {\skv_exparg\numblock{\number\scr_blocknum}};%
+ }
+ {}%
+ \advance\scr_blocknum1
+ \advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner\relax
+ \gdef\scr_blockstop{0}%
+ \_penfalse
+}
+\newcommand*\blockspace[1][1]{%
+ \advance\scr_yoffset#1\dimexpr-\scr_blockstruttotht-\scr_ysepsup-\scr_ysepinf-\scr_corner-\scr_linewidth\relax
+ \gdef\scr_blockstop{1}%
+}
+\newcommand*\blockstop[1]{% #1=texte
+ \def\scr_current_blockcolor{scrcontrol}%
+ \def\scr_currentstuff{%
+ \useKV[\scrname]{pre text}%
+ #1%
+ \scr_blockstrut
+ }%
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \scr_currentstuff
+ \endpgfinterruptpicture
+ }%
+ \edef\scr_boxwd{\scr_maxdim(\wd\scr_box,\scr_minwd)}%
+ \edef\scr_boxht{\the\ht\scr_box}%
+ \edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+ \draw[
+ draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{\scr_current_blockcolor dd}},
+ line width=\scr_linewidth,
+ rounded corners=0.4*\scr_ex,
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ yshift=\scr_yoffset,
+ xshift=\scr_xoffset
+ ]
+ (0,0)--++(0.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\scr_boxwd+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666,0)% ligne sup
+ --++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)--++(-\scr_boxwd-2*\scr_xsep,0)--cycle;
+ \node[
+ at=(origin),
+ draw=none,
+ anchor=base west,
+ xshift=\scr_xoffset+\scr_xsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\number\scr_blocknum)
+ {\scr_currentstuff};
+ \ifboolKV[\scrname]{num blocks}
+ {\node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup
+ ]
+ (num)
+ {\skv_exparg\numblock{\number\scr_blocknum}};
+ }
+ {}%
+ \advance\scr_blocknum1
+ \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\scr_current_blockcolor{#1}%
+ \def\scr_currentstuff{%
+ \useKV[\scrname]{pre text}%
+ #2%
+ \scr_blockstrut
+ }%
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \scr_currentstuff
+ \endpgfinterruptpicture
+ }%
+ \edef\scr_boxwd{\scr_maxdim(\wd\scr_box,\scr_xsep+\scr_initarclength+\scr_em)}%
+ \edef\scr_boxht{\the\ht\scr_box}%
+ \edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+ \draw[
+ draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#1dd}},
+ line width=\scr_linewidth,
+ rounded corners=0.4*\scr_ex,
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ 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,0)% ligne sup
+ --++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
+ --++(-\scr_boxwd+\scr_corner*2-2*\scr_xsep+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-0.66666*\scr_notch,0)--cycle% ligne bas
+ node[
+ at=(origin),
+ draw=none,
+ anchor=base west,
+ xshift=\scr_xoffset+\scr_xsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\number\scr_blocknum)
+ {\scr_currentstuff};
+ \ifboolKV[\scrname]{num blocks}
+ {\node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup
+ ]
+ (num)
+ {\skv_exparg\numblock{\number\scr_blocknum}};}
+ {}%
+ \advance\scr_blocknum1
+ \advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner\relax
+ \gdef\scr_blockstop{0}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un bloc de d\xE9finition %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\initmoreblocks[1]{%
+ \def\scr_currentstuff{%
+ \useKV[\scrname]{pre text}%
+ #1%
+ \scr_blockstrut
+ }%
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \scr_currentstuff
+ \endpgfinterruptpicture
+ }%
+ \edef\scr_boxwd{\scr_maxdim(\wd\scr_box,\scr_minwd+\scr_em*2)}%
+ \edef\scr_boxht{\the\ht\scr_box}%
+ \edef\scr_totht{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+ \def\scr_current_blockcolor{scrmoreblocks}%
+ \draw[
+ draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{\scr_current_blockcolor dd}},
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ yshift=\scr_yoffset,
+ xshift=\scr_xoffset,
+ rounded corners=0.4*\scr_ex
+ ]
+ (0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)[rounded corners=2*\scr_ex]--(0,0)--(\scr_boxwd+2*\scr_xsep,0)% ligne sup
+ [rounded corners=0.4*\scr_ex]--++(0,-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est
+ --++(-\scr_boxwd-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-.66666*\scr_notch,0)% ligne sud
+ --cycle
+ node[
+ at=(origin),
+ draw=none,
+ anchor=base west,
+ xshift=\scr_xoffset+\scr_xsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup,
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\number\scr_blocknum)
+ {\scr_currentstuff};
+ \ifboolKV[\scrname]{num blocks}
+ {\node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\scr_yoffset-\scr_boxht-\scr_corner-\scr_ysepsup
+ ]
+ (num)
+ {\skv_exparg\numblock{\number\scr_blocknum}};%
+ }
+ {}%
+ \advance\scr_blocknum1
+ \advance\scr_yoffset\dimexpr-\scr_totht-\scr_ysepsup-\scr_ysepinf-\scr_corner\relax
+ \gdef\scr_blockstop{0}%
+}
+\newcommand*\scr_namemoreblocks[1]{%
+ \begin{tikzpicture}%
+ \setscratch{num blocks=false}%
+ \definecolor{scrmoreblocks}{HTML}{ff4d6a}% choix couleur fonc\xE9e pour trac\xE9 du bloc qui suit
+ \scr_normalblock{scrmoreblocks}{%
+ \definecolor{scrmoreblocks}{HTML}{ff6680}% r\xE9tablir couleur claire par d\xE9faut
+ #1%
+ }%
+ \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)
+ \edef\scr_blocminheight{\dimexpr\scr_loopblockheight+\scr_ysepinf+\scr_ysepsup+\scr_corner\relax}% hauteur minimale d'un bloc normal
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \useKV[\scrname]{pre text}%
+ #1%
+ \scr_blockstrut
+ \endpgfinterruptpicture
+ }%
+ \scr_csedef{scr_txtloopwd\number\scr_loopnest}{\scr_maxdim(\wd\scr_box,\scr_minwd+\scr_corner*2+\scr_notch*2)}%
+ \scr_csedef{scr_txtloopht\number\scr_loopnest}{\the\ht\scr_box}%
+ \scr_csedef{scr_txtlooptotht\number\scr_loopnest}{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}%
+ \scr_csedef{toploopx\number\scr_loopnest}{\the\scr_xoffset}% coordonn\xE9es du point nord-west
+ \scr_csedef{toploopy\number\scr_loopnest}{\the\scr_yoffset}%
+ \scr_csedef{blocnum\number\scr_loopnest}{\number\scr_blocknum}%
+ \advance\scr_xoffset\scr_loopblockwidth
+ \advance\scr_yoffset\dimexpr-\scr_corner-\scr_ysepsup-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepinf\relax
+ \ifboolKV[\scrname]{num blocks}
+ {\scr_csdef{scr_numblockif\number\scr_loopnest}{%
+ \node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\csname toploopy\number\scr_loopnest\endcsname-\csname scr_txtloopht\number\scr_loopnest\endcsname-\scr_corner-\scr_ysepsup
+ ]
+ (num)
+ {\skv_eearg\numblock{\csname blocnum\number\scr_loopnest\endcsname}};%
+ }%
+ }
+ {\scr_cslet{scr_numblockif\number\scr_loopnest}\empty
+ }%
+ \advance\scr_loopnest1
+ \advance\scr_blocknum1
+ #2%
+ \advance\scr_loopnest-1
+ \scr_cslet{scr_blockstopif_\number\scr_loopnest}\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\relax% \xE9paisseur th\xE9orique de la branche "sinon"
+ \scr_csedef{blocelsenum\number\scr_loopnest}{\number\scr_blocknum}%
+ \ifboolKV[\scrname]{num blocks}
+ {\scr_csdef{scr_numblockelse\number\scr_loopnest}{%
+ \node[
+ at=(origin),
+ draw=none,
+ anchor=base east,
+ xshift=-\scr_numsep,
+ yshift=\csname bottomify\number\scr_loopnest\endcsname-\scr_loopblockheight-\scr_corner
+ ]
+ (num)
+ {\skv_eearg\numblock{\csname blocelsenum\number\scr_loopnest\endcsname}};}%
+ }
+ {\scr_cslet{scr_numblockelse\number\scr_loopnest}\empty
+ }%
+ \advance\scr_loopnest1
+ \advance\scr_blocknum1
+ #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\relax% \xE9paisseur de la branche du bas
+ \def\scr_current_blockcolor{scrcontrol}%
+% ############## dessin du corps ##############
+ \edef\scr_current_linecolor{\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{\scr_current_blockcolor dd}}%
+ \draw[
+ draw=\scr_current_linecolor,
+ line width=\scr_linewidth,
+ rounded corners=0.4*\scr_ex,
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}}
+ ]
+ (\csname toploopx\number\scr_loopnest\endcsname,\csname toploopy\number\scr_loopnest\endcsname)--++(0.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666,0)% ligne sup
+ --++(0,-\csname scr_txtlooptotht\number\scr_loopnest\endcsname-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne est "|"
+ --++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-\scr_notch*.66666,0)% ligne sud "--\__/---------"
+ --(\csname bottomifx\number\scr_loopnest\endcsname,\csname bottomify\number\scr_loopnest\endcsname)% descente gauche bloc "if"
+ \ifcat\relax\detokenize{#3}\relax\else% trac\xE9 de la branche du else
+ \ifnum\csname scr_blockstopif_\number\scr_loopnest\endcsname=1
+ --++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_loopblockwidth,0)% ligne haut de la barre else "-----------------"
+ \else
+ --++(\scr_notch*0.66666,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666-\scr_loopblockwidth,0)% ligne haut de la barre else "--\__/---------"
+ \fi
+ --++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf-\scr_corner)% descente barre else
+ --++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666+\scr_loopblockwidth,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-.66666*\scr_notch,0)% ligne sud "/--\__/---------"
+ --(\csname bottomelsex\number\scr_loopnest\endcsname,\csname bottomelsey\number\scr_loopnest\endcsname)% descente gauche bloc "else"
+ \fi
+ \ifnum\scr_blockstop=1
+ --++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_loopblockwidth,0)% ligne haut de la barre de fin "----------------"
+ \else
+ --++(.66666*\scr_notch,0)--++(\scr_corner,-\scr_corner)--++(\scr_notch,0)--++(\scr_corner,\scr_corner)--++(\csname scr_txtloopwd\number\scr_loopnest\endcsname+2*\scr_xsep-\scr_corner*2-\scr_notch*1.66666-\scr_loopblockwidth,0)% ligne haut de la barre de fin "--\__/---------"
+ \fi
+ --++(0,-\scr_loopblockheight-\scr_ysepsup-\scr_ysepinf-\scr_corner)% ligne Est "\ + | + /"
+ \ifnum#4=1 %infiniteloop
+ --++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep,0)% ligne Sud "\---------------"
+ \else
+ --++(-\csname scr_txtloopwd\number\scr_loopnest\endcsname-2*\scr_xsep+\scr_corner*2+\scr_notch*1.66666,0)--++(-\scr_corner,-\scr_corner)--++(-\scr_notch,0)--++(-\scr_corner,\scr_corner)--++(-.66666*\scr_notch,0)% ligne Sud "\--\__/---------"
+ \fi
+ --(\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\dimexpr-\scr_loopblockwidth\relax
+ \csname scr_numblockif\number\scr_loopnest\endcsname% num\xE9rote ou pas le texte dans le bandeau du haut
+ \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={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\csname blocnum\number\scr_loopnest\endcsname)
+ {\useKV[\scrname]{pre text}#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={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (txt\csname blocelsenum\number\scr_loopnest\endcsname)
+ {\useKV[\scrname]{pre text}\useKV[\scrname]{else word}};
+ \csname scr_numblockelse\number\scr_loopnest\endcsname% num\xE9rotation bloc else ou pas
+ \fi
+ \ifnum#5=1 %fleche
+ \edef\scr_arrowcolor{\ifboolKV[\scrname]{print}{scr_flaggray}{scrcontrol}!80!black}% couleur ded l'ombre
+ \draw[
+ \scr_arrowcolor,
+ line width=1.5pt,
+ -{Triangle[length=\scr_scale*1.25ex,width=\scr_scale*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);
+ \edef\scr_arrowcolor{\ifboolKV[\scrname]{print}{scr_flaggray}{white}}% colmeur de la fl\xE8che
+ \draw[
+ \scr_arrowcolor,
+ line width=\scr_scale*1.5pt,
+ -{Triangle[length=\scr_scale*1.25ex,width=\scr_scale*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#3{% #1=selection (1) ou pas (0) #2=couleur remplissage et contour #3=texte
+ \begingroup
+ \ifnum\lastkern=\scr_ovalsentinel
+ \unkern\kern-.66667ex\relax
+ \fi
+ \scr_setcolors
+ \def\scr_current_blockcolor{#2}%
+ \begin{tikzpicture}[
+ baseline=(x.base),
+ x=1ex,
+ y=1ex,
+ inner ysep=0.25ex,
+ inner xsep=0.1ex,
+ line width={\the\dimexpr\useKV[\scrname]{line width}\relax}
+ ]
+ \node[
+ line width={\the\dimexpr\useKV[\scrname]{line width}\relax},
+ rounded rectangle,
+ draw={\ifboolKV[\scrname]{print}{scr_linegray!\scr_contrast!black}{#2dd}},
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray\if1#1!85!black\fi}{none}}{\scr_current_blockcolor\if1#1d\fi}},
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (x)
+ {%
+ \useKV[\scrname]{pre text}\relax\scr_ovalstrut\kern\scr_ovalsentinel sp
+ #3%
+ \if1#1% si triangle de s\xE9lection
+ \kern1ex
+ \scr_menuselectarrow
+ \fi
+ \ifnum\lastkern=\scr_ovalsentinel
+ \unkern\kern-.66667ex\relax
+ \fi
+ };%
+ \end{tikzpicture}%
+ \endgroup
+ \kern\scr_ovalsentinel sp
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un triangle de s\xE9lection %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_menuselectarrow{%
+ \tikz[
+ baseline=-1ex,
+ x=1.5ex,
+ y=1.5ex,
+ rounded corners=1.5pt
+ ]
+ \draw[
+ fill=white,
+ draw={\ifboolKV[\scrname]{print}{scr_linegray}{\scr_current_blockcolor}}
+ ]
+ (0,0)--(1,0)--(0.5,-0.6)--cycle;%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un menu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\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,
+ minimum size=0pt
+ ]
+ \node[
+ rectangle,
+ rounded corners=1.5pt,
+ draw={\ifboolKV[\scrname]{print}{scr_linegray}{\scr_current_blockcolor dd}},
+ inner sep=0.2em,
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray!85!black}{none}}{\scr_current_blockcolor}},
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (textmenu)
+ {%
+ \useKV[\scrname]{pre text}%
+ #1%
+ \scr_ovalstrut
+ \hskip.6666em
+ \scr_menuselectarrow
+ };
+ \end{tikzpicture}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% dessine un losange %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_boolbox#1#2{% #1=couleur #2=texte
+ \begingroup
+ \scr_setcolors
+ \edef\scr_previouskern{\number\lastkern}%
+ \edef\scr_linewidth{\useKV[\scrname]{line width}}%
+ \edef\_{\the\dimexpr.53033\dimexpr \scr_linewidth\relax\relax}%
+ \def\scr_current_blockcolor{#1}%
+ \edef\scr_boolsep{\useKV[\scrname]{bool sep}}%
+ \begin{tikzpicture}[
+ inner sep=0pt,
+ outer sep=0pt,
+ minimum size=0pt,
+ baseline=(x.base),
+ line width=\scr_linewidth
+ ]
+ \setbox\scr_box\hbox{%
+ \pgfinterruptpicture
+ \useKV[\scrname]{pre text}%
+ \scr_ovalstrut
+ \kern\scr_boolsentinel sp
+ #2%
+ \xdef\scr_endkern{\number\lastkern}%
+ \endpgfinterruptpicture
+ }%
+ \edef\scr_totheight{\the\dimexpr\ht\scr_box+\dp\scr_box\relax}\edef\scr_boxwd{\the\wd\scr_box}%
+ \edef\scr_retainedwd{\the\dimexpr\scr_boxwd+\_*2\ifnum\scr_endkern=\scr_boolsentinel\space-\scr_totheight/2+1.41421\dimexpr\scr_boolsep\relax\fi\relax}%
+ \draw[
+ draw=none,
+ use as bounding box
+ ]
+ (\ifnum\scr_previouskern=\scr_boolsentinel-\scr_boolsep*.41421\else -\scr_totheight/2\fi,-\scr_boolsep)rectangle(\scr_retainedwd+\scr_totheight/2,\scr_totheight+\scr_boolsep);%
+ \draw[
+ fill={\ifboolKV[\scrname]{print}{\ifboolKV[\scrname]{fill blocks}{scr_fillgray}{none}}{\scr_current_blockcolor}},
+ draw={\ifboolKV[\scrname]{print}{scr_linegray}{#1dd}}
+ ]
+ (\scr_boolsep,-\scr_boolsep)--++(\scr_retainedwd-\scr_boolsep*2,0)--++(\scr_totheight/2+\scr_boolsep,\scr_totheight/2+\scr_boolsep)--++(-\scr_totheight/2-\scr_boolsep,\scr_totheight/2+\scr_boolsep)--++(-\scr_retainedwd+\scr_boolsep*2,0)--++(-\scr_totheight/2-\scr_boolsep,-\scr_totheight/2-\scr_boolsep)--cycle;%
+ \node[
+ inner sep=0pt,
+ outer sep=0pt,
+ minimum size=0pt,
+ draw=none,
+ anchor=south west,
+ text={\ifboolKV[\scrname]{print}{\useKV[\scrname]{text color}}{white}}
+ ]
+ (x)
+ {%
+ \useKV[\scrname]{pre text}%
+ \scr_ovalstrut
+ \kern\_%
+ \kern\scr_boolsentinel sp
+ #2%
+ \kern\_%
+ };%
+ \end{tikzpicture}%
+ \endgroup
+ \kern\scr_boolsentinel sp
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% environnement scratch %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{scrmove} {HTML}{4c97ff}%
+\definecolor{scrmoved} {HTML}{4280d7}%
+\definecolor{scrmovedd} {HTML}{3373cc}%
+\definecolor{scrlook} {HTML}{9966ff}%
+\definecolor{scrlookd} {HTML}{865cd3}%
+\definecolor{scrlookdd} {HTML}{774dcb}%
+\definecolor{scrsound} {HTML}{cf63cf}%
+\definecolor{scrsoundd} {HTML}{c94fc9}%
+\definecolor{scrsounddd} {HTML}{bd42bd}%
+\definecolor{scrpen} {HTML}{0fbd8c}%
+\definecolor{scrpend} {HTML}{0da57a}%
+\definecolor{scrpendd} {HTML}{0b8e69}%
+\definecolor{scrvariable} {HTML}{ff8c1a}%
+\definecolor{scrvariabled} {HTML}{ff0000}% il n'existe pas d'ovale avec triangle s\xE9lection pour variable
+\definecolor{scrvariabledd} {HTML}{db6e00}%
+\definecolor{scrlist} {HTML}{ff661a}%
+\definecolor{scrlistd} {HTML}{ff0000}% idem
+\definecolor{scrlistdd} {HTML}{f2590d}%
+\definecolor{screvent} {HTML}{ffbf00}%
+\definecolor{screventd} {HTML}{e6ac00}%
+\definecolor{screventdd} {HTML}{cc9900}%
+\definecolor{greenflag} {HTML}{4cbf56}%
+\definecolor{flagcontour} {HTML}{45993d}%
+\definecolor{scrcontrol} {HTML}{ffab19}%
+\definecolor{scrcontrold} {HTML}{ec9b13}%
+\definecolor{scrcontroldd} {HTML}{d08a17}%
+\definecolor{scrsensing} {HTML}{5cb1d6}%
+\definecolor{scrsensingd} {HTML}{47a8d1}%
+\definecolor{scrsensingdd} {HTML}{2e8eb8}%
+\definecolor{scroperator} {HTML}{59c059}%
+\definecolor{scroperatord} {HTML}{ff0000}% idem
+\definecolor{scroperatordd} {HTML}{389438}%
+\definecolor{scrmoreblocks} {HTML}{ff6680}%
+\definecolor{scrmoreblocksd} {HTML}{ff4d6a}%
+\definecolor{scrmoreblocksdd} {HTML}{ff3355}%
+\definecolor{penline} {HTML}{595e73}%
+\definecolor{penblue} {HTML}{4c8eea}%
+\definecolor{penvline} {HTML}{0da57a}%
+\newenvironment{scratch}[1][]
+ {\skv_ifempty{#1}{}{\setscratch{#1}}%
+ \sffamily% pas de \normalsize ici, bugfix 1.4
+ \edef\scr_ex{\the\dimexpr1ex\relax}% valeur d'1ex pour le trac\xE9 de la fl\xE8che
+ \edef\scr_em{\the\dimexpr1em\relax}%
+ \scr_normalizedim\scr_corner corner[\scr_ex/3,\scr_ex]%
+ \scr_normalizedim\scr_notch notch[\scr_em/3,\scr_em*3]%
+ \scr_normalizedec\scr_scale scale[0.2,5]% \xE9chelle
+ \scr_normalizedim\scr_xsep x sep[0pt,\scr_em]%
+ \scr_normalizedim\scr_ysepsup y sepsup[1pt,\scr_ex*3]%
+ \scr_normalizedim\scr_ysepinf y sepinf[1pt,\scr_ex*3]%
+ \scr_normalizedim\scr_linewidth line width[0pt,5pt]% \xE9paisseur des lignes soumises \xE0 l'\xE9chelle
+ \scr_normalizedim\scr_loopblockwidth loop width[3pt,\scr_em*3]%
+ \scr_normalizedim\scr_loopblockheight loop height[3pt,\scr_ex*3]%
+ \scr_normalizedec\scr_initarcangle init arcangle[20,40]%
+ \scr_normalizedim\scr_initarclength init arclength[\scr_em*3,\scr_em*8]%
+ \scr_normalizedim\scr_numsep num sep[0pt,\scr_em*3/2]%
+ \scr_normalizedec\scr_contrast contrast[0,100]%
+ \edef\scr_contrast{\number\numexpr100-\scr_contrast}%
+ \edef\scr_minwd{\the\dimexpr\scr_corner*4+\scr_notch*3-\scr_xsep*2}%
+ \edef\scr_valign{\useKV[\scrname]{baseline}}%
+ \scr_blocknum\number\numexpr\useKV[\scrname]{num start}\relax\relax
+ \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\blocklist \scr_blocklist
+ \let\blockpen \scr_blockpen \let\blockvariable \scr_blockvariable
+ \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
+ \let\namemoreblocks\scr_namemoreblocks
+ \scr_xoffset0pt \scr_yoffset0pt
+ \catcode`\:12 \catcode`\;12 \catcode`\!12 \catcode`\?12 \catcode`\_12
+ \csname skv_\if c\expandafter\scr_firsttonil\scr_valign c\_nil first\else second\fi\endcsname
+ {%
+ \def\scr_scratchend{\egroup\egroup$}%
+ $\vcenter\bgroup\hbox\bgroup\begin{tikzpicture}[%
+ }
+ {%
+ \let\scr_scratchend\relax
+ \begin{tikzpicture}[
+ baseline=(txt\scr_valign.base),
+ }%
+ transform shape,
+ line width=\scr_linewidth,
+ inner sep=0pt,
+ outer sep=0pt,
+ minimum size=0pt,
+ line cap=round,
+ scale=\scr_scale
+ ]
+ \node[shape=coordinate](origin){};% origine
+ }%
+ {%
+ \end{tikzpicture}%
+ \scr_scratchend
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu mouvement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blockmove{\scr_normalblock{scrmove}}
+\newcommand*\ovalmove{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrmove}}
+ {\scr_ovalbox0{scrmove}}%
+}
+\def\ovalnum#1{% #1=selection (1) ou pas (0) #2=couleur contour #3=texte
+ \begingroup
+ \ifnum\lastkern=\scr_ovalsentinel
+ \unkern
+ \kern-.66667ex\relax
+ \fi
+ \edef\scr_linewidth{\the\dimexpr\useKV[\scrname]{line width}\relax}%
+ \ifdefined\scr_current_blockcolor\else
+ \def\scr_current_blockcolor{black}%
+ \fi
+ \begin{tikzpicture}[
+ baseline=(x.base),
+ x=1ex,
+ y=1ex,
+ inner ysep=0.25ex,
+ inner xsep=0.1ex,
+ line width=\scr_linewidth
+ ]
+ \node[
+ line width=\scr_linewidth,
+ rounded rectangle,
+ draw={\ifboolKV[\scrname]{print}{scr_linegray}{\scr_current_blockcolor dd}},
+ fill=white,
+ text=black
+ ]
+ (x)
+ {%
+ \useKV[\scrname]{pre text}\relax
+ \scr_ovalstrut
+ \kern\scr_ovalsentinel sp
+ #1%
+ \ifnum\lastkern=\scr_ovalsentinel
+ \unkern\kern-.66667ex\relax
+ \fi
+ };%
+ \end{tikzpicture}%
+ \endgroup
+ \kern\scr_ovalsentinel sp
+}
+\def\turn_arrow#1{\tikz[baseline=.25ex,x=6.5ex,y=6.5ex,#1]\draw[-{Triangle[angle=45:0.5ex 0.5ex,flex]},line width=.3333ex](0,0) arc[start angle=-80,end angle=190,radius=1ex];}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu apparence %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blocklook{\scr_normalblock{scrlook}}
+\newcommand*\ovallook{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrlook}}
+ {\scr_ovalbox0{scrlook}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu son %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blocksound{\scr_normalblock{scrsound}}
+\newcommand*\ovalsound{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrsound}}
+ {\scr_ovalbox0{scrsound}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu stylo %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\if_pen
+\def\scr_drawpen{% dessin du crayon
+ \begin{tikzpicture}[
+ rotate=45,
+ rounded corners=.4pt,
+ line width=.5pt,
+ x=5ex,
+ y=5ex,
+ radius=5ex,
+ baseline=4.5,
+ inner sep=0pt,
+ outer sep=0pt
+ ]
+ \draw[
+ penline,
+ fill={\ifboolKV[\scrname]{print}{scr_linegray}{penblue}}
+ ]
+ (0,0)--(22:0.1)..controls(0.13,0.04)and(0.13,-0.04)..(-22:0.1)[sharp corners]--cycle;
+ \draw[
+ penline,
+ fill=white,
+ rounded corners=.2pt
+ ]
+ (22:0.1)--(22:0.2)[rounded corners=0.05pt]--(.56,.07492)..controls(.62,0.04)and(.62,-0.04)..(.56,-.07492)[rounded corners=2pt]--(-22:.2)[rounded corners=0.05pt]--(-22:0.1)..controls(0.13,-0.04)and(0.13,0.04)..(22:0.1);
+ \draw[
+ penline,
+ fill={\ifboolKV[\scrname]{print}{scr_linegray}{penblue}},
+ rounded corners=.2pt
+ ]
+ (.56,.07492)--(.88,.07492)..controls(.92,0.04)and(.92,-0.04)..(0.88,-.07492)[sharp corners]--(.56,-.07492)..controls(.62,-0.04)and(.62,0.04)..cycle;
+ \draw[penline](.84,0.07492)..controls(.7,.24)and(.58,0.02)..(.5,0.16);
+ \filldraw[penline](.535,.17) circle [radius=1pt];
+ \end{tikzpicture}%
+}%
+\def\scr_blockpen{\_pentrue\scr_normalblock{scrpen}}
+\newcommand*\ovalpen{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrpen}}
+ {\scr_ovalbox0{scrpen}}%
+}
+\newcommand*\pencolor[1]{% #1 est la couleur
+ \begin{tikzpicture}[
+ baseline=(x.base),
+ x=1ex,
+ y=1ex,
+ inner ysep=0.25ex,
+ inner xsep=0.1ex
+ ]
+ \node[
+ fill=#1,
+ draw=white,
+ rounded rectangle
+ ]
+ (x)
+ {\vrule height1.66667ex depth0.33333ex width0pt\hskip1em\hskip0pt};
+ \end{tikzpicture}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu donn\xE9es %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blockvariable{\scr_normalblock{scrvariable}}
+\def\scr_blocklist{\scr_normalblock{scrlist}}
+\newcommand*\ovalvariable{%
+ \scr_ifstar
+ {\PackageError\scrname{Starred macro \string\ovalvariable* has no sense}{}%
+ \scr_ovalbox1{scrvariable}%
+ }
+ {\scr_ovalbox0{scrvariable}%
+ }%
+}
+\newcommand*\ovallist{%
+ \scr_ifstar
+ {\PackageError\scrname{Starred macro \string\ovallist* has no sense}{}%
+ \scr_ovalbox1{scrlist}%
+ }
+ {\scr_ovalbox0{scrlist}%
+ }%
+}
+\newcommand*\boollist{\scr_boolbox{scrlist}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu \xE9v\xE9nement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\scr_blockevent{\scr_normalblock{screvent}}
+\def\scr_blockinit{\scr_initblock{screvent}}
+\newcommand*\greenflag{%
+ \kern0.2em\relax
+ \begin{tikzpicture}[
+ baseline=3pt,
+ sharp corners,
+ scale=0.4
+ ]
+ \draw[
+ line width=\scr_linewidth,
+ draw={\ifboolKV[\scrname]{print}{scr_flaggray}{flagcontour}},
+ fill={\ifboolKV[\scrname]{print}{scr_flaggray!85!white}{greenflag}}
+ ]
+ (0,0.95)..controls(.4,1.4) and (.7,.7)..(1,1)--(1,.4)..controls(.7,0.1)and(.4,.8)..(0,.4)--cycle;
+ \filldraw[{\ifboolKV[\scrname]{print}{scr_flaggray}{flagcontour}}]
+ (-.1,0)rectangle(0,1);
+ \end{tikzpicture}%
+ \kern0.2em\relax\space
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu contr\xF4le %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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}}
+\newcommand*\ovalcontrol{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrcontrol}}
+ {\scr_ovalbox0{scrcontrol}}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu capteur %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\ovalsensing{%
+ \scr_ifstar
+ {\scr_ovalbox1{scrsensing}}
+ {\scr_ovalbox0{scrsensing}}%
+}
+\def\scr_blocksensing{\scr_normalblock{scrsensing}}
+\newcommand*\boolsensing{\scr_boolbox{scrsensing}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu op\xE9rateur %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\ovaloperator{%
+ \scr_ifstar
+ {\PackageError\scrname{Starred macro \string\ovaloperator* has no sense}{}%
+ \scr_ovalbox1{scroperator}%
+ }
+ {\scr_ovalbox0{scroperator}%
+ }%
+}
+\newcommand*\booloperator{\scr_boolbox{scroperator}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menu ajouter bloc %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand*\ovalmoreblocks{%
+ \scr_ifstar
+ {\PackageError\scrname{Starred macro \string\ovalomoreblocks* has no sense}{}%
+ \scr_ovalbox1{scroperator}%
+ }
+ {\scr_ovalbox0{scrmoreblocks}%
+ }%
+}%
+\def\scr_blockmoreblocks{\scr_normalblock{scrmoreblocks}}
+\newcommand*\boolmoreblocks{\scr_boolbox{scrmoreblocksaux}}
+\scr_restorecatcode
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version | Date | Changements |
+|---------+------------+------------------------------------------------------|
+| 0.1 | 19/02/2019 | Premi\xE8re version |
+|---------+------------+------------------------------------------------------|
Property changes on: trunk/Master/texmf-dist/tex/latex/scratch3/scratch3.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 2019-02-20 22:42:23 UTC (rev 50076)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check 2019-02-20 22:43:15 UTC (rev 50077)
@@ -591,7 +591,7 @@
scale scalebar scalerel scanpages
schemabloc schemata sclang-prettifier schule schulschriften schwalbe-chess
sciposter scientific-thesis-cover
- scratch scratchx screenplay screenplay-pkg
+ scratch scratch3 scratchx screenplay screenplay-pkg
scrjrnl scrlttr2copy scsnowman
sdrt sduthesis
secdot section sectionbox sectionbreak sectsty seealso
Modified: trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc 2019-02-20 22:42:23 UTC (rev 50076)
+++ trunk/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc 2019-02-20 22:43:15 UTC (rev 50077)
@@ -125,6 +125,7 @@
depend schemabloc
depend scsnowman
depend scratch
+depend scratch3
depend setdeck
depend signchart
depend smartdiagram
Added: trunk/Master/tlpkg/tlpsrc/scratch3.tlpsrc
===================================================================
More information about the tex-live-commits
mailing list