partClass; $this->parts = [ new $class ]; foreach ( $data as $name => $value ) { $this->$name = $value; } } public function &getAccum() { return $this->parts[count( $this->parts ) - 1]->out; } public function addPart( $s = '' ) { $class = $this->partClass; $this->parts[] = new $class( $s ); } /** * @return PPDPart */ public function getCurrentPart() { return $this->parts[count( $this->parts ) - 1]; } /** * @return array */ public function getFlags() { $partCount = count( $this->parts ); $findPipe = $this->open != "\n" && $this->open != '['; return [ 'findPipe' => $findPipe, 'findEquals' => $findPipe && $partCount > 1 && !isset( $this->parts[$partCount - 1]->eqpos ), 'inHeading' => $this->open == "\n", ]; } /** * Get the output string that would result if the close is not found. * * @param bool|int $openingCount * @return string */ public function breakSyntax( $openingCount = false ) { if ( $this->open == "\n" ) { $s = $this->savedPrefix . $this->parts[0]->out; } else { if ( $openingCount === false ) { $openingCount = $this->count; } $s = substr( $this->open, 0, -1 ); $s .= str_repeat( substr( $this->open, -1 ), $openingCount - strlen( $s ) ); $s = $this->savedPrefix . $s; $first = true; foreach ( $this->parts as $part ) { if ( $first ) { $first = false; } else { $s .= '|'; } $s .= $part->out; } } return $s; } }