jekyll-relative-links 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a52004700c904303c029534ffabb2d4219b2680f0f0ab3e6503bec3590a03b5
4
- data.tar.gz: a4f0aaeeec9d1613304f0592dda8eff220a9efb9a94a1d48ab6b8058b4a08ead
3
+ metadata.gz: dc58c9b968be5f460493796546b5da7dcb3ec9dc70521790e7475945eb7808ff
4
+ data.tar.gz: ff9390b8df13ac3cbdd9034a2bfdac93b14e8f0d3a9396a07839f2be791b87ab
5
5
  SHA512:
6
- metadata.gz: cd5cea8919a1a671a6809abd815556339e193c9c0ed69cf27f10674124cd47f087f032df68cdacfa3b17058fbda2ad707b7bb9a845a118347f3a81dc737c2bb2
7
- data.tar.gz: 0b837f08ffc3e18e0e5c49186c7cb2ba8a2d05093ad67084e07562c5aaa88578a0e41169fbaf16b6f6e3edd26d550fd5b0a14afc81ff82deadcd547fc6364700
6
+ metadata.gz: 67c213b7308561caee8f28bb8132667d0f5fc8d9001c74eb65cbde328a81265a4183863762f5934f262ffa676504f19b9011eac679e2f5abc9583e1d019c46cb
7
+ data.tar.gz: '012508fa52c056fcd891c15bb2d75e636e97053e3e53b244f5a63fa66edde0aa68ff760fbb0816fe07f149105770803f6be604da7e1029647a4af7d4120c3340'
@@ -8,9 +8,11 @@ module JekyllRelativeLinks
8
8
  include Jekyll::Filters::URLFilters
9
9
 
10
10
  LINK_TEXT_REGEX = %r!(.*?)!.freeze
11
- FRAGMENT_REGEX = %r!(#.+?)?!.freeze
12
- INLINE_LINK_REGEX = %r!\[#{LINK_TEXT_REGEX}\]\(([^\)]+?)#{FRAGMENT_REGEX}\)!.freeze
13
- REFERENCE_LINK_REGEX = %r!^\s*?\[#{LINK_TEXT_REGEX}\]: (.+?)#{FRAGMENT_REGEX}\s*?$!.freeze
11
+ FRAGMENT_REGEX = %r!(#.+?|)?!.freeze
12
+ TITLE_REGEX = %r{(\s+"(?:\\"|[^"])*(?<!\\)"|\s+"(?:\\'|[^'])*(?<!\\)')?}.freeze
13
+ FRAG_AND_TITLE_REGEX = %r!#{FRAGMENT_REGEX}#{TITLE_REGEX}!.freeze
14
+ INLINE_LINK_REGEX = %r!\[#{LINK_TEXT_REGEX}\]\(([^)]+?)#{FRAG_AND_TITLE_REGEX}\)!.freeze
15
+ REFERENCE_LINK_REGEX = %r!^\s*?\[#{LINK_TEXT_REGEX}\]: (.+?)#{FRAG_AND_TITLE_REGEX}\s*?$!.freeze
14
16
  LINK_REGEX = %r!(#{INLINE_LINK_REGEX}|#{REFERENCE_LINK_REGEX})!.freeze
15
17
  CONVERTER_CLASS = Jekyll::Converters::Markdown
16
18
  CONFIG_KEY = "relative_links"
@@ -48,27 +50,35 @@ module JekyllRelativeLinks
48
50
  return document if document.content.nil?
49
51
 
50
52
  document.content = document.content.dup.gsub(LINK_REGEX) do |original|
51
- link_type, link_text, relative_path, fragment = link_parts(Regexp.last_match)
52
- next original unless replaceable_link?(relative_path)
53
+ link = link_parts(Regexp.last_match)
54
+ next original unless replaceable_link?(link.path)
53
55
 
54
- path = path_from_root(relative_path, url_base)
56
+ path = path_from_root(link.path, url_base)
55
57
  url = url_for_path(path)
56
58
  next original unless url
57
59
 
58
- replacement_text(link_type, link_text, url, fragment)
60
+ link.path = url
61
+ replacement_text(link)
59
62
  end
63
+
64
+ replace_relative_links_excerpt!(document)
60
65
  rescue ArgumentError => e
61
66
  raise e unless e.to_s.start_with?("invalid byte sequence in UTF-8")
62
67
  end
63
68
 
64
69
  private
65
70
 
71
+ # Stores info on a Markdown Link (avoid rubocop's Metrics/ParameterLists warning)
72
+ Link = Struct.new(:link_type, :text, :path, :fragment, :title)
73
+
66
74
  def link_parts(matches)
67
- link_type = matches[2] ? :inline : :reference
68
- link_text = matches[link_type == :inline ? 2 : 5]
69
- relative_path = matches[link_type == :inline ? 3 : 6]
70
- fragment = matches[link_type == :inline ? 4 : 7]
71
- [link_type, link_text, relative_path, fragment]
75
+ last_inline = 5
76
+ link_type = matches[2] ? :inline : :reference
77
+ link_text = matches[link_type == :inline ? 2 : last_inline + 1]
78
+ relative_path = matches[link_type == :inline ? 3 : last_inline + 2]
79
+ fragment = matches[link_type == :inline ? 4 : last_inline + 3]
80
+ title = matches[link_type == :inline ? 5 : last_inline + 4]
81
+ Link.new(link_type, link_text, relative_path, fragment, title)
72
82
  end
73
83
 
74
84
  def context
@@ -84,6 +94,7 @@ module JekyllRelativeLinks
84
94
  end
85
95
 
86
96
  def url_for_path(path)
97
+ path = CGI.unescape(path)
87
98
  target = potential_targets.find { |p| p.relative_path.sub(%r!\A/!, "") == path }
88
99
  relative_url(target.url) if target&.url
89
100
  end
@@ -93,18 +104,22 @@ module JekyllRelativeLinks
93
104
  end
94
105
 
95
106
  def path_from_root(relative_path, url_base)
107
+ is_absolute = relative_path.start_with? "/"
108
+
96
109
  relative_path.sub!(%r!\A/!, "")
97
- absolute_path = File.expand_path(relative_path, url_base)
110
+ base = is_absolute ? "" : url_base
111
+ absolute_path = File.expand_path(relative_path, base)
98
112
  absolute_path.sub(%r!\A#{Regexp.escape(Dir.pwd)}/!, "")
99
113
  end
100
114
 
101
- def replacement_text(type, text, url, fragment = nil)
102
- url << fragment if fragment
115
+ # @param link [Link] A Link object describing the markdown link to make
116
+ def replacement_text(link)
117
+ link.path << link.fragment if link.fragment
103
118
 
104
- if type == :inline
105
- "[#{text}](#{url})"
119
+ if link.link_type == :inline
120
+ "[#{link.text}](#{link.path}#{link.title})"
106
121
  else
107
- "\n[#{text}]: #{url}"
122
+ "\n[#{link.text}]: #{link.path}#{link.title}"
108
123
  end
109
124
  end
110
125
 
@@ -153,5 +168,9 @@ module JekyllRelativeLinks
153
168
  def global_entry_filter
154
169
  @global_entry_filter ||= Jekyll::EntryFilter.new(site)
155
170
  end
171
+
172
+ def replace_relative_links_excerpt!(document)
173
+ document.data["excerpt"] = Jekyll::Excerpt.new(document) if document.data["excerpt"]
174
+ end
156
175
  end
157
176
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllRelativeLinks
4
- VERSION = "0.6.1"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-relative-links
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-23 00:00:00.000000000 Z
11
+ date: 2023-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: kramdown-parser-gfm
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: rspec
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +64,14 @@ dependencies:
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: '0.71'
67
+ version: '1.0'
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
- version: '0.71'
74
+ version: '1.0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: rubocop-jekyll
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -72,7 +86,35 @@ dependencies:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
88
  version: '0.10'
75
- description:
89
+ - !ruby/object:Gem::Dependency
90
+ name: rubocop-performance
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.5'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.5'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '2.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '2.0'
117
+ description:
76
118
  email:
77
119
  - ben.balter@github.com
78
120
  executables: []
@@ -87,7 +129,7 @@ homepage: https://github.com/benbalter/jekyll-relative-links
87
129
  licenses:
88
130
  - MIT
89
131
  metadata: {}
90
- post_install_message:
132
+ post_install_message:
91
133
  rdoc_options: []
92
134
  require_paths:
93
135
  - lib
@@ -102,8 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
144
  - !ruby/object:Gem::Version
103
145
  version: '0'
104
146
  requirements: []
105
- rubygems_version: 3.0.6
106
- signing_key:
147
+ rubygems_version: 3.2.33
148
+ signing_key:
107
149
  specification_version: 4
108
150
  summary: A Jekyll plugin to convert relative links to markdown files to their rendered
109
151
  equivalents.