ELinks 0.18.0
scanner.c File Reference

CSS token scanner utilities. More...

#include <stdio.h>
#include <string.h>
#include "elinks.h"
#include "document/css/scanner.h"
#include "util/error.h"
#include "util/scanner.h"
#include "util/string.h"
Include dependency graph for scanner.c:

Macros

#define check_css_table(c, bit)   (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)
}
 Bitmap entries for the CSS character groups used in the scanner table. More...
 

Functions

static struct scanner_tokenscan_css_tokens (struct scanner *scanner)
 
static void scan_css_token (struct scanner *scanner, struct scanner_token *token)
 

Variables

static const struct scan_table_info css_scan_table_info []
 
static const struct scanner_string_mapping css_string_mappings []
 
struct scanner_info css_scanner_info
 

Detailed Description

CSS token scanner utilities.

Macro Definition Documentation

◆ check_css_table

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

◆ 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

Bitmap entries for the CSS character groups used in the scanner table.

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 scanner * scanner,
struct scanner_token * token )
inlinestatic

◆ scan_css_tokens()

static struct scanner_token * scan_css_tokens ( struct scanner * scanner)
static

Variable Documentation

◆ css_scan_table_info

const struct scan_table_info css_scan_table_info[]
static
Initial value:
= {
SCAN_TABLE_STRING("[({})];:,.>+~", CSS_CHAR_TOKEN),
}
@ 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 SCAN_TABLE_END
Definition scanner.h:62
#define SCAN_TABLE_RANGE(from, to, bits)
Definition scanner.h:60
#define SCAN_TABLE_STRING(str, bits)
Definition scanner.h:61

◆ css_scanner_info

struct scanner_info 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

◆ css_string_mappings

const struct scanner_string_mapping css_string_mappings[]
static
Initial value:
= {
}
@ CSS_TOKEN_DIMENSION
<number><ident>
Definition scanner.h:42
@ CSS_TOKEN_EM
<number>em
Definition scanner.h:43
@ CSS_TOKEN_AT_KEYWORD
@<ident>
Definition scanner.h:72
@ CSS_TOKEN_FREQUENCY
<number>Hz or <number>kHz
Definition scanner.h:45
@ CSS_TOKEN_LENGTH
<number>{px,cm,mm,in,pt,pc}
Definition scanner.h:46
@ CSS_TOKEN_AT_FONT_FACE
@font-face
Definition scanner.h:74
@ CSS_TOKEN_EX
<number>ex
Definition scanner.h:44
@ CSS_TOKEN_AT_MEDIA
@media
Definition scanner.h:76
@ CSS_TOKEN_AT_CHARSET
@charset
Definition scanner.h:73
@ CSS_TOKEN_NONE
Another internal token type used both to mark unused tokens in the scanner table as invalid or when s...
Definition scanner.h:101
@ CSS_TOKEN_ANGLE
<number>rad, <number>grad or <number>deg
Definition scanner.h:41
@ CSS_TOKEN_AT_PAGE
@page
Definition scanner.h:77
@ CSS_TOKEN_AT_IMPORT
@import
Definition scanner.h:75
@ CSS_TOKEN_RGB
rgb(
Definition scanner.h:63
@ CSS_TOKEN_FUNCTION
<ident>(<args>)
Definition scanner.h:59
@ CSS_TOKEN_URL
url(<arg>)
Definition scanner.h:68
@ CSS_TOKEN_TIME
<number>ms or <number>s
Definition scanner.h:47
#define NULL
Definition explodename.c:35