summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCPixelArt.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCPixelArt.tex143
1 files changed, 143 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex b/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex
new file mode 100644
index 0000000000..4fa0847d61
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex
@@ -0,0 +1,143 @@
+%%%
+% 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;
+
+ 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]),((l-1)*Unite,(h-1)*Unite));
+ fi;
+ endfor;
+ else:
+ label(TEX(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{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
+} \ No newline at end of file