From e6e6b2fe1c9a91ce9b1f07ce96e2ad811bddc10f Mon Sep 17 00:00:00 2001 From: Toks Date: Tue, 18 Nov 2014 15:13:43 -0500 Subject: [PATCH] fixes #2095 --- app/logical/d_text.rb | 23 ++++++++++++++--------- test/unit/dtext_test.rb | 12 +++++++++++- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/logical/d_text.rb b/app/logical/d_text.rb index f633217d8..29363af30 100644 --- a/app/logical/d_text.rb +++ b/app/logical/d_text.rb @@ -58,19 +58,24 @@ class DText end def self.parse_links(str) - str.gsub(/("[^"]+":(https?:\/\/|\/)[^\s\r\n<>]+|https?:\/\/[^\s\r\n<>]+)+/) do |url| - if url =~ /^"([^"]+)":(.+)$/ + str.gsub(/("[^"]+":(https?:\/\/|\/)[^\s\r\n<>]+|https?:\/\/[^\s\r\n<>]+|"[^"]+":\[(https?:\/\/|\/)[^\s\r\n<>\]]+\])+/) do |url| + ch = "" + + if url =~ /^"([^"]+)":\[(.+)\]$/ text = $1 url = $2 else - text = url - end + if url =~ /^"([^"]+)":(.+)$/ + text = $1 + url = $2 + else + text = url + end - if url =~ /([;,.!?\)\]<>])$/ - url.chop! - ch = $1 - else - ch = "" + if url =~ /([;,.!?\)\]<>])$/ + url.chop! + ch = $1 + end end '' + text + '' + ch diff --git a/test/unit/dtext_test.rb b/test/unit/dtext_test.rb index d50c18645..d89f6f9b0 100644 --- a/test/unit/dtext_test.rb +++ b/test/unit/dtext_test.rb @@ -105,7 +105,7 @@ class DTextTest < ActiveSupport::TestCase assert_equal('

a (http://test.com) b

', p('a (http://test.com) b')) end - def test_old_syle_links + def test_old_style_links assert_equal('

test

', p('"test":http://test.com')) end @@ -113,6 +113,16 @@ class DTextTest < ActiveSupport::TestCase assert_equal('

"1" 2 & 3

', p('"1" "2 & 3":http://three.com')) end + def test_new_style_links + assert_equal('

test

', p('"test":[http://test.com]')) + end + + def test_new_style_links_with_parentheses + assert_equal('

test

', p('"test":[http://test.com/(parentheses)]')) + assert_equal('

(test)

', p('("test":[http://test.com/(parentheses)])')) + assert_equal('

[test]

', p('["test":[http://test.com/(parentheses)]]')) + end + def test_lists_1 assert_equal('', p('* a')) end