WordPress.org

Make WordPress Core

Changeset 34933


Ignore:
Timestamp:
10/08/2015 03:11:59 AM (4 years ago)
Author:
johnbillion
Message:

Abstract the shortcode attribute parsing regex into its own function, update the JavaScript counterpart, and introduce a test to ensure they do not diverge again.

Fixes #34191
Props miqrogroove, johnbillion

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/shortcode.js

    r30695 r34933  
    136136            // 7. A numeric attribute in double quotes.
    137137            // 8. An unquoted numeric attribute.
    138             pattern = /(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/g;
     138            pattern = /([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*'([^']*)'(?:\s|$)|([\w-]+)\s*=\s*([^\s'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/g;
    139139
    140140            // Map zero-width spaces to actual spaces.
  • trunk/src/wp-includes/shortcodes.php

    r34868 r34933  
    452452
    453453/**
     454 * Retrieve the shortcode attributes regex.
     455 *
     456 * @since 4.4.0
     457 *
     458 * @return string The shortcode attribute regular expression
     459 */
     460function get_shortcode_atts_regex() {
     461    return '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
     462}
     463
     464/**
    454465 * Retrieve all attributes from the shortcodes tag.
    455466 *
     
    468479function shortcode_parse_atts($text) {
    469480    $atts = array();
    470     $pattern = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
     481    $pattern = get_shortcode_atts_regex();
    471482    $text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
    472483    if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
  • trunk/tests/phpunit/tests/shortcode.php

    r34774 r34933  
    633633        return data_whole_posts();
    634634    }
     635
     636    function test_php_and_js_shortcode_attribute_regexes_match() {
     637
     638        $file = file_get_contents( ABSPATH . WPINC . '/js/shortcode.js' );
     639        $matched = preg_match( '|\s+pattern = (\/.+\/)g;|', $file, $matches );
     640        $php = get_shortcode_atts_regex();
     641
     642        $this->assertSame( 1, $matched );
     643
     644        $js = str_replace( "\'", "'", $matches[1] );
     645        $this->assertSame( $php, $js );
     646
     647    }
     648
    635649}
Note: See TracChangeset for help on using the changeset viewer.