@@ -409,12 +409,37 module ApplicationHelper | |||
|
409 | 409 | only_path = options.delete(:only_path) == false ? false : true |
|
410 | 410 | |
|
411 | 411 | text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) } |
|
412 | ||
|
413 | [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name| | |
|
414 | send method_name, text, project, obj, attr, only_path, options | |
|
412 | ||
|
413 | parse_non_pre_blocks(text) do |text| | |
|
414 | [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name| | |
|
415 | send method_name, text, project, obj, attr, only_path, options | |
|
416 | end | |
|
415 | 417 | end |
|
416 | ||
|
417 | text | |
|
418 | end | |
|
419 | ||
|
420 | def parse_non_pre_blocks(text) | |
|
421 | s = StringScanner.new(text) | |
|
422 | tags = [] | |
|
423 | parsed = '' | |
|
424 | while !s.eos? | |
|
425 | s.scan(/(.*?)(<(\/)?(pre|code)(.*?)>|\z)/im) | |
|
426 | text, full_tag, closing, tag = s[1], s[2], s[3], s[4] | |
|
427 | if tags.empty? | |
|
428 | yield text | |
|
429 | end | |
|
430 | parsed << text | |
|
431 | if tag | |
|
432 | if closing | |
|
433 | if tags.last == tag.downcase | |
|
434 | tags.pop | |
|
435 | end | |
|
436 | else | |
|
437 | tags << tag.downcase | |
|
438 | end | |
|
439 | parsed << full_tag | |
|
440 | end | |
|
441 | end | |
|
442 | parsed | |
|
418 | 443 | end |
|
419 | 444 | |
|
420 | 445 | def parse_inline_attachments(text, project, obj, attr, only_path, options) |
@@ -297,6 +297,33 EXPECTED | |||
|
297 | 297 | assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '') |
|
298 | 298 | end |
|
299 | 299 | |
|
300 | def test_pre_content_should_not_parse_wiki_and_redmine_links | |
|
301 | raw = <<-RAW | |
|
302 | [[CookBook documentation]] | |
|
303 | ||
|
304 | #1 | |
|
305 | ||
|
306 | <pre> | |
|
307 | [[CookBook documentation]] | |
|
308 | ||
|
309 | #1 | |
|
310 | </pre> | |
|
311 | RAW | |
|
312 | ||
|
313 | expected = <<-EXPECTED | |
|
314 | <p><a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a></p> | |
|
315 | <p><a href="/issues/1" class="issue status-1 priority-1" title="Can't print recipes (New)">#1</a></p> | |
|
316 | <pre> | |
|
317 | [[CookBook documentation]] | |
|
318 | ||
|
319 | #1 | |
|
320 | </pre> | |
|
321 | EXPECTED | |
|
322 | ||
|
323 | @project = Project.find(1) | |
|
324 | assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '') | |
|
325 | end | |
|
326 | ||
|
300 | 327 | def test_syntax_highlight |
|
301 | 328 | raw = <<-RAW |
|
302 | 329 | <pre><code class="ruby"> |
General Comments 0
You need to be logged in to leave comments.
Login now