処理を通すために下のようにその場限りの書き換えをすると
\regex_match:nnTF
{ \x{3042}い }
{ あいうえお }
{ True }
{ False }
はTrueに,「あかいうえお」すると Falseになって
なんとなく正しく動いている雰囲気にはなります.
\__regex_escape_x_end:w の最後でカテゴリコード12決め打ちのところを
#1の範囲に応じて12以外にできれば
もしかすると突破できる?
いまのupTeXのこのあたりのkcatcodeの設定がどうなってるのか分かってないですし,
このあたりのexpl3のコードもまるで読めないので
なんで通るのかもさっぱりです(正しい?偶然?)
%----------------------------------------
\documentclass{article}
\ExplSyntaxOn
\cs_set_eq:NN \c_max_char_int \relax
\int_const:Nn \c_max_char_int {"10FFFF}%%範囲を広げる
\cs_set:Npn \__regex_escape_x_end:w #1 ;
{
\int_compare:nNnTF {#1} > \c_max_char_int
{
\msg_expandable_error:nnff { regex } { x-overflow }
{#1} { \int_to_Hex:n {#1} }
}
{
% #1 には文字コードがdecimalで入ってきている
\exp_last_unbraced:Nf \__regex_escape_raw:N
{ \char_generate:nn {#1} { 17 } } %%ここを12以外にしてみる
}
}
\cs_set:Npn \__char_generate_aux:w #1 ; #2 ;
{
\if_int_odd:w 0
\if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
\if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
\if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
\if_int_compare:w #2 > 20 \exp_stop_f: 1 \fi: \exp_stop_f:%%カテゴリコードの範囲を20まで広げてみる
\msg_expandable_error:nn { char }
{ invalid-catcode }
\else:
\if_int_odd:w 0
\if_int_compare:w #1 < \c_zero_int 1 \fi:
\if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
\msg_expandable_error:nn { char }
{ out-of-range }
\else:
\if_int_compare:w #2#1 = 100 \exp_stop_f:
\msg_expandable_error:nn { char } { null-space }
\else:
\__char_generate_aux:nnw {#1} {#2}
\fi:
\fi:
\fi:
\exp_end:
}
\begin{document}
\regex_match:nnTF
{ \x{3042}い }
{ あいうえお }
{ True }
{ False }
\end{document}
wryz77 さま
詳細に調べていただきありがとうございます。
ユーザーとしてはかなり苦しい結論ですね……
【余談】私が今回のケースを発見したのは,TeX Live 2024 において pTeX/upTeX 上で glossaries.sty を読み込もうとしたときに同様のエラーが出たのがきっかけでした。
私は expl3 を使ったパッケージを作成する過程で生じた問題だったのですが、すでにある pTeX/upTeX+glossaries パッケージでも生じるとなると多くの人に発生してしまいますね。(このことを思うと、うまく対応がなされると良いなぁ)
本田知亮さま
処理が通るようなコードを書いていただきありがとうございます。
私自身もよく分かっていないですが、私が作成していた expl3 を使ったパッケージに取り込んでみると、upLaTeX でも動作するようになりました。すごい
この処理で問題ないとなれば、wryz77 さんが遭遇した問題も解消される可能性がありますね。