Make WordPress Core


Ignore:
Timestamp:
11/20/2014 02:27:08 PM (12 years ago)
Author:
nacin
Message:

Anchor texturize to shortcodes to improve regex efficiency.

props miqrogroove.
see #29557 for segfault issues.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/formatting.php

    r30383 r30449  
    2929 */
    3030function wptexturize($text, $reset = false) {
    31         global $wp_cockneyreplace;
     31        global $wp_cockneyreplace, $shortcode_tags;
    3232        static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
    3333                $default_no_texturize_tags, $default_no_texturize_shortcodes, $run_texturize = true;
     
    206206        // Look for shortcodes and HTML elements.
    207207
     208        $tagnames = array_keys( $shortcode_tags );
     209        $tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
     210        $tagregexp = "(?:$tagregexp)(?![\\w-])"; // Excerpt of get_shortcode_regex().
     211
    208212        $comment_regex =
    209213                  '!'           // Start of comment, after the <.
     
    215219
    216220        $shortcode_regex =
    217                   '\['          // Find start of shortcode.
    218                 . '[\/\[]?'     // Shortcodes may begin with [/ or [[
    219                 . '[^\s\/\[\]]' // No whitespace before name.
    220                 . '[^\[\]]*+'   // Shortcodes do not contain other shortcodes. Possessive critical.
    221                 . '\]'          // Find end of shortcode.
    222                 . '\]?';        // Shortcodes may end with ]]
     221                  '\['              // Find start of shortcode.
     222                . '[\/\[]?'         // Shortcodes may begin with [/ or [[
     223                . $tagregexp        // Only match registered shortcodes, because performance.
     224                . '(?:'
     225                .     '[^\[\]<>]+'  // Shortcodes do not contain other shortcodes. Quantifier critical.
     226                . '|'
     227                .     '<[^\[\]>]*>' // HTML elements permitted. Prevents matching ] before >.
     228                . ')*+'             // Possessive critical.
     229                . '\]'              // Find end of shortcode.
     230                . '\]?';            // Shortcodes may end with ]]
    223231
    224232        $regex =
Note: See TracChangeset for help on using the changeset viewer.