summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/chess-problem-diagrams
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-01-02 22:10:48 +0000
committerKarl Berry <karl@freefriends.org>2020-01-02 22:10:48 +0000
commitc81130743af75af12dec15e0a346778e8c8d87a7 (patch)
treee4a2026b428a16b5f4bdaee99e745c628e70a2a1 /Master/texmf-dist/tex/latex/chess-problem-diagrams
parenta369ff2c1bd7ba6ac1d35b5722e5675bcf32bf04 (diff)
chess-problem-diagrams (2jan20)
git-svn-id: svn://tug.org/texlive/trunk@53302 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/chess-problem-diagrams')
-rw-r--r--Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty144
1 files changed, 140 insertions, 4 deletions
diff --git a/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty b/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty
index 4093ffae6d3..5379687f697 100644
--- a/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty
+++ b/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty
@@ -36,7 +36,7 @@
%%
%%
-\ProvidesPackage{diagram}[2016/01/06]
+\ProvidesPackage{diagram}[2019/12/28]
\newcommand*{\DefaultDiagramSize}{}
\DeclareOption{10pt}{\renewcommand*{\DefaultDiagramSize}{\diagramx}}
\DeclareOption{11pt}{\renewcommand*{\DefaultDiagramSize}{\diagramxi}}
@@ -114,6 +114,9 @@
\newcounter{cpd@blackPieces}
\newcounter{cpd@neutralPieces}
+\newcounter{cpd@row}
+\newcounter{cpd@line}
+
\newcommand{\cpd@stepcounterWhite}{\stepcounter{cpd@whitePieces}}
\newcommand{\cpd@stepcounterBlack}{\stepcounter{cpd@blackPieces}}
\newcommand{\cpd@stepcounterNeutral}{\stepcounter{cpd@neutralPieces}}
@@ -183,6 +186,7 @@
\newtoks\fieldframe@tk\fieldframe@tk={\relax}
\newtoks\gridlines@tk\gridlines@tk={\relax}
\newtoks\pieces@tk\pieces@tk={\relax}
+\newtoks\fen@tk\fen@tk={\relax}
\newtoks\fieldtext@tk\fieldtext@tk={\relax}
\newtoks\text@tk\text@tk={\relax}
\newtoks\stipulation@tk\stipulation@tk={\relax}
@@ -214,6 +218,7 @@
\newif\if@judgement\@judgementfalse
\newif\if@comment\@commentfalse
\newif\if@pieces\@piecesfalse
+\newboolean{@cpd@fen}\setboolean{@cpd@fen}{false}%
\newif\if@fieldtext\@fieldtextfalse
\newif\if@nofields\@nofieldsfalse
\newif\if@gridlines\@gridlinesfalse
@@ -257,17 +262,23 @@
\newif\if@sindex\@sindexfalse
\newif\if@tindex\@tindexfalse
\newif\ifds@label
+\newcommand{\cpd@begindiagram@hook}{}
+\newcommand{\cpd@enddiagram@hook}{}
\def\diagram{%
\begingroup%
\@ifnextchar [{\@diagram}{\@diagram[\@ight x\@ight]}%
}
-\def\@diagram[#1x#2]{%
- \lines@max=#1%
- \rows@max=#2%
+\def\@cpd@initsize#1#2{%
\setcounter{cpd@linesmax}{#1}%
\setcounter{cpd@rowsmax}{#2}%
\setcounter{cpd@maxsquare}{\value{cpd@rowsmax}*\value{cpd@linesmax}}%
+}
+
+\def\@diagram[#1x#2]{%
+ \lines@max=#1%
+ \rows@max=#2%
+ \@cpd@initsize{#1}{#2}%
\pl@ne=\z@%
\current@plane=\z@%
\let\put@sqs=\put@sqs@normal%
@@ -276,13 +287,16 @@
}
\def\stereodiagram{%
\begingroup%
+ \inner@frame=0.6pt%
\@stereotrue%
+ \@cpd@initsize{8}{8}%
\let\put@sqs=\put@sqs@stereo%
\let\read@plane=\read@plane@stereo%
\@start@diagram%
}
\def\spacediagram{%
\begingroup%
+ \inner@frame=0.6pt%
\@spacetrue%
\@ifnextchar [{\@spacediagram}{\@spacediagram[5x5x5]}%
}
@@ -291,6 +305,7 @@
\lines@max=#1%
\rows@max=#2%
\planes@max=#3%
+ \@cpd@initsize{#1}{#2}%
\let\put@sqs=\put@sqs@space%
\let\read@plane=\read@plane@space%
\@start@diagram%
@@ -302,6 +317,7 @@
\let\month=\ds@month%
\let\year=\ds@year%
\let\label=\ds@label%
+ \cpd@begindiagram@hook%
\ignorespaces%
}
@@ -468,6 +484,7 @@
}%
}}% End of \dia@box
\do@dia@job%
+ \cpd@enddiagram@hook%
\endgroup%
}
@@ -732,6 +749,16 @@
\pieces@tk={#1}\@piecestrue%
\ignorespaces%
}
+\newcommand{\fen}[2][]{%
+ \ifthenelse{\equal{#1}{}}%
+ {}% Do nothing
+ {%
+ \setboolean{cpd@checkPieceCounts}{true}%
+ \@parseWhiteAndBlackCount#1+\e@list
+ }%
+ \fen@tk={#2}\setboolean{@cpd@fen}{true}%
+ \ignorespaces%
+}
\def\fieldtext#1{%
\fieldtext@tk={#1}\@fieldtexttrue%
\ignorespaces%
@@ -1557,6 +1584,18 @@
\fi%
\l@@k%
}
+\def\cpd@fen@setpiece{%
+ \ifnum\pl@ne=\current@plane%
+ \cpd@stepcounterPieces%
+ \set@current@square@index{\value{cpd@line}}{\value{cpd@row}}%
+ \get@current@square@value%
+ \ifthenelse{\value{cpd@current@square@value}=\m@ne}
+ {\set@current@square@value{\the\help@a}}%
+ {\ifthenelse{\value{cpd@current@square@value}=144}%
+ {\set@current@square@value{\the\help@a+18}}%
+ {\errmessage{Trying to set a piece to an occupied square}}}%
+ \fi%
+}
\def\set@nofield, {%
\ifnum\pl@ne=\current@plane%
\set@current@square@index\lin@\r@w%
@@ -1590,6 +1629,95 @@
\fi%
\nextpr@c%
}
+\def\@cpd@handle@fen#1{%
+ \ifx#1/\relax%
+ \ifthenelse{\value{cpd@line}=8}%
+ {%
+ \setcounter{cpd@line}{0}%
+ \addtocounter{cpd@row}{\m@ne}%
+ }%
+ {%
+ \errmessage{FEN: there is now row to end here}%
+ }%
+ \else\ifx#1K\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=5%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1Q\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=4%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1R\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=3%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1B\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=2%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1N\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=1%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1P\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterWhite%
+ \help@a=0%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1k\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=17%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1q\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=16%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1r\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=15%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1b\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=14%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1n\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=13%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx#1p\relax%
+ \let\cpd@stepcounterPieces\cpd@stepcounterBlack%
+ \help@a=12%
+ \cpd@fen@setpiece%
+ \addtocounter{cpd@line}{\@ne}%
+ \else\ifx1#1\relax%
+ \addtocounter{cpd@line}{1}%
+ \else\ifx2#1\relax%
+ \addtocounter{cpd@line}{2}%
+ \else\ifx3#1\relax%
+ \addtocounter{cpd@line}{3}%
+ \else\ifx4#1\relax%
+ \addtocounter{cpd@line}{4}%
+ \else\ifx5#1\relax%
+ \addtocounter{cpd@line}{5}%
+ \else\ifx6#1\relax%
+ \addtocounter{cpd@line}{6}%
+ \else\ifx7#1\relax%
+ \addtocounter{cpd@line}{7}%
+ \else\ifx8#1\relax%
+ \addtocounter{cpd@line}{8}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\def\@cpd@parse@fen#1{\@cpd@handle@fen#1\l@@klist}
\def\p@rsepieces#1, {\getc@lor#1\e@list\l@@klist}
\def\p@rsetext#1, {\get@text#1\e@list\l@@klist}
\def\set@text{%
@@ -1805,6 +1933,14 @@
% Now we should clear the board
\clear@board%
% Let us now parse the list of pieces
+ \ifthenelse{\boolean{@cpd@fen}}{%
+ \ifthenelse{\value{cpd@rowsmax}=8}{}{\errmessage{FEN is only allowed for 8x8 boards.}}
+ \ifthenelse{\value{cpd@linesmax}=8}{}{\errmessage{FEN is only allowed for 8x8 boards.}}
+ \setcounter{cpd@row}{7}%
+ \setcounter{cpd@line}{0}%
+ \let\@action\@cpd@parse@fen%
+ \@parseTokenlist\fen@tk\e@list%
+ }{}%
\if@pieces%
\let\@action\p@rsepieces%
\let\piece@job\l@@k\let\plane@job\set@piece%