Skip to content

Commit 7f10c0c

Browse files
authored
Extract lexer_peek_helpers.c utils (#35)
* Extract `lexer_peek.c` utils * Rename `lexer_peek_helpers`
1 parent 444969f commit 7f10c0c

File tree

4 files changed

+75
-52
lines changed

4 files changed

+75
-52
lines changed

src/include/lexer.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@
55
#include "token_struct.h"
66

77
lexer_T* lexer_init(char* source);
8-
9-
void lexer_advance(lexer_T* lexer);
10-
char lexer_peek(lexer_T* lexer, int offset);
11-
char lexer_backtrack(lexer_T* lexer, int offset);
12-
138
token_T* lexer_next_token(lexer_T* lexer);
149

1510
size_t lexer_sizeof(void);

src/include/lexer_peek_helpers.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef ERBX_LEXER_PEEK_H
2+
#define ERBX_LEXER_PEEK_H
3+
4+
#include "lexer_struct.h"
5+
6+
#include <stdbool.h>
7+
#include <stdio.h>
8+
#include <stdlib.h>
9+
10+
char lexer_peek(lexer_T* lexer, int offset);
11+
bool lexer_peek_for_doctype(lexer_T* lexer, int offset);
12+
13+
bool lexer_peek_for_html_comment_start(lexer_T* lexer, int offset);
14+
bool lexer_peek_for_html_comment_end(lexer_T* lexer, int offset);
15+
16+
bool lexer_peek_erb_close_tag(lexer_T* lexer, int offset);
17+
bool lexer_peek_erb_dash_close_tag(lexer_T* lexer, int offset);
18+
bool lexer_peek_erb_percent_close_tag(lexer_T* lexer, int offset);
19+
bool lexer_peek_erb_end(lexer_T* lexer, int offset);
20+
21+
char lexer_backtrack(lexer_T* lexer, int offset);
22+
23+
#endif

src/lexer.c

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
#include "include/lexer.h"
21
#include "include/buffer.h"
3-
#include "include/macros.h"
2+
#include "include/lexer_peek_helpers.h"
43
#include "include/token.h"
54
#include "include/util.h"
65

@@ -39,32 +38,6 @@ token_T* lexer_error(lexer_T* lexer, const char* message) {
3938
return token_init(error_message, TOKEN_ERROR, lexer);
4039
}
4140

42-
char lexer_peek(lexer_T* lexer, int offset) {
43-
return lexer->source[MIN(lexer->current_position + offset, lexer->source_length)];
44-
}
45-
46-
bool lexer_peek_for_doctype(lexer_T* lexer, int offset) {
47-
return (lexer_peek(lexer, offset) == '<' && lexer_peek(lexer, offset + 1) == '!' &&
48-
tolower(lexer_peek(lexer, offset + 2)) == 'd' && tolower(lexer_peek(lexer, offset + 3)) == 'o' &&
49-
tolower(lexer_peek(lexer, offset + 4)) == 'c' && tolower(lexer_peek(lexer, offset + 5)) == 't' &&
50-
tolower(lexer_peek(lexer, offset + 6)) == 'y' && tolower(lexer_peek(lexer, offset + 7)) == 'p' &&
51-
tolower(lexer_peek(lexer, offset + 8)) == 'e');
52-
}
53-
54-
bool lexer_peek_for_html_comment_start(lexer_T* lexer, int offset) {
55-
return (lexer_peek(lexer, offset) == '<' && lexer_peek(lexer, offset + 1) == '!' &&
56-
lexer_peek(lexer, offset + 2) == '-' && lexer_peek(lexer, offset + 3) == '-');
57-
}
58-
59-
bool lexer_peek_for_html_comment_end(lexer_T* lexer, int offset) {
60-
return (
61-
lexer_peek(lexer, offset) == '-' && lexer_peek(lexer, offset + 1) == '-' && lexer_peek(lexer, offset + 2) == '>');
62-
}
63-
64-
char lexer_backtrack(lexer_T* lexer, int offset) {
65-
return lexer->source[MAX(lexer->current_position - offset, 0)];
66-
}
67-
6841
void lexer_advance(lexer_T* lexer) {
6942
if (lexer->current_position < lexer->source_length && lexer->current_character != '\0') {
7043

@@ -175,25 +148,6 @@ token_T* lexer_parse_erb_open(lexer_T* lexer) {
175148
return token_init("<%", TOKEN_ERB_START, lexer);
176149
}
177150

178-
bool lexer_peek_erb_close_tag(lexer_T* lexer, int offset) {
179-
return (lexer_peek(lexer, offset + 0) == '%' && lexer_peek(lexer, offset + 1) == '>');
180-
}
181-
182-
bool lexer_peek_erb_dash_close_tag(lexer_T* lexer, int offset) {
183-
return (lexer_peek(lexer, offset + 0) == '-' && lexer_peek(lexer, offset + 1) == '%' &&
184-
lexer_peek(lexer, offset + 2) == '>');
185-
}
186-
187-
bool lexer_peek_erb_percent_close_tag(lexer_T* lexer, int offset) {
188-
return (lexer_peek(lexer, offset + 0) == '%' && lexer_peek(lexer, offset + 1) == '%' &&
189-
lexer_peek(lexer, offset + 2) == '>');
190-
}
191-
192-
bool lexer_peek_erb_end(lexer_T* lexer, int offset) {
193-
return (lexer_peek_erb_close_tag(lexer, offset) || lexer_peek_erb_dash_close_tag(lexer, offset) ||
194-
lexer_peek_erb_percent_close_tag(lexer, offset));
195-
}
196-
197151
token_T* lexer_parse_erb_content(lexer_T* lexer) {
198152
buffer_T buffer = buffer_new();
199153

src/lexer_peek_helpers.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include "include/lexer_peek_helpers.h"
2+
#include "include/lexer_struct.h"
3+
#include "include/macros.h"
4+
5+
#include <ctype.h>
6+
#include <stdbool.h>
7+
8+
char lexer_backtrack(lexer_T* lexer, int offset) {
9+
return lexer->source[MAX(lexer->current_position - offset, 0)];
10+
}
11+
12+
char lexer_peek(lexer_T* lexer, int offset) {
13+
return lexer->source[MIN(lexer->current_position + offset, lexer->source_length)];
14+
}
15+
16+
bool lexer_peek_for_doctype(lexer_T* lexer, int offset) {
17+
return (lexer_peek(lexer, offset) == '<' && lexer_peek(lexer, offset + 1) == '!' &&
18+
tolower(lexer_peek(lexer, offset + 2)) == 'd' && tolower(lexer_peek(lexer, offset + 3)) == 'o' &&
19+
tolower(lexer_peek(lexer, offset + 4)) == 'c' && tolower(lexer_peek(lexer, offset + 5)) == 't' &&
20+
tolower(lexer_peek(lexer, offset + 6)) == 'y' && tolower(lexer_peek(lexer, offset + 7)) == 'p' &&
21+
tolower(lexer_peek(lexer, offset + 8)) == 'e');
22+
}
23+
24+
bool lexer_peek_for_html_comment_start(lexer_T* lexer, int offset) {
25+
return (lexer_peek(lexer, offset) == '<' && lexer_peek(lexer, offset + 1) == '!' &&
26+
lexer_peek(lexer, offset + 2) == '-' && lexer_peek(lexer, offset + 3) == '-');
27+
}
28+
29+
bool lexer_peek_for_html_comment_end(lexer_T* lexer, int offset) {
30+
return (
31+
lexer_peek(lexer, offset) == '-' && lexer_peek(lexer, offset + 1) == '-' && lexer_peek(lexer, offset + 2) == '>');
32+
}
33+
34+
bool lexer_peek_erb_close_tag(lexer_T* lexer, int offset) {
35+
return (lexer_peek(lexer, offset + 0) == '%' && lexer_peek(lexer, offset + 1) == '>');
36+
}
37+
38+
bool lexer_peek_erb_dash_close_tag(lexer_T* lexer, int offset) {
39+
return (lexer_peek(lexer, offset + 0) == '-' && lexer_peek(lexer, offset + 1) == '%' &&
40+
lexer_peek(lexer, offset + 2) == '>');
41+
}
42+
43+
bool lexer_peek_erb_percent_close_tag(lexer_T* lexer, int offset) {
44+
return (lexer_peek(lexer, offset + 0) == '%' && lexer_peek(lexer, offset + 1) == '%' &&
45+
lexer_peek(lexer, offset + 2) == '>');
46+
}
47+
48+
bool lexer_peek_erb_end(lexer_T* lexer, int offset) {
49+
return (lexer_peek_erb_close_tag(lexer, offset) || lexer_peek_erb_dash_close_tag(lexer, offset) ||
50+
lexer_peek_erb_percent_close_tag(lexer, offset));
51+
}

0 commit comments

Comments
 (0)