OSDN Git Service

* version up
[modchxj/mod_chxj.git] / include / chxj_css.h
1 /*
2  * Copyright (C) 2005-2011 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
22
23 /**
24  * CSS property.
25  */
26 typedef struct __css_property_t {
27   struct __css_property_t *next;
28   struct __css_property_t **ref;
29   char *name;
30   char *value;
31 } css_property_t;
32
33
34 /**
35  * CSS selector.
36  */
37 typedef struct __css_selector_t {
38   struct __css_selector_t *next;
39   struct __css_selector_t **ref;
40   /* has tag or/and class or/and id */
41   char *name;
42   css_property_t property_head;
43 } css_selector_t;
44
45 typedef struct __css_prop_list_t {
46   struct __css_prop_list_t *next;
47   struct __css_prop_list_t **ref;
48   css_property_t head;
49 } css_prop_list_t;
50
51 typedef struct __css_prop_list_stack_t {
52   css_prop_list_t head;
53 } css_prop_list_stack_t;
54
55 /**
56  * CSS stylesheet.
57  * Manager of css_selector_t.
58  */
59 typedef struct __css_stylesheet_t {
60   css_selector_t selector_head;
61 } css_stylesheet_t;
62
63 #define STYLESHEETS_SELECTOR_HEAD(X)  (X)->selector_head
64 #define STYLESHEETS_FIRST_SELECTOR(X) STYLESHEETS_SELECTOR_HEAD((X))##.next
65 #define STYLESHEETS_LAST_SELECTOR(X)  ((apr_size_t)(STYLESHEET_SELECTOR_HEAD((X))##.ref) - (apr_size_t)APR_OFFSETOF(css_selector_t, next))
66 #define STYLESHEETS_SENTINEL(X)       &(STYLESHEETS_SELECTOR_HEAD((X)))
67   
68
69 /**
70  * CSS current_stylesheet.
71  */
72 typedef struct __css_current_stylesheet_t {
73   struct __css_property_t property_head;
74   struct __css_current_stylesheet_t *next;
75   struct __css_current_stylesheet_t **ref;
76 } css_current_stylesheet_t;
77
78
79 /**
80  * CSS current_stylesheet_stack_t.
81  */
82 typedef struct __css_current_stylesheet_stack_t {
83   css_current_stylesheet_t *stylesheet_head;
84   css_current_stylesheet_t *stylesheet_tail;
85 } css_current_stylesheet_stack_t;
86
87 #include "chxj_apache.h"
88 extern css_stylesheet_t *chxj_css_parse_from_uri(request_rec *r, apr_pool_t *pool, css_stylesheet_t *old_stylesheet, const char *uri);
89 extern void chxj_css_stylesheet_dump(css_stylesheet_t *stylesheet);
90 extern css_selector_t *chxj_css_find_selector(Doc *doc, css_stylesheet_t *stylesheet, Node *node);
91 extern css_stylesheet_t *chxj_find_pseudo_selectors(Doc *doc, css_stylesheet_t *stylesheet);
92 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);
93 extern css_stylesheet_t *chxj_css_parse_style_value(Doc *doc, css_stylesheet_t *old_stylesheet, char *style_attr_value);
94
95 extern css_prop_list_stack_t *chxj_new_prop_list_stack(Doc *doc);
96 extern css_prop_list_t *chxj_css_create_prop_list(Doc *doc, css_selector_t *sel);
97 extern void chxj_css_push_prop_list(css_prop_list_stack_t *stack, css_prop_list_t *prop_list);
98 extern css_prop_list_t *chxj_css_pop_prop_list(css_prop_list_stack_t *stack);
99 extern css_prop_list_t *chxj_dup_css_prop_list(Doc *doc, css_prop_list_t *old);
100 extern void chxj_css_prop_list_merge_property(Doc *doc, css_prop_list_t *base, css_selector_t *sel);
101 extern css_prop_list_t *chxj_css_get_last_prop_list(css_prop_list_stack_t *stack);
102 extern css_property_t *chxj_css_get_property_value(Doc *doc, css_prop_list_t *base, const char *name);
103
104 extern char *chxj_css_rgb_func_to_value(apr_pool_t *pool, const char *rgb_func_string);
105
106 #endif
107 /*
108  * vim:ts=2 et
109  */