2 //============================================================+
3 // File name : unicode_data.php
5 // Last Update : 2008-07-21
6 // License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
7 // ----------------------------------------------------------------------------
8 // Copyright (C) 2002-2008 Nicola Asuni - Tecnick.com S.r.l.
10 // This program is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as published by
12 // the Free Software Foundation, either version 2.1 of the License, or
13 // (at your option) any later version.
15 // This program is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU Lesser General Public License for more details.
20 // You should have received a copy of the GNU Lesser General Public License
21 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 // See LICENSE.TXT file for more information.
24 // ----------------------------------------------------------------------------
26 // Description : Unicode Include file for TCPDF.
28 // Author: Nicola Asuni
34 // 09044 Quartucciu (CA)
38 //============================================================+
40 // Efthimios Mavrogeorgiadis
44 * Unicode Include file for TCPDF.
45 * @author Nicola Asuni
46 * @copyright 2004-2008 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
47 * @package com.tecnick.tcpdf
48 * @link http://www.tcpdf.org
49 * @license http://www.gnu.org/copyleft/lesser.html LGPL
50 * @since 2.1.000 (2008-01-08)
56 define("K_LRM", 8206);
60 define("K_RLM", 8207);
62 * Left-to-Right Embedding
64 define("K_LRE", 8234);
66 * Right-to-Left Embedding
68 define("K_RLE", 8235);
70 * Pop Directional Format
72 define("K_PDF", 8236);
74 * Left-to-Right Override
76 define("K_LRO", 8237);
78 * Right-to-Left Override
80 define("K_RLO", 8238);
83 * Pattern to test RTL (Righ-To-Left) strings using regular expressions.
85 if (!defined("K_RE_PATTERN_RTL"))
86 define("K_RE_PATTERN_RTL", "/(
88 | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4] # R
89 | \xDF[\x80-\xAA\xB4\xB5\xBA] # R
91 | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE] # R
92 | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F] # R
93 | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF] # R
94 | \xF0\x90\xA4[\x80-\x99] # R
95 | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3] # R
96 | \xF0\x90\xA9[\x80-\x87\x90-\x98] # R
97 | \xE2\x80[\xAB\xAE] # RLE & RLO
100 * Pattern to test Arabic strings using regular expressions.
101 * source: http://www.w3.org/International/questions/qa-forms-utf-8
103 if (!defined("K_RE_PATTERN_ARABIC"))
104 define("K_RE_PATTERN_ARABIC", "/(
105 \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA] # AL
106 | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF] # AL
107 | \xDA[\x80-\xBF] # AL
108 | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF] # AL
109 | \xDC[\x80-\x8D\x90\x92-\xAF] # AL
110 | \xDD[\x8D-\xAD] # AL
111 | \xDE[\x80-\xA5\xB1] # AL
112 | \xEF\xAD[\x90-\xBF] # AL
113 | \xEF\xAE[\x80-\xB1] # AL
114 | \xEF\xAF[\x93-\xBF] # AL
115 | \xEF[\xB0-\xB3][\x80-\xBF] # AL
116 | \xEF\xB4[\x80-\xBD] # AL
117 | \xEF\xB5[\x90-\xBF] # AL
118 | \xEF\xB6[\x80-\x8F\x92-\xBF] # AL
119 | \xEF\xB7[\x80-\x87\xB0-\xBC] # AL
120 | \xEF\xB9[\xB0-\xB4\xB6-\xBF] # AL
121 | \xEF\xBA[\x80-\xBF] # AL
122 | \xEF\xBB[\x80-\xBC] # AL
123 | \xD9[\xA0-\xA9\xAB\xAC] # AN
126 * Array of unicode types
2300 * Mirror unicode characters.
2301 * For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
2302 * at http://www.unicode.org/unicode/reports/tr9/
2304 $unicode_mirror = array(
2659 * Arabic shape subtitutions
2660 * char code => isolated, final, initial, medial
2662 $unicode_arlet = array(
2663 1569 => array(65152),
2664 1570 => array(65153, 65154, 65153, 65154),
2665 1571 => array(65155, 65156, 65155, 65156),
2666 1572 => array(65157, 65158),
2667 1573 => array(65159, 65160, 65159, 65160),
2668 1574 => array(65161, 65162, 65163, 65164),
2669 1575 => array(65165, 65166, 65165, 65166),
2670 1576 => array(65167, 65168, 65169, 65170),
2671 1577 => array(65171, 65172),
2672 1578 => array(65173, 65174, 65175, 65176),
2673 1579 => array(65177, 65178, 65179, 65180),
2674 1580 => array(65181, 65182, 65183, 65184),
2675 1581 => array(65185, 65186, 65187, 65188),
2676 1582 => array(65189, 65190, 65191, 65192),
2677 1583 => array(65193, 65194, 65193, 65194),
2678 1584 => array(65195, 65196, 65195, 65196),
2679 1585 => array(65197, 65198, 65197, 65198),
2680 1586 => array(65199, 65200, 65199, 65200),
2681 1587 => array(65201, 65202, 65203, 65204),
2682 1588 => array(65205, 65206, 65207, 65208),
2683 1589 => array(65209, 65210, 65211, 65212),
2684 1590 => array(65213, 65214, 65215, 65216),
2685 1591 => array(65217, 65218, 65219, 65220),
2686 1592 => array(65221, 65222, 65223, 65224),
2687 1593 => array(65225, 65226, 65227, 65228),
2688 1594 => array(65229, 65230, 65231, 65232),
2689 1601 => array(65233, 65234, 65235, 65236),
2690 1602 => array(65237, 65238, 65239, 65240),
2691 1603 => array(65241, 65242, 65243, 65244),
2692 1604 => array(65245, 65246, 65247, 65248),
2693 1605 => array(65249, 65250, 65251, 65252),
2694 1606 => array(65253, 65254, 65255, 65256),
2695 1607 => array(65257, 65258, 65259, 65260),
2696 1608 => array(65261, 65262, 65261, 65262),
2697 1609 => array(65263, 65264, 64488, 64489),
2698 1610 => array(65265, 65266, 65267, 65268),
2699 1649 => array(64336, 64337),
2700 1655 => array(64477),
2701 1657 => array(64358, 64359, 64360, 64361),
2702 1658 => array(64350, 64351, 64352, 64353),
2703 1659 => array(64338, 64339, 64340, 64341),
2704 1662 => array(64342, 64343, 64344, 64345),
2705 1663 => array(64354, 64355, 64356, 64357),
2706 1664 => array(64346, 64347, 64348, 64349),
2707 1667 => array(64374, 64375, 64376, 64377),
2708 1668 => array(64370, 64371, 64372, 64373),
2709 1670 => array(64378, 64379, 64380, 64381),
2710 1671 => array(64382, 64383, 64384, 64385),
2711 1672 => array(64392, 64393),
2712 1676 => array(64388, 64389),
2713 1677 => array(64386, 64387),
2714 1678 => array(64390, 64391),
2715 1681 => array(64396, 64397),
2716 1688 => array(64394, 64395, 64394, 64395),
2717 1700 => array(64362, 64363, 64364, 64365),
2718 1702 => array(64366, 64367, 64368, 64369),
2719 1705 => array(64398, 64399, 64400, 64401),
2720 1709 => array(64467, 64468, 64469, 64470),
2721 1711 => array(64402, 64403, 64404, 64405),
2722 1713 => array(64410, 64411, 64412, 64413),
2723 1715 => array(64406, 64407, 64408, 64409),
2724 1722 => array(64414, 64415),
2725 1723 => array(64416, 64417, 64418, 64419),
2726 1726 => array(64426, 64427, 64428, 64429),
2727 1728 => array(64420, 64421),
2728 1729 => array(64422, 64423, 64424, 64425),
2729 1733 => array(64480, 64481),
2730 1734 => array(64473, 64474),
2731 1735 => array(64471, 64472),
2732 1736 => array(64475, 64476),
2733 1737 => array(64482, 64483),
2734 1739 => array(64478, 64479),
2735 1740 => array(64508, 64509, 64510, 64511),
2736 1744 => array(64484, 64485, 64486, 64487),
2737 1746 => array(64430, 64431),
2738 1747 => array(64432, 64433)
2743 * char code => isolated, final, initial, medial
2745 $laa_array = array (
2746 1570 => array(65269, 65270, 65269, 65270),
2747 1571 => array(65271, 65272, 65271, 65272),
2748 1573 => array(65273, 65274, 65273, 65274),
2749 1575 => array(65275, 65276, 65275, 65276)
2753 * Array of character substitutions for sequences of two diacritics symbols starting with SHADDA (0651 HEX, 1617 DEC).
2754 * Combining characters that can occur with Shadda (U0651) are placed in UE586-UE594.
2755 * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
2756 * second NSM char code => substitution char
2758 $diacritics = array (
2759 1612 => 64606, // Shadda + Dammatan
2760 1613 => 64607, // Shadda + Kasratan
2761 1614 => 64608, // Shadda + Fatha
2762 1615 => 64609, // Shadda + Damma
2763 1616 => 64610 // Shadda + Kasra
2766 //============================================================+
2768 //============================================================+