summaryrefslogtreecommitdiff
path: root/css/scanner.l
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-03-25 21:03:14 +0000
committerJames Bursa <james@netsurf-browser.org>2003-03-25 21:03:14 +0000
commit6e0fdd2078c11ceec667de9b115408bb7688caa4 (patch)
tree39359e4e130c3dbdb2b93ae53d7232e697d81e77 /css/scanner.l
parent91f8a679db6211b883ce2a7499728ee2b6a5f2af (diff)
downloadnetsurf-6e0fdd2078c11ceec667de9b115408bb7688caa4.tar.gz
netsurf-6e0fdd2078c11ceec667de9b115408bb7688caa4.tar.bz2
[project @ 2003-03-25 21:03:14 by bursa]
New CSS parser. svn path=/import/netsurf/; revision=108
Diffstat (limited to 'css/scanner.l')
-rw-r--r--css/scanner.l69
1 files changed, 69 insertions, 0 deletions
diff --git a/css/scanner.l b/css/scanner.l
new file mode 100644
index 000000000..de6533a50
--- /dev/null
+++ b/css/scanner.l
@@ -0,0 +1,69 @@
+/**
+ * $Id: scanner.l,v 1.1 2003/03/25 21:03:14 bursa Exp $
+ */
+
+%{
+#include "parser.h"
+%}
+
+%option 8bit
+%option batch
+%option case-insensitive
+%option header-file="scanner.h"
+%option outfile="scanner.c"
+%option prefix="css_"
+%option reentrant
+%option never-interactive
+%option noyywrap
+
+/* see CSS2 Specification, chapter 4
+ http://www.w3.org/TR/REC-CSS2/syndata.html,
+ and errata
+ http://www.w3.org/Style/css2-updates/REC-CSS2-19980512-errata */
+
+ident {nmstart}{nmchar}*
+name {nmchar}+
+nmstart [a-zA-Z_]|{nonascii}|{escape}
+nonascii [\200-\377]
+unicode \\[0-9a-f]{1,6}[ \n\r\t\f]?
+escape {unicode}|\\[ -~\200-\377]
+nmchar [-a-zA-Z0-9_]|{nonascii}|{escape}
+num [+-]?[0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\"
+string2 \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\'
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+{ident} { return IDENT; }
+@{ident} { return ATKEYWORD; }
+{string} { return STRING; }
+#{name} { return HASH; }
+{num} { return NUMBER; }
+{num}% { return PERCENTAGE; }
+{num}{ident} { return DIMENSION; }
+url\({w}{string}{w}\)|url\({w}([!#$%&*-~]|{nonascii}|{escape})*{w}\) {
+ return URI; }
+U\+[0-9A-F?]{1,6}(-[0-9A-F]{1,6})? {
+ return UNICODE_RANGE; }
+"<!--" /* ignore CDO */
+"-->" /* ignore CDC */
+; { return SEMI; }
+\{ { return LBRACE; }
+\} { return RBRACE; }
+\( { return LPAREN; }
+\) { return RPAREN; }
+\[ { return LBRAC; }
+\] { return RBRAC; }
+[ \t\r\n\f]+ /* ignore whitespace */
+\/\*[^*]*\*+([^/][^*]*\*+)*\/ /* ignore comments */
+{ident}\( { return FUNCTION; }
+~= { return INCLUDES; }
+"|=" { return DASHMATCH; }
+: { return COLON; /* missed out in spec */ }
+. { return DELIM; }
+
+%%
+