is-kramdown-hooked 0.8.2 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf8be106080d74dee0d5056e1e12b0815e1b6172681cf4e26a872fb012fa877a
4
- data.tar.gz: 85229c71309939e1912abec29ea70f8c2a2478c3ce5c8f3d5f7a3fae7dba7815
3
+ metadata.gz: 2a3cd95aeb6e6688217305c0b8a77ffbfe6298a56acdf5b771f59089f147d6b5
4
+ data.tar.gz: ad0c0ebaf2f0c8adfa99bf1a25f4695b694e0b52a8741a4c50b3389b509c09a8
5
5
  SHA512:
6
- metadata.gz: bf9a23991ce75d6ab7c53cf51622b39aa00c466ebf325f229b452c0540581971744b315acefda97f4d2f8ff41aaf7319e20551163420ea93c8dbd20b970d732c
7
- data.tar.gz: 42ff8de93e9dbee2ef4b83af942c576f29f74a335d366f97e4422bc0987ccdf6bebe883dfc61764b07299d19b9b978486e7350ad404ac11f46da003d700cb417
6
+ metadata.gz: ef85eb63c1c59975699c0a2394b60cc86e4701eefba563c2231a59e9d01a3523b6248d8b62e9d848e5facde18d7e7cd7563e6c8a1729e19bbeb375eaf5695f44
7
+ data.tar.gz: 70991d03b7279a578341188d36fe2220a7042f8b44f711c6880da5f4ac009df46b85865ffa21e5295a1d3b1842971333965465e4f6e39a6a7e44ab1c8f88041c
data/README.md CHANGED
@@ -12,7 +12,7 @@ Extensible Kramdown parser with inner hooks for enhanced Markdown processing in
12
12
 
13
13
  ## Version
14
14
 
15
- + **0.8.0** — pre-release.
15
+ + **0.8.x** — pre-release.
16
16
 
17
17
  ## About
18
18
 
@@ -32,7 +32,7 @@ is-kramdown-hooked is a flexible Ruby gem that extends the standard Kramdown Mar
32
32
  Add this line to your Jekyll site's `Gemfile` or any Ruby project's Gemfile:
33
33
 
34
34
  ```ruby
35
- gem 'is-kramdown-hooked', '~> 0.8.0'
35
+ gem 'is-kramdown-hooked', '~> 0.8.2'
36
36
  ```
37
37
 
38
38
  Then run:
@@ -8,19 +8,59 @@ class Kramdown::Parser::ISKram < Kramdown::Parser::Kramdown
8
8
  def register_post_parse_hook &hook
9
9
  @hooks ||= []
10
10
  @hooks << hook
11
+ hook
12
+ end
13
+
14
+ def unregister_post_parse_hook hook
15
+ if @hooks
16
+ @hooks.delete hook
17
+ end
11
18
  end
12
19
 
13
20
  def trigger_post_parse_hooks parser
21
+ return if @hooks.nil? || @hooks.empty?
14
22
  @hooks.each do |hook|
15
23
  hook.call parser
16
24
  end
17
25
  end
18
26
 
27
+ def register_ast_element_hook *elements, &hook
28
+ @element_hooks ||= []
29
+ @element_hooks << { elements: elements, hook: hook }
30
+ hook
31
+ end
32
+
33
+ def unregister_ast_element_hook hook
34
+ if @element_hooks
35
+ @element_hooks.delete_if { |rec| rec[:hook] == hook }
36
+ end
37
+ end
38
+
39
+ def trigger_ast_elements_hooks parser
40
+ return if @element_hooks.nil? || @element_hooks.empty?
41
+ traverse = lambda do |path|
42
+ elem = path.last
43
+ pp elem
44
+ elem.children.each do |child|
45
+ handled = false
46
+ @element_hooks.each do |hook|
47
+ if hook[:elements].include?(child.type)
48
+ hooked = hook[:hook].call path, child
49
+ handled ||= hooked
50
+ end
51
+ end
52
+ traverse.call(path + [child]) unless handled
53
+ end
54
+ end
55
+ traverse.call([parser.root])
56
+ end
57
+
19
58
  end
20
59
 
21
60
  def parse
22
61
  super
23
62
  trigger_post_parse_hooks
63
+ trigger_ast_elements_hooks
24
64
  end
25
65
 
26
66
  private
@@ -29,4 +69,8 @@ class Kramdown::Parser::ISKram < Kramdown::Parser::Kramdown
29
69
  self.class.trigger_post_parse_hooks self
30
70
  end
31
71
 
72
+ def trigger_ast_elements_hooks
73
+ self.class.trigger_ast_elements_hooks self
74
+ end
75
+
32
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: is-kramdown-hooked
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Shikhalev
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.22.0
60
+ version: 1.0.0
61
61
  type: :development
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.22.0
67
+ version: 1.0.0
68
68
  description: Flexible Jekyll plugin gem that extends Kramdown Markdown parser with
69
69
  customizable AST hooks, enabling enhanced Markdown processing and seamless integration
70
70
  within Jekyll sites.