% tabularray.4ht (2026-04-22-12:58), generated from tex4ht-4ht.tex
% Copyright 2022-2026 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2026-04-22-12:58}

\NewConfigure{tabularray}{8}
\NewConfigure{tabularrayignoredcell}{2}
\NewConfigure{tabularrayattributes}[1]{\concat:config\CellAttributes{#1\space}}
\NewConfigure{tabularraystyles}[1]{\concat:config\CellStyle{#1}}
\NewConfigure{tabularraycolumnwidth}{1}

\ExplSyntaxOn
\NewConfigure{tabularrayhalign}[2]{%
  \cs_set:cpn{tabularray_halign:#1}{#2}
}

\NewConfigure{tabularrayvalign}[2]{%
  \cs_set:cpn{tabularray_valign:#1}{#2}
}
\ExplSyntaxOff

\ExplSyntaxOn
\long\def\:tempa#1#2#3#4{%
  % insert <table>...</table>
  \a:tabularray\o:__tblr_environ_code:nnnn:{#1}{#2}{#3}{#4}\b:tabularray
}
\HLet\__tblr_environ_code:nnnn\:tempa

\long\def\:tempa#1{\int_set:Nn \c@rownum {#1}\xdef\HRow{\@arabic\c@rownum}\c:tabularray\o:__tblr_build_row:N:{#1}\d:tabularray}
\HLet\__tblr_build_row:N\:tempa
\ExplSyntaxOff

% disable rules
\ht:special{t4ht@_}
\ExplSyntaxOn
% #1 row number, #2 column, #3 hline number (there can be multiple), #4 css property to be set
\def\:tblr:hlinestyle#1#2#3#4{
  % get line height
  \tl_set:Ne \l__tblr_h_tl{ \__tblr_spec_item:ne { hline } { [#1](#3) / @hline-height } }
  % get dash style
  \tl_set:Ne \l__tblr_f_tl{\__tblr_spec_item:ne { hline } { [#1][#2](#3) / @dash }}
  % create CSS only when a dash style is set
  \tl_if_head_eq_meaning:VNT \l__tblr_f_tl \q__tblr_dash {
    % get hline color
    \tl_set:Ne \l__tblr_g_tl { \__tblr_spec_item:ne { hline } { [#1][#2](#3) / fg } }
    \def\:hlinecolor{\#000000}
    % convert color to CSS value if color is set
    \tl_if_empty:NF\l__tblr_g_tl{\get:xcolorcss{\l__tblr_g_tl}\:hlinecolor}
    % \Configure{tabularraystyles} doesn't expand attributes, so we need to expand it here
    % otherwise, we would get wrong color and hline style in the last row, because this macro is called twice here
    \tl_set:Ne \l__tblr_f_tl { \tl_tail:N \l__tblr_f_tl }
    \cs_set:ce{#4:}{#4:\dim_to_decimal_in_unit:nn{\l__tblr_h_tl*2}{1px}px~\l__tblr_f_tl\space~\:hlinecolor;}
    \Configure{tabularraystyles}{\csname#4:\endcsname}
  }
}

\def\:tblr:vlinestyle#1#2#3#4{
  \tl_set:Ne \l__tblr_t_tl{ \__tblr_spec_item:ne { vline } { [#2](#3) / @vline-width } }
  \tl_set:Ne \l__tblr_f_tl{\__tblr_spec_item:ne { vline } { [#1][#2](#3) / @dash }}
  \tl_if_head_eq_meaning:VNT \l__tblr_f_tl \q__tblr_dash {
    \tl_set:Ne \l__tblr_g_tl { \__tblr_spec_item:ne { vline } { [#1][#2](#3) / fg } }
    \def\:hlinecolor{\#000000}
    % convert color to CSS value if color is set
    \tl_if_empty:NF\l__tblr_g_tl{\get:xcolorcss{\l__tblr_g_tl}\:hlinecolor}
    % \Configure{tabularraystyles} doesn't expand attributes, so we need to expand it here
    % otherwise, we would get wrong color and hline style in the last row, because this macro is called twice here
    \tl_set:Ne \l__tblr_f_tl { \tl_tail:N \l__tblr_f_tl }
    \cs_set:ce{#4:}{#4:\dim_to_decimal_in_unit:nn{\l__tblr_t_tl*2}{1px}px~\l__tblr_f_tl\space~\:hlinecolor;}
    \Configure{tabularraystyles}{\csname#4:\endcsname}
  }
}
\ExplSyntaxOff

\ExplSyntaxOn
\long\def\:tempa#1#2{%
% find columns that are covered by rowspan and colspan
  \xdef\HCol{\@arabic\c@colnum}
  \xdef\HRow{\@arabic\c@rownum}
  \xdef\HMultispan{\int_use:N \lTblrCellColSpanInt}
  \xdef\HRowspan{\int_use:N \lTblrCellRowSpanInt}
  \let\CellAttributes\@empty
  \let\CellStyle\@empty
  % calculate ignored cells, if the current cell uses colspan or rowspan
  \int_step_inline:nnn{\c@rownum }{\c@rownum - 1 + \lTblrCellRowSpanInt}{
    \int_step_inline:nnn{\c@colnum }{\c@colnum - 1  + \lTblrCellColSpanInt}{
      % the loop always matches the current cell, we must ignore it
      \str_if_eq:eeF{\HCol.\HRow}{####1.##1}{%
        \cs_gset:cpn{ignoredcell-####1-##1}{}
      }
    }
  }
  \cs_if_exist_use:c{tabularray_halign:\g__tblr_cell_halign_tl}
  \cs_if_exist_use:c{tabularray_valign:\g__tblr_cell_valign_tl}
  % the vertical aligment can be set also in \g__tblr_cell_middle_tl, so we should try it as well
  \cs_if_exist_use:c{tabularray_valign:\g__tblr_cell_middle_tl}
  % calculate column width
  \dim_compare:nNnT {\__tblr_data_item:nen{column}{\HCol}{@col-width}} > {0pt}{
    \__tblr_get_table_width:% initialize \tablewidth
    \edef\HColWidth{\fp_eval:n{\__tblr_data_item:nen{column}{\HCol}{@col-width}/\tablewidth*100}\%}
    % save table width, preferably in CSS
    \a:tabularraycolumnwidth%
  }
  % there can be multiple hlines for each cell, but we only suport the first one, because of limitations of CSS
  \:tblr:hlinestyle{#1}{#2}{1}{border-top}
  \int_compare:nNnT{\HRow + \HRowspan - 1} = {\c@rowcount}{%
    % draw hline below the last row
    \:tblr:hlinestyle{\int_eval:n{\c@rownum + 1}}{#2}{1}{border-bottom}
  }
  % the same is true for vlines
  \:tblr:vlinestyle{#1}{#2}{1}{border-left}
  \int_compare:nNnT{\HCol + \HMultispan - 1} = {\c@colcount}{%
    % draw hline below the last row
    \:tblr:vlinestyle{#1}{\int_eval:n{\c@colnum + 1}}{1}{border-right}
  }
  % support for the background color
  \tl_set:Ne \l__tblr_b_tl
  { \__tblr_data_item:neen { cell } {#1} {#2} { background } }
  % save background color to the list of CSS, if it is set
  \tl_if_empty:NF \l__tblr_b_tl{
    \get:xcolorcss{\l__tblr_b_tl}\:bgcolor
    \Configure{tabularraystyles}{background-color: \:bgcolor;}
  }
  \tl_set:Ne \l__tblr_cell_fg_tl
  { \__tblr_data_item:neen { cell } {#1} {#2} { foreground } }
  % save background color to the list of CSS, if it is set
  \tl_if_empty:NF \l__tblr_cell_fg_tl{
    \get:xcolorcss{\l__tblr_cell_fg_tl}\:fgcolor
    \Configure{tabularraystyles}{color:\:fgcolor;}
  }
  % We can use something like \Configure{tabularrayattributes}{rowspan="\HRowspan"} in \Configure{tabularray}
  % to declare correct attributes for joined cells
  \int_compare:nNnT {\HRowspan} > {1}{\g:tabularray}
  \int_compare:nNnT {\HMultispan} > {1}{\h:tabularray}
  \cs_if_exist:cTF{ignoredcell-\the\c@colnum-\the\c@rownum}{%
    \a:tabularrayignoredcell\e:tabularray\o:__tblr_build_cell_content:NN:{#1}{#2}\f:tabularray\b:tabularrayignoredcell
  }{%
    \e:tabularray\o:__tblr_build_cell_content:NN:{#1}{#2}\f:tabularray
  }
  % the ignored cell is global, so we must undefine it after the thes
  \cs_undefine:c{ignoredcell-\the\c@colnum-\the\c@rownum}%
}
\HLet\__tblr_build_cell_content:NN\:tempa

\ExplSyntaxOff

\ExplSyntaxOn
\HLet\__tblr_get_vcenter_box:N\:gobble
\ExplSyntaxOff

\ExplSyntaxOn
\def\:tempa{
% \__tblr_build_row_head_foot: <- we don't use this, because it moves table header to the foot
\__tblr_build_table_head_foot:}
\HLet\__tblr_build_head_foot:\:tempa
% this is a copy of the original tabularray command, because it produced an error when I tried to modify it using \HLet
\cs_set_protected:Npn \__tblr_build_table_label_entry:
  {
    \bool_if:NF \l__tblr_table_no_label_bool
      {\a:tabularraycaption%
        \refstepcounter { table }
        \tl_if_empty:NF \lTblrLabelTl
          {
            \clist_map_inline:Nn \lTblrRefMoreClist
              { \ExpTblrTemplate { caption-ref } { ##1 } }
            \exp_args:NV \label \lTblrLabelTl
          }
      }
    %% We put caption-lot code at last, so that a user can modify \lTblrEntryTl
    %% in a caption-label template. For example, a user may want to use
    %% short caption in nameref, but at the same time not to add LoT entry.
    \bool_if:NF \l__tblr_table_no_entry_bool
      { \UseTblrTemplate { caption-lot } { default } }
  }

\DeclareTblrTemplate { caption-text } { tex4ht } { \InsertTblrText { caption }\b:tabularraycaption }
\SetTblrTemplate { caption-text } { tex4ht }

% prevent extra paragraph before caption
\pend:defI\__tblr_build_long_table:n{\IgnorePar}

\NewConfigure{tabularraycaption}{2}

\ExplSyntaxOff

\Hinput{tabularray}
\endinput

