Make WordPress Core

Ticket #9405: 9405.4.diff

File 9405.4.diff, 1.8 KB (added by tyxla, 11 years ago)

Updating the patch by @aaroncampbell to add support for multiple dashes in the middle of the attribute, as well as multiple consecutive dashes.

  • src/wp-includes/shortcodes.php

     
    305305 */
    306306function shortcode_parse_atts($text) {
    307307        $atts = array();
    308         $pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
     308        $pattern = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
    309309        $text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
    310310        if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) {
    311311                foreach ($match as $m) {
  • tests/phpunit/tests/shortcode.php

     
    119119                $this->assertEquals( '[hyphen-foo-bar-baz]', do_shortcode( '[hyphen-foo-bar-baz]' ) );
    120120        }
    121121
     122        /**
     123         * @ticket 9405
     124         */
     125        function test_attr_hyphen() {
     126                do_shortcode('[test-shortcode-tag foo="foo" foo-bar="foo-bar" foo-bar-="foo-bar-" -foo-bar="-foo-bar" -foo-bar-="-foo-bar-" foo-bar-baz="foo-bar-baz" -foo-bar-baz="-foo-bar-baz" foo--bar="foo--bar" /]');
     127                $expected_attrs = array(
     128                        'foo' => 'foo',
     129                        'foo-bar' => 'foo-bar',
     130                        'foo-bar-' => 'foo-bar-',
     131                        '-foo-bar' => '-foo-bar',
     132                        '-foo-bar-' => '-foo-bar-',
     133                        'foo-bar-baz' => 'foo-bar-baz',
     134                        '-foo-bar-baz' => '-foo-bar-baz',
     135                        'foo--bar' => 'foo--bar',
     136                );
     137                $this->assertEquals( $expected_attrs, $this->atts );
     138        }
     139
    122140        function test_two_atts() {
    123141                do_shortcode('[test-shortcode-tag foo="asdf" bar="bing" /]');
    124142                $this->assertEquals( array('foo' => 'asdf', 'bar' => 'bing'), $this->atts );