%%
%% This is file `l3box.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3box.dtx  (with options: `package')
%% 
%% EXPERIMENTAL CODE
%% 
%% Do not distribute this file without also distributing the
%% source files specified above.
%% 
%% Do not distribute a modified version of this file.
%% 
%% File: l3box.dtx Copyright (C) 2005-2011 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/svnroot/experimental/trunk/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3names}
\GetIdInfo$Id: l3box.dtx 3029 2011-12-06 22:47:30Z joseph $
  {L3 Experimental boxes}
\ProvidesExplPackage
  {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\package_check_loaded_expl:
\cs_new_protected:Npn \box_new:N #1
  {
    \chk_if_free_cs:N #1
    \newbox #1
  }
\cs_generate_variant:Nn \box_new:N { c }
\cs_new_protected:Npn \box_clear:N #1
  { \box_set_eq:NN  #1 \c_empty_box }
\cs_new_protected:Npn \box_gclear:N #1
  { \box_gset_eq:NN #1 \c_empty_box }
\cs_generate_variant:Nn \box_clear:N  { c }
\cs_generate_variant:Nn \box_gclear:N { c }
\cs_new_protected:Npn \box_clear_new:N #1
  {
    \cs_if_exist:NTF #1
      { \box_set_eq:NN #1 \c_empty_box }
      { \box_new:N #1 }
  }
\cs_new_protected:Npn \box_gclear_new:N #1
  {
    \cs_if_exist:NTF #1
      { \box_gset_eq:NN #1 \c_empty_box }
      { \box_new:N #1 }
  }
\cs_generate_variant:Nn \box_clear_new:N  { c }
\cs_generate_variant:Nn \box_gclear_new:N { c }
\cs_new_protected:Npn \box_set_eq:NN #1#2
  { \tex_setbox:D #1 \tex_copy:D #2 }
\cs_new_protected:Npn \box_gset_eq:NN
  { \tex_global:D \box_set_eq:NN }
\cs_generate_variant:Nn \box_set_eq:NN  { cN , Nc , cc }
\cs_generate_variant:Nn \box_gset_eq:NN { cN , Nc , cc }
\cs_new_protected:Npn \box_set_eq_clear:NN #1#2
  { \tex_setbox:D #1 \tex_box:D #2 }
\cs_new_protected:Npn \box_gset_eq_clear:NN
  { \tex_global:D  \box_set_eq_clear:NN }
\cs_generate_variant:Nn \box_set_eq_clear:NN  { cN , Nc , cc }
\cs_generate_variant:Nn \box_gset_eq_clear:NN { cN , Nc , cc }
\cs_new_eq:NN \box_ht:N \tex_ht:D
\cs_new_eq:NN \box_dp:N \tex_dp:D
\cs_new_eq:NN \box_wd:N \tex_wd:D
\cs_generate_variant:Nn \box_ht:N { c }
\cs_generate_variant:Nn \box_dp:N { c }
\cs_generate_variant:Nn \box_wd:N { c }
\cs_new_protected:Npn \box_set_dp:Nn #1#2
  { \box_dp:N #1 \dim_eval:w #2 \dim_eval_end: }
\cs_new_protected:Npn \box_set_ht:Nn #1#2
  { \box_ht:N #1 \dim_eval:w #2 \dim_eval_end: }
\cs_new_protected:Npn \box_set_wd:Nn #1#2
  { \box_wd:N #1 \dim_eval:w #2 \dim_eval_end: }
\cs_generate_variant:Nn \box_set_ht:Nn { c }
\cs_generate_variant:Nn \box_set_dp:Nn { c }
\cs_generate_variant:Nn \box_set_wd:Nn { c }
\cs_new_eq:NN \box_use_clear:N \tex_box:D
\cs_new_eq:NN \box_use:N \tex_copy:D
\cs_generate_variant:Nn \box_use_clear:N { c }
\cs_generate_variant:Nn \box_use:N { c }
\cs_new_protected:Npn \box_move_left:nn #1#2
  { \tex_moveleft:D \dim_eval:w #1 \dim_eval_end: #2 }
\cs_new_protected:Npn \box_move_right:nn #1#2
  { \tex_moveright:D \dim_eval:w #1 \dim_eval_end: #2 }
\cs_new_protected:Npn \box_move_up:nn #1#2
  { \tex_raise:D \dim_eval:w #1 \dim_eval_end: #2 }
\cs_new_protected:Npn \box_move_down:nn #1#2
  { \tex_lower:D \dim_eval:w #1 \dim_eval_end: #2 }
\cs_new_eq:NN \if_hbox:N      \tex_ifhbox:D
\cs_new_eq:NN \if_vbox:N      \tex_ifvbox:D
\cs_new_eq:NN \if_box_empty:N \tex_ifvoid:D
\prg_new_conditional:Npnn \box_if_horizontal:N #1 { p , T , F , TF }
  { \if_hbox:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
\prg_new_conditional:Npnn \box_if_vertical:N #1 { p , T , F , TF }
  { \if_vbox:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
\cs_generate_variant:Nn \box_if_horizontal_p:N { c }
\cs_generate_variant:Nn \box_if_horizontal:NT  { c }
\cs_generate_variant:Nn \box_if_horizontal:NF  { c }
\cs_generate_variant:Nn \box_if_horizontal:NTF { c }
\cs_generate_variant:Nn \box_if_vertical_p:N { c }
\cs_generate_variant:Nn \box_if_vertical:NT  { c }
\cs_generate_variant:Nn \box_if_vertical:NF  { c }
\cs_generate_variant:Nn \box_if_vertical:NTF { c }
\prg_new_conditional:Npnn \box_if_empty:N #1 { p , T , F , TF }
  { \if_box_empty:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
\cs_generate_variant:Nn \box_if_empty_p:N { c }
\cs_generate_variant:Nn \box_if_empty:NT  { c }
\cs_generate_variant:Nn \box_if_empty:NF  { c }
\cs_generate_variant:Nn \box_if_empty:NTF { c }
\cs_new_protected:Npn \box_set_to_last:N #1
  { \tex_setbox:D #1 \tex_lastbox:D }
\cs_new_protected:Npn \box_gset_to_last:N
  { \tex_global:D \box_set_to_last:N }
\cs_generate_variant:Nn \box_set_to_last:N  { c }
\cs_generate_variant:Nn \box_gset_to_last:N { c }
\cs_new_eq:NN \c_empty_box \voidb@x
\cs_new_eq:NN \l_tmpa_box \@tempboxa
\box_new:N \l_tmpb_box
\cs_new_protected:Npn \box_show:N #1
  {
    \cs_if_exist:NTF #1
      { \tex_showbox:D \use:n {#1} }
      {
        \msg_kernel_error:nnx { kernel } { variable-not-defined }
          { \token_to_str:N #1 }
      }
  }
\cs_generate_variant:Nn \box_show:N { c }
\cs_new_protected:Npn \box_show:Nnn #1#2#3
  {
    \group_begin:
      \int_set:Nn \tex_showboxbreadth:D {#2}
      \int_set:Nn \tex_showboxdepth:D {#3}
      \int_set_eq:NN \tex_tracingonline:D \c_one
      \box_show:N #1
    \group_end:
  }
\cs_generate_variant:Nn \box_show:Nnn { c }
\cs_new_protected:Npn \box_show_full:N #1
  { \box_show:Nnn #1 { \c_max_int } { \c_max_int } }
\cs_generate_variant:Nn \box_show_full:N { c }
\cs_new_protected:Npn \hbox:n { \tex_hbox:D \scan_stop: }
\cs_new_protected:Npn \hbox_set:Nn #1#2 { \tex_setbox:D #1 \tex_hbox:D {#2} }
\cs_new_protected:Npn \hbox_gset:Nn { \tex_global:D \hbox_set:Nn }
\cs_generate_variant:Nn \hbox_set:Nn { c }
\cs_generate_variant:Nn \hbox_gset:Nn { c }
\cs_new_protected:Npn \hbox_set_to_wd:Nnn #1#2#3
  { \tex_setbox:D #1 \tex_hbox:D to \dim_eval:w #2 \dim_eval_end: {#3} }
\cs_new_protected:Npn \hbox_gset_to_wd:Nnn
  { \tex_global:D \hbox_set_to_wd:Nnn }
\cs_generate_variant:Nn \hbox_set_to_wd:Nnn { c }
\cs_generate_variant:Nn \hbox_gset_to_wd:Nnn { c }
\cs_new_protected:Npn \hbox_set:Nw  #1
  { \tex_setbox:D #1 \tex_hbox:D \c_group_begin_token }
\cs_new_protected:Npn \hbox_gset:Nw
  { \tex_global:D \hbox_set:Nw }
\cs_generate_variant:Nn \hbox_set:Nw  { c }
\cs_generate_variant:Nn \hbox_gset:Nw { c }
\cs_new_eq:NN \hbox_set_end:  \c_group_end_token
\cs_new_eq:NN \hbox_gset_end: \c_group_end_token
\cs_new_eq:NN \hbox_set_inline_begin:N  \hbox_set:Nw
\cs_new_eq:NN \hbox_set_inline_begin:c  \hbox_set:cw
\cs_new_eq:NN \hbox_set_inline_end:     \hbox_set_end:
\cs_new_eq:NN \hbox_gset_inline_begin:N \hbox_gset:Nw
\cs_new_eq:NN \hbox_gset_inline_begin:c \hbox_gset:cw
\cs_new_eq:NN \hbox_gset_inline_end:    \hbox_gset_end:
\cs_new_protected:Npn \hbox_to_wd:nn #1#2
   { \tex_hbox:D to \dim_eval:w #1 \dim_eval_end: {#2} }
\cs_new_protected:Npn \hbox_to_zero:n #1 { \tex_hbox:D to \c_zero_skip {#1} }
\cs_new_protected:Npn \hbox_overlap_left:n  #1
  { \hbox_to_zero:n { \tex_hss:D #1 } }
\cs_new_protected:Npn \hbox_overlap_right:n #1
  { \hbox_to_zero:n { #1 \tex_hss:D } }
\cs_new_eq:NN \hbox_unpack:N \tex_unhcopy:D
\cs_new_eq:NN \hbox_unpack_clear:N \tex_unhbox:D
\cs_generate_variant:Nn \hbox_unpack:N { c }
\cs_generate_variant:Nn \hbox_unpack_clear:N { c }
\cs_new_protected:Npn \vbox:n { \tex_vbox:D \scan_stop: }
\cs_new_protected:Npn \vbox_top:n { \tex_vtop:D \scan_stop: }
\cs_new_protected:Npn \vbox_to_ht:nn #1#2
  { \tex_vbox:D to \dim_eval:w #1 \dim_eval_end: {#2} }
\cs_new_protected:Npn \vbox_to_zero:n #1 { \tex_vbox:D to \c_zero_dim {#1} }
\cs_new_protected:Npn \vbox_set:Nn #1#2 { \tex_setbox:D #1 \tex_vbox:D {#2} }
\cs_new_protected:Npn \vbox_gset:Nn  { \tex_global:D \vbox_set:Nn }
\cs_generate_variant:Nn \vbox_set:Nn  { c }
\cs_generate_variant:Nn \vbox_gset:Nn { c }
\cs_new_protected:Npn \vbox_set_top:Nn #1#2
  { \tex_setbox:D #1 \tex_vtop:D {#2} }
\cs_new_protected:Npn \vbox_gset_top:Nn
  { \tex_global:D \vbox_set_top:Nn }
\cs_generate_variant:Nn \vbox_set_top:Nn { c }
\cs_generate_variant:Nn \vbox_gset_top:Nn { c }
\cs_new_protected:Npn \vbox_set_to_ht:Nnn #1#2#3
  { \tex_setbox:D #1 \tex_vbox:D to \dim_eval:w #2 \dim_eval_end: {#3} }
\cs_new_protected:Npn \vbox_gset_to_ht:Nnn
  { \tex_global:D \vbox_set_to_ht:Nnn }
\cs_generate_variant:Nn \vbox_set_to_ht:Nnn  { c }
\cs_generate_variant:Nn \vbox_gset_to_ht:Nnn { c }
\cs_new:Npn \vbox_set:Nw #1
  { \tex_setbox:D #1 \tex_vbox:D \c_group_begin_token }
\cs_new_protected:Npn \vbox_gset:Nw
  { \tex_global:D \vbox_set:Nw }
\cs_generate_variant:Nn \vbox_set:Nw  { c }
\cs_generate_variant:Nn \vbox_gset:Nw { c }
\cs_new_eq:NN \vbox_set_end:  \c_group_end_token
\cs_new_eq:NN \vbox_gset_end: \c_group_end_token
\cs_new_eq:NN \vbox_set_inline_begin:N  \vbox_set:Nw
\cs_new_eq:NN \vbox_set_inline_begin:c  \vbox_set:cw
\cs_new_eq:NN \vbox_set_inline_end:  \vbox_set_end:
\cs_new_eq:NN \vbox_gset_inline_begin:N \vbox_gset:Nw
\cs_new_eq:NN \vbox_gset_inline_begin:c \vbox_gset:cw
\cs_new_eq:NN \vbox_gset_inline_end: \vbox_gset_end:
\cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D
\cs_new_eq:NN \vbox_unpack_clear:N \tex_unvbox:D
\cs_generate_variant:Nn \vbox_unpack:N { c }
\cs_generate_variant:Nn \vbox_unpack_clear:N { c }
\cs_new_protected:Npn \vbox_set_split_to_ht:NNn #1#2#3
  { \tex_setbox:D #1 \tex_vsplit:D #2 to \dim_eval:w #3 \dim_eval_end: }
\fp_new:N \l_box_angle_fp
\fp_new:N \l_box_cos_fp
\fp_new:N \l_box_sin_fp
\dim_new:N \l_box_top_dim
\dim_new:N \l_box_bottom_dim
\dim_new:N \l_box_left_dim
\dim_new:N \l_box_right_dim
\dim_new:N \l_box_top_new_dim
\dim_new:N \l_box_bottom_new_dim
\dim_new:N \l_box_left_new_dim
\dim_new:N \l_box_right_new_dim
\box_new:N \l_box_tmp_box
\fp_new:N \l_box_tmp_fp
\fp_new:N \l_box_x_fp
\fp_new:N \l_box_y_fp
\fp_new:N \l_box_x_new_fp
\fp_new:N \l_box_y_new_fp
\cs_new_protected:Npn \box_rotate:Nn #1#2
  {
    \hbox_set:Nn #1
      {
        \group_begin:
          \fp_set:Nn \l_box_angle_fp {#2}
          \box_rotate_set_sin_cos:
          \fp_compare:NNNTF \l_box_sin_fp = \c_zero_fp
            {
               \fp_compare:NNNTF \l_box_cos_fp = \c_one_fp
                 { \box_use:N #1 }
                 { \box_rotate_aux:N #1 }
            }
            { \box_rotate_aux:N #1 }
        \group_end:
    }
  }
\cs_new_protected:Npn \box_rotate_aux:N #1
  {
    \dim_set:Nn \l_box_top_dim    {  \box_ht:N #1 }
    \dim_set:Nn \l_box_bottom_dim { -\box_dp:N #1 }
    \dim_set:Nn \l_box_right_dim  {  \box_wd:N #1 }
    \dim_zero:N \l_box_left_dim
    \fp_compare:NNNTF \l_box_sin_fp > \c_zero_fp
      {
        \fp_compare:NNNTF \l_box_cos_fp > \c_zero_fp
          { \box_rotate_quadrant_one: }
          { \box_rotate_quadrant_two: }
      }
      {
        \fp_compare:NNNTF \l_box_cos_fp < \c_zero_fp
          { \box_rotate_quadrant_three: }
          { \box_rotate_quadrant_four: }
      }
    \hbox_set:Nn \l_box_tmp_box { \box_use:N #1 }
    \hbox_set:Nn \l_box_tmp_box
      {
        \tex_kern:D -\l_box_left_new_dim
        \hbox:n
          {
            \driver_box_rotate_begin:
            \box_use:N \l_box_tmp_box
            \driver_box_rotate_end:
          }
      }
    \box_set_ht:Nn \l_box_tmp_box {  \l_box_top_new_dim }
    \box_set_dp:Nn \l_box_tmp_box { -\l_box_bottom_new_dim }
    \box_set_wd:Nn \l_box_tmp_box
      { \l_box_right_new_dim - \l_box_left_new_dim }
    \box_use:N \l_box_tmp_box
  }
\cs_new_protected:Npn \box_rotate_set_sin_cos:
  {
    \fp_set_eq:NN \l_box_tmp_fp \l_box_angle_fp
    \fp_div:Nn \l_box_tmp_fp { 180 }
    \fp_mul:Nn \l_box_tmp_fp { \c_pi_fp }
    \fp_sin:Nn \l_box_sin_fp { \l_box_tmp_fp }
    \fp_cos:Nn \l_box_cos_fp { \l_box_tmp_fp }
  }
\cs_new_protected:Npn \box_rotate_x:nnN #1#2#3
  {
    \fp_set_from_dim:Nn \l_box_x_fp {#1}
    \fp_set_from_dim:Nn \l_box_y_fp {#2}
    \fp_set_eq:NN \l_box_x_new_fp \l_box_x_fp
    \fp_set_eq:NN \l_box_tmp_fp   \l_box_y_fp
    \fp_mul:Nn \l_box_x_new_fp { \l_box_cos_fp }
    \fp_mul:Nn \l_box_tmp_fp   { \l_box_sin_fp }
    \fp_sub:Nn \l_box_x_new_fp { \l_box_tmp_fp }
    \dim_set:Nn #3 { \fp_to_dim:N \l_box_x_new_fp }
  }
\cs_new_protected:Npn \box_rotate_y:nnN #1#2#3
  {
    \fp_set_from_dim:Nn \l_box_x_fp {#1}
    \fp_set_from_dim:Nn \l_box_y_fp {#2}
    \fp_set_eq:NN \l_box_y_new_fp \l_box_y_fp
    \fp_set_eq:NN \l_box_tmp_fp   \l_box_x_fp
    \fp_mul:Nn \l_box_y_new_fp { \l_box_cos_fp }
    \fp_mul:Nn \l_box_tmp_fp   { \l_box_sin_fp }
    \fp_add:Nn \l_box_y_new_fp { \l_box_tmp_fp }
    \dim_set:Nn #3 { \fp_to_dim:N \l_box_y_new_fp }
}
\cs_new_protected:Npn \box_rotate_quadrant_one:
  {
    \box_rotate_y:nnN \l_box_right_dim \l_box_top_dim
      \l_box_top_new_dim
    \box_rotate_y:nnN \l_box_left_dim  \l_box_bottom_dim
      \l_box_bottom_new_dim
    \box_rotate_x:nnN \l_box_left_dim  \l_box_top_dim
      \l_box_left_new_dim
    \box_rotate_x:nnN \l_box_right_dim \l_box_bottom_dim
      \l_box_right_new_dim
  }
\cs_new_protected:Npn \box_rotate_quadrant_two:
  {
    \box_rotate_y:nnN \l_box_right_dim \l_box_bottom_dim
      \l_box_top_new_dim
    \box_rotate_y:nnN \l_box_left_dim  \l_box_top_dim
      \l_box_bottom_new_dim
    \box_rotate_x:nnN \l_box_right_dim  \l_box_top_dim
      \l_box_left_new_dim
    \box_rotate_x:nnN \l_box_left_dim   \l_box_bottom_dim
      \l_box_right_new_dim
  }
\cs_new_protected:Npn \box_rotate_quadrant_three:
  {
    \box_rotate_y:nnN \l_box_left_dim  \l_box_bottom_dim
      \l_box_top_new_dim
    \box_rotate_y:nnN \l_box_right_dim \l_box_top_dim
      \l_box_bottom_new_dim
    \box_rotate_x:nnN \l_box_right_dim \l_box_bottom_dim
      \l_box_left_new_dim
    \box_rotate_x:nnN \l_box_left_dim   \l_box_top_dim
      \l_box_right_new_dim
  }
\cs_new_protected:Npn \box_rotate_quadrant_four:
  {
    \box_rotate_y:nnN \l_box_left_dim  \l_box_top_dim
      \l_box_top_new_dim
    \box_rotate_y:nnN \l_box_right_dim \l_box_bottom_dim
      \l_box_bottom_new_dim
    \box_rotate_x:nnN \l_box_left_dim  \l_box_bottom_dim
      \l_box_left_new_dim
    \box_rotate_x:nnN \l_box_right_dim \l_box_top_dim
      \l_box_right_new_dim
  }
\fp_new:N \l_box_scale_x_fp
\fp_new:N \l_box_scale_y_fp
\cs_new_protected:Npn \box_resize:Nnn #1#2#3
  {
    \hbox_set:Nn #1
      {
        \group_begin:
          \dim_set:Nn \l_box_top_dim    {  \box_ht:N #1 }
          \dim_set:Nn \l_box_bottom_dim { -\box_dp:N #1 }
          \dim_set:Nn \l_box_right_dim  {  \box_wd:N #1 }
          \dim_zero:N \l_box_left_dim
          \fp_set_from_dim:Nn \l_box_scale_x_fp {#2}
          \fp_set_from_dim:Nn \l_box_tmp_fp { \l_box_right_dim }
          \fp_div:Nn \l_box_scale_x_fp { \l_box_tmp_fp }
          \fp_set_from_dim:Nn \l_box_scale_y_fp {#3}
          \fp_set_from_dim:Nn \l_box_tmp_fp
            { \l_box_top_dim - \l_box_bottom_dim }
          \fp_div:Nn \l_box_scale_y_fp { \l_box_tmp_fp }
          \fp_compare:NNNTF \l_box_scale_x_fp = \c_one_fp
            {
              \fp_compare:NNNTF \l_box_scale_y_fp = \c_one_fp
                { \box_use:N #1 }
                { \box_resize_aux:Nnn #1 {#2} {#3} }
            }
            { \box_resize_aux:Nnn #1 {#2} {#3} }
        \group_end:
      }
  }
\cs_generate_variant:Nn \box_resize:Nnn { c }
\cs_new_protected:Npn \box_resize_aux:Nnn #1#2#3
  {
    \dim_compare:nNnTF {#2} > \c_zero_dim
      { \dim_set:Nn \l_box_right_new_dim {#2} }
      { \dim_set:Nn \l_box_right_new_dim { \c_zero_dim - ( #2 ) } }
    \dim_compare:nNnTF {#3} > \c_zero_dim
      {
        \dim_set:Nn \l_box_top_new_dim
          { \fp_use:N \l_box_scale_y_fp \l_box_top_dim }
        \dim_set:Nn \l_box_bottom_new_dim
          { \fp_use:N \l_box_scale_y_fp \l_box_bottom_dim }
      }
      {
        \dim_set:Nn \l_box_top_new_dim
          { - \fp_use:N \l_box_scale_y_fp \l_box_top_dim }
        \dim_set:Nn \l_box_bottom_new_dim
          { - \fp_use:N \l_box_scale_y_fp \l_box_bottom_dim }
      }
    \box_resize_common:N #1
  }
\cs_new_protected:Npn \box_resize_to_ht_plus_dp:Nn #1#2
  {
    \hbox_set:Nn #1
      {
        \group_begin:
          \dim_set:Nn \l_box_top_dim    {  \box_ht:N #1 }
          \dim_set:Nn \l_box_bottom_dim { -\box_dp:N #1 }
          \dim_set:Nn \l_box_right_dim  {  \box_wd:N #1 }
          \dim_zero:N \l_box_left_dim
          \fp_set_from_dim:Nn \l_box_scale_y_fp {#2}
          \fp_set_from_dim:Nn \l_box_tmp_fp
            { \l_box_top_dim - \l_box_bottom_dim }
          \fp_div:Nn \l_box_scale_y_fp { \l_box_tmp_fp }
          \fp_set_eq:NN \l_box_scale_x_fp \l_box_scale_y_fp
          \fp_compare:NNNTF \l_box_scale_y_fp = \c_one_fp
            { \box_use:N #1 }
            { \box_resize_aux:Nnn #1 {#2} {#2} }
        \group_end:
      }
  }
\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c }
\cs_new_protected:Npn \box_resize_to_wd:Nn #1#2
  {
    \hbox_set:Nn #1
      {
        \group_begin:
          \dim_set:Nn \l_box_top_dim    {  \box_ht:N #1 }
          \dim_set:Nn \l_box_bottom_dim { -\box_dp:N #1 }
          \dim_set:Nn \l_box_right_dim  {  \box_wd:N #1 }
          \dim_zero:N \l_box_left_dim
          \fp_set_from_dim:Nn \l_box_scale_x_fp {#2}
          \fp_set_from_dim:Nn \l_box_tmp_fp { \l_box_right_dim }
          \fp_div:Nn \l_box_scale_x_fp { \l_box_tmp_fp }
          \fp_set_eq:NN \l_box_scale_y_fp \l_box_scale_x_fp
          \fp_compare:NNNTF \l_box_scale_x_fp = \c_one_fp
            { \box_use:N #1 }
            { \box_resize_aux:Nnn #1 {#2} {#2} }
        \group_end:
      }
  }
\cs_generate_variant:Nn \box_resize_to_wd:Nn { c }
\cs_new_protected:Npn \box_scale:Nnn #1#2#3
  {
    \hbox_set:Nn #1
      {
        \group_begin:
          \fp_set:Nn \l_box_scale_x_fp {#2}
          \fp_set:Nn \l_box_scale_y_fp {#3}
          \dim_set:Nn \l_box_top_dim    {  \box_ht:N #1 }
          \dim_set:Nn \l_box_bottom_dim { -\box_dp:N #1 }
          \dim_set:Nn \l_box_right_dim  {  \box_wd:N #1 }
          \dim_zero:N \l_box_left_dim
          \fp_compare:NNNTF \l_box_scale_x_fp = \c_one_fp
            {
              \fp_compare:NNNTF \l_box_scale_y_fp = \c_one_fp
                { \box_use:N #1 }
                { \box_scale_aux:Nnn #1 {#2} {#3} }
            }
            { \box_scale_aux:Nnn #1 {#2} {#3} }
        \group_end:
      }
  }
\cs_generate_variant:Nn \box_scale:Nnn { c }
\cs_new_protected:Npn \box_scale_aux:Nnn #1#2#3
  {
    \fp_compare:NNNTF \l_box_scale_y_fp > \c_zero_fp
      {
        \dim_set:Nn \l_box_top_new_dim    { #3 \l_box_top_dim }
        \dim_set:Nn \l_box_bottom_new_dim { #3 \l_box_bottom_dim }
      }
      {
        \dim_set:Nn  \l_box_top_new_dim    { -#3 \l_box_bottom_dim }
        \dim_set:Nn  \l_box_bottom_new_dim { -#3 \l_box_top_dim }
      }
    \fp_compare:NNNTF \l_box_scale_x_fp > \c_zero_fp
      { \l_box_right_new_dim #2 \l_box_right_dim }
      { \l_box_right_new_dim -#2 \l_box_right_dim }
    \box_resize_common:N #1
  }
\cs_new_protected:Npn \box_resize_common:N #1
  {
    \hbox_set:Nn \l_box_tmp_box
      {
        \driver_box_scale_begin:
        \hbox_overlap_right:n { \box_use:N #1 }
        \driver_box_scale_end:
      }
    \box_set_ht:Nn \l_box_tmp_box { \l_box_top_new_dim }
    \box_set_dp:Nn \l_box_tmp_box { \l_box_bottom_new_dim }
    \fp_compare:NNNTF \l_box_scale_x_fp < \c_zero_fp
      {
        \hbox_to_wd:nn { \l_box_right_new_dim }
          {
            \tex_kern:D \l_box_right_new_dim
            \box_use:N \l_box_tmp_box
            \tex_hss:D
          }
      }
      {
        \box_set_wd:Nn \l_box_tmp_box { \l_box_right_new_dim }
        \box_use:N \l_box_tmp_box
      }
  }
\cs_new_protected:Npn \box_clip:N #1
  { \hbox_set:Nn #1 { \driver_box_use_clip:N #1 } }
\cs_generate_variant:Nn \box_clip:N { c }
\cs_new_protected:Npn \box_trim:Nnnnn #1#2#3#4#5
  {
    \box_set_wd:Nn #1 { \box_wd:N #1 - \dim_eval:n {#4} - \dim_eval:n {#2} }
    \hbox_set:Nn #1
      {
        \skip_horizontal:n { - \dim_eval:n {#2} }
        \box_use:N #1
      }
    \dim_compare:nNnTF { \box_dp:N #1 } > {#3}
      { \box_set_dp:Nn #1 { \box_dp:N #1 - \dim_eval:n {#3} } }
      {
        \hbox_set:Nn #1
          {
            \box_move_down:nn { \dim_eval:n {#3} - \box_dp:N #1 }
              { \box_use:N #1 }
          }
        \box_set_dp:Nn #1 \c_zero_dim
      }
    \dim_compare:nNnTF { \box_ht:N #1 } > {#5}
      { \box_set_ht:Nn #1 { \box_ht:N #1 - \dim_eval:n {#5} } }
      {
        \hbox_set:Nn #1
          {
            \box_move_up:nn { \dim_eval:n {#5} - \box_ht:N #1 }
              { \box_use:N #1 }
          }
        \box_set_ht:Nn #1 \c_zero_dim
      }
  }
\cs_generate_variant:Nn \box_trim:Nnnnn { c }
\cs_new_protected:Npn \box_viewport:Nnnnn #1#2#3#4#5
  {
    \box_set_wd:Nn #1 { \dim_eval:n {#4} - \dim_eval:n {#2} }
    \hbox_set:Nn #1
      {
        \skip_horizontal:n { - \dim_eval:n {#2} }
        \box_use:N #1
      }
    \dim_compare:nNnTF {#3} > \c_zero_dim
      {
        \hbox_set:Nn #1 { \box_move_down:nn {#3} { \box_use:N #1 } }
        \box_set_dp:Nn #1 \c_zero_dim
      }
      { \box_set_dp:Nn #1 { - \dim_eval:n {#3} } }
    \dim_compare:nNnTF {#5} > \c_zero_dim
      { \box_set_ht:Nn #1 {#5} }
      {
        \hbox_set:Nn #1
          { \box_move_up:nn { -\dim_eval:n {#5} } { \box_use:N #1 } }
        \box_set_ht:Nn #1 \c_zero_dim
      }
  }
\cs_generate_variant:Nn \box_viewport:Nnnnn { c }
\cs_new_eq:NN \l_last_box \tex_lastbox:D
%% 
%%
%% End of file `l3box.sty'.
