Parsed: 129682

  public static function get_theme_data( $deprecated = array(), $options = array() ) {
    if ( ! empty( $deprecated ) ) {
      _deprecated_argument( __METHOD__, '5.9.0' );
    }

    $options = wp_parse_args( $options, array( 'with_supports' => true ) );

    if ( null === static::$theme || ! static::has_same_registered_blocks( 'theme' ) ) {
      $theme_json_file = static::get_file_path_from_theme( 'theme.json' );
      $wp_theme        = wp_get_theme();
      if ( '' !== $theme_json_file ) {
        $theme_json_data = static::read_json_file( $theme_json_file );
        $theme_json_data = static::translate( $theme_json_data, $wp_theme->get( 'TextDomain' ) );
      } else {
        $theme_json_data = array();
      }

      
/**
 * Filters the data provided by the theme for global styles and settings.
 *
 * @since 6.1.0
 *
 * @param WP_Theme_JSON_Data Class to access and update the underlying data.
 */
      $theme_json      = apply_filters( 'wp_theme_json_data_theme', new WP_Theme_JSON_Data( $theme_json_data, 'theme' ) );
      $theme_json_data = $theme_json->get_data();
      static::$theme   = new WP_Theme_JSON( $theme_json_data );

      if ( $wp_theme->parent() ) {
        // Get parent theme.json.
        $parent_theme_json_file = static::get_file_path_from_theme( 'theme.json', true );
        if ( '' !== $parent_theme_json_file ) {
          $parent_theme_json_data = static::read_json_file( $parent_theme_json_file );
          $parent_theme_json_data = static::translate( $parent_theme_json_data, $wp_theme->parent()->get( 'TextDomain' ) );
          $parent_theme           = new WP_Theme_JSON( $parent_theme_json_data );

          /*
					 * Merge the child theme.json into the parent theme.json.
					 * The child theme takes precedence over the parent.
					 */
          $parent_theme->merge( static::$theme );
          static::$theme = $parent_theme;
        }
      }
    }

    if ( ! $options['with_supports'] ) {
      return static::$theme;
    }

    /*
		 * We want the presets and settings declared in theme.json
		 * to override the ones declared via theme supports.
		 * So we take theme supports, transform it to theme.json shape
		 * and merge the static::$theme upon that.
		 */
    $theme_support_data = WP_Theme_JSON::get_from_editor_settings( get_default_block_editor_settings() );
    if ( ! static::theme_has_support() ) {
      if ( ! isset( $theme_support_data['settings']['color'] ) ) {
        $theme_support_data['settings']['color'] = array();
      }

      $default_palette = false;
      if ( current_theme_supports( 'default-color-palette' ) ) {
        $default_palette = true;
      }
      if ( ! isset( $theme_support_data['settings']['color']['palette'] ) ) {
        // If the theme does not have any palette, we still want to show the core one.
        $default_palette = true;
      }
      $theme_support_data['settings']['color']['defaultPalette'] = $default_palette;

      $default_gradients = false;
      if ( current_theme_supports( 'default-gradient-presets' ) ) {
        $default_gradients = true;
      }
      if ( ! isset( $theme_support_data['settings']['color']['gradients'] ) ) {
        // If the theme does not have any gradients, we still want to show the core ones.
        $default_gradients = true;
      }
      $theme_support_data['settings']['color']['defaultGradients'] = $default_gradients;

      // Classic themes without a theme.json don't support global duotone.
      $theme_support_data['settings']['color']['defaultDuotone'] = false;
    }
    $with_theme_supports = new WP_Theme_JSON( $theme_support_data );
    $with_theme_supports->merge( static::$theme );
    return $with_theme_supports;
  }