wp/wp-includes/fonts/class-wp-font-library.php
changeset 21 48c4eec2b7e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-includes/fonts/class-wp-font-library.php	Fri Sep 05 18:40:08 2025 +0200
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Font Library class.
+ *
+ * This file contains the Font Library class definition.
+ *
+ * @package    WordPress
+ * @subpackage Fonts
+ * @since      6.5.0
+ */
+
+/**
+ * Font Library class.
+ *
+ * @since 6.5.0
+ */
+class WP_Font_Library {
+
+	/**
+	 * Font collections.
+	 *
+	 * @since 6.5.0
+	 * @var array
+	 */
+	private $collections = array();
+
+	/**
+	 * Container for the main instance of the class.
+	 *
+	 * @since 6.5.0
+	 * @var WP_Font_Library|null
+	 */
+	private static $instance = null;
+
+	/**
+	 * Register a new font collection.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes,
+	 *                     and underscores. See sanitize_title().
+	 * @param array  $args Font collection data. See wp_register_font_collection() for information on accepted arguments.
+	 * @return WP_Font_Collection|WP_Error A font collection if it was registered successfully,
+	 *                                     or WP_Error object on failure.
+	 */
+	public function register_font_collection( string $slug, array $args ) {
+		$new_collection = new WP_Font_Collection( $slug, $args );
+
+		if ( $this->is_collection_registered( $new_collection->slug ) ) {
+			$error_message = sprintf(
+				/* translators: %s: Font collection slug. */
+				__( 'Font collection with slug: "%s" is already registered.' ),
+				$new_collection->slug
+			);
+			_doing_it_wrong(
+				__METHOD__,
+				$error_message,
+				'6.5.0'
+			);
+			return new WP_Error( 'font_collection_registration_error', $error_message );
+		}
+		$this->collections[ $new_collection->slug ] = $new_collection;
+		return $new_collection;
+	}
+
+	/**
+	 * Unregisters a previously registered font collection.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @param string $slug Font collection slug.
+	 * @return bool True if the font collection was unregistered successfully and false otherwise.
+	 */
+	public function unregister_font_collection( string $slug ) {
+		if ( ! $this->is_collection_registered( $slug ) ) {
+			_doing_it_wrong(
+				__METHOD__,
+				/* translators: %s: Font collection slug. */
+				sprintf( __( 'Font collection "%s" not found.' ), $slug ),
+				'6.5.0'
+			);
+			return false;
+		}
+		unset( $this->collections[ $slug ] );
+		return true;
+	}
+
+	/**
+	 * Checks if a font collection is registered.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @param string $slug Font collection slug.
+	 * @return bool True if the font collection is registered and false otherwise.
+	 */
+	private function is_collection_registered( string $slug ) {
+		return array_key_exists( $slug, $this->collections );
+	}
+
+	/**
+	 * Gets all the font collections available.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @return array List of font collections.
+	 */
+	public function get_font_collections() {
+		return $this->collections;
+	}
+
+	/**
+	 * Gets a font collection.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @param string $slug Font collection slug.
+	 * @return WP_Font_Collection|null Font collection object, or null if the font collection doesn't exist.
+	 */
+	public function get_font_collection( string $slug ) {
+		if ( $this->is_collection_registered( $slug ) ) {
+			return $this->collections[ $slug ];
+		}
+		return null;
+	}
+
+	/**
+	 * Utility method to retrieve the main instance of the class.
+	 *
+	 * The instance will be created if it does not exist yet.
+	 *
+	 * @since 6.5.0
+	 *
+	 * @return WP_Font_Library The main instance.
+	 */
+	public static function get_instance() {
+		if ( null === self::$instance ) {
+			self::$instance = new self();
+		}
+
+		return self::$instance;
+	}
+}