20191118: version 2.500:
・初めてbasic_regex型インスタンスが作られた時にcase foldingデータから
icaseマッチング用テーブルを展開するのに代えて、最初から計算済みテー
ブルを保持しているように仕様変更。
・上記変更に併せてsrell_ucfdata.hppおよびそれを出力するucfdataout.cpp
はお役御免とし、代わりに展開済みicase用テーブルを保持する
srell_ucfdata2.hppとそれを出力するucfdataout2.cppとを追加。
・文字クラスの照合方法を線形探索から二分探索に変更。
・文字クラスの最適化処理のタイミングを「']' が見つかった時にまとめて一
括」から「文字または文字コードの範囲をpushするたびごと逐次」に変更。
・assertをすべて削除。
・連続する\uHHHHがサロゲートペアをなしている場合はUnicode値として解釈
するように変更(これによりECMAScript仕様との相違はなくなりました)。
・SRELL_NO_NAMEDCAPTUREマクロ使用時にコンパイルエラーが出ていたのを修
正。
・updataout.cppを1.101にヴァージョンアップ。
・単体版のsrellを追加(single-headerディレクトリ内)。
20190914: version 2.401:
・basic_regex型インスタンスのサイズを削減(Unicode property escapes対
応時にうっかり膨張させてしまっていました)。
・basic_regex::swap()の改良。
20190907: version 2.400:
・文字クラスの照合速度を改善。
・パターンコンパイル時にグループ名中の\uエスケープを解釈するように変更
(ECMAScriptの仕様に準拠)。
・ucfdataout.cppを1.200にヴァージョンアップ。このプログラムが出力する
srell_ucfdata.hpp中のunicode_casefoldingクラスに、新たにメンバ変数が
追加されました。
SRELL 2.400以降はこの追加されたメンバ変数をコンパイル時に必要とする
ため、ucfdataout.cpp 1.101以前によって出力されたsrell_ucfdata.hppを
SRELL 2.400以降で使うことはできません(古いSRELLで新しい
srell_ucfdata.hppを使うことは可)。
・その他コードの整理や改良など。
20190902: version 2.304:
・Version 2.303のコード整理で壊れてしまっていたregex_iteratorを修復。
20190810: version 2.303:
・2.302の修正が不完全であったため再修正。
・その他コードの整理。
20190809: version 2.302:
・(?...) に繰り返し指定がついている時、内側の括弧によって捕獲された文
字列がループごとにクリアされず持ち越されていたバグを修正。
例:/(?:(ab)|(cd))+/.exec("abcd") → 1番括弧はundefinedになるはずが
"ab"になってしまっていた。
・misc/sample01.cppをversion 1.102に更新。テスト名中の章番号を
ECMAScript 2019 (ES10) 準拠に変更
20190724: version 2.301:
・ECMAScriptの仕様に準じて、\でエスケープ可能な文字の種類を次の15字に
限定。^$\.*+?()[]{}|/
文字クラス内([]内)ではこの15字に加えて '-' も対象に。
20190717: version 2.300:
・検索対象範囲とは別に、戻り読み (lookbehind) の逆行限界を指定できる機
能を追加(match_flag_typeへのmatch_lblim_availフラグの追加と
match_resultsへのlookbehind_limitメンバの追加)。
これに併せてregex_iteratorのコンストラクタ内でも、内部で使うprivate
なmatch_results型インスタンスのlookbehind_limitメンバに値を設定する
ように変更。
・ECMAScriptの仕様に合わせて、後方参照が対応する捕獲括弧より先に出現し
てもエラー扱いせぬように変更。/\1(.)/, /(?<=(.)\1)/, /\k(?.)/
などすべてOKに。
・misc/sample01.cppをversion 1.101に更新。misc.jsより準拠テストを1つ追
加。
20190714: version 2.230:
・正規表現が '*' か '+' かを伴う文字または文字クラスで始まる場合の検索
速度を改善(例:/[A-Za-z]+ing/)。
20190707: version 2.221:
・std::u8stringの利用可否は__cpp_char8_tではなく__cpp_lib_char8_tを用
いて判断するように変更。
・icase指定時にcase-folding処理をした結果、文字クラス内の文字がすべて
同じ文字になった場合には、文字クラスを解消して文字リテラルとして処理
するように変更。例:/r[Ss\u017F]t/i → /rst/i。
・その他問題を修正。
20190617: version 2.220:
・カウンタを使わぬほうが内部表現がコンパクトになる繰り返しはカウンタを
使わぬように変更。
・最適化バグにより、/a{1,2}?b/.exec("aab") が "aab" ではなく "ab" を返
していたのを修正(発生条件:最短一致優先の回数指定が付いている文字ま
たは文字クラスの後ろに、その文字集合と排他的な文字または文字クラスが
続いている場合)。
20190613: version 2.210:
・/ab|cd|ef/ のような表現('|' で区切られている文字列の先頭文字が互い
に排他的な場合)の照合方法を改良。
20190603: version 2.202:
・BMHアルゴリズムが使われる状況で、regex_matchがregex_search相当の処理
をしてしまうバグを修正。
20190531: version 2.200:
・通常の(正規表現ではない)テキスト検索用に、Boyer-Moore-Horspoolアル
ゴリズムに基づく実装を追加。
・UTF-8用iteratorの改良。
・icase指定時の\b/\Bの挙動を修正。/.\B./i が "s\u017F" にマッチするよ
うに。
・その他問題を修正。
20190508: version 2.100:
・Lookbehind中に文字列のキャプチャがあり、かつその中および左方に可変長
の正規表現があった場合、文字列の捕獲に失敗することがあったのを修正。
例:"1053" =~ /(?<=(\d+)(\d+))$/ で$2に適切な文字列がセットされず。
・srell_ucfdata.hppとsrell_updata.hppとをUnicode 12.1.0対応に更新。
・unicode/updataout.cppをUnicode 12対応に更新(ECMAScript 2020で対応さ
れる見込みのスクリプト名の先行対応)。
・srell.hpp中の改行コードをCR+LFからLFに変更。
・unicode/*.cppが出力するファイルの改行コードをCR+LFからLFに変更。
・misc/sample01.cppをversion 1.010に更新。
1. テスト名中の章番号をECMAScript 2018 (ES9) 準拠に変更(前版までは
ECMAScript 5.1までの章番号準拠でした)。
2. ECMAScript 2018規格の2.2.2.3 NOTEから準拠テストを1つ追加。
・C++11の機能の使用可否を判定するマクロを変更。
・文字クラスの処理方法を変更。
・basic_regexの全コンストラクタと全assign函数とでflag_typeのdefault引
数を指定できるように、syntax_option_typeとmatch_flag_typeとを再実装
(TR1→C++11間の変更の見落とし)。
・char8_t型に試験対応。コンパイラがchar8_tに対応している場合
(__cpp_char8_tマクロ定義の有無で判断)、"u8-"というprefixの付いた
クラスは「char8_t型文字列を受け取り、それをUTF-8として扱う」ように。
char8_tに未対応の場合は従来通り、char型文字列をUTF-8として処理。
・常に「char型文字列をUTF-8として扱う」クラスとして新規に"u8c-"という
prefixに付いたクラスを追加。2.002までの"u8-"付きクラス相当。
・u8cregex; u8ccmatch, u8csmatch; u8ccsub_match, u8cssub_match;
u8ccregex_iterator, u8csregex_iterator; u8ccregex_token_iterator,
u8csregex_token_iterator.
20180717: version 2.002:
・ECMAScriptの仕様に合わせて \u{h...} の h... 部分の最大桁数を6から無
制限に変更(変更前の1~6桁というのは提案書に基づく実装でした)。
・updataout.cppを1.001に更新。新規に追加されたスクリプト名をエラー扱い
せぬように修整。
・srell_ucfdata.hppとsrell_updata.hppとをUnicode 11.0.0対応に更新。
20180204: version 2.001:
・icase指定時に、[\W](\Wを含む文字class)が [KkSs\u017F\u212A] のいず
れにもマッチせぬよう変更(関連:ecma262 issue #512)。
20180127; version 2.000:
・ECMAScript 2018のRegExpに追加されることになった次の機能を実装:
・'.' があらゆるコードポイントにマッチするようにするための指定
"dotall" フラグを、srell::regex_constants内の syntax_option_type
および srell::basic_regex内の flag_type に追加。
・Unicode property用の表現、\p{...} と \P{...} とを追加。
・名前付きキャプチャ (?...) と、名前付きキャプチャによって捕獲
された文字列を後方参照するための正規表現、\k とを追加。
・戻り読み (lookbehind) の振る舞いを変更。(?<=...), (?" を追加。
2. operator=() 函数を明示的に実装。
・unicode/ucfdataout.cppをversion 1.001 に。
20140622; version 1.101:
srell_ucfdata.hppをUnicode 7.0.0対応に。
20121118; version 1.100:
最初のリリース版。