29                 'basic_latin' => array(
'Basic Latin', 
'0020', 
'007F'), 
 
   30                 'latin_1_supplement' => array(
'Latin-1 Supplement', 
'00A0', 
'00FF'), 
 
   31                 'latin_extended_a' => array(
'Latin Extended-A', 
'0100', 
'017F'),
 
   32                 'latin_extended_b' => array(
'Latin Extended-B', 
'0180', 
'024F'),
 
   33                 'ipa_extensions' => array(
'IPA Extensions', 
'0250', 
'02AF'),
 
   34                 'spacing_modifier_letters' => array(
'Spacing Modifier Letters', 
'02B0', 
'02FF'),
 
   35                 'combining_diacritical_marks' => array(
'Combining Diacritical Marks', 
'0300', 
'036F'),
 
   36                 'greek_and_coptic' => array(
'Greek and Coptic', 
'0370', 
'03FF'),
 
   37                 'cyrillic' => array(
'Cyrillic', 
'0400', 
'04FF'),
 
   38                 'cyrillic_supplement' => array(
'Cyrillic Supplement', 
'0500', 
'052F'),
 
   39                 'armenian' => array(
'Armenian', 
'0530', 
'058F'),
 
   40                 'hebrew' => array(
'Hebrew', 
'0590', 
'05FF'),
 
   41                 'arabic' => array(
'Arabic', 
'0600', 
'06FF'),
 
   42                 'syriac' => array(
'Syriac', 
'0700', 
'074F'),
 
   43                 'arabic_supplement' => array(
'Arabic Supplement', 
'0750', 
'077F'),
 
   44                 'thaana' => array(
'Thaana', 
'0780', 
'07BF'),
 
   45                 'nko' => array(
'NKo', 
'07C0', 
'07FF'),
 
   46                 'samaritan' => array(
'Samaritan', 
'0800', 
'083F'),
 
   47                 'mandaic' => array(
'Mandaic', 
'0840', 
'085F'),
 
   48                 'arabic_extended_a' => array(
'Arabic Extended-A', 
'08A0', 
'08FF'),
 
   49                 'devanagari' => array(
'Devanagari', 
'0900', 
'097F'),
 
   50                 'bengali' => array(
'Bengali', 
'0980', 
'09FF'),
 
   51                 'gurmukhi' => array(
'Gurmukhi', 
'0A00', 
'0A7F'),
 
   52                 'gujarati' => array(
'Gujarati', 
'0A80', 
'0AFF'),
 
   53                 'oriya' => array(
'Oriya', 
'0B00', 
'0B7F'),
 
   54                 'tamil' => array(
'Tamil', 
'0B80', 
'0BFF'),
 
   55                 'telugu' => array(
'Telugu', 
'0C00', 
'0C7F'),
 
   56                 'kannada' => array(
'Kannada', 
'0C80', 
'0CFF'),
 
   57                 'malayalam' => array(
'Malayalam', 
'0D00', 
'0D7F'),
 
   58                 'sinhala' => array(
'Sinhala', 
'0D80', 
'0DFF'),
 
   59                 'thai' => array(
'Thai', 
'0E00', 
'0E7F'),
 
   60                 'lao' => array(
'Lao', 
'0E80', 
'0EFF'),
 
   61                 'tibetan' => array(
'Tibetan', 
'0F00', 
'0FFF'),
 
   62                 'myanmar' => array(
'Myanmar', 
'1000', 
'109F'),
 
   63                 'georgian' => array(
'Georgian', 
'10A0', 
'10FF'),
 
   64                 'hangul_jamo' => array(
'Hangul Jamo', 
'1100', 
'11FF'),
 
   65                 'ethiopic' => array(
'Ethiopic', 
'1200', 
'137F'),
 
   66                 'ethiopic_supplement' => array(
'Ethiopic Supplement', 
'1380', 
'139F'),
 
   67                 'cherokee' => array(
'Cherokee', 
'13A0', 
'13FF'),
 
   68                 'unified_canadian_aboriginal_syllabics' => array(
'Unified Canadian Aboriginal Syllabics', 
'1400', 
'167F'),
 
   69                 'ogham' => array(
'Ogham', 
'1680', 
'169F'),
 
   70                 'runic' => array(
'Runic', 
'16A0', 
'16FF'),
 
   71                 'tagalog' => array(
'Tagalog', 
'1700', 
'171F'),
 
   72                 'hanunoo' => array(
'Hanunoo', 
'1720', 
'173F'),
 
   73                 'buhid' => array(
'Buhid', 
'1740', 
'175F'),
 
   74                 'tagbanwa' => array(
'Tagbanwa', 
'1760', 
'177F'),
 
   75                 'khmer' => array(
'Khmer', 
'1780', 
'17FF'),
 
   76                 'mongolian' => array(
'Mongolian', 
'1800', 
'18AF'),
 
   77                 'unified_canadian_aboriginal_syllabics_extended' => array(
'Unified Canadian Aboriginal Syllabics Extended', 
'18B0', 
'18FF'),
 
   78                 'limbu' => array(
'Limbu', 
'1900', 
'194F'),
 
   79                 'tai_le' => array(
'Tai Le', 
'1950', 
'197F'),
 
   80                 'new_tai_lue' => array(
'New Tai Lue', 
'1980', 
'19DF'),
 
   81                 'khmer_symbols' => array(
'Khmer Symbols', 
'19E0', 
'19FF'),
 
   82                 'buginese' => array(
'Buginese', 
'1A00', 
'1A1F'),
 
   83                 'tai_tham' => array(
'Tai Tham', 
'1A20', 
'1AAF'),
 
   84                 'balinese' => array(
'Balinese', 
'1B00', 
'1B7F'),
 
   85                 'sundanese' => array(
'Sundanese', 
'1B80', 
'1BBF'),
 
   86                 'batak' => array(
'Batak', 
'1BC0', 
'1BFF'),
 
   87                 'lepcha' => array(
'Lepcha', 
'1C00', 
'1C4F'),
 
   88                 'ol_chiki' => array(
'Ol Chiki', 
'1C50', 
'1C7F'),
 
   89                 'sundanese_supplement' => array(
'Sundanese Supplement', 
'1CC0', 
'1CCF'),
 
   90                 'vedic_extensions' => array(
'Vedic Extensions', 
'1CD0', 
'1CFF'),
 
   91                 'phonetic_extensions' => array(
'Phonetic Extensions', 
'1D00', 
'1D7F'),
 
   92                 'phonetic_extensions_supplement' => array(
'Phonetic Extensions Supplement', 
'1D80', 
'1DBF'),
 
   93                 'combining_diacritical_marks_supplement' => array(
'Combining Diacritical Marks Supplement', 
'1DC0', 
'1DFF'),
 
   94                 'latin_extended_additional' => array(
'Latin Extended Additional', 
'1E00', 
'1EFF'),
 
   95                 'greek_extended' => array(
'Greek Extended', 
'1F00', 
'1FFF'),
 
   96                 'general_punctuation' => array(
'General Punctuation', 
'2000', 
'206F'),
 
   97                 'superscripts_and_subscripts' => array(
'Superscripts and Subscripts', 
'2070', 
'209F'),
 
   98                 'currency_symbols' => array(
'Currency Symbols', 
'20A0', 
'20CF'),
 
   99                 'combining_diacritical_marks_for_symbols' => array(
'Combining Diacritical Marks for Symbols', 
'20D0', 
'20FF'),
 
  100                 'letterlike_symbols' => array(
'Letterlike Symbols', 
'2100', 
'214F'),
 
  101                 'number_forms' => array(
'Number Forms', 
'2150', 
'218F'),
 
  102                 'arrows' => array(
'Arrows', 
'2190', 
'21FF'),
 
  103                 'mathematical_operators' => array(
'Mathematical Operators', 
'2200', 
'22FF'),
 
  104                 'miscellaneous_technical' => array(
'Miscellaneous Technical', 
'2300', 
'23FF'),
 
  105                 'control_pictures' => array(
'Control Pictures', 
'2400', 
'243F'),
 
  106                 'optical_character_recognition' => array(
'Optical Character Recognition', 
'2440', 
'245F'),
 
  107                 'enclosed_alphanumerics' => array(
'Enclosed Alphanumerics', 
'2460', 
'24FF'),
 
  108                 'box_drawing' => array(
'Box Drawing', 
'2500', 
'257F'),
 
  109                 'block_elements' => array(
'Block Elements', 
'2580', 
'259F'),
 
  110                 'geometric_shapes' => array(
'Geometric Shapes', 
'25A0', 
'25FF'),
 
  111                 'miscellaneous_symbols' => array(
'Miscellaneous Symbols', 
'2600', 
'26FF'),
 
  112                 'dingbats' => array(
'Dingbats', 
'2700', 
'27BF'),
 
  113                 'miscellaneous_mathematical_symbols_a' => array(
'Miscellaneous Mathematical Symbols-A', 
'27C0', 
'27EF'),
 
  114                 'supplemental_arrows_a' => array(
'Supplemental Arrows-A', 
'27F0', 
'27FF'),
 
  115                 'braille_patterns' => array(
'Braille Patterns', 
'2800', 
'28FF'),
 
  116                 'supplemental_arrows_b' => array(
'Supplemental Arrows-B', 
'2900', 
'297F'),
 
  117                 'miscellaneous_mathematical_symbols_b' => array(
'Miscellaneous Mathematical Symbols-B', 
'2980', 
'29FF'),
 
  118                 'supplemental_mathematical_operators' => array(
'Supplemental Mathematical Operators', 
'2A00', 
'2AFF'),
 
  119                 'miscellaneous_symbols_and_arrows' => array(
'Miscellaneous Symbols and Arrows', 
'2B00', 
'2BFF'),
 
  120                 'glagolitic' => array(
'Glagolitic', 
'2C00', 
'2C5F'),
 
  121                 'latin_extended_c' => array(
'Latin Extended-C', 
'2C60', 
'2C7F'),
 
  122                 'coptic' => array(
'Coptic', 
'2C80', 
'2CFF'),
 
  123                 'georgian_supplement' => array(
'Georgian Supplement', 
'2D00', 
'2D2F'),
 
  124                 'tifinagh' => array(
'Tifinagh', 
'2D30', 
'2D7F'),
 
  125                 'ethiopic_extended' => array(
'Ethiopic Extended', 
'2D80', 
'2DDF'),
 
  126                 'cyrillic_extended_a' => array(
'Cyrillic Extended-A', 
'2DE0', 
'2DFF'),
 
  127                 'supplemental_punctuation' => array(
'Supplemental Punctuation', 
'2E00', 
'2E7F'),
 
  128                 'cjk_radicals_supplement' => array(
'CJK Radicals Supplement', 
'2E80', 
'2EFF'),
 
  129                 'kangxi_radicals' => array(
'Kangxi Radicals', 
'2F00', 
'2FDF'),
 
  130                 'ideographic_description_characters' => array(
'Ideographic Description Characters', 
'2FF0', 
'2FFF'),
 
  131                 'cjk_symbols_and_punctuation' => array(
'CJK Symbols and Punctuation', 
'3000', 
'303F'),
 
  132                 'hiragana' => array(
'Hiragana', 
'3040', 
'309F'),
 
  133                 'katakana' => array(
'Katakana', 
'30A0', 
'30FF'),
 
  134                 'bopomofo' => array(
'Bopomofo', 
'3100', 
'312F'),
 
  135                 'hangul_compatibility_jamo' => array(
'Hangul Compatibility Jamo', 
'3130', 
'318F'),
 
  136                 'kanbun' => array(
'Kanbun', 
'3190', 
'319F'),
 
  137                 'bopomofo_extended' => array(
'Bopomofo Extended', 
'31A0', 
'31BF'),
 
  138                 'cjk_strokes' => array(
'CJK Strokes', 
'31C0', 
'31EF'),
 
  139                 'katakana_phonetic_extensions' => array(
'Katakana Phonetic Extensions', 
'31F0', 
'31FF'),
 
  140                 'enclosed_cjk_letters_and_months' => array(
'Enclosed CJK Letters and Months', 
'3200', 
'32FF'),
 
  141                 'cjk_compatibility' => array(
'CJK Compatibility', 
'3300', 
'33FF'),
 
  142                 'cjk_unified_ideographs_extension_a' => array(
'CJK Unified Ideographs Extension A', 
'3400', 
'4DBF'),
 
  143                 'yijing_hexagram_symbols' => array(
'Yijing Hexagram Symbols', 
'4DC0', 
'4DFF'),
 
  144                 'cjk_unified_ideographs' => array(
'CJK Unified Ideographs', 
'4E00', 
'9FFF'),
 
  145                 'yi_syllables' => array(
'Yi Syllables', 
'A000', 
'A48F'),
 
  146                 'yi_radicals' => array(
'Yi Radicals', 
'A490', 
'A4CF'),
 
  147                 'lisu' => array(
'Lisu', 
'A4D0', 
'A4FF'),
 
  148                 'vai' => array(
'Vai', 
'A500', 
'A63F'),
 
  149                 'cyrillic_extended_b' => array(
'Cyrillic Extended-B', 
'A640', 
'A69F'),
 
  150                 'bamum' => array(
'Bamum', 
'A6A0', 
'A6FF'),
 
  151                 'modifier_tone_letters' => array(
'Modifier Tone Letters', 
'A700', 
'A71F'),
 
  152                 'latin_extended_d' => array(
'Latin Extended-D', 
'A720', 
'A7FF'),
 
  153                 'syloti_nagri' => array(
'Syloti Nagri', 
'A800', 
'A82F'),
 
  154                 'common_indic_number_forms' => array(
'Common Indic Number Forms', 
'A830', 
'A83F'),
 
  155                 'phags_pa' => array(
'Phags-pa', 
'A840', 
'A87F'),
 
  156                 'saurashtra' => array(
'Saurashtra', 
'A880', 
'A8DF'),
 
  157                 'devanagari_extended' => array(
'Devanagari Extended', 
'A8E0', 
'A8FF'),
 
  158                 'kayah_li' => array(
'Kayah Li', 
'A900', 
'A92F'),
 
  159                 'rejang' => array(
'Rejang', 
'A930', 
'A95F'),
 
  160                 'hangul_jamo_extended_a' => array(
'Hangul Jamo Extended-A', 
'A960', 
'A97F'),
 
  161                 'javanese' => array(
'Javanese', 
'A980', 
'A9DF'),
 
  162                 'cham' => array(
'Cham', 
'AA00', 
'AA5F'),
 
  163                 'myanmar_extended_a' => array(
'Myanmar Extended-A', 
'AA60', 
'AA7F'),
 
  164                 'tai_viet' => array(
'Tai Viet', 
'AA80', 
'AADF'),
 
  165                 'meetei_mayek_extensions' => array(
'Meetei Mayek Extensions', 
'AAE0', 
'AAFF'),
 
  166                 'ethiopic_extended_a' => array(
'Ethiopic Extended-A', 
'AB00', 
'AB2F'),
 
  167                 'meetei_mayek' => array(
'Meetei Mayek', 
'ABC0', 
'ABFF'),
 
  168                 'hangul_syllables' => array(
'Hangul Syllables', 
'AC00', 
'D7AF'),
 
  169                 'hangul_jamo_extended_b' => array(
'Hangul Jamo Extended-B', 
'D7B0', 
'D7FF'),
 
  170                 'high_surrogates' => array(
'High Surrogates', 
'D800', 
'DB7F'),
 
  171                 'high_private_use_surrogates' => array(
'High Private Use Surrogates', 
'DB80', 
'DBFF'),
 
  172                 'low_surrogates' => array(
'Low Surrogates', 
'DC00', 
'DFFF'),
 
  173                 'private_use_area' => array(
'Private Use Area', 
'E000', 
'F8FF'),
 
  174                 'cjk_compatibility_ideographs' => array(
'CJK Compatibility Ideographs', 
'F900', 
'FAFF'),
 
  175                 'alphabetic_presentation_forms' => array(
'Alphabetic Presentation Forms', 
'FB00', 
'FB4F'),
 
  176                 'arabic_presentation_forms_a' => array(
'Arabic Presentation Forms-A', 
'FB50', 
'FDFF'),
 
  177                 'variation_selectors' => array(
'Variation Selectors', 
'FE00', 
'FE0F'),
 
  178                 'vertical_forms' => array(
'Vertical Forms', 
'FE10', 
'FE1F'),
 
  179                 'combining_half_marks' => array(
'Combining Half Marks', 
'FE20', 
'FE2F'),
 
  180                 'cjk_compatibility_forms' => array(
'CJK Compatibility Forms', 
'FE30', 
'FE4F'),
 
  181                 'small_form_variants' => array(
'Small Form Variants', 
'FE50', 
'FE6F'),
 
  182                 'arabic_presentation_forms_b' => array(
'Arabic Presentation Forms-B', 
'FE70', 
'FEFF'),
 
  183                 'halfwidth_and_fullwidth_forms' => array(
'Halfwidth and Fullwidth Forms', 
'FF00', 
'FFEF'),
 
  184                 'specials' => array(
'Specials', 
'FFF0', 
'FFFF'),
 
  288                         case self::CONTEXT_ADMIN:
 
  289                         case self::CONTEXT_TEST:
 
  290                         case self::CONTEXT_USER:
 
  291                                 $this->context = $a_context;
 
  309                 $admin_config->setAvailability($ilSetting->get(
'char_selector_availability'));
 
  310                 $admin_config->setDefinition($ilSetting->get(
'char_selector_definition'));
 
  314                         return $admin_config;
 
  318                 if (isset($a_test_obj))
 
  321                         $test_config->setAvailability($a_test_obj->getCharSelectorAvailability());
 
  322                         $test_config->setDefinition($a_test_obj->getCharSelectorDefinition());
 
  332                 $user_config->setAvailability($ilUser->getPref(
'char_selector_availability'));
 
  333                 $user_config->setDefinition($ilUser->getPref(
'char_selector_definition'));
 
  342                         return $admin_config;
 
  364                 switch((
int) $a_availability)
 
  370                                 $this->availability = (int) $a_availability;
 
  393                 $this->added_blocks = array();
 
  394                 foreach ($a_blocks as $block_name)
 
  396                         if ($block_name == 
"all" or
 
  397                                 in_array($block_name, array_keys(self::$unicode_blocks)))
 
  399                                 array_push($this->added_blocks, $block_name);
 
  420                 $this->custom_items = explode(
' ', $a_items);
 
  430                 return implode(
' ', $this->custom_items);
 
  452                 $this->added_blocks = array();
 
  453                 $this->custom_items = array();
 
  456                 if (trim($a_definition) == 
'')
 
  458             $a_definition = 
"[all]";
 
  462                 $items = explode(
' ', $a_definition);
 
  463                 foreach ($items as $item)
 
  467                                 array_push($this->added_blocks, $block_name);
 
  469                         else if ($item != 
'')
 
  471                                 array_push($this->custom_items, trim($item));
 
  483                 $definition = implode(
' ', $this->custom_items);
 
  484                 foreach($this->added_blocks as $block_name)
 
  486                         $definition = $definition . 
' [' . $block_name . 
']';
 
  488                 return trim($definition);
 
  501                         '' => $lng->txt(
'please_select'),
 
  502                         'all' => $lng->txt(
'char_selector_unicode_all')
 
  504                 foreach (array_keys(self::$unicode_blocks) as $block_name)
 
  523                 $langvar = 
'char_selector_unicode_'. $a_block_name;
 
  524                 if ($lng->txt($langvar) != 
'-'.$langvar.
'-' )
 
  526                         return $lng->txt($langvar);
 
  530                         return self::$unicode_blocks[$a_block_name][0];
 
  542                 $a_item = trim($a_item);
 
  544                 if (preg_match(
'/^\[(.+)\]$/', $a_item, $matches))
 
  546                         $block_name = $matches[1];
 
  547                         if ($block_name == 
'all'  
  548                                 or in_array($block_name, array_keys(self::$unicode_blocks)))
 
  570                 $page = array($lng->txt(
'char_selector_custom_items'));
 
  571                 foreach ($this->custom_items as $item)
 
  573                         if (strpos($item, 
'-') > 0)
 
  576                                 $subitems = explode(
'-', $item);
 
  579                                 array_push($page, array($start, $end));
 
  587                 if (count($page) > 1)
 
  589                         array_push($pages, $page);
 
  594                 $blocks = in_array(
'all', $this->added_blocks) ?
 
  595                         array_keys(self::$unicode_blocks) :
 
  598                 foreach ($blocks as $block_name)
 
  600                         $start = hexdec(self::$unicode_blocks[$block_name][1]);
 
  601                         $end = hexdec(self::$unicode_blocks[$block_name][2]);
 
  602                         $page = array($this->
getBlockTitle($block_name), array($start, $end));
 
  603                         array_push($pages, $page);
 
  616                 if (preg_match(
'/^[uU]\+[0-9a-fA-F]+$/', $a_item))
 
  618                         return (
int) hexdec(substr($a_item, 2));
 
  623                         require_once 
"include/Unicode/UtfNormalUtil.php";
 
  635                 return preg_replace_callback(
 
  636                         '/[uU]\+[0-9a-fA-F]+/',
 
  637                         array($this,
'getItemParsedCallback'),
 
  649                 require_once 
"include/Unicode/UtfNormalUtil.php";