/*******************************************************************************
* Copyright (c) 2010, 2011 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.docs.intent.markup.serializer;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.mylyn.docs.intent.markup.markup.Entity;
/**
* Serializer of Entity elements.
*
* @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
*/
public final class EntitySerializer {
/**
* Constant to identify a specific character.
*/
private static final String COPYRIGHT_CODE = "#169";
/**
* Constant corresponding to a specific code translation.
*/
private static final String COPYRIGHT_TRANSLATION = "(c)";
/**
* Constant to identify a specific character.
*/
private static final String TRADEMARK_CODE = "#8482";
/**
* Constant corresponding to a specific code translation.
*/
private static final String TRADEMARK_TRANSLATION = "(tm)";
/**
* Constant to identify a specific character.
*/
private static final String REGISTERED_CODE = "#174";
/**
* Constant corresponding to a specific code translation.
*/
private static final String REGISTERED_TRANSLATION = "(r)";
/**
* Constant to identify a specific character.
*/
private static final String DASH_CODE = "#8211";
/**
* Constant corresponding to a specific code translation.
*/
private static final String DASH_TRANSLATION = "-";
/**
* Constant to identify a specific character.
*/
private static final String SIMPLEQUOTE_CODE = "#8217";
/**
* Constant to identify a specific character.
*/
private static final String SIMPLEQUOTE2_CODE = "#8249";
/**
* Constant to identify a specific character.
*/
private static final String SIMPLEQUOTE3_CODE = "#8250";
/**
* Constant to identify a specific character.
*/
private static final String SIMPLEQUOTE4_CODE = "#8216";
/**
* Constant corresponding to a specific code translation.
*/
private static final String SIMPLEQUOTE_TRANSLATION = "'";
/**
* Constant to identify a specific character.
*/
private static final String LEFTDOUBLEQUOTE_CODE = "#171";
/**
* Constant to identify a specific character.
*/
private static final String LEFTDOUBLEQUOTE1_CODE = "#8220";
/**
* Constant corresponding to a specific code translation.
*/
private static final String LEFTDOUBLEQUOTE_TRANSLATION = "\"";
/**
* Constant to identify a specific character.
*/
private static final String RIGHTDOUBLEQUOTE_CODE = "#187";
/**
* Constant to identify a specific character.
*/
private static final String RIGHTDOUBLEQUOTE1_CODE = "#8221";
/**
* Constant corresponding to a specific code translation.
*/
private static final String RIGHTDOUBLEQUOTE_TRANSLATION = "\"";
/**
* Constant to identify a specific character.
*/
private static final String TABULATION_SYMBOL = "<dd/>";
/**
* Constant corresponding to a specific code translation.
*/
private static final String TABULATION_TRANSLATION = "<dd/>";
/**
* HasMap mapping an entity code (example : '#169') to its TRANSLATION in Textile ('(c)').
*/
private static Map<String, String> entityMapping = new HashMap<String, String>();
/**
* EntitySerializer constructor.
*/
private EntitySerializer() {
}
/**
* Serialize the given Entity element according to its associated formats.
*
* @param entity
* a WikiText Entity element.
* @return the serialized form of the given element.
*/
public static String render(Entity entity) {
// We ensure that the map has been initialized.
initializeEntityMapping();
if (entityMapping.containsKey(entity.getData())) {
return entityMapping.get(entity.getData());
} else {
// By default, we return the unknowSymbol string;
return entity.getData();
}
}
/**
* Initialize the mapping between entity's codes and their TRANSLATIONs in textile.
*/
private static void initializeEntityMapping() {
if (entityMapping.isEmpty()) {
entityMapping.put(COPYRIGHT_CODE, COPYRIGHT_TRANSLATION);
entityMapping.put(TRADEMARK_CODE, TRADEMARK_TRANSLATION);
entityMapping.put(REGISTERED_CODE, REGISTERED_TRANSLATION);
entityMapping.put(DASH_CODE, DASH_TRANSLATION);
entityMapping.put(SIMPLEQUOTE_CODE, SIMPLEQUOTE_TRANSLATION);
entityMapping.put(SIMPLEQUOTE2_CODE, SIMPLEQUOTE_TRANSLATION);
entityMapping.put(SIMPLEQUOTE3_CODE, SIMPLEQUOTE_TRANSLATION);
entityMapping.put(SIMPLEQUOTE4_CODE, SIMPLEQUOTE_TRANSLATION);
entityMapping.put(LEFTDOUBLEQUOTE_CODE, LEFTDOUBLEQUOTE_TRANSLATION);
entityMapping.put(LEFTDOUBLEQUOTE1_CODE, LEFTDOUBLEQUOTE_TRANSLATION);
entityMapping.put(RIGHTDOUBLEQUOTE_CODE, RIGHTDOUBLEQUOTE_TRANSLATION);
entityMapping.put(RIGHTDOUBLEQUOTE1_CODE, RIGHTDOUBLEQUOTE_TRANSLATION);
entityMapping.put(TABULATION_SYMBOL, TABULATION_TRANSLATION);
}
}
}