diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-10-21 17:48:39 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-10-21 18:31:34 -0300 |
commit | cf471534f7a7a4d3b0752fc9c61e71388d14b1a1 (patch) | |
tree | 07044e484732463dfcbb6a9b744fc6d878557242 /src | |
parent | e347d0b449028739b5ef88e0bd183f0a747f0e3a (diff) |
language: countWords()
Diffstat (limited to 'src')
-rw-r--r-- | src/data/things/language.js | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/data/things/language.js b/src/data/things/language.js index 0354b6ac..91774761 100644 --- a/src/data/things/language.js +++ b/src/data/things/language.js @@ -4,7 +4,7 @@ import {withAggregate} from '#aggregate'; import CacheableObject from '#cacheable-object'; import {input} from '#composite'; import * as html from '#html'; -import {empty, withEntries} from '#sugar'; +import {accumulateSum, empty, withEntries} from '#sugar'; import {isLanguageCode} from '#validators'; import Thing from '#thing'; import {languageOptionRegex} from '#wiki-data'; @@ -106,6 +106,7 @@ export class Language extends Thing { intl_listUnit: this.#intlHelper(Intl.ListFormat, {type: 'unit'}), intl_pluralCardinal: this.#intlHelper(Intl.PluralRules, {type: 'cardinal'}), intl_pluralOrdinal: this.#intlHelper(Intl.PluralRules, {type: 'ordinal'}), + intl_wordSegmenter: this.#intlHelper(Intl.Segmenter, {granularity: 'word'}), validKeys: { flags: {expose: true}, @@ -163,6 +164,15 @@ export class Language extends Thing { } } + countWords(text) { + this.assertIntlAvailable('intl_wordSegmenter'); + + const string = html.resolve(text, {normalize: 'plain'}); + const segments = this.intl_wordSegmenter.segment(string); + + return accumulateSum(segments, segment => segment.isWordLike ? 1 : 0); + } + getUnitForm(value) { this.assertIntlAvailable('intl_pluralCardinal'); return this.intl_pluralCardinal.select(value); |