diff --git a/src/Components/Blocks/BlockQuote.php b/src/Components/Blocks/BlockQuote.php index d1853a7..8b596c7 100644 --- a/src/Components/Blocks/BlockQuote.php +++ b/src/Components/Blocks/BlockQuote.php @@ -67,7 +67,10 @@ final class BlockQuote implements ContinuableBlock return null; } - if ($Context->line()->text()[0] === '>' && \preg_match('/^(>[ \t]?+)(.*+)/', $Context->line()->text(), $matches)) { + if ( + \substr($Context->line()->text(), 0, 1) === '>' + && \preg_match('/^(>[ \t]?+)(.*+)/', $Context->line()->text(), $matches) + ) { $indentOffset = $Context->line()->indentOffset() + $Context->line()->indent() + \strlen($matches[1]); $recoveredSpaces = 0; diff --git a/src/Components/Blocks/FencedCode.php b/src/Components/Blocks/FencedCode.php index 24bad21..85b1117 100644 --- a/src/Components/Blocks/FencedCode.php +++ b/src/Components/Blocks/FencedCode.php @@ -56,7 +56,7 @@ final class FencedCode implements ContinuableBlock Block $Block = null, State $State = null ) { - $marker = $Context->line()->text()[0]; + $marker = \substr($Context->line()->text(), 0, 1); $openerLength = \strspn($Context->line()->text(), $marker); diff --git a/src/Components/Blocks/Header.php b/src/Components/Blocks/Header.php index 615937d..d9dfb86 100644 --- a/src/Components/Blocks/Header.php +++ b/src/Components/Blocks/Header.php @@ -58,9 +58,11 @@ final class Header implements Block $text = \ltrim($Context->line()->text(), '#'); + $firstChar = \substr($text, 0, 1); + if ( - $State->get(StrictMode::class)->isEnabled() && isset($text[0]) - && $text[0] !== ' ' && $text[0] !== "\t" + $State->get(StrictMode::class)->isEnabled() + && \trim($firstChar, " \t") !== '' ) { return null; } diff --git a/src/Components/Blocks/Rule.php b/src/Components/Blocks/Rule.php index ceb7b6a..1622ff0 100644 --- a/src/Components/Blocks/Rule.php +++ b/src/Components/Blocks/Rule.php @@ -27,7 +27,7 @@ final class Rule implements Block return null; } - $marker = $Context->line()->text()[0]; + $marker = \substr($Context->line()->text(), 0, 1); if ( \substr_count($Context->line()->text(), $marker) >= 3 diff --git a/src/Components/Blocks/SetextHeader.php b/src/Components/Blocks/SetextHeader.php index e636778..b684dec 100644 --- a/src/Components/Blocks/SetextHeader.php +++ b/src/Components/Blocks/SetextHeader.php @@ -46,8 +46,17 @@ final class SetextHeader implements Block return null; } - if ($Context->line()->indent() < 4 && \chop(\chop($Context->line()->text(), " \t"), $Context->line()->text()[0]) === '') { - $level = $Context->line()->text()[0] === '=' ? 1 : 2; + $marker = \substr($Context->line()->text(), 0, 1); + + if ($marker !== '=' && $marker !== '-') { + return null; + } + + if ( + $Context->line()->indent() < 4 + && \chop(\chop($Context->line()->text(), " \t"), $marker) === '' + ) { + $level = ($marker === '=' ? 1 : 2); return new self(\trim($Block->text()), $level); } diff --git a/src/Components/Blocks/TList.php b/src/Components/Blocks/TList.php index d9dd683..94405f4 100644 --- a/src/Components/Blocks/TList.php +++ b/src/Components/Blocks/TList.php @@ -89,7 +89,7 @@ final class TList implements ContinuableBlock State $State = null ) { list($type, $pattern) = ( - $Context->line()->text()[0] <= '-' + \substr($Context->line()->text(), 0, 1) <= '-' ? ['ul', '[*+-]'] : ['ol', '[0-9]{1,9}+[.\)]'] ); diff --git a/src/Components/Blocks/Table.php b/src/Components/Blocks/Table.php index 7e3f03c..76c9b1a 100644 --- a/src/Components/Blocks/Table.php +++ b/src/Components/Blocks/Table.php @@ -101,7 +101,11 @@ final class Table implements ContinuableBlock return null; } - if (\count($this->alignments) !== 1 && $Context->line()->text()[0] !== '|' && !\strpos($Context->line()->text(), '|')) { + if ( + \count($this->alignments) !== 1 + && \substr($Context->line()->text(), 0, 1) !== '|' + && !\strpos($Context->line()->text(), '|') + ) { return null; } @@ -148,7 +152,7 @@ final class Table implements ContinuableBlock /** @var _Alignment|null */ $alignment = null; - if ($dividerCell[0] === ':') { + if (\substr($dividerCell, 0, 1) === ':') { $alignment = 'left'; } diff --git a/src/Components/Inlines/Code.php b/src/Components/Inlines/Code.php index 5e51b90..85e20f2 100644 --- a/src/Components/Inlines/Code.php +++ b/src/Components/Inlines/Code.php @@ -33,7 +33,7 @@ final class Code implements Inline */ public static function build(Excerpt $Excerpt, State $State) { - $marker = $Excerpt->text()[0]; + $marker = \substr($Excerpt->text(), 0, 1); if ($marker !== '`') { return null; diff --git a/src/Components/Inlines/Emphasis.php b/src/Components/Inlines/Emphasis.php index 6203060..38498ca 100644 --- a/src/Components/Inlines/Emphasis.php +++ b/src/Components/Inlines/Emphasis.php @@ -52,17 +52,20 @@ final class Emphasis implements Inline */ public static function build(Excerpt $Excerpt, State $State) { - if (! isset($Excerpt->text()[1])) { + if (\strlen($Excerpt->text()) < 3) { return null; } - $marker = $Excerpt->text()[0]; + $marker = \substr($Excerpt->text(), 0, 1); if ($marker !== '*' && $marker !== '_') { return null; } - if ($Excerpt->text()[1] === $marker && \preg_match(self::$STRONG_REGEX[$marker], $Excerpt->text(), $matches)) { + if ( + \substr($Excerpt->text(), 1, 1) === $marker + && \preg_match(self::$STRONG_REGEX[$marker], $Excerpt->text(), $matches) + ) { $emphasis = 'strong'; } elseif (\preg_match(self::$EM_REGEX[$marker], $Excerpt->text(), $matches)) { $emphasis = 'em'; diff --git a/src/Components/Inlines/EscapeSequence.php b/src/Components/Inlines/EscapeSequence.php index 75ae4b8..369b71c 100644 --- a/src/Components/Inlines/EscapeSequence.php +++ b/src/Components/Inlines/EscapeSequence.php @@ -33,8 +33,10 @@ final class EscapeSequence implements Inline */ public static function build(Excerpt $Excerpt, State $State) { - if (isset($Excerpt->text()[1]) && \strpbrk($c = $Excerpt->text()[1], self::SPECIALS) !== false) { - return new self($c); + $char = \substr($Excerpt->text(), 1, 1); + + if ($char !== '' && \strpbrk($char, self::SPECIALS) !== false) { + return new self($char); } return null; diff --git a/src/Components/Inlines/Strikethrough.php b/src/Components/Inlines/Strikethrough.php index e41af82..33177fb 100644 --- a/src/Components/Inlines/Strikethrough.php +++ b/src/Components/Inlines/Strikethrough.php @@ -41,7 +41,7 @@ final class Strikethrough implements Inline return null; } - if ($text[1] === '~' && \preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $text, $matches)) { + if (\substr($text, 1, 1) === '~' && \preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $text, $matches)) { return new self($matches[1], \strlen($matches[0])); } diff --git a/src/Parsedown.php b/src/Parsedown.php index 3e28913..2958fe6 100644 --- a/src/Parsedown.php +++ b/src/Parsedown.php @@ -98,7 +98,7 @@ final class Parsedown } } - $marker = $Line->text()[0]; + $marker = \substr($Line->text(), 0, 1); $potentialBlockTypes = \array_merge( $State->get(BlockTypes::class)->unmarked(),