@@ -576,22 +576,11 @@ if(verbose) std::cerr << "\033[1;33mright=\t" << i_right << "\033[0m" << std::en
576
576
UStringVector reps = {u" " };
577
577
UStringVector reps_suggestwf = {}; // If we're doing SUGGESTWF, we ignore reps
578
578
string prev_added_before_blank = " " ;
579
+ std::optional<Casing> addedcasing = std::nullopt;
579
580
for (size_t i = i_left; i <= i_right; ++i) {
580
581
const auto & trg = sentence.cohorts [i];
581
582
Casing casing = getCasing (toUtf8 (trg.form ));
582
583
583
- // std::cerr << "\033[0;35mtrg.added=\t" << trg.added << " i=" << i << "i_left" << i_left<< "\033[0m" << std::endl;
584
- if (trg.added ) {
585
- for (size_t j = i; j <= i_right; j++) {
586
- const auto & right_of_trg = sentence.cohorts [j];
587
- if (!right_of_trg.added ) {
588
- // std::cerr << "\033[1;35mright_of_added=\t" << toUtf8(right_of_trg.form) << " j=" << j << "\033[0m" << std::endl;
589
- casing = getCasing (toUtf8 (right_of_trg.form ));
590
- break ;
591
- }
592
- }
593
- }
594
-
595
584
if (verbose) std::cerr << " \033 [1;34mi=\t " << i << " \033 [0m" << std::endl;
596
585
if (verbose) std::cerr << " \033 [1;34mtrg.form=\t '" << toUtf8 (trg.form ) << " '\033 [0m" << std::endl;
597
586
if (verbose) std::cerr << " \033 [1;34mtrg.id=\t " << trg.id << " \033 [0m" << std::endl;
@@ -604,6 +593,23 @@ if(verbose) std::cerr << "\033[1;35mtrg.raw_pre_blank=\t'" << trg.raw_pre_blank
604
593
if (verbose) std::cerr << " \t\t\033 [1;36mdelete=\t " << toUtf8 (trg.form ) << " \033 [0m" << std::endl;
605
594
}
606
595
596
+ if (trg.added ) {
597
+ // This word was added, get casing from a non-added word to the right:
598
+ for (size_t j = i; j <= i_right; j++) {
599
+ const auto & right_of_trg = sentence.cohorts [j];
600
+ if (!right_of_trg.added ) {
601
+ addedcasing = casing;
602
+ casing = getCasing (toUtf8 (right_of_trg.form ));
603
+ break ;
604
+ }
605
+ }
606
+ }
607
+ else if (addedcasing.has_value () && !del) {
608
+ // This word was not &ADDED, but is preceded by an added word:
609
+ casing = addedcasing.value ();
610
+ addedcasing = std::nullopt;
611
+ }
612
+
607
613
bool added_before_blank = false ;
608
614
bool fixedcase = false ;
609
615
bool applies_deletion = trg.id == src.id && src_applies_deletion;
0 commit comments