# -*- mode: Perl -*-
# /=====================================================================\ #
# |  adjustbox                                                          | #
# | 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.     | #
# |---------------------------------------------------------------------| #
# | Bruce Miller <bruce.miller@nist.gov>                        #_#     | #
# | http://dlmf.nist.gov/LaTeXML/                              (o o)    | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;

InputDefinitions('adjustbox', type => 'sty', noltxml => 1);

# Some strategic redefinitions
# (undoubtedly more needed)
# and, of course, not all directives have an effect...

# Some Issues:
#  * some resizing combos set BOTH size & scale; does that double the effect?
#  * some constructs are creating ltx:inline-block,
#    when *sometimes* they should just create ltx:text;  Can we detect when???

# collectbox's approach to starting a block for environments isn't quite working; Force a \par
Let('\lx@save@@adjustbox', '\@adjustbox');
DefMacro('\@adjustbox', '\ifcollectboxenv\par\fi\lx@save@@adjustbox');

# Redefined so the frame contains \BOXCONTENT, rather than (attempted) \hskip overlap
# \adjbox@@frame{setframecolor}{fboxrule}{fboxsep}{???}
DefMacro('\adjbox@@frame{}{}{}{}',
  '\ifx\@nnil#2\@nnil\else\adjsetlength\fboxrule{#2}\fi'
    . '\ifx\@nnil#3\@nnil\else\adjsetlength\fboxsep{#3}\fi'
    . '\@framebox{\BOXCONTENT}');

# Since adjustbox is adapting the already digested content in \BOXCONTENT,
# and we encode color & bgcolor in the font, which is already incorporated into the box
# we need to RE-digest the box, to apply the changed color!
DefMacro('\@bgcolorbox{}', '{\let\color\pagecolor\hbox{#1\lx@RE@BOXCONTENT}}');
DefPrimitive('\lx@RE@BOXCONTENT', sub {
    if (my $cbox = LookupRegister(T_CS('\collectedbox'))) {
      if (my $box = LookupValue('box' . $cbox->valueOf)) {
        return Digest(Tokens(Revert($box))); } }
    return; });

1;
