Changeset 5872


Ignore:
Timestamp:
09/13/2010 10:52:13 AM (5 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