1<?php
2
3namespace Mpdf\Language;
4
5use Mpdf\Ucdn;
6
7class ScriptToLanguage implements \Mpdf\Language\ScriptToLanguageInterface
8{
9
10	private $scriptDelimiterMap = [
11		'viet' => "\x{01A0}\x{01A1}\x{01AF}\x{01B0}\x{1EA0}-\x{1EF1}",
12		'persian' => "\x{067E}\x{0686}\x{0698}\x{06AF}",
13		'urdu' => "\x{0679}\x{0688}\x{0691}\x{06BA}\x{06BE}\x{06C1}\x{06D2}",
14		'pashto' => "\x{067C}\x{0681}\x{0685}\x{0689}\x{0693}\x{0696}\x{069A}\x{06BC}\x{06D0}", // ? and U+06AB, U+06CD
15		'sindhi' => "\x{067A}\x{067B}\x{067D}\x{067F}\x{0680}\x{0684}\x{068D}\x{068A}\x{068F}\x{068C}\x{0687}\x{0683}\x{0699}\x{06AA}\x{06A6}\x{06BB}\x{06B1}\x{06B3}",
16	];
17
18	private $scriptToLanguageMap = [
19		/* European */
20		Ucdn::SCRIPT_LATIN => 'und-Latn',
21		Ucdn::SCRIPT_ARMENIAN => 'hy',
22		Ucdn::SCRIPT_CYRILLIC => 'und-Cyrl',
23		Ucdn::SCRIPT_GEORGIAN => 'ka',
24		Ucdn::SCRIPT_GREEK => 'el',
25		Ucdn::SCRIPT_COPTIC => 'cop',
26		Ucdn::SCRIPT_GOTHIC => 'got',
27		Ucdn::SCRIPT_CYPRIOT => 'und-Cprt',
28		Ucdn::SCRIPT_GLAGOLITIC => 'und-Glag',
29		Ucdn::SCRIPT_LINEAR_B => 'und-Linb',
30		Ucdn::SCRIPT_OGHAM => 'und-Ogam',
31		Ucdn::SCRIPT_OLD_ITALIC => 'und-Ital',
32		Ucdn::SCRIPT_RUNIC => 'und-Runr',
33		Ucdn::SCRIPT_SHAVIAN => 'und-Shaw',
34		/* African */
35		Ucdn::SCRIPT_ETHIOPIC => 'und-Ethi',
36		Ucdn::SCRIPT_NKO => 'nqo',
37		Ucdn::SCRIPT_BAMUM => 'bax',
38		Ucdn::SCRIPT_VAI => 'vai',
39		Ucdn::SCRIPT_EGYPTIAN_HIEROGLYPHS => 'und-Egyp',
40		Ucdn::SCRIPT_MEROITIC_CURSIVE => 'und-Merc',
41		Ucdn::SCRIPT_MEROITIC_HIEROGLYPHS => 'und-Mero',
42		Ucdn::SCRIPT_OSMANYA => 'und-Osma',
43		Ucdn::SCRIPT_TIFINAGH => 'und-Tfng',
44		/* Middle Eastern */
45		Ucdn::SCRIPT_ARABIC => 'und-Arab',
46		Ucdn::SCRIPT_HEBREW => 'he',
47		Ucdn::SCRIPT_SYRIAC => 'syr',
48		Ucdn::SCRIPT_IMPERIAL_ARAMAIC => 'arc',
49		Ucdn::SCRIPT_AVESTAN => 'ae',
50		Ucdn::SCRIPT_CARIAN => 'xcr',
51		Ucdn::SCRIPT_LYCIAN => 'xlc',
52		Ucdn::SCRIPT_LYDIAN => 'xld',
53		Ucdn::SCRIPT_MANDAIC => 'mid',
54		Ucdn::SCRIPT_OLD_PERSIAN => 'peo',
55		Ucdn::SCRIPT_PHOENICIAN => 'phn',
56		Ucdn::SCRIPT_SAMARITAN => 'smp',
57		Ucdn::SCRIPT_UGARITIC => 'uga',
58		Ucdn::SCRIPT_CUNEIFORM => 'und-Xsux',
59		Ucdn::SCRIPT_OLD_SOUTH_ARABIAN => 'und-Sarb',
60		Ucdn::SCRIPT_INSCRIPTIONAL_PARTHIAN => 'und-Prti',
61		Ucdn::SCRIPT_INSCRIPTIONAL_PAHLAVI => 'und-Phli',
62		/* Central Asian */
63		Ucdn::SCRIPT_MONGOLIAN => 'mn',
64		Ucdn::SCRIPT_TIBETAN => 'bo',
65		Ucdn::SCRIPT_OLD_TURKIC => 'und-Orkh',
66		Ucdn::SCRIPT_PHAGS_PA => 'und-Phag',
67		/* South Asian */
68		Ucdn::SCRIPT_BENGALI => 'bn',
69		Ucdn::SCRIPT_DEVANAGARI => 'hi',
70		Ucdn::SCRIPT_GUJARATI => 'gu',
71		Ucdn::SCRIPT_GURMUKHI => 'pa',
72		Ucdn::SCRIPT_KANNADA => 'kn',
73		Ucdn::SCRIPT_MALAYALAM => 'ml',
74		Ucdn::SCRIPT_ORIYA => 'or',
75		Ucdn::SCRIPT_SINHALA => 'si',
76		Ucdn::SCRIPT_TAMIL => 'ta',
77		Ucdn::SCRIPT_TELUGU => 'te',
78		Ucdn::SCRIPT_CHAKMA => 'ccp',
79		Ucdn::SCRIPT_LEPCHA => 'lep',
80		Ucdn::SCRIPT_LIMBU => 'lif',
81		Ucdn::SCRIPT_OL_CHIKI => 'sat',
82		Ucdn::SCRIPT_SAURASHTRA => 'saz',
83		Ucdn::SCRIPT_SYLOTI_NAGRI => 'syl',
84		Ucdn::SCRIPT_TAKRI => 'dgo',
85		Ucdn::SCRIPT_THAANA => 'dv',
86		Ucdn::SCRIPT_BRAHMI => 'und-Brah',
87		Ucdn::SCRIPT_KAITHI => 'und-Kthi',
88		Ucdn::SCRIPT_KHAROSHTHI => 'und-Khar',
89		Ucdn::SCRIPT_MEETEI_MAYEK => 'und-Mtei', /* or omp-Mtei */
90		Ucdn::SCRIPT_SHARADA => 'und-Shrd',
91		Ucdn::SCRIPT_SORA_SOMPENG => 'und-Sora',
92		/* South East Asian */
93		Ucdn::SCRIPT_KHMER => 'km',
94		Ucdn::SCRIPT_LAO => 'lo',
95		Ucdn::SCRIPT_MYANMAR => 'my',
96		Ucdn::SCRIPT_THAI => 'th',
97		Ucdn::SCRIPT_BALINESE => 'ban',
98		Ucdn::SCRIPT_BATAK => 'bya',
99		Ucdn::SCRIPT_BUGINESE => 'bug',
100		Ucdn::SCRIPT_CHAM => 'cjm',
101		Ucdn::SCRIPT_JAVANESE => 'jv',
102		Ucdn::SCRIPT_KAYAH_LI => 'und-Kali',
103		Ucdn::SCRIPT_REJANG => 'und-Rjng',
104		Ucdn::SCRIPT_SUNDANESE => 'su',
105		Ucdn::SCRIPT_TAI_LE => 'tdd',
106		Ucdn::SCRIPT_TAI_THAM => 'und-Lana',
107		Ucdn::SCRIPT_TAI_VIET => 'blt',
108		Ucdn::SCRIPT_NEW_TAI_LUE => 'und-Talu',
109		/* Phillipine */
110		Ucdn::SCRIPT_BUHID => 'bku',
111		Ucdn::SCRIPT_HANUNOO => 'hnn',
112		Ucdn::SCRIPT_TAGALOG => 'tl',
113		Ucdn::SCRIPT_TAGBANWA => 'tbw',
114		/* East Asian */
115		Ucdn::SCRIPT_HAN => 'und-Hans', // und-Hans (simplified) or und-Hant (Traditional)
116		Ucdn::SCRIPT_HANGUL => 'ko',
117		Ucdn::SCRIPT_HIRAGANA => 'ja',
118		Ucdn::SCRIPT_KATAKANA => 'ja',
119		Ucdn::SCRIPT_LISU => 'lis',
120		Ucdn::SCRIPT_BOPOMOFO => 'und-Bopo', // zh-CN, zh-TW, zh-HK
121		Ucdn::SCRIPT_MIAO => 'und-Plrd',
122		Ucdn::SCRIPT_YI => 'und-Yiii',
123		/* American */
124		Ucdn::SCRIPT_CHEROKEE => 'chr',
125		Ucdn::SCRIPT_CANADIAN_ABORIGINAL => 'cr',
126		Ucdn::SCRIPT_DESERET => 'und-Dsrt',
127		/* Other */
128		Ucdn::SCRIPT_BRAILLE => 'und-Brai',
129	];
130
131	public function getLanguageByScript($script)
132	{
133		return isset($this->scriptToLanguageMap[$script]) ? $this->scriptToLanguageMap[$script] : null;
134	}
135
136	public function getLanguageDelimiters($language)
137	{
138		return isset($this->scriptDelimiterMap[$language]) ? $this->scriptDelimiterMap[$language] : null;
139	}
140
141}
142