EVOLUTION-NINJA
Edit File: LanguageToFont.php
<?php namespace Mpdf\Language; class LanguageToFont implements \Mpdf\Language\LanguageToFontInterface { public function getLanguageOptions($llcc, $adobeCJK) { $tags = preg_split('/-/', $llcc); $lang = strtolower($tags[0]); $country = ''; $script = ''; if (isset($tags[1]) && $tags[1]) { if (strlen($tags[1]) == 4) { $script = strtolower($tags[1]); } else { $country = strtolower($tags[1]); } } if (isset($tags[2]) && $tags[2]) { $country = strtolower($tags[2]); } $unifont = ""; $coreSuitable = false; switch ($lang) { /* European */ case "en": case "eng": // English // LATIN case "eu": case "eus": // Basque case "br": case "bre": // Breton case "ca": case "cat": // Catalan case "co": case "cos": // Corsican case "kw": case "cor": // Cornish case "cy": case "cym": // Welsh case "cs": case "ces": // Czech case "da": case "dan": // Danish case "nl": case "nld": // Dutch case "et": case "est": // Estonian case "fo": case "fao": // Faroese case "fi": case "fin": // Finnish case "fr": case "fra": // French case "gl": case "glg": // Galician case "de": case "deu": // German case "ht": case "hat": // Haitian; Haitian Creole case "hu": case "hun": // Hungarian case "ga": case "gle": // Irish case "is": case "isl": // Icelandic case "it": case "ita": // Italian case "la": case "lat": // Latin case "lb": case "ltz": // Luxembourgish case "li": case "lim": // Limburgish case "lt": case "lit": // Lithuanian case "lv": case "lav": // Latvian case "gv": case "glv": // Manx case "no": case "nor": // Norwegian case "nn": case "nno": // Norwegian Nynorsk case "nb": case "nob": // Norwegian Bokmål case "pl": case "pol": // Polish case "pt": case "por": // Portuguese case "ro": case "ron": // Romanian case "gd": case "gla": // Scottish Gaelic case "es": case "spa": // Spanish case "sv": case "swe": // Swedish case "sl": case "slv": // Slovene case "sk": case "slk": // Slovak $coreSuitable = true; break; case "ru": case "rus": // Russian // CYRILLIC case "ab": case "abk": // Abkhaz case "av": case "ava": // Avaric case "ba": case "bak": // Bashkir case "be": case "bel": // Belarusian case "bg": case "bul": // Bulgarian case "ce": case "che": // Chechen case "cv": case "chv": // Chuvash case "kk": case "kaz": // Kazakh case "kv": case "kom": // Komi case "ky": case "kir": // Kyrgyz case "mk": case "mkd": // Macedonian case "cu": case "chu": // Old Church Slavonic case "os": case "oss": // Ossetian case "sr": case "srp": // Serbian case "tg": case "tgk": // Tajik case "tt": case "tat": // Tatar case "tk": case "tuk": // Turkmen case "uk": case "ukr": // Ukrainian $unifont = "dejavusanscondensed"; /* freeserif best coverage for supplements etc. */ break; case "hy": case "hye": // ARMENIAN $unifont = "dejavusans"; break; case "ka": case "kat": // GEORGIAN $unifont = "dejavusans"; break; case "el": case "ell": // GREEK $unifont = "dejavusanscondensed"; break; case "cop": // COPTIC $unifont = "quivira"; break; case "got": // GOTHIC $unifont = "freeserif"; break; /* African */ case "nqo": // NKO $unifont = "dejavusans"; break; //CASE "bax": // BAMUM //CASE "ha": CASE "hau": // Hausa case "vai": // VAI $unifont = "freesans"; break; case "am": case "amh": // Amharic ETHIOPIC case "ti": case "tir": // Tigrinya ETHIOPIC $unifont = "abyssinicasil"; break; /* Middle Eastern */ case "ar": case "ara": // Arabic NB Arabic text identified by Autofont will be marked as und-Arab $unifont = "xbriyaz"; break; case "fa": case "fas": // Persian (Farsi) $unifont = "xbriyaz"; break; case "ps": case "pus": // Pashto $unifont = "xbriyaz"; break; case "ku": case "kur": // Kurdish $unifont = "xbriyaz"; break; case "ur": case "urd": // Urdu $unifont = "xbriyaz"; break; case "he": case "heb": // HEBREW case "yi": case "yid": // Yiddish $unifont = "taameydavidclm"; // dejavusans,dejavusanscondensed,freeserif are fine if you do not need cantillation marks break; case "syr": // SYRIAC $unifont = "estrangeloedessa"; break; //CASE "arc": // IMPERIAL_ARAMAIC //CASE ""ae: // AVESTAN case "xcr": // CARIAN $unifont = "aegean"; break; case "xlc": // LYCIAN $unifont = "aegean"; break; case "xld": // LYDIAN $unifont = "aegean"; break; //CASE "mid": // MANDAIC //CASE "peo": // OLD_PERSIAN case "phn": // PHOENICIAN $unifont = "aegean"; break; //CASE "smp": // SAMARITAN case "uga": // UGARITIC $unifont = "aegean"; break; /* Central Asian */ case "bo": case "bod": // TIBETAN case "dz": case "dzo": // Dzongkha $unifont = "jomolhari"; break; //CASE "mn": CASE "mon": // MONGOLIAN (Vertical script) //CASE "ug": CASE "uig": // Uyghur //CASE "uz": CASE "uzb": // Uzbek //CASE "az": CASE "azb": // South Azerbaijani /* South Asian */ case "as": case "asm": // Assamese $unifont = "freeserif"; break; case "bn": case "ben": // BENGALI; Bangla $unifont = "freeserif"; break; case "ks": case "kas": // Kashmiri $unifont = "freeserif"; break; case "hi": case "hin": // Hindi DEVANAGARI case "bh": case "bih": // Bihari (Bhojpuri, Magahi, and Maithili) case "sa": case "san": // Sanskrit $unifont = "freeserif"; break; case "gu": case "guj": // Gujarati $unifont = "freeserif"; break; case "pa": case "pan": // Panjabi, Punjabi GURMUKHI $unifont = "freeserif"; break; case "kn": case "kan": // Kannada $unifont = "lohitkannada"; break; case "mr": case "mar": // Marathi $unifont = "freeserif"; break; case "ml": case "mal": // MALAYALAM $unifont = "freeserif"; break; case "ne": case "nep": // Nepali $unifont = "freeserif"; break; case "or": case "ori": // ORIYA $unifont = "freeserif"; break; case "si": case "sin": // SINHALA $unifont = "kaputaunicode"; break; case "ta": case "tam": // TAMIL $unifont = "freeserif"; break; case "te": case "tel": // TELUGU $unifont = "pothana2000"; break; // Sindhi (Arabic or Devanagari) case "sd": case "snd": // Sindhi if ($country == "IN") { $unifont = "freeserif"; } else if ($country == "PK") { $unifont = "lateef"; } else { $unifont = "lateef"; } break; //CASE "ccp": // CHAKMA //CASE "lep": // LEPCHA case "lif": // LIMBU $unifont = "sun-exta"; break; //CASE "sat": // OL_CHIKI //CASE "saz": // SAURASHTRA case "syl": // SYLOTI_NAGRI $unifont = "mph2bdamase"; break; //CASE "dgo": // TAKRI case "dv": case "div": // Divehi; Maldivian THAANA $unifont = "freeserif"; break; /* South East Asian */ case "km": case "khm": // KHMER $unifont = "khmeros"; break; case "lo": case "lao": // LAO $unifont = "dhyana"; break; case "my": case "mya": // MYANMAR Burmese $unifont = "tharlon"; // zawgyi-one is non-unicode compliant but in wide usage // ayar is also not strictly compliant // padaukbook is unicode compliant break; case "th": case "tha": // THAI $unifont = "garuda"; break; // VIETNAMESE case "vi": case "vie": // Vietnamese $unifont = "dejavusanscondensed"; break; //CASE "ms": CASE "msa": // Malay //CASE "ban": // BALINESE //CASE "bya": // BATAK case "bug": // BUGINESE $unifont = "freeserif"; break; //CASE "cjm": // CHAM //CASE "jv": // JAVANESE case "su": // SUNDANESE $unifont = "sundaneseunicode"; break; case "tdd": // TAI_LE $unifont = "tharlon"; break; case "blt": // TAI_VIET $unifont = "taiheritagepro"; break; /* Phillipine */ case "bku": // BUHID $unifont = "quivira"; break; case "hnn": // HANUNOO $unifont = "quivira"; break; case "tl": // TAGALOG $unifont = "quivira"; break; case "tbw": // TAGBANWA $unifont = "quivira"; break; /* East Asian */ case "zh": case "zho": // Chinese if ($country == "HK" || $country == "TW") { if ($adobeCJK) { $unifont = "big5"; } else { $unifont = "sun-exta"; } } else if ($country == "CN") { if ($adobeCJK) { $unifont = "gb"; } else { $unifont = "sun-exta"; } } else { if ($adobeCJK) { $unifont = "gb"; } else { $unifont = "sun-exta"; } } break; case "ko": case "kor": // HANGUL Korean if ($adobeCJK) { $unifont = "uhc"; } else { $unifont = "unbatang"; } break; case "ja": case "jpn": // Japanese HIRAGANA KATAKANA if ($adobeCJK) { $unifont = "sjis"; } else { $unifont = "sun-exta"; } break; case "ii": case "iii": // Nuosu; Yi if ($adobeCJK) { $unifont = "gb"; } else { $unifont = "sun-exta"; } break; case "lis": // LISU $unifont = "quivira"; break; /* American */ case "chr": // CHEROKEE case "oj": case "oji": // Ojibwe; Chippewa case "cr": case "cre": // Cree CANADIAN_ABORIGINAL case "iu": case "iku": // Inuktitut $unifont = "aboriginalsans"; break; /* Undetermined language - script used */ case "und": $unifont = self::fontByScript($script, $adobeCJK); break; } return [$coreSuitable, $unifont]; } private static function fontByScript($script, $adobeCJK) { switch ($script) { /* European */ case "latn": // LATIN return "dejavusanscondensed"; case "cyrl": // CYRILLIC return "dejavusanscondensed"; /* freeserif best coverage for supplements etc. */ case "cprt": // CYPRIOT return "aegean"; case "glag": // GLAGOLITIC return "mph2bdamase"; case "linb": // LINEAR_B return "aegean"; case "ogam": // OGHAM return "dejavusans"; case "ital": // OLD_ITALIC return "aegean"; case "runr": // RUNIC return "sun-exta"; case "shaw": // SHAVIAN return "mph2bdamase"; /* African */ case "egyp": // EGYPTIAN_HIEROGLYPHS return "aegyptus"; case "ethi": // ETHIOPIC return "abyssinicasil"; //CASE "merc": // MEROITIC_CURSIVE //CASE "mero": // MEROITIC_HIEROGLYPHS case "osma": // OSMANYA return "mph2bdamase"; case "tfng": // TIFINAGH return "dejavusans"; /* Middle Eastern */ case "arab": // ARABIC return "xbriyaz"; case "xsux": // CUNEIFORM return "akkadian"; //CASE "sarb": // OLD_SOUTH_ARABIAN //CASE "prti": // INSCRIPTIONAL_PARTHIAN //CASE "phli": // INSCRIPTIONAL_PAHLAVI /* Central Asian */ //CASE "orkh": // OLD_TURKIC //CASE "phag": // PHAGS_PA (Vertical script) /* South Asian */ //CASE "brah": // BRAHMI //CASE "kthi": // KAITHI case "khar": // KHAROSHTHI return "mph2bdamase"; case "mtei": // MEETEI_MAYEK return "eeyekunicode"; //CASE "shrd": // SHARADA //CASE "sora": // SORA_SOMPENG /* South East Asian */ case "kali": // KAYAH_LI return "freemono"; //CASE "rjng": // REJANG case "lana": // TAI_THAM return "lannaalif"; case "talu": // NEW_TAI_LUE return "daibannasilbook"; /* East Asian */ case "hans": // HAN (SIMPLIFIED) if ($adobeCJK) { return "gb"; } return "sun-exta"; case "bopo": // BOPOMOFO return "sun-exta"; //CASE "plrd": // MIAO case "yiii": // YI return "sun-exta"; /* American */ case "dsrt": // DESERET return "mph2bdamase"; /* Other */ case "brai": // BRAILLE return "dejavusans"; } } }