-
Notifications
You must be signed in to change notification settings - Fork 2
/
history_ja.txt
808 lines (678 loc) · 42.1 KB
/
history_ja.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
20241208; version 4.063:
・UTF-16用のSIMDデータを作る時にサロゲートペアを考慮するよう修正。
20241208; version 4.062:
・デバッグ用マクロチェックの簡略化。
・コードの整理と改良など。
20241204; version 4.061:
・簡単なSIMDによるアクセラレーションを導入(x86/x64のみ)。
20241101; version 4.060:
・4.030のデータ形式変更以降、srell_updata3.h内のいくつかのoffset値が1
つずれていた問題を修正。このずれにより、コードポイント値順で最後とな
るUnicode property値(\p{sc=Zzzz}や\p{space}など)が引けなくなってい
ました(報告してくださったEugene Levelev氏に感謝します)。
・unicode/updataout3.cppを更新。上記問題が修正されたデータを出力するよ
うに。
・4.059で修正した問題の原因となった4.050でのコード変更を取り消し(コー
ドの簡素化を目的とした変更だったのですが、修正によりコード量が逆に増
えてしまったため)。
20241016; version 4.059:
・4.050以降、引数なしのmatch_results::length(), position(), str()がコ
ンパイルできなくなっていた問題を修正(報告してくださったWinfried
Schenke氏に感謝します)。
20241004; version 4.058:
・Modifiers (?ims-ims:) を既定の機能に。
20240922; version 4.057:
・Version 4.054以降、\p{}/\P{}で無効なUnicode property名や値が指定され
てもエラーにならなかった問題を修正。
・basic_regexからreplace(), split()を削除。
・SRELL_CPP*マクロを廃止。
・misc/conftest.cppを更新。4.052と同じマスク値バグの修正と、SRELL_CPP*
マクロ廃止に伴う変更。
・unicode/updataout3.cppを更新。
20240911; version 4.056:
・ucfdata2.h, updata3.hをUnicode 16.0.0対応に更新。
・その他細々とした変更など。
20240904; version 4.055:
・複数のコードユニットからなる文字(UTF-8では0080..10FFFF、UTF-16では
10000..10FFFF)を相当量含むテキストに対する検索が過度に遅くならぬよ
うUTF-8/UTF-16用のフィルタを調整。
・limit_counterの既定値を1 << 24から1 << 21に変更。
・regex_traitsの全メンバ函数を不使用につき削除。
20240831; version 4.054:
・コードの減量。uモードとvモードとで分離していたパーザの統合。
20240824; version 4.053:
・定義済み文字クラスの作成方法を簡略化。
・UTF-8用内部イテレータの改良。条件分岐数の削減。
20240818; version 4.052:
・utf16_traits中のマスク値の誤りを修正。
・その他改良など。
20240816; version 4.051:
・4.050で導入した最適化の再実装。メモリ使用量が必要最低限で済む方法に
変更。
・その他改良など。
20240810; version 4.050:
・C{n,m}(Cは文字かクラス、n < m != 無限大)用の最適化処理を追加。
・その他改良など。
20240720; version 4.049:
・syntax_option_typeにstickyフラグを追加。
・regex_iterator2にsplit_aptrange()を追加。
・ucfdataout2.cpp, updataout3.cppから、データファイルを古い形式で出力
する機能を削除。
20240714; version 4.048:
・指している位置を維持したまま現在位置または直前のコードポイント値を読
み込むイテレータを廃止。
・UTF-8用内部iteratorが最短の表現以外を受け付けぬよう変更。
20240707; version 4.047:
・srell::regex(CHAR_BITが8の時のみ), srell::u8cregex, srell::u8regex
による検索の速度を改良。
20240613; version 4.046:
・コードの減量。リテラルが連続する箇所を最優先に探す仕組みを削除。
・その他細々とした改良や修正など。
20240608; version 4.045:
・Modifiersを実装。ただし提案がECMAScript仕様書に織り込まれるまでは、
#define SRELL_ENABLE_MODIFIERS定義時のみ利用可能。
・4.043でduplicate named capturing groups対応のための変更を加えた際、
後方参照の番号が括弧の最大番号を超えていないかのチェックが抜けてしま
っていたので追加。
20240602; version 4.044:
・SRELL_NO_NAMEDCAPTURE用の#if~#endifが抜けていたので追加。
・古いほうのstate挿入函数を引退させ、新しいほうに一本化。
20240526; version 4.043:
・Duplicate named capturing groups(|で区切られた位置なら既出のグルー
プ名を重複して使える機能)を実装。
20240524; version 4.042:
・*, +用の最適化処理が、C{n,}(Cは文字かクラス、nは2以上)にも適用され
うるように拡張。
・次の条件を満たす場合に用いられる統合スタックを導入。
1) 照合用函数に渡されたiteratorがポインタであること、または、
2) コンパイラがstd::is_trivially_copyableに対応していて、かつ
渡されたiteratorの型Iに対する
std::is_trivially_copyable<I>::valueがtrueであること。
どちらの条件も満たさない時は従来の個別スタックが使われます。
20240519; version 4.041:
・4.040で行った仮修正の仕上げ。
・使用していない函数の削除。
・64GBを超えるメモリ割り当てが可能な環境において理論上起こり得る問題に
対処。
20240131; version 4.040:
・もう1行復元。?? (non-greedy {0,1})が最適化バグを引き起こすことがあっ
たため。
20240127; version 4.039:
・Version 4.037で誤って削除してしまったコードを復元。
20240124; version 4.038:
・/(?:ab)+|cd/が"ababcd"にマッチしてしまうバグを修正。
発生条件:|の左右が異なる文字で始まり、かつ左方が(?:)+の中に入ってい
る。
・その他改良など。
20240122; version 4.037:
・Version 4.021以降最適化のバグにより、/(?:a|ab|abc)$/が"ac"にマッチす
るようになっていた問題を修正。
発生条件:(?:A|B|C) のような表現でAがBの前部と一致し、BがCの前部と一
致している場合。
→誤った最適化によりAの終端からCの後部に至るパスが発生してしまう。こ
のパスは普段は隠れているものの、バックトラッキングが発生すると使わ
れてしまう。
・その他、細々とした修正や改良など。
20240114; version 4.036:
・Lookaround (lookaheadとlookbehind)の改良とバグ修正:
1. 不要なスタック処理を削除。
2. "abc"に対する/(?:(?=(\w))|b)c$/の1番括弧が"b"ではなく未定義になる
ように、version 3.003で廃止したstateを復活。
発生条件:1: Lookaroundが捕獲括弧を含んでいて、2: そのlookaround
が成功した後、後続のマッチに失敗し、3: '|'で区切られた別の
subpatternを試し、正規表現全体のマッチが成功する。
→Lookaround内で捕獲された文字列がundefinedに戻らず残ってしまって
いた。
・misc/sample01.cppをconftest.cppに置き換え。
・各epsilonにタグ付け。
20231229; version 4.035:
・文字クラスのcase foldingを改良(Icase時の\p{Any}のコンパイル速度の改
善)。
・(?i:)対応の下準備。
・updataout3.cppを更新。前版で内部のnamespaceを変更した影響でコンパイ
ルできなくなっていました。
20231209; version 4.034:
・照合用函数に渡されたiteratorがcontiguous_iteratorかどうかを調
べる時、std::contiguous_iteratorが使えるならそれを使うように。
・正規表現中に存在しないグループ名が、match_results型のoperator[]()メ
ンバ函数に引数として渡された場合、error_backrefをthrowするのをやめ、
「何にもマッチしていない」ことを表すsub_match型インスタンスへの参照
を返すように変更。
この変更に併せて、match_results::operator[](size_type n)が
n >= size()の時も同様の参照を返すように変更(std::regex準拠の挙動。
従来はSRELL_STRICT_IMPLが定義されていた時のみ準拠)。
・例外をthrowしないモードを実装。
・例外を投げないモード用に、直前のコンパイル時にthrowされるはずであっ
たerror_typeを返す basic_regex::ecode() を追加。
・例外を投げないモード用に、直前の検索時にthrowされるはずであった
error_typeを返す match_results::ecode() を追加。
20230926; version 4.033:
・Version 4.020以降、64ビット環境でアクセス違反を起こすことがあった問
題を修正(報告してくださったYuriy Skvortsov氏に感謝します)。
発生条件:/ab|ac|ad/のように、3つ以上のAlternativesが同じ文字から始
まる。
・utf_traits中の使用されていないメンバ函数を削除。
・その他コードの整理など。
20230916; version 4.032:
・UTF-8/UTF-16のデコーダが常にinline展開されるようdirectiveを追加。
・オートマトンの呼び出し部を整理。
20230913; version 4.031:
・ucfdata2.h, updata3.hをUnicode 15.1.0対応に更新。
・updataout3.cppを更新。Unicode property escapeのScriptまたは
Script_Extensionsで指定できる値に"Unknown"を追加。
この値はScripts.txt内で言及されているものの、ECMAScript仕様書の「対
応すべきscript名一覧」になかったのでこれまで対応していませんでした。
しかし仕様書から一覧表が削除され、除外する理由がなくなったのでV8に倣
ってSRELLも対応することにしました。
20230909; version 4.030:
・^ $ \b \Bだけのrewinderが作られることのないようにパターンコンパイラ
を変更。
・Unicode propertyの名前や値の照合を二分探索で行うように。
・上記変更に併せてunicode/updataout2.cppを更新し、updataout3.cppに。
また、ECMAScript仕様書が対応すべきscript名を一覧表で示すことをやめた
ため、Scripts.txtとPropertyValueAliases.txtとから読み取るように。
・Unicodeデータファイルの拡張子を*.hppから*.hに変更。
・unicode/ucfdataout2.cppを更新。上記の拡張子変更に対応。
20230903; version 4.029:
・unicode/updataout2.cppを更新。SRELL内部で使う型を4.023で統合したせい
でコンパイルが通らなくなっていた問題を修正。
・srell_updata2.hppを作り直し(Unicode 15で新規追加された2つのスクリプ
トのデータが入っていなかったため。どうも古いupdataout2.cppで出力した
ものだったようです)。
20230831; version 4.028:
・regex型またはwregex型が使われる時、単体のchar/wchar_tで表現できない
Unicode値についてはオートマトンを呼び出さないように改良。
20230821; version 4.027:
・"2023-8-21"に対して/(?:(\d+-)?)+(\d{1,2})-(\d{1,2})/で検索した時に、
1番括弧が何もキャプチャしないバグを修正(相当前からあったバグ)。
・同じ条件で全体のマッチが "23-8-21" だけになるバグを修正(4.019で混入
したバグで、4.026の修正でもカヴァーできていなかったもの)。
20230820; version 4.026:
・Version 4.019以降、"2023-8-20"に対して/(\d+-)?\d{1,2}-\d{1,2}/で検索
すると"23-8-20"にマッチしてしまうようになっていたバグを修正。
20230819; version 4.025:
・movzxを避けるため内部表現中のフラグ管理をbool型から整数型に変更。
・オートマトン中でよく使う構造体のメンバ変数名を短いものに置換。
20230817; version 4.024:
・4.019以降出番のなくなっていた最適化処理用コードをコメントアウト。
・細々とした改良と問題の修正。
20230804; version 4.023:
・内部で使う2種類の整数型を1種類に統合。
・4.019で導入したentry state selectorにより効果が限定的となった最適化
処理を簡略に。
・Entry state selectorの改良。
・変数名の修正。
20230730; version 4.022:
・ソースコードの整理と細々とした問題の修正。
20230727; version 4.021:
・新たな内部状態を挿入すること無しに分岐の最適化が行えるよう改良。
20230724; version 4.020:
・Properties of stringsの内部表現への変換方法を簡略化。
・その他細々とした改良。
・[4.000~4.019, vフラグモード] 手元のソースファイルからリリース用ファイ
ルを作るための設定にミスがあり、version 4.000~4.019ではvモードが正し
く実装されていませんでした。
optimise_pos()函数の最後に次の行を書き足すとこれらの版でも正常に動作し
ます。
insert_btbranch(piece, ins_bt);
この函数がどこからも呼ばれていなかったのがバグの原因です。
20230114; version 4.019:
・新しいentry state selectorを実装。
20230109; version 4.018:
・4.016のオートマトン統合をキャンセル。パターンコンパイラ側に変更を加
え始めるとicase検索が著しく速度低下したため。
20230107; version 4.017:
・Version 4.006以降、bidirectional iteratorで検索しようとするとコンパ
イルエラーが発生するようになっていた問題を修正。
20230106; version 4.016/3.018(*のみ):
・4つのオートマタを2つに統合(i-modifier対応の下準備)。
*/a{0,0}/がエラー扱いになっていた問題を修正。
*その他細かい修正など。
20221227; version 4.015:
・VCで_ITERATOR_DEBUG_LEVELを1以上にすると、エラー扱いされる
regex_iterator2中のコードを修正。
・その他改良など。
20221220; version 4.014:
・誤って前版で抜けていたmatch_resultsのメンバ函数を補充。
・regex_token_iteratorの簡素化。
20221220; version 4.013:
・"abc"を/$/でsplit()すると、{"abc"}となるべきところが{"abc", ""}にな
ってしまっていた問題を修正。
・replace()のoverload函数の数を減らし、ラムダ使用時は常にコールバック
函数で受け取りたいmatch_resultsの型をテンプレート実引数で明示するよ
うに。
・regex_iterator2を追加。
20221216; version 4.012:
・コンパイラによってreplace()のコンパイルに失敗する問題を修正。
20221214; version 4.011/3.017(*のみ):
*[LWG Issue 3204] sub_matchにswap()を追加。
・replace()の仕様変更。std::basic_string風のコンテナ型なら何でも置換で
きるように。
・srell::str_clipを追加。
・split()にイテレータ、ポインタに対応するoverloadを追加。
20221212; version 4.010:
・split()の実装が説明文と合うように修正。文ではsub_matchがリストコンテ
ナにpushされるとなっているのに対して、コードではbasic_stringがpushさ
れていました。
・sub_matchクラスのbasic_stringへの変換函数(キャスト及びstr())に、カ
スタムtraits/allocator対応版を追加。
20221210; version 4.009/3.016(*のみ):
*regex_iteratorのiterator (it) が0幅にマッチすると、次に++した時に
it->prefix().matchedがtrueにならなかった問題を修正。
*match_resultsのテンプレート引数にカスタムallocatorを渡すとコンパイル
できなかった問題を修正。
・basic_regexに新しいメンバ函数(拡張API)を追加。
20221130; version 4.008:
・4.006で導入したfinderよりもBMHの優先度が上になるよう調整。
・\b/\Bおよびmultilineモードにおける^, $の改良。
20221124; version 4.007:
・正規表現の最初でのみ使える埋込フラグ (?ims-ims) に対応(Python 3.11
と同様)。
註:この機能は独自拡張で、ECMAScriptの仕様にはありません。また
regexp-modifiers提案とも異なっています。この機能はSRELL_NO_UBMODを定
義することにより、無効にできます。
20221123; version 4.006:
・最初にマッチする文字が一種類である正規表現用のfinderを追加。
20221030; version 4.005/3.015(*のみ):
*int型とlong型とでビット幅が異なる環境(LP64, 4/8/8等)で未定義動作と
なるコードを修正(報告してくださったTravers Ching氏に感謝します)。
・unicode/ucfdataout2.cpp, updataout2.cppを更新。Unicodeデータファイル
(srell_ucfdata2.hpp, srell_updata2.hpp) なしでもコンパイルできるよう
に。
・その他コードの整理など。
20221022; version 4.004/3.014:
・srell_ucfdata2.hppとsrell_updata2.hppとをUnicode 15.0.0対応に更新。
・unicode/updataout2.cppをUnicode 15対応に更新(ECMAScript 2023で対応
される見込みのスクリプト名の先行対応)。
・先の後方参照バグを直した結果、無意味になったコードを削除。
20221012; version 4.003/3.013:
・後方参照バグを再々修正。ちなみにこのバグは可変幅の戻り読みに対応した
ことに付随するものであるため、version 2.000以降のSRELL全版に存在しま
す。
(可変幅の戻り読みでは/(?<=\1\s+(\d+))/のように、パーザが捕獲括弧よ
りも先に後方参照に出合ってしまうことがあるため、対応する括弧がその正
規表現中に実在するのかすぐに判断できないことに由来しています)
20221012; version 4.002/3.012:
・前版の後方参照バグを違う方法で再修正。20221011の修正では/(?:\1+)*()/
のような表現に対応できていなかったため。同時に/()(?:\1+)*/のような表
現が無限ループに陥るのも修正。
20221011; version 4.001/3.011(*のみ):
*/\1*()/や/(\1+)/のように、対応する捕獲括弧の閉じ括弧よりも先に出現す
る後方参照に*または+が付いているとnullポインタを参照してしまう、もし
くは無限ループに陥るバグを修正(バグを見つけてくださったsrellcomの作
者、@datadiode氏に感謝します)。
・ECMAScriptの仕様に従い、[]内で'-'をエスケープせず書ける位置のチェッ
クを厳密に行うよう変更。定義済み文字クラス(\d, \s等)直後の'-'は、
それが文字クラス最後の文字でない限りはエラーに([\s-\d]はエラー、
[\s-]はOK)。
・UTF-8用内部iteratorの調整。
20220618; version 4.000:
・ECMAScriptに追加される見込みのvフラグモードに対応。
・srell_updata.hppの仕様変更。srell_updata2.hppに。
・上記変更に併せてunicode/updataout.cppを更新し、updataout2.cppに。
・64ビット環境でclang-tidyが "excessive padding" と警告する問題に対応
するため構造体メンバの順番を変更(ご報告に感謝します)。
・unicode/ucfdataout2.cppを更新。
20220529; version 3.010:
・\pや\Pを含む文字クラスのメモリ使用量を削減。
・\pや\Pの{}内が不正の時にthrowされるエラーの種類を、
regex_constants::error_escapeから新設の
regex_constants::error_propertyに変更。
・その他細々とした改良。
20220511; version 3.009:
・最適化バグにより /abcd|ab/ が "abc" にマッチしなかった問題を修正。
20220504; version 3.008:
・icase指定時の[^\P{...}]の振る舞いが、TC39で提案中のv-modeのそれに近
いものになっていた問題を修正。
20220429; version 3.007:
・カウンタの仕組みをさらに変更。
20220428; version 3.006:
・繰り返し処理用のカウンタを調整。
・小さな文字クラス用の線形探索を再削除。
20220424; version 3.005:
・multiline指定時に /(?<=$.*)/ が "a" の終わりにマッチしなかった問題を
修正。
・TC39で提案中の\A, \z, (?m:)の準備。
20220420; version 3.004:
・'*' または '+' 付きの文字クラスが後続する文字または文字クラスと排他
的になっていない表現用の最適化処理を追加。例:/[A-Za-z]+ing/,
/".*"/ など。
20220416; version 3.003:
・2つの最適化函数を1つに統合。
・先読み (lookahead)・戻り読み (lookbehind) 用のコード量を削減。
20220416; version 3.002:
・3.000で導入した簡易entry state選択の使用時に、regex_matchや
match_continuousフラグが指定されたregex_searchが機能しない場合があっ
た問題を修正。
20211025; version 3.001:
・カウンタ分割を廃止。効果がないかむしろ若干速度が低下しているように見
えるため。
・潜在的なバグを修正。
・その他細かな改良など。
20211023; version 3.000:
・srell_ucfdata2.hppとsrell_updata.hppとをUnicode 14.0.0対応に更新。
・unicode/updataout.cppをUnicode 14対応に更新(ECMAScript 2022で対応さ
れる見込みのスクリプト名の先行対応)。
・char32_t未対応のコンパイラでUnicode値を保持するため内部で使用する型
を「21ビット以上あるunsigned整数型」から「32ビット以上あるunsigned整
数型」に変更。
・char32_t未対応のコンパイラで繰り返し回数や文字クラス番号を保持するの
に使う型を「unsigned int」から「32ビット以上あるunsigned整数型」に変
更。
・数値用パーザにoverflowチェックを追加。例:unsigned int型が32ビットの
幅の時、前の版まで /a{0,4294967297}/ は /a{0,1}/ 相当になってしまっ
ていましたが、前記のチェックを入れたことによりこのような場合には
error_braceがthrowされるようになっています。
・非multilineモード時に /[^;]*^;?/ が入力文字列の先頭にマッチしなかっ
たバグを修正。
・ごく簡易なentry state選択を実装。
20211004; version 2.930:
・WCHAR_MAXの値に基づいてUTF-16/UTF-32対応が切り替わるu1632w-型を新規
に追加(WCHAR_MAXが0xFFFF以上・0x10FFFF未満ならu1632w-型はu16w-型の
別名となり、WCHAR_MAXが0x10FFFF以上ならu1632w-型はu32w-型の別名とな
ります)。
・Eytzinger layout検索時に使われるメモリ使用量を削減。
・その他細かな改良など(いくつかはNIREに対するMarko Njezic氏の改善案に
基づきます)。
20210624; version 2.920:
・?({0,1}相当)用の最適化処理を追加。
・misc/sample01.cpp内で参照しているECMAScript仕様書の版を2021に変更。
20210429; version 2.912:
・2.900で導入した最適化処理のバグにより /aa|a|aa/ が "a" にマッチしな
くなっていた問題を修正(報告してくださったJan Schrötter氏に感謝しま
す)。
ちなみにこの最適化処理は、srell.hppをincludeする前に
SRELLDBG_NO_BRANCH_OPT2マクロを定義しておくと無効化できます。
20210424; version 2.911:
・2.900で導入した最適化処理内の不用意な行削除が原因で、/abc|ab|ac/ が
"ac" に対してマッチしなくなっていた問題を修正(バグ報告に感謝します)。
20210407; version 2.910:
・2.900以降、パターンコンパイラ内部でmove代入演算子が使われる時にメモ
リリークしていた問題を修正(報告してくださったMichal Švec氏に感謝し
ます)。
20210214; version 2.901:
・不要なテンプレートの特殊化を削除。
20210214; version 2.900:
・文字列のみからなる選択(例:/abc|abd|acde/)用の最適化処理を新規に追
加。
・u(8|16)[cs]regex_(token_)?iteratorがコンパイルエラーとなり使用できな
かった問題を修正。
・その他細かな改良など。
20210131; version 2.810:
・UTF-8用内部iteratorの改良。
20200724; version 2.800:
・文字クラスの二分探索にEytzinger layoutを導入。
・小さな文字クラス用に線形探索を再実装。
・名前付き括弧の名前部分をパーズするためのプロパティーデータの扱いを変
更。basic_regex型インスタンス内に読み込むのを止めて、必要な時のみ読
み込むように。
20200714; version 2.730:
・入れ子になった捕獲括弧で冗長な退避・復元処理をせぬように変更。
・regex_iteratorの改良。
20200703; version 2.720:
・非ASCII文字を含むUTF-8文字列または非BMPの文字を含むUTF-16文字列を、
Boyer-Moore-Horspoolアルゴリズムを用いて、大文字小文字の区別無しで
(icase/case-insensitiveで) 検索する場合の処理の改良。
・Version 2.650での変更により、regex_iterator->prefix().firstが前回マ
ッチした位置の終端ではなく文字列全体の最初を指すようにになってしまっ
ていたのを修正。
・上記修正に合わせて3イテレータ版のregex_search()が呼ばれる場合、
match_results.position()は戻り読みの逆行限界として渡された位置
(regex_searchの第3引数)を起点とした位置を返し、
match_results.prefix().firstは検索開始位置(同第1引数)を指すように
変更。
・BMH検索時に、不正なUTF-8シークウェンスの前後にある有効なシークウェン
スが読み飛ばされてしまう問題を修正(2.630でUTF-8の処理方法を変えた時
に混入したバグ)。
20200701; version 2.710:
・Boyer-Moore-Horspool検索の調整。
20200630; version 2.700:
・最適化処理の調整。
20200620; version 2.651:
・グループ名のチェックを行う位置を\uエスケープの解釈後に移動。
・misc/sample01.cppをversion 1.103に更新。参照しているECMAScript仕様書
の版を2020(ES11)に変更。
20200618; version 2.650:
・名前付き括弧に捕獲された文字列へのアクセス用函数に、グループ名をポイ
ンタで指定するoverloadをmatch_resultsに追加。
・3イテレータ版のregex_search()使用時には、検索の開始位置ではなく戻り
読み (lookbehind) の逆行限界として渡された位置のほうを
match_results::prefix::firstにセットするよう変更。
・不要と思われる処理をいくつか削除。
20200601; version 2.643:
・syntax_option_typeおよびmatch_flag_typeのoperator函数にinline指定を
追加(これがないとリンク時に多重定義エラーが出ることがあるとのご指摘
がありました)。
・その他細かな改良など。
20200530; version 2.642:
・basic_regex型インスタンスが確保するメモリのサイズを削減。
20200528; version 2.641:
・2.640での修正1が不完全であったため再修正。
・最適化処理の調整。
20200516; version 2.640:
・最適化バグの修正1: regex_matchが入力文字列の終端を通り過ぎてしまうこ
とがあった問題を修正。
・最適化バグの修正2: multilineフラグ指定時に ^ や $ が適切な位置でのマ
ッチングをさせてもらえなくなってしまっていた問題を修正。
・srell_ucfdata2.hppとsrell_updata.hppとを更新。
20200509; version 2.630:
・正規表現中に不正なUTF-8のシークウェンスがあった場合、パターンコンパ
イラがregex_utf8をthrowするように仕様変更(検索対象文字列中に不正な
UTF-8の並びがあってもエラー扱いされません)。
・UTF-8でBMH検索が行われる際、マッチした箇所の直後に余分な後続
(trailing) バイトが続いていた場合にその部分もマッチング結果に含めて
しまう問題を修正。
・basic_regex.flags() が正しい値を返さないことがあったのを修正。
・正規表現中で実際には使われていないグループ名 (NAME) を
match_results.format()に渡す書式文字列の中で$<NAME>のようにして指定
すると、その部分が空文字に置換されずそのまま残ってしまう問題を修正。
20200502; version 2.620:
・Boyer-Moore-Horspoolアルゴリズム用クラスからmatch_continuous指定時用
およびregex_match用の函数を削除。これらの処理時は以前のようにオート
マトンを使うように変更。
・その他クリーンナップ。
20200428; version 2.611:
・/\d*/ が "abc" の冒頭にマッチせず末尾にマッチする問題を修正(Version
2.210で混入したバグ)。
20200426; version 2.610:
・Case-insensitive (icase) なBMH検索が行われる際、探している文字列が検
索対象テキスト全体の先頭にあった場合に読み飛ばされてしまうことがある
バグを修正(UTF-8またはUTF-16で、検索文字列の末尾が複数のコードユニ
ットからなる文字である場合に発生)。
・キャプチャグループ名のパーズをECMAScriptの仕様書通りきっちり行うよう
に変更。これにより、前の版までは受理されていた /(?<,>...)/ のような
グループ名はregex_errorがthrowされるように。
20200418; version 2.600:
・戻り読み (lookbehind) の逆行限界を直接regex_search()に渡せるように
3イテレータ版のregex_search()を追加。
・[非互換変更] 2.300で導入したmatch_flag_typeのmatch_lblim_availフラグ
と、match_resultsのlookbehind_limitメンバとを廃止。
・srell_ucfdata2.hppとsrell_updata.hppとをUnicode 13.0.0対応に更新。
・unicode/updataout.cppをUnicode 13対応に更新(ECMAScript 2020で対応さ
れる見込みのスクリプト名の先行対応)。
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<a>(?<a>.)/
などすべて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{...} とを追加。
・名前付きキャプチャ (?<NAME>...) と、名前付きキャプチャによって捕獲
された文字列を後方参照するための正規表現、\k<NAME> とを追加。
・戻り読み (lookbehind) の振る舞いを変更。(?<=...), (?<!...) とも可変
幅の戻り読みに対応。
20180125; version 1.401:
・ECMAScriptの仕様に合わせて、match_results.format()内で後方参照として
認識される数値を99までに制限(即ち$1~$9および$01~$99のみ有効)。
・長い間メンテナンスしていないマクロを削除。
20180101; version 1.400:
・/(?:)*/ のように、空のnon-capturingグループにも量指定子を付けられる
ように変更(ECMAScriptのRegExpとの互換性確保のための変更で、使い道は
おそらくありません)。
・次の3条件が揃った時に固まってしまったのを修正: 1) non-capturingグル
ープに量指定子が付いていて、2) そのグループ自身が0幅になり得て、3)
そのグループ内の最後以外の場所に、0幅になり得る後方参照が現れる時。
たとえば /(.*)(?:\1.*)*/ のような表現。
20171216; version 1.300:
・最適化処理のバグにより、/^(;[^;]*)*$/ が ";;;;" にマッチしなかった問
題を修正。この問題の発生条件は次の通り:
・/(A...B*)*$/ のような終わり方をしていて、かつAとBとが互いに排他的
な文字または文字集合である場合。
20170621; version 1.200:
・srell_ucfdata.hppをUnicode 10.0.0対応に。
・不正なUTF-8 sequenceに対するu8regex_traitsの振る舞いを改善。
20150618; version 1.141:
srell_ucfdata.hppをUnicode 8.0.0対応に。
20150517; version 1.140:
・regex_match()がマッチの成否を判定する方法の変更。
(C++ Standard Library Issues List #2273 への対応)
・ECMAScriptの仕様に合わせて \cX の X の範囲を [A-Za-z] に制限。
・look-around assertions中の丸括弧が、ある条件下で正しく文字列をキャプ
チャせぬ場合があった問題を修正。Version 1.111での修正が不完全であっ
たことによるもの。
20150503; version 1.130:
・case-folding用函数の改善。
・unicode/ucfdataout.cppをversion 1.100に。
・u(16|32)[cs]match用の#if directives中にあったtypoを修正。
20150425; version 1.120:
・UTF-8文字列においてU+010000-U+10FFFFの範囲の文字(4オクテット長の文
字)が認識されぬバグを修正。
・misc/sample01.cppをversion 1.010に。
20150402; version 1.111:
・最適化処理のバグにより、"aaa" =~ /((.*)*)/ の $2 が "aaa" ではなく空
になってしまう問題を修正。
20141101; version 1.110:
・バグ報告による修正:
1. basic_regex::assign() 内の compile() に "this->" を追加。
2. operator=() 函数を明示的に実装。
・unicode/ucfdataout.cppをversion 1.001 に。
20140622; version 1.101:
srell_ucfdata.hppをUnicode 7.0.0対応に。
20121118; version 1.100:
最初のリリース版。