@@ -629,20 +629,24 @@ BOOL XgUpdateDictionaryUsingClues(HWND hwnd, const XGStringW& dict_name)
629
629
// タブで分割する。
630
630
std::vector<XGStringW> fields;
631
631
mstr_split (fields, line, L" \t " );
632
-
633
632
if (fields.empty ())
634
633
continue ;
635
634
635
+ // 単語を正規化する。
636
636
auto strWord = XgNormalizeString (fields[0 ]);
637
637
auto strNormalized = XgNormalizeString (strWord);
638
638
639
+ // 正規化された単語が見つかったか?
639
640
auto it = word_to_hint_map.find (strNormalized);
640
641
if (it != word_to_hint_map.end ()) {
642
+ // 見つかったら、フィールドを更新。
641
643
if (fields.size () >= 2 )
642
644
fields[1 ] = it->second ;
643
645
else
644
646
fields.push_back (it->second );
647
+ // 写像から削除。
645
648
word_to_hint_map.erase (it);
649
+ // 必要なら変更する。
646
650
auto strNew = mstr_join (fields, L" \t " );
647
651
if (line != strNew) {
648
652
line = strNew;
@@ -651,6 +655,7 @@ BOOL XgUpdateDictionaryUsingClues(HWND hwnd, const XGStringW& dict_name)
651
655
}
652
656
}
653
657
658
+ // 辞書になかった単語を追記する。
654
659
for (auto & pair : word_to_hint_map) {
655
660
XGStringW line = XgNormalizeStringEx (pair.first , TRUE , TRUE );
656
661
line += L' \t ' ;
@@ -660,7 +665,7 @@ BOOL XgUpdateDictionaryUsingClues(HWND hwnd, const XGStringW& dict_name)
660
665
bNoChange = FALSE ;
661
666
}
662
667
663
- if (bNoChange) {
668
+ if (bNoChange) { // 変更なし。
664
669
XgCenterMessageBoxW (hwnd, XgLoadStringDx1 (IDS_NOCHANGE),
665
670
XgLoadStringDx2 (IDS_APPNAME), MB_ICONINFORMATION);
666
671
return FALSE ;
@@ -678,14 +683,15 @@ BOOL XgUpdateDictionaryUsingClues(HWND hwnd, const XGStringW& dict_name)
678
683
679
684
fprintf (fp, " \xEF\xBB\xBF " ); // UTF-8 BOM
680
685
686
+ // 一行ずつ書き込む。
681
687
for (auto & line : lines) {
682
688
auto psz = XgUnicodeToUtf8 (line).c_str ();
683
689
if (!*psz)
684
690
continue ;
685
691
fprintf (fp, " %s\n " , psz);
686
692
}
687
693
688
- fclose (fp);
694
+ fclose (fp); // ちゃんとファイルを閉じようね。
689
695
690
696
// 成功メッセージ。
691
697
StringCchPrintfW (szText, _countof (szText), XgLoadStringDx1 (IDS_UPDATEDICTOK),
0 commit comments