/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ /* jssrules.h --- private style sheet routines */ #ifndef __JSSRULES_H_ #define __JSSRULES_H_ /* * A JSS rule consists of a list of selectors, a list of declarations, * and a specificity of its selector */ struct _StyleRule { StyleTag tag; unsigned nSelectors; StyleTag **selectors; /* array of pointers to StyleTag structures */ StyleRule *next; }; /* * Specificity is implemented as three 8-bit components: the number of tags in * the selector (the least significant component), the number of classes in the * selector, and the number of ids in the selector (the most significant component) */ #define JSS_SPECIFICITY(nTags, nClasses, nIDs)\ ((uint32)(nTags) | ((uint32)(nClasses)<<8) | ((uint32)(nIDs)<<16)) /* * This routine creates a new rule object and adds it to the list of existing * rules * * Returns the new rule if successful; 0 otherwise */ extern StyleRule * jss_NewRule(JSContext *mc, unsigned nSelectors, jsval *selectors); /* Destroys a list of rules */ extern void jss_DestroyRules(StyleRule *); /* * Given a list of rules and a contextual selector (array of simple * selectors), looks to see if the contextual selector matches that of an * existing rule */ extern StyleRule * jss_LookupRule(JSContext *mc, StyleRule *rules, unsigned nSelectors, jsval *selectors); /* * Callback function for jss_EnumApplicableRules(). Return MOCHA_TRUE to continuing * iterating and MOCHA_FALSE to stop */ typedef JSBool (* RULECALLBACK)(StyleTag *tag, void *data); /* * This routine takes as an argument a list of rules, a stack of open HTML * elements, and a callback function. The callback function is called once for * each rule that applies */ extern JSBool jss_EnumApplicableRules(JSSContext *jc, StyleRule *rules, StyleAndTagStack *styleStack, RULECALLBACK callback, void *data); #endif /* __JSSRULES_H_ */