1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.millscript.millscript.tools;
23
24 import org.millscript.commons.util.map.EHashMap;
25
26 /**
27 * This class implements HTML character entity encoding.
28 */
29 public class CharacterEntity {
30
31 /**
32 * The mapping from an entities name to its Unicode character.
33 */
34 private EHashMap< String, Character > nameToCode = new EHashMap< String, Character >();
35
36 /**
37 * The mapping from Unicode character to its entity name.
38 */
39 private EHashMap< Character, String > codeToName = new EHashMap< Character, String >();
40
41 /**
42 * Constructs a new <code>CharacterEntity</code>, with only the mandatory
43 * HTML entities defined.
44 */
45 public CharacterEntity() {
46
47 addEntity( "amp", new Character( '&' ) );
48
49 addEntity( "lt", new Character( '<' ) );
50
51 addEntity( "gt", new Character( '>' ) );
52
53 addEntity( "quot", new Character( '"' ) );
54 }
55
56 /**
57 * Makes the specified entity available for encoding.
58 *
59 * @param name the entity name
60 * @param ch the Unicode character the entity represents
61 */
62 public void addEntity( final String name, final Character ch ) {
63 nameToCode.insert( name, ch );
64 codeToName.insert( ch, name );
65 }
66
67 /**
68 * Returns the entity for the specified character. The entity will be named
69 * if we have a mapping for that character, otherwise it will be numeric.
70 *
71 * @param ch the character to entity encode
72 * @return a named or numeric entity for the specified character.
73 */
74 public String getEntityFor( final char ch ) {
75 final String name = codeToName.get( new Character( ch ) );
76 if ( name == null ) {
77
78
79 final StringBuffer entity = new StringBuffer( 8 );
80 entity.append( "&#" );
81 entity.append( ((int)ch) );
82 entity.append( ';' );
83 return entity.toString();
84 } else {
85
86
87 final StringBuffer entity = new StringBuffer( 10 );
88 entity.append( "&" );
89 entity.append( name );
90 entity.append( ';' );
91 return entity.toString();
92 }
93 }
94
95 /**
96 * Returns the Unicode character for the specified entity name.
97 *
98 * @param entityName the entity name to get a character for
99 * @return a Character for the specified entity name or <code>null</code>
100 * if there is no mapping
101 */
102 public Character getCharacterFor( final String entityName ) {
103
104
105 return nameToCode.get( entityName );
106 }
107
108 }