/* HTMLentities.h
* $Id$
*/
/* implements ... */
#include "HTMLdtd.h"
/* uses ... */
#include "SGML.h"
/**********************
A translation of "ISO 8879:1986//ENTITIES Added Latin 1//EN"
and the postscript encoding of those symbols to C.
***********************/
static HMBinding entities[] = {
{"AElig", "\306"}, /* capital AE diphthong (ligature) */
{"Aacute", "\301"}, /* capital A, acute accent */
{"Acirc", "\302"}, /* capital A, circumflex accent */
{"Agrave", "\300"}, /* capital A, grave accent */
{"Aring", "\305"}, /* capital A, ring */
{"Atilde", "\303"}, /* capital A, tilde */
{"Auml", "\304"}, /* capital A, dieresis or umlaut mark */
{"Ccedil", "\307"}, /* capital C, cedilla */
{"ETH", "\320"}, /* capital Eth, Icelandic */
{"Eacute", "\311"}, /* capital E, acute accent */
{"Ecirc", "\312"}, /* capital E, circumflex accent */
{"Egrave", "\310"}, /* capital E, grave accent */
{"Euml", "\313"}, /* capital E, dieresis or umlaut mark */
{"Iacute", "\315"}, /* capital I, acute accent */
{"Icirc", "\316"}, /* capital I, circumflex accent */
{"Igrave", "\314"}, /* capital I, grave accent */
{"Iuml", "\317"}, /* capital I, dieresis or umlaut mark */
{"Ntilde", "\321"}, /* capital N, tilde */
{"Oacute", "\323"}, /* capital O, acute accent */
{"Ocirc", "\324"}, /* capital O, circumflex accent */
{"Ograve", "\322"}, /* capital O, grave accent */
{"Oslash", "\330"}, /* capital O, slash */
{"Otilde", "\325"}, /* capital O, tilde */
{"Ouml", "\326"}, /* capital O, dieresis or umlaut mark */
{"THORN", "\336"}, /* capital THORN, Icelandic */
{"Uacute", "\332"}, /* capital U, acute accent */
{"Ucirc", "\333"}, /* capital U, circumflex accent */
{"Ugrave", "\331"}, /* capital U, grave accent */
{"Uuml", "\334"}, /* capital U, dieresis or umlaut mark */
{"Yacute", "\335"}, /* capital Y, acute accent */
{"aacute", "\341"}, /* small a, acute accent */
{"acirc", "\342"}, /* small a, circumflex accent */
{"aelig", "\346"}, /* small ae diphthong (ligature) */
{"agrave", "\340"}, /* small a, grave accent */
{"amp", "\046"}, /* ampersand */
{"aring", "\345"}, /* small a, ring */
{"atilde", "\343"}, /* small a, tilde */
{"auml", "\344"}, /* small a, dieresis or umlaut mark */
{"ccedil", "\347"}, /* small c, cedilla */
{"eacute", "\351"}, /* small e, acute accent */
{"ecirc", "\352"}, /* small e, circumflex accent */
{"egrave", "\350"}, /* small e, grave accent */
{"eth", "\360"}, /* small eth, Icelandic */
{"euml", "\353"}, /* small e, dieresis or umlaut mark */
{"gt", "\076"}, /* greater than */
{"iacute", "\355"}, /* small i, acute accent */
{"icirc", "\356"}, /* small i, circumflex accent */
{"igrave", "\354"}, /* small i, grave accent */
{"iuml", "\357"}, /* small i, dieresis or umlaut mark */
{"lt", "\074"}, /* less than */
{"ntilde", "\361"}, /* small n, tilde */
{"oacute", "\363"}, /* small o, acute accent */
{"ocirc", "\364"}, /* small o, circumflex accent */
{"ograve", "\362"}, /* small o, grave accent */
{"oslash", "\370"}, /* small o, slash */
{"otilde", "\365"}, /* small o, tilde */
{"ouml", "\366"}, /* small o, dieresis or umlaut mark */
{"szlig", "\337"}, /* small sharp s, German (sz ligature) */
{"thorn", "\376"}, /* small thorn, Icelandic */
{"uacute", "\372"}, /* small u, acute accent */
{"ucirc", "\373"}, /* small u, circumflex accent */
{"ugrave", "\371"}, /* small u, grave accent */
{"uuml", "\374"}, /* small u, dieresis or umlaut mark */
{"yacute", "\375"}, /* small y, acute accent */
{"yuml", "\377"}, /* small y, dieresis or umlaut mark */
};
#define ARRAYSIZE(x) (sizeof(x)/sizeof((x)[0]))
CONST char*
html_entity_text(unused, name)
HMDoc* unused;
CONST char* name;
{
/* binary search through sorted list of entity names */
CONST HMBinding *ed;
int bottom = 0;
int top = ARRAYSIZE(entities);
int sign, half;
while(half = (top + bottom)/2,
ed = entities + half,
sign = strcmp(name, ed->name)){
if(top - bottom <= 1)
return 0; /* error: undefined entity */
if(sign < 0)
top = half;
else
bottom = half;
}
return ed->value;
}
int
HTML_content(gi)
CONST char* gi;
{
if(!strcmp(gi, "TITLE") ||
!strcmp(gi, "XMP") ||
!strcmp(gi, "LISTING")){
return SGML_RCDATA;
}else if(!strcmp(gi, "P") ||
!strcmp(gi, "LI") ||
!strcmp(gi, "DT") ||
!strcmp(gi, "DD")
){
return SGML_EMPTY;
}else{
return SGML_MIXED;
}
}