WordPress.org

Make WordPress Core

Changeset 10322


Ignore:
Timestamp:
01/06/09 18:20:47 (5 years ago)
Author:
ryan
Message:

Faster smilies. Props johanee. fixes #6464

Location:
trunk/wp-includes
Files:
2 edited

Legend:

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

    r10298 r10322  
    12191219} 
    12201220 
     1221 
     1222/** 
     1223 * Convert one smiley code to the icon graphic file equivalent. 
     1224 * 
     1225 * Looks up one smiley code in the $wpsmiliestrans global array and returns an 
     1226 * <img> string for that smiley. 
     1227 * 
     1228 * @global array $wpsmiliestrans 
     1229 * @since 2.8.0 
     1230 * 
     1231 * @param string $smiley Smiley code to convert to image. 
     1232 * @return string Image string for smiley. 
     1233 */ 
     1234function translate_smiley($smiley) { 
     1235    global $wpsmiliestrans; 
     1236 
     1237    if (count($smiley) == 0) { 
     1238        return ''; 
     1239    } 
     1240 
     1241    $siteurl = get_option( 'siteurl' ); 
     1242 
     1243    $smiley = trim(reset($smiley)); 
     1244    $img = $wpsmiliestrans[$smiley]; 
     1245    $smiley_masked = attribute_escape($smiley); 
     1246 
     1247    return " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smiley' /> "; 
     1248} 
     1249 
     1250 
    12211251/** 
    12221252 * Convert text equivalent of smilies to images. 
    12231253 * 
    1224  * Will only convert smilies if the option 'use_smilies' is true and the globals 
    1225  * used in the function aren't empty. 
     1254 * Will only convert smilies if the option 'use_smilies' is true and the global 
     1255 * used in the function isn't empty. 
    12261256 * 
    12271257 * @since 0.71 
    1228  * @uses $wp_smiliessearch, $wp_smiliesreplace Smiley replacement arrays. 
     1258 * @uses $wp_smiliessearch 
    12291259 * 
    12301260 * @param string $text Content to convert smilies from text. 
     
    12321262 */ 
    12331263function convert_smilies($text) { 
    1234     global $wp_smiliessearch, $wp_smiliesreplace; 
     1264    global $wp_smiliessearch; 
    12351265    $output = ''; 
    1236     if ( get_option('use_smilies') && !empty($wp_smiliessearch) && !empty($wp_smiliesreplace) ) { 
     1266    if ( get_option('use_smilies') && !empty($wp_smiliessearch) ) { 
    12371267        // HTML loop taken from texturize function, could possible be consolidated 
    12381268        $textarr = preg_split("/(<.*>)/U", $text, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between 
     
    12411271            $content = $textarr[$i]; 
    12421272            if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag 
    1243                 $content = preg_replace($wp_smiliessearch, $wp_smiliesreplace, $content); 
     1273                $content = preg_replace_callback($wp_smiliessearch, 'translate_smiley', $content); 
    12441274            } 
    12451275            $output .= $content; 
  • trunk/wp-includes/functions.php

    r10287 r10322  
    23672367} 
    23682368 
     2369 
    23692370/** 
    23702371 * Convert smiley code to the icon graphic file equivalent. 
     
    23772378 * image file. 
    23782379 * 
    2379  * The $wp_smiliessearch global is for the regular expression array and is 
    2380  * set each time the function is called. The $wp_smiliesreplace is the full 
    2381  * replacement. Supposely, the $wp_smiliessearch array is looped over using 
    2382  * preg_replace() or just setting the array of $wp_smiliessearch along with the 
    2383  * array of $wp_smiliesreplace in the search and replace parameters of 
    2384  * preg_replace(), which would be faster and less overhead. Either way, both are 
    2385  * used with preg_replace() and can be defined after the function is called. 
     2380 * The $wp_smiliessearch global is for the regular expression and is set each 
     2381 * time the function is called. 
    23862382 * 
    23872383 * The full list of smilies can be found in the function and won't be listed in 
     
    23902386 * 
    23912387 * @global array $wpsmiliestrans 
    2392  * @global array $wp_smiliesreplace 
    23932388 * @global array $wp_smiliessearch 
    23942389 * @since 2.2.0 
    23952390 */ 
    23962391function smilies_init() { 
    2397     global $wpsmiliestrans, $wp_smiliessearch, $wp_smiliesreplace; 
     2392    global $wpsmiliestrans, $wp_smiliessearch; 
    23982393 
    23992394    // don't bother setting up smilies if they are disabled 
     
    24502445    } 
    24512446 
    2452     $siteurl = get_option( 'siteurl' ); 
     2447    if (count($wpsmiliestrans) == 0) { 
     2448        return; 
     2449    } 
     2450 
     2451    /* 
     2452     * NOTE: we sort the smilies in reverse key order. This is to make sure 
     2453     * we match the longest possible smilie (:???: vs :?) as the regular 
     2454     * expression used below is first-match 
     2455     */ 
     2456    krsort($wpsmiliestrans); 
     2457 
     2458    $wp_smiliessearch = '/(?:\s|^)'; 
     2459 
     2460    $subchar = ''; 
    24532461    foreach ( (array) $wpsmiliestrans as $smiley => $img ) { 
    2454         $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/'; 
    2455         $smiley_masked = attribute_escape( trim( $smiley ) ); 
    2456         $wp_smiliesreplace[] = " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smiley' /> "; 
    2457     } 
     2462        $firstchar = substr($smiley, 0, 1); 
     2463        $rest = substr($smiley, 1); 
     2464 
     2465        // new subpattern? 
     2466        if ($firstchar != $subchar) { 
     2467            if ($subchar != '') { 
     2468                $wp_smiliessearch .= ')|'; 
     2469            } 
     2470            $subchar = $firstchar; 
     2471            $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:'; 
     2472        } else { 
     2473            $wp_smiliessearch .= '|'; 
     2474        } 
     2475        $wp_smiliessearch .= preg_quote($rest); 
     2476    } 
     2477 
     2478    $wp_smiliessearch .= ')(?:\s|$)/'; 
    24582479} 
    24592480 
Note: See TracChangeset for help on using the changeset viewer.