Passed
Push — master ( eead79...194803 )
by Domenico
02:03
created
src/Filters/Html/HtmlParser.php 1 patch
Spacing   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
      *
72 72
      * @param Pipeline|null $pipeline
73 73
      */
74
-    public function __construct( ?Pipeline $pipeline = null ) {
74
+    public function __construct(?Pipeline $pipeline = null) {
75 75
         $this->pipeline = $pipeline;
76 76
     }
77 77
 
@@ -83,10 +83,10 @@  discard block
 block discarded – undo
83 83
      *
84 84
      * @throws RuntimeException If the handler does not use the CallbacksHandler trait.
85 85
      */
86
-    public function registerCallbacksHandler( AbstractHandler $class ) {
86
+    public function registerCallbacksHandler(AbstractHandler $class) {
87 87
         //check: $class must use CallbacksHandler trait
88
-        if ( !in_array( CallbacksHandler::class, array_merge( class_uses( $class ), class_uses( get_parent_class( $class ) ) ) ) ) {
89
-            throw new RuntimeException( "Class passed to " . __METHOD__ . " must use " . CallbacksHandler::class . " trait." );
88
+        if (!in_array(CallbacksHandler::class, array_merge(class_uses($class), class_uses(get_parent_class($class))))) {
89
+            throw new RuntimeException("Class passed to ".__METHOD__." must use ".CallbacksHandler::class." trait.");
90 90
         }
91 91
         $this->callbacksHandler = $class;
92 92
         $this->pipeline         = $this->callbacksHandler->getPipeline();
@@ -103,18 +103,18 @@  discard block
 block discarded – undo
103 103
      * @return mixed             Return value from the handler's method.
104 104
      * @throws ReflectionException If a method cannot be found/reflected.
105 105
      */
106
-    public function __call( string $name, array $arguments = [] ) {
106
+    public function __call(string $name, array $arguments = []) {
107 107
 
108 108
         // Create a ReflectionMethod instance for the method being called on the callback handler
109
-        $reflector = new ReflectionMethod( $this->callbacksHandler, $name );
109
+        $reflector = new ReflectionMethod($this->callbacksHandler, $name);
110 110
 
111 111
         // If the method is not public, make it accessible
112
-        if ( !$reflector->isPublic() ) {
113
-            $reflector->setAccessible( true );
112
+        if (!$reflector->isPublic()) {
113
+            $reflector->setAccessible(true);
114 114
         }
115 115
 
116 116
         // Invoke the method on the callback handler with the provided arguments
117
-        return $reflector->invoke( $this->callbacksHandler, $arguments[ 0 ] ?? null );
117
+        return $reflector->invoke($this->callbacksHandler, $arguments[0] ?? null);
118 118
     }
119 119
 
120 120
     /**
@@ -128,10 +128,10 @@  discard block
 block discarded – undo
128 128
      * @return string         The processed segment, with tags and text handled appropriately.
129 129
      */
130 130
 
131
-    public function transform( string $segment ): string {
131
+    public function transform(string $segment): string {
132 132
         // Split input into Unicode codepoints for accurate char-by-char iteration.
133
-        $originalSplit = preg_split( '//u', $segment, -1, PREG_SPLIT_NO_EMPTY );
134
-        if ( empty( $originalSplit ) ) {
133
+        $originalSplit = preg_split('//u', $segment, -1, PREG_SPLIT_NO_EMPTY);
134
+        if (empty($originalSplit)) {
135 135
             return '';
136 136
         }
137 137
 
@@ -140,36 +140,36 @@  discard block
 block discarded – undo
140 140
         $plain_text_buffer = '';
141 141
         $in_quote_char     = '';
142 142
         $output            = '';
143
-        $charCount         = count( $originalSplit );
143
+        $charCount         = count($originalSplit);
144 144
 
145
-        foreach ( $originalSplit as $idx => $char ) {
146
-            switch ( $state ) {
145
+        foreach ($originalSplit as $idx => $char) {
146
+            switch ($state) {
147 147
                 case static::STATE_PLAINTEXT:
148
-                    $this->handlePlainTextState( $char, $state, $html_buffer, $plain_text_buffer, $output );
148
+                    $this->handlePlainTextState($char, $state, $html_buffer, $plain_text_buffer, $output);
149 149
                     break;
150 150
                 case static::STATE_HTML:
151
-                    $this->handleHtmlState( $char, $idx, $charCount, $state, $html_buffer, $plain_text_buffer, $output, $in_quote_char );
151
+                    $this->handleHtmlState($char, $idx, $charCount, $state, $html_buffer, $plain_text_buffer, $output, $in_quote_char);
152 152
                     break;
153 153
                 case static::STATE_COMMENT:
154
-                    $this->handleCommentState( $char, $state, $html_buffer, $output );
154
+                    $this->handleCommentState($char, $state, $html_buffer, $output);
155 155
                     break;
156 156
                 case static::STATE_JS_CSS:
157
-                    $this->handleJsCssState( $char, $state, $html_buffer, $output );
157
+                    $this->handleJsCssState($char, $state, $html_buffer, $output);
158 158
                     break;
159 159
             }
160 160
         }
161 161
 
162 162
         // HTML Partial at the end, treat as invalid and preserve the string content
163
-        if ( !empty( $html_buffer ) ) {
164
-            if ( $this->_isTagValid( $html_buffer ) && null !== $this->pipeline ) {
163
+        if (!empty($html_buffer)) {
164
+            if ($this->_isTagValid($html_buffer) && null !== $this->pipeline) {
165 165
                 $this->_setSegmentContainsMarkup();
166 166
             }
167
-            $output .= $this->_fixWrongBuffer( $html_buffer );
167
+            $output .= $this->_fixWrongBuffer($html_buffer);
168 168
         }
169 169
 
170 170
         // Any trailing plain text: finalize it.
171
-        if ( '' !== $plain_text_buffer ) {
172
-            $output .= $this->_finalizePlainText( $plain_text_buffer );
171
+        if ('' !== $plain_text_buffer) {
172
+            $output .= $this->_finalizePlainText($plain_text_buffer);
173 173
         }
174 174
 
175 175
         return $output;
@@ -178,18 +178,18 @@  discard block
 block discarded – undo
178 178
     /**
179 179
      * Handles character processing when in the STATE_PLAINTEXT.
180 180
      */
181
-    private function handlePlainTextState( string $char, int &$state, string &$html_buffer, string &$plain_text_buffer, string &$output ): void {
182
-        switch ( $char ) {
181
+    private function handlePlainTextState(string $char, int &$state, string &$html_buffer, string &$plain_text_buffer, string &$output): void {
182
+        switch ($char) {
183 183
             case '<':
184 184
                 // Potential new tag starts; finalize plain text so far.
185 185
                 $state             = static::STATE_HTML;
186 186
                 $html_buffer       .= $char;
187
-                $output            .= $this->_finalizePlainText( $plain_text_buffer );
187
+                $output            .= $this->_finalizePlainText($plain_text_buffer);
188 188
                 $plain_text_buffer = '';
189 189
                 break;
190 190
             case '>':
191 191
                 // Unescaped '>' in plaintext; treat as literal via error handing.
192
-                $plain_text_buffer .= $this->_fixWrongBuffer( $char );
192
+                $plain_text_buffer .= $this->_fixWrongBuffer($char);
193 193
                 break;
194 194
             default:
195 195
                 // Collect as plain text.
@@ -203,27 +203,27 @@  discard block
 block discarded – undo
203 203
      * This method acts as a dispatcher based on the character.
204 204
      * Assumes parser state variables (state, html_buffer, etc.) are now class properties.
205 205
      */
206
-    private function handleHtmlState( string $char, int $idx, int $charCount, int &$state, string &$html_buffer, string &$plain_text_buffer, string &$output, string &$in_quote_char ): void {
207
-        switch ( $char ) {
206
+    private function handleHtmlState(string $char, int $idx, int $charCount, int &$state, string &$html_buffer, string &$plain_text_buffer, string &$output, string &$in_quote_char): void {
207
+        switch ($char) {
208 208
             case '<':
209
-                $this->onLessThanInHtml( $char, $output, $html_buffer );
209
+                $this->onLessThanInHtml($char, $output, $html_buffer);
210 210
                 break;
211 211
             case '>':
212
-                $this->onGreaterThanInHtml( $char, $state, $html_buffer, $output, $in_quote_char );
212
+                $this->onGreaterThanInHtml($char, $state, $html_buffer, $output, $in_quote_char);
213 213
                 break;
214 214
             case '"':
215 215
             case '\'':
216
-                $this->onQuoteInHtml( $char, $html_buffer, $in_quote_char );
216
+                $this->onQuoteInHtml($char, $html_buffer, $in_quote_char);
217 217
                 break;
218 218
             case '-':
219
-                $this->onDashInHtml( $char, $state, $html_buffer );
219
+                $this->onDashInHtml($char, $state, $html_buffer);
220 220
                 break;
221 221
             case ' ':
222 222
             case "\n":
223
-                $this->onWhitespaceInHtml( $char, $state, $html_buffer, $output );
223
+                $this->onWhitespaceInHtml($char, $state, $html_buffer, $output);
224 224
                 break;
225 225
             default:
226
-                $this->onDefaultCharInHtml( $char, $idx, $charCount, $state, $html_buffer, $plain_text_buffer );
226
+                $this->onDefaultCharInHtml($char, $idx, $charCount, $state, $html_buffer, $plain_text_buffer);
227 227
                 break;
228 228
         }
229 229
     }
@@ -231,37 +231,37 @@  discard block
 block discarded – undo
231 231
     /**
232 232
      * Handles the '<' character in the HTML state.
233 233
      */
234
-    private function onLessThanInHtml( string $char, string &$output, string &$html_buffer ): void {
234
+    private function onLessThanInHtml(string $char, string &$output, string &$html_buffer): void {
235 235
         // If we found a second less than symbol, the first one IS NOT a tag.
236 236
         // See https://www.w3.org/TR/xml/#charsets
237
-        $output      .= $this->_fixWrongBuffer( $html_buffer );
237
+        $output .= $this->_fixWrongBuffer($html_buffer);
238 238
         $html_buffer = $char;
239 239
     }
240 240
 
241 241
     /**
242 242
      * Handles the '>' character in the HTML state.
243 243
      */
244
-    private function onGreaterThanInHtml( string $char, int &$state, string &$html_buffer, string &$output, string &$in_quote_char ): void {
244
+    private function onGreaterThanInHtml(string $char, int &$state, string &$html_buffer, string &$output, string &$in_quote_char): void {
245 245
         // End of current tag. Special-case for <script> or <style> blocks.
246
-        if ( $this->isScriptOrStyleTag( $html_buffer ) ) {
246
+        if ($this->isScriptOrStyleTag($html_buffer)) {
247 247
             $html_buffer .= $char;
248
-            $state       = static::STATE_JS_CSS;
248
+            $state = static::STATE_JS_CSS;
249 249
 
250 250
             return;
251 251
         }
252 252
 
253 253
         $in_quote_char = '';
254 254
         $state         = static::STATE_PLAINTEXT;
255
-        $html_buffer   .= $char;
255
+        $html_buffer .= $char;
256 256
 
257 257
         // Validate and finalize HTML tag. Invalid tags are corrected/errors handled.
258
-        if ( $this->_isTagValid( $html_buffer ) ) {
259
-            $output .= $this->_finalizeMarkupTag( $html_buffer );
260
-            if ( null !== $this->pipeline ) {
258
+        if ($this->_isTagValid($html_buffer)) {
259
+            $output .= $this->_finalizeMarkupTag($html_buffer);
260
+            if (null !== $this->pipeline) {
261 261
                 $this->_setSegmentContainsMarkup();
262 262
             }
263 263
         } else {
264
-            $output .= $this->_fixWrongBuffer( $html_buffer );
264
+            $output .= $this->_fixWrongBuffer($html_buffer);
265 265
         }
266 266
         $html_buffer = '';
267 267
     }
@@ -269,11 +269,11 @@  discard block
 block discarded – undo
269 269
     /**
270 270
      * Handles quote characters ('"' or "'") in the HTML state.
271 271
      */
272
-    private function onQuoteInHtml( string $char, string &$html_buffer, string &$in_quote_char ): void {
272
+    private function onQuoteInHtml(string $char, string &$html_buffer, string &$in_quote_char): void {
273 273
         // Track entry/exit into quoted attributes.
274
-        if ( $char == $in_quote_char ) {
274
+        if ($char == $in_quote_char) {
275 275
             $in_quote_char = ''; // Exiting quote
276
-        } elseif ( $in_quote_char == '' ) {
276
+        } elseif ($in_quote_char == '') {
277 277
             $in_quote_char = $char; // Entering quote
278 278
         }
279 279
         $html_buffer .= $char;
@@ -282,9 +282,9 @@  discard block
 block discarded – undo
282 282
     /**
283 283
      * Handles the '-' character in the HTML state.
284 284
      */
285
-    private function onDashInHtml( string $char, int &$state, string &$html_buffer ): void {
285
+    private function onDashInHtml(string $char, int &$state, string &$html_buffer): void {
286 286
         // Detect HTML comment opening ('<!--').
287
-        if ( $html_buffer === '<!-' ) {
287
+        if ($html_buffer === '<!-') {
288 288
             $state = static::STATE_COMMENT;
289 289
         }
290 290
         $html_buffer .= $char;
@@ -293,13 +293,13 @@  discard block
 block discarded – undo
293 293
     /**
294 294
      * Handles whitespace characters in the HTML state.
295 295
      */
296
-    private function onWhitespaceInHtml( string $char, int &$state, string &$html_buffer, string &$output ): void {
296
+    private function onWhitespaceInHtml(string $char, int &$state, string &$html_buffer, string &$output): void {
297 297
         // Space or newline immediately after '<' is invalid.
298
-        if ( $html_buffer === '<' ) {
298
+        if ($html_buffer === '<') {
299 299
             $state       = static::STATE_PLAINTEXT;
300
-            $output      .= $this->_fixWrongBuffer( '<' . $char );
300
+            $output .= $this->_fixWrongBuffer('<'.$char);
301 301
             $html_buffer = '';
302
-            if ( null !== $this->pipeline ) {
302
+            if (null !== $this->pipeline) {
303 303
                 $this->_setSegmentContainsMarkup();
304 304
             }
305 305
 
@@ -311,12 +311,12 @@  discard block
 block discarded – undo
311 311
     /**
312 312
      * Handles any other default character in the HTML state.
313 313
      */
314
-    private function onDefaultCharInHtml( string $char, int $idx, int $charCount, int &$state, string &$html_buffer, string &$plain_text_buffer ): void {
314
+    private function onDefaultCharInHtml(string $char, int $idx, int $charCount, int &$state, string &$html_buffer, string &$plain_text_buffer): void {
315 315
         $html_buffer .= $char;
316 316
         // End of input: treat buffer as plain text if not a valid tag.
317
-        if ( $idx === ( $charCount - 1 ) && !$this->_isTagValid( $html_buffer ) ) {
317
+        if ($idx === ($charCount - 1) && !$this->_isTagValid($html_buffer)) {
318 318
             $state             = static::STATE_PLAINTEXT; // Error: not a valid tag
319
-            $plain_text_buffer .= $this->_fixWrongBuffer( $html_buffer );
319
+            $plain_text_buffer .= $this->_fixWrongBuffer($html_buffer);
320 320
             $html_buffer       = '';
321 321
         }
322 322
     }
@@ -324,14 +324,14 @@  discard block
 block discarded – undo
324 324
     /**
325 325
      * Handles character processing when in the STATE_COMMENT.
326 326
      */
327
-    private function handleCommentState( string $char, int &$state, string &$html_buffer, string &$output ): void {
327
+    private function handleCommentState(string $char, int &$state, string &$html_buffer, string &$output): void {
328 328
         $html_buffer .= $char;
329 329
         // Check for the end of a comment: '-->'
330
-        if ( $char === '>' && substr( $html_buffer, -3 ) === '-->' ) {
330
+        if ($char === '>' && substr($html_buffer, -3) === '-->') {
331 331
             $state       = static::STATE_PLAINTEXT;
332
-            $output      .= $this->_finalizeScriptTag( $html_buffer );
332
+            $output .= $this->_finalizeScriptTag($html_buffer);
333 333
             $html_buffer = '';
334
-            if ( null !== $this->pipeline ) {
334
+            if (null !== $this->pipeline) {
335 335
                 $this->_setSegmentContainsMarkup();
336 336
             }
337 337
         }
@@ -340,16 +340,16 @@  discard block
 block discarded – undo
340 340
     /**
341 341
      * Handles character processing when in the STATE_JS_CSS.
342 342
      */
343
-    private function handleJsCssState( string $char, int &$state, string &$html_buffer, string &$output ): void {
343
+    private function handleJsCssState(string $char, int &$state, string &$html_buffer, string &$output): void {
344 344
         $html_buffer .= $char;
345 345
         // Detect close: e.g., '</script>' or '</style>'
346
-        if ( $char === '>' ) {
347
-            if ( in_array( substr( $html_buffer, -6 ), [ 'cript>', 'style>' ], true ) ) {
346
+        if ($char === '>') {
347
+            if (in_array(substr($html_buffer, -6), ['cript>', 'style>'], true)) {
348 348
                 $state = static::STATE_PLAINTEXT;
349
-                $this->_isTagValid( $html_buffer );
350
-                $output      .= $this->_finalizeScriptTag( $html_buffer );
349
+                $this->_isTagValid($html_buffer);
350
+                $output .= $this->_finalizeScriptTag($html_buffer);
351 351
                 $html_buffer = '';
352
-                if ( null !== $this->pipeline ) {
352
+                if (null !== $this->pipeline) {
353 353
                     $this->_setSegmentContainsMarkup();
354 354
                 }
355 355
             }
@@ -359,9 +359,9 @@  discard block
 block discarded – undo
359 359
     /**
360 360
      * Checks if the buffered HTML is the beginning of a script or style tag.
361 361
      */
362
-    private function isScriptOrStyleTag( string $html_buffer ): bool {
362
+    private function isScriptOrStyleTag(string $html_buffer): bool {
363 363
         // A tag starts with '<script' or '<style'. This also covers variants with spaces or attributes.
364
-        return in_array( substr( $html_buffer, 0, 8 ), [ '<script ', '<style', '<script', '<style ' ] );
364
+        return in_array(substr($html_buffer, 0, 8), ['<script ', '<style', '<script', '<style ']);
365 365
     }
366 366
 
367 367
 }
Please login to merge, or discard this patch.