// 連結用の断片で、タグの位置がずれた訳を探す。
//
//   "…you are taught <b>" + 呪文名 + "</b>, and …"
//
// 前半の断片は末尾が開始タグ。ここに差し込まれる値が太字になる。訳文で <b> が
// 文の途中に移ると、差し込まれた値がまるで違う場所に出る。タグの集合しか見て
// いない検証では素通りするので、位置で拾う。
import fs from 'fs';

const tm = JSON.parse(fs.readFileSync('tm.json', 'utf8'));
const ov = JSON.parse(fs.readFileSync('overrides.json', 'utf8'));
for (const k in ov) if (!k.startsWith('_')) tm[k] = ov[k];

const OPEN_AT_END = /<[a-zA-Z][^>]*>\s*$/;
const CLOSE_AT_START = /^\s*<\/[a-zA-Z][^>]*>/;

const bad = [];
for (const [en, ja] of Object.entries(tm)) {
  const enOpenEnd = OPEN_AT_END.test(en) && !/^<\//.test(en.match(OPEN_AT_END)[0]);
  const enCloseStart = CLOSE_AT_START.test(en);
  if (!enOpenEnd && !enCloseStart) continue;
  const jaOpenEnd = OPEN_AT_END.test(ja) && !/^<\//.test((ja.match(OPEN_AT_END) || [''])[0]);
  const jaCloseStart = CLOSE_AT_START.test(ja);
  if (enOpenEnd !== jaOpenEnd || enCloseStart !== jaCloseStart) bad.push({ en, ja });
}
console.log(`連結断片でタグの位置がずれた訳: ${bad.length} 件`);
bad.forEach(m => {
  console.log('---');
  console.log('EN:', JSON.stringify(m.en));
  console.log('JA:', JSON.stringify(m.ja));
});
fs.writeFileSync('tag-moved.json', JSON.stringify(bad.map(m => m.en), null, 1));
