turndown 1.0.0

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.
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Turndown
4
+ module Utilities
5
+ BLOCK_ELEMENTS = %w[
6
+ ADDRESS ARTICLE ASIDE AUDIO BLOCKQUOTE BODY CANVAS CENTER DD DIR DIV DL DT
7
+ FIELDSET FIGCAPTION FIGURE FOOTER FORM FRAMESET H1 H2 H3 H4 H5 H6 HEADER
8
+ HGROUP HR HTML ISINDEX LI MAIN MENU NAV NOFRAMES NOSCRIPT OL OUTPUT P PRE
9
+ SECTION TABLE TBODY TD TFOOT TH THEAD TR UL
10
+ ].freeze
11
+
12
+ VOID_ELEMENTS = %w[
13
+ AREA BASE BR COL COMMAND EMBED HR IMG INPUT KEYGEN LINK META PARAM SOURCE
14
+ TRACK WBR
15
+ ].freeze
16
+
17
+ MEANINGFUL_WHEN_BLANK_ELEMENTS = %w[
18
+ A TABLE THEAD TBODY TFOOT TH TD IFRAME SCRIPT AUDIO VIDEO
19
+ ].freeze
20
+
21
+ module_function
22
+
23
+ def extend(destination, *sources)
24
+ sources.each do |source|
25
+ source.each do |key, value|
26
+ destination[key] = value
27
+ end
28
+ end
29
+ destination
30
+ end
31
+
32
+ def repeat(character, count)
33
+ character * count
34
+ end
35
+
36
+ def trim_leading_newlines(string)
37
+ string.sub(/\A\n+/, "")
38
+ end
39
+
40
+ def trim_trailing_newlines(string)
41
+ index_end = string.length
42
+ index_end -= 1 while index_end.positive? && string[index_end - 1] == "\n"
43
+ string[0, index_end]
44
+ end
45
+
46
+ def trim_newlines(string)
47
+ trim_trailing_newlines(trim_leading_newlines(string))
48
+ end
49
+
50
+ def is_block?(node)
51
+ node_name_in?(node, BLOCK_ELEMENTS)
52
+ end
53
+
54
+ def is_void?(node)
55
+ node_name_in?(node, VOID_ELEMENTS)
56
+ end
57
+
58
+ def has_void?(node)
59
+ has_descendant_named?(node, VOID_ELEMENTS)
60
+ end
61
+
62
+ def is_meaningful_when_blank?(node)
63
+ node_name_in?(node, MEANINGFUL_WHEN_BLANK_ELEMENTS)
64
+ end
65
+
66
+ def has_meaningful_when_blank?(node)
67
+ has_descendant_named?(node, MEANINGFUL_WHEN_BLANK_ELEMENTS)
68
+ end
69
+
70
+ def escape_markdown(string)
71
+ string
72
+ .gsub(/\\/) { '\\' * 2 }
73
+ .gsub(/\*/) { '\*' }
74
+ .gsub(/\A-/) { '\-' }
75
+ .gsub(/\A\+ /) { '\+ ' }
76
+ .gsub(/\A(=+)/) { "\\#{$1}" }
77
+ .gsub(/\A(\#{1,6}) /) { "\\#{$1} " }
78
+ .gsub(/`/) { '\`' }
79
+ .gsub(/\A~~~/) { '\~~~' }
80
+ .gsub(/\[/) { '\[' }
81
+ .gsub(/\]/) { '\]' }
82
+ .gsub(/\A>/) { '\>' }
83
+ .gsub(/_/) { '\_' }
84
+ .gsub(/\A(\d+)\. /) { "#{$1}\\. " }
85
+ end
86
+
87
+ def camel_to_snake(string)
88
+ string.gsub(/([A-Z])/, '_\1').downcase.sub(/\A_/, "")
89
+ end
90
+
91
+ def node_name_in?(node, names)
92
+ node.respond_to?(:node_name) && names.include?(node.node_name)
93
+ end
94
+
95
+ def has_descendant_named?(node, names)
96
+ return false unless node.respond_to?(:css)
97
+
98
+ selector = names.map(&:downcase).join(",")
99
+ node.css(selector).any?
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Turndown
4
+ VERSION = "1.0.0"
5
+ end
data/lib/turndown.rb ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Turndown converts HTML to Markdown.
4
+ #
5
+ # This is an unofficial Ruby port of Turndown by Dom Christie
6
+ # (https://github.com/mixmark-io/turndown), released under the MIT License.
7
+ # It is not affiliated with or endorsed by the upstream project.
8
+
9
+ require "nokogiri"
10
+
11
+ require_relative "turndown/version"
12
+ require_relative "turndown/utilities"
13
+ require_relative "turndown/rule"
14
+ require_relative "turndown/rules"
15
+ require_relative "turndown/node"
16
+ require_relative "turndown/collapse_whitespace"
17
+ require_relative "turndown/root_node"
18
+ require_relative "turndown/commonmark_rules"
19
+ require_relative "turndown/converter"
20
+ require_relative "turndown/plugins/gfm"
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: turndown
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Devran Cosmo Uenal
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: nokogiri
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.16'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1.16'
26
+ description: A Nokogiri-backed Ruby port of Turndown and turndown-plugin-gfm, verified
27
+ against the upstream fixture corpus. Unofficial and not affiliated with the upstream
28
+ JavaScript project.
29
+ email:
30
+ - devran@bavmind.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - CHANGELOG.md
36
+ - LICENSE
37
+ - README.md
38
+ - lib/turndown.rb
39
+ - lib/turndown/collapse_whitespace.rb
40
+ - lib/turndown/commonmark_rules.rb
41
+ - lib/turndown/converter.rb
42
+ - lib/turndown/node.rb
43
+ - lib/turndown/plugins/gfm.rb
44
+ - lib/turndown/root_node.rb
45
+ - lib/turndown/rule.rb
46
+ - lib/turndown/rules.rb
47
+ - lib/turndown/utilities.rb
48
+ - lib/turndown/version.rb
49
+ homepage: https://github.com/bavmind/turndown
50
+ licenses:
51
+ - MIT
52
+ metadata:
53
+ homepage_uri: https://github.com/bavmind/turndown
54
+ source_code_uri: https://github.com/bavmind/turndown/tree/v1.0.0
55
+ changelog_uri: https://github.com/bavmind/turndown/blob/main/CHANGELOG.md
56
+ bug_tracker_uri: https://github.com/bavmind/turndown/issues
57
+ rubygems_mfa_required: 'true'
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '3.3'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 4.0.10
73
+ specification_version: 4
74
+ summary: Convert HTML to Markdown. An unofficial Ruby port of Turndown.
75
+ test_files: []