From 4aeb284d44ff29b3b67dc568b6f8f0472a0e62c8 Mon Sep 17 00:00:00 2001 From: Peter Wilson Date: Tue, 27 Jun 2023 00:43:42 +0000 Subject: [PATCH] Editor: Update block-serialization-default-parser package for WP 6.3 Beta 1. Update the `@wordpress/block-serialization-default-parser` to 4.35.1 for WordPress 6.3 Beta 1. These changes split the following classes in to their own files in order to match the WordPress PHP coding standards: * `WP_Block_Parser_Block` * `WP_Block_Parser_Frame` * `WP_Block_Parser` These classes were previously all included in the `src/wp-includes/class-wp-block-parser.php` file. In order to maintain backward compatibly for developers requiring the file directly, the relocated classes are replaced with `require_once` calls in the original file. In order to retain the commit history of the new files, they have been created using the `svn copy` command. Props aristath, rajanpanchal2028, jrf, SergeyBiryukov, costdev, manfcarlo, spacedmonkey, mukesh27, isabel_brison, dd32. Fixes #57832. See #58623. git-svn-id: https://develop.svn.wordpress.org/trunk@56048 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 6 +- package.json | 2 +- phpcs.xml.dist | 13 +- .../class-wp-block-parser-block.php | 90 +++++++++ .../class-wp-block-parser-frame.php | 78 ++++++++ src/wp-includes/class-wp-block-parser.php | 176 ++---------------- src/wp-settings.php | 2 + tools/webpack/packages.js | 4 +- 8 files changed, 206 insertions(+), 165 deletions(-) create mode 100644 src/wp-includes/class-wp-block-parser-block.php create mode 100644 src/wp-includes/class-wp-block-parser-frame.php diff --git a/package-lock.json b/package-lock.json index 395a0643fa..c16d63fa0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4167,9 +4167,9 @@ } }, "@wordpress/block-serialization-default-parser": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.26.1.tgz", - "integrity": "sha512-ZsdqND0BnCscRtp5TiCAcLQkq5C045bKjIsOVDIQomb01UnNttkDNCdSUjbk4dtypcaFQ2MFbUnx2kTajYD+kA==", + "version": "4.35.1", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.35.1.tgz", + "integrity": "sha512-kVestCLPvZadCzvRSt6y7wyRwlvitWgvvhUZCputqsYyIhpqT3uYLqBn2BMxg1ezA0pSUjpDOV/QwjbOftbBVg==", "requires": { "@babel/runtime": "^7.16.0" } diff --git a/package.json b/package.json index d6c142c48e..2f65c3d2e4 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "@wordpress/block-directory": "4.3.13", "@wordpress/block-editor": "11.3.10", "@wordpress/block-library": "8.3.13", - "@wordpress/block-serialization-default-parser": "4.26.1", + "@wordpress/block-serialization-default-parser": "4.35.1", "@wordpress/blocks": "12.3.3", "@wordpress/components": "23.3.7", "@wordpress/compose": "6.3.3", diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 02e1b657e2..f580e9f0bb 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -118,7 +118,6 @@ /src/wp-includes/class-requests\.php /src/wp-includes/class-simplepie\.php /src/wp-includes/class-snoopy\.php - /src/wp-includes/class-wp-block-parser\.php /src/wp-includes/deprecated\.php /src/wp-includes/ms-deprecated\.php /src/wp-includes/pluggable-deprecated\.php @@ -187,6 +186,18 @@ /tests/phpunit/tests/multisite/site\.php + + + /src/wp-includes/class-wp-block-parser\.php + /src/wp-includes/class-wp-block-parser-block\.php + + + /src/wp-includes/class-wp-block-parser-block\.php + + + /src/wp-includes/class-wp-block-parser-block\.php + + diff --git a/src/wp-includes/class-wp-block-parser-block.php b/src/wp-includes/class-wp-block-parser-block.php new file mode 100644 index 0000000000..28377d3ede --- /dev/null +++ b/src/wp-includes/class-wp-block-parser-block.php @@ -0,0 +1,90 @@ + 3 ) + * + * @since 5.0.0 + * @var array|null + */ + public $attrs; + + /** + * List of inner blocks (of this same class) + * + * @since 5.0.0 + * @var WP_Block_Parser_Block[] + */ + public $innerBlocks; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + + /** + * Resultant HTML from inside block comment delimiters + * after removing inner blocks + * + * @example "...Just testing..." -> "Just testing..." + * + * @since 5.0.0 + * @var string + */ + public $innerHTML; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + + /** + * List of string fragments and null markers where inner blocks were found + * + * @example array( + * 'innerHTML' => 'BeforeInnerAfter', + * 'innerBlocks' => array( block, block ), + * 'innerContent' => array( 'Before', null, 'Inner', null, 'After' ), + * ) + * + * @since 4.2.0 + * @var array + */ + public $innerContent; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + + /** + * Constructor. + * + * Will populate object properties from the provided arguments. + * + * @since 5.0.0 + * + * @param string $name Name of block. + * @param array $attrs Optional set of attributes from block comment delimiters. + * @param array $inner_blocks List of inner blocks (of this same class). + * @param string $inner_html Resultant HTML from inside block comment delimiters after removing inner blocks. + * @param array $inner_content List of string fragments and null markers where inner blocks were found. + */ + public function __construct( $name, $attrs, $inner_blocks, $inner_html, $inner_content ) { + $this->blockName = $name; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + $this->attrs = $attrs; + $this->innerBlocks = $inner_blocks; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + $this->innerHTML = $inner_html; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + $this->innerContent = $inner_content; // phpcs:ignore WordPress.NamingConventions.ValidVariableName + } +} diff --git a/src/wp-includes/class-wp-block-parser-frame.php b/src/wp-includes/class-wp-block-parser-frame.php new file mode 100644 index 0000000000..15938dea38 --- /dev/null +++ b/src/wp-includes/class-wp-block-parser-frame.php @@ -0,0 +1,78 @@ +block = $block; + $this->token_start = $token_start; + $this->token_length = $token_length; + $this->prev_offset = isset( $prev_offset ) ? $prev_offset : $token_start + $token_length; + $this->leading_html_start = $leading_html_start; + } +} diff --git a/src/wp-includes/class-wp-block-parser.php b/src/wp-includes/class-wp-block-parser.php index 50337b588a..61f287b21f 100644 --- a/src/wp-includes/class-wp-block-parser.php +++ b/src/wp-includes/class-wp-block-parser.php @@ -5,162 +5,6 @@ * @package WordPress */ -/** - * Class WP_Block_Parser_Block - * - * Holds the block structure in memory - * - * @since 5.0.0 - */ -class WP_Block_Parser_Block { - /** - * Name of block - * - * @example "core/paragraph" - * - * @since 5.0.0 - * @var string - */ - public $blockName; - - /** - * Optional set of attributes from block comment delimiters - * - * @example null - * @example array( 'columns' => 3 ) - * - * @since 5.0.0 - * @var array|null - */ - public $attrs; - - /** - * List of inner blocks (of this same class) - * - * @since 5.0.0 - * @var WP_Block_Parser_Block[] - */ - public $innerBlocks; - - /** - * Resultant HTML from inside block comment delimiters - * after removing inner blocks - * - * @example "...Just testing..." -> "Just testing..." - * - * @since 5.0.0 - * @var string - */ - public $innerHTML; - - /** - * List of string fragments and null markers where inner blocks were found - * - * @example array( - * 'innerHTML' => 'BeforeInnerAfter', - * 'innerBlocks' => array( block, block ), - * 'innerContent' => array( 'Before', null, 'Inner', null, 'After' ), - * ) - * - * @since 4.2.0 - * @var array - */ - public $innerContent; - - /** - * Constructor. - * - * Will populate object properties from the provided arguments. - * - * @since 5.0.0 - * - * @param string $name Name of block. - * @param array $attrs Optional set of attributes from block comment delimiters. - * @param array $innerBlocks List of inner blocks (of this same class). - * @param string $innerHTML Resultant HTML from inside block comment delimiters after removing inner blocks. - * @param array $innerContent List of string fragments and null markers where inner blocks were found. - */ - public function __construct( $name, $attrs, $innerBlocks, $innerHTML, $innerContent ) { - $this->blockName = $name; - $this->attrs = $attrs; - $this->innerBlocks = $innerBlocks; - $this->innerHTML = $innerHTML; - $this->innerContent = $innerContent; - } -} - -/** - * Class WP_Block_Parser_Frame - * - * Holds partial blocks in memory while parsing - * - * @internal - * @since 5.0.0 - */ -class WP_Block_Parser_Frame { - /** - * Full or partial block - * - * @since 5.0.0 - * @var WP_Block_Parser_Block - */ - public $block; - - /** - * Byte offset into document for start of parse token - * - * @since 5.0.0 - * @var int - */ - public $token_start; - - /** - * Byte length of entire parse token string - * - * @since 5.0.0 - * @var int - */ - public $token_length; - - /** - * Byte offset into document for after parse token ends - * (used during reconstruction of stack into parse production) - * - * @since 5.0.0 - * @var int - */ - public $prev_offset; - - /** - * Byte offset into document where leading HTML before token starts - * - * @since 5.0.0 - * @var int - */ - public $leading_html_start; - - /** - * Constructor - * - * Will populate object properties from the provided arguments. - * - * @since 5.0.0 - * - * @param WP_Block_Parser_Block $block Full or partial block. - * @param int $token_start Byte offset into document for start of parse token. - * @param int $token_length Byte length of entire parse token string. - * @param int $prev_offset Byte offset into document for after parse token ends. - * @param int $leading_html_start Byte offset into document where leading HTML before token starts. - */ - public function __construct( $block, $token_start, $token_length, $prev_offset = null, $leading_html_start = null ) { - $this->block = $block; - $this->token_start = $token_start; - $this->token_length = $token_length; - $this->prev_offset = isset( $prev_offset ) ? $prev_offset : $token_start + $token_length; - $this->leading_html_start = $leading_html_start; - } -} - /** * Class WP_Block_Parser * @@ -470,11 +314,11 @@ class WP_Block_Parser { * @internal * @since 3.9.0 * - * @param string $innerHTML HTML content of block. + * @param string $inner_html HTML content of block. * @return WP_Block_Parser_Block freeform block object. */ - public function freeform( $innerHTML ) { - return new WP_Block_Parser_Block( null, $this->empty_attrs, array(), $innerHTML, array( $innerHTML ) ); + public function freeform( $inner_html ) { + return new WP_Block_Parser_Block( null, $this->empty_attrs, array(), $inner_html, array( $inner_html ) ); } /** @@ -553,3 +397,17 @@ class WP_Block_Parser { $this->output[] = (array) $stack_top->block; } } + +/** + * WP_Block_Parser_Block class. + * + * Required for backward compatibility in WordPress Core. + */ +require_once __DIR__ . '/class-wp-block-parser-block.php'; + +/** + * WP_Block_Parser_Frame class. + * + * Required for backward compatibility in WordPress Core. + */ +require_once __DIR__ . '/class-wp-block-parser-frame.php'; diff --git a/src/wp-settings.php b/src/wp-settings.php index f1c1e0cd37..3b59004ada 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -318,6 +318,8 @@ require ABSPATH . WPINC . '/class-wp-block-styles-registry.php'; require ABSPATH . WPINC . '/class-wp-block-type-registry.php'; require ABSPATH . WPINC . '/class-wp-block.php'; require ABSPATH . WPINC . '/class-wp-block-list.php'; +require ABSPATH . WPINC . '/class-wp-block-parser-block.php'; +require ABSPATH . WPINC . '/class-wp-block-parser-frame.php'; require ABSPATH . WPINC . '/class-wp-block-parser.php'; require ABSPATH . WPINC . '/blocks.php'; require ABSPATH . WPINC . '/blocks/index.php'; diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 7ff8c33735..90c4f8deff 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -99,7 +99,9 @@ module.exports = function( env = { environment: 'production', watch: false, buil }; const phpFiles = { - 'block-serialization-default-parser/parser.php': 'wp-includes/class-wp-block-parser.php', + 'block-serialization-default-parser/class-wp-block-parser.php': 'wp-includes/class-wp-block-parser.php', + 'block-serialization-default-parser/class-wp-block-parser-frame.php': 'wp-includes/class-wp-block-parser-frame.php', + 'block-serialization-default-parser/class-wp-block-parser-block.php': 'wp-includes/class-wp-block-parser-block.php', }; const developmentCopies = mapVendorCopies( vendors, buildTarget );