WordPress.org

Make WordPress Core

Ticket #37693: 37693.6.patch

File 37693.6.patch, 2.1 KB (added by azaozz, 4 years ago)
  • src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js

     
    4646                ];
    4747
    4848                var inlinePatterns = settings.inline || [
    49                         { start: '`', end: '`', format: 'code' }
     49                        { start: '`', end: '`', format: 'code' },
     50
     51                        // Testing only
     52                        { start: '***', end: '***', format: 'strikethrough' },
     53                        { start: '**', end: '**', format: 'bold' },
     54                        { start: '*', end: '*', format: 'italic' }
    5055                ];
    5156
    5257                var canUndo;
     
    107112
    108113                        var string = node.data.slice( 0, offset );
    109114
    110                         tinymce.each( inlinePatterns, function( p ) {
    111                                 var regExp = new RegExp( escapeRegExp( p.start ) + '\\S+' + escapeRegExp( p.end ) + '$' );
    112                                 var match = string.match( regExp );
     115                        tinymce.each( inlinePatterns, function( thePattern, i ) {
     116                                var bestMatch = true;
     117                                var match = string.match( new RegExp( '(^|\\s)' + escapeRegExp( thePattern.start ) + '.+' + escapeRegExp( thePattern.end ) + '$' ) );
    113118
    114119                                if ( ! match ) {
    115120                                        return;
    116121                                }
    117122
    118                                 // Don't allow pattern characters in the text.
    119                                 if ( node.data.slice( match.index + p.start.length, offset - p.end.length ).indexOf( p.start.slice( 0, 1 ) ) !== -1 ) {
     123                                // index + 1 for when we matched a space before the pattern
     124                                startOffset = match.index > 0 ? match.index + 1 : match.index;
     125
     126                                // Check if the pattern matches a higher-priority (earlier) pattern that
     127                                // has more characters.
     128                                var testString = string.slice( startOffset );
     129
     130                                tinymce.each( inlinePatterns, function( testPattern, j ) {
     131                                        if ( testString.match( new RegExp( '^' + escapeRegExp( testPattern.start ) ) ) && j < i ) {
     132                                                bestMatch = false;
     133                                                return false;
     134                                        }
     135                                } );
     136
     137                                if ( ! bestMatch ) {
    120138                                        return;
    121139                                }
    122140
    123                                 startOffset = match.index;
    124                                 endOffset = offset - p.end.length;
    125                                 pattern = p;
     141                                endOffset = offset - thePattern.end.length;
     142                                pattern = thePattern;
    126143
    127144                                return false;
    128145                        } );