#ifndef __stylesheet_h_ #define __stylesheet_h_ #include #include #include typedef XrmQuark SSID; SSID StringToSSID(char *str); #define SSIDToString(id) XrmQuarkToString(id) typedef enum { SSTERM_NUMBER, SSTERM_STRING, SSTERM_PERCENTAGE, SSTERM_LENGTH_PT, SSTERM_LENGTH_MM, SSTERM_LENGTH_CM, SSTERM_LENGTH_PC, SSTERM_LENGTH_IN, SSTERM_LENGTH_PX, SSTERM_EMS, SSTERM_EXS, SSTERM_IDENT, SSTERM_HEXCOLOR, SSTERM_URL, SSTERM_RGB, } SSTermType; typedef struct SSTerm { SSTermType type; double num; SSID id; char *str; } SSTerm; typedef SSTerm SSExpr; typedef struct SSDeclaration { SSID ident; SSTerm *term; int priority; int ref; } SSDeclaration; typedef struct SSDeclarationSet { struct SSDeclarationSet *next; SSDeclaration *decl; } SSDeclarationSet, *SSDeclarationSetList; typedef struct SSSimpleSelector { struct SSSimpleSelector *next; SSID ident; SSID id; SSID class; int pseudoclass; } SSSimpleSelector, *SSSimpleSelectorList; typedef struct SSSelector { SSSimpleSelectorList selectors; int pseudoelement; int specificity; } SSSelector, *SSSelectorList; typedef struct SSSelectorSet { struct SSSelectorSet *next; SSSelector *sel; } SSSelectorSet, *SSSelectorSetList; /* for yacc */ SSTerm *term_new(SSTermType type); void term_delete(SSTerm *p); void term_show(SSTerm *p); SSDeclaration *declaration_new(SSID ident, SSTerm *term, int pr); void declaration_delete(SSDeclaration *p); void declaration_show(SSDeclaration *p); SSDeclarationSet *declarationset_new(SSDeclaration *d); void declarationset_delete(SSDeclarationSet *p); void declarationsetlist_delete(SSDeclarationSetList l); SSSimpleSelector *simpleselector_new(SSID, SSID, SSID, int pc); void simpleselector_delete(SSSimpleSelector *p); void simpleselectorlist_delete(SSSimpleSelectorList l); SSSelector *selector_new(SSSimpleSelectorList sl, int pe); void selector_delete(SSSelector *p); void selector_show(SSSelector *p); SSSelectorSet *selectorset_new(SSSelector *s); void selectorset_delete(SSSelectorSet *p); void selectorsetlist_delete(SSSelectorSetList l); typedef struct StyleSheet { struct StyleSheet *next; SSSelector *sel; SSDeclarationSetList decls; } StyleSheet, *StyleSheetList; StyleSheet *stylesheet_new(void); void stylesheet_delete(StyleSheet *p); int stylesheet_read(FILE *fp, StyleSheet *ss); int simpleselector_eq(SSSimpleSelector *s1, SSSimpleSelector *s2); int selector_eq(SSSelector *s1, SSSelector *s2); StyleSheet *stylesheet_find(StyleSheetList base, SSSelector *s1); void stylesheet_add(SSSelectorSetList s, SSDeclarationSetList d); void stylesheet_show(StyleSheet *p); void stylesheetlist_show(StyleSheetList l); void stylesheetlist_delete(StyleSheetList l); /* style_y.y */ int style_readstyle(FILE *fp, StyleSheetList *ss); typedef struct StyleSheetSet { struct StyleSheetSet *next; int origin; StyleSheet *style; } StyleSheetSet, *StyleSheetSetList; StyleSheetSet *stylesheetset_new(void); void stylesheetset_delete(StyleSheetSet *p); void stylesheetsetlist_delete(StyleSheetSetList l); void stylesheetsetlist_show(StyleSheetSetList l); #endif