You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1033 lines
38 KiB
1033 lines
38 KiB
// table.cpp
|
|
// Copyright (c)1997-1999 Microsoft Corporation, All Rights Reserved
|
|
// HTML keyword tables
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "resource.h"
|
|
#include "guids.h"
|
|
#include "table.h"
|
|
|
|
#undef ASSERT
|
|
#define ASSERT(b) _ASSERTE(b)
|
|
|
|
// qsort/bsearch helper
|
|
int CmpFunc(const void *a, const void *b);
|
|
|
|
static const TCHAR szFileSig[] = _T("@HLX@");
|
|
static const TCHAR szElTag[] = _T("[Elements]");
|
|
static const TCHAR szAttTag[] = _T("[Attributes]");
|
|
static const TCHAR szEntTag[] = _T("[Entities]");
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
#ifdef _DEBUG
|
|
//
|
|
// table verification routines
|
|
//
|
|
int CheckWordTable(ReservedWord *arw, int cel, LPCTSTR szName /*= NULL*/)
|
|
{
|
|
int cerr = 0;
|
|
int cch;
|
|
for (int i = 0; i < cel; i++)
|
|
{
|
|
// table must be sorted in ascending alpha order
|
|
//
|
|
if (i > 1)
|
|
{
|
|
if (!(_tcscmp(arw[i-1].psz, arw[i].psz) < 0))
|
|
{
|
|
ATLTRACE(_T("lexer:entries in %s out of order at %d: %s - %s\n"),
|
|
szName?szName:_T("?"), i-1, arw[i-1].psz, arw[i].psz);
|
|
cerr++;
|
|
}
|
|
}
|
|
|
|
// length must match
|
|
//
|
|
cch = _tcslen(arw[i].psz);
|
|
if (cch != arw[i].cb)
|
|
{
|
|
ATLTRACE(_T("lexer:Incorrect entry in %s: %s,%d should be %d\n"),
|
|
szName?szName:_T("?"), arw[i].psz, arw[i].cb, cch);
|
|
cerr++;
|
|
}
|
|
}
|
|
return cerr;
|
|
}
|
|
|
|
int CheckWordTableIndex(ReservedWord *arw, int cel, int *ai, BOOL bCase /*= FALSE*/, LPCTSTR szName /* = NULL*/)
|
|
{
|
|
int cerr = 0;
|
|
int index;
|
|
int max = bCase ? 52 : 26;
|
|
|
|
_ASSERTE(NULL != arw);
|
|
_ASSERTE(NULL != ai);
|
|
|
|
int aik[] =
|
|
{
|
|
//A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
//a b c d e f g h i j k l m n o p q r s t u v w x y z
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
};
|
|
|
|
// Build correct index array on static aik
|
|
cerr += MakeIndexHere( arw, cel, aik, bCase );
|
|
|
|
// Compare with declared arrray
|
|
//
|
|
if (0 != memcmp(aik, ai, max))
|
|
cerr++;
|
|
|
|
// If errors, dump correct array
|
|
if (cerr)
|
|
{
|
|
ATLTRACE(_T("lexer: Correct index array for %s: \n{\n\t"), szName ? szName : _T("?"));
|
|
for (index = 0; index < max - 1; index++)
|
|
{
|
|
ATLTRACE(_T("%3d,"), aik[index]);
|
|
if (index % 13 == 12)
|
|
ATLTRACE(_T("\n\t"));
|
|
}
|
|
ATLTRACE(_T("%3d\n};\n"), aik[index]);
|
|
}
|
|
return cerr;
|
|
}
|
|
#endif
|
|
|
|
int MakeIndexHere(ReservedWord *arw, int cel, int *ab, BOOL bCase /*= FALSE*/, LPCTSTR szName /*= NULL*/)
|
|
{
|
|
int cerr = 0;
|
|
int index;
|
|
|
|
ASSERT(ab != NULL);
|
|
ASSERT(arw != NULL);
|
|
|
|
for (int irw = cel - 1; irw > 0; irw--)
|
|
{
|
|
index = PeekIndex(*arw[irw].psz, bCase);
|
|
if (-1 != index)
|
|
ab[index] = irw;
|
|
else
|
|
{
|
|
ATLTRACE(_T("lexer:error in %s: non-alpha token %s\n"), szName?szName:_T("?"), arw[irw].psz);
|
|
cerr++;
|
|
}
|
|
}
|
|
return cerr;
|
|
}
|
|
|
|
int MakeIndex(ReservedWord *arw, int cel, int **pab, BOOL bCase /*= FALSE*/, LPCTSTR szName /*= NULL*/)
|
|
{
|
|
ASSERT(NULL != arw);
|
|
ASSERT(NULL != pab);
|
|
*pab = new int[ bCase ? 52 : 26 ];
|
|
if (NULL == *pab)
|
|
return -1;
|
|
return MakeIndexHere(arw, cel, *pab, bCase, szName);
|
|
}
|
|
|
|
#define RW_Entry(string, attribute) \
|
|
_T( #string ), sizeof( #string ) - 1, attribute
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// reserved word table
|
|
// Two tables:
|
|
// reserved[] = sorted table of reserved words
|
|
// index[initial(token)] = (index of first reserved word with that initial)
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
//
|
|
// NOTE: the "HPn" elements are considered obsolete
|
|
//
|
|
static ReservedWord _rgElementNames[] =
|
|
{// psz cb att
|
|
_T(""), 0, 0,
|
|
RW_Entry(A ,ALL ),
|
|
RW_Entry(ADDRESS ,ALL ),
|
|
RW_Entry(APPLET ,IEXPn ), // ???
|
|
RW_Entry(AREA ,IEXPn ),
|
|
RW_Entry(B ,ALL ),
|
|
RW_Entry(BASE ,ALL ),
|
|
RW_Entry(BASEFONT ,IEXPn ),
|
|
RW_Entry(BGSOUND ,IEXPn ), // IExplore
|
|
RW_Entry(BIG ,IEXP3 ),
|
|
RW_Entry(BLINK ,IEXPn ), // Netscape
|
|
RW_Entry(BLOCKQUOTE ,ALL ),
|
|
RW_Entry(BODY ,ALL ),
|
|
RW_Entry(BR ,ALL ),
|
|
RW_Entry(BUTTON ,IE40 ),
|
|
RW_Entry(CAPTION ,IEXPn ), // tables
|
|
RW_Entry(CENTER ,IEXPn ),
|
|
RW_Entry(CITE ,ALL ),
|
|
RW_Entry(CODE ,ALL ),
|
|
RW_Entry(COL ,IEXP3 ),
|
|
RW_Entry(COLGROUP ,IEXP3 ), // HTML 3 tables?
|
|
RW_Entry(COMMENT ,ALL ), // considered obsolete
|
|
RW_Entry(DD ,ALL ),
|
|
RW_Entry(DFN ,ALL ), // RFC1866: not in the RFC, but deployed. ital or bold ital
|
|
RW_Entry(DIR ,ALL ),
|
|
RW_Entry(DIV ,IEXP3 ), // HTML 3
|
|
RW_Entry(DL ,ALL ),
|
|
RW_Entry(DT ,ALL ),
|
|
RW_Entry(EM ,ALL ),
|
|
RW_Entry(EMBED ,IEXP3 ), // netscape -- IEXP3
|
|
RW_Entry(FIELDSET ,IE40 ),
|
|
RW_Entry(FONT ,IEXPn ),
|
|
RW_Entry(FORM ,ALL ), // forms
|
|
RW_Entry(FRAME ,IEXP3 ), // framesets
|
|
RW_Entry(FRAMESET ,IEXP3 ), // framesets
|
|
RW_Entry(H1 ,ALL ), // heading 1
|
|
RW_Entry(H2 ,ALL ), // heading 2
|
|
RW_Entry(H3 ,ALL ), // heading 3
|
|
RW_Entry(H4 ,ALL ), // heading 4
|
|
RW_Entry(H5 ,ALL ), // heading 5
|
|
RW_Entry(H6 ,ALL ), // heading 6
|
|
RW_Entry(HEAD ,ALL ), // document head
|
|
RW_Entry(HR ,ALL ),
|
|
RW_Entry(HTML ,ALL ),
|
|
RW_Entry(I ,ALL ),
|
|
RW_Entry(IFRAME ,IEXP3 ), // inline frames
|
|
RW_Entry(IMG ,ALL ),
|
|
RW_Entry(INPUT ,ALL ), // forms
|
|
RW_Entry(ISINDEX ,ALL ),
|
|
RW_Entry(KBD ,ALL ),
|
|
RW_Entry(LABEL ,IE40 ),
|
|
RW_Entry(LEGEND ,IE40 ),
|
|
RW_Entry(LI ,ALL ),
|
|
RW_Entry(LINK ,ALL ),
|
|
RW_Entry(LISTING ,ALL ), // RFC 1866: obsolete
|
|
RW_Entry(MAP ,IEXPn ),
|
|
RW_Entry(MARQUEE ,IEXPn ), // IExplore
|
|
RW_Entry(MENU ,ALL ),
|
|
RW_Entry(META ,ALL ),
|
|
RW_Entry(METADATA ,ALL ),
|
|
RW_Entry(NOBR ,IEXPn ),
|
|
RW_Entry(NOFRAMES ,IEXP3 ), // framesets
|
|
RW_Entry(NOSCRIPT ,IE40 ), // IE4 only
|
|
RW_Entry(OBJECT ,IEXP3 ), // ActiveX
|
|
RW_Entry(OL ,ALL ),
|
|
RW_Entry(OPTION ,ALL ), // forms
|
|
RW_Entry(P ,ALL ),
|
|
RW_Entry(PARAM ,IEXP3 ), // ActiveX
|
|
RW_Entry(PLAINTEXT ,ALL ), // RFC 1866: deprecated, noted as obsolete
|
|
RW_Entry(PRE ,ALL ),
|
|
RW_Entry(S ,IEXPn ), // (apparently) synonym for strike
|
|
RW_Entry(SAMP ,ALL ),
|
|
RW_Entry(SCRIPT ,IEXP3 ), // ActiveX
|
|
RW_Entry(SELECT ,ALL ),
|
|
RW_Entry(SMALL ,IEXP3 ),
|
|
RW_Entry(SPAN ,IEXP3 ), // tables
|
|
RW_Entry(STRIKE ,IEXPn ), // not in RFC 1866 DTD, but noted as deployed
|
|
RW_Entry(STRONG ,ALL ),
|
|
RW_Entry(STYLE ,IEXP3 ), // HTML 3 stylesheets
|
|
RW_Entry(SUB ,IEXP3 ), // HTML3 ???
|
|
RW_Entry(SUP ,IEXP3 ), // HTML3 ???
|
|
RW_Entry(TABLE ,IEXPn ), // tables
|
|
RW_Entry(TBODY ,IEXP3 ), // HTML 3 tables
|
|
RW_Entry(TD ,IEXPn ), // tables
|
|
RW_Entry(TEXTAREA ,ALL ), // forms
|
|
RW_Entry(TFOOT ,IEXP3 ), // HTML 3 tables
|
|
RW_Entry(TH ,IEXPn ), // tables
|
|
RW_Entry(THEAD ,IEXP3 ), // HTML 3 tables
|
|
RW_Entry(TITLE ,ALL ),
|
|
RW_Entry(TR ,IEXPn ), // tables
|
|
RW_Entry(TT ,ALL ),
|
|
RW_Entry(U ,ALL ), // not in RFC 1866 DTD, but noted as deployed
|
|
RW_Entry(UL ,ALL ),
|
|
RW_Entry(VAR ,ALL ),
|
|
RW_Entry(WBR ,IEXPn ),
|
|
RW_Entry(XMP ,ALL ), // deprecated by RFC 1866
|
|
};
|
|
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
// The following array is a mapping of each letter to a position in the
|
|
// table where tokens starting with that letter begin.
|
|
//
|
|
static int _rgIndexElementNames[] = // [Elements]
|
|
{
|
|
/* A */ TokElem_A ,
|
|
/* B */ TokElem_B ,
|
|
/* C */ TokElem_CAPTION ,
|
|
/* D */ TokElem_DD ,
|
|
/* E */ TokElem_EM ,
|
|
/* F */ TokElem_FIELDSET ,
|
|
/* G */ 0 ,
|
|
/* H */ TokElem_H1 ,
|
|
/* I */ TokElem_I ,
|
|
/* J */ 0 ,
|
|
/* K */ TokElem_KBD ,
|
|
/* L */ TokElem_LABEL ,
|
|
/* M */ TokElem_MAP ,
|
|
/* N */ TokElem_NOBR ,
|
|
/* O */ TokElem_OBJECT ,
|
|
/* P */ TokElem_P ,
|
|
/* Q */ 0 ,
|
|
/* R */ 0 ,
|
|
/* S */ TokElem_S ,
|
|
/* T */ TokElem_TABLE ,
|
|
/* U */ TokElem_U ,
|
|
/* V */ TokElem_VAR ,
|
|
/* W */ TokElem_WBR ,
|
|
/* X */ TokElem_XMP ,
|
|
/* Y */ 0 ,
|
|
/* Z */ 0
|
|
};
|
|
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
|
|
//
|
|
// attribute name table
|
|
//
|
|
static ReservedWord _rgAttributeNames[] =
|
|
{// psz cb att
|
|
_T(""), 0, 0,
|
|
RW_Entry(ACCESSKEY ,IEXP3 ),
|
|
RW_Entry(ACTION ,ALL ),
|
|
RW_Entry(ALIGN ,ALL ),
|
|
RW_Entry(ALINK ,IEXPn ),
|
|
RW_Entry(ALT ,ALL ),
|
|
RW_Entry(APPNAME ,IE40 ),
|
|
RW_Entry(APPVERSION ,IE40 ),
|
|
RW_Entry(BACKGROUND ,IEXPn ),
|
|
RW_Entry(BACKGROUNDATTACHMENT ,IE40 ),
|
|
RW_Entry(BACKGROUNDCOLOR ,IE40 ),
|
|
RW_Entry(BACKGROUNDIMAGE ,IE40 ),
|
|
RW_Entry(BACKGROUNDPOSITION ,IE40 ),
|
|
RW_Entry(BACKGROUNDPOSITIONX ,IE40 ),
|
|
RW_Entry(BACKGROUNDPOSITIONY ,IE40 ),
|
|
RW_Entry(BACKGROUNDREPEAT ,IE40 ),
|
|
RW_Entry(BALANCE ,IE40 ),
|
|
RW_Entry(BEHAVIOR ,IEXPn ), // MARQUEE
|
|
RW_Entry(BGCOLOR ,IEXPn ),
|
|
RW_Entry(BGPROPERTIES ,IEXPn ),
|
|
RW_Entry(BORDER ,IEXPn ),
|
|
RW_Entry(BORDERBOTTOM ,IE40 ),
|
|
RW_Entry(BORDERBOTTOMCOLOR ,IE40 ),
|
|
RW_Entry(BORDERBOTTOMSTYLE ,IE40 ),
|
|
RW_Entry(BORDERBOTTOMWIDTH ,IE40 ),
|
|
RW_Entry(BORDERCOLOR ,IEXPn ), // tables
|
|
RW_Entry(BORDERCOLORDARK ,IEXPn ), // tables
|
|
RW_Entry(BORDERCOLORLIGHT ,IEXPn ), // tables
|
|
RW_Entry(BORDERLEFT ,IE40 ),
|
|
RW_Entry(BORDERLEFTCOLOR ,IE40 ),
|
|
RW_Entry(BORDERLEFTSTYLE ,IE40 ),
|
|
RW_Entry(BORDERLEFTWIDTH ,IE40 ),
|
|
RW_Entry(BORDERRIGHT ,IE40 ),
|
|
RW_Entry(BORDERRIGHTCOLOR ,IE40 ),
|
|
RW_Entry(BORDERRIGHTSTYLE ,IE40 ),
|
|
RW_Entry(BORDERRIGHTWIDTH ,IE40 ),
|
|
RW_Entry(BORDERSTYLE ,IE40 ),
|
|
RW_Entry(BORDERTOP ,IE40 ),
|
|
RW_Entry(BORDERTOPCOLOR ,IE40 ),
|
|
RW_Entry(BORDERTOPSTYLE ,IE40 ),
|
|
RW_Entry(BORDERTOPWIDTH ,IE40 ),
|
|
RW_Entry(BORDERWIDTH ,IE40 ),
|
|
RW_Entry(BOTTOMMARGIN ,IEXPn ),
|
|
RW_Entry(BREAKPOINT ,IEXPn ), // (walts) hidden META tag attribute for brkpt mapping.
|
|
RW_Entry(BUFFERDEPTH ,IE40 ),
|
|
RW_Entry(BUTTON ,IE40 ),
|
|
RW_Entry(CANCELBUBBLE ,IE40 ),
|
|
RW_Entry(CELLPADDING ,IEXPn ), // tables
|
|
RW_Entry(CELLSPACING ,IEXPn ), // tables
|
|
RW_Entry(CENTER ,IEXPn ),
|
|
RW_Entry(CHARSET ,IE40 ),
|
|
RW_Entry(CHECKED ,ALL ),
|
|
RW_Entry(CLASS ,IEXPn ),
|
|
RW_Entry(CLASSID ,IEXP3 ), //objects
|
|
RW_Entry(CLASSNAME ,IE40 ),
|
|
RW_Entry(CLEAR ,IEXP3 ),
|
|
RW_Entry(CLIP ,IE40 ),
|
|
RW_Entry(CODE ,IEXPn ),
|
|
RW_Entry(CODEBASE ,IEXP3 ), //objects
|
|
RW_Entry(CODETYPE ,IE40 ),
|
|
RW_Entry(COLOR ,IEXPn ), // font
|
|
RW_Entry(COLORDEPTH ,IE40 ),
|
|
RW_Entry(COLS ,ALL ),
|
|
RW_Entry(COLSPAN ,IEXPn ), // tables
|
|
RW_Entry(COMPACT ,ALL ),
|
|
RW_Entry(COMPLETE ,IE40 ),
|
|
RW_Entry(CONTENT ,ALL ),
|
|
RW_Entry(CONTROLS ,IEXPn ),
|
|
RW_Entry(COOKIE ,IE40 ),
|
|
RW_Entry(COOKIEENABLED ,IE40 ),
|
|
RW_Entry(COORDS ,IEXPn ),
|
|
RW_Entry(CSSTEXT ,IE40 ),
|
|
RW_Entry(CTRLKEY ,IE40 ),
|
|
RW_Entry(CURSOR ,IE40 ),
|
|
RW_Entry(DATA ,IEXP3 ), //objects
|
|
RW_Entry(DATAFLD ,IE40 ),
|
|
RW_Entry(DATAFORMATAS ,IE40 ),
|
|
RW_Entry(DATAPAGESIZE ,IE40 ),
|
|
RW_Entry(DATASRC ,IE40 ),
|
|
RW_Entry(DECLARE ,IEXP3 ), //objects
|
|
RW_Entry(DEFAULTCHECKED ,IE40 ),
|
|
RW_Entry(DEFAULTSELECTED ,IE40 ),
|
|
RW_Entry(DEFAULTSTATUS ,IE40 ),
|
|
RW_Entry(DEFAULTVALUE ,IE40 ),
|
|
RW_Entry(DIALOGARGUMENTS ,IE40 ),
|
|
RW_Entry(DIALOGHEIGHT ,IE40 ),
|
|
RW_Entry(DIALOGLEFT ,IE40 ),
|
|
RW_Entry(DIALOGTOP ,IE40 ),
|
|
RW_Entry(DIALOGWIDTH ,IE40 ),
|
|
RW_Entry(DIR ,IEXP3 ), // HTML 3 ???
|
|
RW_Entry(DIRECTION ,IEXPn ), // MARQUEE
|
|
RW_Entry(DISABLED ,IE40 ),
|
|
RW_Entry(DISPLAY ,IE40 ),
|
|
RW_Entry(DOMAIN ,IE40 ),
|
|
RW_Entry(DYNSRC ,IEXPn ),
|
|
RW_Entry(ENCODING ,IE40 ),
|
|
RW_Entry(ENCTYPE ,ALL ),
|
|
RW_Entry(ENDSPAN ,IE40 ), // Designer control tags
|
|
RW_Entry(ENDSPAN-- ,IE40 ), // Designer control tags HACK to handle nonspace
|
|
RW_Entry(EVENT ,IEXP3 ), // ActiveX <SCRIPT>
|
|
RW_Entry(FACE ,IEXPn ), // font
|
|
RW_Entry(FGCOLOR ,IE40 ),
|
|
RW_Entry(FILTER ,IE40 ),
|
|
RW_Entry(FONT ,IE40 ),
|
|
RW_Entry(FONTFAMILY ,IE40 ),
|
|
RW_Entry(FONTSIZE ,IE40 ),
|
|
RW_Entry(FONTSTYLE ,IE40 ),
|
|
RW_Entry(FONTVARIANT ,IE40 ),
|
|
RW_Entry(FONTWEIGHT ,IE40 ),
|
|
RW_Entry(FOR ,IEXP3 ), // ActiveX <SCRIPT>
|
|
RW_Entry(FORM ,IE40 ),
|
|
RW_Entry(FRAME ,IE40 ),
|
|
RW_Entry(FRAMEBORDER ,IEXP3 ),
|
|
RW_Entry(FRAMESPACING ,IEXP3 ),
|
|
RW_Entry(FROMELEMENT ,IE40 ),
|
|
RW_Entry(HASH ,IE40 ),
|
|
RW_Entry(HEIGHT ,IEXPn ),
|
|
RW_Entry(HIDDEN ,IE40 ),
|
|
RW_Entry(HOST ,IE40 ),
|
|
RW_Entry(HOSTNAME ,IE40 ),
|
|
RW_Entry(HREF ,ALL ),
|
|
RW_Entry(HSPACE ,IEXPn ),
|
|
RW_Entry(HTMLFOR ,IE40 ),
|
|
RW_Entry(HTMLTEXT ,IE40 ),
|
|
RW_Entry(HTTP-EQUIV ,ALL ),
|
|
RW_Entry(HTTPEQUIV ,IE40 ),
|
|
RW_Entry(ID ,IEXPn ),
|
|
RW_Entry(IN ,IEXP3 ), // ActiveX <SCRIPT>
|
|
RW_Entry(INDETERMINATE ,IE40 ),
|
|
RW_Entry(INDEX ,IE40 ),
|
|
RW_Entry(ISMAP ,ALL ),
|
|
RW_Entry(LANG ,IEXPn ),
|
|
RW_Entry(LANGUAGE ,IEXP3 ),
|
|
RW_Entry(LEFTMARGIN ,IEXPn ),
|
|
RW_Entry(LENGTH ,IE40 ),
|
|
RW_Entry(LETTERSPACING ,IE40 ),
|
|
RW_Entry(LINEHEIGHT ,IE40 ),
|
|
RW_Entry(LINK ,IEXPn ),
|
|
RW_Entry(LINKCOLOR ,IE40 ),
|
|
RW_Entry(LISTSTYLE ,IE40 ),
|
|
RW_Entry(LISTSTYLEIMAGE ,IE40 ),
|
|
RW_Entry(LISTSTYLEPOSITION ,IE40 ),
|
|
RW_Entry(LISTSTYLETYPE ,IE40 ),
|
|
RW_Entry(LOCATION ,IE40 ),
|
|
RW_Entry(LOOP ,IEXPn ),
|
|
RW_Entry(LOWSRC ,IE40 ),
|
|
RW_Entry(MAP ,IE40 ),
|
|
RW_Entry(MARGIN ,IE40 ),
|
|
RW_Entry(MARGINBOTTOM ,IE40 ),
|
|
RW_Entry(MARGINHEIGHT ,IEXP3 ),
|
|
RW_Entry(MARGINLEFT ,IE40 ),
|
|
RW_Entry(MARGINRIGHT ,IE40 ),
|
|
RW_Entry(MARGINTOP ,IE40 ),
|
|
RW_Entry(MARGINWIDTH ,IEXP3 ),
|
|
RW_Entry(MAXLENGTH ,ALL ),
|
|
RW_Entry(METHOD ,ALL ),
|
|
RW_Entry(METHODS ,ALL ),
|
|
RW_Entry(MIMETYPES ,IE40 ),
|
|
RW_Entry(MULTIPLE ,ALL ),
|
|
RW_Entry(NAME ,ALL ),
|
|
RW_Entry(NOHREF ,IEXPn ),
|
|
RW_Entry(NORESIZE ,IEXP3 ),
|
|
RW_Entry(NOSHADE ,IEXP3 ), // not implemented by IExplore 2
|
|
RW_Entry(NOWRAP ,IEXPn ),
|
|
RW_Entry(OBJECT ,IEXP3 ), // <PARAM>
|
|
RW_Entry(OFFSCREENBUFFERING ,IE40 ),
|
|
RW_Entry(OFFSETHEIGHT ,IE40 ),
|
|
RW_Entry(OFFSETLEFT ,IE40 ),
|
|
RW_Entry(OFFSETPARENT ,IE40 ),
|
|
RW_Entry(OFFSETTOP ,IE40 ),
|
|
RW_Entry(OFFSETWIDTH ,IE40 ),
|
|
RW_Entry(OFFSETX ,IE40 ),
|
|
RW_Entry(OFFSETY ,IE40 ),
|
|
RW_Entry(ONABORT ,IE40 ),
|
|
RW_Entry(ONAFTERUPDATE ,IE40 ),
|
|
RW_Entry(ONBEFOREUNLOAD ,IE40 ),
|
|
RW_Entry(ONBEFOREUPDATE ,IE40 ),
|
|
RW_Entry(ONBLUR ,IEXP3 ), // SELECT, INPUT, TEXTAREA
|
|
RW_Entry(ONBOUNCE ,IE40 ),
|
|
RW_Entry(ONCHANGE ,IEXP3 ), // SELECT, INPUT, TEXTAREA
|
|
RW_Entry(ONCLICK ,IEXP3 ), // INPUT, A, <more>
|
|
RW_Entry(ONDATAAVAILABLE ,IE40 ),
|
|
RW_Entry(ONDATASETCHANGED ,IE40 ),
|
|
RW_Entry(ONDATASETCOMPLETE ,IE40 ),
|
|
RW_Entry(ONDBLCLICK ,IE40 ),
|
|
RW_Entry(ONDRAGSTART ,IE40 ),
|
|
RW_Entry(ONERROR ,IE40 ),
|
|
RW_Entry(ONERRORUPDATE ,IE40 ),
|
|
RW_Entry(ONFILTERCHANGE ,IE40 ),
|
|
RW_Entry(ONFINISH ,IE40 ),
|
|
RW_Entry(ONFOCUS ,IEXP3 ), // SELECT, INPUT, TEXTAREA
|
|
RW_Entry(ONHELP ,IE40 ),
|
|
RW_Entry(ONKEYDOWN ,IE40 ),
|
|
RW_Entry(ONKEYPRESS ,IE40 ),
|
|
RW_Entry(ONKEYUP ,IE40 ),
|
|
RW_Entry(ONLOAD ,IEXP3 ), // FRAMESET, BODY
|
|
RW_Entry(ONMOUSEOUT ,IEXP3 ), // A, AREA, <more>
|
|
RW_Entry(ONMOUSEOVER ,IEXP3 ), // A, AREA, <more>
|
|
RW_Entry(ONMOUSEUP ,IE40 ),
|
|
RW_Entry(ONREADYSTATECHANGE ,IE40 ),
|
|
RW_Entry(ONRESET ,IE40 ),
|
|
RW_Entry(ONRESIZE ,IE40 ),
|
|
RW_Entry(ONROWENTER ,IE40 ),
|
|
RW_Entry(ONROWEXIT ,IE40 ),
|
|
RW_Entry(ONSCROLL ,IE40 ),
|
|
RW_Entry(ONSELECT ,IEXP3 ), // INPUT, TEXTAREA
|
|
RW_Entry(ONSELECTSTART ,IE40 ),
|
|
RW_Entry(ONSUBMIT ,IEXP3 ), // FORM
|
|
RW_Entry(ONUNLOAD ,IEXP3 ), // FRAMESET, BODY
|
|
RW_Entry(OPENER ,IE40 ),
|
|
RW_Entry(OUTERHTML ,IE40 ),
|
|
RW_Entry(OUTERTEXT ,IE40 ),
|
|
RW_Entry(OUTLINE ,IEXP3 ),
|
|
RW_Entry(OVERFLOW ,IE40 ),
|
|
RW_Entry(OWNINGELEMENT ,IE40 ),
|
|
RW_Entry(PADDING ,IE40 ),
|
|
RW_Entry(PADDINGBOTTOM ,IE40 ),
|
|
RW_Entry(PADDINGLEFT ,IE40 ),
|
|
RW_Entry(PADDINGRIGHT ,IE40 ),
|
|
RW_Entry(PADDINGTOP ,IE40 ),
|
|
RW_Entry(PAGEBREAKAFTER ,IE40 ),
|
|
RW_Entry(PAGEBREAKBEFORE ,IE40 ),
|
|
RW_Entry(PALETTE ,IE40 ),
|
|
RW_Entry(PARENT ,IE40 ),
|
|
RW_Entry(PARENTELEMENT ,IE40 ),
|
|
RW_Entry(PARENTSTYLESHEET ,IE40 ),
|
|
RW_Entry(PARENTTEXTEDIT ,IE40 ),
|
|
RW_Entry(PARENTWINDOW ,IE40 ),
|
|
RW_Entry(PATHNAME ,IE40 ),
|
|
RW_Entry(PIXELHEIGHT ,IE40 ),
|
|
RW_Entry(PIXELLEFT ,IE40 ),
|
|
RW_Entry(PIXELTOP ,IE40 ),
|
|
RW_Entry(PIXELWIDTH ,IE40 ),
|
|
RW_Entry(PLUGINS ,IE40 ),
|
|
RW_Entry(PLUGINSPAGE ,IE40 ),
|
|
RW_Entry(PORT ,IE40 ),
|
|
RW_Entry(POSHEIGHT ,IE40 ),
|
|
RW_Entry(POSITION ,IE40 ),
|
|
RW_Entry(POSLEFT ,IE40 ),
|
|
RW_Entry(POSTOP ,IE40 ),
|
|
RW_Entry(POSWIDTH ,IE40 ),
|
|
RW_Entry(PROMPT ,IEXPn ),
|
|
RW_Entry(PROTOCOL ,IE40 ),
|
|
RW_Entry(READONLY ,IE40 ),
|
|
RW_Entry(READYSTATE ,IE40 ),
|
|
RW_Entry(REASON ,IE40 ),
|
|
RW_Entry(RECORDNUMBER ,IE40 ),
|
|
RW_Entry(RECORDSET ,IE40 ),
|
|
RW_Entry(REF ,IEXP3 ),
|
|
RW_Entry(REFERRER ,IE40 ),
|
|
RW_Entry(REL ,ALL ),
|
|
RW_Entry(RETURNVALUE ,IE40 ),
|
|
RW_Entry(REV ,ALL ),
|
|
RW_Entry(RIGHTMARGIN ,IEXPn ),
|
|
RW_Entry(ROWS ,ALL ),
|
|
RW_Entry(ROWSPAN ,IEXPn ), // tables
|
|
RW_Entry(RULES ,IEXP3 ),
|
|
RW_Entry(RUNAT ,IEXP3 ), // SCRIPT
|
|
RW_Entry(SCREENX ,IE40 ),
|
|
RW_Entry(SCREENY ,IE40 ),
|
|
RW_Entry(SCRIPTENGINE ,IEXP3 ),
|
|
RW_Entry(SCROLL ,IE40 ),
|
|
RW_Entry(SCROLLAMOUNT ,IEXPn ), // MARQUEE
|
|
RW_Entry(SCROLLDELAY ,IEXPn ), // MARQUEE
|
|
RW_Entry(SCROLLHEIGHT ,IE40 ),
|
|
RW_Entry(SCROLLING ,IEXP3 ), // frameset
|
|
RW_Entry(SCROLLLEFT ,IE40 ),
|
|
RW_Entry(SCROLLTOP ,IE40 ),
|
|
RW_Entry(SCROLLWIDTH ,IE40 ),
|
|
RW_Entry(SEARCH ,IE40 ),
|
|
RW_Entry(SELECTED ,ALL ),
|
|
RW_Entry(SELECTEDINDEX ,IE40 ),
|
|
RW_Entry(SELF ,IE40 ),
|
|
RW_Entry(SHAPE ,IEXPn ),
|
|
RW_Entry(SHAPES ,IEXP3 ), //objects
|
|
RW_Entry(SHIFTKEY ,IE40 ),
|
|
RW_Entry(SIZE ,ALL ),
|
|
RW_Entry(SOURCEINDEX ,IE40 ),
|
|
RW_Entry(SPAN ,IEXP3 ),
|
|
RW_Entry(SRC ,ALL ),
|
|
RW_Entry(SRCELEMENT ,IE40 ),
|
|
RW_Entry(SRCFILTER ,IE40 ),
|
|
RW_Entry(STANDBY ,IEXP3 ), //objects
|
|
RW_Entry(START ,IEXPn ),
|
|
RW_Entry(STARTSPAN ,ALL ), // Designer control tags
|
|
RW_Entry(STATUS ,IE40 ),
|
|
RW_Entry(STYLE ,IEXP3 ),
|
|
RW_Entry(STYLEFLOAT ,IE40 ),
|
|
RW_Entry(TABINDEX ,IEXP3 ),
|
|
RW_Entry(TAGNAME ,IE40 ),
|
|
RW_Entry(TARGET ,IEXP3 ),
|
|
RW_Entry(TEXT ,IEXPn ),
|
|
RW_Entry(TEXTALIGN ,IE40 ),
|
|
RW_Entry(TEXTDECORATION ,IE40 ),
|
|
RW_Entry(TEXTDECORATIONBLINK ,IE40 ),
|
|
RW_Entry(TEXTDECORATIONLINETHROUGH ,IE40 ),
|
|
RW_Entry(TEXTDECORATIONNONE ,IE40 ),
|
|
RW_Entry(TEXTDECORATIONOVERLINE ,IE40 ),
|
|
RW_Entry(TEXTDECORATIONUNDERLINE ,IE40 ),
|
|
RW_Entry(TEXTINDENT ,IE40 ),
|
|
RW_Entry(TEXTTRANSFORM ,IE40 ),
|
|
RW_Entry(TITLE ,ALL ),
|
|
RW_Entry(TOELEMENT ,IE40 ),
|
|
RW_Entry(TOP ,IE40 ),
|
|
RW_Entry(TOPMARGIN ,IEXPn ),
|
|
RW_Entry(TRUESPEED ,IE40 ),
|
|
RW_Entry(TYPE ,IEXPn ),
|
|
RW_Entry(UPDATEINTERVAL ,IE40 ),
|
|
RW_Entry(URL ,IEXP3 ),
|
|
RW_Entry(URN ,ALL ),
|
|
RW_Entry(USEMAP ,IEXPn ),
|
|
RW_Entry(USERAGENT ,IE40 ),
|
|
RW_Entry(VALIGN ,IEXPn ),
|
|
RW_Entry(VALUE ,ALL ),
|
|
RW_Entry(VERSION ,IEXP3 ), // HTML
|
|
RW_Entry(VERTICALALIGN ,IE40 ),
|
|
RW_Entry(VIEWASTEXT ,ALL ), // ViewAsText for AspView only
|
|
RW_Entry(VISIBILITY ,IE40 ),
|
|
RW_Entry(VLINK ,IEXPn ),
|
|
RW_Entry(VLINKCOLOR ,IE40 ),
|
|
RW_Entry(VOLUME ,IE40 ),
|
|
RW_Entry(VRML ,IEXPn ),
|
|
RW_Entry(VSPACE ,IEXPn ),
|
|
RW_Entry(WIDTH ,ALL ),
|
|
RW_Entry(WRAP ,IEXP3 ),
|
|
RW_Entry(X ,IE40 ),
|
|
RW_Entry(Y ,IE40 ),
|
|
RW_Entry(ZINDEX ,IE40 ),
|
|
};
|
|
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
static int _rgIndexAttributeNames[] = // [Attributes]
|
|
{
|
|
/* A */ TokAttrib_ACCESSKEY ,
|
|
/* B */ TokAttrib_BACKGROUND ,
|
|
/* C */ TokAttrib_CANCELBUBBLE ,
|
|
/* D */ TokAttrib_DATA ,
|
|
/* E */ TokAttrib_ENCODING ,
|
|
/* F */ TokAttrib_FACE ,
|
|
/* G */ 0 ,
|
|
/* H */ TokAttrib_HASH ,
|
|
/* I */ TokAttrib_ID ,
|
|
/* J */ 0 ,
|
|
/* K */ 0 ,
|
|
/* L */ TokAttrib_LANG ,
|
|
/* M */ TokAttrib_MAP ,
|
|
/* N */ TokAttrib_NAME ,
|
|
/* O */ TokAttrib_OBJECT ,
|
|
/* P */ TokAttrib_PADDING ,
|
|
/* Q */ 0 ,
|
|
/* R */ TokAttrib_READONLY ,
|
|
/* S */ TokAttrib_SCREENX ,
|
|
/* T */ TokAttrib_TABINDEX ,
|
|
/* U */ TokAttrib_UPDATEINTERVAL ,
|
|
/* V */ TokAttrib_VALIGN ,
|
|
/* W */ TokAttrib_WIDTH ,
|
|
/* X */ TokAttrib_X ,
|
|
/* Y */ TokAttrib_Y ,
|
|
/* Z */ TokAttrib_ZINDEX
|
|
};
|
|
|
|
//
|
|
// Entities
|
|
//
|
|
// ALL - Basic - RFC 1866, 9.7.1. Numeric and Special Graphic Entity Set
|
|
// ALL - ISO Latin 1 - RFC 1866, 9.7.2. ISO Latin 1 Character Entity Set
|
|
// IEXPn - ISO Latin 1 Added - RFC 1866, 14. Proposed Entities
|
|
//
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
static ReservedWord _rgEntity[] =
|
|
{
|
|
_T(""), 0, 0,
|
|
_T("AElig"), 5, ALL, // <!ENTITY AElig CDATA "Æ") -- capital AE diphthong (ligature) -->
|
|
_T("Aacute"), 6, ALL, // <!ENTITY Aacute CDATA "Á") -- capital A, acute accent -->
|
|
_T("Acirc"), 5, ALL, // <!ENTITY Acirc CDATA "Â") -- capital A, circumflex accent -->
|
|
_T("Agrave"), 6, ALL, // <!ENTITY Agrave CDATA "À") -- capital A, grave accent -->
|
|
_T("Aring"), 5, ALL, // <!ENTITY Aring CDATA "Å") -- capital A, ring -->
|
|
_T("Atilde"), 6, ALL, // <!ENTITY Atilde CDATA "Ã") -- capital A, tilde -->
|
|
_T("Auml"), 4, ALL, // <!ENTITY Auml CDATA "Ä") -- capital A, dieresis or umlaut mark -->
|
|
_T("Ccedil"), 6, ALL, // <!ENTITY Ccedil CDATA "Ç") -- capital C, cedilla -->
|
|
_T("ETH"), 3, ALL, // <!ENTITY ETH CDATA "Ð") -- capital Eth, Icelandic -->
|
|
_T("Eacute"), 6, ALL, // <!ENTITY Eacute CDATA "É") -- capital E, acute accent -->
|
|
_T("Ecirc"), 5, ALL, // <!ENTITY Ecirc CDATA "Ê") -- capital E, circumflex accent -->
|
|
_T("Egrave"), 6, ALL, // <!ENTITY Egrave CDATA "È") -- capital E, grave accent -->
|
|
_T("Euml"), 4, ALL, // <!ENTITY Euml CDATA "Ë") -- capital E, dieresis or umlaut mark -->
|
|
_T("Iacute"), 6, ALL, // <!ENTITY Iacute CDATA "Í") -- capital I, acute accent -->
|
|
_T("Icirc"), 5, ALL, // <!ENTITY Icirc CDATA "Î") -- capital I, circumflex accent -->
|
|
_T("Igrave"), 6, ALL, // <!ENTITY Igrave CDATA "Ì") -- capital I, grave accent -->
|
|
_T("Iuml"), 4, ALL, // <!ENTITY Iuml CDATA "Ï") -- capital I, dieresis or umlaut mark -->
|
|
_T("Ntilde"), 6, ALL, // <!ENTITY Ntilde CDATA "Ñ") -- capital N, tilde -->
|
|
_T("Oacute"), 6, ALL, // <!ENTITY Oacute CDATA "Ó") -- capital O, acute accent -->
|
|
_T("Ocirc"), 5, ALL, // <!ENTITY Ocirc CDATA "Ô") -- capital O, circumflex accent -->
|
|
_T("Ograve"), 6, ALL, // <!ENTITY Ograve CDATA "Ò") -- capital O, grave accent -->
|
|
_T("Oslash"), 6, ALL, // <!ENTITY Oslash CDATA "Ø") -- capital O, slash -->
|
|
_T("Otilde"), 6, ALL, // <!ENTITY Otilde CDATA "Õ") -- capital O, tilde -->
|
|
_T("Ouml"), 4, ALL, // <!ENTITY Ouml CDATA "Ö") -- capital O, dieresis or umlaut mark -->
|
|
_T("THORN"), 5, ALL, // <!ENTITY THORN CDATA "Þ") -- capital THORN, Icelandic -->
|
|
_T("Uacute"), 6, ALL, // <!ENTITY Uacute CDATA "Ú") -- capital U, acute accent -->
|
|
_T("Ucirc"), 5, ALL, // <!ENTITY Ucirc CDATA "Û") -- capital U, circumflex accent -->
|
|
_T("Ugrave"), 6, ALL, // <!ENTITY Ugrave CDATA "Ù") -- capital U, grave accent -->
|
|
_T("Uuml"), 4, ALL, // <!ENTITY Uuml CDATA "Ü") -- capital U, dieresis or umlaut mark -->
|
|
_T("Yacute"), 6, ALL, // <!ENTITY Yacute CDATA "Ý") -- capital Y, acute accent -->
|
|
_T("aacute"), 6, ALL, // <!ENTITY aacute CDATA "á") -- small a, acute accent -->
|
|
_T("acirc"), 5, ALL, // <!ENTITY acirc CDATA "â") -- small a, circumflex accent -->
|
|
_T("acute"), 5, IEXPn, // <!ENTITY acute CDATA "´") -- acute accent -->
|
|
_T("aelig"), 5, ALL, // <!ENTITY aelig CDATA "æ") -- small ae diphthong (ligature) -->
|
|
_T("agrave"), 6, ALL, // <!ENTITY agrave CDATA "à") -- small a, grave accent -->
|
|
_T("amp"), 3, ALL,
|
|
_T("aring"), 5, ALL, // <!ENTITY aring CDATA "å") -- small a, ring -->
|
|
_T("atilde"), 6, ALL, // <!ENTITY atilde CDATA "ã") -- small a, tilde -->
|
|
_T("auml"), 4, ALL, // <!ENTITY auml CDATA "ä") -- small a, dieresis or umlaut mark -->
|
|
_T("brvbar"), 6, IEXPn, // <!ENTITY brvbar CDATA "¦") -- broken (vertical) bar -->
|
|
_T("ccedil"), 6, ALL, // <!ENTITY ccedil CDATA "ç") -- small c, cedilla -->
|
|
_T("cedil"), 5, IEXPn, // <!ENTITY cedil CDATA "¸") -- cedilla -->
|
|
_T("cent"), 4, IEXPn, // <!ENTITY cent CDATA "¢") -- cent sign -->
|
|
_T("copy"), 4, IEXPn, // <!ENTITY copy CDATA "©") -- copyright sign -->
|
|
_T("curren"), 6, IEXPn, // <!ENTITY curren CDATA "¤") -- general currency sign -->
|
|
_T("deg"), 3, IEXPn, // <!ENTITY deg CDATA "°") -- degree sign -->
|
|
_T("divide"), 6, IEXPn, // <!ENTITY divide CDATA "÷") -- divide sign -->
|
|
_T("eacute"), 6, ALL, // <!ENTITY eacute CDATA "é") -- small e, acute accent -->
|
|
_T("ecirc"), 5, ALL, // <!ENTITY ecirc CDATA "ê") -- small e, circumflex accent -->
|
|
_T("egrave"), 6, ALL, // <!ENTITY egrave CDATA "è") -- small e, grave accent -->
|
|
_T("eth"), 3, ALL, // <!ENTITY eth CDATA "ð") -- small eth, Icelandic -->
|
|
_T("euml"), 4, ALL, // <!ENTITY euml CDATA "ë") -- small e, dieresis or umlaut mark -->
|
|
_T("frac12"), 6, IEXPn, // <!ENTITY frac12 CDATA "½") -- fraction one-half -->
|
|
_T("frac14"), 6, IEXPn, // <!ENTITY frac14 CDATA "¼") -- fraction one-quarter -->
|
|
_T("frac34"), 6, IEXPn, // <!ENTITY frac34 CDATA "¾") -- fraction three-quarters -->
|
|
_T("gt"), 2, ALL,
|
|
_T("iacute"), 6, ALL, // <!ENTITY iacute CDATA "í") -- small i, acute accent -->
|
|
_T("icirc"), 5, ALL, // <!ENTITY icirc CDATA "î") -- small i, circumflex accent -->
|
|
_T("iexcl"), 5, IEXPn, // <!ENTITY iexcl CDATA "¡") -- inverted exclamation mark -->
|
|
_T("igrave"), 6, ALL, // <!ENTITY igrave CDATA "ì") -- small i, grave accent -->
|
|
_T("iquest"), 6, IEXPn, // <!ENTITY iquest CDATA "¿") -- inverted question mark -->
|
|
_T("iuml"), 4, ALL, // <!ENTITY iuml CDATA "ï") -- small i, dieresis or umlaut mark -->
|
|
_T("laquo"), 5, IEXPn, // <!ENTITY laquo CDATA "«") -- angle quotation mark, left -->
|
|
_T("lt"), 2, ALL,
|
|
_T("macr"), 4, IEXPn, // <!ENTITY macr CDATA "¯") -- macron -->
|
|
_T("micro"), 5, IEXPn, // <!ENTITY micro CDATA "µ") -- micro sign -->
|
|
_T("middot"), 6, IEXPn, // <!ENTITY middot CDATA "·") -- middle dot -->
|
|
_T("nbsp"), 4, IEXPn, // <!ENTITY nbsp CDATA " ") -- no-break space -->
|
|
_T("not"), 3, IEXPn, // <!ENTITY not CDATA "¬") -- not sign -->
|
|
_T("ntilde"), 6, ALL, // <!ENTITY ntilde CDATA "ñ") -- small n, tilde -->
|
|
_T("oacute"), 6, ALL, // <!ENTITY oacute CDATA "ó") -- small o, acute accent -->
|
|
_T("ocirc"), 5, ALL, // <!ENTITY ocirc CDATA "ô") -- small o, circumflex accent -->
|
|
_T("ograve"), 6, ALL, // <!ENTITY ograve CDATA "ò") -- small o, grave accent -->
|
|
_T("ordf"), 4, IEXPn, // <!ENTITY ordf CDATA "ª") -- ordinal indicator, feminine -->
|
|
_T("ordm"), 4, IEXPn, // <!ENTITY ordm CDATA "º") -- ordinal indicator, masculine -->
|
|
_T("oslash"), 6, ALL, // <!ENTITY oslash CDATA "ø") -- small o, slash -->
|
|
_T("otilde"), 6, ALL, // <!ENTITY otilde CDATA "õ") -- small o, tilde -->
|
|
_T("ouml"), 4, ALL, // <!ENTITY ouml CDATA "ö") -- small o, dieresis or umlaut mark -->
|
|
_T("para"), 4, IEXPn, // <!ENTITY para CDATA "¶") -- pilcrow (paragraph sign) -->
|
|
_T("plusmn"), 6, IEXPn, // <!ENTITY plusmn CDATA "±") -- plus-or-minus sign -->
|
|
_T("pound"), 5, IEXPn, // <!ENTITY pound CDATA "£") -- pound sterling sign -->
|
|
_T("quot"), 4, ALL,
|
|
_T("raquo"), 5, IEXPn, // <!ENTITY raquo CDATA "»") -- angle quotation mark, right -->
|
|
_T("reg"), 3, IEXPn, // <!ENTITY reg CDATA "®") -- registered sign -->
|
|
_T("sect"), 4, IEXPn, // <!ENTITY sect CDATA "§") -- section sign -->
|
|
_T("shy"), 3, IEXPn, // <!ENTITY shy CDATA "­") -- soft hyphen -->
|
|
_T("sup1"), 4, IEXPn, // <!ENTITY sup1 CDATA "¹") -- superscript one -->
|
|
_T("sup2"), 4, IEXPn, // <!ENTITY sup2 CDATA "²") -- superscript two -->
|
|
_T("sup3"), 4, IEXPn, // <!ENTITY sup3 CDATA "³") -- superscript three -->
|
|
_T("szlig"), 5, ALL, // <!ENTITY szlig CDATA "ß") -- small sharp s, German (sz ligature)->
|
|
_T("thorn"), 5, ALL, // <!ENTITY thorn CDATA "þ") -- small thorn, Icelandic -->
|
|
_T("times"), 5, IEXPn, // <!ENTITY times CDATA "×") -- multiply sign -->
|
|
_T("uacute"), 6, ALL, // <!ENTITY uacute CDATA "ú") -- small u, acute accent -->
|
|
_T("ucirc"), 5, ALL, // <!ENTITY ucirc CDATA "û") -- small u, circumflex accent -->
|
|
_T("ugrave"), 6, ALL, // <!ENTITY ugrave CDATA "ù") -- small u, grave accent -->
|
|
_T("uml"), 3, IEXPn, // <!ENTITY uml CDATA "¨") -- umlaut (dieresis) -->
|
|
_T("uuml"), 4, ALL, // <!ENTITY uuml CDATA "ü") -- small u, dieresis or umlaut mark -->
|
|
_T("yacute"), 6, ALL, // <!ENTITY yacute CDATA "ý") -- small y, acute accent -->
|
|
_T("yen"), 3, IEXPn, // <!ENTITY yen CDATA "¥") -- yen sign -->
|
|
_T("yuml"), 4, ALL, // <!ENTITY yuml CDATA "ÿ") -- small y, dieresis or umlaut mark -->
|
|
|
|
};
|
|
|
|
// If you modify the element, attribute, or entity tables, then you MUST
|
|
// update Token.h.
|
|
static int _rgIndexEntity[] =
|
|
{
|
|
// A B C D E F G H I J K L M
|
|
1, 0, 8, 0, 9, 0, 0, 0, 14, 0, 0, 0, 0,
|
|
// N O P Q R S T U V W X Y Z
|
|
18, 19, 0, 0, 0, 0, 25, 26, 0, 0, 0, 30, 0,
|
|
// a b c d e f g h i j k l m
|
|
31, 40, 41, 46, 48, 53, 56, 0, 57, 0, 0, 63, 65,
|
|
// n o p q r s t u v w x y z
|
|
68, 71, 79, 82, 83, 85, 91, 93, 0, 0, 0, 98, 0
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//
|
|
//
|
|
// int LookupLinearKeyword
|
|
//
|
|
// Description:
|
|
// Does the lookup in the given table.
|
|
// Returns index into table if found, NOT_FOUND otw.
|
|
//
|
|
int LookupLinearKeyword
|
|
(
|
|
ReservedWord *rwTable,
|
|
int cel,
|
|
RWATT_T att,
|
|
LPCTSTR pchLine,
|
|
int cbLen,
|
|
BOOL bCase /* = NOCASE */
|
|
)
|
|
{
|
|
int iTable = 0;
|
|
ASSERT(cel > 0);
|
|
|
|
PFNNCMP pfnNCmp = bCase ? (_tcsncmp) : (_tcsnicmp);
|
|
|
|
do
|
|
{
|
|
int Cmp;
|
|
if (0 == (Cmp = pfnNCmp(pchLine, rwTable[iTable].psz, cbLen)) &&
|
|
(cbLen == rwTable[iTable].cb))
|
|
return (0 != (rwTable[iTable].att & att)) ? iTable : NOT_FOUND;
|
|
else if (Cmp < 0)
|
|
return NOT_FOUND;
|
|
else
|
|
iTable++;
|
|
} while (iTable < cel);
|
|
return NOT_FOUND;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// LookupIndexedKeyword()
|
|
//
|
|
int LookupIndexedKeyword
|
|
(
|
|
ReservedWord *rwTable,
|
|
int cel,
|
|
int * indexTable,
|
|
RWATT_T att,
|
|
LPCTSTR pchLine,
|
|
int cbLen,
|
|
BOOL bCase /* = NOCASE */
|
|
)
|
|
{
|
|
// lookup table:
|
|
int iTable;
|
|
int index = PeekIndex(*pchLine, bCase);
|
|
if (index < 0)
|
|
return NOT_FOUND;
|
|
else
|
|
iTable = indexTable[index];
|
|
if (0 == iTable)
|
|
return NOT_FOUND;
|
|
int iFound = LookupLinearKeyword(&rwTable[iTable], cel - iTable,
|
|
att, pchLine, cbLen, bCase);
|
|
|
|
return (iFound == NOT_FOUND) ? NOT_FOUND : iTable + iFound;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// hinting table - character classification
|
|
|
|
// HOP
|
|
// () ? , | + [] * =
|
|
// in tag, op
|
|
//
|
|
// HDA
|
|
// - op
|
|
// -- comment
|
|
//
|
|
// HEN
|
|
// & in text, entity ref
|
|
// in tag, op
|
|
//
|
|
// HEP
|
|
// % in tag, parameter entity ref (%name) or op (%WS)
|
|
//
|
|
// HRN
|
|
// # reserved name
|
|
//
|
|
// HTA
|
|
// < tag open
|
|
// </ tag end
|
|
// <! MDO Markup delimiter open
|
|
// <? processing instruction - what's the syntax for a complete PI tag?
|
|
|
|
// Hint table:
|
|
HINT g_hintTable[128] =
|
|
{
|
|
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
|
EOS, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, HWS, ONL, ERR, ERR, ERR, ERR, ERR,
|
|
// 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
|
|
ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR,
|
|
// spc ! " # $ % & ' ( ) * + , - . /
|
|
HWS, ERR, HST, HRN, ERR, HEP, HEN, HSL, OLP, ORP, OST, OPL, OCO, ODA, HKW, HAV,
|
|
// 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
|
|
HNU, HNU, HNU, HNU, HNU, HNU, HNU, HNU, HNU, HNU, ERR, ERR, HTA, OEQ, HTE, OQU,
|
|
// @ A B C D E F G H I J K L M N O
|
|
ERR, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW,
|
|
// P Q R S T U V W X Y Z [ \ ] ^ _
|
|
HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, OLB, HAV, ORB, ERR, HAV,
|
|
// ` a b c d e f g h i j k l m n o
|
|
ERR, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW,
|
|
// p q r s t u v w x y z { | } ~ DEL
|
|
HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, HKW, ERR, OPI, ERR, ERR, ERR
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// content model
|
|
//
|
|
// Map between element / lex state
|
|
//
|
|
|
|
// 0-terminated list
|
|
// if we get more, consider putting text state in element table
|
|
static ELLEX _ElTextStateTable[] =
|
|
{
|
|
_T("COMMENT"), 7, inCOMMENT,
|
|
_T("LISTING"), 7, inLISTING,
|
|
_T("PLAINTEXT"), 9, inPLAINTEXT,
|
|
_T("SCRIPT"), 6, inSCRIPT,
|
|
_T("XMP"), 3, inXMP,
|
|
0, 0, 0
|
|
};
|
|
|
|
DWORD TextStateFromElement(LPCTSTR szEl, int cb)
|
|
{
|
|
int cmp;
|
|
for (ELLEX *pel = _ElTextStateTable; pel->sz != 0; pel++)
|
|
{
|
|
if (0 == (cmp = _tcsnicmp(pel->sz, szEl, cb)))
|
|
{
|
|
if (cb == pel->cb)
|
|
return pel->lxs;
|
|
}
|
|
else if (cmp > 0)
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
ELLEX * pellexFromTextState(DWORD state)
|
|
{
|
|
DWORD t = (state & TEXTMASK); // only want text state bits
|
|
for (ELLEX *pellex = _ElTextStateTable; pellex->lxs != 0; pellex++)
|
|
{
|
|
if (t == pellex->lxs)
|
|
return pellex;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// CStaticTable
|
|
CStaticTable::CStaticTable(RWATT_T att,
|
|
ReservedWord *prgrw,
|
|
UINT cel,
|
|
int *prgi /*= NULL*/,
|
|
BOOL bCase /*= FALSE*/,
|
|
LPCTSTR szName /*= NULL*/)
|
|
: m_att(att), m_prgrw(prgrw), m_cel(cel), m_prgi(prgi), m_bCase(bCase)
|
|
{
|
|
ASSERT(NULL != m_prgrw);
|
|
ASSERT(m_cel > 0);
|
|
ASSERT(0 == CheckWordTable(m_prgrw, cel, szName));
|
|
if (NULL == m_prgi)
|
|
{
|
|
MakeIndex(m_prgrw, m_cel, &m_prgi, m_bCase, szName);
|
|
}
|
|
else
|
|
ASSERT(0 == CheckWordTableIndex(m_prgrw, cel, prgi, m_bCase, szName));
|
|
}
|
|
|
|
int CStaticTable::Find(LPCTSTR pch, int cb)
|
|
{
|
|
return LookupIndexedKeyword(m_prgrw, m_cel, m_prgi, m_att, pch, cb, m_bCase);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
CStaticTableSet::CStaticTableSet(RWATT_T att, UINT nIdName)
|
|
: m_Elements ( att, _rgElementNames, CELEM_ARRAY(_rgElementNames),
|
|
_rgIndexElementNames, NOCASE, szElTag ),
|
|
m_Attributes( att, _rgAttributeNames, CELEM_ARRAY(_rgAttributeNames),
|
|
_rgIndexAttributeNames, NOCASE, szAttTag ),
|
|
m_Entities ( att, _rgEntity, CELEM_ARRAY(_rgEntity),
|
|
_rgIndexEntity, CASE, szEntTag )
|
|
{
|
|
::LoadString( _Module.GetModuleInstance(),
|
|
nIdName,
|
|
m_strName,
|
|
sizeof(m_strName)
|
|
);
|
|
}
|
|
|
|
int CStaticTableSet::FindElement(LPCTSTR pch, int cb)
|
|
{
|
|
return m_Elements.Find(pch, cb);
|
|
}
|
|
|
|
int CStaticTableSet::FindAttribute(LPCTSTR pch, int cb)
|
|
{
|
|
return m_Attributes.Find(pch, cb);
|
|
}
|
|
|
|
int CStaticTableSet::FindEntity(LPCTSTR pch, int cb)
|
|
{
|
|
return m_Entities.Find(pch, cb);
|
|
}
|
|
|
|
CStaticTableSet * g_pTabDefault;
|
|
PTABLESET g_pTable = 0;
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Custom HTML tables
|
|
//
|
|
/*
|
|
|
|
@HLX@ "Internet Explorer 3.0"
|
|
;Custom HTML tagset file must begin with the "@HLX@"
|
|
;signature and the name of the HTML variant in quotes.
|
|
|
|
[Elements]
|
|
; element set
|
|
|
|
[Attributes]
|
|
; attribute set
|
|
|
|
[Entities]
|
|
; entity set
|
|
|
|
*/
|
|
|
|
// qsort/bsearch helper
|
|
int CmpFunc(const void *a, const void *b)
|
|
{
|
|
CLStr *A = (CLStr*)a;
|
|
CLStr *B = (CLStr*)b;
|
|
int r = memcmp(A->m_rgb, B->m_rgb, __min(A->m_cb, B->m_cb));
|
|
return (0 == r) ? (A->m_cb - B->m_cb) : r;
|
|
}
|
|
|