%% %% This is file `wgexport.cls', %% generated with the docstrip utility. %% %% The original source files were: %% %% util/export.dtx (with options: `exportcls') %% %% Copyright (C) 2019 Christian Holm. %% %% This file is NOT the source for wargame, because almost all comments %% have been stripped from it. It is NOT the preferred form of universal %% for making modifications to it. %% %% Therefore you can NOT redistribute and/or modify THIS file. You can %% however redistribute the complete source (wargame.dtx and wargame.ins) %% and/or modify it under the terms of the GNU General Public License as %% published by the Free Software Foundation; either version 2, or (at %% your option) any later version. %% %% The wargame package is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %% General Public License for more details. %% %% You should have received a copy of the GNU General Public %% License along with this package; if not, write to the %% Free Software Foundation, Inc., %% 675 Mass Ave, Cambridge, %% MA 02139, USA. %% %% See the file wargame.dtx for further comments and documentation. %% \ProvidesClass{wgexport} \PassOptionsToClass{multi=tikzpicture,varwidth=false}{standalone} \DeclareOption{noterrainpic}{% \PassOptionsToPackage{\CurrentOption}{wargame}} \DeclareOption{terrainpic}{% \PassOptionsToPackage{\CurrentOption}{wargame}} \DeclareOption*{% \PassOptionsToClass{\CurrentOption}{standalone}} \ProcessOptions\relax \LoadClass{standalone} \RequirePackage{wargame} \begingroup \catcode`\^^I=12 \def\@tabchar{^^I} \catcode`<=1 \catcode`>=2 \catcode`{=12 \catcode`}=12 \gdef\@lbchar<{> \gdef\@rbchar<}> \endgroup \newenvironment{imagelist}[1][\jobname]{% \newwrite\mk@out% \def\mk@i{}% \def\mk@w{\immediate\write\mk@out}% \immediate\openout\mk@out=#1.json \mk@w{[} }{ \mk@w{\mk@i \@lbchar "name":"End of list", "category": "<>", "subcategory": "" \@rbchar } \mk@w{]} \immediate\closeout\mk@out } \def\info{% \@ifstar{\@@info{,}}{\@@info{\@rbchar,}}} \def\@@info#1#2#3#4{% \chit@dbg{2}{Making image `#2' of type `#3'/`#4' on page \thepage}% \mk@w{ \@lbchar}% \mk@w{ \space "name": "#2",}% \mk@w{ \space "category": "#3",}% \mk@w{ \space "subcategory": "#4", }% \mk@w{ \space "number": \thepage #1}% \let\oldmk@i\mk@i% \ifx#1,\relax\edef\mk@i{\mk@i\space\space}\fi} \def\end@info{% \let\mk@i\oldmk@i% \mk@w{ \space \@rbchar,}} \newcommand\chitimages[2][]{% \begingroup% \let\chit@report\do@chit@report% \let\natoapp@report\do@natoapp@report% \chit@dbg{2}{chits to make images of `#2'}% \foreach[count=\ti from 0] \t/\x in #2{% \chit@dbg{2}{^^JRow: `\t' (`\x')} \ifx\t\empty\else% Ignore empty rows \chit@dbg{5}{^^JSubcategory: `\x' (default `#1')} % Take sub-category or default \ifx\t\x\def\x{#1}\else\ifx\x\empty\def\x{#1}\fi\fi \foreach \u/\m in \t{% \ifx\u\empty\else% Ignore empty cells \ifx\u\chit@blank\else% \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}% \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined \ifx\u\m\def\m{1}\fi% If the same as unit \chit@dbg{2}{Next chit `\u' multiplicity `\m'}% %% We only make one copy of the chit, since we can duplicate %% it in VASSAL \info*{\u}{counter}{\x} \begin{tikzpicture} \chit[\u=\ti]% \end{tikzpicture} \end@info% %% \foreach \n in {1,...,\m}{% Make a number of copies %% \ifx\u\chit@blank% %% \chit@dbg{3}{Ignoring blank chit:\u}% %% \else% %% \info{\u}{counter}{#2} %% \begin{tikzpicture} %% \chit[\u=\ti](\c,\r)% %% \end{tikzpicture} %% \fi% %% }% \fi% \fi% }% \chit@dbg{2}{End of inner loop}% \fi% }% \chit@dbg{2}{End of outer loop}% \endgroup% } \newcommand\doublechitimages[2][]{% \begingroup% \let\chit@report\do@chit@report% \let\natoapp@report\do@natoapp@report% \foreach[count=\ti from 0] \t/\x in #2{% \ifx\t\empty\else% Ignore empty rows \chit@dbg{5}{^^JSubcategory: `\x' (default `#1')} % Take sub-category or default \ifx\t\x\def\x{#1}\else\ifx\x\empty\def\x{#1}\fi\fi \foreach \u/\m in \t{% \ifx\u\empty\else% Ignore empty cells \ifx\u\chit@blank\else% \chit@dbg{2}{Next chit `\u' with possible multiplicity `\m'}% \ifx\m\@empty\def\m{1}\fi% If not multiplicity defined \ifx\u\m\def\m{1}\fi% If the same as unit \chit@dbg{2}{Next chit `\u' multiplicity `\m'}% %% Flipped chit \edef\s{\u\space flipped}% %% We only make one copy of the chit, since we can duplicate %% it in VASSAL \info*{\u}{counter}{\x}% \begin{tikzpicture}% \chit[\u=\ti]% \end{tikzpicture}% \end@info% \info*{\s}{counter}{\x}% \begin{tikzpicture}% \chit[\s=\ti]% \end{tikzpicture}% \end@info% %% \foreach \n in {1,...,\m}{% Make a number of copies %% \ifx\u\chit@blank% %% \chit@dbg{3}{Ignoring blank chit:\u}% %% \else% %% \info{\u}{counter}{#2} %% \begin{tikzpicture} %% \chit[\u=\ti](\c,\r)% %% \end{tikzpicture} %% \fi% %% }% \fi% \fi% }% \fi% }% \endgroup% } \def\mk@transform{% \pgfgettransformentries{\mxx}{\mxy}{\myx}{\myy}{\ptdx}{\ptdy} \wg@pt@to@cm{\ptdx}\edef\dx{\pgfmathresult} \wg@pt@to@cm{\ptdy}\edef\dy{\pgfmathresult} \mk@w{ \mk@i "xx": \mxx,} \mk@w{ \mk@i "xy": \mxy,} \mk@w{ \mk@i "yx": \myx,} \mk@w{ \mk@i "yy": \myy,} \mk@w{ \mk@i "dx": \dx,} \mk@w{ \mk@i "dy": \dy,} } \def\mk@bb#1{% \wg@get@bb{#1} \mk@w{ \mk@i "lower left": [\llx,\lly],} \mk@w{ \mk@i "upper right": [\urx,\ury],} \begingroup \wg@get@global@nchor{#1}{south west} \mk@w{ \mk@i "global lower left": [\tmp@x,\tmp@y],} \wg@get@global@nchor{#1}{north east} \mk@w{ \mk@i "global upper right": [\tmp@x,\tmp@y]} \endgroup } \def\mk@pos#1(#2){% \wg@dbg{10}{^^JMarking `#2' with `#1' - start} \coordinate[transform shape] (tmp) at (#2) {}; \wg@get@nchor{tmp}{center} \wg@dbg{3}{^^JMarking `#2' with `#1' - `\tmp@x',\tmp@y'} \tikzset{zone point={#1}{\tmp@x}{\tmp@y}} } \pgfdeclaredecoration{record path construction}{initial}{% \state{initial}[width=0pt,next state=more]{ \begingroup \pgf@decorate@inputsegment@first \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y} \xdef\wg@path{[\x,\y]} \endgroup }% \state{more}[width=\pgfdecoratedinputsegmentremainingdistance]{% \begingroup \pgf@decorate@inputsegment@last \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y} \xdef\wg@path{\wg@path,[\x,\y]} \endgroup } \state{final}{% \begingroup \pgf@decorate@inputsegment@last \ptpoint@to@cm{\the\pgf@x}{\the\pgf@y} \xdef\wg@path{\wg@path,[\x,\y]} \endgroup \mk@w{ \mk@i "zone path \wg@record@path@name": \@lbchar} \mk@w{ \mk@i\space "path": [\wg@path] \@rbchar,} } }% \newenvironment{boardimage}[3][board]{% \def\bd@n{#2} \newcount\mk@point \mk@point=0 \let\oomk@i\mk@i% \let\markpos\mk@pos% \info{dummy}{<>}{}% %\tikz{}% \tikz{\scoped[% every hex/.try,every hex node/.try, ]{% \def\hex@col{0}% \def\hex@row{0}% \node[hex,inner sep=0,outer sep=0]{% \message{^^JHex label: `\meaning\hex@label'}% \global\let\mk@label\hex@label}}}% \info*{#2}{#1}{#3}% \mk@w{ \mk@i "zones": \@lbchar}% \edef\mk@i{\mk@i\space} %% Everything is made into centimeters \mk@w{ \mk@i "units": "cm",} \hex@dbg{0}{Label: `\meaning\mk@label'} \@ifundefined{mk@label}{}{\mk@w{ \mk@i "labels": "\mk@label",}} %% Write out coordinate options as "coords" object \mk@w{ \mk@i"coords": \@lbchar}% \mk@w{ \mk@i "row": \@lbchar}% \mk@w{ \mk@i\space "offset": \hex@coords@row@off,}% \mk@w{ \mk@i\space "factor": \hex@coords@row@fac \@rbchar,}% \mk@w{ \mk@i "column": \@lbchar}% \mk@w{ \mk@i\space "offset": \hex@coords@col@off,}% \mk@w{ \mk@i\space "factor": \hex@coords@col@fac,}% \mk@w{ \mk@i\space "top short": "\hex@top@short@col",}% \mk@w{ \mk@i\space "bottom short": "\hex@bot@short@col" \@rbchar}% \mk@w{ \mk@i\@rbchar,}% %% \let\oldbo@rdframe\bo@rdframe% \def\bo@rdframe[##1](##2)(##3){% \oldbo@rdframe[##1](##2)(##3)% \mk@w{ \mk@i"board frame": \@lbchar} \mk@w{ \mk@i\space "lower left": [\llx,\lly],} \mk@w{ \mk@i\space "upper right": [\urx,\ury],} \mk@w{ \mk@i\space "margin": \margin,} \mk@w{ \mk@i\space "width": \w,} \mk@w{ \mk@i\space "height": \h \@rbchar,}}% \tikzset{ zoned/.code={% Apply to whole picture \pgfkeys{% % This needs to be done in the picture! /tikz/execute at end picture={% \mk@w{ \mk@i "zoned": \@lbchar} \mk@transform% \mk@bb{current bounding box} \mk@w{ \mk@i \@rbchar,} } } }, zone scope/.code={% \mk@w{ \mk@i"zone scope ##1": \@lbchar} \let\omk@i\mk@i \edef\mk@i{\mk@i\space} \mk@transform% %\bd@w{ \@rbchar,} \gdef\wg@export@box{##1}% \pgfkeys{% /tikz/local bounding box=wg export box, /tikz/execute at end scope={ \mk@bb{wg export box} \let\mk@i\omk@i \mk@w{ \mk@i\@rbchar,}}, } % pgfkeys }, % zone scope zone point/.code n args={3}{ \pgf@xa=##2 cm \pgf@ya=##3 cm \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}} % \pgfpointtransformed{\pgfpoint{0pt}{0pt}} \pgf@xa=\pgf@x \pgf@ya=\pgf@y \wg@pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult} \wg@pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult} \advance\mk@point1 \global\mk@point=\mk@point \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py] \@rbchar, } %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py} }, zone oob point/.code n args={3}{ \pgf@xa=##2 cm \pgf@ya=##3 cm \advance\pgf@xa.1cm \advance\pgf@ya.1cm \pgfpointtransformed{\pgfpoint{\pgf@xa}{\pgf@ya}} % \pgfpointtransformed{\pgfpoint{0pt}{0pt}} \pgf@xa=\pgf@x \pgf@ya=\pgf@y \wg@pt@to@cm{\the\pgf@xa}\edef\px{\pgfmathresult} \wg@pt@to@cm{\the\pgf@ya}\edef\py{\pgfmathresult} \advance\mk@point1 \global\mk@point=\mk@point \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "parent": "\wg@export@box", "type": "point", "coords": [\px,\py] \@rbchar, } %\message{^^JZone point \the\mk@point\space ##1: ##2,##3 -> \px,\py} }, zone global point/.code n args={3}{ \advance\mk@point1 \global\mk@point=\mk@point \mk@w{ \mk@i "point\the\mk@point": \@lbchar "name": "##1", "type": "point", "coords": [\px,\py] \@rbchar, } }, /pgf/decoration/record path name/.store in=\wg@record@path@name, zone path/.style={% postaction={decorate,decoration={ record path construction, record path name=##1}} } % zone path }% tikzset } {% \mk@w{ \mk@i "name": "\bd@n" }% \let\mk@i\oomk@i% \mk@w{ \mk@i\@rbchar}% \end@info% } \def\wg@gennumberm@rkers#1#2#3{ \message{^^JNumbered markers: Type=`#1' Max=`#2' Category=`#3'} \def\markers{} \def\keys{} \foreach \i in {1,...,#2}{% \xdef\keys{/tikz/#1 \i/.style={/tikz/#1=\i},\keys} \xdef\markers{\markers,#1 \i}} {% \nopagecolor\pgfkeysalsofrom{\keys}\chitimages[#3]{\markers}}}% \tikzset{ wg hidden unit/.pic={}, wg hidden unit/.style={ chit={ frame={draw=none,fill=none}, full=wg hidden unit}}} \DeclareRobustCommand\battlemarkers[2][BattleMarkers]{% \wg@gennumberm@rkers{battle marker}{#2}{#1}% \message{^^JMake a hidden unit and add to Markers category} {% \nopagecolor% \chitimages[Markers]{{wg hidden unit}}% % \info{battle-marker-icon}{icon}{}% \tikz[scale=.7,transform shape]{\pic{battle marker=0};}% \info{clear-battles-icon}{icon}{} \tikz[scale=.4,transform shape]{% \pic{eliminate icon}; \pic[scale=.7,transform shape] at (-.3,0) {battle marker=0};}% }% } \def\wg@gencolorm@rkers#1#2#3{% \def\markers{} \def\keys{} \foreach \o/\f in {#2}{% \ifx\o\f\def\f{white}\fi% \message{^^JOdds marker `#1 \o' w/fill `\f'}% \xdef\keys{/tikz/#1 \o/.style={/tikz/#1={\o,\f}},\keys} \xdef\markers{\markers,#1 \o}} {\nopagecolor\pgfkeysalsofrom{\keys}\chitimages[#3]{\markers}}}% \DeclareRobustCommand\oddsmarkers[2][OddsMarkers]{% \wg@gencolorm@rkers{odds marker}{#2}{#1}% \info{odds-battles-icon}{icon}{} \tikz[scale=.5,transform shape]{\pic{odds marker={?:?,white}}} \info{resolve-battles-icon}{icon}{} \tikz[scale=.3,transform shape]{% \pic{dice}; \pic[scale=1.2,transform shape] at (-.2,-.2) {battle marker=0};}% } \DeclareRobustCommand\resultmarkers[2][ResultMarkers]{% \wg@gencolorm@rkers{result marker}{#2}{#1}} \DeclareRobustCommand\commonicons[2]{% \begingroup% \nopagecolor% \tikzset{icon/.style={scale=.4,transform shape}}% % \info{pool-icon}{icon}{} \tikz[icon]{\pic{pool icon};} % \info{oob-icon}{icon}{}% \tikz[icon]{\pic{oob icon={#1}{#2}};}% % \info{flip-icon}{icon}{}% \tikz[icon]{\pic{flip icon};}% % \info{eliminate-icon}{icon}{}% \tikz[icon]{\pic{eliminate icon};}% % \info{restore-icon}{icon}{}% \tikz[icon]{\pic{restore icon};}% % \info{dice-icon}{icon}{}% \tikz[icon,scale=.9]{\pic{dice};}% % \info{unit-icon}{icon}{}% \tikz[icon,scale=.7]{% \chit[fill=#1, symbol={[ scale line widths, line width=1pt, faction=friend, command=land, main=infantry, scale=1.3](0,-.15)}]}% \endgroup% } \def\dice{% \@ifnextchar[{\wg@dice}{\wg@dice[]}%] } \def\wg@dice[#1]{% \@ifnextchar[{\wg@@dice{#1}}{\wg@@dice{#1}[]} %] } \def\wg@@dice#1[#2]#3#4#5{% \foreach \v/\p in {#5}{% \info{#3-\v}{die-roll}{#3} \tikz[#1]{ \node[shape=#4,transform shape,draw=none,fill=black,opacity=.5] at (.05,-.03){}; \node[shape=#4,#2,transform shape]{\p};}}} \tikzset{ zone turn/.store in=\zone@turn, zone mult/.store in=\zone@mult } \def\@chit@rep@line#1#2{% \@ifundefined{#2}{}{ \edef\wg@chit@tmp{\csname #2\endcsname} {\escapechar=`/ \xdef\tmp{\detokenize\expandafter{\wg@chit@tmp} \@empty}} % \message{^^J\meaning\@tmp -> \meaning\tmp} \mk@w{ \mk@i\space "#1": "\tmp",}}} \def\do@chit@report{% \chit@dbg{3}{Start of Chit Report} \mk@w{ \mk@i "chit": \@lbchar} \chit@dbg{3}{Report - ID} \@ifundefined{id}{} {\mk@w{ \mk@i\space "id": "\id", }}% \chit@dbg{3}{Report - Symbol: `\meaning\chit@symbol'} \@ifundefined{chit@symbol}{}{\mk@w{ \mk@i\space "symbol": "true", }}% \chit@dbg{3}{Report - Full: `\meaning\chit@full'} \@chit@rep@line{full}{chit@full} \chit@dbg{3}{Report - Factors: `\meaning\chit@factors'} \@chit@rep@line{factors}{chit@factors}% \chit@dbg{3}{Report - Left: `\meaning\chit@left'} \@chit@rep@line{left}{chit@left}% \chit@dbg{3}{Report - Right: : `\meaning\chit@right'} \@chit@rep@line{right}{chit@right}% \chit@dbg{3}{Report - Upper left: `\meaning\chit@upper@left'} \@chit@rep@line{upper left}{chit@upper@left}% \chit@dbg{3}{Report - Lower left: `\meaning\chit@lower@left'} \@chit@rep@line{lower left}{chit@lower@left}% \chit@dbg{3}{Report - Upper right: `\meaning\chit@upper@right} \@chit@rep@line{upper right}{chit@upper@right}% \chit@dbg{3}{Report - Lower right: `\meaning\chit@lower@right'} \@chit@rep@line{lower right}{chit@lower@right}% \chit@dbg{3}{Report - End comma} \mk@w{ \mk@i\space "end": 0} \@ifundefined{chit@symbol}{ \mk@w{ \mk@i \@rbchar } }{ \mk@w{ \mk@i \@rbchar, }% NATOAPP6c will follow }% \chit@dbg{3}{End of Chit Report} } \def\do@natoapp@report{% \mk@w{ \mk@i "natoapp6c": \@lbchar} \@chit@rep@line{id}{\id} \@chit@rep@line{faction}{natoapp@fac} \@chit@rep@line{command}{natoapp@cmd} \@chit@rep@line{echelon}{natoapp@ech} \@chit@rep@line{main}{natoapp@main} \@chit@rep@line{left}{natoapp@left} \@chit@rep@line{right}{natoapp@right} \@chit@rep@line{upper}{natoapp@upper} \@chit@rep@line{lower}{natoapp@lower} \@chit@rep@line{below}{natoapp@below} \mk@w{ \mk@i\space "end": 0} \mk@w{ \mk@i \@rbchar} } %% Local Variables: %% mode: LaTeX %% End: %% %% End of file `wgexport.cls'.