html-to-markdown 2.5.3 → 2.5.5

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: 4c670930402ff8c5400d263d0e17e42248437968c6cec4dfe15020395723261c
4
- data.tar.gz: 5f8a56c6acd7ac3e63bf9ec9e24aaa4dc097e7caa539f9ec4f6a866c35aa67cb
3
+ metadata.gz: da35a384f2b4f769a94313ea7611f281e2d85f1c01b8862f28ee721cd6fcdd22
4
+ data.tar.gz: e956bce4c519a62feb137aa6448b514a6099e75ee978d247846a31c35a466ce0
5
5
  SHA512:
6
- metadata.gz: 61672702d8e7e6554fbca4129602bbb25f4027f789db55e847991d4a960bf0fcfa3b6f611ce6197e668e9faae5fadeb30bb559cc6aaf1b65959c97e1a02fbf3e
7
- data.tar.gz: d2b89d41bbccec7876ec190725ffdf962c4838d8d3717c8090c40458ba3c480e59606fb450870f26a67fca206d39d225b0dc173131bd11a9cb5d28f89caf4457
6
+ metadata.gz: b84f0b4305bd792948ee2924190143cd2ec0161d84ab0853b50039e214bbff19c6806718c12cb51a086e39557cb70e1650ef2baf4840419ced2e659e7575a28f
7
+ data.tar.gz: 636fc6ce5662a33ad62f2526a5b6105d755db0a57c6b99ed7c4c519ed0f6f44611be4e51932ccab868e30a6b89b87071678606f454e18d1f17b235546b7c91ee
data/.rubocop.yml ADDED
@@ -0,0 +1,29 @@
1
+ plugins:
2
+ - rubocop-rspec
3
+
4
+ AllCops:
5
+ NewCops: enable
6
+ TargetRubyVersion: 3.2
7
+ Exclude:
8
+ - "tmp/**/*"
9
+ - "vendor/**/*"
10
+
11
+ Style/Documentation:
12
+ Enabled: false
13
+
14
+ Metrics/BlockLength:
15
+ Exclude:
16
+ - "spec/**/*"
17
+ - "*.gemspec"
18
+
19
+ Metrics/MethodLength:
20
+ Max: 15
21
+
22
+ RSpec/MultipleExpectations:
23
+ Enabled: false
24
+
25
+ RSpec/ExampleLength:
26
+ Enabled: false
27
+
28
+ RSpec/SpecFilePathFormat:
29
+ Enabled: false
data/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "html-to-markdown-rb"
3
- version = "2.5.3"
3
+ version = "2.5.5"
4
4
  edition = "2021"
5
5
  authors = ["Na'aman Hirschfeld <nhirschfeld@gmail.com>"]
6
6
  license = "MIT"
@@ -21,7 +21,7 @@ crate-type = ["cdylib", "rlib"]
21
21
  default = []
22
22
 
23
23
  [dependencies]
24
- html-to-markdown-rs = { version = "2.5.3", features = ["inline-images"] }
24
+ html-to-markdown-rs = { version = "2.5.5", features = ["inline-images"] }
25
25
  magnus = { git = "https://github.com/matsadler/magnus", rev = "f6db11769efb517427bf7f121f9c32e18b059b38", features = ["rb-sys"] }
26
26
 
27
27
  [dev-dependencies]
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ ruby '>= 3.2'
6
+
7
+ gemspec
8
+
9
+ group :development, :test do
10
+ gem 'rake-compiler'
11
+ gem 'rb_sys' # provides build tooling when developing locally
12
+ gem 'rspec'
13
+ gem 'rubocop', require: false
14
+ gem 'rubocop-rspec', require: false
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,80 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ html-to-markdown (2.5.5)
5
+ rb_sys (>= 0.9, < 1.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.3)
11
+ diff-lcs (1.6.2)
12
+ json (2.15.2)
13
+ language_server-protocol (3.17.0.5)
14
+ lint_roller (1.1.0)
15
+ parallel (1.27.0)
16
+ parser (3.3.10.0)
17
+ ast (~> 2.4.1)
18
+ racc
19
+ prism (1.6.0)
20
+ racc (1.8.1)
21
+ rainbow (3.1.1)
22
+ rake (13.3.0)
23
+ rake-compiler (1.3.0)
24
+ rake
25
+ rake-compiler-dock (1.9.1)
26
+ rb_sys (0.9.117)
27
+ rake-compiler-dock (= 1.9.1)
28
+ regexp_parser (2.11.3)
29
+ rspec (3.13.2)
30
+ rspec-core (~> 3.13.0)
31
+ rspec-expectations (~> 3.13.0)
32
+ rspec-mocks (~> 3.13.0)
33
+ rspec-core (3.13.6)
34
+ rspec-support (~> 3.13.0)
35
+ rspec-expectations (3.13.5)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.13.0)
38
+ rspec-mocks (3.13.6)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.13.0)
41
+ rspec-support (3.13.6)
42
+ rubocop (1.81.6)
43
+ json (~> 2.3)
44
+ language_server-protocol (~> 3.17.0.2)
45
+ lint_roller (~> 1.1.0)
46
+ parallel (~> 1.10)
47
+ parser (>= 3.3.0.2)
48
+ rainbow (>= 2.2.2, < 4.0)
49
+ regexp_parser (>= 2.9.3, < 3.0)
50
+ rubocop-ast (>= 1.47.1, < 2.0)
51
+ ruby-progressbar (~> 1.7)
52
+ unicode-display_width (>= 2.4.0, < 4.0)
53
+ rubocop-ast (1.47.1)
54
+ parser (>= 3.3.7.2)
55
+ prism (~> 1.4)
56
+ rubocop-rspec (3.7.0)
57
+ lint_roller (~> 1.1)
58
+ rubocop (~> 1.72, >= 1.72.1)
59
+ ruby-progressbar (1.13.0)
60
+ unicode-display_width (3.2.0)
61
+ unicode-emoji (~> 4.1)
62
+ unicode-emoji (4.1.0)
63
+
64
+ PLATFORMS
65
+ arm64-darwin-24
66
+ ruby
67
+
68
+ DEPENDENCIES
69
+ html-to-markdown!
70
+ rake-compiler
71
+ rb_sys
72
+ rspec
73
+ rubocop
74
+ rubocop-rspec
75
+
76
+ RUBY VERSION
77
+ ruby 3.2.9p248
78
+
79
+ BUNDLED WITH
80
+ 2.5.12
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # html-to-markdown-rb
2
2
 
3
- Ruby bindings for the `html-to-markdown` Rust engine the same core that powers the Python wheels, Node.js NAPI bindings, WebAssembly package, and CLI. The gem exposes fast HTML → Markdown conversion with identical rendering behaviour across every supported language.
3
+ Blazing-fast HTML Markdown conversion for Ruby, powered by the same Rust engine used by our Python, Node.js, and WebAssembly packages. Ship identical Markdown across every runtime while enjoying native extension performance.
4
4
 
5
5
  [![Crates.io](https://img.shields.io/crates/v/html-to-markdown-rs.svg)](https://crates.io/crates/html-to-markdown-rs)
6
6
  [![npm version](https://badge.fury.io/js/html-to-markdown-node.svg)](https://www.npmjs.com/package/html-to-markdown-node)
@@ -8,6 +8,15 @@ Ruby bindings for the `html-to-markdown` Rust engine – the same core that powe
8
8
  [![Gem Version](https://badge.fury.io/rb/html-to-markdown.svg)](https://rubygems.org/gems/html-to-markdown)
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/Goldziher/html-to-markdown/blob/main/LICENSE)
10
10
 
11
+ ## Features
12
+
13
+ - ⚡ **Rust-fast**: Ruby bindings around a highly optimised Rust core (60‑80× faster than BeautifulSoup-based converters).
14
+ - 🔁 **Identical output**: Shares logic with the Python wheels, npm bindings, WASM package, and CLI — consistent Markdown everywhere.
15
+ - ⚙️ **Rich configuration**: Control heading styles, list indentation, whitespace handling, HTML preprocessing, and more.
16
+ - 🖼️ **Inline image extraction**: Pull out embedded images (PNG/JPEG/SVG/data URIs) alongside Markdown.
17
+ - 🧰 **Bundled CLI proxy**: Call the Rust CLI straight from Ruby or shell scripts.
18
+ - 🛠️ **First-class Rails support**: Works with `Gem.win_platform?` builds, supports Trusted Publishing, and compiles on install if no native gem matches.
19
+
11
20
  ## Installation
12
21
 
13
22
  ```bash
@@ -32,6 +41,18 @@ ridk exec pacman -S --needed --noconfirm base-devel mingw-w64-ucrt-x86_64-toolch
32
41
 
33
42
  This provides the standard headers (including `strings.h`) required for the bindgen step.
34
43
 
44
+ ## Performance Snapshot
45
+
46
+ Apple M4 • Real Wikipedia documents • `HtmlToMarkdown.convert` (Ruby)
47
+
48
+ | Document | Size | Latency | Throughput | Docs/sec |
49
+ | ------------------- | ----- | ------- | ---------- | -------- |
50
+ | Lists (Timeline) | 129KB | 0.69ms | 187 MB/s | 1,450 |
51
+ | Tables (Countries) | 360KB | 2.19ms | 164 MB/s | 456 |
52
+ | Mixed (Python wiki) | 656KB | 4.88ms | 134 MB/s | 205 |
53
+
54
+ > Same core, same benchmarks: the Ruby extension stays within single-digit % of the Rust CLI and mirrors the Python/Node numbers.
55
+
35
56
  ## Quick Start
36
57
 
37
58
  ```ruby
@@ -56,9 +77,11 @@ puts markdown
56
77
  # - Identical output across languages
57
78
  ```
58
79
 
59
- ### Conversion with Options
80
+ ## API
60
81
 
61
- All configuration mirrors the Rust API. Options accept symbols or strings and match the same defaults as the other bindings.
82
+ ### Conversion Options
83
+
84
+ Pass a Ruby hash (string or symbol keys) to tweak rendering. Every option maps one-for-one with the Rust/Python/Node APIs.
62
85
 
63
86
  ```ruby
64
87
  require 'html_to_markdown'
@@ -67,10 +90,31 @@ markdown = HtmlToMarkdown.convert(
67
90
  '<pre><code class="language-ruby">puts "hi"</code></pre>',
68
91
  heading_style: :atx,
69
92
  code_block_style: :fenced,
70
- bullets: ['*', '-', '+'],
71
- wrap: true,
72
- wrap_width: 80,
73
- preserve_tags: %w[table figure]
93
+ bullets: '*+-',
94
+ list_indent_type: :spaces,
95
+ list_indent_width: 2,
96
+ whitespace_mode: :normalized,
97
+ highlight_style: :double_equal
98
+ )
99
+
100
+ puts markdown
101
+ ```
102
+
103
+ ### HTML Preprocessing
104
+
105
+ Clean up scraped HTML (navigation, forms, malformed markup) before conversion:
106
+
107
+ ```ruby
108
+ require 'html_to_markdown'
109
+
110
+ markdown = HtmlToMarkdown.convert(
111
+ html,
112
+ preprocessing: {
113
+ enabled: true,
114
+ preset: :aggressive, # :minimal, :standard, :aggressive
115
+ remove_navigation: true,
116
+ remove_forms: true
117
+ }
74
118
  )
75
119
  ```
76
120
 
@@ -97,7 +141,7 @@ result.inline_images.each do |img|
97
141
  end
98
142
  ```
99
143
 
100
- ### CLI Proxy
144
+ ## CLI
101
145
 
102
146
  The gem bundles a small proxy for the Rust CLI binary. Use it when you need parity with the standalone `html-to-markdown` executable.
103
147
 
@@ -112,10 +156,17 @@ You can also call the CLI binary directly for scripting:
112
156
 
113
157
  ```ruby
114
158
  HtmlToMarkdown::CLIProxy.call(['--version'])
115
- # => "html-to-markdown 2.5.3"
159
+ # => "html-to-markdown 2.5.5"
160
+ ```
161
+
162
+ Rebuild the CLI locally if you see `CLI binary not built` during tests:
163
+
164
+ ```bash
165
+ bundle exec rake compile # builds the extension
166
+ bundle exec ruby scripts/prepare_ruby_gem.rb # copies the CLI into lib/bin/
116
167
  ```
117
168
 
118
- ### Error Handling
169
+ ## Error Handling
119
170
 
120
171
  Conversion errors raise `HtmlToMarkdown::Error` (wrapping the Rust error context). CLI invocations use specialised subclasses:
121
172
 
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rb_sys/extensiontask'
5
+ require 'rspec/core/rake_task'
6
+
7
+ GEMSPEC = Gem::Specification.load(File.expand_path('html-to-markdown-rb.gemspec', __dir__))
8
+
9
+ RbSys::ExtensionTask.new('html-to-markdown-rb', GEMSPEC) do |ext|
10
+ ext.lib_dir = 'lib'
11
+ ext.cross_compile = true
12
+ ext.cross_platform = %w[
13
+ x86_64-linux
14
+ x86_64-darwin
15
+ arm64-darwin
16
+ x64-mingw32
17
+ ]
18
+ end
19
+
20
+ RSpec::Core::RakeTask.new(:spec)
21
+
22
+ task spec: :compile
23
+ task default: :spec
data/extconf.rb CHANGED
@@ -5,7 +5,7 @@ require 'rb_sys/mkmf'
5
5
  require 'rbconfig'
6
6
 
7
7
  if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
8
- devkit = ENV['RI_DEVKIT']
8
+ devkit = ENV.fetch('RI_DEVKIT', nil)
9
9
  prefix = ENV['MSYSTEM_PREFIX'] || '/ucrt64'
10
10
 
11
11
  if devkit
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/html_to_markdown/version'
4
+
5
+ readme_path = File.expand_path('README.md', __dir__)
6
+ readme_body = File.read(readme_path, encoding: 'UTF-8')
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'html-to-markdown'
10
+ spec.version = HtmlToMarkdown::VERSION
11
+ spec.authors = ["Na'aman Hirschfeld"]
12
+ spec.email = ['nhirschfeld@gmail.com']
13
+
14
+ spec.summary = 'Blazing-fast HTML to Markdown conversion for Ruby, powered by Rust.'
15
+ spec.description = readme_body
16
+ spec.homepage = 'https://github.com/Goldziher/html-to-markdown'
17
+ spec.license = 'MIT'
18
+
19
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.2')
20
+
21
+ spec.bindir = 'exe'
22
+ spec.executables = ['html-to-markdown']
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.files = `git ls-files -z`.split("\x0")
26
+ spec.extra_rdoc_files = ['README.md']
27
+
28
+ spec.extensions = ['extconf.rb']
29
+
30
+ spec.add_dependency 'rb_sys', '>= 0.9', '< 1.0'
31
+ spec.metadata['rubygems_mfa_required'] = 'true'
32
+ spec.metadata['homepage_uri'] = 'https://github.com/Goldziher/html-to-markdown'
33
+ spec.metadata['source_code_uri'] = 'https://github.com/Goldziher/html-to-markdown'
34
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/Goldziher/html-to-markdown/issues'
35
+ spec.metadata['changelog_uri'] = 'https://github.com/Goldziher/html-to-markdown/releases'
36
+ spec.metadata['documentation_uri'] = 'https://github.com/Goldziher/html-to-markdown/blob/main/README.md'
37
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HtmlToMarkdown
4
- VERSION = '2.5.3'
4
+ VERSION = '2.5.5'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-to-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.3
4
+ version: 2.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Na'aman Hirschfeld
@@ -30,20 +30,97 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '1.0'
33
- description: High-performance HTML to Markdown conversion from Ruby using Magnus and
34
- rb-sys.
33
+ description: "# html-to-markdown-rb\n\nBlazing-fast HTML Markdown conversion for
34
+ Ruby, powered by the same Rust engine used by our Python, Node.js, and WebAssembly
35
+ packages. Ship identical Markdown across every runtime while enjoying native extension
36
+ performance.\n\n[![Crates.io](https://img.shields.io/crates/v/html-to-markdown-rs.svg)](https://crates.io/crates/html-to-markdown-rs)\n[![npm
37
+ version](https://badge.fury.io/js/html-to-markdown-node.svg)](https://www.npmjs.com/package/html-to-markdown-node)\n[![PyPI
38
+ version](https://badge.fury.io/py/html-to-markdown.svg)](https://pypi.org/project/html-to-markdown/)\n[![Gem
39
+ Version](https://badge.fury.io/rb/html-to-markdown.svg)](https://rubygems.org/gems/html-to-markdown)\n[![License:
40
+ MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/Goldziher/html-to-markdown/blob/main/LICENSE)\n\n##
41
+ Features\n\n- ⚡ **Rust-fast**: Ruby bindings around a highly optimised Rust core
42
+ (60‑80× faster than BeautifulSoup-based converters).\n- \U0001F501 **Identical output**:
43
+ Shares logic with the Python wheels, npm bindings, WASM package, and CLI — consistent
44
+ Markdown everywhere.\n- ⚙️ **Rich configuration**: Control heading styles, list
45
+ indentation, whitespace handling, HTML preprocessing, and more.\n- \U0001F5BC️ **Inline
46
+ image extraction**: Pull out embedded images (PNG/JPEG/SVG/data URIs) alongside
47
+ Markdown.\n- \U0001F9F0 **Bundled CLI proxy**: Call the Rust CLI straight from Ruby
48
+ or shell scripts.\n- \U0001F6E0️ **First-class Rails support**: Works with `Gem.win_platform?`
49
+ builds, supports Trusted Publishing, and compiles on install if no native gem matches.\n\n##
50
+ Installation\n\n```bash\nbundle add html-to-markdown\n# or\ngem install html-to-markdown\n```\n\nAdd
51
+ the gem to your project and Bundler will compile the native Rust extension on first
52
+ install.\n\n### Requirements\n\n- Ruby **3.2+** (Magnus relies on the fiber scheduler
53
+ APIs added in 3.2)\n- Rust toolchain **1.85+** with Cargo available on your `$PATH`\n-
54
+ Ruby development headers (`ruby-dev`, `ruby-devel`, or the platform equivalent)\n\n**Windows**:
55
+ install [RubyInstaller with MSYS2](https://rubyinstaller.org/) (UCRT64). Run once:\n\n```powershell\nridk
56
+ exec pacman -S --needed --noconfirm base-devel mingw-w64-ucrt-x86_64-toolchain\n```\n\nThis
57
+ provides the standard headers (including `strings.h`) required for the bindgen step.\n\n##
58
+ Performance Snapshot\n\nApple M4 • Real Wikipedia documents • `HtmlToMarkdown.convert`
59
+ (Ruby)\n\n| Document | Size | Latency | Throughput | Docs/sec |\n| -------------------
60
+ | ----- | ------- | ---------- | -------- |\n| Lists (Timeline) | 129KB | 0.69ms
61
+ \ | 187 MB/s | 1,450 |\n| Tables (Countries) | 360KB | 2.19ms | 164 MB/s
62
+ \ | 456 |\n| Mixed (Python wiki) | 656KB | 4.88ms | 134 MB/s | 205 |\n\n>
63
+ Same core, same benchmarks: the Ruby extension stays within single-digit % of the
64
+ Rust CLI and mirrors the Python/Node numbers.\n\n## Quick Start\n\n```ruby\nrequire
65
+ 'html_to_markdown'\n\nhtml = <<~HTML\n <h1>Welcome</h1>\n <p>This is <strong>Rust-fast</strong>
66
+ conversion!</p>\n <ul>\n <li>Native extension</li>\n <li>Identical output
67
+ across languages</li>\n </ul>\nHTML\n\nmarkdown = HtmlToMarkdown.convert(html)\nputs
68
+ markdown\n# # Welcome\n#\n# This is **Rust-fast** conversion!\n#\n# - Native extension\n#
69
+ - Identical output across languages\n```\n\n## API\n\n### Conversion Options\n\nPass
70
+ a Ruby hash (string or symbol keys) to tweak rendering. Every option maps one-for-one
71
+ with the Rust/Python/Node APIs.\n\n```ruby\nrequire 'html_to_markdown'\n\nmarkdown
72
+ = HtmlToMarkdown.convert(\n '<pre><code class=\"language-ruby\">puts \"hi\"</code></pre>',\n
73
+ \ heading_style: :atx,\n code_block_style: :fenced,\n bullets: '*+-',\n list_indent_type:
74
+ :spaces,\n list_indent_width: 2,\n whitespace_mode: :normalized,\n highlight_style:
75
+ :double_equal\n)\n\nputs markdown\n```\n\n### HTML Preprocessing\n\nClean up scraped
76
+ HTML (navigation, forms, malformed markup) before conversion:\n\n```ruby\nrequire
77
+ 'html_to_markdown'\n\nmarkdown = HtmlToMarkdown.convert(\n html,\n preprocessing:
78
+ {\n enabled: true,\n preset: :aggressive, # :minimal, :standard, :aggressive\n
79
+ \ remove_navigation: true,\n remove_forms: true\n }\n)\n```\n\n### Inline
80
+ Images\n\nExtract inline binary data (data URIs, SVG) together with the converted
81
+ Markdown.\n\n```ruby\nrequire 'html_to_markdown'\n\nresult = HtmlToMarkdown.convert_with_inline_images(\n
82
+ \ '<img src=\"data:image/png;base64,iVBORw0...\" alt=\"Pixel\">',\n image_config:
83
+ {\n max_decoded_size_bytes: 1 * 1024 * 1024,\n infer_dimensions: true,\n filename_prefix:
84
+ 'img_',\n capture_svg: true\n }\n)\n\nputs result.markdown\nresult.inline_images.each
85
+ do |img|\n puts \"#{img.filename} -> #{img.format} (#{img.data.bytesize} bytes)\"\nend\n```\n\n##
86
+ CLI\n\nThe gem bundles a small proxy for the Rust CLI binary. Use it when you need
87
+ parity with the standalone `html-to-markdown` executable.\n\n```ruby\nrequire 'html_to_markdown/cli'\n\nHtmlToMarkdown::CLI.run(%w[--heading-style
88
+ atx input.html], stdout: $stdout)\n# => writes converted Markdown to STDOUT\n```\n\nYou
89
+ can also call the CLI binary directly for scripting:\n\n```ruby\nHtmlToMarkdown::CLIProxy.call(['--version'])\n#
90
+ => \"html-to-markdown 2.5.5\"\n```\n\nRebuild the CLI locally if you see `CLI binary
91
+ not built` during tests:\n\n```bash\nbundle exec rake compile # builds
92
+ the extension\nbundle exec ruby scripts/prepare_ruby_gem.rb # copies the CLI into
93
+ lib/bin/\n```\n\n## Error Handling\n\nConversion errors raise `HtmlToMarkdown::Error`
94
+ (wrapping the Rust error context). CLI invocations use specialised subclasses:\n\n-
95
+ `HtmlToMarkdown::CLIProxy::MissingBinaryError`\n- `HtmlToMarkdown::CLIProxy::CLIExecutionError`\n\nRescue
96
+ them to provide clearer feedback in your application.\n\n## Consistent Across Languages\n\nThe
97
+ Ruby gem shares the exact Rust core with:\n\n- [Python wheels](https://pypi.org/project/html-to-markdown/)\n-
98
+ [Node.js / Bun bindings](https://www.npmjs.com/package/html-to-markdown-node)\n-
99
+ [WebAssembly package](https://www.npmjs.com/package/html-to-markdown-wasm)\n- The
100
+ Rust crate and CLI\n\nUse whichever runtime fits your stack while keeping formatting
101
+ behaviour identical.\n\n## Development\n\n```bash\nbundle exec rake compile #
102
+ build the native extension\nbundle exec rspec # run test suite\n```\n\nThe
103
+ extension uses [Magnus](https://github.com/matsadler/magnus) plus `rb-sys` for bindgen.
104
+ When editing the Rust code under `src/`, rerun `rake compile`.\n\n## License\n\nMIT
105
+ © Na'aman Hirschfeld\n"
35
106
  email:
36
107
  - nhirschfeld@gmail.com
37
108
  executables:
38
109
  - html-to-markdown
39
110
  extensions:
40
111
  - extconf.rb
41
- extra_rdoc_files: []
112
+ extra_rdoc_files:
113
+ - README.md
42
114
  files:
115
+ - ".rubocop.yml"
43
116
  - Cargo.toml
117
+ - Gemfile
118
+ - Gemfile.lock
44
119
  - README.md
120
+ - Rakefile
45
121
  - exe/html-to-markdown
46
122
  - extconf.rb
123
+ - html-to-markdown-rb.gemspec
47
124
  - lib/html_to_markdown.rb
48
125
  - lib/html_to_markdown/cli.rb
49
126
  - lib/html_to_markdown/cli_proxy.rb
@@ -80,5 +157,5 @@ requirements: []
80
157
  rubygems_version: 3.5.22
81
158
  signing_key:
82
159
  specification_version: 4
83
- summary: Ruby bindings for the html-to-markdown Rust library
160
+ summary: Blazing-fast HTML to Markdown conversion for Ruby, powered by Rust.
84
161
  test_files: []