%% Copyright 2017-2022 Louis Paternault
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Louis Paternault
%%
%% This work consists of the files pixelart0.sty and pixelart0.tex.

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pixelart0}
   [2022/11/16 v0.3.0 A package to draw pixel-art pictures]

\RequirePackage{pgf}
\RequirePackage{pgfopts}
\usepgfmodule{parser}
\RequirePackage{tikz}
\usetikzlibrary{calc}
\RequirePackage{pgfkeys}
\RequirePackage{etoolbox}

\makeatletter

\newif\ifpixelart@draft
\pgfkeys{
 /PIXELART/.cd,
 draft/.is if=pixelart@draft,
 draft=false,
}
\ProcessPgfPackageOptions{/PIXELART}
\pgfkeys{
 /PIXELART/BWPIXELART/.is family,
 /PIXELART/BWPIXELART,
 scale/.value required,
 scale/.code={\pgfkeyssetvalue{/PIXELART/BWPIXELART/scale}{#1}},
 scale=1,
 raise/.code={\pgfkeyssetvalue{/PIXELART/BWPIXELART/raise}{#1}},
 raise/.value required,
 raise=0pt,
 color/.value required,
 color/.code={\pgfkeyssetvalue{/PIXELART/BWPIXELART/color}{#1}},
 color=black,
}

\pgfkeys{
 /PIXELART/TIKZBWPIXELART/.is family,
 /PIXELART/TIKZBWPIXELART,
 scale/.value required,
 scale/.code={\pgfkeyssetvalue{/PIXELART/TIKZBWPIXELART/scale}{#1}},
 scale=1,
 color/.value required,
 color/.code={\pgfkeyssetvalue{/PIXELART/TIKZBWPIXELART/color}{#1}},
 color=black,
}

\pgfparserdef{@bwpixelart}{initial}{blank space \space}{
 \@bwpa@newline
}
\pgfparserdef{@bwpixelart}{initial}{the character 0}{
 \coordinate (@pixelart) at ($(@pixelart) + (1, 0)$);
}
\pgfparserdef{@bwpixelart}{initial}{the character 1}{
 \fill (@pixelart) rectangle ++(1, 1);
 \coordinate (@pixelart) at ($(@pixelart) + (1, 0)$);
}
\pgfparserdef{@bwpixelart}{initial}{the letter @}{
 \pgfparserswitch{final}
}

\newcommand{\@bwpa@newline}{
 \coordinate (@pixelart) at ($(@pixelart@startline) + (0, -1)$);
 \coordinate (@pixelart@startline) at (@pixelart);
}

\newcommand{\bwpixelart}[2][]{{%
 \pgfkeys{/PIXELART/BWPIXELART, #1}%
 \raisebox{\pgfkeysvalueof{/PIXELART/BWPIXELART/raise}}{%
   \tikz[
     scale=\pgfkeysvalueof{/PIXELART/BWPIXELART/scale},
   ]{
     \tikzbwpixelart[%
       color=\pgfkeysvalueof{/PIXELART/BWPIXELART/color},
       ]{(0, 0)}{#2}
   }%
 }%
}}

\newcommand{\tikzbwpixelart}[3][]{
 \pgfkeys{/PIXELART/TIKZBWPIXELART, #1}
 \ifpixelart@draft
   % Draft mode. Nothing to parse, nothing to show!
 \else
   \begin{scope}[shift={#2}]
     \begin{scope}[#1]
       \coordinate (@pixelart) at (0, 1);
       \coordinate (@pixelart@startline) at (@pixelart);

       \pgfparserparse{@bwpixelart}
       #3 @
     \end{scope}
   \end{scope}
 \fi
}

\makeatother

\endinput