ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilCharSelectorConfig.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
5 {
10  const INACTIVE = 0; // default for admin: deactivates the whole tool
11  const INHERIT = 0; // default for user and test: take the plattform default
12  const ENABLED = 1; // enable the selector
13  const DISABLED = 2; // disable the selector
14 
18  const CONTEXT_NONE = ''; // no context => no initialisation
19  const CONTEXT_ADMIN = 'admin'; // administrative settings
20  const CONTEXT_USER = 'user'; // user specific settings
21  const CONTEXT_TEST = 'test'; // test specific settings
22 
28  (
29  'basic_latin' => array('Basic Latin', '0020', '007F'), // only printing characters
30  'latin_1_supplement' => array('Latin-1 Supplement', '00A0', '00FF'), // only printing characters
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'),
185  /* here ends the Basic Multilinguage Plane (BMP) */
186 
187  /*
188  * The following blocks are not yet supported well.
189  * It seems that the chars are taken from the BMP instead
190  *
191  'linear_b_syllabary' => array('Linear B Syllabary', '10000', '1007F'),
192  'linear_b_ideograms' => array('Linear B Ideograms', '10080', '100FF'),
193  'aegean_numbers' => array('Aegean Numbers', '10100', '1013F'),
194  'ancient_greek_numbers' => array('Ancient Greek Numbers', '10140', '1018F'),
195  'ancient_symbols' => array('Ancient Symbols', '10190', '101CF'),
196  'phaistos_disc' => array('Phaistos Disc', '101D0', '101FF'),
197  'lycian' => array('Lycian', '10280', '1029F'),
198  'carian' => array('Carian', '102A0', '102DF'),
199  'old_italic' => array('Old Italic', '10300', '1032F'),
200  'gothic' => array('Gothic', '10330', '1034F'),
201  'ugaritic' => array('Ugaritic', '10380', '1039F'),
202  'old_persian' => array('Old Persian', '103A0', '103DF'),
203  'deseret' => array('Deseret', '10400', '1044F'),
204  'shavian' => array('Shavian', '10450', '1047F'),
205  'osmanya' => array('Osmanya', '10480', '104AF'),
206  'cypriot_syllabary' => array('Cypriot Syllabary', '10800', '1083F'),
207  'imperial_aramaic' => array('Imperial Aramaic', '10840', '1085F'),
208  'phoenician' => array('Phoenician', '10900', '1091F'),
209  'lydian' => array('Lydian', '10920', '1093F'),
210  'meroitic_hieroglyphs' => array('Meroitic Hieroglyphs', '10980', '1099F'),
211  'meroitic_cursive' => array('Meroitic Cursive', '109A0', '109FF'),
212  'kharoshthi' => array('Kharoshthi', '10A00', '10A5F'),
213  'old_south_arabian' => array('Old South Arabian', '10A60', '10A7F'),
214  'avestan' => array('Avestan', '10B00', '10B3F'),
215  'inscriptional_parthian' => array('Inscriptional Parthian', '10B40', '10B5F'),
216  'inscriptional_pahlavi' => array('Inscriptional Pahlavi', '10B60', '10B7F'),
217  'old_turkic' => array('Old Turkic', '10C00', '10C4F'),
218  'rumi_numeral_symbols' => array('Rumi Numeral Symbols', '10E60', '10E7F'),
219  'brahmi' => array('Brahmi', '11000', '1107F'),
220  'kaithi' => array('Kaithi', '11080', '110CF'),
221  'sora_sompeng' => array('Sora Sompeng', '110D0', '110FF'),
222  'chakma' => array('Chakma', '11100', '1114F'),
223  'sharada' => array('Sharada', '11180', '111DF'),
224  'takri' => array('Takri', '11680', '116CF'),
225  'cuneiform' => array('Cuneiform', '12000', '123FF'),
226  'cuneiform_numbers_and_punctuation' => array('Cuneiform Numbers and Punctuation', '12400', '1247F'),
227  'egyptian_hieroglyphs' => array('Egyptian Hieroglyphs', '13000', '1342F'),
228  'bamum_supplement' => array('Bamum Supplement', '16800', '16A3F'),
229  'miao' => array('Miao', '16F00', '16F9F'),
230  'kana_supplement' => array('Kana Supplement', '1B000', '1B0FF'),
231  'byzantine_musical_symbols' => array('Byzantine Musical Symbols', '1D000', '1D0FF'),
232  'musical_symbols' => array('Musical Symbols', '1D100', '1D1FF'),
233  'ancient_greek_musical_notation' => array('Ancient Greek Musical Notation', '1D200', '1D24F'),
234  'tai_xuan_jing_symbols' => array('Tai Xuan Jing Symbols', '1D300', '1D35F'),
235  'counting_rod_numerals' => array('Counting Rod Numerals', '1D360', '1D37F'),
236  'mathematical_alphanumeric_symbols' => array('Mathematical Alphanumeric Symbols', '1D400', '1D7FF'),
237  'arabic_mathematical_alphabetic_symbols' => array('Arabic Mathematical Alphabetic Symbols', '1EE00', '1EEFF'),
238  'mahjong_tiles' => array('Mahjong Tiles', '1F000', '1F02F'),
239  'domino_tiles' => array('Domino Tiles', '1F030', '1F09F'),
240  'playing_cards' => array('Playing Cards', '1F0A0', '1F0FF'),
241  'enclosed_alphanumeric_supplement' => array('Enclosed Alphanumeric Supplement', '1F100', '1F1FF'),
242  'enclosed_ideographic_supplement' => array('Enclosed Ideographic Supplement', '1F200', '1F2FF'),
243  'miscellaneous_symbols_and_pictographs' => array('Miscellaneous Symbols And Pictographs', '1F300', '1F5FF'),
244  'emoticons' => array('Emoticons', '1F600', '1F64F'),
245  'transport_and_map_symbols' => array('Transport And Map Symbols', '1F680', '1F6FF'),
246  'alchemical_symbols' => array('Alchemical Symbols', '1F700', '1F77F'),
247  'cjk_unified_ideographs_extension_b' => array('CJK Unified Ideographs Extension B', '20000', '2A6DF'),
248  'cjk_unified_ideographs_extension_c' => array('CJK Unified Ideographs Extension C', '2A700', '2B73F'),
249  'cjk_unified_ideographs_extension_d' => array('CJK Unified Ideographs Extension D', '2B740', '2B81F'),
250  'cjk_compatibility_ideographs_supplement' => array('CJK Compatibility Ideographs Supplement', '2F800', '2FA1F'),
251  'tags' => array('Tags', 'E0000', 'E007F'),
252  'variation_selectors_supplement' => array('Variation Selectors Supplement', 'E0100', 'E01EF'),
253  'supplementary_private_use_area_a' => array('Supplementary Private Use Area-A', 'F0000', 'FFFFF'),
254  'supplementary_private_use_area_b' => array('Supplementary Private Use Area-B', '100000', '10FFFF')
255  */
256  );
257 
261  private $context = self::CONTEXT_NONE;
262 
266  private $availability = self::INHERIT;
267 
271  private $added_blocks = array();
272 
276  private $custom_items = array();
277 
278 
284  public function __construct($a_context = self::CONTEXT_NONE)
285  {
286  switch($a_context)
287  {
288  case self::CONTEXT_ADMIN:
289  case self::CONTEXT_TEST:
290  case self::CONTEXT_USER:
291  $this->context = $a_context;
292  break;
293  default:
294  $this->context = self::CONTEXT_NONE;
295  }
296  }
297 
303  static function _getCurrentConfig(ilObjTest $a_test_obj = null)
304  {
305  global $ilSetting, $ilUser;
306 
307  // check configuration from administration settings
308  $admin_config = new self(self::CONTEXT_ADMIN, true);
309  $admin_config->setAvailability($ilSetting->get('char_selector_availability'));
310  $admin_config->setDefinition($ilSetting->get('char_selector_definition'));
311  if ($admin_config->getAvailability() == self::INACTIVE)
312  {
313  // a globally inactive selector can't be overwritten by users or tests
314  return $admin_config;
315  }
316 
317  // a test configuration is relevant for test runs
318  if (isset($a_test_obj))
319  {
320  $test_config = new self(self::CONTEXT_TEST, false);
321  $test_config->setAvailability($a_test_obj->getCharSelectorAvailability());
322  $test_config->setDefinition($a_test_obj->getCharSelectorDefinition());
323  if ($test_config->getAvailability() != self::INHERIT)
324  {
325  // a specific test configuration has precedence over user configuration
326  return $test_config;
327  }
328  }
329 
330  // check configuration from user settings
331  $user_config = new self(self::CONTEXT_USER, true);
332  $user_config->setAvailability($ilUser->getPref('char_selector_availability'));
333  $user_config->setDefinition($ilUser->getPref('char_selector_definition'));
334  if ($user_config->getAvailability() != self::INHERIT)
335  {
336  // take user specific config
337  return $user_config;
338  }
339  else
340  {
341  // take admin config as default
342  return $admin_config;
343  }
344  }
345 
346 
352  public function getContext()
353  {
354  return $this->context;
355  }
356 
357 
362  public function setAvailability($a_availability)
363  {
364  switch((int) $a_availability)
365  {
366  case self::INACTIVE:
367  case self::INHERIT:
368  case self::ENABLED:
369  case self::DISABLED:
370  $this->availability = (int) $a_availability;
371  break;
372  default:
373  $this->availability = self::INHERIT;
374  }
375  }
376 
377 
382  public function getAvailability()
383  {
384  return $this->availability;
385  }
386 
391  public function setAddedBlocks($a_blocks = array())
392  {
393  $this->added_blocks = array();
394  foreach ($a_blocks as $block_name)
395  {
396  if ($block_name == "all" or
397  in_array($block_name, array_keys(self::$unicode_blocks)))
398  {
399  array_push($this->added_blocks, $block_name);
400  }
401  }
402  }
403 
408  public function getAddedBlocks()
409  {
410  return $this->added_blocks;
411  }
412 
418  public function setCustomItems($a_items = '')
419  {
420  $this->custom_items = explode(' ', $a_items);
421  }
422 
428  public function getCustomItems()
429  {
430  return implode(' ', $this->custom_items);
431  }
432 
449  public function setDefinition($a_definition = '')
450  {
451  // first reset all previous settings
452  $this->added_blocks = array();
453  $this->custom_items = array();
454 
455  // set the default definition to all unicode blocks
456  if (trim($a_definition) == '')
457  {
458  $a_definition = "[all]";
459  }
460 
461  // analyze definition items
462  $items = explode(' ', $a_definition);
463  foreach ($items as $item)
464  {
465  if (strlen($block_name = $this->extractUnicodeBlock($item)))
466  {
467  array_push($this->added_blocks, $block_name);
468  }
469  else if ($item != '')
470  {
471  array_push($this->custom_items, trim($item));
472  }
473  }
474  }
475 
481  public function getDefinition()
482  {
483  $definition = implode(' ', $this->custom_items);
484  foreach($this->added_blocks as $block_name)
485  {
486  $definition = $definition . ' [' . $block_name . ']';
487  }
488  return trim($definition);
489  }
490 
491 
496  public function getBlockOptions()
497  {
498  global $lng;
499 
500  $options = array(
501  '' => $lng->txt('please_select'),
502  'all' => $lng->txt('char_selector_unicode_all')
503  );
504  foreach (array_keys(self::$unicode_blocks) as $block_name)
505  {
506  $options[$block_name] = $this->getBlockTitle($block_name);
507  }
508  return $options;
509  }
510 
511 
519  public function getBlockTitle($a_block_name)
520  {
521  global $lng;
522 
523  $langvar = 'char_selector_unicode_'. $a_block_name;
524  if ($lng->txt($langvar) != '-'.$langvar.'-' )
525  {
526  return $lng->txt($langvar);
527  }
528  else
529  {
530  return self::$unicode_blocks[$a_block_name][0];
531  }
532  }
533 
540  private function extractUnicodeBlock($a_item = '')
541  {
542  $a_item = trim($a_item);
543  $matches = array();
544  if (preg_match('/^\[(.+)\]$/', $a_item, $matches))
545  {
546  $block_name = $matches[1];
547  if ($block_name == 'all'
548  or in_array($block_name, array_keys(self::$unicode_blocks)))
549  {
550  return $block_name;
551  }
552  }
553  return '';
554  }
555 
556 
562  public function getCharPages()
563  {
564  global $lng;
565 
566  $pages = array();
567 
568  // add custom block
569  //
570  $page = array($lng->txt('char_selector_custom_items'));
571  foreach ($this->custom_items as $item)
572  {
573  if (strpos($item, '-') > 0)
574  {
575  // handle range
576  $subitems = explode('-', $item);
577  $start = $this->getItemCodepoint($subitems[0]);
578  $end = $this->getItemCodepoint($subitems[1]);
579  array_push($page, array($start, $end));
580  }
581  else
582  {
583  // handle normal item
584  array_push($page, $this->getItemParsed($item));
585  }
586  }
587  if (count($page) > 1)
588  {
589  array_push($pages, $page);
590  }
591 
592  // add unicode blocks
593  //
594  $blocks = in_array('all', $this->added_blocks) ?
595  array_keys(self::$unicode_blocks) :
597 
598  foreach ($blocks as $block_name)
599  {
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);
604  }
605 
606  return $pages;
607  }
608 
609 
614  private function getItemCodepoint($a_item)
615  {
616  if (preg_match('/^[uU]\+[0-9a-fA-F]+$/', $a_item))
617  {
618  return (int) hexdec(substr($a_item, 2));
619  }
620  else
621  {
622  //take the codepoint of the first character
623  require_once "include/Unicode/UtfNormalUtil.php";
624  return (int) utf8ToCodepoint($a_item);
625  }
626  }
627 
633  private function getItemParsed($a_item)
634  {
635  return preg_replace_callback(
636  '/[uU]\+[0-9a-fA-F]+/',
637  array($this,'getItemParsedCallback'),
638  $a_item
639  );
640  }
641 
647  private function getItemParsedCallback($matches)
648  {
649  require_once "include/Unicode/UtfNormalUtil.php";
650  return codepointToUtf8(hexdec(substr($matches[0], 2)));
651  }
652 
653 }
654 ?>
getAddedBlocks()
set the added unicode blocks
getItemParsedCallback($matches)
callback for replacement of unicode notations
codepointToUtf8( $codepoint)
Return UTF-8 sequence for a given Unicode code point.
getBlockOptions()
get the options for a block selection
const CONTEXT_NONE
Configuration contexts.
static _getCurrentConfig(ilObjTest $a_test_obj=null)
Get the configuration that should be used for the current selector.
utf8ToCodepoint( $char)
Determine the Unicode codepoint of a single-character UTF-8 sequence.
getItemCodepoint($a_item)
get the unicode index of an item
getAvailability()
get the availability of the selector
setDefinition($a_definition='')
const INACTIVE
Availabilities INACTIVE/INHERIT corresponds to an unconfigured selector (no database entries) ...
setCustomItems($a_items='')
set the custom items
if(!is_array($argv)) $options
extractUnicodeBlock($a_item='')
Extract the unicode block name from a definition item.
$ilUser
Definition: imgupload.php:18
Create styles array
The data for the language used.
__construct($a_context=self::CONTEXT_NONE)
Constructor.
getDefinition()
Set the definition of the available characters.
global $ilSetting
Definition: privfeed.php:17
global $lng
Definition: privfeed.php:17
setAvailability($a_availability)
set the availability of the selector
getItemParsed($a_item)
replace unicode notations with their utf8 chars in a string
getBlockTitle($a_block_name)
Get the title of a unicode block for display or selection A translation is used if it exists...
getCharPages()
Get the character pages.
getCustomItems()
set the custom items
getContext()
get the context of the configuration (the context is set at initialisation and can&#39;t be changed) ...
setAddedBlocks($a_blocks=array())
set the added unicode blocks