Changeset 5872


Ignore:
Timestamp:
09/13/10 10:52:13 (4 years ago)
Author:
tobiasz.cudnik
Message:

#5769 ­ entity not converted when config.entities=false
#5421 xhtml code generation problem   instead of   (htmlentities, entities,entities_additional,..., configuration)

Location:
CKEditor/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r5871 r5872  
    7373                <li><a href="http://dev.ckeditor.com/ticket/6188">#6188</a> : [IE7] Automatic color button had the wrong cursor.</li> 
    7474                <li><a href="http://dev.ckeditor.com/ticket/6129">#6129</a> : The show blocks' labels are now shown in the right for RTL languages.</li> 
     75                <li><a href="http://dev.ckeditor.com/ticket/5421">#5421</a> : &amp;shy; entity not converted when config.entities=false.</li> 
     76                <li><a href="http://dev.ckeditor.com/ticket/5769">#5769</a> : xhtml code generation problem &amp;nbsp; instead of &amp;#160; (htmlentities, entities,entities_additional,..., configuration).</li> 
    7577                <li>Updated the following language files:<ul> 
    7678                        <li><a href="http://dev.ckeditor.com/ticket/6246">#6246</a> : Chinese Simplified;</li> 
  • CKEditor/trunk/_source/plugins/entities/plugin.js

    r5206 r5872  
    66(function() 
    77{ 
     8        // Base HTML entities. 
     9        var htmlbase = 'nbsp,gt,lt,quot'; 
     10 
    811        var entities = 
    9  
    10                 // Base HTML entities. 
    11                 'nbsp,gt,lt,quot,' + 
    12  
    1312                // Latin-1 Entities 
    1413                'iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' + 
     
    4746                'upsih,piv'; 
    4847 
    49         function buildTable( entities ) 
     48        /** 
     49         * Create a mapping table between one character and it's entity form from a list of entity names. 
     50         * @param reverse {Boolean} Whether create a reverse map from the entity string form to actual character. 
     51         */ 
     52        function buildTable( entities, reverse ) 
    5053        { 
    5154                var table = {}, 
     
    6467                entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity ) 
    6568                        { 
    66                                 table[ specialTable[ entity ] ] = '&' + entity + ';'; 
    67                                 regex.push( specialTable[ entity ] ); 
     69                                var org = reverse ? '&' + entity + ';' : specialTable[ entity ], 
     70                                        result = reverse ? specialTable[ entity ] : '&' + entity + ';'; 
     71 
     72                                table[ org ] = result; 
     73                                regex.push( org ); 
    6874                                return ''; 
    6975                        }); 
    7076 
    71                 // Transforms the entities string into an array. 
    72                 entities = entities.split( ',' ); 
    73  
    74                 // Put all entities inside a DOM element, transforming them to their 
    75                 // final chars. 
    76                 var div = document.createElement( 'div' ), 
    77                         chars; 
    78                 div.innerHTML = '&' + entities.join( ';&' ) + ';'; 
    79                 chars = div.innerHTML; 
    80                 div = null; 
    81  
    82                 // Add all chars to the table. 
    83                 for ( var i = 0 ; i < chars.length ; i++ ) 
     77                if ( !reverse ) 
    8478                { 
    85                         var charAt = chars.charAt( i ); 
    86                         table[ charAt ] = '&' + entities[ i ] + ';'; 
    87                         regex.push( charAt ); 
     79                        // Transforms the entities string into an array. 
     80                        entities = entities.split( ',' ); 
     81 
     82                        // Put all entities inside a DOM element, transforming them to their 
     83                        // final chars. 
     84                        var div = document.createElement( 'div' ), 
     85                                chars; 
     86                        div.innerHTML = '&' + entities.join( ';&' ) + ';'; 
     87                        chars = div.innerHTML; 
     88                        div = null; 
     89 
     90                        // Add all chars to the table. 
     91                        for ( var i = 0 ; i < chars.length ; i++ ) 
     92                        { 
     93                                var charAt = chars.charAt( i ); 
     94                                table[ charAt ] = '&' + entities[ i ] + ';'; 
     95                                regex.push( charAt ); 
     96                        } 
    8897                } 
    8998 
    90                 table.regex = regex.join( '' ); 
     99                table.regex = regex.join( reverse ? '|' : '' ); 
    91100 
    92101                return table; 
     
    99108                        var config = editor.config; 
    100109 
    101                         if ( !config.entities ) 
    102                                 return; 
    103  
    104110                        var dataProcessor = editor.dataProcessor, 
    105111                                htmlFilter = dataProcessor && dataProcessor.htmlFilter; 
     
    107113                        if ( htmlFilter ) 
    108114                        { 
    109                                 var selectedEntities = entities; 
    110  
    111                                 if ( config.entities_latin ) 
    112                                         selectedEntities += ',' + latin; 
    113  
    114                                 if ( config.entities_greek ) 
    115                                         selectedEntities += ',' + greek; 
    116  
    117                                 if ( config.entities_additional ) 
    118                                         selectedEntities += ',' + config.entities_additional; 
     115                                // Mandatory HTML base entities. 
     116                                var selectedEntities = htmlbase; 
     117 
     118                                if ( config.entities ) 
     119                                { 
     120                                        selectedEntities += ',' + entities; 
     121                                        if ( config.entities_latin ) 
     122                                                selectedEntities += ',' + latin; 
     123 
     124                                        if ( config.entities_greek ) 
     125                                                selectedEntities += ',' + greek; 
     126 
     127                                        if ( config.entities_additional ) 
     128                                                selectedEntities += ',' + config.entities_additional; 
     129                                } 
    119130 
    120131                                var entitiesTable = buildTable( selectedEntities ); 
     
    124135                                delete entitiesTable.regex; 
    125136 
    126                                 if ( config.entities_processNumerical ) 
     137                                if ( config.entities && config.entities_processNumerical ) 
    127138                                        entitiesRegex = '[^ -~]|' + entitiesRegex ; 
    128139 
    129140                                entitiesRegex = new RegExp( entitiesRegex, 'g' ); 
     141 
     142                                function getEntity( character ) 
     143                                { 
     144                                        return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? 
     145                                                   '&#' + character.charCodeAt(0) + ';' 
     146                                                        : entitiesTable[ character ]; 
     147                                } 
     148 
     149                                // Decode entities that the browsers has transformed 
     150                                // at first place. 
     151                                var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ) , true ), 
     152                                        baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' ); 
    130153 
    131154                                function getChar( character ) 
    132155                                { 
    133                                         return entitiesTable[ character ] || ( '&#' + character.charCodeAt(0) + ';' ); 
     156                                        return baseEntitiesTable[ character ]; 
    134157                                } 
    135158 
     
    138161                                                text : function( text ) 
    139162                                                { 
    140                                                         return text.replace( entitiesRegex, getChar ); 
     163                                                        return text.replace( baseEntitiesRegex, getChar ) 
     164                                                                        .replace( entitiesRegex, getEntity ); 
    141165                                                } 
    142166                                        }); 
     
    180204/** 
    181205 * Whether to convert all remaining characters, not comprised in the ASCII 
    182  * character table, to their relative numeric representation of HTML entity. 
     206 * character table, to their relative decimal numeric representation of HTML entity. 
     207 * When specified as the value 'force', it will simply convert all entities into the above form. 
    183208 * For example, the phrase "This is Chinese: &#27721;&#35821;." is outputted 
    184209 * as "This is Chinese: &amp;#27721;&amp;#35821;." 
    185210 * @type Boolean 
     211 * @type Boolean|String 
    186212 * @default false 
    187213 * @example 
    188214 * config.entities_processNumerical = true; 
     215 * config.entities_processNumerical = 'force';          //Convert from "&nbsp;" into "&#160;"; 
    189216 */ 
    190217CKEDITOR.config.entities_processNumerical = false; 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy