diff options
author | StefanVukovic99 <stefanvukovic44@gmail.com> | 2023-12-28 06:39:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-28 05:39:19 +0000 |
commit | fc2123a45b3ceacc2ec887d24e5e752dca59bb4f (patch) | |
tree | 3a5105a6bff7a1755582c0cb9d38996933044b2b /ext/js/display | |
parent | 60cd218663f62f79394e9c0247e0fe40de6589b6 (diff) |
add phonetic transcriptions term meta type (#434)
* move dictionary files to dictionary folder
* wip
* move dictionary files to dictionary folder
* add ipa term meta
* wip
* fixing comments wip
* fixing comments wip
* fixing comments wip
* fixing comments wip
* fixing comments wip
* fixing comments wip
* fix comments
* fix comments
* update test data
* fix gitignore
* engines
* add tests
* update database test
* fix test
Diffstat (limited to 'ext/js/display')
-rw-r--r-- | ext/js/display/display-generator.js | 64 |
1 files changed, 55 insertions, 9 deletions
diff --git a/ext/js/display/display-generator.js b/ext/js/display/display-generator.js index b91d0ce9..3a2a5621 100644 --- a/ext/js/display/display-generator.js +++ b/ext/js/display/display-generator.js @@ -626,7 +626,7 @@ export class DisplayGenerator { n1.appendChild(tag); let hasTags = false; - for (const {tags} of pronunciations) { + for (const {pronunciation: {tags}} of pronunciations) { if (tags.length > 0) { hasTags = true; break; @@ -645,8 +645,52 @@ export class DisplayGenerator { * @returns {HTMLElement} */ _createPronunciation(details) { + const {pronunciation} = details; + switch (pronunciation.type) { + case 'pitch-accent': + return this._createPronunciationPitchAccent(pronunciation, details); + case 'phonetic-transcription': + return this._createPronunciationPhoneticTranscription(pronunciation, details); + } + } + + + /** + * @param {import('dictionary').PhoneticTranscription} pronunciation + * @param {import('dictionary-data-util').GroupedPronunciation} details + * @returns {HTMLElement} + */ + _createPronunciationPhoneticTranscription(pronunciation, details) { + const {ipa, tags} = pronunciation; + const {exclusiveTerms, exclusiveReadings} = details; + + const node = this._instantiate('pronunciation'); + + node.dataset.tagCount = `${tags.length}`; + + let n = this._querySelector(node, '.pronunciation-tag-list'); + this._appendMultiple(n, this._createTag.bind(this), tags); + + n = this._querySelector(node, '.pronunciation-disambiguation-list'); + this._createPronunciationDisambiguations(n, exclusiveTerms, exclusiveReadings); + + n = this._querySelector(node, '.pronunciation-text-container'); + + this._setTextContent(n, ipa); + + return node; + } + + /** + * @param {import('dictionary').PitchAccent} pitchAccent + * @param {import('dictionary-data-util').GroupedPronunciation} details + * @returns {HTMLElement} + */ + _createPronunciationPitchAccent(pitchAccent, details) { const jp = this._japaneseUtil; - const {reading, position, nasalPositions, devoicePositions, tags, exclusiveTerms, exclusiveReadings} = details; + + const {position, nasalPositions, devoicePositions, tags} = pitchAccent; + const {reading, exclusiveTerms, exclusiveReadings} = details; const morae = jp.getKanaMorae(reading); const node = this._instantiate('pronunciation'); @@ -666,6 +710,7 @@ export class DisplayGenerator { n.appendChild(this._pronunciationGenerator.createPronunciationDownstepPosition(position)); n = this._querySelector(node, '.pronunciation-text-container'); + n.lang = 'ja'; n.appendChild(this._pronunciationGenerator.createPronunciationText(morae, position, nasalPositions, devoicePositions)); @@ -954,20 +999,21 @@ export class DisplayGenerator { /** * @param {string} reading - * @param {import('dictionary').TermPronunciation[]} pronunciations + * @param {import('dictionary').TermPronunciation[]} termPronunciations * @param {string[]} wordClasses * @param {number} headwordIndex * @returns {?string} */ - _getPronunciationCategories(reading, pronunciations, wordClasses, headwordIndex) { - if (pronunciations.length === 0) { return null; } + _getPronunciationCategories(reading, termPronunciations, wordClasses, headwordIndex) { + if (termPronunciations.length === 0) { return null; } const isVerbOrAdjective = DictionaryDataUtil.isNonNounVerbOrAdjective(wordClasses); /** @type {Set<import('japanese-util').PitchCategory>} */ const categories = new Set(); - for (const pronunciation of pronunciations) { - if (pronunciation.headwordIndex !== headwordIndex) { continue; } - for (const {position} of pronunciation.pitches) { - const category = this._japaneseUtil.getPitchCategory(reading, position, isVerbOrAdjective); + for (const termPronunciation of termPronunciations) { + if (termPronunciation.headwordIndex !== headwordIndex) { continue; } + for (const pronunciation of termPronunciation.pronunciations) { + if (pronunciation.type !== 'pitch-accent') { continue; } + const category = this._japaneseUtil.getPitchCategory(reading, pronunciation.position, isVerbOrAdjective); if (category !== null) { categories.add(category); } |