protected function filterAttributes( array $attributeKeys )
	{
		$filtered = array_intersect_key( $this->args, array_flip( $attributeKeys ));

		// normalize truthy boolean attributes
		foreach( $filtered as $key => $value ) {
			if( !in_array( $key, self::BOOLEAN_ATTRIBUTES ))continue;

			if( $value !== false ) {
				$filtered[ $key ] = '';
				continue;
			}

			unset( $filtered[ $key ] );
		}

		$filteredKeys = array_filter( array_keys( $filtered ), function( $key ) use ( $filtered ) {
			return !(
				empty( $filtered[ $key ] )
				&& !is_numeric( $filtered[ $key ] )
				&& !in_array( $key, self::BOOLEAN_ATTRIBUTES )
			);
		});

		return array_intersect_key( $filtered, array_flip( $filteredKeys ));
	}