diff --git a/keyserver/src/utils/segmenter.js b/keyserver/src/utils/segmenter.js new file mode 100644 --- /dev/null +++ b/keyserver/src/utils/segmenter.js @@ -0,0 +1,52 @@ +// @flow + +type SegmenterOptions = { + localeMatcher?: 'best fit' | 'lookup', + granularity?: 'grapheme' | 'word' | 'sentence', +}; + +type ResolvedSegmenterOptions = { + locale: string, + granularity: 'grapheme' | 'word' | 'sentence', +}; + +declare class Segmenter { + constructor( + locales?: Intl$Locale | Intl$Locale[], + options?: SegmenterOptions, + ): Segmenter; + + resolvedOptions(): ResolvedSegmenterOptions; + + segment(input: string): Segments; +} + +type SegmentData = { + segment: string, + index: number, + input: string, + isWordLike?: boolean, +}; + +declare class Segments { + containing(codeUnitIndex?: number): SegmentData; + @@iterator: () => Iterator; +} + +type OurIntlType = { + +Collator: Class, + +DateTimeFormat: Class, + +NumberFormat: Class, + +PluralRules: ?Class, + +getCanonicalLocales?: (locales?: Intl$Locales) => Intl$Locale[], + +Segmenter: Class, +}; + +const OurIntl: OurIntlType = (Intl: any); +const segmenter = new OurIntl.Segmenter('eng', { granularity: 'word' }); + +function getSegmenter(): Segmenter { + return segmenter; +} + +export { getSegmenter };