Lines = $Lines; } /** * @param Context $Context * @param State $State * @param Block|null $Block * @return static|null */ public static function build( Context $Context, State $State, Block $Block = null ) { if (\preg_match('/^(>[ \t]?+)(.*+)/', $Context->line()->text(), $matches)) { $indentOffset = $Context->line()->indentOffset() + $Context->line()->indent() + \strlen($matches[1]); $recoveredSpaces = 0; if (\strlen($matches[1]) === 2 && \substr($matches[1], 1, 1) === "\t") { $recoveredSpaces = Line::tabShortage(0, $indentOffset -1) -1; } return new self(Lines::fromTextLines( \str_repeat(' ', $recoveredSpaces) . $matches[2], $indentOffset )); } return null; } /** * @param Context $Context * @param State $State * @return self|null */ public function advance(Context $Context, State $State) { if ($Context->previousEmptyLines() > 0) { return null; } if (\preg_match('/^(>[ \t]?+)(.*+)/', $Context->line()->text(), $matches)) { $indentOffset = $Context->line()->indentOffset() + $Context->line()->indent() + \strlen($matches[1]); $recoveredSpaces = 0; if (\strlen($matches[1]) === 2 && \substr($matches[1], 1, 1) === "\t") { $recoveredSpaces = Line::tabShortage(0, $indentOffset -1) -1; } $Lines = $this->Lines->appendingTextLines( \str_repeat(' ', $recoveredSpaces) . $matches[2], $indentOffset ); return new self($Lines); } if (! $Context->previousEmptyLines() > 0) { $indentOffset = $Context->line()->indentOffset() + $Context->line()->indent(); $Lines = $this->Lines->appendingTextLines($Context->line()->text(), $indentOffset); return new self($Lines); } return null; } /** * @return array{0: Block[], 1: State} */ public function contents(State $State) { return Parsedown::blocks($this->Lines, $State); } /** * @return Handler */ public function stateRenderable() { return new Handler( /** @return Element */ function (State $State) { list($Blocks, $State) = $this->contents($State); $StateRenderables = Parsedown::stateRenderablesFrom($Blocks); $Renderables = $State->applyTo($StateRenderables); $Renderables[] = new Text("\n"); return new Element('blockquote', [], $Renderables); } ); } }