diff options
author | Karl Berry <karl@freefriends.org> | 2019-02-20 22:43:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-02-20 22:43:15 +0000 |
commit | a6ac60af0643541f56f02f41ce626a57c9c6965a (patch) | |
tree | db475a30d42592fab7aeb5e10116729acf5d1468 /Master/texmf-dist/tex/latex/scratch3/scratch3.sty | |
parent | a7203744a046f9c6afbea27c854863cdd3574e86 (diff) |
scratch3 (20feb19)
git-svn-id: svn://tug.org/texlive/trunk@50077 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/scratch3/scratch3.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/scratch3/scratch3.sty | 995 |
1 files changed, 995 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/scratch3/scratch3.sty b/Master/texmf-dist/tex/latex/scratch3/scratch3.sty new file mode 100644 index 00000000000..6dc76e66794 --- /dev/null +++ b/Master/texmf-dist/tex/latex/scratch3/scratch3.sty @@ -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@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églages par défaut (modifiables avec \setdefaultscratch) +\setKVdefault[\scrname]{ + pre text = \sffamily ,% choix de la police + else word = sinon ,% mot dans branche "else" + x sep = 0.33333em ,% séparation entre côtés droits et gauche du bloc et le texte + y sepsup = 3pt ,% séparation entre côté sup (insert) et haut texte + y sepinf = 5pt ,% séparation entre côté inf et bas texte + line width = .4pt ,% épaisseur des lignes de relief + loop width = 3ex ,% épaisseur de la barre verticale à 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 ,% échelle du dessin + init arcangle = 30 ,% angle début 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èche de répétition 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éparation entre les blocs booléens imbriqués + num blocks = false ,% numérotation des blocs + num sep = 3pt ,% séparation entre bord gauche et numérotation + num start = 1 ,% numéro de départ + 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épart % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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éfinition % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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ée pour tracé du bloc qui suit + \scr_normalblock{scrmoreblocks}{% + \definecolor{scrmoreblocks}{HTML}{ff6680}% rétablir couleur claire par défaut + #1% + }% + \end{tikzpicture}% +}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% dessine un bloc de répétition 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épétition (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ées 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% épaisseur théorique 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% épaisseur 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é 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ée tout en haut et cycle + \advance\scr_xoffset\dimexpr-\scr_loopblockwidth\relax + \csname scr_numblockif\number\scr_loopnest\endcsname% numérote 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érotation 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èche + \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élection + \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élection % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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é et suivi du triangle de sélection) + \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élection 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é de la flèche + \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]% échelle + \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]% épaisseur des lignes soumises à l'échelle + \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ées % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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 événement % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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ôle % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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érateur % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\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ère version | +|---------+------------+------------------------------------------------------| |