2021-03-25 23:55:31 +00:00
|
|
|
/*
|
2022-02-03 01:43:10 +00:00
|
|
|
* Copyright (C) 2021-2022 Yomichan Authors
|
2021-03-25 23:55:31 +00:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Translation {
|
|
|
|
// Common
|
|
|
|
|
2021-12-18 01:00:57 +00:00
|
|
|
/**
|
|
|
|
* Enum representing the type of a `DictionaryEntry`.
|
|
|
|
* `'kanji'` corresponds to a KanjiDictionaryEntry.
|
|
|
|
* `'term'` corresponds to a TermDictionaryEntry.
|
|
|
|
*/
|
|
|
|
export enum DictionaryEntryType {
|
|
|
|
Kanji = 'kanji',
|
|
|
|
Term = 'term',
|
|
|
|
}
|
|
|
|
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* A generic dictionary entry which is used as the base interface.
|
|
|
|
*/
|
|
|
|
export interface DictionaryEntry {
|
|
|
|
/**
|
2021-12-18 01:00:57 +00:00
|
|
|
* The type of the entry.
|
2021-03-25 23:55:31 +00:00
|
|
|
*/
|
2021-12-18 01:00:57 +00:00
|
|
|
type: DictionaryEntryType;
|
2021-03-25 23:55:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A tag represents some brief information about part of a dictionary entry.
|
|
|
|
*/
|
|
|
|
export interface Tag {
|
|
|
|
/**
|
|
|
|
* The name of the tag.
|
|
|
|
*/
|
|
|
|
name: string;
|
|
|
|
/**
|
|
|
|
* The category of the tag.
|
|
|
|
*/
|
|
|
|
category: string;
|
|
|
|
/**
|
|
|
|
* A number indicating the sorting order of the tag.
|
|
|
|
*/
|
|
|
|
order: number;
|
|
|
|
/**
|
|
|
|
* A score value for the tag.
|
|
|
|
*/
|
|
|
|
score: number;
|
|
|
|
/**
|
|
|
|
* An array of descriptions for the tag. * If there are multiple entries,
|
|
|
|
* the values will typically have originated from different dictionaries.
|
|
|
|
* However, there is no correlation between the length of this array and
|
|
|
|
* the length of the `dictionaries` field, as duplicates are removed.
|
|
|
|
*/
|
|
|
|
content: string[];
|
|
|
|
/**
|
|
|
|
* An array of dictionary names that contained a tag with this name and category.
|
|
|
|
*/
|
|
|
|
dictionaries: string[];
|
|
|
|
/**
|
|
|
|
* Whether or not this tag is redundant with previous tags.
|
|
|
|
*/
|
|
|
|
redundant: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Kanji
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A dictionary entry for a kanji character.
|
2021-12-18 01:00:57 +00:00
|
|
|
* `DictionaryEntry.type` is always `DictionaryEntryType.Kanji`.
|
2021-03-25 23:55:31 +00:00
|
|
|
*/
|
|
|
|
export interface KanjiDictionaryEntry extends DictionaryEntry {
|
|
|
|
/**
|
|
|
|
* The kanji character that was looked up.
|
|
|
|
*/
|
|
|
|
character: string;
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the information originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
|
|
|
/**
|
|
|
|
* Onyomi readings for the kanji character.
|
|
|
|
*/
|
|
|
|
onyomi: string[];
|
|
|
|
/**
|
|
|
|
* Kunyomi readings for the kanji character.
|
|
|
|
*/
|
|
|
|
kunyomi: string[];
|
|
|
|
/**
|
|
|
|
* Tags for the kanji character.
|
|
|
|
*/
|
|
|
|
tags: Tag[];
|
|
|
|
/**
|
|
|
|
* An object containing stats about the kanji character.
|
|
|
|
*/
|
|
|
|
stats: KanjiStatGroups;
|
|
|
|
/**
|
|
|
|
* Definitions for the kanji character.
|
|
|
|
*/
|
|
|
|
definitions: string[];
|
|
|
|
/**
|
|
|
|
* Frequency information for the kanji character.
|
|
|
|
*/
|
|
|
|
frequencies: KanjiFrequency[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An object with groups of stats about a kanji character.
|
|
|
|
*/
|
|
|
|
export interface KanjiStatGroups {
|
|
|
|
/**
|
|
|
|
* A group of stats.
|
|
|
|
* @param propName The name of the group.
|
|
|
|
*/
|
|
|
|
[propName: string]: KanjiStat[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A stat represents a generic piece of information about a kanji character.
|
|
|
|
*/
|
|
|
|
export interface KanjiStat {
|
|
|
|
/**
|
|
|
|
* The name of the stat.
|
|
|
|
*/
|
|
|
|
name: string;
|
|
|
|
/**
|
|
|
|
* The category of the stat.
|
|
|
|
*/
|
|
|
|
category: string;
|
|
|
|
/**
|
|
|
|
* A description of the stat.
|
|
|
|
*/
|
|
|
|
content: string;
|
|
|
|
/**
|
|
|
|
* A number indicating the sorting order of the stat.
|
|
|
|
*/
|
|
|
|
order: number;
|
|
|
|
/**
|
|
|
|
* A score value for the stat.
|
|
|
|
*/
|
|
|
|
score: number;
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the stat originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
|
|
|
/**
|
|
|
|
* A value for the stat.
|
|
|
|
*/
|
|
|
|
value: number | string;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Frequency information corresponds to how frequently a character appears in a corpus,
|
|
|
|
* which can be a number of occurrences or an overall rank.
|
|
|
|
*/
|
|
|
|
export interface KanjiFrequency {
|
|
|
|
/**
|
|
|
|
* The original order of the frequency, which is usually used for sorting.
|
|
|
|
*/
|
|
|
|
index: number;
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the frequency information originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
|
|
|
/**
|
|
|
|
* The index of the dictionary in the original list of dictionaries used for the lookup.
|
|
|
|
*/
|
|
|
|
dictionaryIndex: number;
|
|
|
|
/**
|
|
|
|
* The priority of the dictionary.
|
|
|
|
*/
|
|
|
|
dictionaryPriority: number;
|
|
|
|
/**
|
|
|
|
* The kanji character for the frequency.
|
|
|
|
*/
|
|
|
|
character: string;
|
|
|
|
/**
|
|
|
|
* The frequency for the character, as a number of occurrences or an overall rank.
|
|
|
|
*/
|
2021-10-15 01:26:53 +00:00
|
|
|
frequency: number;
|
|
|
|
/**
|
|
|
|
* A display value to show to the user.
|
|
|
|
*/
|
|
|
|
displayValue: string | null;
|
|
|
|
/**
|
|
|
|
* Whether or not the displayValue string was parsed to determine the frequency value.
|
|
|
|
*/
|
|
|
|
displayValueParsed: boolean;
|
2021-03-25 23:55:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Terms
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A dictionary entry for a term or group of terms.
|
2021-12-18 01:00:57 +00:00
|
|
|
* `DictionaryEntry.type` is always `DictionaryEntryType.Term`.
|
2021-03-25 23:55:31 +00:00
|
|
|
*/
|
|
|
|
export interface TermDictionaryEntry extends DictionaryEntry {
|
|
|
|
/**
|
|
|
|
* Whether or not any of the sources is a primary source. Primary sources are derived from the
|
|
|
|
* original search text, while non-primary sources originate from related terms.
|
|
|
|
*/
|
|
|
|
isPrimary: boolean;
|
|
|
|
/**
|
|
|
|
* A list of inflections that was applied to get the term.
|
|
|
|
*/
|
|
|
|
inflections: string[];
|
|
|
|
/**
|
|
|
|
* A score for the dictionary entry.
|
|
|
|
*/
|
|
|
|
score: number;
|
|
|
|
/**
|
|
|
|
* The index of the dictionary in the original list of dictionaries used for the lookup.
|
|
|
|
*/
|
|
|
|
dictionaryIndex: number;
|
|
|
|
/**
|
|
|
|
* The priority of the dictionary.
|
|
|
|
*/
|
|
|
|
dictionaryPriority: number;
|
|
|
|
/**
|
|
|
|
* The number of primary sources that had an exact text match for the term.
|
|
|
|
*/
|
|
|
|
sourceTermExactMatchCount: number;
|
|
|
|
/**
|
2021-03-26 01:40:27 +00:00
|
|
|
* The maximum length of the transformed text for all primary sources.
|
2021-03-25 23:55:31 +00:00
|
|
|
*/
|
2021-03-26 01:40:27 +00:00
|
|
|
maxTransformedTextLength: number;
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* Headwords for the entry.
|
|
|
|
*/
|
|
|
|
headwords: TermHeadword[];
|
|
|
|
/**
|
|
|
|
* Definitions for the entry.
|
|
|
|
*/
|
|
|
|
definitions: TermDefinition[];
|
|
|
|
/**
|
|
|
|
* Pronunciations for the entry.
|
|
|
|
*/
|
|
|
|
pronunciations: TermPronunciation[];
|
|
|
|
/**
|
|
|
|
* Frequencies for the entry.
|
|
|
|
*/
|
|
|
|
frequencies: TermFrequency[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A term headword is a combination of a term, reading, and auxiliary information.
|
|
|
|
*/
|
|
|
|
export interface TermHeadword {
|
|
|
|
/**
|
|
|
|
* The original order of the headword, which is usually used for sorting.
|
|
|
|
*/
|
|
|
|
index: number;
|
|
|
|
/**
|
|
|
|
* The text for the term.
|
|
|
|
*/
|
|
|
|
term: string;
|
|
|
|
/**
|
|
|
|
* The reading of the term.
|
|
|
|
*/
|
|
|
|
reading: string;
|
|
|
|
/**
|
|
|
|
* The sources of the term.
|
|
|
|
*/
|
|
|
|
sources: TermSource[];
|
|
|
|
/**
|
|
|
|
* Tags for the headword.
|
|
|
|
*/
|
|
|
|
tags: Tag[];
|
2021-03-26 23:50:54 +00:00
|
|
|
/**
|
|
|
|
* List of word classes (part of speech) for the headword.
|
|
|
|
*/
|
|
|
|
wordClasses: string[];
|
2021-03-25 23:55:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A definition contains a list of entries and information about what what terms it corresponds to.
|
|
|
|
*/
|
|
|
|
export interface TermDefinition {
|
|
|
|
/**
|
|
|
|
* The original order of the definition, which is usually used for sorting.
|
|
|
|
*/
|
|
|
|
index: number;
|
|
|
|
/**
|
|
|
|
* A list of headwords that this definition corresponds to.
|
|
|
|
*/
|
|
|
|
headwordIndices: number[];
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the definition information originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
2021-06-26 15:57:09 +00:00
|
|
|
/**
|
|
|
|
* The index of the dictionary in the original list of dictionaries used for the lookup.
|
|
|
|
*/
|
|
|
|
dictionaryIndex: number;
|
|
|
|
/**
|
|
|
|
* The priority of the dictionary.
|
|
|
|
*/
|
|
|
|
dictionaryPriority: number;
|
|
|
|
/**
|
|
|
|
* Database ID for the definition.
|
|
|
|
*/
|
|
|
|
id: number[];
|
|
|
|
/**
|
|
|
|
* A score for the definition.
|
|
|
|
*/
|
|
|
|
score: number;
|
2021-04-18 22:08:02 +00:00
|
|
|
/**
|
2021-05-08 17:16:56 +00:00
|
|
|
* A list of database sequence numbers for the term. A value of `-1` corresponds to no sequence.
|
|
|
|
* The list can have multiple values if multiple definitions with different sequences have been merged.
|
|
|
|
* The list should always have at least one item.
|
2021-04-18 22:08:02 +00:00
|
|
|
*/
|
2021-05-08 17:16:56 +00:00
|
|
|
sequences: number;
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* Tags for the definition.
|
|
|
|
*/
|
|
|
|
tags: Tag[];
|
|
|
|
/**
|
|
|
|
* The definition entries.
|
|
|
|
*/
|
|
|
|
entries: string[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A term pronunciation represents different ways to pronounce one of the headwords.
|
|
|
|
*/
|
|
|
|
export interface TermPronunciation {
|
|
|
|
/**
|
|
|
|
* The original order of the pronunciation, which is usually used for sorting.
|
|
|
|
*/
|
|
|
|
index: number;
|
|
|
|
/**
|
|
|
|
* Which headword this pronunciation corresponds to.
|
|
|
|
*/
|
|
|
|
headwordIndex: number;
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the proununciation information originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
|
|
|
/**
|
|
|
|
* The index of the dictionary in the original list of dictionaries used for the lookup.
|
|
|
|
*/
|
|
|
|
dictionaryIndex: number;
|
|
|
|
/**
|
|
|
|
* The priority of the dictionary.
|
|
|
|
*/
|
|
|
|
dictionaryPriority: number;
|
|
|
|
/**
|
|
|
|
* The pitch accent representations for the term.
|
|
|
|
*/
|
|
|
|
pitches: TermPitch[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Pitch accent information for a term, represented as the position of the downstep.
|
|
|
|
*/
|
|
|
|
export interface TermPitch {
|
|
|
|
/**
|
|
|
|
* Position of the downstep, as a number of mora.
|
|
|
|
*/
|
|
|
|
position: number;
|
2021-07-16 02:39:33 +00:00
|
|
|
/**
|
2021-12-18 01:00:57 +00:00
|
|
|
* Positions of morae with a nasal sound.
|
2021-07-16 02:39:33 +00:00
|
|
|
*/
|
|
|
|
nasalPositions: number[];
|
|
|
|
/**
|
2021-12-18 01:00:57 +00:00
|
|
|
* Positions of morae with a devoiced sound.
|
2021-07-16 02:39:33 +00:00
|
|
|
*/
|
|
|
|
devoicePositions: [];
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* Tags for the pitch accent.
|
|
|
|
*/
|
|
|
|
tags: Tag[];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Frequency information corresponds to how frequently a term appears in a corpus,
|
|
|
|
* which can be a number of occurrences or an overall rank.
|
|
|
|
*/
|
|
|
|
export interface TermFrequency {
|
|
|
|
/**
|
|
|
|
* The original order of the frequency, which is usually used for sorting.
|
|
|
|
*/
|
|
|
|
index: number;
|
|
|
|
/**
|
|
|
|
* Which headword this frequency corresponds to.
|
|
|
|
*/
|
|
|
|
headwordIndex: number;
|
|
|
|
/**
|
|
|
|
* The name of the dictionary that the frequency information originated from.
|
|
|
|
*/
|
|
|
|
dictionary: string;
|
|
|
|
/**
|
|
|
|
* The index of the dictionary in the original list of dictionaries used for the lookup.
|
|
|
|
*/
|
|
|
|
dictionaryIndex: number;
|
|
|
|
/**
|
|
|
|
* The priority of the dictionary.
|
|
|
|
*/
|
|
|
|
dictionaryPriority: number;
|
|
|
|
/**
|
|
|
|
* Whether or not the frequency had an explicit reading specified.
|
|
|
|
*/
|
|
|
|
hasReading: boolean;
|
|
|
|
/**
|
|
|
|
* The frequency for the term, as a number of occurrences or an overall rank.
|
|
|
|
*/
|
2021-10-15 01:26:53 +00:00
|
|
|
frequency: number;
|
|
|
|
/**
|
|
|
|
* A display value to show to the user.
|
|
|
|
*/
|
|
|
|
displayValue: string | null;
|
|
|
|
/**
|
|
|
|
* Whether or not the displayValue string was parsed to determine the frequency value.
|
|
|
|
*/
|
|
|
|
displayValueParsed: boolean;
|
2021-03-25 23:55:31 +00:00
|
|
|
}
|
|
|
|
|
2021-12-18 01:00:57 +00:00
|
|
|
/**
|
|
|
|
* Enum representing how the search term relates to the final term.
|
|
|
|
*/
|
|
|
|
export enum TermSourceMatchType {
|
|
|
|
Exact = 'exact',
|
|
|
|
Prefix = 'prefix',
|
|
|
|
Suffix = 'suffix',
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enum representing what database field was used to match the source term.
|
|
|
|
*/
|
|
|
|
export enum TermSourceMatchSource {
|
|
|
|
Term = 'term',
|
|
|
|
Reading = 'reading',
|
|
|
|
Sequence = 'sequence',
|
|
|
|
}
|
|
|
|
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* Source information represents how the original text was transformed to get to the final term.
|
|
|
|
*/
|
|
|
|
export interface TermSource {
|
|
|
|
/**
|
|
|
|
* The original text that was searched.
|
|
|
|
*/
|
|
|
|
originalText: string;
|
|
|
|
/**
|
|
|
|
* The original text after being transformed, but before applying deinflections.
|
|
|
|
*/
|
|
|
|
transformedText: string;
|
|
|
|
/**
|
|
|
|
* The final text after applying deinflections.
|
|
|
|
*/
|
|
|
|
deinflectedText: string;
|
2021-12-17 21:44:14 +00:00
|
|
|
/**
|
|
|
|
* How the deinflected text matches the value from the database.
|
|
|
|
*/
|
2021-12-18 01:00:57 +00:00
|
|
|
matchType: TermSourceMatchType;
|
2021-12-17 21:44:14 +00:00
|
|
|
/**
|
|
|
|
* Which field was used to match the database entry.
|
|
|
|
*/
|
2021-12-18 01:00:57 +00:00
|
|
|
matchSource: TermSourceMatchSource;
|
2021-03-25 23:55:31 +00:00
|
|
|
/**
|
|
|
|
* Whether or not this source is a primary source. Primary sources are derived from the
|
|
|
|
* original search text, while non-primary sources originate from related terms.
|
|
|
|
*/
|
|
|
|
isPrimary: boolean;
|
|
|
|
}
|
|
|
|
}
|