Submit
Path:
~
/
/
var
/
softaculous
/
sitepad
/
editor
/
site-inc
/
File Content:
class-wp-block-parser.php
<?php /** * Block Serialization Parser * * @package WordPress */ /** * Class WP_Block_Parser_Block * * Holds the block structure in memory * * @since 3.8.0 */ class WP_Block_Parser_Block { /** * Name of block * * @example "core/paragraph" * * @since 3.8.0 * @var string */ public $blockName; /** * Optional set of attributes from block comment delimiters * * @example null * @example array( 'columns' => 3 ) * * @since 3.8.0 * @var array|null */ public $attrs; /** * List of inner blocks (of this same class) * * @since 3.8.0 * @var WP_Block_Parser_Block[] */ public $innerBlocks; /** * Resultant HTML from inside block comment delimiters * after removing inner blocks * * @example "...Just <!-- wp:test /--> testing..." -> "Just testing..." * * @since 3.8.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 3.8.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. */ 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 3.8.0 */ class WP_Block_Parser_Frame { /** * Full or partial block * * @since 3.8.0 * @var WP_Block_Parser_Block */ public $block; /** * Byte offset into document for start of parse token * * @since 3.8.0 * @var int */ public $token_start; /** * Byte length of entire parse token string * * @since 3.8.0 * @var int */ public $token_length; /** * Byte offset into document for after parse token ends * (used during reconstruction of stack into parse production) * * @since 3.8.0 * @var int */ public $prev_offset; /** * Byte offset into document where leading HTML before token starts * * @since 3.8.0 * @var int */ public $leading_html_start; /** * Constructor * * Will populate object properties from the provided arguments. * * @since 3.8.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. */ 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 * * Parses a document and constructs a list of parsed block objects * * @since 3.8.0 * @since 4.0.0 returns arrays not objects, all attributes are arrays */ class WP_Block_Parser { /** * Input document being parsed * * @example "Pre-text\n<!-- wp:paragraph -->This is inside a block!<!-- /wp:paragraph -->" * * @since 3.8.0 * @var string */ public $document; /** * Tracks parsing progress through document * * @since 3.8.0 * @var int */ public $offset; /** * List of parsed blocks * * @since 3.8.0 * @var WP_Block_Parser_Block[] */ public $output; /** * Stack of partially-parsed structures in memory during parse * * @since 3.8.0 * @var WP_Block_Parser_Frame[] */ public $stack; /** * Empty associative array, here due to PHP quirks * * @since 4.4.0 * @var array empty associative array */ public $empty_attrs; /** * Parses a document and returns a list of block structures * * When encountering an invalid parse will return a best-effort * parse. In contrast to the specification parser this does not * return an error on invalid inputs. * * @since 3.8.0 * * @param string $document Input document being parsed. * @return WP_Block_Parser_Block[] */ function parse( $document ) { $this->document = $document; $this->offset = 0; $this->output = array(); $this->stack = array(); $this->empty_attrs = json_decode( '{}', true ); do { // twiddle our thumbs. } while ( $this->proceed() ); return $this->output; } /** * Processes the next token from the input document * and returns whether to proceed eating more tokens * * This is the "next step" function that essentially * takes a token as its input and decides what to do * with that token before descending deeper into a * nested block tree or continuing along the document * or breaking out of a level of nesting. * * @internal * @since 3.8.0 * @return bool */ function proceed() { $next_token = $this->next_token(); list( $token_type, $block_name, $attrs, $start_offset, $token_length ) = $next_token; $stack_depth = count( $this->stack ); // we may have some HTML soup before the next block. $leading_html_start = $start_offset > $this->offset ? $this->offset : null; switch ( $token_type ) { case 'no-more-tokens': // if not in a block then flush output. if ( 0 === $stack_depth ) { $this->add_freeform(); return false; } /* * Otherwise we have a problem * This is an error * * we have options * - treat it all as freeform text * - assume an implicit closer (easiest when not nesting) */ // for the easy case we'll assume an implicit closer. if ( 1 === $stack_depth ) { $this->add_block_from_stack(); return false; } /* * for the nested case where it's more difficult we'll * have to assume that multiple closers are missing * and so we'll collapse the whole stack piecewise */ while ( 0 < count( $this->stack ) ) { $this->add_block_from_stack(); } return false; case 'void-block': /* * easy case is if we stumbled upon a void block * in the top-level of the document */ if ( 0 === $stack_depth ) { if ( isset( $leading_html_start ) ) { $this->output[] = (array) self::freeform( substr( $this->document, $leading_html_start, $start_offset - $leading_html_start ) ); } $this->output[] = (array) new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() ); $this->offset = $start_offset + $token_length; return true; } // otherwise we found an inner block. $this->add_inner_block( new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() ), $start_offset, $token_length ); $this->offset = $start_offset + $token_length; return true; case 'block-opener': // track all newly-opened blocks on the stack. array_push( $this->stack, new WP_Block_Parser_Frame( new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() ), $start_offset, $token_length, $start_offset + $token_length, $leading_html_start ) ); $this->offset = $start_offset + $token_length; return true; case 'block-closer': /* * if we're missing an opener we're in trouble * This is an error */ if ( 0 === $stack_depth ) { /* * we have options * - assume an implicit opener * - assume _this_ is the opener * - give up and close out the document */ $this->add_freeform(); return false; } // if we're not nesting then this is easy - close the block. if ( 1 === $stack_depth ) { $this->add_block_from_stack( $start_offset ); $this->offset = $start_offset + $token_length; return true; } /* * otherwise we're nested and we have to close out the current * block and add it as a new innerBlock to the parent */ $stack_top = array_pop( $this->stack ); $html = substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset ); $stack_top->block->innerHTML .= $html; $stack_top->block->innerContent[] = $html; $stack_top->prev_offset = $start_offset + $token_length; $this->add_inner_block( $stack_top->block, $stack_top->token_start, $stack_top->token_length, $start_offset + $token_length ); $this->offset = $start_offset + $token_length; return true; default: // This is an error. $this->add_freeform(); return false; } } /** * Scans the document from where we last left off * and finds the next valid token to parse if it exists * * Returns the type of the find: kind of find, block information, attributes * * @internal * @since 3.8.0 * @since 4.6.1 fixed a bug in attribute parsing which caused catastrophic backtracking on invalid block comments * @return array */ function next_token() { $matches = null; /* * aye the magic * we're using a single RegExp to tokenize the block comment delimiters * we're also using a trick here because the only difference between a * block opener and a block closer is the leading `/` before `wp:` (and * a closer has no attributes). we can trap them both and process the * match back in PHP to see which one it was. */ $has_match = preg_match( '/<!--\s+(?P<closer>\/)?[ws]p:(?P<namespace>[a-z][a-z0-9_-]*\/)?(?P<name>[a-z][a-z0-9_-]*)\s+(?P<attrs>{(?:(?:[^}]+|}+(?=})|(?!}\s+\/?-->).)*+)?}\s+)?(?P<void>\/)?-->/s', $this->document, $matches, PREG_OFFSET_CAPTURE, $this->offset ); // if we get here we probably have catastrophic backtracking or out-of-memory in the PCRE. if ( false === $has_match ) { return array( 'no-more-tokens', null, null, null, null ); } // we have no more tokens. if ( 0 === $has_match ) { return array( 'no-more-tokens', null, null, null, null ); } list( $match, $started_at ) = $matches[0]; $length = strlen( $match ); $is_closer = isset( $matches['closer'] ) && -1 !== $matches['closer'][1]; $is_void = isset( $matches['void'] ) && -1 !== $matches['void'][1]; $namespace = $matches['namespace']; $namespace = ( isset( $namespace ) && -1 !== $namespace[1] ) ? $namespace[0] : 'core/'; $name = $namespace . $matches['name'][0]; $has_attrs = isset( $matches['attrs'] ) && -1 !== $matches['attrs'][1]; /* * Fun fact! It's not trivial in PHP to create "an empty associative array" since all arrays * are associative arrays. If we use `array()` we get a JSON `[]` */ $attrs = $has_attrs ? json_decode( $matches['attrs'][0], /* as-associative */ true ) : $this->empty_attrs; /* * This state isn't allowed * This is an error */ if ( $is_closer && ( $is_void || $has_attrs ) ) { // we can ignore them since they don't hurt anything. } if ( $is_void ) { return array( 'void-block', $name, $attrs, $started_at, $length ); } if ( $is_closer ) { return array( 'block-closer', $name, null, $started_at, $length ); } return array( 'block-opener', $name, $attrs, $started_at, $length ); } /** * Returns a new block object for freeform HTML * * @internal * @since 3.9.0 * * @param string $innerHTML HTML content of block. * @return WP_Block_Parser_Block freeform block object. */ function freeform( $innerHTML ) { return new WP_Block_Parser_Block( null, $this->empty_attrs, array(), $innerHTML, array( $innerHTML ) ); } /** * Pushes a length of text from the input document * to the output list as a freeform block. * * @internal * @since 3.8.0 * @param null $length how many bytes of document text to output. */ function add_freeform( $length = null ) { $length = $length ? $length : strlen( $this->document ) - $this->offset; if ( 0 === $length ) { return; } $this->output[] = (array) self::freeform( substr( $this->document, $this->offset, $length ) ); } /** * Given a block structure from memory pushes * a new block to the output list. * * @internal * @since 3.8.0 * @param WP_Block_Parser_Block $block The block to add to the output. * @param int $token_start Byte offset into the document where the first token for the block starts. * @param int $token_length Byte length of entire block from start of opening token to end of closing token. * @param int|null $last_offset Last byte offset into document if continuing form earlier output. */ function add_inner_block( WP_Block_Parser_Block $block, $token_start, $token_length, $last_offset = null ) { $parent = $this->stack[ count( $this->stack ) - 1 ]; $parent->block->innerBlocks[] = (array) $block; $html = substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset ); if ( ! empty( $html ) ) { $parent->block->innerHTML .= $html; $parent->block->innerContent[] = $html; } $parent->block->innerContent[] = null; $parent->prev_offset = $last_offset ? $last_offset : $token_start + $token_length; } /** * Pushes the top block from the parsing stack to the output list. * * @internal * @since 3.8.0 * @param int|null $end_offset byte offset into document for where we should stop sending text output as HTML. */ function add_block_from_stack( $end_offset = null ) { $stack_top = array_pop( $this->stack ); $prev_offset = $stack_top->prev_offset; $html = isset( $end_offset ) ? substr( $this->document, $prev_offset, $end_offset - $prev_offset ) : substr( $this->document, $prev_offset ); if ( ! empty( $html ) ) { $stack_top->block->innerHTML .= $html; $stack_top->block->innerContent[] = $html; } if ( isset( $stack_top->leading_html_start ) ) { $this->output[] = (array) self::freeform( substr( $this->document, $stack_top->leading_html_start, $stack_top->token_start - $stack_top->leading_html_start ) ); } $this->output[] = (array) $stack_top->block; } }
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
ID3
---
0755
IXR
---
0755
PHPMailer
---
0755
Requests
---
0755
SimplePie
---
0755
Text
---
0755
certificates
---
0755
css
---
0755
customize
---
0755
images
---
0755
js
---
0755
pomo
---
0755
random_compat
---
0755
rest-api
---
0755
theme-compat
---
0755
widgets
---
0755
admin-bar.php
29722 bytes
0644
atomlib.php
11839 bytes
0644
author-template.php
16607 bytes
0644
blocks.php
12724 bytes
0644
bookmark-template.php
11918 bytes
0644
bookmark.php
13876 bytes
0644
bootstrap.php
4209 bytes
0644
cache.php
21867 bytes
0644
canonical.php
28495 bytes
0644
capabilities.php
29532 bytes
0644
category-template.php
52019 bytes
0644
category.php
12712 bytes
0644
class-IXR.php
2573 bytes
0644
class-feed.php
523 bytes
0644
class-http.php
37091 bytes
0644
class-json.php
40475 bytes
0644
class-oembed.php
31471 bytes
0644
class-phpass.php
7317 bytes
0644
class-phpmailer.php
668 bytes
0644
class-pop3.php
20919 bytes
0644
class-requests.php
29790 bytes
0644
class-simplepie.php
89264 bytes
0644
class-smtp.php
461 bytes
0644
class-walker-category-dropdown.php
2124 bytes
0644
class-walker-category.php
6779 bytes
0644
class-walker-comment.php
13654 bytes
0644
class-walker-nav-menu.php
8577 bytes
0644
class-walker-page-dropdown.php
2298 bytes
0644
class-walker-page.php
6947 bytes
0644
class-wp-admin-bar.php
16464 bytes
0644
class-wp-ajax-response.php
5127 bytes
0644
class-wp-block-parser.php
15218 bytes
0644
class-wp-block-type-registry.php
4744 bytes
0644
class-wp-block-type.php
4815 bytes
0644
class-wp-comment-query.php
43223 bytes
0644
class-wp-comment.php
8961 bytes
0644
class-wp-customize-control.php
25077 bytes
0644
class-wp-customize-manager.php
200161 bytes
0644
class-wp-customize-nav-menus.php
54354 bytes
0644
class-wp-customize-panel.php
9647 bytes
0644
class-wp-customize-section.php
10229 bytes
0644
class-wp-customize-setting.php
28249 bytes
0644
class-wp-dependency.php
2335 bytes
0644
class-wp-editor.php
67857 bytes
0644
class-wp-embed.php
14729 bytes
0644
class-wp-error.php
4923 bytes
0644
class-wp-feed-cache-transient.php
2560 bytes
0644
class-wp-feed-cache.php
749 bytes
0644
class-wp-hook.php
14105 bytes
0644
class-wp-http-cookie.php
6591 bytes
0644
class-wp-http-curl.php
11922 bytes
0644
class-wp-http-encoding.php
6503 bytes
0644
class-wp-http-ixr-client.php
3326 bytes
0644
class-wp-http-proxy.php
6061 bytes
0644
class-wp-http-requests-hooks.php
1873 bytes
0644
class-wp-http-requests-response.php
4293 bytes
0644
class-wp-http-response.php
2871 bytes
0644
class-wp-http-streams.php
15382 bytes
0644
class-wp-image-editor-gd.php
13494 bytes
0644
class-wp-image-editor-imagick.php
21777 bytes
0644
class-wp-image-editor.php
11761 bytes
0644
class-wp-list-util.php
6396 bytes
0644
class-wp-locale-switcher.php
5026 bytes
0644
class-wp-locale.php
14600 bytes
0644
class-wp-matchesmapregex.php
1804 bytes
0644
class-wp-meta-query.php
23407 bytes
0644
class-wp-metadata-lazyloader.php
5384 bytes
0644
class-wp-network-query.php
17193 bytes
0644
class-wp-network.php
12217 bytes
0644
class-wp-oembed-controller.php
6021 bytes
0644
class-wp-post-type.php
18236 bytes
0644
class-wp-post.php
6431 bytes
0644
class-wp-query.php
130731 bytes
0644
class-wp-rewrite.php
59821 bytes
0644
class-wp-role.php
2661 bytes
0644
class-wp-roles.php
8328 bytes
0644
class-wp-session-tokens.php
7421 bytes
0644
class-wp-simplepie-file.php
2326 bytes
0644
class-wp-simplepie-sanitize-kses.php
1775 bytes
0644
class-wp-site-query.php
27427 bytes
0644
class-wp-site.php
7304 bytes
0644
class-wp-tax-query.php
19262 bytes
0644
class-wp-taxonomy.php
10661 bytes
0644
class-wp-term-query.php
34656 bytes
0644
class-wp-term.php
5265 bytes
0644
class-wp-text-diff-renderer-inline.php
716 bytes
0644
class-wp-text-diff-renderer-table.php
16442 bytes
0644
class-wp-theme.php
49242 bytes
0644
class-wp-user-meta-session-tokens.php
2990 bytes
0644
class-wp-user-query.php
31224 bytes
0644
class-wp-user.php
21414 bytes
0644
class-wp-walker.php
12687 bytes
0644
class-wp-widget-factory.php
3778 bytes
0644
class-wp-widget.php
17831 bytes
0644
class-wp-xmlrpc-server.php
206930 bytes
0644
class-wp.php
24758 bytes
0644
class.wp-dependencies.php
11512 bytes
0644
class.wp-scripts.php
17821 bytes
0644
class.wp-styles.php
9839 bytes
0644
comment-template.php
89740 bytes
0644
comment.php
114404 bytes
0644
compat.php
16371 bytes
0644
cron.php
31563 bytes
0644
date.php
35161 bytes
0644
default-constants.php
9837 bytes
0644
default-filters.php
25357 bytes
0644
default-widgets.php
2180 bytes
0644
embed.php
45092 bytes
0644
feed-atom-comments.php
5460 bytes
0644
feed-atom.php
3166 bytes
0644
feed-rdf.php
2731 bytes
0644
feed-rss.php
1277 bytes
0644
feed-rss2-comments.php
4185 bytes
0644
feed-rss2.php
3857 bytes
0644
feed.php
19753 bytes
0644
formatting.php
287018 bytes
0644
functions.php
215264 bytes
0644
functions.wp-scripts.php
12827 bytes
0644
functions.wp-styles.php
8219 bytes
0644
general-template.php
141778 bytes
0644
http.php
22424 bytes
0644
kses.php
58603 bytes
0644
l10n.php
51888 bytes
0644
link-template.php
138649 bytes
0644
load.php
37278 bytes
0644
media-template.php
47439 bytes
0644
media.php
144726 bytes
0644
meta.php
46055 bytes
0644
mime.php
40486 bytes
0644
nav-menu-template.php
21706 bytes
0644
nav-menu.php
40523 bytes
0644
open_basedir.php
21 bytes
0644
option.php
69537 bytes
0644
pluggable.php
99857 bytes
0644
plugin.php
32125 bytes
0644
post-formats.php
7024 bytes
0644
post-template.php
61669 bytes
0644
post-thumbnail-template.php
8957 bytes
0644
post.php
232830 bytes
0644
query.php
31986 bytes
0644
rest-api.php
41646 bytes
0644
revision.php
21586 bytes
0644
rewrite.php
17685 bytes
0644
robots-template.php
5185 bytes
0644
rss.php
23208 bytes
0644
script-loader.php
101123 bytes
0644
shortcodes.php
20740 bytes
0644
sitepad_functions.php
20203 bytes
0644
sitepad_functions2.php
22517 bytes
0644
spl-autoload-compat.php
2574 bytes
0644
taxonomy.php
156621 bytes
0644
template-loader.php
2616 bytes
0644
template.php
20246 bytes
0644
theme.php
101470 bytes
0644
update.php
25401 bytes
0644
user.php
123586 bytes
0644
vars.php
5722 bytes
0644
version.php
2081 bytes
0644
widgets.php
57156 bytes
0644
wlwmanifest.xml
1051 bytes
0644
wp-db.php
101671 bytes
0644
wp-diff.php
662 bytes
0644
N4ST4R_ID | Naxtarrr