From c3356af8d1b8f865c5d617da2cb779aeea6bd035 Mon Sep 17 00:00:00 2001
From: MrZYX <pr0fkill@gmail.com>
Date: Wed, 1 Dec 2010 20:59:26 +0100
Subject: [PATCH] mardownify doesn't strip _/__/*/** without context anymore
 and allow __/** to be escaped with \__/\** instead of \_\_/\*\*. probably
 makes it less robust against weired constructs though

---
 app/helpers/application_helper.rb       | 19 +++++++++++--------
 spec/helpers/application_helper_spec.rb |  2 +-
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index f37026b688..89e6121cf8 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -186,14 +186,17 @@ module ApplicationHelper
     end
 
     if options[:emphasis]
-      message.gsub!(/([^\\]|^)\*\*(([^*]|([^*]\*[^*]))*[^*\\])\*\*/, '\1<strong>\2</strong>')
-      message.gsub!(/([^\\]|^)__(([^_]|([^_]_[^_]))*[^_\\])__/, '\1<strong>\2</strong>')
-      message.gsub!(/([^\\]|^)\*([^*]*[^\\])\*/, '\1<em>\2</em>')
-      message.gsub!(/([^\\]|^)_([^_]*[^\\])_/, '\1<em>\2</em>')
-      message.gsub!(/([^\\]|^)\*/, '\1')
-      message.gsub!(/([^\\]|^)_/, '\1')
-      message.gsub!("\\*", "*")
-      message.gsub!("\\_", "_")
+      message.gsub!("\\**", "-^doublestar^-")
+      message.gsub!("\\__", "-^doublescore^-")
+      message.gsub!("\\*", "-^star^-")
+      message.gsub!("\\_", "-^score^-")
+      message.gsub!(/(\*\*\*|___)(.+?)\1/m, '<em><strong>\2</strong></em>')
+      message.gsub!(/(\*\*|__)(.+?)\1/m, '<strong>\2</strong>')
+      message.gsub!(/(\*|_)(.+?)\1/m, '<em>\2</em>')
+      message.gsub!("-^doublestar^-", "**")
+      message.gsub!("-^doublescore^-", "__")
+      message.gsub!("-^star^-", "*")
+      message.gsub!("-^score^-", "_")
     end
 
     if options[:youtube]
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 3682c2dfb4..f093ed46d6 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -171,7 +171,7 @@ describe ApplicationHelper do
 
     it "should allow escaping" do
       message = '*some text* \\*some text* \\**some text* _some text_ \\_some text_ \\__some text_'
-      markdownify(message).should == "<em>some text</em> *some text<em> *</em>some text <em>some text</em> _some text<em> _</em>some text"
+      markdownify(message).should == "<em>some text</em> *some text<em> **some text</em> <em>some text</em> _some text<em> __some text</em>"
     end
 
     describe "options" do
-- 
GitLab