Skip to content
Snippets Groups Projects
njuthesis.dtx 311 KiB
Newer Older
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\__ctxdoc_module_slash:w}
%    \begin{macrocode}
  \cs_gset_protected:Npn \__ctxdoc_module_slash:w #1 > #2 \q_stop
    {
      \__ctxdoc_output_module:nn
        { \@@_split_m:n {#1} }
        { \__ctxdoc_module_pop:n { \@@_print_module:n { / } } }
      \__ctxdoc_output_line:n {#2}
      \__ctxdoc_slash_format:
    }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\__ctxdoc_module_pm:w}
%    \begin{macrocode}
  \cs_gset_protected:Npn \__ctxdoc_module_pm:w #1 > #2 \q_stop
    {
      \tex_noindent:D
      \hbox_overlap_left:n
        {
          \__ctxdoc_output_module:nn
            { \@@_split_pm:n {#1} }
            { \@@_print_module:n { } }
          \skip_horizontal:n { \leftskip + \smallskipamount }
        }
      \group_begin:
        \__ctxdoc_pm_format:
        \__ctxdoc_output_line:n {#2}
      \group_end:
    }
\group_end:
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\grd,\sgrd,\pgrd}
% 在手册中生成带颜色的 guard 标记。
%    \begin{macrocode}
\NewDocumentCommand \grd { m }
  { \__ctxdoc_module_angle:n { \color { njuviolet } #1 } }
\NewDocumentCommand \sgrd { m }
  { \__ctxdoc_module_angle:n { \color { star@guard } * \color{ c@guard } #1 } }
\NewDocumentCommand \pgrd { m }
  { \__ctxdoc_module_angle:n { \color { #1 @guard } def- #1 } }
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{语法高亮}
%
% \begin{macro}{\@@_output_line:}
% \cls{ctxdoc} 将 \file{.dtx} 文件中读取的代码行存储在
% \cs{l__ctxdoc_verbatim_line_tl},我们使用 \pkg{codehigh} 提供的内部函数
% 将其转化为带有语法高亮的格式并输出。默认读取的代码行尾带有 |^^M|,
% 直接输入高亮函数会导致代码快尾部有额外空行,需要手动删去。
%    \begin{macrocode}
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
\cs_set_protected_nopar:Npn \@@_output_line:N #1
  {
    \tex_noindent:D
    \__ctxdoc_replace_at_at:N #1
    \tl_remove_once:NV #1 \c__ctxdoc_active_cr_tl
    \__codehigh_parse_code:nN { latex / latex3 } #1
    \tex_par:D
  }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\__ctxdoc_output_line:}
% 在 \XeTeX{} 引擎下,\pkg{codehigh} 调用的 \pkg{l3regex} 模块有严重的性能问题。
% 我们仅仅在需要时启用高亮。
%    \begin{macrocode}
\bool_if:NT \g_@@_codehigh_bool
  {
    \cs_set:Npn \__ctxdoc_output_line:
      { \@@_output_line:N \l__ctxdoc_verbatim_line_tl }
  }
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
%</doc-cls>
%    \end{macrocode}