is-kramdown-hooked 0.8.2 → 0.8.4

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: 441407ef942bc9023cef0f42290407003c63794cfcb7cd61f745e6f48c2f23c1
4
+ data.tar.gz: dc339b920c31f79e407da8d2f4df2013d86dbfe87df843cae0f6ecd0f60d0288
5
5
  SHA512:
6
- metadata.gz: bf9a23991ce75d6ab7c53cf51622b39aa00c466ebf325f229b452c0540581971744b315acefda97f4d2f8ff41aaf7319e20551163420ea93c8dbd20b970d732c
7
- data.tar.gz: 42ff8de93e9dbee2ef4b83af942c576f29f74a335d366f97e4422bc0987ccdf6bebe883dfc61764b07299d19b9b978486e7350ad404ac11f46da003d700cb417
6
+ metadata.gz: eafe784adfb77ae948e20e062ccff8f01ddc329d54ababfa62d8b70dff0e222e9016a423071e6079696b5831bd5c6af71943a8b4c31b703af63baadf51d92177
7
+ data.tar.gz: 022f49b60282a26c60b841f6764e2c7d07fd4cca00ea56458f7fae01936768f21263e19a4b308ec53610492e6ba3aed7c26edb737c923a3a24e2bdba3c0b3eda
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:
@@ -16,11 +16,34 @@ class Kramdown::Parser::ISKram < Kramdown::Parser::Kramdown
16
16
  end
17
17
  end
18
18
 
19
+ def register_ast_element_hook *elements, &hook
20
+ @element_hooks ||= []
21
+ @element_hooks << { elements: elements, hook: hook }
22
+ end
23
+
24
+ def trigger_ast_elements_hooks parser
25
+ return if @element_hooks.nil? || @element_hooks.empty?
26
+ traverse = lambda do |elem|
27
+ elem.children.each_with_index do |child, index|
28
+ handled = false
29
+ @element_hooks.each do |hook|
30
+ if hook[:elements].include?(child.type)
31
+ hooked = hook[:hook].call elem, child, index
32
+ handled ||= hooked
33
+ end
34
+ end
35
+ traverse.call child unless handled
36
+ end
37
+ end
38
+ traverse.call parser.root
39
+ end
40
+
19
41
  end
20
42
 
21
43
  def parse
22
44
  super
23
45
  trigger_post_parse_hooks
46
+ trigger_ast_elements_hooks
24
47
  end
25
48
 
26
49
  private
@@ -29,4 +52,8 @@ class Kramdown::Parser::ISKram < Kramdown::Parser::Kramdown
29
52
  self.class.trigger_post_parse_hooks self
30
53
  end
31
54
 
55
+ def trigger_ast_elements_hooks
56
+ self.class.trigger_ast_elements_hooks self
57
+ end
58
+
32
59
  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.4
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.