diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-03-28 14:52:44 -0400 |
---|---|---|
committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-03-28 14:52:44 -0400 |
commit | aa2a0c09f446aaa4ac5b052f5b9afb040e37afc2 (patch) | |
tree | fca9ee7bce59c4ece5eaeb25ab4b59d8e3c7b19a /ext/mixed/js | |
parent | a339bf69d3841fa97ce9f6673472bd451b813937 (diff) |
Update how pitch accent expressions are disambiguated
Diffstat (limited to 'ext/mixed/js')
-rw-r--r-- | ext/mixed/js/display-generator.js | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/ext/mixed/js/display-generator.js b/ext/mixed/js/display-generator.js index 30c82472..8177c31c 100644 --- a/ext/mixed/js/display-generator.js +++ b/ext/mixed/js/display-generator.js @@ -304,7 +304,7 @@ class DisplayGenerator { } createPitch(details) { - const {expressions, reading, position, tags} = details; + const {exclusiveExpressions, reading, position, tags} = details; const morae = jp.getKanaMorae(reading); const node = this._templateHandler.instantiate('term-pitch-accent'); @@ -319,7 +319,7 @@ class DisplayGenerator { DisplayGenerator._appendMultiple(n, this.createTag.bind(this), tags); n = node.querySelector('.term-pitch-accent-expression-list'); - DisplayGenerator._appendMultiple(n, this.createPitchExpression.bind(this), expressions); + DisplayGenerator._appendMultiple(n, this.createPitchExpression.bind(this), exclusiveExpressions); n = node.querySelector('.term-pitch-accent-characters'); for (let i = 0, ii = morae.length; i < ii; ++i) { @@ -481,6 +481,7 @@ class DisplayGenerator { static _getPitchInfos(definition) { const results = new Map(); + const allExpressions = new Set(); const expressions = definition.expressions; const sources = Array.isArray(expressions) ? expressions : [definition]; for (const {pitches: expressionPitches, expression} of sources) { @@ -498,10 +499,22 @@ class DisplayGenerator { dictionaryResults.push(pitchInfo); } pitchInfo.expressions.add(expression); + allExpressions.add(expression); } } } + for (const dictionaryResults of results.values()) { + for (const result of dictionaryResults) { + const exclusiveExpressions = []; + const resultExpressions = result.expressions; + if (!areSetsEqual(resultExpressions, allExpressions)) { + exclusiveExpressions.push(...getSetIntersection(resultExpressions, allExpressions)); + } + result.exclusiveExpressions = exclusiveExpressions; + } + } + return [...results.entries()]; } |