HTML To Plain Text
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 ruleelements 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</p> </li> <li>Code-like tags like <script> or <style> will be stripped</li> </ul> <p>HTML can also be converted to a Markdown approximation instead. In Markdown mode:</p> <ul> <li>Headings are prefixed with # characters</li> <li>Formatting tags like <strong>, <em>, <del>, and <code> are converted to Markdown markers</li> <li><a> tags become Markdown links and <img> tags become Markdown images</li> <li> <blockquote> content is prefixed with "> "</li> <li> <pre> blocks become fenced code blocks</li> <li>Data tables are formatted as Markdown tables with a header separator row</li> </ul> <h2 id="Usage">Usage</h2> <pre><code class="ruby">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)Options
show_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.
Installation
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_textContributing
Open a pull request on GitHub.
Please use the standardrb syntax and lint your code with
standardrb --fixbefore submitting.License
The gem is available as open source under the terms of the MIT License.