generated from jric11/baseProject
106 lines
2.9 KiB
PHP
106 lines
2.9 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* Hangul.php
|
||
*
|
||
* @since 2026-04-30
|
||
* @category Library
|
||
* @package Unicode
|
||
* @author Nicola Asuni <info@tecnick.com>
|
||
* @copyright 2011-2026 Nicola Asuni - Tecnick.com LTD
|
||
* @license https://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE)
|
||
* @link https://github.com/tecnickcom/tc-lib-unicode
|
||
*
|
||
* This file is part of tc-lib-unicode software library.
|
||
*
|
||
* Source: section 3.12 "Conjoining Jamo Behavior" of the Unicode standard
|
||
*/
|
||
|
||
namespace Com\Tecnick\Unicode\Data;
|
||
|
||
/**
|
||
* Com\Tecnick\Unicode\Data\Hangul
|
||
*
|
||
* Algorithmic constants for Hangul Jamo → precomposed Hangul syllable
|
||
* composition, as defined in section 3.12 of the Unicode Standard.
|
||
*
|
||
* Precomposed syllables occupy the range U+AC00–U+D7A3 and are derived by:
|
||
*
|
||
* S = SBase + (L − LBase) × NCount + (V − VBase) × TCount + (T − TBase)
|
||
*
|
||
* where T = TBase means "no trailing consonant" (TBase itself is not a
|
||
* trailing consonant; the effective trailing index is 0 in that case).
|
||
*
|
||
* @since 2026-04-30
|
||
* @category Library
|
||
* @package Unicode
|
||
* @author Nicola Asuni <info@tecnick.com>
|
||
* @copyright 2011-2026 Nicola Asuni - Tecnick.com LTD
|
||
* @license https://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE)
|
||
* @link https://github.com/tecnickcom/tc-lib-unicode
|
||
*/
|
||
final class Hangul
|
||
{
|
||
/**
|
||
* First precomposed Hangul syllable: U+AC00 HANGUL SYLLABLE GA.
|
||
*/
|
||
public const SBASE = 0xAC00;
|
||
|
||
/**
|
||
* First Hangul leading consonant (choseong): U+1100 HANGUL CHOSEONG KIYEOK.
|
||
*/
|
||
public const LBASE = 0x1100;
|
||
|
||
/**
|
||
* First Hangul vowel (jungseong): U+1161 HANGUL JUNGSEONG A.
|
||
*/
|
||
public const VBASE = 0x1161;
|
||
|
||
/**
|
||
* Trailing consonant base value: U+11A7.
|
||
*
|
||
* The first actual trailing consonant (jongseong) is U+11A8; TBase is
|
||
* one below that, so that (T − TBase) gives a 1-based index and a T of
|
||
* TBase itself encodes "no trailing consonant" (index 0).
|
||
*/
|
||
public const TBASE = 0x11A7;
|
||
|
||
/**
|
||
* Number of leading consonants (19).
|
||
*
|
||
* Covers U+1100–U+1112.
|
||
*/
|
||
public const LCOUNT = 19;
|
||
|
||
/**
|
||
* Number of vowels (21).
|
||
*
|
||
* Covers U+1161–U+1175.
|
||
*/
|
||
public const VCOUNT = 21;
|
||
|
||
/**
|
||
* Number of trailing consonant slots (28), including the "none" slot.
|
||
*
|
||
* Effective trailing consonants: U+11A8–U+11C2 (27 codepoints).
|
||
* The 28th slot represents absence of a trailing consonant.
|
||
*/
|
||
public const TCOUNT = 28;
|
||
|
||
/**
|
||
* Number of precomposed syllables per leading consonant.
|
||
*
|
||
* NCount = VCount × TCount = 21 × 28 = 588.
|
||
*/
|
||
public const NCOUNT = self::VCOUNT * self::TCOUNT;
|
||
|
||
/**
|
||
* Total number of precomposed Hangul syllables.
|
||
*
|
||
* SCount = LCount × NCount = 19 × 588 = 11172.
|
||
*/
|
||
public const SCOUNT = self::LCOUNT * self::NCOUNT;
|
||
}
|