From 18fc90d950ccc6afe41e743959a65a2a49bb315e Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 14:06:34 -0600 Subject: [PATCH 1/7] Add it "handles links with nested square brackets" test to generator_spec --- spec/jekyll-relative-links/generator_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/jekyll-relative-links/generator_spec.rb b/spec/jekyll-relative-links/generator_spec.rb index fd60e11..34eb043 100644 --- a/spec/jekyll-relative-links/generator_spec.rb +++ b/spec/jekyll-relative-links/generator_spec.rb @@ -78,6 +78,11 @@ expect(page.content).to include("[Ghost page](ghost-page.md)") end + it "handles links with nested square brackets" do + expected = "[[A link with square brackets]](/another-page.html)" + expect(page.content).to include(expected) + end + context "reference links" do it "handles reference links" do expect(page.content).to include("[reference]: /another-page.html") From 186d9852166f70e523f842e2fb77e0105c0a0f17 Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 17:33:59 -0600 Subject: [PATCH 2/7] Add [[A link with square brackets]](another-page.md) to page.md fixture --- spec/fixtures/site/page.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/fixtures/site/page.md b/spec/fixtures/site/page.md index 816900d..aba88d0 100644 --- a/spec/fixtures/site/page.md +++ b/spec/fixtures/site/page.md @@ -37,6 +37,8 @@ [Another item](_items/some-subdir/another-item.md) +[[A link with square brackets]](another-page.md) + Content end [reference]: another-page.md From ed399507278721d0aa97d92dd178c8c7567a0711 Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 17:34:57 -0600 Subject: [PATCH 3/7] Add |.* to LINK_TEXT_REGEX to allow double nested brackets --- lib/jekyll-relative-links/generator.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/jekyll-relative-links/generator.rb b/lib/jekyll-relative-links/generator.rb index 7289918..4c4cea4 100644 --- a/lib/jekyll-relative-links/generator.rb +++ b/lib/jekyll-relative-links/generator.rb @@ -7,7 +7,7 @@ class Generator < Jekyll::Generator # Use Jekyll's native relative_url filter include Jekyll::Filters::URLFilters - LINK_TEXT_REGEX = %r!([^\]]+)! + LINK_TEXT_REGEX = %r!([^\]]+|.*)! FRAGMENT_REGEX = %r!(#.+?)?! INLINE_LINK_REGEX = %r!\[#{LINK_TEXT_REGEX}\]\(([^\)]+?)#{FRAGMENT_REGEX}\)! REFERENCE_LINK_REGEX = %r!^\s*?\[#{LINK_TEXT_REGEX}\]: (.+?)#{FRAGMENT_REGEX}\s*?$! @@ -43,7 +43,6 @@ def generate(site) def replace_relative_links!(document) url_base = File.dirname(document.relative_path) return document if document.content.nil? - document.content = document.content.dup.gsub(LINK_REGEX) do |original| link_type, link_text, relative_path, fragment = link_parts(Regexp.last_match) next original if fragment?(relative_path) || absolute_url?(relative_path) From e4fe216bddb1d93dc153876f6336231ceb1a602a Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 17:40:55 -0600 Subject: [PATCH 4/7] Add it "handles links with escaped nested square brackets" to generator_spec --- spec/jekyll-relative-links/generator_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/jekyll-relative-links/generator_spec.rb b/spec/jekyll-relative-links/generator_spec.rb index 34eb043..ef7e04d 100644 --- a/spec/jekyll-relative-links/generator_spec.rb +++ b/spec/jekyll-relative-links/generator_spec.rb @@ -83,6 +83,11 @@ expect(page.content).to include(expected) end + it "handles links with escaped nested square brackets" do + expected = "[\\[A link with escaped square brackets\\]](/another-page.html)" + expect(page.content).to include(expected) + end + context "reference links" do it "handles reference links" do expect(page.content).to include("[reference]: /another-page.html") From 9eccb8c651917223d1e754d33636a22070470c99 Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 17:43:48 -0600 Subject: [PATCH 5/7] Add [\[A link with escaped square brackets\]](another-page.md) to page.md fixture, all specs passing --- spec/fixtures/site/page.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/fixtures/site/page.md b/spec/fixtures/site/page.md index aba88d0..f3c007d 100644 --- a/spec/fixtures/site/page.md +++ b/spec/fixtures/site/page.md @@ -39,6 +39,8 @@ [[A link with square brackets]](another-page.md) +[\[A link with escaped square brackets\]](/another-page.md) + Content end [reference]: another-page.md From 479f9599764b8822cd17c6827645e51d0a504e78 Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Sun, 20 May 2018 17:51:47 -0600 Subject: [PATCH 6/7] Add deleted line break back in --- lib/jekyll-relative-links/generator.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/jekyll-relative-links/generator.rb b/lib/jekyll-relative-links/generator.rb index 4c4cea4..a749a05 100644 --- a/lib/jekyll-relative-links/generator.rb +++ b/lib/jekyll-relative-links/generator.rb @@ -43,6 +43,7 @@ def generate(site) def replace_relative_links!(document) url_base = File.dirname(document.relative_path) return document if document.content.nil? + document.content = document.content.dup.gsub(LINK_REGEX) do |original| link_type, link_text, relative_path, fragment = link_parts(Regexp.last_match) next original if fragment?(relative_path) || absolute_url?(relative_path) From bcea11e54b432cc172407d81616328aed27b600e Mon Sep 17 00:00:00 2001 From: Andrew Dymond Date: Mon, 21 May 2018 12:28:42 -0600 Subject: [PATCH 7/7] Modify LINK_TEXT_REGEX to match .*?, all tests still passing --- lib/jekyll-relative-links/generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll-relative-links/generator.rb b/lib/jekyll-relative-links/generator.rb index a749a05..47ec348 100644 --- a/lib/jekyll-relative-links/generator.rb +++ b/lib/jekyll-relative-links/generator.rb @@ -7,7 +7,7 @@ class Generator < Jekyll::Generator # Use Jekyll's native relative_url filter include Jekyll::Filters::URLFilters - LINK_TEXT_REGEX = %r!([^\]]+|.*)! + LINK_TEXT_REGEX = %r!(.*?)! FRAGMENT_REGEX = %r!(#.+?)?! INLINE_LINK_REGEX = %r!\[#{LINK_TEXT_REGEX}\]\(([^\)]+?)#{FRAGMENT_REGEX}\)! REFERENCE_LINK_REGEX = %r!^\s*?\[#{LINK_TEXT_REGEX}\]: (.+?)#{FRAGMENT_REGEX}\s*?$!