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