|
| 1 | +<?php |
| 2 | +const GT_COMPAT_LEGACY_PREFIX = "Gt\\"; |
| 3 | +const GT_COMPAT_MODERN_PREFIX = "GT\\"; |
| 4 | +const GT_COMPAT_LOCAL_PREFIX = "GT\\WebEngine\\"; |
| 5 | + |
| 6 | +spl_autoload_register(static function(string $className):void { |
| 7 | + if(!str_starts_with($className, GT_COMPAT_MODERN_PREFIX) |
| 8 | + || str_starts_with($className, GT_COMPAT_LOCAL_PREFIX)) { |
| 9 | + return; |
| 10 | + } |
| 11 | + |
| 12 | + $legacyClassName = GT_COMPAT_LEGACY_PREFIX . substr( |
| 13 | + $className, |
| 14 | + strlen(GT_COMPAT_MODERN_PREFIX) |
| 15 | + ); |
| 16 | + |
| 17 | + $classMapPath = __DIR__ . "/vendor/composer/autoload_classmap.php"; |
| 18 | + if(is_file($classMapPath)) { |
| 19 | + /** @var array<string,string> $classMap */ |
| 20 | + $classMap = require $classMapPath; |
| 21 | + if(isset($classMap[$legacyClassName])) { |
| 22 | + require_once $classMap[$legacyClassName]; |
| 23 | + return; |
| 24 | + } |
| 25 | + } |
| 26 | + |
| 27 | + $psr4Path = __DIR__ . "/vendor/composer/autoload_psr4.php"; |
| 28 | + if(!is_file($psr4Path)) { |
| 29 | + return; |
| 30 | + } |
| 31 | + |
| 32 | + /** @var array<string,list<string>> $psr4 */ |
| 33 | + $psr4 = require $psr4Path; |
| 34 | + $prefix = $legacyClassName; |
| 35 | + |
| 36 | + while(($separatorPos = strrpos($prefix, "\\")) !== false) { |
| 37 | + $prefix = substr($legacyClassName, 0, $separatorPos + 1); |
| 38 | + $relativeClass = substr($legacyClassName, $separatorPos + 1); |
| 39 | + |
| 40 | + if(!isset($psr4[$prefix])) { |
| 41 | + $prefix = rtrim($prefix, "\\"); |
| 42 | + continue; |
| 43 | + } |
| 44 | + |
| 45 | + $relativePath = str_replace("\\", "/", $relativeClass) . ".php"; |
| 46 | + foreach($psr4[$prefix] as $baseDirectory) { |
| 47 | + $pathName = $baseDirectory . "/" . $relativePath; |
| 48 | + if(is_file($pathName)) { |
| 49 | + require_once $pathName; |
| 50 | + return; |
| 51 | + } |
| 52 | + } |
| 53 | + |
| 54 | + $prefix = rtrim($prefix, "\\"); |
| 55 | + } |
| 56 | +}); |
0 commit comments