X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fentities%2Fplugin.js;h=f8329cd9096f0adde64c5004c918428965aa785e;hb=1056598c95187351dc58f4991d331e2258d038b5;hp=6254dcd307ca30a59da89c04d36181c716a7522c;hpb=941b0a9ba4e673e292510d80a5a86806994b8ea6;p=ckeditor.git
diff --git a/_source/plugins/entities/plugin.js b/_source/plugins/entities/plugin.js
index 6254dcd..f8329cd 100644
--- a/_source/plugins/entities/plugin.js
+++ b/_source/plugins/entities/plugin.js
@@ -1,17 +1,16 @@
/*
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
(function()
{
- var entities =
-
- // Base HTML entities.
- 'nbsp,gt,lt,quot,' +
+ // Base HTML entities.
+ var htmlbase = 'nbsp,gt,lt';
+ var entities =
// Latin-1 Entities
- 'iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +
+ 'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +
'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' +
'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' +
@@ -46,7 +45,11 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' +
'upsih,piv';
- function buildTable( entities )
+ /**
+ * Create a mapping table between one character and it's entity form from a list of entity names.
+ * @param reverse {Boolean} Whether create a reverse map from the entity string form to actual character.
+ */
+ function buildTable( entities, reverse )
{
var table = {},
regex = [];
@@ -63,31 +66,37 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity )
{
- table[ specialTable[ entity ] ] = '&' + entity + ';';
- regex.push( specialTable[ entity ] );
+ var org = reverse ? '&' + entity + ';' : specialTable[ entity ],
+ result = reverse ? specialTable[ entity ] : '&' + entity + ';';
+
+ table[ org ] = result;
+ regex.push( org );
return '';
});
- // Transforms the entities string into an array.
- entities = entities.split( ',' );
-
- // Put all entities inside a DOM element, transforming them to their
- // final chars.
- var div = document.createElement( 'div' ),
- chars;
- div.innerHTML = '&' + entities.join( ';&' ) + ';';
- chars = div.innerHTML;
- div = null;
-
- // Add all chars to the table.
- for ( var i = 0 ; i < chars.length ; i++ )
+ if ( !reverse && entities )
{
- var charAt = chars.charAt( i );
- table[ charAt ] = '&' + entities[ i ] + ';';
- regex.push( charAt );
+ // Transforms the entities string into an array.
+ entities = entities.split( ',' );
+
+ // Put all entities inside a DOM element, transforming them to their
+ // final chars.
+ var div = document.createElement( 'div' ),
+ chars;
+ div.innerHTML = '&' + entities.join( ';&' ) + ';';
+ chars = div.innerHTML;
+ div = null;
+
+ // Add all chars to the table.
+ for ( var i = 0 ; i < chars.length ; i++ )
+ {
+ var charAt = chars.charAt( i );
+ table[ charAt ] = '&' + entities[ i ] + ';';
+ regex.push( charAt );
+ }
}
- table.regex = regex.join( '' );
+ table.regex = regex.join( reverse ? '|' : '' );
return table;
}
@@ -98,24 +107,26 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
{
var config = editor.config;
- if ( !config.entities )
- return;
-
var dataProcessor = editor.dataProcessor,
htmlFilter = dataProcessor && dataProcessor.htmlFilter;
if ( htmlFilter )
{
- var selectedEntities = entities;
+ // Mandatory HTML base entities.
+ var selectedEntities = htmlbase;
- if ( config.entities_latin )
- selectedEntities += ',' + latin;
+ if ( config.entities )
+ {
+ selectedEntities += ',' + entities;
+ if ( config.entities_latin )
+ selectedEntities += ',' + latin;
- if ( config.entities_greek )
- selectedEntities += ',' + greek;
+ if ( config.entities_greek )
+ selectedEntities += ',' + greek;
- if ( config.entities_additional )
- selectedEntities += ',' + config.entities_additional;
+ if ( config.entities_additional )
+ selectedEntities += ',' + config.entities_additional;
+ }
var entitiesTable = buildTable( selectedEntities );
@@ -123,21 +134,34 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
var entitiesRegex = '[' + entitiesTable.regex + ']';
delete entitiesTable.regex;
- if ( config.entities_processNumerical )
+ if ( config.entities && config.entities_processNumerical )
entitiesRegex = '[^ -~]|' + entitiesRegex ;
entitiesRegex = new RegExp( entitiesRegex, 'g' );
+ function getEntity( character )
+ {
+ return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ?
+ '' + character.charCodeAt(0) + ';'
+ : entitiesTable[ character ];
+ }
+
+ // Decode entities that the browsers has transformed
+ // at first place.
+ var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ) , true ),
+ baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' );
+
function getChar( character )
{
- return entitiesTable[ character ] || ( '' + character.charCodeAt(0) + ';' );
+ return baseEntitiesTable[ character ];
}
htmlFilter.addRules(
{
text : function( text )
{
- return text.replace( entitiesRegex, getChar );
+ return text.replace( baseEntitiesRegex, getChar )
+ .replace( entitiesRegex, getEntity );
}
});
}
@@ -147,6 +171,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
/**
* Whether to use HTML entities in the output.
+ * @name CKEDITOR.config.entities
* @type Boolean
* @default true
* @example
@@ -158,6 +183,7 @@ CKEDITOR.config.entities = true;
* Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1)
* to HTML entities. The list of entities can be found at the
* W3C HTML 4.01 Specification, section 24.2.1.
+ * @name CKEDITOR.config.entities_latin
* @type Boolean
* @default true
* @example
@@ -170,6 +196,7 @@ CKEDITOR.config.entities_latin = true;
* HTML entities. This may be more relevant for users typing text written in Greek.
* The list of entities can be found at the
* W3C HTML 4.01 Specification, section 24.3.1.
+ * @name CKEDITOR.config.entities_greek
* @type Boolean
* @default true
* @example
@@ -179,20 +206,23 @@ CKEDITOR.config.entities_greek = true;
/**
* Whether to convert all remaining characters, not comprised in the ASCII
- * character table, to their relative numeric representation of HTML entity.
+ * character table, to their relative decimal numeric representation of HTML entity.
+ * When specified as the value 'force', it will simply convert all entities into the above form.
* For example, the phrase "This is Chinese: 汉语." is outputted
* as "This is Chinese: 汉语."
- * @type Boolean
+ * @name CKEDITOR.config.entities_processNumerical
+ * @type Boolean|String
* @default false
* @example
* config.entities_processNumerical = true;
+ * config.entities_processNumerical = 'force'; //Convert from " " into " ";
*/
-CKEDITOR.config.entities_processNumerical = false;
/**
* An additional list of entities to be used. It's a string containing each
* entry separated by a comma. Entities names or number must be used, exclusing
* the "&" preffix and the ";" termination.
+ * @name CKEDITOR.config.entities_additional
* @default '#39' // The single quote (') character.
* @type String
* @example