xref: /inferno-os/module/css.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.Forsyth#
2*46439007SCharles.Forsyth# CSS parsing module
3*46439007SCharles.Forsyth#
4*46439007SCharles.Forsyth# CSS2.1 style sheets
5*46439007SCharles.Forsyth#
6*46439007SCharles.Forsyth# Copyright © 2001, 2005 Vita Nuova Holdings Limited.  All rights reserved.
7*46439007SCharles.Forsyth#
8*46439007SCharles.ForsythCSS: module
9*46439007SCharles.Forsyth{
10*46439007SCharles.Forsyth	PATH:	con "/dis/lib/w3c/css.dis";
11*46439007SCharles.Forsyth
12*46439007SCharles.Forsyth	Stylesheet: adt {
13*46439007SCharles.Forsyth		charset:	string;
14*46439007SCharles.Forsyth		imports:	list of ref Import;
15*46439007SCharles.Forsyth		statements:	list of ref Statement;
16*46439007SCharles.Forsyth	};
17*46439007SCharles.Forsyth
18*46439007SCharles.Forsyth	Import: adt {
19*46439007SCharles.Forsyth		name:	string;
20*46439007SCharles.Forsyth		media:	list of string;
21*46439007SCharles.Forsyth	};
22*46439007SCharles.Forsyth
23*46439007SCharles.Forsyth	Statement: adt {
24*46439007SCharles.Forsyth		pick{
25*46439007SCharles.Forsyth		Media =>
26*46439007SCharles.Forsyth			media:	list of string;
27*46439007SCharles.Forsyth			rules:	list of ref Statement.Ruleset;
28*46439007SCharles.Forsyth		Page =>
29*46439007SCharles.Forsyth			pseudo:	string;
30*46439007SCharles.Forsyth			decls:	list of ref Decl;
31*46439007SCharles.Forsyth		Ruleset =>
32*46439007SCharles.Forsyth			selectors:	list of Selector;
33*46439007SCharles.Forsyth			decls:	list of ref Decl;
34*46439007SCharles.Forsyth		}
35*46439007SCharles.Forsyth	};
36*46439007SCharles.Forsyth
37*46439007SCharles.Forsyth	Decl: adt {
38*46439007SCharles.Forsyth		property:	string;
39*46439007SCharles.Forsyth		values:	list of ref Value;
40*46439007SCharles.Forsyth		important:	int;
41*46439007SCharles.Forsyth	};
42*46439007SCharles.Forsyth
43*46439007SCharles.Forsyth	Selector:	type list of (int, Simplesel);	# int is combinator from [ >+]
44*46439007SCharles.Forsyth	Simplesel: type list of ref Select;
45*46439007SCharles.Forsyth
46*46439007SCharles.Forsyth	Select: adt {
47*46439007SCharles.Forsyth		name:	string;
48*46439007SCharles.Forsyth		pick{
49*46439007SCharles.Forsyth		Element or ID or Any or Class or Pseudo =>
50*46439007SCharles.Forsyth		Attrib =>
51*46439007SCharles.Forsyth			op:	string;	# "=" "~=" "|="
52*46439007SCharles.Forsyth			value:	ref Value;	# optional Ident or String
53*46439007SCharles.Forsyth		Pseudofn =>
54*46439007SCharles.Forsyth			arg:	string;
55*46439007SCharles.Forsyth		}
56*46439007SCharles.Forsyth	};
57*46439007SCharles.Forsyth
58*46439007SCharles.Forsyth	Value: adt {
59*46439007SCharles.Forsyth		sep:	int;	# which operator of [ ,/] preceded this value in list
60*46439007SCharles.Forsyth		pick{
61*46439007SCharles.Forsyth		String or
62*46439007SCharles.Forsyth		Number or
63*46439007SCharles.Forsyth		Percentage or
64*46439007SCharles.Forsyth		Url or
65*46439007SCharles.Forsyth		Unicoderange =>
66*46439007SCharles.Forsyth			value:	string;
67*46439007SCharles.Forsyth		Hexcolour =>
68*46439007SCharles.Forsyth			value:	string;	# as given
69*46439007SCharles.Forsyth			rgb:	(int, int, int);	# converted
70*46439007SCharles.Forsyth		RGB =>
71*46439007SCharles.Forsyth			args:	cyclic list of ref Value;	# as given
72*46439007SCharles.Forsyth			rgb:	(int, int, int);		# converted
73*46439007SCharles.Forsyth		Ident =>
74*46439007SCharles.Forsyth			name:	string;
75*46439007SCharles.Forsyth		Unit =>
76*46439007SCharles.Forsyth			value:	string;	# int or float
77*46439007SCharles.Forsyth			units:	string;	# suffix giving units ("cm", "khz", and so on, always lower case)
78*46439007SCharles.Forsyth		Function =>
79*46439007SCharles.Forsyth			name:	string;
80*46439007SCharles.Forsyth			args:		cyclic list of ref Value;
81*46439007SCharles.Forsyth		}
82*46439007SCharles.Forsyth	};
83*46439007SCharles.Forsyth
84*46439007SCharles.Forsyth	init:	fn(diag: int);
85*46439007SCharles.Forsyth	parse:	fn(s: string): (ref Stylesheet, string);
86*46439007SCharles.Forsyth	parsedecl:	fn(s: string): (list of ref Decl, string);
87*46439007SCharles.Forsyth#	unescape:	fn(s: string): string;
88*46439007SCharles.Forsyth};
89