|
| 1 | +<?php |
| 2 | + |
| 3 | +declare(strict_types=1); |
| 4 | + |
| 5 | +namespace Tempest\Highlight\Languages\Apache\Patterns; |
| 6 | + |
| 7 | +use Tempest\Highlight\IsPattern; |
| 8 | +use Tempest\Highlight\Pattern; |
| 9 | +use Tempest\Highlight\PatternTest; |
| 10 | +use Tempest\Highlight\Tokens\TokenTypeEnum; |
| 11 | + |
| 12 | +#[PatternTest(input: 'ServerName example.com', output: 'ServerName')] |
| 13 | +#[PatternTest(input: 'DocumentRoot /var/www/html', output: 'DocumentRoot')] |
| 14 | +#[PatternTest(input: ' RewriteRule ^(.*)$ index.php [L]', output: 'RewriteRule')] |
| 15 | +#[PatternTest(input: 'Listen 80', output: 'Listen')] |
| 16 | +#[PatternTest(input: 'SSLEngine on', output: 'SSLEngine')] |
| 17 | +final readonly class ApacheDirectivePattern implements Pattern |
| 18 | +{ |
| 19 | + use IsPattern; |
| 20 | + |
| 21 | + private const DIRECTIVES = [ |
| 22 | + 'ServerRoot', 'Listen', 'LoadModule', |
| 23 | + 'ServerAdmin', 'ServerName', 'ServerAlias', |
| 24 | + 'DocumentRoot', 'ErrorLog', 'CustomLog', 'LogLevel', 'LogFormat', |
| 25 | + 'DirectoryIndex', 'Options', 'AllowOverride', |
| 26 | + 'Require', 'Order', 'Allow', 'Deny', |
| 27 | + 'Include', 'IncludeOptional', |
| 28 | + 'RewriteEngine', 'RewriteCond', 'RewriteRule', 'RewriteBase', |
| 29 | + 'SSLEngine', 'SSLCertificateFile', 'SSLCertificateKeyFile', 'SSLCertificateChainFile', |
| 30 | + 'ProxyPass', 'ProxyPassReverse', 'ProxyPreserveHost', |
| 31 | + 'Header', 'RequestHeader', |
| 32 | + 'SetEnv', 'SetEnvIf', 'PassEnv', |
| 33 | + 'Redirect', 'RedirectMatch', 'RedirectPermanent', |
| 34 | + 'Alias', 'ScriptAlias', |
| 35 | + 'AddType', 'AddHandler', 'AddOutputFilterByType', |
| 36 | + 'ErrorDocument', |
| 37 | + 'Timeout', 'KeepAlive', 'MaxKeepAliveRequests', 'KeepAliveTimeout', |
| 38 | + 'AccessFileName', 'DefaultType', 'HostnameLookups', |
| 39 | + 'UseCanonicalName', 'ServerSignature', 'ServerTokens', |
| 40 | + 'TypesConfig', 'MIMEMagicFile', |
| 41 | + 'ExpiresActive', 'ExpiresByType', 'ExpiresDefault', |
| 42 | + ]; |
| 43 | + |
| 44 | + public function getPattern(): string |
| 45 | + { |
| 46 | + $directives = implode('|', self::DIRECTIVES); |
| 47 | + |
| 48 | + return "/^\s*(?<match>{$directives})\b/m"; |
| 49 | + } |
| 50 | + |
| 51 | + public function getTokenType(): TokenTypeEnum |
| 52 | + { |
| 53 | + return TokenTypeEnum::KEYWORD; |
| 54 | + } |
| 55 | +} |
0 commit comments