Parsed: 131839

  private function combine_rules_selectors() {
    // Build an array of selectors along with the JSON-ified styles to make comparisons easier.
    $selectors_json = array();
    foreach ( $this->css_rules as $rule ) {
      $declarations = $rule->get_declarations()->get_declarations();
      ksort( $declarations );
      $selectors_json[ $rule->get_selector() ] = wp_json_encode( $declarations );
    }

    // Combine selectors that have the same styles.
    foreach ( $selectors_json as $selector => $json ) {
      // Get selectors that use the same styles.
      $duplicates = array_keys( $selectors_json, $json, true );
      // Skip if there are no duplicates.
      if ( 1 >= count( $duplicates ) ) {
        continue;
      }

      $declarations = $this->css_rules[ $selector ]->get_declarations();

      foreach ( $duplicates as $key ) {
        // Unset the duplicates from the $selectors_json array to avoid looping through them as well.
        unset( $selectors_json[ $key ] );
        // Remove the rules from the rules collection.
        unset( $this->css_rules[ $key ] );
      }
      // Create a new rule with the combined selectors.
      $duplicate_selectors                     = implode( ',', $duplicates );
      $this->css_rules[ $duplicate_selectors ] = new WP_Style_Engine_CSS_Rule( $duplicate_selectors, $declarations );
    }
  }