]> git.wincent.com - wikitext.git/blob - ext/token.h
Add tokenization of PRE_START and PRE_END
[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     NESTED_LIST,    // imaginary token (never explicitly marked up)
38     PRE,
39     PRE_START,
40     PRE_END,
41     NO_WIKI_START,
42     NO_WIKI_END,
43     BLOCKQUOTE,
44     STRONG_EM,
45     STRONG_START,
46     STRONG_END,
47     STRONG,
48     EM_START,
49     EM_END,
50     EM,
51     TT_START,
52     TT_END,
53     TT,
54     OL,
55     UL,
56     H6_START,
57     H5_START,
58     H4_START,
59     H3_START,
60     H2_START,
61     H1_START,
62     H6_END,
63     H5_END,
64     H4_END,
65     H3_END,
66     H2_END,
67     H1_END,
68     URI,
69     MAIL,
70     LINK_START,
71     LINK_END,
72     EXT_LINK_START,
73     EXT_LINK_END,
74     SEPARATOR,
75     SPACE,
76     QUOT_ENTITY,
77     AMP_ENTITY,
78     NAMED_ENTITY,
79     HEX_ENTITY,
80     DECIMAL_ENTITY,
81     QUOT,
82     AMP,
83     LESS,
84     GREATER,
85     CRLF,
86     PRINTABLE,
87     DEFAULT,
88     END_OF_FILE
89 };
90
91 VALUE Wikitext_parser_token_types(VALUE self);
92
93 VALUE _Wikitext_token(token_t *token);