40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'ext/erbal/erbal.c', line 40
VALUE rb_erbal_initialize(int argc, VALUE *argv, VALUE self) {
VALUE str, options;
rb_scan_args(argc, argv, "11", &str, &options);
Check_Type(str, T_STRING);
erbal_parser *parser;
Data_Get_Struct(self, erbal_parser, parser);
parser->str = str;
if (NIL_P(options)) {
parser->options = rb_hash_new();
} else {
Check_Type(options, T_HASH);
parser->options = options;
}
if (rb_hash_aref(parser->options, ID2SYM(rb_intern("debug"))) == Qtrue) {
parser->debug = 1;
} else {
parser->debug = 0;
}
rb_erbal_setup_option(self, parser, &parser->buffer_name, "buffer", "@output_buffer");
rb_erbal_setup_option(self, parser, &parser->safe_concat_method, "safe_concat_method", "concat");
rb_erbal_setup_option(self, parser, &parser->unsafe_concat_method, "unsafe_concat_method", "concat");
rb_erbal_setup_option(self, parser, &parser->safe_concat_keyword, "safe_concat_keyword", "");
if (strcmp(RSTRING_PTR(parser->safe_concat_method), RSTRING_PTR(parser->unsafe_concat_method)) == 0) {
parser->concat_methods_identical = 1;
} else {
parser->concat_methods_identical = 0;
}
parser->initial_src = rb_str_dup(parser->buffer_name);
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
if (!NIL_P(buffer_init_val)) {
Check_Type(buffer_init_val, T_STRING);
rb_str_buf_cat(parser->initial_src, " = ", 3);
rb_str_concat(parser->initial_src, buffer_init_val);
rb_str_buf_cat(parser->initial_src, ";", 1);
} else {
rb_str_buf_cat(parser->initial_src, " = '';", 6);
}
return self;
}
|