Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Intl.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 8.19 KiB


 001  <?php
 002   
 003  /*
 004   * Copyright (C) 2016 Nicolas Grekas - p@tchwork.com
 005   *
 006   * This library is free software; you can redistribute it and/or modify it
 007   * under the terms of the (at your option):
 008   * Apache License v2.0 (http://apache.org/licenses/LICENSE-2.0.txt), or
 009   * GNU General Public License v2.0 (http://gnu.org/licenses/gpl-2.0.txt).
 010   */
 011   
 012  namespace Patchwork\PHP\Shim;
 013   
 014  /**
 015   * Partial intl implementation in pure PHP.
 016   *
 017   * Implemented:
 018   * - grapheme_extract  - Extract a sequence of grapheme clusters from a text buffer, which must be encoded in UTF-8
 019   * - grapheme_stripos  - Find position (in grapheme units) of first occurrence of a case-insensitive string
 020   * - grapheme_stristr  - Returns part of haystack string from the first occurrence of case-insensitive needle to the end of haystack
 021   * - grapheme_strlen   - Get string length in grapheme units
 022   * - grapheme_strpos   - Find position (in grapheme units) of first occurrence of a string
 023   * - grapheme_strripos - Find position (in grapheme units) of last occurrence of a case-insensitive string
 024   * - grapheme_strrpos  - Find position (in grapheme units) of last occurrence of a string
 025   * - grapheme_strstr   - Returns part of haystack string from the first occurrence of needle to the end of haystack
 026   * - grapheme_substr   - Return part of a string
 027   *
 028   * @internal
 029   */
 030  class Intl
 031  {
 032      // (CRLF|([ZWNJ-ZWJ]|T+|L*(LV?V+|LV|LVT)T*|L+|[^Control])[Extend]*|[Control])
 033      // This regular expression is a work around for http://bugs.exim.org/1279
 034      const GRAPHEME_CLUSTER_RX = '(?:\r\n|(?:[ -~\x{200C}\x{200D}]|[ᆨ-ᇹ]+|[ᄀ-ᅟ]*(?:[가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기까깨꺄꺠꺼께껴꼐꼬꽈꽤꾀꾜꾸꿔꿰뀌뀨끄끠끼나내냐냬너네녀녜노놔놰뇌뇨누눠눼뉘뉴느늬니다대댜댸더데뎌뎨도돠돼되됴두둬뒈뒤듀드듸디따때땨떄떠떼뗘뗴또똬뙈뙤뚀뚜뚸뛔뛰뜌뜨띄띠라래랴럐러레려례로롸뢔뢰료루뤄뤠뤼류르릐리마매먀먜머메며몌모뫄뫠뫼묘무뭐뭬뮈뮤므믜미바배뱌뱨버베벼볘보봐봬뵈뵤부붜붸뷔뷰브븨비빠빼뺘뺴뻐뻬뼈뼤뽀뽜뽸뾔뾰뿌뿨쀄쀠쀼쁘쁴삐사새샤섀서세셔셰소솨쇄쇠쇼수숴쉐쉬슈스싀시싸쌔쌰썌써쎄쎠쎼쏘쏴쐐쐬쑈쑤쒀쒜쒸쓔쓰씌씨아애야얘어에여예오와왜외요우워웨위유으의이자재쟈쟤저제져졔조좌좨죄죠주줘줴쥐쥬즈즤지짜째쨔쨰쩌쩨쪄쪠쪼쫘쫴쬐쬬쭈쭤쮀쮜쮸쯔쯰찌차채챠챼처체쳐쳬초촤쵀최쵸추춰췌취츄츠츼치카캐캬컈커케켜켸코콰쾌쾨쿄쿠쿼퀘퀴큐크킈키타태탸턔터테텨톄토톼퇘퇴툐투퉈퉤튀튜트틔티파패퍄퍠퍼페펴폐포퐈퐤푀표푸풔풰퓌퓨프픠피하해햐햬허헤혀혜호화홰회효후훠훼휘휴흐희히]?[ᅠ-ᆢ]+|[가-힣])[ᆨ-ᇹ]*|[ᄀ-ᅟ]+|[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}])[\p{Mn}\p{Me}\x{09BE}\x{09D7}\x{0B3E}\x{0B57}\x{0BBE}\x{0BD7}\x{0CC2}\x{0CD5}\x{0CD6}\x{0D3E}\x{0D57}\x{0DCF}\x{0DDF}\x{200C}\x{200D}\x{1D165}\x{1D16E}-\x{1D172}]*|[\p{Cc}\p{Cf}\p{Zl}\p{Zp}])';
 035   
 036      public static function grapheme_extract($s, $size, $type = GRAPHEME_EXTR_COUNT, $start = 0, &$next = 0)
 037      {
 038          if (!is_scalar($s)) {
 039              $hasError = false;
 040              set_error_handler(function () use (&$hasError) {$hasError = true;});
 041              $next = substr($s, $start);
 042              restore_error_handler();
 043              if ($hasError) {
 044                  substr($s, $start);
 045                  $s = '';
 046              } else {
 047                  $s = $next;
 048              }
 049          } else {
 050              $s = substr($s, $start);
 051          }
 052          $size = (int) $size;
 053          $type = (int) $type;
 054          $start = (int) $start;
 055   
 056          if (!isset($s[0]) || 0 > $size || 0 > $start || 0 > $type || 2 < $type) {
 057              return false;
 058          }
 059          if (0 === $size) {
 060              return '';
 061          }
 062   
 063          $next = $start;
 064   
 065          $s = preg_split('/('.GRAPHEME_CLUSTER_RX.')/u', "\r\n".$s, $size + 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
 066   
 067          if (!isset($s[1])) {
 068              return false;
 069          }
 070   
 071          $i = 1;
 072          $ret = '';
 073   
 074          do {
 075              if (GRAPHEME_EXTR_COUNT === $type) {
 076                  --$size;
 077              } elseif (GRAPHEME_EXTR_MAXBYTES === $type) {
 078                  $size -= strlen($s[$i]);
 079              } else {
 080                  $size -= iconv_strlen($s[$i], 'UTF-8//IGNORE');
 081              }
 082   
 083              if ($size >= 0) {
 084                  $ret .= $s[$i];
 085              }
 086          } while (isset($s[++$i]) && $size > 0);
 087   
 088          $next += strlen($ret);
 089   
 090          return $ret;
 091      }
 092   
 093      public static function grapheme_strlen($s)
 094      {
 095          preg_replace('/'.GRAPHEME_CLUSTER_RX.'/u', '', $s, -1, $len);
 096   
 097          return 0 === $len && '' !== $s ? null : $len;
 098      }
 099   
 100      public static function grapheme_substr($s, $start, $len = 2147483647)
 101      {
 102          preg_match_all('/'.GRAPHEME_CLUSTER_RX.'/u', $s, $s);
 103   
 104          $slen = count($s[0]);
 105          $start = (int) $start;
 106   
 107          if (0 > $start) {
 108              $start += $slen;
 109          }
 110          if (0 > $start) {
 111              return false;
 112          }
 113          if ($start >= $slen) {
 114              return false;
 115          }
 116   
 117          $rem = $slen - $start;
 118   
 119          if (0 > $len) {
 120              $len += $rem;
 121          }
 122          if (0 === $len) {
 123              return '';
 124          }
 125          if (0 > $len) {
 126              return false;
 127          }
 128          if ($len > $rem) {
 129              $len = $rem;
 130          }
 131   
 132          return implode('', array_slice($s[0], $start, $len));
 133      }
 134   
 135      public static function grapheme_substr_workaround62759($s, $start, $len)
 136      {
 137          // Intl based http://bugs.php.net/62759 and 55562 workaround
 138   
 139          if (2147483647 == $len) {
 140              return grapheme_substr($s, $start);
 141          }
 142   
 143          $s .= '';
 144          $slen = grapheme_strlen($s);
 145          $start = (int) $start;
 146   
 147          if (0 > $start) {
 148              $start += $slen;
 149          }
 150          if (0 > $start) {
 151              return false;
 152          }
 153          if ($start >= $slen) {
 154              return false;
 155          }
 156   
 157          $rem = $slen - $start;
 158   
 159          if (0 > $len) {
 160              $len += $rem;
 161          }
 162          if (0 === $len) {
 163              return '';
 164          }
 165          if (0 > $len) {
 166              return false;
 167          }
 168          if ($len > $rem) {
 169              $len = $rem;
 170          }
 171   
 172          return grapheme_substr($s, $start, $len);
 173      }
 174   
 175      public static function grapheme_strpos($s, $needle, $offset = 0)
 176      {
 177          return self::grapheme_position($s, $needle, $offset, 0);
 178      }
 179   
 180      public static function grapheme_stripos($s, $needle, $offset = 0)
 181      {
 182          return self::grapheme_position($s, $needle, $offset, 1);
 183      }
 184   
 185      public static function grapheme_strrpos($s, $needle, $offset = 0)
 186      {
 187          return self::grapheme_position($s, $needle, $offset, 2);
 188      }
 189   
 190      public static function grapheme_strripos($s, $needle, $offset = 0)
 191      {
 192          return self::grapheme_position($s, $needle, $offset, 3);
 193      }
 194   
 195      public static function grapheme_stristr($s, $needle, $beforeNeedle = false)
 196      {
 197          return mb_stristr($s, $needle, $beforeNeedle, 'UTF-8');
 198      }
 199   
 200      public static function grapheme_strstr($s, $needle, $beforeNeedle = false)
 201      {
 202          return mb_strstr($s, $needle, $beforeNeedle, 'UTF-8');
 203      }
 204   
 205      private static function grapheme_position($s, $needle, $offset, $mode)
 206      {
 207          if (!preg_match('/./us', $needle .= '')) {
 208              return false;
 209          }
 210          if (!preg_match('/./us', $s .= '')) {
 211              return false;
 212          }
 213          if ($offset > 0) {
 214              $s = self::grapheme_substr($s, $offset);
 215          } elseif ($offset < 0) {
 216              if (defined('HHVM_VERSION_ID') || PHP_VERSION_ID < 50535 || (50600 <= PHP_VERSION_ID && PHP_VERSION_ID < 50621) || (70000 <= PHP_VERSION_ID && PHP_VERSION_ID < 70006)) {
 217                  $offset = 0;
 218              } else {
 219                  return false;
 220              }
 221          }
 222   
 223          switch ($mode) {
 224              case 0: $needle = iconv_strpos($s, $needle, 0, 'UTF-8'); break;
 225              case 1: $needle = mb_stripos($s, $needle, 0, 'UTF-8'); break;
 226              case 2: $needle = iconv_strrpos($s, $needle, 'UTF-8'); break;
 227              default: $needle = mb_strripos($s, $needle, 0, 'UTF-8'); break;
 228          }
 229   
 230          return $needle ? self::grapheme_strlen(iconv_substr($s, 0, $needle, 'UTF-8')) + $offset : $needle;
 231      }
 232  }
 233