args = $args;
$this->argDict = null;
$this->namedArgsDict = null;
}
/**
* FIXME: Used in Parsoid native parser functions implementation
* and may not be needed in the final version.
*
* Converts the args that are an array of ($k, $v) KV objects to
* an assocative array mapping $k to $v.
*
* @return array
*/
public function dict(): array {
if ( $this->argDict === null ) {
$res = [];
foreach ( $this->args as $kv ) {
$key = trim( TokenUtils::tokensToString( $kv->k ) );
$res[$key] = $kv->v;
}
$this->argDict = $res;
}
return $this->argDict;
}
/**
* Converts the args that are an array of ($k, $v) KV objects to
* an assocative array mapping $k to $v while handling named and
* locational orgs and trimming whitespace around the keys.
*
* @return array
*/
public function named(): array {
if ( $this->namedArgsDict === null ) {
$n = 1;
$out = [];
$namedArgs = [];
foreach ( $this->args as $kv ) {
// FIXME: Also check for whitespace-only named args!
$k = $kv->k;
$v = $kv->v;
if ( is_string( $k ) ) {
$k = trim( $k );
}
if ( !is_array( $k ) &&
// Check for blank named parameters
$kv->srcOffsets->key->end === $kv->srcOffsets->value->start
) {
$out[(string)$n] = $v;
$n++;
} elseif ( is_string( $k ) ) {
$namedArgs[$k] = true;
$out[$k] = $v;
} else {
$k = trim( TokenUtils::tokensToString( $k ) );
$namedArgs[$k] = true;
$out[$k] = $v;
}
}
$this->namedArgsDict = [ 'namedArgs' => $namedArgs, 'dict' => $out ];
}
return $this->namedArgsDict;
}
/**
* FIXME: Used in Parsoid native parser functions implementation
* and may not be needed in the final version.
*
* @param int $start
* @param int $end
* @return array
*/
public function getSlice( int $start, int $end ): array {
$out = [];
$args = array_slice( $this->args, $start, $end /*CHECK THIS*/ );
foreach ( $args as $kv ) {
$out[] = new KV( $kv->k, TokenUtils::tokensToString( $kv->v ), $kv->srcOffsets );
}
return $out;
}
}