stack = []; $this->top = false; $this->rootAccum = ''; $this->accum =& $this->rootAccum; } /** * @return int */ public function count() { return count( $this->stack ); } public function &getAccum() { return $this->accum; } /** * @return bool|PPDPart */ public function getCurrentPart() { if ( $this->top === false ) { return false; } else { return $this->top->getCurrentPart(); } } public function push( $data ) { if ( $data instanceof $this->elementClass ) { $this->stack[] = $data; } else { $class = $this->elementClass; $this->stack[] = new $class( $data ); } $this->top = $this->stack[count( $this->stack ) - 1]; $this->accum =& $this->top->getAccum(); } public function pop() { if ( $this->stack === [] ) { throw new MWException( __METHOD__ . ': no elements remaining' ); } $temp = array_pop( $this->stack ); if ( count( $this->stack ) ) { $this->top = $this->stack[count( $this->stack ) - 1]; $this->accum =& $this->top->getAccum(); } else { $this->top = self::$false; $this->accum =& $this->rootAccum; } return $temp; } public function addPart( $s = '' ) { $this->top->addPart( $s ); $this->accum =& $this->top->getAccum(); } /** * @return array */ public function getFlags() { if ( $this->stack === [] ) { return [ 'findEquals' => false, 'findPipe' => false, 'inHeading' => false, ]; } else { return $this->top->getFlags(); } } }