]> git.wincent.com - wikitext.git/blob - ext/wikitext.c
Overallocate for speed in str.c
[wikitext.git] / ext / wikitext.c
1 // Copyright 2008-2009 Wincent Colaiuta. All rights reserved.
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are met:
5 //
6 // 1. Redistributions of source code must retain the above copyright notice,
7 //    this list of conditions and the following disclaimer.
8 // 2. Redistributions in binary form must reproduce the above copyright notice,
9 //    this list of conditions and the following disclaimer in the documentation
10 //    and/or other materials provided with the distribution.
11 //
12 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
13 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
16 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
17 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
18 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
19 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
20 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22 // POSSIBILITY OF SUCH DAMAGE.
23
24 #include "wikitext_ragel.h"
25 #include "parser.h"
26
27 VALUE mWikitext              = 0;   // module Wikitext
28 VALUE cWikitextParser        = 0;   // class Wikitext::Parser
29 VALUE eWikitextParserError   = 0;   // class Wikitext::Parser::Error
30 VALUE cWikitextParserToken   = 0;   // class Wikitext::Parser::Token
31
32 void Init_wikitext()
33 {
34     // Wikitext
35     mWikitext = rb_define_module("Wikitext");
36
37     // Wikitext::Parser
38     cWikitextParser = rb_define_class_under(mWikitext, "Parser", rb_cObject);
39     rb_define_method(cWikitextParser, "initialize", Wikitext_parser_initialize, -1);
40     rb_define_method(cWikitextParser, "parse", Wikitext_parser_parse, -1);
41     rb_define_method(cWikitextParser, "profiling_parse", Wikitext_parser_profiling_parse, 1);
42     rb_define_method(cWikitextParser, "tokenize", Wikitext_parser_tokenize, 1);
43     rb_define_method(cWikitextParser, "benchmarking_tokenize", Wikitext_parser_benchmarking_tokenize, 1);
44     rb_define_method(cWikitextParser, "fulltext_tokenize", Wikitext_parser_fulltext_tokenize, -1);
45     rb_define_singleton_method(cWikitextParser, "sanitize_link_target", Wikitext_parser_sanitize_link_target, 1);
46     rb_define_singleton_method(cWikitextParser, "encode_link_target", Wikitext_parser_encode_link_target, 1);
47     rb_define_singleton_method(cWikitextParser, "encode_special_link_target", Wikitext_parser_encode_special_link_target, 1);
48     rb_define_attr(cWikitextParser, "line_ending", Qtrue, Qtrue);
49     rb_define_attr(cWikitextParser, "internal_link_prefix", Qtrue, Qtrue);
50     rb_define_attr(cWikitextParser, "img_prefix", Qtrue, Qtrue);
51     rb_define_attr(cWikitextParser, "external_link_class", Qtrue, Qtrue);
52     rb_define_attr(cWikitextParser, "mailto_class", Qtrue, Qtrue);
53     rb_define_attr(cWikitextParser, "autolink", Qtrue, Qtrue);
54     rb_define_attr(cWikitextParser, "space_to_underscore", Qtrue, Qtrue);
55     rb_define_attr(cWikitextParser, "minimum_fulltext_token_length", Qtrue, Qtrue);
56     rb_define_attr(cWikitextParser, "base_heading_level", Qtrue, Qtrue);
57
58     // Wikitext::Parser::Error
59     eWikitextParserError = rb_define_class_under(cWikitextParser, "Error", rb_eException);
60
61     // Wikitext::Parser::Token
62     cWikitextParserToken = rb_define_class_under(cWikitextParser, "Token", rb_cObject);
63     rb_define_singleton_method(cWikitextParserToken, "types", Wikitext_parser_token_types, 0);
64     rb_define_attr(cWikitextParserToken, "start", Qtrue, Qfalse);
65     rb_define_attr(cWikitextParserToken, "stop", Qtrue, Qfalse);
66     rb_define_attr(cWikitextParserToken, "line_start", Qtrue, Qfalse);
67     rb_define_attr(cWikitextParserToken, "line_stop", Qtrue, Qfalse);
68     rb_define_attr(cWikitextParserToken, "column_start", Qtrue, Qfalse);
69     rb_define_attr(cWikitextParserToken, "column_stop", Qtrue, Qfalse);
70     rb_define_attr(cWikitextParserToken, "code_point", Qtrue, Qfalse);
71     rb_define_attr(cWikitextParserToken, "token_type", Qtrue, Qfalse);
72     rb_define_attr(cWikitextParserToken, "string_value", Qtrue, Qfalse);
73 }