--- factorcss/Tokeniser.x 2004/12/27 22:24:45 64 +++ factorcss/Tokeniser.x 2004/12/28 14:23:12 65 @@ -12,13 +12,13 @@ module Tokeniser where } -%wrapper "basic" +%wrapper "posn" $h = [0-9a-f] $nonascii = [\x80-\xff] @unicode = \\$h{1,6}(\r\n|[\ \t\r\n\f])? @escape = @unicode|\\[\x20-\x7e\x80-\xff] -@nmstart = [_a-z]|$nonascii|@escape +@nmstart = [_a-zA-Z]|$nonascii|@escape @nmchar = [\-_a-zA-Z0-9]|$nonascii|@escape @nl = \n|\r\n|\r|\f @string1 = \"([\t\ \!\#\x24\x25&\x28-\x7e]|\\@nl|\'|$nonascii|@escape|\.)*\" @@ -41,65 +41,67 @@ "" ; -"~=" { \s -> INCLUDES } -"|=" { \s -> DASHMATCH } +"~=" { \p s -> (INCLUDES, p) } +"|=" { \p s -> (DASHMATCH, p) } -@w"{" { \s -> LBRACE } -@w"+" { \s -> PLUS } -@w">" { \s -> GREATER } -@w"," { \s -> COMMA } - -@string { \s -> STRING s } - -@ident { \s -> IDENT s } - -"#"@name { \s -> HASH s } - -"@import" { \s -> IMPORT_SYM } -"@page" { \s -> PAGE_SYM } -"@media" { \s -> MEDIA_SYM } -"@charset" { \s -> CHARSET_SYM } - -"!"@w"important" { \s -> IMPORTANT_SYM } - -@num em { \s -> EMS (read (take (length s - 2) s)) } -@num ex { \s -> EXS (read (take (length s - 2) s)) } -@num px { \s -> LENGTH s } -@num cm { \s -> LENGTH s } -@num mm { \s -> LENGTH s } -@num in { \s -> LENGTH s } -@num pt { \s -> LENGTH s } -@num pc { \s -> LENGTH s } -@num deg { \s -> ANGLE s } -@num rad { \s -> ANGLE s } -@num grad { \s -> ANGLE s } -@num ms { \s -> TIME s } -@num s { \s -> TIME s } -@num Hz { \s -> FREQ s } -@num kHz { \s -> FREQ s } -@num @ident { \s -> DIMEN s } -@num "%" { \s -> PERCENTAGE (read (take (length s - 1) s)) } -@num { \s -> NUMBER (read s) } - -"url("@w@string@w")" { \s -> URI s } -"url("@w@url@w")" { \s -> URI s } -@ident"\050" { \s -> FUNCTION s } - -";" { \s -> SEMI } -"}" { \s -> RBRACE } -":" { \s -> COLON } -"/" { \s -> SLASH } -"-" { \s -> MINUS } -"." { \s -> DOT } -"*" { \s -> ASTERISK } -"[" { \s -> LBRAC } -"]" { \s -> RBRAC } -"=" { \s -> EQUALS } -")" { \s -> RPAREN } -. { \s -> DELIM (head s) } +@w"{" { \p s -> (LBRACE, p) } +@w"+" { \p s -> (PLUS, p) } +@w">" { \p s -> (GREATER, p) } +@w"," { \p s -> (COMMA, p) } + +@string { \p s -> (STRING s, p) } + +@ident { \p s -> (IDENT s, p) } + +"#"@name { \p s -> (HASH s, p) } + +"@import" { \p s -> (IMPORT_SYM, p) } +"@page" { \p s -> (PAGE_SYM, p) } +"@media" { \p s -> (MEDIA_SYM, p) } +"@charset" { \p s -> (CHARSET_SYM, p) } + +"!"@w"important" { \p s -> (IMPORTANT_SYM, p) } + +@num em { \p s -> (EMS (read ('0':(take (length s - 2) s))), p) } +@num ex { \p s -> (EXS (read ('0':(take (length s - 2) s))), p) } +@num px { \p s -> (LENGTH s, p) } +@num cm { \p s -> (LENGTH s, p) } +@num mm { \p s -> (LENGTH s, p) } +@num in { \p s -> (LENGTH s, p) } +@num pt { \p s -> (LENGTH s, p) } +@num pc { \p s -> (LENGTH s, p) } +@num deg { \p s -> (ANGLE s, p) } +@num rad { \p s -> (ANGLE s, p) } +@num grad { \p s -> (ANGLE s, p) } +@num ms { \p s -> (TIME s, p) } +@num s { \p s -> (TIME s, p) } +@num Hz { \p s -> (FREQ s, p) } +@num kHz { \p s -> (FREQ s, p) } +@num @ident { \p s -> (DIMEN s, p) } +@num "%" { \p s -> (PERCENTAGE (read ('0':(take (length s - 1) s))), p) } +@num { \p s -> (NUMBER (read ('0':s)), p) } + +"url("@w@string@w")" { \p s -> (URI s, p) } +"url("@w@url@w")" { \p s -> (URI s, p) } +@ident"\050" { \p s -> (FUNCTION s, p) } + +";" { \p s -> (SEMI, p) } +"}" { \p s -> (RBRACE, p) } +":" { \p s -> (COLON, p) } +"/" { \p s -> (SLASH, p) } +"-" { \p s -> (MINUS, p) } +"." { \p s -> (DOT, p) } +"*" { \p s -> (ASTERISK, p) } +"[" { \p s -> (LBRAC, p) } +"]" { \p s -> (RBRAC, p) } +"=" { \p s -> (EQUALS, p) } +")" { \p s -> (RPAREN, p) } +. { \p s -> (DELIM (head s), p) } { +type TokenPosn = (Token, AlexPosn) + data Token = INCLUDES | DASHMATCH |