A simple gem that provide code to convert HTML into a plain text alternative. Line breaks from HTML block level elements will be maintained. Lists and tables will also maintain a little bit of formatting.
- Line breaks will be approximated using the generally established default margins for HTML tags (i.e.
tag generates two line breaks,
generates one) - Lists items will be numbered or bulleted with an asterisk
tags will add line breaks-
tags will add a string of hyphens to serve as a horizontal rule - elements will enclosed in "|" delimiters
- tags will have the href URL appended to the text in parentheses
- Formatting tags like or will be stripped
- Formatting inside
or <plaintext> elements will be honored
- Code-like tags like <script> or <style> will be stripped
- Headings are prefixed with # characters
- Formatting tags like , ,
, andare converted to Markdown markers tags become Markdown links andtags become Markdown images
-
content is prefixed with "> " -
blocks become fenced code blocks Data tables are formatted as Markdown tables with a header separator rowshow_links(defaulttrue) - Include link URLs and image sources in the output.markdown(defaultfalse) - Format the output as Markdown instead of plain text.all_tables(defaultfalse) - Format all tables as data tables. By default only tables with a non-zeroborderattribute or atheadortbodyelement are formatted as data tables; other tables are assumed to be used for layout only and their cells are separated with spaces instead of "|" delimiters.ignore_nav(defaultfalse) - Suppress non-content elements from the output. When set,header,footer, andnavtags are omitted along with any elements that have aroleattribute ofnavigation,banner, orcontentinfo.selector(defaultnil) - A CSS selector limiting the output to matching elements. Only the contents of elements matching the selector are included in the output (e.g.selector: "#main, article"). Only elements within the body of the document are matched. AnArgumentErroris raised if the selector is not a valid CSS selector.
HTML can also be converted to a Markdown approximation instead. In Markdown mode:
require 'html_to_plain_text'
html = "<h1>Hello</h1><p>world!</p>"
HtmlToPlainText.plain_text(html) # => "Hello\n\nworld!"
HtmlToPlainText.markdown(html) # => "# Hello\n\nworld!"
# equivalent to HtmlToPlainText.plain_text(html, markdown: true)Add this line to your application's Gemfile:
gem "html_to_plain_text"And then execute:
$ bundle installOr install it yourself as:
$ gem install html_to_plain_textOpen a pull request on GitHub.
Please use the standardrb syntax and lint your code with standardrb --fix before submitting.
The gem is available as open source under the terms of the MIT License.