michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: michael@0: /** michael@0: * MODULE NOTES: michael@0: * @update gess 4/1/98 michael@0: * michael@0: */ michael@0: michael@0: michael@0: michael@0: #ifndef _NSELEMENTABLE michael@0: #define _NSELEMENTABLE michael@0: michael@0: #include "nsHTMLTags.h" michael@0: #include "nsIDTD.h" michael@0: michael@0: //********************************************************************************************* michael@0: // The following ints define the standard groups of HTML elements... michael@0: //********************************************************************************************* michael@0: michael@0: static const int kNone= 0x0; michael@0: michael@0: static const int kHTMLContent = 0x0001; // HEAD, (FRAMESET | BODY) michael@0: static const int kHeadContent = 0x0002; // Elements that *must* be in the head. michael@0: static const int kHeadMisc = 0x0004; // Elements that *can* be in the head. michael@0: michael@0: static const int kSpecial = 0x0008; // A, IMG, APPLET, OBJECT, FONT, BASEFONT, BR, SCRIPT, michael@0: // MAP, Q, SUB, SUP, SPAN, BDO, IFRAME michael@0: michael@0: static const int kFormControl = 0x0010; // INPUT SELECT TEXTAREA LABEL BUTTON michael@0: static const int kPreformatted = 0x0020; // PRE michael@0: static const int kPreExclusion = 0x0040; // IMG, OBJECT, APPLET, BIG, SMALL, SUB, SUP, FONT, BASEFONT michael@0: static const int kFontStyle = 0x0080; // TT, I, B, U, S, STRIKE, BIG, SMALL michael@0: static const int kPhrase = 0x0100; // EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM michael@0: static const int kHeading = 0x0200; // H1..H6 michael@0: static const int kBlockMisc = 0x0400; // OBJECT, SCRIPT michael@0: static const int kBlock = 0x0800; // ADDRESS, BLOCKQUOTE, CENTER, DIV, DL, FIELDSET, FORM, michael@0: // ISINDEX, HR, NOSCRIPT, NOFRAMES, P, TABLE michael@0: static const int kList = 0x1000; // UL, OL, DIR, MENU michael@0: static const int kPCDATA = 0x2000; // plain text and entities... michael@0: static const int kSelf = 0x4000; // whatever THIS tag is... michael@0: static const int kExtensions = 0x8000; // BGSOUND, WBR, NOBR michael@0: static const int kTable = 0x10000;// TR,TD,THEAD,TBODY,TFOOT,CAPTION,TH michael@0: static const int kDLChild = 0x20000;// DL, DT michael@0: static const int kCDATA = 0x40000;// just plain text... michael@0: michael@0: static const int kInlineEntity = (kPCDATA|kFontStyle|kPhrase|kSpecial|kFormControl|kExtensions); // #PCDATA, %fontstyle, %phrase, %special, %formctrl michael@0: static const int kBlockEntity = (kHeading|kList|kPreformatted|kBlock); // %heading, %list, %preformatted, %block michael@0: static const int kFlowEntity = (kBlockEntity|kInlineEntity); // %blockentity, %inlineentity michael@0: static const int kAllTags = 0xffffff; michael@0: michael@0: michael@0: //********************************************************************************************* michael@0: // The following ints define the standard groups of HTML elements... michael@0: //********************************************************************************************* michael@0: michael@0: #ifdef DEBUG michael@0: extern void CheckElementTable(); michael@0: #endif michael@0: michael@0: michael@0: /** michael@0: * We're asking the question: is aTest a member of bitset. michael@0: * michael@0: * @param michael@0: * @return TRUE or FALSE michael@0: */ michael@0: inline bool TestBits(int aBitset,int aTest) { michael@0: if(aTest) { michael@0: int32_t result=(aBitset & aTest); michael@0: return bool(result==aTest); michael@0: } michael@0: return false; michael@0: } michael@0: michael@0: struct nsHTMLElement { michael@0: bool IsMemberOf(int32_t aType) const; michael@0: michael@0: eHTMLTags mTagID; michael@0: int mParentBits; //defines groups that can contain this element michael@0: bool mLeaf; michael@0: michael@0: static bool IsContainer(eHTMLTags aTag); michael@0: }; michael@0: michael@0: extern const nsHTMLElement gHTMLElements[]; michael@0: michael@0: #endif