1/*
2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
3 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
4 *
5 * == BEGIN LICENSE ==
6 *
7 * Licensed under the terms of any of the following licenses at your
8 * choice:
9 *
10 *  - GNU General Public License Version 2 or later (the "GPL")
11 *    http://www.gnu.org/licenses/gpl.html
12 *
13 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14 *    http://www.gnu.org/licenses/lgpl.html
15 *
16 *  - Mozilla Public License Version 1.1 or later (the "MPL")
17 *    http://www.mozilla.org/MPL/MPL-1.1.html
18 *
19 * == END LICENSE ==
20 *
21 * This file define the HTML entities handled by the editor.
22 */
23
24var FCKXHtmlEntities = new Object() ;
25
26FCKXHtmlEntities.Initialize = function()
27{
28	if ( FCKXHtmlEntities.Entities )
29		return ;
30
31	var sChars = '' ;
32	var oEntities, e ;
33
34	if ( FCKConfig.ProcessHTMLEntities )
35	{
36		FCKXHtmlEntities.Entities = {
37			// Latin-1 Entities
38			' ':'nbsp',
39			'¡':'iexcl',
40			'¢':'cent',
41			'£':'pound',
42			'¤':'curren',
43			'¥':'yen',
44			'¦':'brvbar',
45			'§':'sect',
46			'¨':'uml',
47			'©':'copy',
48			'ª':'ordf',
49			'«':'laquo',
50			'¬':'not',
51			'­':'shy',
52			'®':'reg',
53			'¯':'macr',
54			'°':'deg',
55			'±':'plusmn',
56			'²':'sup2',
57			'³':'sup3',
58			'´':'acute',
59			'µ':'micro',
60			'¶':'para',
61			'·':'middot',
62			'¸':'cedil',
63			'¹':'sup1',
64			'º':'ordm',
65			'»':'raquo',
66			'¼':'frac14',
67			'½':'frac12',
68			'¾':'frac34',
69			'¿':'iquest',
70			'×':'times',
71			'÷':'divide',
72
73			// Symbols
74
75			'ƒ':'fnof',
76			'•':'bull',
77			'…':'hellip',
78			'′':'prime',
79			'″':'Prime',
80			'‾':'oline',
81			'⁄':'frasl',
82			'℘':'weierp',
83			'ℑ':'image',
84			'ℜ':'real',
85			'™':'trade',
86			'ℵ':'alefsym',
87			'←':'larr',
88			'↑':'uarr',
89			'→':'rarr',
90			'↓':'darr',
91			'↔':'harr',
92			'↵':'crarr',
93			'⇐':'lArr',
94			'⇑':'uArr',
95			'⇒':'rArr',
96			'⇓':'dArr',
97			'⇔':'hArr',
98			'∀':'forall',
99			'∂':'part',
100			'∃':'exist',
101			'∅':'empty',
102			'∇':'nabla',
103			'∈':'isin',
104			'∉':'notin',
105			'∋':'ni',
106			'∏':'prod',
107			'∑':'sum',
108			'−':'minus',
109			'∗':'lowast',
110			'√':'radic',
111			'∝':'prop',
112			'∞':'infin',
113			'∠':'ang',
114			'∧':'and',
115			'∨':'or',
116			'∩':'cap',
117			'∪':'cup',
118			'∫':'int',
119			'∴':'there4',
120			'∼':'sim',
121			'≅':'cong',
122			'≈':'asymp',
123			'≠':'ne',
124			'≡':'equiv',
125			'≤':'le',
126			'≥':'ge',
127			'⊂':'sub',
128			'⊃':'sup',
129			'⊄':'nsub',
130			'⊆':'sube',
131			'⊇':'supe',
132			'⊕':'oplus',
133			'⊗':'otimes',
134			'⊥':'perp',
135			'⋅':'sdot',
136			'\u2308':'lceil',
137			'\u2309':'rceil',
138			'\u230a':'lfloor',
139			'\u230b':'rfloor',
140			'\u2329':'lang',
141			'\u232a':'rang',
142			'◊':'loz',
143			'♠':'spades',
144			'♣':'clubs',
145			'♥':'hearts',
146			'♦':'diams',
147
148			// Other Special Characters
149
150			'"':'quot',
151		//	'&':'amp',		// This entity is automatically handled by the XHTML parser.
152		//	'<':'lt',		// This entity is automatically handled by the XHTML parser.
153		//	'>':'gt',		// This entity is automatically handled by the XHTML parser.
154			'ˆ':'circ',
155			'˜':'tilde',
156			' ':'ensp',
157			' ':'emsp',
158			' ':'thinsp',
159			'‌':'zwnj',
160			'‍':'zwj',
161			'‎':'lrm',
162			'‏':'rlm',
163			'–':'ndash',
164			'—':'mdash',
165			'‘':'lsquo',
166			'’':'rsquo',
167			'‚':'sbquo',
168			'“':'ldquo',
169			'”':'rdquo',
170			'„':'bdquo',
171			'†':'dagger',
172			'‡':'Dagger',
173			'‰':'permil',
174			'‹':'lsaquo',
175			'›':'rsaquo',
176			'€':'euro'
177		} ;
178
179		// Process Base Entities.
180		for ( e in FCKXHtmlEntities.Entities )
181			sChars += e ;
182
183		// Include Latin Letters Entities.
184		if ( FCKConfig.IncludeLatinEntities )
185		{
186			oEntities = {
187				'À':'Agrave',
188				'Á':'Aacute',
189				'Â':'Acirc',
190				'Ã':'Atilde',
191				'Ä':'Auml',
192				'Å':'Aring',
193				'Æ':'AElig',
194				'Ç':'Ccedil',
195				'È':'Egrave',
196				'É':'Eacute',
197				'Ê':'Ecirc',
198				'Ë':'Euml',
199				'Ì':'Igrave',
200				'Í':'Iacute',
201				'Î':'Icirc',
202				'Ï':'Iuml',
203				'Ð':'ETH',
204				'Ñ':'Ntilde',
205				'Ò':'Ograve',
206				'Ó':'Oacute',
207				'Ô':'Ocirc',
208				'Õ':'Otilde',
209				'Ö':'Ouml',
210				'Ø':'Oslash',
211				'Ù':'Ugrave',
212				'Ú':'Uacute',
213				'Û':'Ucirc',
214				'Ü':'Uuml',
215				'Ý':'Yacute',
216				'Þ':'THORN',
217				'ß':'szlig',
218				'à':'agrave',
219				'á':'aacute',
220				'â':'acirc',
221				'ã':'atilde',
222				'ä':'auml',
223				'å':'aring',
224				'æ':'aelig',
225				'ç':'ccedil',
226				'è':'egrave',
227				'é':'eacute',
228				'ê':'ecirc',
229				'ë':'euml',
230				'ì':'igrave',
231				'í':'iacute',
232				'î':'icirc',
233				'ï':'iuml',
234				'ð':'eth',
235				'ñ':'ntilde',
236				'ò':'ograve',
237				'ó':'oacute',
238				'ô':'ocirc',
239				'õ':'otilde',
240				'ö':'ouml',
241				'ø':'oslash',
242				'ù':'ugrave',
243				'ú':'uacute',
244				'û':'ucirc',
245				'ü':'uuml',
246				'ý':'yacute',
247				'þ':'thorn',
248				'ÿ':'yuml',
249				'Œ':'OElig',
250				'œ':'oelig',
251				'Š':'Scaron',
252				'š':'scaron',
253				'Ÿ':'Yuml'
254			} ;
255
256			for ( e in oEntities )
257			{
258				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
259				sChars += e ;
260			}
261
262			oEntities = null ;
263		}
264
265		// Include Greek Letters Entities.
266		if ( FCKConfig.IncludeGreekEntities )
267		{
268			oEntities = {
269				'Α':'Alpha',
270				'Β':'Beta',
271				'Γ':'Gamma',
272				'Δ':'Delta',
273				'Ε':'Epsilon',
274				'Ζ':'Zeta',
275				'Η':'Eta',
276				'Θ':'Theta',
277				'Ι':'Iota',
278				'Κ':'Kappa',
279				'Λ':'Lambda',
280				'Μ':'Mu',
281				'Ν':'Nu',
282				'Ξ':'Xi',
283				'Ο':'Omicron',
284				'Π':'Pi',
285				'Ρ':'Rho',
286				'Σ':'Sigma',
287				'Τ':'Tau',
288				'Υ':'Upsilon',
289				'Φ':'Phi',
290				'Χ':'Chi',
291				'Ψ':'Psi',
292				'Ω':'Omega',
293				'α':'alpha',
294				'β':'beta',
295				'γ':'gamma',
296				'δ':'delta',
297				'ε':'epsilon',
298				'ζ':'zeta',
299				'η':'eta',
300				'θ':'theta',
301				'ι':'iota',
302				'κ':'kappa',
303				'λ':'lambda',
304				'μ':'mu',
305				'ν':'nu',
306				'ξ':'xi',
307				'ο':'omicron',
308				'π':'pi',
309				'ρ':'rho',
310				'ς':'sigmaf',
311				'σ':'sigma',
312				'τ':'tau',
313				'υ':'upsilon',
314				'φ':'phi',
315				'χ':'chi',
316				'ψ':'psi',
317				'ω':'omega',
318				'\u03d1':'thetasym',
319				'\u03d2':'upsih',
320				'\u03d6':'piv'
321			} ;
322
323			for ( e in oEntities )
324			{
325				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
326				sChars += e ;
327			}
328
329			oEntities = null ;
330		}
331	}
332	else
333	{
334		FCKXHtmlEntities.Entities = {} ;
335
336		// Even if we are not processing the entities, we must render the &nbsp;
337		// correctly. As we don't want HTML entities, let's use its numeric
338		// representation (&#160).
339		sChars = ' ' ;
340	}
341
342	// Create the Regex used to find entities in the text.
343	var sRegexPattern = '[' + sChars + ']' ;
344
345	if ( FCKConfig.ProcessNumericEntities )
346		sRegexPattern = '[^ -~]|' + sRegexPattern ;
347
348	var sAdditional = FCKConfig.AdditionalNumericEntities ;
349
350	if ( sAdditional && sAdditional.length > 0 )
351		sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ;
352
353	FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ;
354}
355