expl3 のファイル名の解析中に問題が発生しました

expl3 のファイル名の解析中に問題が発生しました

expl3でユーザーが指定したパスのファイル拡張子を解析しようとしています。ファイル拡張子は取得しましたが、期待されるファイル拡張子と比較することができません。私のMWEは

\documentclass[]{article}
\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn
\ior_new:N \g_slo_input_stream_ior
\tl_new:N \l_slo_input_dir_tl
\tl_new:N \l_slo_input_base_tl
\tl_new:N \l_slo_input_ext_tl
\cs_generate_variant:Nn \tl_if_eq:nnTF { V }

\cs_new:Nn \slo_open_file:n {
    \file_parse_full_name:nNNN { #1 } \l_slo_input_dir_tl \l_slo_input_base_tl \l_slo_input_ext_tl

    \tl_if_eq:VnTF \l_slo_input_ext_tl { .abc } { 
        #1~is~.abc-file.
    } { 
        #1~is~\l_slo_input_ext_tl-file,~expected~.abc-file.
    }
}
\NewDocumentCommand { \abcfile } { m } { \slo_open_file:n { #1 } }
\ExplSyntaxOff

\begin{document}
    \abcfile{example.test} \par
    \abcfile{filename.abc}
\end{document}

生成する

example.test is .test-file, expected .abc-file.
filename.abc is .abc-file, expected .abc-file.

私は予想していた

example.test is .test-file, expected .abc-file.
filename.abc is .abc-file

私の理解する限り、 の比較は\tl_if_eq失敗します。なぜでしょうか?

答え1

ドキュメントに記載されているように、\file_parse_full_name:nNNN'retur' 値はトークン リストではなく文字列として提供されます。つまり、すべての文字のカテゴリ コードは 12 ('other') で、スペースのカテゴリ コードは 10 ('space') です。比較tlではトークンがチェックされるため、ここではカテゴリ コードが重要です。リテラル ' .abc' のカテゴリ コードは 11 ('letter') であるabcため、テストは失敗します。

ほとんどの場合、そしてここでも確かに、「テキスト」をチェックするには文字列ベースのテストを使用する方がよいでしょう。これは文字コードのみを調べるので、カテゴリ コードの処理について心配する必要はありません。

\cs_new_protected:Npn \slo_open_file:n #1
  {
    \file_parse_full_name:nNNN {#1}
      \l__slo_input_dir_tl
      \l__slo_input_base_tl
      \l__slo_input_ext_tl
    \str_if_eq:VnTF \l__slo_input_ext_tl { .abc }
      { #1 ~is~.abc~file. }
      { #1~is~\l__slo_input_ext_tl-file,~expected~.abc-file. }
  }

関連情報