Go Back

0 /*

1 * ISC License

2 * Copyright (c) 2023 RMF <rawmonk@firemail.cc>

3 */

4 enum {

5 PARSER_GEMTEXT,

6 PARSER_REQUEST

7 };

8

9 struct parser;

10 struct request;

11

12 #ifdef PARSER_INTERNAL

13 int vread(int fd, void *buf, size_t nbytes);

14 int readnext(int fd, uint32_t *ch, size_t *pos, size_t length);

15 int renderable(uint32_t codepoint);

16 #endif

17

18 #define WHITESPACE(X) ((X) <= ' ' && (X) != '\n')

19 #define SEPARATOR(X) ((X) <= ' ')

20 #define LINEBREAK(X) (WHITESPACE(X) || X == '-')

21

22 enum {

23 MIME_GEMTEXT,

24 MIME_PLAIN,

25 MIME_IMAGE,

26 MIME_UNKNOWN

27 };

28

29 int is_gemtext(char *meta, size_t len);

30 int format_link(const char *link, size_t length, char *out, size_t out_length);

31 int parser_mime(char *meta, size_t len);

32 int parse_response(int fd, size_t length, char *meta, size_t len, int *code,

33 int *bytes_read);

34 int parse_request(struct parser *parser, struct request *request);

35 int parse_page(struct parser *parser, struct request *request, int width);

36 int parser_request_create(void);

37 int parser_page_create(void);

38 int parse_gemtext(int in, size_t length, int width, int out);

39 int parse_plain(int in, size_t length, int width, int out);

40 int parse_binary(int in, size_t length, int width, int out);

41 int parse_links(int in, size_t length, int out);

42 void parser_page(int in, int out);

43 void parser_request(int in, int out);

44 int parser_sandbox(int out, const char *title);

45