]> git.wincent.com - wikitext.git/blob - ext/token.h
Tokenize email addresses
[wikitext.git] / ext / token.h
1 // Copyright 2008 Wincent Colaiuta
2 // This program is free software: you can redistribute it and/or modify
3 // it under the terms of the GNU General Public License as published by
4 // the Free Software Foundation, either version 3 of the License, or
5 // (at your option) any later version.
6 //
7 // This program is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 // GNU General Public License for more details.
11 //
12 // You should have received a copy of the GNU General Public License
13 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
14
15 #include <ruby/ruby.h>
16 #include <stdint.h>     /* uint32_t */
17
18 #define TOKEN_TEXT(token)   rb_str_new((const char *)token->start, (token->stop - token->start))
19 #define TOKEN_LEN(token)    (token->stop - token->start)
20
21 typedef struct
22 {
23     char        *start;
24     char        *stop;
25     size_t      line_start;
26     size_t      line_stop;
27     size_t      column_start;
28     size_t      column_stop;
29     uint32_t    code_point;
30     int         type;
31 } token_t;
32
33 enum token_types {
34     NO_TOKEN,
35     P,              // imaginary token (never explicitly marked up)
36     LI,             // imaginary token (never explicitly marked up)
37     PRE,
38     NO_WIKI_START,
39     NO_WIKI_END,
40     BLOCKQUOTE,
41     STRONG_EM,
42     STRONG_START,
43     STRONG_END,
44     STRONG,
45     EM_START,
46     EM_END,
47     EM,
48     TT_START,
49     TT_END,
50     TT,
51     OL,
52     UL,
53     H6_START,
54     H5_START,
55     H4_START,
56     H3_START,
57     H2_START,
58     H1_START,
59     H6_END,
60     H5_END,
61     H4_END,
62     H3_END,
63     H2_END,
64     H1_END,
65     URI,
66     MAIL,
67     LINK_START,
68     LINK_END,
69     EXT_LINK_START,
70     EXT_LINK_END,
71     SEPARATOR,
72     SPACE,
73     QUOT_ENTITY,
74     AMP_ENTITY,
75     NAMED_ENTITY,
76     HEX_ENTITY,
77     DECIMAL_ENTITY,
78     QUOT,
79     AMP,
80     LESS,
81     GREATER,
82     CRLF,
83     PRINTABLE,
84     DEFAULT,
85     END_OF_FILE
86 };
87
88 VALUE Wikitext_parser_token_types(VALUE self);
89
90 VALUE _Wikitext_token(token_t *token);