\def\MemberA#1#2#3#4%
{#1{#2}{#3}%
{\True}%
- {\Member{#1}{#2}{#4}}}
+ {\Member{#1}{#2}{#4}}}
% Explode: string -> char list
\def\Explode#1{\EqStr{Z}{#1}{\Nil}{\ExplodeA#1Z}}
#1{True}{False}}
% the basic manipulation of the board
-\def\Set#1#2{% square -> piece -> unit
+\def\Set#1#2{% square -> piece -> unit
\expandafter\xdef\csname#1\endcsname{#2}}
\def\Get#1{% square -> piece
\csname#1\endcsname}
\edef\pst@arrowtable{\pst@arrowtable,<|-|>}
\def\tx@ArrowTriangleA{ArrowTriangleA }
\def\tx@ArrowTriangleB{ArrowTriangleB }
-\@namedef{psas@|>}{%
- /ArrowTriangleA { CLW dup 3.5 div SLW mul add dup 2 div /w ED mul dup
- /h ED mul /a ED
- 0 h a sub moveto w h L 0 0 L w neg h L 0 h a sub L
+\@namedef{psas@|>}{%
+ /ArrowTriangleA { CLW dup 3.5 div SLW mul add dup 2 div /w ED mul dup
+ /h ED mul /a ED
+ 0 h a sub moveto w h L 0 0 L w neg h L 0 h a sub L
gsave 1 setgray fill grestore gsave
- stroke grestore } def
+ stroke grestore } def
\psk@arrowinset \psk@arrowlength \psk@arrowsize
\tx@ArrowTriangleA}
\@namedef{psas@<|}{%
- /ArrowTriangle { CLW dup 2 div SLW mul add dup 2 div
- /w ED mul dup /h ED mul /a ED
+ /ArrowTriangle { CLW dup 2 div SLW mul add dup 2 div
+ /w ED mul dup /h ED mul /a ED
{ 0 h T 1 -1 scale } if w neg h moveto 0 0 L w h L w neg a neg
- rlineto w neg a rlineto w 0 rmoveto gsave stroke grestore } def
+ rlineto w neg a rlineto w 0 rmoveto gsave stroke grestore } def
true \psk@arrowinset \psk@arrowlength \psk@arrowsize
\tx@ArrowTriangleB}
% end of PSTricks addon
{}
\newcounter{ps@knightangle} \newcounter{ps@inverse}
-\def\printknightmove#1#2{%
+\def\printknightmove#1#2{%
\setcounter{ps@knightangle}{\get@fileangle{\First#1}{\First#2}+%
\get@rankangle{\Second#1}{\Second#2} + \value{ps@inverse}}%
\ncdiagg[style=psskak,angleA=\arabic{ps@knightangle}]{-|>}{#1}{#2}}
-
+
\def\printarrow#1#2{\ncline[style=psskak]{-|>}{#1}{#2}}
\def\ps@highlightsquare#1{%
\def\PieceNames{%
\Listize[\uc@king,\uc@queen,\uc@rook,\uc@bishop,\uc@knight]}}}
-
+
\def\showskaklanguage{%
(\uc@king)(\uc@queen)(\uc@rook)(\uc@bishop)(\uc@knight)(\uc@pawn)}
{\EqStr{#1}{O}}
\def\File#1% file -> square list, eg. a -> [a1,a2,...,a8]
-{\Map{\Glue{#1}}{\RankNames}}
+{\Map{\Glue{#1}}{\RankNames}}
\def\Rank#1% rank -> square list, eg. 1 -> [a1,b1,...,h1]
{\Map{\Twiddle\Glue{#1}}{\FileNames}}
% Compose: ('b -> 'c) -> ('a -> 'b) -> ('a -> c')
% Second: 'a -> 'b -> 'b
% f: 'a -> unit
-% Compose Second f: 'a -> ('a -> 'b -> unit)
+% Compose Second f: 'a -> ('a -> 'b -> unit)
% \def\Apply#1#2% ('a -> unit) -> ('a list -> unit)
% {\Force{\Map{#1}{#2}}}
% \def\Force#1{#1\ForceA{}}
{\EqStr{1}{#1}%
{E}%
{#1}}}}}}}}}
-
+
\def\ParseFenRank#1{\ParseFenRankA(#1Z)}
\def\ParseFenRankA(#1#2){%
\def\SetRank#1#2{% rank -> fenrank -> unit
\edef\pap{\ParseFenRank{#2}}%
\expandafter\InitRank\pap#1}
-
+
\def\InitBoard(#1/#2/#3/#4/#5/#6/#7/#8){%
\SetRank{8}{#1}%
\def\StringToTokens#1%
{\skak@ifthenelse{\equal{#1}{}}{\Nil}{\StrToTokens(#1 )}}
\def\StrToTokens (#1 #2){%
- \EqStr{#1}{}%
+ \EqStr{#1}{}%
{\Nil}%
\Cons{#1}{\EqStr{#2}{} {\Nil} {\StrToTokens(#2)}}}
\def\ParseMove#1{% string -> unit
\ParseMoveA(#1)}
-\def\ParseMoveA(#1#2){% char -> string -> unit
+\def\ParseMoveA(#1#2){% char -> string -> unit
\IsPieceName{#1}%
{\gdef\PieceNameToMove{\skak@pieceToEnglish{#1}}%
\gdef\PieceToMove{\PieceNameToPiece{\PieceNameToMove}{\WhiteToMove}}%
{\IsPromotion{#1}%
{\def\Promotion{\True}%
\gdef\PromotionPieceName{\skak@pieceToEnglish{\FirstChar(#2)}}}}%
- {}% no more information is of interest
+ {}% no more information is of interest
}}}}
% help for \ParseCastling
% relies on the info gathered by ParseMove
-\def\FindPieceSquares#1#2{% bool -> square -> square list
+\def\FindPieceSquares#1#2{% bool -> square -> square list
\EqPiece{\PieceNameToMove}{R}%
{\ScanDirections%
{\EqPiece{\PieceToMove}}{#2}{\Listize[up,down,left,right]}}%
{\WhiteToMove%
{\errmessage{mainline: white, not black, to move}}%
{\MakeMove{#1}\gdef\NumberNext{\True}}}}}
-
+
\def\Mainline(#1 #2){%
\EqStr{Z}{#1}%
{\EqStr{Z}{#2}{}{\Mainline(#2)}}%
{\EqStr{[}{#1}%
- {\typeset@eatcomment#1#2QXXQQ}%
+ {\typeset@eatcomment#1#2WXWX}%
{\NumberNext%
{\EatNumber{#1}% sets \NumberOK, \ExpectedColour
- % executes a move not separated from the
+ % executes a move not separated from the
% number with a space, eg, 1.e4
\NumberOK%
{\gdef\NumberNext{\False}%
{\errmessage{mainline: not the correct move number}}}%
{\MakeMoveMainline{#1}%
\Mainline(#2)}}}}
-\def\typeset@eatcomment[#1]#2QXXQQ{\Mainline(#2)}
+\def\typeset@eatcomment[#1]#2WXWX{\Mainline(#2)}
%%%%% typesetting
%%% figurine notation
\def\mainlinestyle{\bfseries}%\let\Fig=\Figb}% could also contain
- % definitions of the
+ % definitions of the
% various style options
\def\variationstyle{}%\let\Fig=\Fign} % as with mainlinestyle
{\typeset@numberStripMove(#1)}}
\def\typeset@numberStripMove(#1W){%
\typeset@A@move{#1}}
-
+
\def\typeset@A@move#1{%
\TypeSetColour%
{\beforewhite\mbox{\typeset@A@moveA(#1Z)}\gdef\TypeSetColour{\False}}%
\typeset@A@moveA(#2)}}
+\def\commentstyle{\mdseries}% How embedded comments are typeset
\def\typeset@A#1{\gdef\TypeSetNumberNext{\True}%
\gdef\TypeSetAfterBlack{\False}\opentypesetting\typeset@AA(#1 Z )%
\closetypesetting}
\def\typeset@AA(#1 #2){%
\EqStr{Z}{#1}%
- {}%
+ {\EqStr{Z}{#2}{}{\typeset@AA(#2)}}%
{\EqStr{[}{#1}%
- {\typeset@printcomment#1#2QXXQX}%
+ {\typeset@printcomment#1#2WXWX}%
{{\TypeSetNumberNext%
{\typeset@number{#1}% sets \TypeSetColour
\gdef\TypeSetNumberNext{\False}%
\typeset@AA(#2)}%
{\typeset@A@move{#1}%
\typeset@AA(#2)}}}}}
-\def\typeset@printcomment[#1]#2QXXQX{{\ }{#1}{\typeset@AA(#2)}}
+\def\typeset@printcomment[#1]#2WXWX{%
+ \closetypesetting%
+ {\ }{\commentstyle{#1}}%
+ \opentypesetting\typeset@AA(#2)}
\def\variation{\begingroup\catcode`\#=12 \@variation}
\def\@variation#1{\endgroup{\variationstyle\typeset@A{#1}}}
{\EqPiece{Q}{#1}{L}%
{\EqPiece{q}{#1}{l}%
{\EqPiece{K}{#1}{J}{j}}}}}}}}}}}}}
-
+
\def\FilterShowOnly#1{% piece -> piece, shows only the pieces in
% ShowOnlyList
\Member{\EqStr}{#1}{\ShowOnlyList}%
\ToggleWhiteSquare%
% ps stuff
\ps@on{\expandafter\pnode\ps@squarecenter{#1}}{}}
-
+
\def\Showrank#1{% rank -> drawn rank
\Skak\Apply{\Showchar}{\Rank{#1}}}
\def\show@board{%
\def\WhiteSquare{\True}
\vbox{\offinterlineskip
- \hrule height1pt
+ \hrule height1pt
\hbox{\vrule width1pt
\vbox{\hbox{\Showrank{8}}\ToggleWhiteSquare
\hbox{\Showrank{7}}\ToggleWhiteSquare
\def\show@board@notation{%
\def\WhiteSquare{\True}%
\vbox{\offinterlineskip%
- \hrule height1pt
+ \hrule height1pt
\hbox{\ShowrankWithNumber{8}}\ToggleWhiteSquare
\hbox{\ShowrankWithNumber{7}}\ToggleWhiteSquare
\hbox{\ShowrankWithNumber{6}}\ToggleWhiteSquare
\def\show@board@notation@inverse{%
\def\WhiteSquare{\True}%
\vbox{\offinterlineskip%
- \hrule height1pt
+ \hrule height1pt
\hbox{\ShowrankInverseWithNumber{1}}\ToggleWhiteSquare
\hbox{\ShowrankInverseWithNumber{2}}\ToggleWhiteSquare
\hbox{\ShowrankInverseWithNumber{3}}\ToggleWhiteSquare