# -*- mode: Perl -*-
# /=====================================================================\ #
# |  marginnote                                                         | #
# | Implementation for LaTeXML                                          | #
# |=====================================================================| #
# | Part of LaTeXML:                                                    | #
# |  Public domain software, produced as part of work done by the       | #
# |  United States Government & not subject to copyright in the US.     | #
# |---------------------------------------------------------------------| #
# | Tim Prescott <teepeemm@gmail.com>                           #_#     | #
# | http://dlmf.nist.gov/LaTeXML/                              (o o)    | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;

DefConditional('\if@mn@verbose');

# not documented, but in the implementation
DeclareOption('quiet',   sub { Let('\if@mn@verbose', '\iffalse'); });
DeclareOption('verbose', sub { Let('\if@mn@verbose', '\iftrue'); });

DeclareOption('parboxrestore',   sub { DefMacro('\mn@parboxrestore', '\@parboxrestore'); });
DeclareOption('noparboxrestore', sub { DefMacro('\mn@parboxrestore', Tokens()); });

foreach my $ignoredOption (qw(fulladjust heightadjust depthadjust noadjust)) {
  DeclareOption($ignoredOption, undef); }
ExecuteOptions('verbose', 'fulladjust', 'parboxrestore');
ProcessOptions();

DefMacro('\marginfont',            '\normalcolor');
DefMacro('\raggedleftmarginnote',  '\raggedleft');
DefMacro('\raggedrightmarginnote', '\raggedright');

# marginnote is marginpar shifted vertically by #3 (which we ignore)
DefMacro('\marginnote[]{}[]', sub {
    TokenizeInternal('\marginpar'
        . ($_[1] ? '[\mn@parboxrestore\marginfont\raggedleftmarginnote ' . $_[1]->toString . ']' : '')
        . '{\mn@parboxrestore\marginfont\raggedrightmarginnote ' . $_[2]->toString . '}'); });

DefMacro('\@mn@if@RTL', sub {
    if (LookupValue('\if@RTL') and IfCondition('\if@RTL')) {
      return T_CS('\@firstoftwo'); }
    else {
      return T_CS('\@secondoftwo'); } });

# stubs that could do something but do not
DefRegister('\marginnotevadjust'   => Dimension(0));
DefRegister('\marginnotetextwidth' => LookupRegister('\textwidth'));
Let('\newmarginnote', '\newlabel');
Let('\mn@lastxpos',   '\lastxpos');
Let('\mn@savepos',    '\savepos');
Let('\mn@pagewidth',  '\pagewidth');
Let('\mn@strut',      '\strut');
Let('\mn@vadjust',    '\vadjust');

# stubs that do nothing
DefMacro('\@mn@marginnote []{}',     Tokens());
DefMacro('\@mn@@marginnote []{}[]',  Tokens());
DefMacro('\@mn@@@marginnote []{}[]', Tokens());
DefMacro('\@mn@margintest',          Tokens());
DefMacro('\@mn@thispage',            Tokens());
DefMacro('\@mn@atthispage',          Tokens());
DefMacro('\@mn@currpage',            Tokens());
DefMacro('\@mn@currxpos',            Tokens());
DefMacro('\mn@vlap {}',              Tokens());
DefMacro('\mn@zbox {}',              Tokens());

NewCounter('mn@abspage');

1;