/** * @param Delimiter $delimiter */ public function removeDelimiter(Delimiter $delimiter) { if ($delimiter->getPrevious() !== null) { $delimiter->getPrevious()->setNext($delimiter->getNext()); } if ($delimiter->getNext() === null) { // top of stack $this->top = $delimiter->getPrevious(); } else { $delimiter->getNext()->setPrevious($delimiter->getPrevious()); } }
/** * @param Delimiter $closer * @param array $openersBottom * @param Delimiter|null $stackBottom * * @return Delimiter|null */ protected function findFirstMatchingOpener(Delimiter $closer, $openersBottom, Delimiter $stackBottom = null) { $closerChar = $closer->getChar(); $opener = $closer->getPrevious(); while ($opener !== null && $opener !== $stackBottom && $opener !== $openersBottom[$closerChar]) { if ($opener->getChar() === $closerChar && $opener->canOpen()) { return $opener; } $opener = $opener->getPrevious(); } }