ELinks 0.18.0
scanner.c File Reference
#include <stdio.h>
#include <string.h>
#include "elinks.h"
#include "dom/css/scanner.h"
#include "dom/scanner.h"
#include "dom/string.h"
#include "util/error.h"
Include dependency graph for scanner.c:

Macros

#define CSS_STRING_MAP(str, type, family)    { STATIC_DOM_STRING(str), CSS_TOKEN_##type, CSS_TOKEN_##family }
 
#define check_css_table(c, bit)   (dom_css_scanner_info.scan_table[(unsigned char)(c)] & (bit))
 
#define scan_css(scanner, s, bit)    while ((s) < (scanner)->end && check_css_table(*(s), bit)) (s)++;
 
#define scan_back_css(scanner, s, bit)    while ((s) >= (scanner)->string && check_css_table(*(s), bit)) (s)--;
 
#define is_css_ident_start(c)   check_css_table(c, CSS_CHAR_IDENT_START)
 
#define is_css_ident(c)   check_css_table(c, CSS_CHAR_IDENT)
 
#define is_css_digit(c)   check_css_table(c, CSS_CHAR_DIGIT)
 
#define is_css_hexdigit(c)   check_css_table(c, CSS_CHAR_HEX_DIGIT)
 
#define is_css_char_token(c)   check_css_table(c, CSS_CHAR_TOKEN)
 
#define is_css_token_start(c)   check_css_table(c, CSS_CHAR_TOKEN_START)
 
#define skip_css(scanner, s, skipto)
 

Enumerations

enum  css_char_group {
  CSS_CHAR_ALPHA = (1 << 0) , CSS_CHAR_DIGIT = (1 << 1) , CSS_CHAR_HEX_DIGIT = (1 << 2) , CSS_CHAR_IDENT = (1 << 3) ,
  CSS_CHAR_IDENT_START = (1 << 4) , CSS_CHAR_NEWLINE = (1 << 5) , CSS_CHAR_NON_ASCII = (1 << 6) , CSS_CHAR_SGML_MARKUP = (1 << 7) ,
  CSS_CHAR_TOKEN = (1 << 8) , CSS_CHAR_TOKEN_START = (1 << 9) , CSS_CHAR_WHITESPACE = (1 << 10)
}
 

Functions

static struct dom_scanner_tokenscan_css_tokens (struct dom_scanner *scanner)
 
static void scan_css_token (struct dom_scanner *scanner, struct dom_scanner_token *token)
 

Variables

static const struct dom_scan_table_info css_scan_table_info []
 
static const struct dom_scanner_string_mapping css_string_mappings []
 
struct dom_scanner_info dom_css_scanner_info
 

Macro Definition Documentation

◆ check_css_table

#define check_css_table ( c,
bit )   (dom_css_scanner_info.scan_table[(unsigned char)(c)] & (bit))

◆ CSS_STRING_MAP

#define CSS_STRING_MAP ( str,
type,
family )    { STATIC_DOM_STRING(str), CSS_TOKEN_##type, CSS_TOKEN_##family }

◆ is_css_char_token

#define is_css_char_token ( c)    check_css_table(c, CSS_CHAR_TOKEN)

◆ is_css_digit

#define is_css_digit ( c)    check_css_table(c, CSS_CHAR_DIGIT)

◆ is_css_hexdigit

#define is_css_hexdigit ( c)    check_css_table(c, CSS_CHAR_HEX_DIGIT)

◆ is_css_ident

#define is_css_ident ( c)    check_css_table(c, CSS_CHAR_IDENT)

◆ is_css_ident_start

#define is_css_ident_start ( c)    check_css_table(c, CSS_CHAR_IDENT_START)

◆ is_css_token_start

#define is_css_token_start ( c)    check_css_table(c, CSS_CHAR_TOKEN_START)

◆ scan_back_css

#define scan_back_css ( scanner,
s,
bit )    while ((s) >= (scanner)->string && check_css_table(*(s), bit)) (s)--;

◆ scan_css

#define scan_css ( scanner,
s,
bit )    while ((s) < (scanner)->end && check_css_table(*(s), bit)) (s)++;

◆ skip_css

#define skip_css ( scanner,
s,
skipto )
Value:
while (s < (scanner)->end \
&& *(s) != (skipto) \
&& check_css_precedence(*(s), skipto)) { \
if (isquote(*(s))) { \
int size = (scanner)->end - (s); \
char *end = (char *)memchr(s + 1, *(s), size); \
\
if (end) (s) = end; \
} \
(s)++; \
}
static int check_css_precedence(int type, int skipto)
Check whether it is safe to skip the type when looking for skipto.
Definition scanner.h:117
#define isquote(c)
Definition string.h:79
const char * s
Definition general.c:869
The struct scanner describes the current state of the scanner.
Definition scanner.h:107

Enumeration Type Documentation

◆ css_char_group

Enumerator
CSS_CHAR_ALPHA 
CSS_CHAR_DIGIT 
CSS_CHAR_HEX_DIGIT 
CSS_CHAR_IDENT 
CSS_CHAR_IDENT_START 
CSS_CHAR_NEWLINE 
CSS_CHAR_NON_ASCII 
CSS_CHAR_SGML_MARKUP 
CSS_CHAR_TOKEN 
CSS_CHAR_TOKEN_START 
CSS_CHAR_WHITESPACE 

Function Documentation

◆ scan_css_token()

static void scan_css_token ( struct dom_scanner * scanner,
struct dom_scanner_token * token )
inlinestatic

◆ scan_css_tokens()

static struct dom_scanner_token * scan_css_tokens ( struct dom_scanner * scanner)
static

Variable Documentation

◆ css_scan_table_info

const struct dom_scan_table_info css_scan_table_info[]
static
Initial value:
= {
}
@ CSS_CHAR_HEX_DIGIT
Definition scanner.c:23
@ CSS_CHAR_DIGIT
Definition scanner.c:22
@ CSS_CHAR_ALPHA
Definition scanner.c:21
@ CSS_CHAR_IDENT
Definition scanner.c:24
@ CSS_CHAR_NEWLINE
Definition scanner.c:26
@ CSS_CHAR_TOKEN
Definition scanner.c:29
@ CSS_CHAR_TOKEN_START
Definition scanner.c:30
@ CSS_CHAR_SGML_MARKUP
Definition scanner.c:28
@ CSS_CHAR_WHITESPACE
Definition scanner.c:31
@ CSS_CHAR_IDENT_START
Definition scanner.c:25
@ CSS_CHAR_NON_ASCII
Definition scanner.c:27
#define DOM_SCAN_TABLE_STRING(str, bits)
Definition scanner.h:60
#define DOM_SCAN_TABLE_END
Definition scanner.h:63
#define DOM_SCAN_TABLE_RANGE(from, to, bits)
Definition scanner.h:57

◆ css_string_mappings

const struct dom_scanner_string_mapping css_string_mappings[]
static
Initial value:
= {
CSS_STRING_MAP("Hz", FREQUENCY, DIMENSION),
CSS_STRING_MAP("cm", LENGTH, DIMENSION),
CSS_STRING_MAP("deg", ANGLE, DIMENSION),
CSS_STRING_MAP("em", EM, DIMENSION),
CSS_STRING_MAP("ex", EX, DIMENSION),
CSS_STRING_MAP("grad", ANGLE, DIMENSION),
CSS_STRING_MAP("in", LENGTH, DIMENSION),
CSS_STRING_MAP("kHz", FREQUENCY, DIMENSION),
CSS_STRING_MAP("mm", LENGTH, DIMENSION),
CSS_STRING_MAP("ms", TIME, DIMENSION),
CSS_STRING_MAP("pc", LENGTH, DIMENSION),
CSS_STRING_MAP("pt", LENGTH, DIMENSION),
CSS_STRING_MAP("px", LENGTH, DIMENSION),
CSS_STRING_MAP("rad", ANGLE, DIMENSION),
CSS_STRING_MAP("s", TIME, DIMENSION),
CSS_STRING_MAP("rgb", RGB, FUNCTION),
CSS_STRING_MAP("url", URL, FUNCTION),
CSS_STRING_MAP("charset", AT_CHARSET, AT_KEYWORD),
CSS_STRING_MAP("font-face", AT_FONT_FACE, AT_KEYWORD),
CSS_STRING_MAP("import", AT_IMPORT, AT_KEYWORD),
CSS_STRING_MAP("media", AT_MEDIA, AT_KEYWORD),
CSS_STRING_MAP("page", AT_PAGE, AT_KEYWORD),
}
#define CSS_STRING_MAP(str, type, family)
Definition scanner.c:57
#define DOM_STRING_MAP_END
Definition scanner.h:75

◆ dom_css_scanner_info

struct dom_scanner_info dom_css_scanner_info
Initial value:
= {
}
static const struct scan_table_info css_scan_table_info[]
Definition scanner.c:34
static const struct scanner_string_mapping css_string_mappings[]
Definition scanner.c:57
static struct scanner_token * scan_css_tokens(struct scanner *scanner)
Definition scanner.c:361