libcss
Loading...
Searching...
No Matches
stylesheet.h
Go to the documentation of this file.
1/*
2 * This file is part of LibCSS.
3 * Licensed under the MIT License,
4 * http://www.opensource.org/licenses/mit-license.php
5 * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org>
6 */
7
8#ifndef css_stylesheet_h_
9#define css_stylesheet_h_
10
11#include <inttypes.h>
12#include <stdio.h>
13
14#include <libwapcaplet/libwapcaplet.h>
15
16#include <libcss/errors.h>
17#include <libcss/functypes.h>
18#include <libcss/stylesheet.h>
19#include <libcss/types.h>
20
21#include "bytecode/bytecode.h"
22#include "parse/parse.h"
23#include "parse/mq.h"
24#include "select/hash.h"
25
26typedef struct css_rule css_rule;
28
29typedef struct css_style {
31 uint32_t used;
32 uint32_t allocated;
35
50
58
63
65 lwc_string *string;
66 struct {
67 int32_t a;
68 int32_t b;
69 } nth;
71
83
89#define CSS_SPECIFICITY_A 0x01000000
90#define CSS_SPECIFICITY_B 0x00010000
91#define CSS_SPECIFICITY_C 0x00000100
92#define CSS_SPECIFICITY_D 0x00000001
93 uint32_t specificity;
96};
97
107
112
113struct css_rule {
114 void *parent;
120 uint32_t index;
121 uint16_t items;
122 uint8_t type;
123 uint8_t ptype;
125
132
141
147
154
163
169
218
220 css_style **style);
222css_error css__stylesheet_style_vappend(css_style *style, uint32_t style_count,
223 ...);
226
228static inline css_error css__stylesheet_style_appendOPV(css_style *style,
229 opcode_t opcode, uint8_t flags, uint16_t value)
230{
231 if ((flags & (0x7 << 1)) == FLAG_REVERT) {
232 style->sheet->uses_revert = true;
233 }
234 return css__stylesheet_style_append(style,
235 buildOPV(opcode, flags, value));
236}
237
239static inline css_error css_stylesheet_style_inherit(css_style *style,
240 opcode_t opcode)
241{
242 return css__stylesheet_style_append(style,
243 buildOPV(opcode, FLAG_INHERIT, 0));
244}
245
247static inline css_error css_stylesheet_style_initial(css_style *style,
248 opcode_t opcode)
249{
250 return css__stylesheet_style_append(style,
251 buildOPV(opcode, FLAG_INITIAL, 0));
252}
253
255static inline css_error css_stylesheet_style_revert(css_style *style,
256 opcode_t opcode)
257{
258 style->sheet->uses_revert = true;
259 return css__stylesheet_style_append(style,
260 buildOPV(opcode, FLAG_REVERT, 0));
261}
262
264static inline css_error css_stylesheet_style_unset(css_style *style,
265 opcode_t opcode)
266{
267 return css__stylesheet_style_append(style,
268 buildOPV(opcode, FLAG_UNSET, 0));
269}
270
272static inline css_error css_stylesheet_style_flag_value(css_style *style,
273 enum flag_value flag_value, opcode_t opcode)
274{
275 enum flag flag = flag_value << 1;
276 if (flag == FLAG_REVERT) {
277 style->sheet->uses_revert = true;
278 }
279 return css__stylesheet_style_append(style,
280 buildOPV(opcode, flag, 0));
281}
282
284 css_qname *qname, css_selector **selector);
286 css_selector *selector);
287
289 css_selector_type type, css_qname *qname,
292 bool negate, css_selector_detail *detail);
293
295 css_selector **parent, const css_selector_detail *specific);
296
299
301 css_rule **rule);
303
305 css_rule *rule, css_selector *selector);
306
308 css_rule *rule, css_style *style);
309
311 css_rule *rule, lwc_string *charset);
312
314 css_rule *rule, lwc_string *url, css_mq_query *media);
315
317 css_rule *rule, css_mq_query *media);
318
320 css_rule *rule, css_selector *sel);
321
323 css_rule *parent);
325
327 uint32_t string_number, lwc_string **string);
328
330 lwc_string *string, uint32_t *string_number);
331
332#endif
333
flag_value
Definition bytecode.h:23
uint32_t css_code_t
Definition bytecode.h:19
flag
Definition bytecode.h:31
@ FLAG_UNSET
Definition bytecode.h:36
@ FLAG_REVERT
Definition bytecode.h:35
@ FLAG_INITIAL
Definition bytecode.h:34
@ FLAG_INHERIT
Definition bytecode.h:33
enum css_properties_e opcode_t
Definition bytecode.h:21
css_error
Definition errors.h:18
css_error(* css_color_resolution_fn)(void *pw, lwc_string *name, css_color *color)
Definition stylesheet.h:59
css_error(* css_import_notification_fn)(void *pw, css_stylesheet *parent, lwc_string *url)
Definition stylesheet.h:47
css_error(* css_font_resolution_fn)(void *pw, lwc_string *name, css_system_font *system_font)
Definition stylesheet.h:88
css_error(* css_url_resolution_fn)(void *pw, const char *base, lwc_string *rel, lwc_string **abs)
Definition stylesheet.h:30
dict style
Definition select_config.py:26
css_error css__stylesheet_add_rule(css_stylesheet *sheet, css_rule *rule, css_rule *parent)
Definition stylesheet.c:1416
css_error css__stylesheet_selector_create(css_stylesheet *sheet, css_qname *qname, css_selector **selector)
Definition stylesheet.c:791
css_error css__stylesheet_string_add(css_stylesheet *sheet, lwc_string *string, uint32_t *string_number)
Definition stylesheet.c:38
struct css_rule _ALIGNED
css_rule_type
Definition stylesheet.h:98
@ CSS_RULE_PAGE
Definition stylesheet.h:105
@ CSS_RULE_SELECTOR
Definition stylesheet.h:100
@ CSS_RULE_MEDIA
Definition stylesheet.h:103
@ CSS_RULE_CHARSET
Definition stylesheet.h:101
@ CSS_RULE_UNKNOWN
Definition stylesheet.h:99
@ CSS_RULE_IMPORT
Definition stylesheet.h:102
@ CSS_RULE_FONT_FACE
Definition stylesheet.h:104
css_error css__stylesheet_rule_add_selector(css_stylesheet *sheet, css_rule *rule, css_selector *selector)
Definition stylesheet.c:1222
css_error css__stylesheet_style_create(css_stylesheet *sheet, css_style **style)
Definition stylesheet.c:641
css_error css__stylesheet_selector_combine(css_stylesheet *sheet, css_combinator type, css_selector *a, css_selector *b)
Definition stylesheet.c:1020
css_error css__stylesheet_style_append(css_style *style, css_code_t code)
Definition stylesheet.c:726
css_selector_detail_value_type
Definition stylesheet.h:59
@ CSS_SELECTOR_DETAIL_VALUE_STRING
Definition stylesheet.h:60
@ CSS_SELECTOR_DETAIL_VALUE_NTH
Definition stylesheet.h:61
css_error css__stylesheet_style_vappend(css_style *style, uint32_t style_count,...)
Definition stylesheet.c:707
css_error css__stylesheet_rule_destroy(css_stylesheet *sheet, css_rule *rule)
Definition stylesheet.c:1111
css_error css__stylesheet_remove_rule(css_stylesheet *sheet, css_rule *rule)
Definition stylesheet.c:1486
css_error css__stylesheet_rule_set_media(css_stylesheet *sheet, css_rule *rule, css_mq_query *media)
Definition stylesheet.c:1361
css_error css__stylesheet_rule_create(css_stylesheet *sheet, css_rule_type type, css_rule **rule)
Definition stylesheet.c:1058
css_error css__stylesheet_rule_set_nascent_import(css_stylesheet *sheet, css_rule *rule, lwc_string *url, css_mq_query *media)
Definition stylesheet.c:1334
css_error css__stylesheet_merge_style(css_style *target, css_style *style)
Definition stylesheet.c:674
css_error css__stylesheet_rule_set_charset(css_stylesheet *sheet, css_rule *rule, lwc_string *charset)
Definition stylesheet.c:1307
css_error css__stylesheet_string_get(css_stylesheet *sheet, uint32_t string_number, lwc_string **string)
Definition stylesheet.c:105
css_error css__stylesheet_selector_append_specific(css_stylesheet *sheet, css_selector **parent, const css_selector_detail *specific)
Definition stylesheet.c:942
css_error css__stylesheet_rule_append_style(css_stylesheet *sheet, css_rule *rule, css_style *style)
Definition stylesheet.c:1259
css_combinator
Definition stylesheet.h:51
@ CSS_COMBINATOR_ANCESTOR
Definition stylesheet.h:53
@ CSS_COMBINATOR_GENERIC_SIBLING
Definition stylesheet.h:56
@ CSS_COMBINATOR_SIBLING
Definition stylesheet.h:55
@ CSS_COMBINATOR_PARENT
Definition stylesheet.h:54
@ CSS_COMBINATOR_NONE
Definition stylesheet.h:52
css_error css__stylesheet_rule_set_page_selector(css_stylesheet *sheet, css_rule *rule, css_selector *sel)
Definition stylesheet.c:1386
css_rule_parent_type
Definition stylesheet.h:108
@ CSS_RULE_PARENT_RULE
Definition stylesheet.h:110
@ CSS_RULE_PARENT_STYLESHEET
Definition stylesheet.h:109
css_error css__stylesheet_selector_detail_init(css_stylesheet *sheet, css_selector_type type, css_qname *qname, css_selector_detail_value value, css_selector_detail_value_type value_type, bool negate, css_selector_detail *detail)
Definition stylesheet.c:913
css_error css__stylesheet_selector_destroy(css_stylesheet *sheet, css_selector *selector)
Definition stylesheet.c:840
css_selector_type
Definition stylesheet.h:36
@ CSS_SELECTOR_ATTRIBUTE_PREFIX
Definition stylesheet.h:46
@ CSS_SELECTOR_ATTRIBUTE_SUBSTRING
Definition stylesheet.h:48
@ CSS_SELECTOR_ATTRIBUTE_INCLUDES
Definition stylesheet.h:45
@ CSS_SELECTOR_CLASS
Definition stylesheet.h:38
@ CSS_SELECTOR_ID
Definition stylesheet.h:39
@ CSS_SELECTOR_ATTRIBUTE_EQUAL
Definition stylesheet.h:43
@ CSS_SELECTOR_ATTRIBUTE_DASHMATCH
Definition stylesheet.h:44
@ CSS_SELECTOR_ATTRIBUTE_SUFFIX
Definition stylesheet.h:47
@ CSS_SELECTOR_PSEUDO_CLASS
Definition stylesheet.h:40
@ CSS_SELECTOR_PSEUDO_ELEMENT
Definition stylesheet.h:41
@ CSS_SELECTOR_ELEMENT
Definition stylesheet.h:37
@ CSS_SELECTOR_ATTRIBUTE
Definition stylesheet.h:42
css_error css__stylesheet_style_destroy(css_style *style)
Definition stylesheet.c:756
Definition font_face.h:26
Definition mq.h:77
Definition parse.c:87
Definition types.h:246
Definition stylesheet.h:164
lwc_string * encoding
Definition stylesheet.h:167
css_rule base
Definition stylesheet.h:165
Definition stylesheet.h:142
css_rule base
Definition stylesheet.h:143
css_font_face * font_face
Definition stylesheet.h:145
Definition stylesheet.h:155
lwc_string * url
Definition stylesheet.h:158
css_stylesheet * sheet
Definition stylesheet.h:161
css_mq_query * media
Definition stylesheet.h:159
css_rule base
Definition stylesheet.h:156
Definition stylesheet.h:133
css_mq_query * media
Definition stylesheet.h:136
css_rule * first_child
Definition stylesheet.h:138
css_rule base
Definition stylesheet.h:134
css_rule * last_child
Definition stylesheet.h:139
Definition stylesheet.h:148
css_selector * selector
Definition stylesheet.h:151
css_style * style
Definition stylesheet.h:152
css_rule base
Definition stylesheet.h:149
Definition stylesheet.h:126
css_style * style
Definition stylesheet.h:130
css_selector ** selectors
Definition stylesheet.h:129
css_rule base
Definition stylesheet.h:127
Definition stylesheet.h:113
uint8_t ptype
Definition stylesheet.h:123
uint32_t index
Definition stylesheet.h:120
void * parent
Definition stylesheet.h:114
css_rule * next
Definition stylesheet.h:117
uint16_t items
Definition stylesheet.h:121
uint8_t type
Definition stylesheet.h:122
css_rule * prev
Definition stylesheet.h:118
Definition stylesheet.h:72
unsigned int negate
Definition stylesheet.h:81
unsigned int type
Definition stylesheet.h:76
css_qname qname
Definition stylesheet.h:73
unsigned int comb
Definition stylesheet.h:77
unsigned int next
Definition stylesheet.h:79
unsigned int value_type
Definition stylesheet.h:80
css_selector_detail_value value
Definition stylesheet.h:74
Definition hash.c:33
Definition stylesheet.h:84
css_selector_detail data
Definition stylesheet.h:95
css_selector * combinator
Definition stylesheet.h:85
uint32_t specificity
Definition stylesheet.h:93
css_rule * rule
Definition stylesheet.h:87
Definition stylesheet.h:29
css_code_t * bytecode
Definition stylesheet.h:30
struct css_stylesheet * sheet
Definition stylesheet.h:33
uint32_t allocated
Definition stylesheet.h:32
uint32_t used
Definition stylesheet.h:31
Definition stylesheet.h:170
void * import_pw
Definition stylesheet.h:198
void * resolve_pw
Definition stylesheet.h:201
css_rule * last_rule
Definition stylesheet.h:175
void * color_pw
Definition stylesheet.h:204
lwc_string ** propstrings
Definition stylesheet.h:186
uint32_t string_vector_c
Definition stylesheet.h:215
lwc_string ** string_vector
Definition stylesheet.h:212
uint32_t rule_count
Definition stylesheet.h:173
bool uses_revert
Definition stylesheet.h:191
bool disabled
Definition stylesheet.h:177
char * url
Definition stylesheet.h:180
uint32_t string_vector_l
Definition stylesheet.h:213
css_style * cached_style
Definition stylesheet.h:210
css_color_resolution_fn color
Definition stylesheet.h:203
bool inline_style
Definition stylesheet.h:193
css_parser * parser
Definition stylesheet.h:184
css_language_level level
Definition stylesheet.h:183
void * parser_frontend
Definition stylesheet.h:185
size_t size
Definition stylesheet.h:195
css_selector_hash * selectors
Definition stylesheet.h:171
bool quirks_used
Definition stylesheet.h:189
css_rule * rule_list
Definition stylesheet.h:174
void * font_pw
Definition stylesheet.h:208
char * title
Definition stylesheet.h:181
css_font_resolution_fn font
Definition stylesheet.h:207
bool quirks_allowed
Definition stylesheet.h:188
css_url_resolution_fn resolve
Definition stylesheet.h:200
css_language_level
Definition types.h:40
Definition stylesheet.h:64
lwc_string * string
Definition stylesheet.h:65
struct css_selector_detail_value::@23 nth
int32_t a
Definition stylesheet.h:67
int32_t b
Definition stylesheet.h:68