%%% % PixelArt %%% \newtoks\toklistePANombre% \def\UpdatetoksPANombre#1\nil{\addtotok\toklistePANombre{"#1",}}% \setKVdefault[ClesPixelArt]{Largeur=29,Hauteur=29,Solution=false,Lettres=ABCDEFGHIJK,Nombres=false,ListeCouleurs={Orange,Red,LightGray,Maroon,Purple,black,black,Plum,Orange,White,White},Unite=5mm} \defKV[ClesPixelArt]{ListeNombres=\setKV[ClesPixelArt]{Nombres}} \NewDocumentCommand\PixelArt{o m}{% \toklistePANombre{}% \useKVdefault[ClesPixelArt]% \setKV[ClesPixelArt]{#1}% \xdef\ListeAvantCouleurs{\useKV[ClesPixelArt]{ListeCouleurs}}% \xdef\ListeAvantNombres{\useKV[ClesPixelArt]{ListeNombres}}% \setsepchar{,}% \readlist*\ListePANombre{\ListeAvantNombres}% \foreachitem\compteur\in\ListePANombre{\expandafter\UpdatetoksPANombre\compteur\nil}% \BuildPixelArt{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}% }% \NewDocumentCommand\BuildPixelArt{m m m m}{% \ifluatex \mplibforcehmode \begin{mplibcode} largeur:=\useKV[ClesPixelArt]{Largeur}; hauteur:=\useKV[ClesPixelArt]{Hauteur}; Unite:=\useKV[ClesPixelArt]{Unite}; boolean Solution,Nombres; Solution:=\useKV[ClesPixelArt]{Solution}; Nombres:=\useKV[ClesPixelArt]{Nombres}; string BaseLettres; BaseLettres=str #2; numeric EchelleScale; EchelleScale=Unite/5mm; color ColorEntier[],ColFond; n:=0; for p_=#3: n:=n+1; ColorEntier[n]:=p_; endfor; string RetiensNombres[]; if Nombres: n:=0; for p_=#4: n:=n+1; RetiensNombres[n]=p_; endfor; fi; vardef Lecturecsv(expr nomfichier)= for h=hauteur downto 1: string p_; p_=readfrom nomfichier; l:=0; for p=0 step 2 until 2*largeur-2: l:=l+1; if (substring(p,p+1) of p_)="-": else: if Nombres: for m=0 upto (length BaseLettres-1): if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: label(TEX(RetiensNombres[m+1]) scaled EchelleScale,((l-1)*Unite,(h-1)*Unite)); fi; endfor; else: label(TEX(substring(p,p+1) of p_) scaled EchelleScale,((l-1)*Unite,(h-1)*Unite)); fi; if Solution: for m=0 upto (length BaseLettres-1): if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: ColFond:=ColorEntier[m+1]; fi; endfor; if unknown ColFond: else: fill (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite) withcolor ColFond fi; fi; trace (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite); fi; endfor; endfor; closefrom nomfichier; enddef; Lecturecsv("#1"); \end{mplibcode} \else \begin{mpost}[mpsettings={largeur:=\useKV[ClesPixelArt]{Largeur}; hauteur:=\useKV[ClesPixelArt]{Hauteur}; Unite:=\useKV[ClesPixelArt]{Unite}; boolean Solution,Nombres; Solution:=\useKV[ClesPixelArt]{Solution}; Nombres:=\useKV[ClesPixelArt]{Nombres};}] string BaseLettres; BaseLettres=str #2; color ColorEntier[],ColFond; n:=0; for p_=#3: n:=n+1; ColorEntier[n]:=p_; endfor; string RetiensNombres[]; if Nombres: n:=0; for p_=#4: n:=n+1; RetiensNombres[n]=p_; endfor; fi; vardef Lecturecsv(expr nomfichier)= for h=hauteur downto 1: string p_; p_=readfrom nomfichier; l:=0; for p=0 step 2 until 2*largeur-2: l:=l+1; if (substring(p,p+1) of p_)="-": else: if Nombres: for m=0 upto (length BaseLettres-1): if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: label(LATEX(RetiensNombres[m+1]),((l-1)*Unite,(h-1)*Unite)); fi; endfor; else: label(LATEX(substring(p,p+1) of p_),((l-1)*Unite,(h-1)*Unite)); fi; if Solution: for m=0 upto (length BaseLettres-1): if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: ColFond:=ColorEntier[m+1]; fi; endfor; if unknown ColFond: else: fill (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite) withcolor ColFond fi; fi; trace (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite); fi; endfor; endfor; closefrom nomfichier; enddef; Lecturecsv("#1"); \end{mpost} \fi }