#ifndef _HTMLENTITY_H
#define _HTMLENTITY_H
#include "extensions.h"
#include "StringMap.h"
#include "Streams.h"
#include
using namespace std;
//http://htmlhelp.com/reference/html40/entities/
class HTMLEntity: protected Character {
static StringMapCI m_entities;
const char *m_text; //e.g. "nbsp"
unsigned int m_codepoint; //unicode decimal code point
const char *m_description;
public:
HTMLEntity(const char *_text, unsigned int _codepoint, const char *_description = "");
static HTMLEntity //in order of appearance in tables
//special chars
entity_quot, entity_amp, entity_lt, entity_gt, entity_OElig, entity_oelig, entity_Scaron, entity_scaron, entity_Yuml,
entity_circ, entity_tilde, entity_ensp, entity_emsp, entity_thinsp, entity_zwnj, entity_zwj, entity_lrm, entity_rlm,
entity_ndash, entity_mdash, entity_lsquo, entity_rsquo, entity_sbquo, entity_ldquo, entity_rdquo, entity_bdquo,
entity_dagger, entity_Dagger, entity_permil, entity_lsaquo, entity_rsaquo, entity_euro,
//Latin-1 Entities
entity_nbsp, entity_iexcl, entity_cent, entity_pound, entity_curren, entity_yen, entity_brvbar, entity_sect, entity_uml,
entity_copy, entity_ordf, entity_laquo, entity_not, entity_shy, entity_reg, entity_macr, entity_deg, entity_plusmn,
entity_sup2, entity_sup3, entity_acute, entity_micro, entity_para, entity_middot, entity_cedil, entity_sup1, entity_ordm,
entity_raquo, entity_frac14, entity_frac12, entity_frac34, entity_iquest, entity_Agrave, entity_Aacute, entity_Acirc,
entity_Atilde, entity_Auml, entity_Aring, entity_AElig, entity_Ccedil, entity_Egrave, entity_Eacute, entity_Ecirc,
entity_Euml, entity_Igrave, entity_Iacute, entity_Icirc, entity_Iuml, entity_ETH, entity_Ntilde, entity_Ograve,
entity_Oacute, entity_Ocirc, entity_Otilde, entity_Ouml, entity_times, entity_Oslash, entity_Ugrave, entity_Uacute,
entity_Ucirc, entity_Uuml, entity_Yacute, entity_THORN, entity_szlig, entity_agrave, entity_aacute, entity_acirc,
entity_atilde, entity_auml, entity_aring, entity_aelig, entity_ccedil, entity_egrave, entity_eacute, entity_ecirc,
entity_euml, entity_igrave, entity_iacute, entity_icirc, entity_iuml, entity_eth, entity_ntilde, entity_ograve,
entity_oacute, entity_ocirc, entity_otilde, entity_ouml, entity_divide, entity_oslash, entity_ugrave, entity_uacute,
entity_ucirc, entity_uuml, entity_yacute, entity_thorn, entity_yuml,
//Symbols and Greek Letters
entity_fnof, entity_Alpha, entity_Beta, entity_Gamma, entity_Delta, entity_Epsilon, entity_Zeta, entity_Eta, entity_Theta,
entity_Iota, entity_Kappa, entity_Lambda, entity_Mu, entity_Nu, entity_Xi, entity_Omicron, entity_Pi, entity_Rho,
entity_Sigma, entity_Tau, entity_Upsilon, entity_Phi, entity_Chi, entity_Psi, entity_Omega, entity_alpha, entity_beta,
entity_gamma, entity_delta, entity_epsilon, entity_zeta, entity_eta, entity_theta, entity_iota, entity_kappa,
entity_lambda, entity_mu, entity_nu, entity_xi, entity_omicron, entity_pi, entity_rho, entity_sigmaf, entity_sigma,
entity_tau, entity_upsilon, entity_phi, entity_chi, entity_psi, entity_omega, entity_thetasym, entity_upsih, entity_piv,
entity_bull, entity_hellip, entity_prime, entity_Prime, entity_oline, entity_frasl, entity_weierp, entity_image,
entity_real, entity_trade, entity_alefsym, entity_larr, entity_uarr, entity_rarr, entity_darr, entity_harr, entity_crarr,
entity_lArr, entity_uArr, entity_rArr, entity_dArr, entity_hArr, entity_forall, entity_part, entity_exist, entity_empty,
entity_nabla, entity_isin, entity_notin, entity_ni, entity_prod, entity_sum, entity_minus, entity_lowast, entity_radic,
entity_prop, entity_infin, entity_ang, entity_and, entity_or, entity_cap, entity_cup, entity_int, entity_there4, entity_sim,
entity_cong, entity_asymp, entity_ne, entity_equiv, entity_le, entity_ge, entity_sub, entity_sup, entity_nsub, entity_sube,
entity_supe, entity_oplus, entity_otimes, entity_perp, entity_sdot, entity_lceil, entity_rceil, entity_lfloor, entity_rfloor,
entity_lang, entity_rang, entity_loz, entity_spades, entity_clubs, entity_hearts, entity_diams;
//special operators used primarily for comparing heading levels h1 > h6
const bool operator== (HTMLEntity *t) {return this == t;} //compare address as these are singletons
const bool operator!= (HTMLEntity *t) {return !(this->operator==(t));}
//accessors
const char *text() {return m_text;}
const char *description() {return m_description;}
//lookup
static HTMLEntity *getentity( const char *textstart);
static HTMLEntity *entity(const char *text);
static HTMLEntity *entity(const char *textstart, const char *textfinish);
};
#endif