Include readings in disambiguations

This commit is contained in:
toasted-nutbread 2020-03-29 11:27:13 -04:00
parent a7da4416d7
commit 1f84280ea0

View File

@ -304,7 +304,7 @@ class DisplayGenerator {
} }
createPitch(details) { createPitch(details) {
const {exclusiveExpressions, reading, position, tags} = details; const {reading, position, tags, exclusiveExpressions, exclusiveReadings} = details;
const morae = jp.getKanaMorae(reading); const morae = jp.getKanaMorae(reading);
const node = this._templateHandler.instantiate('term-pitch-accent'); const node = this._templateHandler.instantiate('term-pitch-accent');
@ -319,7 +319,7 @@ class DisplayGenerator {
DisplayGenerator._appendMultiple(n, this.createTag.bind(this), tags); DisplayGenerator._appendMultiple(n, this.createTag.bind(this), tags);
n = node.querySelector('.term-pitch-accent-disambiguation-list'); n = node.querySelector('.term-pitch-accent-disambiguation-list');
DisplayGenerator._appendMultiple(n, this.createPitchExpression.bind(this), exclusiveExpressions); this.createPitchAccentDisambiguations(n, exclusiveExpressions, exclusiveReadings);
n = node.querySelector('.term-pitch-accent-characters'); n = node.querySelector('.term-pitch-accent-characters');
for (let i = 0, ii = morae.length; i < ii; ++i) { for (let i = 0, ii = morae.length; i < ii; ++i) {
@ -345,10 +345,26 @@ class DisplayGenerator {
return node; return node;
} }
createPitchExpression(expression) { createPitchAccentDisambiguations(container, exclusiveExpressions, exclusiveReadings) {
const node = this._templateHandler.instantiate('term-pitch-accent-disambiguation'); const templateName = 'term-pitch-accent-disambiguation';
node.textContent = expression; for (const exclusiveExpression of exclusiveExpressions) {
return node; const node = this._templateHandler.instantiate(templateName);
node.dataset.type = 'expression';
node.textContent = exclusiveExpression;
container.appendChild(node);
}
for (const exclusiveReading of exclusiveReadings) {
const node = this._templateHandler.instantiate(templateName);
node.dataset.type = 'reading';
node.textContent = exclusiveReading;
container.appendChild(node);
}
container.dataset.multi = 'true';
container.dataset.count = `${exclusiveExpressions.length + exclusiveReadings.length}`;
container.dataset.expressionCount = `${exclusiveExpressions.length}`;
container.dataset.readingCount = `${exclusiveReadings.length}`;
} }
populatePitchGraph(svg, position, morae) { populatePitchGraph(svg, position, morae) {
@ -482,10 +498,13 @@ class DisplayGenerator {
const results = new Map(); const results = new Map();
const allExpressions = new Set(); const allExpressions = new Set();
const allReadings = new Set();
const expressions = definition.expressions; const expressions = definition.expressions;
const sources = Array.isArray(expressions) ? expressions : [definition]; const sources = Array.isArray(expressions) ? expressions : [definition];
for (const {pitches: expressionPitches, expression} of sources) { for (const {pitches: expressionPitches, expression} of sources) {
allExpressions.add(expression);
for (const {reading, pitches, dictionary} of expressionPitches) { for (const {reading, pitches, dictionary} of expressionPitches) {
allReadings.add(reading);
let dictionaryResults = results.get(dictionary); let dictionaryResults = results.get(dictionary);
if (typeof dictionaryResults === 'undefined') { if (typeof dictionaryResults === 'undefined') {
dictionaryResults = []; dictionaryResults = [];
@ -499,7 +518,6 @@ class DisplayGenerator {
dictionaryResults.push(pitchInfo); dictionaryResults.push(pitchInfo);
} }
pitchInfo.expressions.add(expression); pitchInfo.expressions.add(expression);
allExpressions.add(expression);
} }
} }
} }
@ -507,11 +525,16 @@ class DisplayGenerator {
for (const dictionaryResults of results.values()) { for (const dictionaryResults of results.values()) {
for (const result of dictionaryResults) { for (const result of dictionaryResults) {
const exclusiveExpressions = []; const exclusiveExpressions = [];
const exclusiveReadings = [];
const resultExpressions = result.expressions; const resultExpressions = result.expressions;
if (!areSetsEqual(resultExpressions, allExpressions)) { if (!areSetsEqual(resultExpressions, allExpressions)) {
exclusiveExpressions.push(...getSetIntersection(resultExpressions, allExpressions)); exclusiveExpressions.push(...getSetIntersection(resultExpressions, allExpressions));
} }
if (allReadings.size > 1) {
exclusiveReadings.push(result.reading);
}
result.exclusiveExpressions = exclusiveExpressions; result.exclusiveExpressions = exclusiveExpressions;
result.exclusiveReadings = exclusiveReadings;
} }
} }