OSDN Git Service

Merge branch 'master' into sandbox
[modchxj/mod_chxj.git] / include / chxj_css.h
1 /*
2  * Copyright (C) 2005-2008 Atsushi Konno All rights reserved.
3  * Copyright (C) 2005 QSDN,Inc. All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #ifndef __CHXJ_CSS_H__
18 #define __CHXJ_CSS_H__
19
20 #include "mod_chxj.h"
21 #include <libcroco/libcroco.h>
22
23
24 /**
25  * CSS property.
26  */
27 typedef struct __css_property_t {
28   struct __css_property_t *next;
29   struct __css_property_t **ref;
30   char *name;
31   char *value;
32 } css_property_t;
33
34
35 /**
36  * CSS selector.
37  */
38 typedef struct __css_selector_t {
39   struct __css_selector_t *next;
40   struct __css_selector_t **ref;
41   /* has tag or/and class or/and id */
42   char *name;
43   css_property_t property_head;
44 } css_selector_t;
45
46 typedef struct __css_prop_list_t {
47   struct __css_prop_list_t *next;
48   struct __css_prop_list_t **ref;
49   css_property_t head;
50 } css_prop_list_t;
51
52 typedef struct __css_prop_list_stack_t {
53   css_prop_list_t head;
54 } css_prop_list_stack_t;
55
56 /**
57  * CSS stylesheet.
58  * Manager of css_selector_t.
59  */
60 typedef struct __css_stylesheet_t {
61   css_selector_t selector_head;
62 } css_stylesheet_t;
63
64 #define STYLESHEETS_SELECTOR_HEAD(X)  (X)->selector_head
65 #define STYLESHEETS_FIRST_SELECTOR(X) STYLESHEETS_SELECTOR_HEAD((X))##.next
66 #define STYLESHEETS_LAST_SELECTOR(X)  ((apr_size_t)(STYLESHEET_SELECTOR_HEAD((X))##.ref) - (apr_size_t)APR_OFFSETOF(css_selector_t, next))
67 #define STYLESHEETS_SENTINEL(X)       &(STYLESHEETS_SELECTOR_HEAD((X)))
68   
69
70 /**
71  * CSS current_stylesheet.
72  */
73 typedef struct __css_current_stylesheet_t {
74   struct __css_property_t property_head;
75   struct __css_current_stylesheet_t *next;
76   struct __css_current_stylesheet_t **ref;
77 } css_current_stylesheet_t;
78
79
80 /**
81  * CSS current_stylesheet_stack_t.
82  */
83 typedef struct __css_current_stylesheet_stack_t {
84   css_current_stylesheet_t *stylesheet_head;
85   css_current_stylesheet_t *stylesheet_tail;
86 } css_current_stylesheet_stack_t;
87
88 #include "chxj_apache.h"
89 extern css_stylesheet_t *chxj_css_parse_from_uri(request_rec *r, apr_pool_t *pool, css_stylesheet_t *old_stylesheet, const char *uri);
90 extern void chxj_css_stylesheet_dump(css_stylesheet_t *stylesheet);
91 extern css_selector_t *chxj_css_find_selector(Doc *doc, css_stylesheet_t *stylesheet, Node *node);
92 extern css_stylesheet_t *chxj_find_pseudo_selectors(Doc *doc, css_stylesheet_t *stylesheet);
93 extern css_stylesheet_t *chxj_css_parse_style_attr(Doc *doc, css_stylesheet_t *old_stylesheet, char *tag_name, char *class_name, char *id_name, char *style_attr_value);
94 extern css_stylesheet_t *chxj_css_parse_style_value(Doc *doc, css_stylesheet_t *old_stylesheet, char *style_attr_value);
95
96 extern css_prop_list_stack_t *chxj_new_prop_list_stack(Doc *doc);
97 extern css_prop_list_t *chxj_css_create_prop_list(Doc *doc, css_selector_t *sel);
98 extern void chxj_css_push_prop_list(css_prop_list_stack_t *stack, css_prop_list_t *prop_list);
99 extern css_prop_list_t *chxj_css_pop_prop_list(css_prop_list_stack_t *stack);
100 extern css_prop_list_t *chxj_dup_css_prop_list(Doc *doc, css_prop_list_t *old);
101 extern void chxj_css_prop_list_merge_property(Doc *doc, css_prop_list_t *base, css_selector_t *sel);
102 extern css_prop_list_t *chxj_css_get_last_prop_list(css_prop_list_stack_t *stack);
103 #endif
104 /*
105  * vim:ts=2 et
106  */