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_Hash */ 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 accumulator that would result if the close is not found. * * @param int|false $openingCount * @return array */ public function breakSyntax( $openingCount = false ) { if ( $this->open == "\n" ) { $accum = array_merge( [ $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 ) ); $accum = [ $this->savedPrefix . $s ]; $lastIndex = 0; $first = true; foreach ( $this->parts as $part ) { if ( $first ) { $first = false; } elseif ( is_string( $accum[$lastIndex] ) ) { $accum[$lastIndex] .= '|'; } else { $accum[++$lastIndex] = '|'; } foreach ( $part->out as $node ) { if ( is_string( $node ) && is_string( $accum[$lastIndex] ) ) { $accum[$lastIndex] .= $node; } else { $accum[++$lastIndex] = $node; } } } } return $accum; } } /** @deprecated class alias since 1.43 */ class_alias( PPDStackElement_Hash::class, 'PPDStackElement_Hash' );