bool pending_crlf;
bool autolink;
bool space_to_underscore;
+ bool pre_code;
} parser_t;
const char null_str[] = { 0 };
parser->pending_crlf = false;
parser->autolink = true;
parser->space_to_underscore = true;
+ parser->pre_code = false;
return parser;
}
}
else
str_append(parser->output, pre_start, sizeof(pre_start) - 1);
+ if (parser->pre_code)
+ str_append(parser->output, code_start, sizeof(code_start) - 1);
ary_push(parser->scope, PRE_START);
ary_push(parser->line, PRE_START);
}
{
case PRE:
case PRE_START:
+ if (parser->pre_code)
+ str_append(target, code_end, sizeof(code_end) - 1);
str_append(target, pre_end, sizeof(pre_end) - 1);
str_append_str(target, parser->line_ending);
wiki_dedent(parser, false);
VALUE img_prefix = rb_str_new2("/images/");
VALUE output_style = ID2SYM(rb_intern("html"));
VALUE space_to_underscore = Qtrue;
+ VALUE pre_code = Qfalse;
VALUE minimum_fulltext_token_length = INT2NUM(3);
VALUE base_heading_level = INT2NUM(0);
img_prefix = OVERRIDE_IF_SET(img_prefix);
output_style = OVERRIDE_IF_SET(output_style);
space_to_underscore = OVERRIDE_IF_SET(space_to_underscore);
+ pre_code = OVERRIDE_IF_SET(pre_code);
minimum_fulltext_token_length = OVERRIDE_IF_SET(minimum_fulltext_token_length);
base_heading_level = OVERRIDE_IF_SET(base_heading_level);
}
rb_iv_set(self, "@img_prefix", img_prefix);
rb_iv_set(self, "@output_style", output_style);
rb_iv_set(self, "@space_to_underscore", space_to_underscore);
+ rb_iv_set(self, "@pre_code", pre_code);
rb_iv_set(self, "@minimum_fulltext_token_length", minimum_fulltext_token_length);
rb_iv_set(self, "@base_heading_level", base_heading_level);
return self;
parser->img_prefix = rb_iv_get(self, "@img_prefix");
parser->autolink = rb_iv_get(self, "@autolink") == Qtrue ? true : false;
parser->space_to_underscore = rb_iv_get(self, "@space_to_underscore") == Qtrue ? true : false;
+ parser->pre_code = rb_iv_get(self, "@pre_code") == Qtrue ? true : false;
parser->line_ending = str_new_from_string(line_ending);
parser->base_indent = base_indent;
parser->base_heading_level = base_heading_level;
wiki_pop_from_stack_up_to(parser, NULL, BLOCKQUOTE, false);
wiki_indent(parser);
str_append(parser->output, pre_start, sizeof(pre_start) - 1);
+ if (parser->pre_code)
+ str_append(parser->output, code_start, sizeof(code_start) - 1);
ary_push(parser->scope, PRE);
}
break;
@parser.parse(' ').should == "<pre></pre>\n"
end
+ it 'assumes PRE blocks are code when :pre_code is set' do
+ Wikitext::Parser.
+ new(:pre_code => true).
+ parse(' foo').
+ should == "<pre><code>foo</code></pre>\n"
+ end
+
it 'should sanely handle a leading empty line' do
@parser.parse(" \n foo").should == "<pre>\nfoo</pre>\n"
end
@parser.parse('<pre>foo</pre>').should == "<pre>foo</pre>\n"
end
+ it 'assumes PRE_START/PRE_END blocks are code when :pre_code is set' do
+ Wikitext::Parser.
+ new(:pre_code => true).
+ parse('<pre>foo</pre>').
+ should == "<pre><code>foo</code></pre>\n"
+ end
+
it 'should pass through PRE unchanged in PRE_START/PRE_END blocks' do
input = dedent <<-END
<pre>line 1