New Upstream Release - ruby-redcarpet

Ready changes

Summary

Merged new upstream version: 3.6.0 (was: 3.5.1).

Resulting package

Built on 2023-02-26T10:08 (took 2m0s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases ruby-redcarpet-dbgsymapt install -t fresh-releases ruby-redcarpet

Lintian Result

Diff

diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..145b24d
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,479 @@
+# Changelog
+
+## Version 3.6.0
+
+* Avoid warnings running on Ruby 3.2+.
+
+  Refs #721.
+
+  *Jean Boussier*
+
+* Match fence char and length when matching closing fence in fenced code blocks.
+
+  Fixes #208.
+
+  *Martin Cizek, Orchitech*
+
+* Consider `<center>` as a block-level element.
+
+  Refs #702.
+
+  *momijizukamori*
+
+* Properly provide a third argument to the `table_cell` callback indicating
+  whether the current cell is part of the header or not.
+
+  The previous implementation with two parameters is still supported.
+
+  Fixes #604, Refs #605.
+
+  *Mark Lambley*
+
+* Fix anchor generation on titles with ampersands.
+
+  Fixes #696.
+
+## Version 3.5.1 (Security)
+
+* Fix a security vulnerability using `:quote` in combination with the
+  `:escape_html` option.
+
+  Reported by *Johan Smits*.
+
+
+## Version 3.5.0
+
+* Avoid mutating the options hash passed to a render object.
+
+  Refs #663.
+
+  *Max Schwenk*
+
+* Fix a segfault rendering quotes using `StripDown` and the `:quote`
+  option.
+
+  Fixes #639.
+
+* Fix `warning: instance variable @options not initialized` when
+  running under verbose mode (`-w`, `$VERBOSE = true`).
+
+* Fix SmartyPants single quotes right after a link. For example:
+
+  ~~~markdown
+  [John](http://john.doe)'s cat
+  ~~~
+
+  Will now properly converts `'` to a right single quote (i.e. `’`).
+
+  Fixes #624.
+
+* Remove the `rel` and `rev` attributes from the output generated
+  for footnotes as they don't pass the HTML 5 validation.
+
+  Fixes #536.
+
+* Automatically enable the `fenced_code_blocks` option passing a
+  `HTML_TOC` object to the `Markdown` object's constructor since
+  some languages rely on the sharp to comment code.
+
+  Fixes #451.
+
+* Allow passing `Range` objects to the `nesting_level` option to have
+  a higher level of customization for table of contents:
+
+  ~~~ruby
+  Redcarpet::Render::HTML_TOC.new(nesting_level: 2..5)
+  ~~~
+
+  Fixes #519.
+
+## Version 3.4.0
+
+* Rely on djb2 hashing generating anchors with non-ASCII chars.
+
+  Fix issue [#538](https://github.com/vmg/redcarpet/issues/538).
+
+  *Alexey Kopytko*, *namusyaka*
+
+* Added suppport for HTML 5 `details` and `summary` tags.
+
+  Fix issue [#578](https://github.com/vmg/redcarpet/issues/578).
+
+  *James Edwards-Jones*
+
+* Multiple single quote pairs are parsed correctly with SmartyPants.
+
+  Fix issue [#549](https://github.com/vmg/redcarpet/issues/549).
+
+  *Jan Jędrychowski*
+
+* Table headers don't require a minimum of three dashes anymore; a
+  single one can be used for each row.
+
+* Remove escaped entities from `HTML` render table of contents'
+  ids to be consistent with the `HTML_TOC` render.
+
+  Fix issue [#529](https://github.com/vmg/redcarpet/issues/529).
+
+* Remove periods at the end of URLs when autolinking to make sure
+  that links at the end of a sentence get properly generated.
+
+  Fix issue [#465](https://github.com/vmg/redcarpet/issues/465).
+
+* Expose the Markdown and rendering options through a `Hash` inside
+  the `@options` instance variable for custom render objects.
+
+* Avoid escaping ampersands in href links.
+
+  *Nolan Evans*
+
+## Version 3.3.4
+
+* Fix `bufprintf` to correctly work on Windows MinGW-w64 so strings
+  are properly written to the buffer.
+
+  *Kenichi Saita*
+
+* Fix the header anchor normalization by skipping non-ASCII chars
+  and not calling tolower because this leads to invalid UTF-8 byte
+  sequences in the HTML output. (tolower is not locale-aware)
+
+  *Clemens Gruber*
+
+## Version 3.3.3
+
+* Fix a memory leak instantiating a `Redcarpet::Render::Base` object.
+
+  *Oleg Dashevskii*
+
+* Fix the `StripDown` renderer to handle the `:highlight` option.
+
+  *Itay Grudev*
+
+* The `StripDown` renderer handles tables if the `tables` extension is
+  enabled.
+
+  *amnesia7*
+
+* Fix Smarty Pants to avoid fraction conversions when there are several
+  numbers separated with slashes (e.g. for a date).
+
+  *Sam Saffron*
+
+## Version 3.3.2
+
+* Fix a potential security issue in the HTML renderer
+  (Thanks to Giancarlo Canales Barreto for the heads up)
+
+## Version 3.3.1
+
+* Include the `Redcarpet::CLI`'s file in the gemspec to make it
+  available when downloading.
+
+## Version 3.3.0
+
+* Fix the stripping of surrounding characters that should be removed
+  during anchor generation.
+
+* Provide a `Redcarpet::CLI` class to create custom binary files.
+
+  Relying on Ruby's OptionParser, it's now straightforward to add new
+  options, rely on custom render objects or handle differently the
+  rendering of the provided files.
+
+* Undeprecate the compatibility layer for the old RedCloth API.
+
+  This layer actually ease the support of libraries supporting different
+  Markdown processors.
+
+* Strip out `style` tags at the HTML-block rendering level when the
+  `:no_styles` options is enabled ; previously they were only removed
+  inside paragraphs.
+
+* Avoid parsing images when the given URL isn't safe and the
+  `:safe_links_only` option is enabled.
+
+  *Alex Serban*
+
+* Avoid parsing references inside fenced code blocks so they are
+  now kept in the code snippet.
+
+  *David Waller*
+
+* Avoid escaping table-of-contents' headers by default. A new
+  `:escape_html` option is now available for the `HTML_TOC` object
+  if there are security concerns.
+
+* Add the `lang-` prefix in front of the language's name when using
+  `:prettify` along with `:fenced_code_blocks`.
+
+* Non-alphanumeric chars are now stripped out from generated anchors
+  (along the lines of Active Support's `#parameterize` method).
+
+## Version 3.2.3
+
+* Avoid rewinding content of a previous inline when autolinking is
+  enabled.
+
+  *Daniel LeCheminant*
+
+* Fix escaping of forward slashes with the `Safe` render object (add a
+  missing semi-colon).
+
+## Version 3.2.2
+
+* Consider `script` as a block-level element so it doesn't get included
+  inside a paragraph.
+
+## Version 3.2.1
+
+* Load `RedcarpetCompat` when requiring Redcarpet for the sake of
+  backward compatibility.
+
+  *Loren Segal*
+
+## Version 3.2.0
+
+* Add a `Safe` renderer to deal with users' input. The `escape_html`
+  and `safe_links_only` options are turned on by default.
+
+  Moreover, the `block_code` callback removes the tag's class since
+  the user can basically set anything with the vanilla one.
+
+  *Robin Dupret*
+
+* HTML5 block-level tags are now recognized
+
+  *silverhammermba*
+
+* The `StripDown` render object now displays the URL of links
+  along with the text.
+
+  *Robin Dupret*
+
+* The RedCloth API compatibility layer is now deprecated.
+
+  *Robin Dupret*
+
+* A hyphen and an equal should not be converted to heading.
+
+  *namusyaka*
+
+* Fix emphasis character escape sequence detection while mid-emphasis.
+
+  *jcheatham*
+
+* Add `=` to the whitelist of escaped chars so it can be used inside
+  highlighted snippets.
+
+  *jcheatham*
+
+* Convert trailing single quotes to curly quotes. For example,
+  `Road Trippin'` now converts to `Road Trippin’`.
+
+  *Kevin Chen*
+
+* Allow in-page links (e.g. `[headline](#headline)`) when `:safe_links_only` is set.
+
+  *jomo*
+
+* Enable emphasis inside of sentences in multi-byte languages when
+  `:no_intra_emphasis` is set.
+
+  *Chun-wei Kuo*
+
+* Avoid making `:no_intra_emphasis` only match spaces. This allows
+  using emphasizes inside quotes when the option is enabled for
+  instance.
+
+  *Jason Webb* and *BJ Homer*
+
+* The StripDown renderer handles image tags now.
+
+## Version 3.1.2
+
+* Remove the yielding of anchors in the `header` callback. This was
+  a breaking change between 3.0 and 3.1 as the method's arity changed.
+
+## Version 3.1.1
+
+* Fix a segfault when parsing text with headers.
+
+## Version 3.1.0
+
+* Yield the anchor of the headers
+
+  Using the `header` callback, it's now possible to get access to the
+  humanized generated id to easily keep tracking of the tree of headers
+  or simply handle the duplicate values easily.
+
+  Since the `HTML_TOC` and `HTML` objects both have this callback, it's
+  advisable to define a module and mix it in these objects to avoid
+  code duplication.
+
+  *Robin Dupret*
+
+* Allow using tabs between a reference's colon and its link
+
+  Fix issue [#337](https://github.com/vmg/redcarpet/issues/337)
+
+  *Juan Guerrero*
+
+* Make ordered lists preceded by paragraph parsed with `:lax_spacing`
+
+  Previously, enabling the `:lax_spacing` option, if a paragraph was
+  followed by an ordered list it was unparsed and was part of the
+  paragraph but this is no more the case.
+
+  *Robin Dupret*
+
+* Feed the gemspec into ExtensionTask so that we can pre-compile.
+  ie. `rake native gem`
+
+  *Todd Edwards*
+
+* Revert lax indent of less than 4 characters after list items
+
+  Follow the standard to detect when new paragraph is outside last item.
+  Fixes [issue #111](https://github.com/vmg/redcarpet/issues/111).
+
+  *Eric Bréchemier*
+
+* Fix code blocks' classes when using Google code prettify
+
+  When using the the `:prettify` option and specifying the
+  language name, the generated code block's class had a missing
+  space.
+
+  *Simonini*
+
+* Add `-v`/`--version` and `-h` flags to commandline redcarpet
+
+  *Lukas Stabe*
+
+* Add optional quote support through the `:quote` option. Render
+  quotations marks to `q` HTML tag.
+
+  This is a `"quote"`.
+
+  *Anatol Broder*
+
+* Ensure inline markup in titles is correctly stripped when generating
+  headers' anchor.
+
+  *Robin Dupret*
+
+* Revert the unescaping behavior on comments
+
+  This behavior doesn't follow the conformance suite.
+
+  *Robin Dupret*
+
+* Add optional footnotes support
+
+  Add PHP-Markdown style footnotes through the `:footnotes` option.
+
+  *Ben Dolman, Adam Florin, microjo, brief*
+
+* Enable GitHub style anchors for headers
+
+  Passing the `with_toc_data` option to a `HTML` render object now
+  generates GitHub style anchors.
+
+  *Matt Rogers*
+
+* Allow to set a maximum rendering level for HTML_TOC
+
+  Allow the user to pass a `nesting_level` option when instantiating a
+  new HTML_TOC render object in order to limit the nesting level in the
+  generated table of content. For example:
+
+  ~~~ruby
+  Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC.new(nesting_level: 2))
+  ~~~
+
+  *Robin Dupret*
+
+## Version 3.0.0
+
+* Remove support for Ruby 1.8.x *Matt Rogers & Robin Dupret*
+
+* Avoid escaping for HTML comments *Robin Dupret*
+
+* Make emphasis wrapped inside parenthesis parsed *Robin Dupret*
+
+* Remove the Sundown submodule *Robin Dupret*
+
+* Fix FTP uris identified as emails *Robin Dupret*
+
+* Add optional highlight support *Sam Soffes*
+
+  This is `==highlighted==`.
+
+* Ensure nested parenthesis are handled into links *Robin Dupret*
+
+* Ensure nested code spans put in emphasis work correctly *Robin Dupret*
+
+## Version 2.3.0
+
+* Add a `:disable_indented_code_blocks` option *Dmitriy Kiriyenko*
+
+* Fix issue [#57](https://github.com/vmg/redcarpet/issues/57) *Mike Morearty*
+
+* Ensure new lines characters are inserted when using the StripDown
+render. *Robin Dupret*
+
+* Mark all symbols as hidden except the main entry point *Tom Hughes*
+
+  This avoids conflicts with other gems that may have some of the
+  same symbols, such as escape_utils which also uses houdini.
+
+* Remove unnecessary function pointer *Sam Soffes*
+
+* Add optional underline support *Sam Soffes*
+
+  This is `*italic*` and this is `_underline_` when enabled.
+
+* Test that links with quotes work *Michael Grosser*
+
+* Adding a prettyprint class for google-code-prettify *Joel Rosenberg*
+
+* Remove unused C macros *Matt Rogers*
+
+* Remove 'extern' definition for Init_redcarpet_rndr() *Matt Rogers*
+
+* Remove Gemfile.lock from the gemspec *Matt Rogers*
+
+* Removed extra unused test statement. *Slipp D. Thompson*
+
+* Use test-unit gem to get some red/green output when running tests
+*Michael Grosser*
+
+* Remove a deprecation warning and update Gemfile.lock *Robin Dupret*
+
+* Added contributing file *Brent Beer*
+
+* For tests for libxml2 > 2.8 *strzibny*
+
+* SmartyPants: Preserve single `backticks` in HTML *Mike Morearty*
+
+  When SmartyPants is processing HTML, single `backticks` should  be left
+  intact. Previously they were being deleted.
+
+* Removed and ignored Gemfile.lock *Ryan McGeary*
+
+* Added support for org-table syntax *Ryan McGeary*
+
+  Adds support for using a plus (+) as an intersection character instead of
+  requiring pipes (|). The emacs org-mode table syntax automatically manages
+  ascii tables, but uses pluses for line intersections.
+
+* Ignore /tmp directory *Ryan McGeary*
+
+* Add redcarpet_ prefix for `stack_*` functions *Kenta Murata*
+
+* Mark any html_attributes has held by a renderer as used *Tom Hughes*
+
+* Add Rubinius to the list of tested implementations *Gibheer*
+
+* Add a changelog file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..230ebf2
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,33 @@
+## Submitting a Pull Request
+
+1. [Fork the repository.][fork]
+2. [Create a topic branch.][branch]
+3. Check which version of Ruby is installed on your machine with `ruby -v`.
+   The list of supported Ruby versions is listed in [.travis.yml][travis_yml].
+   Set up one of these versions; use of [RVM][rvm] is recommended to switch
+   easily between different versions.
+4. [Install bundler.][bundler]
+5. Make sure to have the `tidy` command on your system:
+
+   * `apt-get install tidy`
+   * `yum install tidy`
+   * `pacman -S tidyhtml`
+
+6. Check that unit tests pass with `rake test`.
+7. Write a failing test to capture existing bug or lack of feature.
+8. Run `rake test` to verify that test fails.
+9. Implement your feature or bug fix.
+10. Ensure tests pass.
+11. If it's a new feature or a bug fix, please add an entry to the changelog file.
+12. Add, commit, and push your changes.
+13. [Submit a pull request.][pr]
+14. You will get some feedback and may need to push additional commits
+    with more fixes to the same branch; this will update your pull request
+    automatically.
+
+[branch]: http://git-scm.com/book/en/Git-Branching-Branching-Workflows#Topic-Branches
+[bundler]: http://bundler.io
+[fork]: https://help.github.com/articles/fork-a-repo
+[pr]: https://help.github.com/articles/using-pull-requests
+[rvm]: https://rvm.io
+[travis_yml]: https://github.com/vmg/redcarpet/blob/master/.travis.yml
diff --git a/README.markdown b/README.markdown
index a36ea8f..b9764ba 100644
--- a/README.markdown
+++ b/README.markdown
@@ -2,8 +2,8 @@ Redcarpet is written with sugar, spice and everything nice
 ============================================================
 
 [![Build Status](https://travis-ci.org/vmg/redcarpet.svg?branch=master)](https://travis-ci.org/vmg/redcarpet)
-[![Dependency Status](https://www.versioneye.com/ruby/redcarpet/badge.svg)](https://www.versioneye.com/ruby/redcarpet)
 [![Help Contribute to Open Source](https://www.codetriage.com/vmg/redcarpet/badges/users.svg)](https://www.codetriage.com/vmg/redcarpet)
+[![Gem Version](https://badge.fury.io/rb/redcarpet.svg)](https://badge.fury.io/rb/redcarpet)
 
 Redcarpet is a Ruby library for Markdown processing that smells like
 butterflies and popcorn.
@@ -258,7 +258,7 @@ end
 * paragraph(text)
 * table(header, body)
 * table_row(content)
-* table_cell(content, alignment)
+* table_cell(content, alignment, header)
 
 ### Span-level calls
 
diff --git a/debian/changelog b/debian/changelog
index 4ad4186..a27fa1d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ruby-redcarpet (3.6.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 26 Feb 2023 10:06:36 -0000
+
 ruby-redcarpet (3.5.1-1) unstable; urgency=medium
 
   [ Cédric Boutillier ]
diff --git a/ext/redcarpet/html.c b/ext/redcarpet/html.c
index 785f780..3e29405 100644
--- a/ext/redcarpet/html.c
+++ b/ext/redcarpet/html.c
@@ -277,6 +277,22 @@ rndr_linebreak(struct buf *ob, void *opaque)
 	return 1;
 }
 
+static int html_entity_ahead(const uint8_t *text, size_t start, size_t size) {
+	size_t i = start;
+
+	if (text[i] != '&')
+		return 0;
+
+	for (; i < size; ++i) {
+		if (text[i] == ' ')
+			return 0;
+		else if (text[i] == ';')
+			return 1;
+	}
+
+	return 0;
+}
+
 static void
 rndr_header_anchor(struct buf *out, const struct buf *anchor)
 {
@@ -293,10 +309,11 @@ rndr_header_anchor(struct buf *out, const struct buf *anchor)
 			while (i < size && a[i] != '>')
 				i++;
 		// skip html entities
-		} else if (a[i] == '&') {
+		} else if (a[i] == '&' && html_entity_ahead(a, i, size)) {
 			while (i < size && a[i] != ';')
 				i++;
 		}
+
 		// replace non-ascii or invalid characters with dashes
 		else if (!isascii(a[i]) || strchr(STRIPPED, a[i])) {
 			if (inserted && !stripped)
diff --git a/ext/redcarpet/html_block_names.txt b/ext/redcarpet/html_block_names.txt
new file mode 100644
index 0000000..4eb4859
--- /dev/null
+++ b/ext/redcarpet/html_block_names.txt
@@ -0,0 +1,44 @@
+abbr
+address
+article
+aside
+audio
+blockquote
+canvas
+center
+dd
+del
+details
+div
+dl
+fieldset
+figcaption
+figure
+footer
+form
+h1
+h2
+h3
+h4
+h5
+h6
+header
+hgroup
+hr
+iframe
+ins
+math
+nav
+noscript
+ol
+output
+p
+pre
+script
+section
+style
+summary
+table
+tfoot
+ul
+video
diff --git a/ext/redcarpet/html_blocks.h b/ext/redcarpet/html_blocks.h
index cdc1381..379c502 100644
--- a/ext/redcarpet/html_blocks.h
+++ b/ext/redcarpet/html_blocks.h
@@ -1,6 +1,5 @@
-/* C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -N find_block_tag -H hash_block_tag -C -c -E --ignore-case html_block_names.txt  */
-/* See https://git.io/vPLqa for the list of recognized elements */
 /* Computed positions: -k'1-2' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -27,7 +26,7 @@
       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
 /* The character set is not based on ISO-646.  */
-error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
 #endif
 
 /* maximum key range = 72, duplicates = 0 */
@@ -60,10 +59,7 @@ static unsigned char gperf_downcase[256] =
 #ifndef GPERF_CASE_STRNCMP
 #define GPERF_CASE_STRNCMP 1
 static int
-gperf_case_strncmp (s1, s2, n)
-     register const char *s1;
-     register const char *s2;
-     register unsigned int n;
+gperf_case_strncmp (register const char *s1, register const char *s2, register size_t n)
 {
   for (; n > 0;)
     {
@@ -88,9 +84,7 @@ inline
 #endif
 #endif
 static unsigned int
-hash_block_tag (str, len)
-     register const char *str;
-     register unsigned int len;
+hash_block_tag (register const char *str, register size_t len)
 {
   static const unsigned char asso_values[] =
     {
@@ -99,13 +93,13 @@ hash_block_tag (str, len)
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      26, 60, 55, 45, 40, 35, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 20, 15, 15,  0, 35,
-       0, 25, 10, 10,  5, 73, 73,  0, 15, 15,
+      16, 55, 50, 45, 40,  5, 73, 73, 73, 73,
+      73, 73, 73, 73, 73, 20, 15, 25,  0, 45,
+       0, 30, 10,  0,  5, 73, 73,  0, 15, 35,
        0, 73, 73, 15, 20, 10, 10, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 20, 15, 15,
-       0, 35,  0, 25, 10, 10,  5, 73, 73,  0,
-      15, 15,  0, 73, 73, 15, 20, 10, 10, 73,
+      73, 73, 73, 73, 73, 73, 73, 20, 15, 25,
+       0, 45,  0, 30, 10,  0,  5, 73, 73,  0,
+      15, 35,  0, 73, 73, 15, 20, 10, 10, 73,
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
       73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
@@ -136,13 +130,11 @@ hash_block_tag (str, len)
 }
 
 const char *
-find_block_tag (str, len)
-     register const char *str;
-     register unsigned int len;
+find_block_tag (register const char *str, register size_t len)
 {
   enum
     {
-      TOTAL_KEYWORDS = 43,
+      TOTAL_KEYWORDS = 44,
       MIN_WORD_LENGTH = 1,
       MAX_WORD_LENGTH = 10,
       MIN_HASH_VALUE = 1,
@@ -167,7 +159,7 @@ find_block_tag (str, len)
       "",
       "figcaption",
       "header",
-      "ol",
+      "h6",
       "pre",
       "math",
       "video",
@@ -178,42 +170,45 @@ find_block_tag (str, len)
       "blockquote",
       "hgroup",
       "hr",
-      "ins",
+      "h1",
       "",
       "style",
-      "output",
+      "center",
       "summary",
       "nav",
       "",
       "audio",
-      "canvas",
-      "dd",
-      "h1",
-      "abbr",
-      "table",
       "iframe",
+      "ol",
+      "ins",
+      "",
+      "table",
+      "",
       "article",
       "", "",
       "aside",
+      "canvas",
+      "dd",
       "",
-      "h6",
+      "abbr",
+      "",
+      "output",
+      "h5",
       "", "",
       "tfoot",
       "",
-      "h5",
-      "", "", "", "",
       "h4",
       "", "", "", "",
-      "address",
-      "", "", "", "",
       "h3",
       "", "", "", "",
-      "h2"
+      "h2",
+      "", "", "", "",
+      "address"
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
     {
-      unsigned int key = hash_block_tag (str, len);
+      register unsigned int key = hash_block_tag (str, len);
 
       if (key <= MAX_HASH_VALUE)
         {
diff --git a/ext/redcarpet/markdown.c b/ext/redcarpet/markdown.c
index 9522221..9a761c5 100644
--- a/ext/redcarpet/markdown.c
+++ b/ext/redcarpet/markdown.c
@@ -1353,13 +1353,13 @@ is_hrule(uint8_t *data, size_t size)
 	return n >= 3;
 }
 
-/* check if a line begins with a code fence; return the
- * width of the code fence */
+/* check if a line begins with a code fence matching optional opendelim;
+   return the width of the code fence and store the delimiter string  */
 static size_t
-prefix_codefence(uint8_t *data, size_t size)
+prefix_codefence(uint8_t *data, size_t size, struct buf *delim, struct buf *opendelim)
 {
-	size_t i = 0, n = 0;
-	uint8_t c;
+	size_t i = 0, n = 0, min_n = 3;
+	uint8_t c, *delim_start;
 
 	/* skipping initial spaces */
 	if (size < 3) return 0;
@@ -1367,31 +1367,46 @@ prefix_codefence(uint8_t *data, size_t size)
 	if (data[1] == ' ') { i++;
 	if (data[2] == ' ') { i++; } } }
 
+	delim_start = data + i;
+
 	/* looking at the hrule uint8_t */
 	if (i + 2 >= size || !(data[i] == '~' || data[i] == '`'))
 		return 0;
 
-	c = data[i];
+	if (opendelim && opendelim->size) {
+		c = opendelim->data[0];
+		min_n = opendelim->size;
+	} else {
+		c = data[i];
+	}
 
 	/* the whole line must be the uint8_t or whitespace */
 	while (i < size && data[i] == c) {
 		n++; i++;
 	}
 
-	if (n < 3)
+	if (n < min_n)
 		return 0;
 
+	if (delim) {
+		delim->data = delim_start;
+		delim->size = n;
+	}
+
 	return i;
 }
 
 /* check if a line is a code fence; return its size if it is */
+/* checking is done in fence-pair matching mode if curdelim is provided */
 static size_t
-is_codefence(uint8_t *data, size_t size, struct buf *syntax)
+is_codefence(uint8_t *data, size_t size, struct buf *curdelim, struct buf *syntax)
 {
 	size_t i = 0, syn_len = 0;
 	uint8_t *syn_start;
+	struct buf delim = { 0, 0, 0, 0 };
+
+	i = prefix_codefence(data, size, &delim, curdelim);
 
-	i = prefix_codefence(data, size);
 	if (i == 0)
 		return 0;
 
@@ -1426,10 +1441,9 @@ is_codefence(uint8_t *data, size_t size, struct buf *syntax)
 		}
 	}
 
-	if (syntax) {
-		syntax->data = syn_start;
-		syntax->size = syn_len;
-	}
+	/* info string must not be present at the closing fence */
+	if (curdelim && curdelim->size && syn_len)
+		return 0;
 
 	while (i < size && data[i] != '\n') {
 		if (!_isspace(data[i]))
@@ -1438,6 +1452,21 @@ is_codefence(uint8_t *data, size_t size, struct buf *syntax)
 		i++;
 	}
 
+	if (curdelim) {
+		if (curdelim->size) {
+			curdelim->data = NULL;
+			curdelim->size = 0;
+		} else {
+			curdelim->data = delim.data;
+			curdelim->size = delim.size;
+		}
+	}
+
+	if (syntax) {
+		syntax->data = syn_start;
+		syntax->size = syn_len;
+	}
+
 	return i + 1;
 }
 
@@ -1673,7 +1702,7 @@ parse_paragraph(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t
 
 			/* see if a code fence starts here */
 			if ((rndr->ext_flags & MKDEXT_FENCED_CODE) != 0 &&
-				is_codefence(data + i, size - i, NULL) != 0) {
+				is_codefence(data + i, size - i, NULL, NULL) != 0) {
 				end = i;
 				break;
 			}
@@ -1739,19 +1768,19 @@ parse_fencedcode(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t
 {
 	size_t beg, end;
 	struct buf *work = 0;
+	struct buf delim = { 0, 0, 0, 0 };
 	struct buf lang = { 0, 0, 0, 0 };
 
-	beg = is_codefence(data, size, &lang);
+	beg = is_codefence(data, size, &delim, &lang);
 	if (beg == 0) return 0;
 
 	work = rndr_newbuf(rndr, BUFFER_BLOCK);
 
 	while (beg < size) {
 		size_t fence_end;
-		struct buf fence_trail = { 0, 0, 0, 0 };
 
-		fence_end = is_codefence(data + beg, size - beg, &fence_trail);
-		if (fence_end != 0 && fence_trail.size == 0) {
+		fence_end = is_codefence(data + beg, size - beg, &delim, NULL);
+		if (fence_end != 0) {
 			beg += fence_end;
 			break;
 		}
@@ -1827,6 +1856,7 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
 	struct buf *work = 0, *inter = 0;
 	size_t beg = 0, end, pre, sublist = 0, orgpre = 0, i;
 	int in_empty = 0, has_inside_empty = 0, in_fence = 0;
+	struct buf fence_delim = { 0, 0, 0, 0 };
 
 	/* keeping track of the first indentation prefix */
 	while (orgpre < 3 && orgpre < size && data[orgpre] == ' ')
@@ -1876,7 +1906,7 @@ parse_listitem(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t s
 		pre = i;
 
 		if (rndr->ext_flags & MKDEXT_FENCED_CODE) {
-			if (is_codefence(data + beg + i, end - beg - i, NULL) != 0)
+			if (is_codefence(data + beg + i, end - beg - i, &fence_delim, NULL) != 0)
 				in_fence = !in_fence;
 		}
 
@@ -2804,6 +2834,7 @@ sd_markdown_render(struct buf *ob, const uint8_t *document, size_t doc_size, str
 	struct buf *text;
 	size_t beg, end;
 	int in_fence = 0;
+	struct buf fence_delim = { 0, 0, 0, 0 };
 
 	text = bufnew(64);
 	if (!text)
@@ -2833,7 +2864,7 @@ sd_markdown_render(struct buf *ob, const uint8_t *document, size_t doc_size, str
 		beg += 3;
 
 	while (beg < doc_size) { /* iterating over lines */
-		if (codefences_enabled && (is_codefence(document + beg, doc_size - beg, NULL) != 0))
+		if (codefences_enabled && (is_codefence(document + beg, doc_size - beg, &fence_delim, NULL) != 0))
 			in_fence = !in_fence;
 
 		if (!in_fence && footnotes_enabled && is_footnote(document, beg, doc_size, &end, &md->footnotes_found))
diff --git a/ext/redcarpet/rc_markdown.c b/ext/redcarpet/rc_markdown.c
index df016fb..05448d7 100644
--- a/ext/redcarpet/rc_markdown.c
+++ b/ext/redcarpet/rc_markdown.c
@@ -176,6 +176,7 @@ void Init_redcarpet()
 	rb_mRedcarpet = rb_define_module("Redcarpet");
 
 	rb_cMarkdown = rb_define_class_under(rb_mRedcarpet, "Markdown", rb_cObject);
+	rb_undef_alloc_func(rb_cMarkdown);
 	rb_define_singleton_method(rb_cMarkdown, "new", rb_redcarpet_md__new, -1);
 	rb_define_method(rb_cMarkdown, "render", rb_redcarpet_md_render, 1);
 
diff --git a/ext/redcarpet/rc_render.c b/ext/redcarpet/rc_render.c
index 26568ac..960a1ac 100644
--- a/ext/redcarpet/rc_render.c
+++ b/ext/redcarpet/rc_render.c
@@ -113,9 +113,10 @@ rndr_tablerow(struct buf *ob, const struct buf *text, void *opaque)
 static void
 rndr_tablecell(struct buf *ob, const struct buf *text, int align, void *opaque)
 {
-	VALUE rb_align;
+	VALUE rb_align, rb_header;
+	VALUE rb_callback, rb_callback_arity;
 
-	switch (align) {
+	switch (align & MKD_TABLE_ALIGNMASK) {
 	case MKD_TABLE_ALIGN_L:
 		rb_align = CSTR2SYM("left");
 		break;
@@ -133,7 +134,25 @@ rndr_tablecell(struct buf *ob, const struct buf *text, int align, void *opaque)
 		break;
 	}
 
-	BLOCK_CALLBACK("table_cell", 2, buf2str(text), rb_align);
+	if (align & MKD_TABLE_HEADER) {
+		rb_header = Qtrue;
+	} else {
+		rb_header = Qfalse;
+	}
+
+	struct redcarpet_renderopt *opt = opaque;
+
+	rb_callback = rb_funcall(opt->self, rb_intern("method"), 1, CSTR2SYM("table_cell"));
+
+	rb_callback_arity = rb_funcall(rb_callback, rb_intern("arity"), 0);
+
+	/* For backward compatibility, let's ensure that the erasure with
+	   only two parameters is still supported. */
+	if (FIX2INT(rb_callback_arity) == 3) {
+		BLOCK_CALLBACK("table_cell", 3, buf2str(text), rb_align, rb_header);
+	} else {
+		BLOCK_CALLBACK("table_cell", 2, buf2str(text), rb_align);
+	}
 }
 
 static void
diff --git a/lib/redcarpet.rb b/lib/redcarpet.rb
index c166147..c851da5 100644
--- a/lib/redcarpet.rb
+++ b/lib/redcarpet.rb
@@ -2,7 +2,7 @@ require 'redcarpet.so'
 require 'redcarpet/compat'
 
 module Redcarpet
-  VERSION = '3.5.1'
+  VERSION = '3.6.0'
 
   class Markdown
     attr_reader :renderer
diff --git a/redcarpet.gemspec b/redcarpet.gemspec
index 322782b..251ad42 100644
--- a/redcarpet.gemspec
+++ b/redcarpet.gemspec
@@ -1,17 +1,19 @@
 # encoding: utf-8
 Gem::Specification.new do |s|
   s.name = 'redcarpet'
-  s.version = '3.5.1'
+  s.version = '3.6.0'
   s.summary = "Markdown that smells nice"
   s.description = 'A fast, safe and extensible Markdown to (X)HTML parser'
-  s.date = '2020-12-15'
+  s.date = '2023-01-29'
   s.email = 'vicent@github.com'
-  s.homepage = 'http://github.com/vmg/redcarpet'
+  s.homepage = 'https://github.com/vmg/redcarpet'
   s.authors = ["Natacha Porté", "Vicent Martí"]
   s.license = 'MIT'
   s.required_ruby_version = '>= 1.9.2'
   # = MANIFEST =
   s.files = %w[
+    CHANGELOG.md
+    CONTRIBUTING.md
     COPYING
     Gemfile
     README.markdown
@@ -27,6 +29,7 @@ Gem::Specification.new do |s|
     ext/redcarpet/houdini_html_e.c
     ext/redcarpet/html.c
     ext/redcarpet/html.h
+    ext/redcarpet/html_block_names.txt
     ext/redcarpet/html_blocks.h
     ext/redcarpet/html_smartypants.c
     ext/redcarpet/markdown.c
@@ -42,21 +45,6 @@ Gem::Specification.new do |s|
     lib/redcarpet/render_man.rb
     lib/redcarpet/render_strip.rb
     redcarpet.gemspec
-    test/benchmark.rb
-    test/custom_render_test.rb
-    test/fixtures/benchmark.md
-    test/html5_test.rb
-    test/html_render_test.rb
-    test/html_toc_render_test.rb
-    test/markdown_test.rb
-    test/pathological_inputs_test.rb
-    test/redcarpet_bin_test.rb
-    test/redcarpet_compat_test.rb
-    test/safe_render_test.rb
-    test/smarty_html_test.rb
-    test/smarty_pants_test.rb
-    test/stripdown_render_test.rb
-    test/test_helper.rb
   ]
   # = MANIFEST =
   s.test_files = s.files.grep(%r{^test/})
@@ -65,7 +53,7 @@ Gem::Specification.new do |s|
   s.executables = ["redcarpet"]
   s.require_paths = ["lib"]
 
-  s.add_development_dependency "rake", "~> 12.2.1"
-  s.add_development_dependency "rake-compiler", "~> 1.0.3"
-  s.add_development_dependency "test-unit", "~> 3.2.3"
+  s.add_development_dependency "rake", "~> 13"
+  s.add_development_dependency "rake-compiler", "~> 1.1"
+  s.add_development_dependency "test-unit", "~> 3.5"
 end
diff --git a/test/benchmark.rb b/test/benchmark.rb
deleted file mode 100644
index afd667a..0000000
--- a/test/benchmark.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# coding: UTF-8
-# Thanks Kramdown for the inspiration!
-require 'benchmark/ips'
-
-require 'redcarpet'
-require 'bluecloth'
-require 'kramdown'
-
-markdown = File.read(File.join(File.dirname(__FILE__), "fixtures/benchmark.md"))
-
-# Let's bench!
-Benchmark.ips do |bench|
-  bench.report("Redcarpet") do
-    Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(markdown)
-  end
-
-  bench.report("BlueCloth") do
-    BlueCloth.new(markdown).to_html
-  end
-
-  bench.report("Kramdown") do
-    Kramdown::Document.new(markdown).to_html
-  end
-end
diff --git a/test/custom_render_test.rb b/test/custom_render_test.rb
deleted file mode 100644
index 87c9f07..0000000
--- a/test/custom_render_test.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class CustomRenderTest < Redcarpet::TestCase
-  class SimpleRender < Redcarpet::Render::HTML
-    def emphasis(text)
-      if @options[:no_intra_emphasis]
-        return %(<em class="no_intra_emphasis">#{text}</em>)
-      end
-
-      %(<em class="cool">#{text}</em>)
-    end
-
-    def header(text, level)
-      "My little poney" if @options[:with_toc_data]
-    end
-  end
-
-  def test_simple_overload
-    md = Redcarpet::Markdown.new(SimpleRender)
-    assert_equal "<p>This is <em class=\"cool\">just</em> a test</p>\n",
-      md.render("This is *just* a test")
-  end
-
-  def test_renderer_options
-    parser = Redcarpet::Markdown.new(SimpleRender.new(with_toc_data: true))
-    output = parser.render("# A title")
-
-    assert_match "My little poney", output
-  end
-
-  def test_markdown_options
-    parser = Redcarpet::Markdown.new(SimpleRender, no_intra_emphasis: true)
-    output = parser.render("*foo*")
-
-    assert_match "no_intra_emphasis", output
-  end
-
-  def test_original_options_hash_is_not_mutated
-    options = { with_toc_data: true }
-    render  = SimpleRender.new(options)
-    parser  = Redcarpet::Markdown.new(render, tables: true)
-
-    computed_options = render.instance_variable_get(:"@options")
-
-    refute_equal computed_options.object_id, options.object_id
-  end
-
-  class NilPreprocessRenderer < Redcarpet::Render::HTML
-    def preprocess(fulldoc)
-      nil
-    end
-  end
-
-  def test_preprocess_returning_nil
-    md = Redcarpet::Markdown.new(NilPreprocessRenderer)
-    assert_equal(nil,md.render("Anything"))
-  end
-
-  def test_base_render_without_quote_callback
-    # Regression test for https://github.com/vmg/redcarpet/issues/569
-    render = Class.new(Redcarpet::Render::Base)
-    parser = Redcarpet::Markdown.new render.new, quote: true
-
-    assert_equal "", parser.render(%(a "quote"))
-  end
-end
diff --git a/test/fixtures/benchmark.md b/test/fixtures/benchmark.md
deleted file mode 100644
index 1083e61..0000000
--- a/test/fixtures/benchmark.md
+++ /dev/null
@@ -1,232 +0,0 @@
-Download
---------
-
-[Markdown 1.0.1][dl] (18 KB) -- 17 Dec 2004
-
-[dl]: http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
-
-
-Introduction
-------------
-
-Markdown is a text-to-HTML conversion tool for web writers. Markdown
-allows you to write using an easy-to-read, easy-to-write plain text
-format, then convert it to structurally valid XHTML (or HTML).
-
-Thus, "Markdown" is two things: (1) a plain text formatting syntax;
-and (2) a software tool, written in Perl, that converts the plain text
-formatting to HTML. See the [Syntax][] page for details pertaining to
-Markdown's formatting syntax. You can try it out, right now, using the
-online [Dingus][].
-
-  [syntax]: /projects/markdown/syntax
-  [dingus]: /projects/markdown/dingus
-
-The overriding design goal for Markdown's formatting syntax is to make
-it as readable as possible. The idea is that a Markdown-formatted
-document should be publishable as-is, as plain text, without looking
-like it's been marked up with tags or formatting instructions. While
-Markdown's syntax has been influenced by several existing text-to-HTML
-filters, the single biggest source of inspiration for Markdown's
-syntax is the format of plain text email.
-
-The best way to get a feel for Markdown's formatting syntax is simply
-to look at a Markdown-formatted document. For example, you can view
-the Markdown source for the article text on this page here:
-<http://daringfireball.net/projects/markdown/index.text>
-
-(You can use this '.text' suffix trick to view the Markdown source for
-the content of each of the pages in this section, e.g. the
-[Syntax][s_src] and [License][l_src] pages.)
-
-  [s_src]: /projects/markdown/syntax.text
-  [l_src]: /projects/markdown/license.text
-
-Markdown is free software, available under a BSD-style open source
-license. See the [License] [pl] page for more information.
-
-  [pl]: /projects/markdown/license
-
-
-Discussion List <a id="discussion-list" />
----------------
-
-I've set up a public [mailing list for discussion about Markdown] [ml].
-Any topic related to Markdown -- both its formatting syntax and
-its software -- is fair game for discussion. Anyone who is interested
-is welcome to join.
-
-It's my hope that the mailing list will lead to good ideas for future
-improvements to Markdown.
-
-  [ml]: http://six.pairlist.net/mailman/listinfo/markdown-discuss
-
-
-Installation and Requirements <a id="install" />
------------------------------
-
-Markdown requires Perl 5.6.0 or later. Welcome to the 21st Century.
-Markdown also requires the standard Perl library module [Digest::MD5]
-[md5], which is probably already installed on your server.
-
-  [md5]: http://search.cpan.org/dist/Digest-MD5/MD5.pm
-
-
-### Movable Type ###
-
-Markdown works with Movable Type version 2.6 or later (including
-Movable Type 3.0).
-
-1.  Copy the "Markdown.pl" file into your Movable Type "plugins"
-  directory. The "plugins" directory should be in the same directory
-  as "mt.cgi"; if the "plugins" directory doesn't already exist, use
-  your FTP program to create it. Your installation should look like
-  this:
-
-        (mt home)/plugins/Markdown.pl
-
-2.  Once installed, Markdown will appear as an option in Movable Type's
-  Text Formatting pop-up menu. This is selectable on a per-post basis:
-
-  ![Screenshot of Movable Type 'Text Formatting' Menu][tfmenu]
-
-  Markdown translates your posts to HTML when you publish; the posts
-  themselves are stored in your MT database in Markdown format.
-
-3.  If you also install SmartyPants 1.5 (or later), Markdown will
-  offer a second text formatting option: "Markdown With
-  SmartyPants". This option is the same as the regular "Markdown"
-  formatter, except that it automatically uses SmartyPants to create
-  typographically correct curly quotes, em-dashes, and ellipses. See
-  the [SmartyPants web page][sp] for more information.
-
-4.  To make Markdown (or "Markdown With SmartyPants") your default
-  text formatting option for new posts, go to Weblog Config:
-  Preferences.
-
-Note that by default, Markdown produces XHTML output. To configure
-Markdown to produce HTML 4 output, see "Configuration", below.
-
-  [sp]: http://daringfireball.net/projects/smartypants/
-
-
-
-### Blosxom ###
-
-Markdown works with Blosxom version 2.0 or later.
-
-1.  Rename the "Markdown.pl" plug-in to "Markdown" (case is
-    important). Movable Type requires plug-ins to have a ".pl"
-    extension; Blosxom forbids it.
-
-2.  Copy the "Markdown" plug-in file to your Blosxom plug-ins folder.
-    If you're not sure where your Blosxom plug-ins folder is, see the
-    Blosxom documentation for information.
-
-3.  That's it. The entries in your weblog will now automatically be
-  processed by Markdown.
-
-4.  If you'd like to apply Markdown formatting only to certain
-  posts, rather than all of them, Markdown can optionally be used in
-  conjunction with Blosxom's [Meta][] plug-in. First, install the
-  Meta plug-in. Next, open the Markdown plug-in file in a text
-  editor, and set the configuration variable `$g_blosxom_use_meta`
-  to 1. Then, simply include a "`meta-markup: Markdown`" header line
-  at the top of each post you compose using Markdown.
-
-  [meta]: http://www.blosxom.com/plugins/meta/meta.htm
-
-
-### BBEdit ###
-
-Markdown works with BBEdit 6.1 or later on Mac OS X. It also works
-with BBEdit 5.1 or later and MacPerl 5.6.1 on Mac OS 8.6 or later. If
-you're running Mac OS X 10.2 (Jaguar), you may need to install the
-Perl module [Digest::MD5] [md5] from CPAN; Digest::MD5 comes
-pre-installed on Mac OS X 10.3 (Panther).
-
-1.  Copy the "Markdown.pl" file to appropriate filters folder in your
-  "BBEdit Support" folder. On Mac OS X, this should be:
-
-        BBEdit Support/Unix Support/Unix Filters/
-
-    See the BBEdit documentation for more details on the location of
-    these folders.
-
-    You can rename "Markdown.pl" to whatever you wish.
-
-2.  That's it. To use Markdown, select some text in a BBEdit document,
-  then choose Markdown from the Filters sub-menu in the "#!" menu, or
-  the Filters floating palette
-
-
-
-Configuration  <a id="configuration"></a>
--------------
-
-By default, Markdown produces XHTML output for tags with empty elements.
-E.g.:
-
-    <br />
-
-Markdown can be configured to produce HTML-style tags; e.g.:
-
-    <br>
-
-
-### Movable Type ###
-
-You need to use a special `MTMarkdownOptions` container tag in each
-Movable Type template where you want HTML 4-style output:
-
-    <MTMarkdownOptions output='html4'>
-        ... put your entry content here ...
-    </MTMarkdownOptions>
-
-The easiest way to use MTMarkdownOptions is probably to put the
-opening tag right after your `<body>` tag, and the closing tag right
-before `</body>`.
-
-To suppress Markdown processing in a particular template, i.e. to
-publish the raw Markdown-formatted text without translation into
-(X)HTML, set the `output` attribute to 'raw':
-
-    <MTMarkdownOptions output='raw'>
-        ... put your entry content here ...
-    </MTMarkdownOptions>
-
-
-### Command-Line ###
-
-Use the `--html4tags` command-line switch to produce HTML output from a
-Unix-style command line. E.g.:
-
-    % perl Markdown.pl --html4tags foo.text
-
-Type `perldoc Markdown.pl`, or read the POD documentation within the
-Markdown.pl source code for more information.
-
-
-Acknowledgements <a id="acknowledgements" />
-----------------
-
-[Aaron Swartz][] deserves a tremendous amount of credit for his feedback on the
-design of Markdown's formatting syntax. Markdown is *much* better thanks
-to Aaron's ideas, feedback, and testing. Also, Aaron's [html2text][]
-is a very handy (and free) utility for turning HTML into
-Markdown-formatted plain text.
-
-[Nathaniel Irons][], [Dan Benjamin][], [Daniel Bogan][], and [Jason Perkins][]
-also deserve thanks for their feedback.
-
-[Michel Fortin][] has ported Markdown to PHP; it's a splendid port, and highly recommended for anyone looking for a PHP implementation of Markdown.
-
-  [Aaron Swartz]:   http://www.aaronsw.com/
-  [Nathaniel Irons]:  http://bumppo.net/
-  [Dan Benjamin]:   http://hivelogic.com/
-  [Daniel Bogan]:   http://waferbaby.com/
-  [Jason Perkins]:    http://pressedpants.com/
-  [Michel Fortin]:    http://www.michelf.com/projects/php-markdown/
-  [html2text]:          http://www.aaronsw.com/2002/html2text/
-
-  [tfmenu]: /graphics/markdown/mt_textformat_menu.png
diff --git a/test/html5_test.rb b/test/html5_test.rb
deleted file mode 100644
index e3cb053..0000000
--- a/test/html5_test.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require 'test_helper'
-
-class HTML5Test < Redcarpet::TestCase
-  def test_that_html5_works
-    section = <<-HTML.chomp.strip_heredoc
-      <section>
-        <p>The quick brown fox jumps over the lazy dog.</p>
-      </section>
-    HTML
-
-    figure = <<-HTML.chomp.strip_heredoc
-      <figure>
-        <img src="http://example.org/image.jpg" alt="">
-        <figcaption>
-          <p>Hello world!</p>
-        </figcaption>
-      </figure>
-    HTML
-
-    assert_renders section, section
-    assert_renders figure, figure
-  end
-
-  def test_that_html5_works_with_code_blocks
-    section = <<-HTML
-\t<section>
-\t\t<p>The quick brown fox jumps over the lazy dog.</p>
-\t</section>
-    HTML
-
-    section_expected = <<-HTML.chomp.strip_heredoc
-      <pre><code>&lt;section&gt;
-          &lt;p&gt;The quick brown fox jumps over the lazy dog.&lt;/p&gt;
-      &lt;/section&gt;
-      </code></pre>
-    HTML
-
-    header = <<-HTML
-    <header>
-        <hgroup>
-            <h1>Section heading</h1>
-            <h2>Subhead</h2>
-        </hgroup>
-    </header>
-    HTML
-
-    header_expected = <<-HTML.chomp.strip_heredoc
-      <pre><code>&lt;header&gt;
-          &lt;hgroup&gt;
-              &lt;h1&gt;Section heading&lt;/h1&gt;
-              &lt;h2&gt;Subhead&lt;/h2&gt;
-          &lt;/hgroup&gt;
-      &lt;/header&gt;
-      </code></pre>
-    HTML
-
-    assert_renders section_expected, section
-    assert_renders header_expected, header
-  end
-
-  def test_script_tag_recognition
-    html = <<-HTML.chomp.strip_heredoc
-      <script type="text/javascript">
-        alert('Foo!');
-      </script>
-    HTML
-
-    assert_renders html, html
-  end
-
-  def test_new_html5_tags_not_escaped
-    details = <<-HTML.chomp.strip_heredoc
-      <details>
-        log:
-
-      </details>
-    HTML
-
-    assert_renders details, details
-  end
-
-end
diff --git a/test/html_render_test.rb b/test/html_render_test.rb
deleted file mode 100644
index f8abf52..0000000
--- a/test/html_render_test.rb
+++ /dev/null
@@ -1,274 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class HTMLRenderTest < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::HTML
-  end
-
-  # Hint: overrides filter_html, no_images and no_links
-  def test_that_escape_html_works
-    source = <<-HTML.strip_heredoc
-      Through <em>NO</em> <script>DOUBLE NO</script>
-
-      <script>BAD</script>
-
-      <img src="/favicon.ico" />
-    HTML
-    expected = <<-HTML.chomp.strip_heredoc
-      <p>Through &lt;em&gt;NO&lt;/em&gt; &lt;script&gt;DOUBLE NO&lt;/script&gt;</p>
-
-      <p>&lt;script&gt;BAD&lt;/script&gt;</p>
-
-      <p>&lt;img src=&quot;/favicon.ico&quot; /&gt;</p>
-    HTML
-
-    assert_equal expected, render(source, with: [:escape_html])
-  end
-
-  def test_that_filter_html_works
-    markdown = 'Through <em>NO</em> <script>DOUBLE NO</script>'
-    output   = render(markdown, with: [:filter_html])
-
-    assert_equal "<p>Through NO DOUBLE NO</p>", output
-  end
-
-  def test_filter_html_doesnt_break_two_space_hard_break
-    markdown = "Lorem,  \nipsum\n"
-    output   = render(markdown, with: [:filter_html])
-
-    assert_equal "<p>Lorem,<br>\nipsum</p>", output
-  end
-
-  def test_that_no_image_flag_works
-    markdown = %(![dust mite](http://dust.mite/image.png) <img src="image.png" />)
-    output   = render(markdown, with: [:no_images])
-
-    assert_no_match %r{<img}, output
-  end
-
-  def test_that_links_with_ampersands_work
-    markdown = %([/?a=b&c=d](/?a=b&c=d))
-    output   = render(markdown)
-    assert_equal "<p><a href=\"/?a=b&c=d\">/?a=b&amp;c=d</a></p>", output
-  end
-
-  def test_that_no_links_flag_works
-    markdown = %([This link](http://example.net/) <a href="links.html">links</a>)
-    output   = render(markdown, with: [:no_links])
-
-    assert_no_match %r{<a }, output
-  end
-
-  def test_that_safelink_flag_works
-    markdown = "[IRC](irc://chat.freenode.org/#freenode)"
-    output   = render(markdown, with: [:safe_links_only])
-
-    assert_equal "<p>[IRC](irc://chat.freenode.org/#freenode)</p>", output
-  end
-
-  def test_that_hard_wrap_works
-    markdown = <<-Markdown.strip_heredoc
-      Hello world,
-      this is just a simple test
-
-      With hard wraps
-      and other *things*.
-    Markdown
-    output   = render(markdown, with: [:hard_wrap])
-
-    assert_match %r{<br>}, output
-  end
-
-  def test_that_link_attributes_work
-    rndr = Redcarpet::Render::HTML.new(:link_attributes => {:rel => 'blank'})
-    md = Redcarpet::Markdown.new(rndr)
-    assert md.render('This is a [simple](http://test.com) test.').include?('rel="blank"')
-  end
-
-  def test_that_link_works_with_quotes
-    markdown = %([This'link"is](http://example.net/))
-    expected = %(<p><a href="http://example.net/">This&#39;link&quot;is</a></p>)
-
-    assert_equal expected, render(markdown)
-    assert_equal expected, render(markdown, with: [:escape_html])
-  end
-
-  def test_that_code_emphasis_work
-    markdown = <<-Markdown.strip_heredoc
-      This should be **`a bold codespan`**
-      However, this should be *`an emphasised codespan`*
-
-      * **`ABC`** or **`DEF`**
-      * Foo bar
-    Markdown
-
-    html = <<-HTML.chomp.strip_heredoc
-      <p>This should be <strong><code>a bold codespan</code></strong>
-      However, this should be <em><code>an emphasised codespan</code></em></p>
-
-      <ul>
-      <li><strong><code>ABC</code></strong> or <strong><code>DEF</code></strong></li>
-      <li>Foo bar</li>
-      </ul>
-    HTML
-
-    assert_equal html, render(markdown)
-  end
-
-  def test_that_parenthesis_are_handled_into_links
-    markdown = %(The [bash man page](man:bash(1))!)
-    expected = %(<p>The <a href="man:bash(1)">bash man page</a>!</p>)
-
-    assert_equal expected, render(markdown)
-  end
-
-  def test_autolinking_works_as_expected
-    markdown = "Uri ftp://user:pass@example.com/. Email foo@bar.com and link http://bar.com"
-    output   = render(markdown, with: [:autolink])
-
-    assert output.include? '<a href="ftp://user:pass@example.com/">ftp://user:pass@example.com/</a>'
-    assert output.include? 'mailto:foo@bar.com'
-    assert output.include? '<a href="http://bar.com">'
-  end
-
-  def test_that_footnotes_work
-    markdown = <<-Markdown.strip_heredoc
-      This is a footnote.[^1]
-
-      [^1]: It provides additional information.
-    Markdown
-
-    html = <<-HTML.chomp.strip_heredoc
-      <p>This is a footnote.<sup id="fnref1"><a href="#fn1">1</a></sup></p>
-
-      <div class="footnotes">
-      <hr>
-      <ol>
-
-      <li id="fn1">
-      <p>It provides additional information.&nbsp;<a href="#fnref1">&#8617;</a></p>
-      </li>
-
-      </ol>
-      </div>
-    HTML
-
-    output = render(markdown, with: [:footnotes])
-    assert_equal html, output
-  end
-
-  def test_footnotes_enabled_but_missing_marker
-    markdown = <<-Markdown.strip_heredoc
-      Some text without a marker
-
-      [^1] And a trailing definition
-    Markdown
-    html = <<-HTML.chomp.strip_heredoc
-      <p>Some text without a marker</p>
-
-      <p>[^1] And a trailing definition</p>
-    HTML
-
-    output = render(markdown, with: [:footnotes])
-    assert_equal html, output
-  end
-
-  def test_footnotes_enabled_but_missing_definition
-    markdown = "Some text with a marker[^1] but no definition."
-    expected = "<p>Some text with a marker[^1] but no definition.</p>"
-
-    output = render(markdown, with: [:footnotes])
-    assert_equal expected, output
-  end
-
-  def test_autolink_short_domains
-    markdown = "Example of uri ftp://auto/short/domains. Email auto@l.n and link http://a/u/t/o/s/h/o/r/t"
-    output   = render(markdown, with: [:autolink])
-
-    assert output.include? '<a href="ftp://auto/short/domains">ftp://auto/short/domains</a>'
-    assert output.include? 'mailto:auto@l.n'
-    assert output.include? '<a href="http://a/u/t/o/s/h/o/r/t">http://a/u/t/o/s/h/o/r/t</a>'
-  end
-
-  def test_that_prettify_works
-    markdown = "\tclass Foo\nend"
-    output   = render(markdown, with: [:prettify])
-
-    assert output.include?("<pre><code class=\"prettyprint\">")
-
-    markdown = "`class`"
-    output   = render(markdown, with: [:prettify])
-
-    assert output.include?("<code class=\"prettyprint\">")
-  end
-
-  def test_prettify_with_fenced_code_blocks
-    markdown = "~~~ruby\ncode\n~~~"
-    output   = render(markdown, with: [:fenced_code_blocks, :prettify])
-
-    assert output.include?("<code class=\"prettyprint lang-ruby\">")
-  end
-
-  def test_safe_links_only_with_anchors
-    markdown = "An [anchor link](#anchor) on a page."
-    output   = render(markdown, with: [:safe_links_only])
-
-    assert_match %r{<a href="#anchor">anchor link</a>}, output
-  end
-
-  def test_autolink_with_link_attributes
-    options = { autolink: true, link_attributes: {rel: "nofollow"} }
-    output  = render("https://github.com/", with: options)
-
-    assert_match %r{rel="nofollow"}, output
-  end
-
-  def test_image_unsafe_src_with_safe_links_only
-    markdown = "![foo](javascript:while(1);)"
-    output   = render(markdown, with: [:safe_links_only])
-
-    assert_not_match %r{img src}, output
-  end
-
-  def test_no_styles_option_inside_a_paragraph
-    markdown = "Hello <style> foo { bar: baz; } </style> !"
-    output   = render(markdown, with: [:no_styles])
-
-    assert_no_match %r{<style>}, output
-  end
-
-  def test_no_styles_inside_html_block_rendering
-    markdown = "<style> foo { bar: baz; } </style>"
-    output   = render(markdown, with: [:no_styles])
-
-    assert_no_match %r{<style>}, output
-  end
-
-  def test_non_ascii_removal_in_header_anchors
-    markdown = "# Glühlampe"
-    html = "<h1 id=\"gl-hlampe\">Glühlampe</h1>"
-
-    assert_equal html, render(markdown, with: [:with_toc_data])
-  end
-
-  def test_utf8_only_header_anchors
-    markdown = "# 見出し"
-    if 1.size == 4 # 32-bit architecture
-      html = "<h1 id=\"part-a194139f\">見出し</h1>"
-    elsif 1.size == 8 # 64-bit architecture
-      html = "<h1 id=\"part-37870bfa194139f\">見出し</h1>"
-    else
-      raise "unknown integer size"
-    end
-
-    assert_equal html, render(markdown, with: [:with_toc_data])
-  end
-
-  def test_escape_entities_removal_from_anchor
-    output = render("# Foo's & Bar's", with: [:with_toc_data])
-    result = %(<h1 id="foos-bars">Foo&#39;s &amp; Bar&#39;s</h1>)
-
-    assert_equal result, output
-  end
-end
diff --git a/test/html_toc_render_test.rb b/test/html_toc_render_test.rb
deleted file mode 100644
index 0aae905..0000000
--- a/test/html_toc_render_test.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class HTMLTOCRenderTest < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::HTML_TOC
-    @markdown = <<-Markdown.strip_heredoc
-      # A title
-      ## A __nice__ subtitle
-      ## Another one
-      ### A sub-sub-title
-      ### 見出し
-    Markdown
-  end
-
-  def test_simple_toc_render
-    output = render(@markdown)
-
-    assert output.start_with?("<ul>")
-    assert output.end_with?("</ul>")
-
-    assert_equal 3, output.scan("<ul>").length
-    assert_equal 5, output.scan("<li>").length
-  end
-
-  def test_granular_toc_render
-    output = render(@markdown, with: { nesting_level: 2 })
-
-    assert output.start_with?("<ul>")
-    assert output.end_with?("</ul>")
-
-    assert_equal 3, output.scan("<li>").length
-    assert !output.include?("A sub-sub title")
-  end
-
-  def test_granular_toc_render_with_range
-    output = render(@markdown, with: { nesting_level: 2..5 }).strip
-
-    assert output.start_with?("<ul>")
-    assert output.end_with?("</ul>")
-
-    assert output.match("Another one")
-    assert output.match("A sub-sub-title")
-    assert output.match("見出し")
-
-    refute output.match("A title")
-    refute output.match("A really tiny title")
-  end
-
-  def test_toc_heading_id
-    output = render(@markdown)
-
-    assert_match /a-title/, output
-    assert_match /a-nice-subtitle/, output
-    assert_match /another-one/, output
-    assert_match /a-sub-sub-title/, output
-    # the part number length varies depending on architecture (32b or 64b)
-    assert_match /part-(37870bf)?a194139f/, output
-  end
-
-  def test_toc_heading_with_hyphen_and_equal
-    output = render("# Hello World\n\n-\n\n=")
-
-    assert_equal 1, output.scan("<li>").length
-    assert !output.include?('<a href=\"#\"></a>')
-  end
-
-  def test_anchor_generation_with_edge_cases
-    # Imported from ActiveSupport::Inflector#parameterize's tests
-    titles = {
-      "Donald E. Knuth"                     => "donald-e-knuth",
-      "Random text with *(bad)* characters" => "random-text-with-bad-characters",
-      "!@#Surrounding bad characters!@#"    => "surrounding-bad-characters",
-      "Squeeze   separators"                => "squeeze-separators",
-      "Test with + sign"                    => "test-with-sign",
-      "Test with a Namespaced::Class"       => "test-with-a-namespaced-class"
-    }
-
-    titles.each do |title, anchor|
-      assert_match %("##{anchor}"), render("# #{title}")
-    end
-  end
-
-  def test_inline_markup_is_not_escaped
-    output = render(@markdown)
-
-    assert_match "A <strong>nice</strong> subtitle", output
-    assert_no_match %r{&lt;}, output
-  end
-
-  def test_inline_markup_escaping
-    output = render(@markdown, with: [:escape_html])
-
-    assert_match "&lt;strong&gt;", output
-    assert_no_match %r{<strong>}, output
-  end
-
-  def test_ignoring_fenced_code_blocks_comments
-    markdown = <<-Markdown.strip_heredoc
-    # Hello world !
-
-    ~~~ruby
-    # This is a comment
-    ~~~
-    Markdown
-
-    output = render(markdown)
-
-    assert output.match("Hello world")
-    refute output.match("This is a comment")
-  end
-end
diff --git a/test/markdown_test.rb b/test/markdown_test.rb
deleted file mode 100644
index 68de125..0000000
--- a/test/markdown_test.rb
+++ /dev/null
@@ -1,416 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class MarkdownTest < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::HTML
-  end
-
-  def test_that_simple_one_liner_goes_to_html
-    assert_equal "<p>Hello World.</p>", render("Hello World.")
-  end
-
-  def test_that_inline_markdown_goes_to_html
-    assert_equal "<p><em>Hello World</em>!</p>", render('_Hello World_!')
-  end
-
-  def test_that_inline_markdown_starts_and_ends_correctly
-    output   = render('_start _ foo_bar bar_baz _ end_ *italic* **bold** <a>_blah_</a>', with: [:no_intra_emphasis])
-    expected = "<p><em>start _ foo_bar bar_baz _ end</em> <em>italic</em> <strong>bold</strong> <a><em>blah</em></a></p>"
-
-    assert_equal expected, output
-
-    output   = render("Run 'rake radiant:extensions:rbac_base:migrate'")
-    expected = "<p>Run &#39;rake radiant:extensions:rbac_base:migrate&#39;</p>"
-
-    assert_equal expected, output
-  end
-
-  def test_that_urls_are_not_doubly_escaped
-    output = render('[Page 2](/search?query=Markdown+Test&page=2)')
-    assert_equal "<p><a href=\"/search?query=Markdown+Test&page=2\">Page 2</a></p>", output
-  end
-
-  def test_simple_inline_html
-    output   = render("before\n\n<div>\n  foo\n</div>\n\nafter")
-    expected = "<p>before</p>\n\n<div>\n  foo\n</div>\n\n<p>after</p>"
-
-    assert_equal expected, output
-  end
-
-  def test_that_html_blocks_do_not_require_their_own_end_tag_line
-    output   = render("Para 1\n\n<div><pre>HTML block\n</pre></div>\n\nPara 2 [Link](#anchor)")
-    expected = "<p>Para 1</p>\n\n<div><pre>HTML block\n</pre></div>\n\n<p>Para 2 <a href=\"#anchor\">Link</a></p>"
-
-    assert_equal expected, output
-  end
-
-  # This isn't in the spec but is Markdown.pl behavior.
-  def test_block_quotes_preceded_by_spaces
-    output = render <<-Markdown.strip_heredoc
-      A wise man once said:
-
-
-       > Isn't it wonderful just to be alive.
-    Markdown
-    expected = <<-HTML.chomp.strip_heredoc
-      <p>A wise man once said:</p>
-
-      <blockquote>
-      <p>Isn&#39;t it wonderful just to be alive.</p>
-      </blockquote>
-    HTML
-
-    assert_equal expected, output
-  end
-
-  def test_para_before_block_html_should_not_wrap_in_p_tag
-    output   = render("Things to watch out for\n<ul>\n<li>Blah</li>\n</ul>", with: [:lax_spacing])
-    expected = "<p>Things to watch out for</p>\n\n<ul>\n<li>Blah</li>\n</ul>"
-
-    assert_equal expected, output
-  end
-
-  # https://github.com/vmg/redcarpet/issues/111
-  def test_p_with_less_than_4space_indent_should_not_be_part_of_last_list_item
-    text = <<-Markdown
-  * a
-  * b
-  * c
-
-  This paragraph is not part of the list.
-    Markdown
-    expected = <<-HTML.chomp.strip_heredoc
-      <ul>
-      <li>a</li>
-      <li>b</li>
-      <li>c</li>
-      </ul>
-
-      <p>This paragraph is not part of the list.</p>
-    HTML
-
-    assert_equal expected, render(text)
-  end
-
-  # http://github.com/rtomayko/rdiscount/issues/#issue/13
-  def test_headings_with_trailing_space
-    text = "The Ant-Sugar Tales \n"       +
-           "=================== \n\n"     +
-           "By Candice Yellowflower   \n"
-
-    assert_equal "<h1>The Ant-Sugar Tales </h1>\n\n<p>By Candice Yellowflower   </p>", render(text)
-  end
-
-  def test_that_intra_emphasis_works
-    assert_equal "<p>foo<em>bar</em>baz</p>", render("foo_bar_baz")
-    assert_equal "<p>foo_bar_baz</p>", render("foo_bar_baz", with: [:no_intra_emphasis])
-  end
-
-  def test_that_autolink_flag_works
-    output   = render("http://github.com/rtomayko/rdiscount", with: [:autolink])
-    expected = "<p><a href=\"http://github.com/rtomayko/rdiscount\">http://github.com/rtomayko/rdiscount</a></p>"
-
-    assert_equal expected, output
-  end
-
-  def test_that_tags_can_have_dashes_and_underscores
-    output   = render("foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b>")
-    expected = "<p>foo <asdf-qwerty>bar</asdf-qwerty> and <a_b>baz</a_b></p>"
-
-    assert_equal expected, output
-  end
-
-  def test_link_syntax_is_not_processed_within_code_blocks
-    output   = render("    This is a code block\n    This is a link [[1]] inside\n")
-    expected = "<pre><code>This is a code block\nThis is a link [[1]] inside\n</code></pre>"
-
-    assert_equal expected, output
-  end
-
-  def test_whitespace_after_urls
-    output   = render("Japan: http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm (yes, japan)", with: [:autolink])
-    expected = %(<p>Japan: <a href="http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm">http://www.abc.net.au/news/events/japan-quake-2011/beforeafter.htm</a> (yes, japan)</p>)
-
-    assert_equal expected, output
-  end
-
-  def test_memory_leak_when_parsing_char_links
-    render(<<-leaks.strip_heredoc)
-      2. Identify the wild-type cluster and determine all clusters
-         containing or contained by it:
-
-             wildtype <- wildtype.cluster(h)
-             wildtype.mask <- logical(nclust)
-             wildtype.mask[c(contains(h, wildtype),
-                             wildtype,
-                             contained.by(h, wildtype))] <- TRUE
-
-         This could be more elegant.
-    leaks
-  end
-
-  def test_infinite_loop_in_header
-    assert_equal "<h1>Body</h1>", render(<<-header.strip_heredoc)
-      ######
-      #Body#
-      ######
-    header
-  end
-
-  def test_a_hyphen_and_a_equal_should_not_be_converted_to_heading
-    assert_equal "<p>-</p>", render("-")
-    assert_equal "<p>=</p>", render("=")
-  end
-
-  def test_that_tables_flag_works
-    text = <<-Markdown.strip_heredoc
-       aaa | bbbb
-      -----|------
-      hello|sailor
-    Markdown
-
-    assert render(text) !~ /<table/
-    assert render(text, with: [:tables]) =~ /<table/
-  end
-
-  def test_that_tables_work_with_org_table_syntax
-    text = <<-Markdown.strip_heredoc
-      | aaa | bbbb |
-      |-----+------|
-      |hello|sailor|
-    Markdown
-
-    assert render(text) !~ /<table/
-    assert render(text, with: [:tables]) =~ /<table/
-  end
-
-  def test_strikethrough_flag_works
-    text = "this is ~some~ striked ~~text~~"
-
-    assert render(text) !~ /<del/
-    assert render(text, with: [:strikethrough]) =~ /<del/
-  end
-
-  def test_underline_flag_works
-    text   = "this is *some* text that is _underlined_. ___boom___"
-    output = render(text, with: [:underline])
-
-    refute render(text).include? '<u>underlined</u>'
-
-    assert output.include? '<u>underlined</u>'
-    assert output.include? '<em>some</em>'
-  end
-
-  def test_highlight_flag_works
-    text   = "this is ==highlighted=="
-    output = render(text, with: [:highlight])
-
-    refute render(text).include? '<mark>highlighted</mark>'
-
-    assert output.include? '<mark>highlighted</mark>'
-  end
-
-  def test_quote_flag_works
-    text   = 'this is a "quote"'
-    output = render(text, with: [:quote])
-
-    refute render(text).include? '<q>quote</q>'
-
-    assert_equal '<p>this is a <q>quote</q></p>', output
-  end
-
-  def test_quote_flag_honors_escape_html
-    text = 'We are not "<svg/onload=pwned>"'
-
-    output_enabled  = render(text, with: [:quote, :escape_html])
-    output_disabled = render(text, with: [:quote])
-
-    assert_equal "<p>We are not <q>&lt;svg/onload=pwned&gt;</q></p>", output_enabled
-    assert_equal "<p>We are not <q><svg/onload=pwned></q></p>", output_disabled
-  end
-
-  def test_that_fenced_flag_works
-    text = <<-fenced.strip_heredoc
-      This is a simple test
-
-      ~~~~~
-      This is some awesome code
-          with tabs and shit
-      ~~~
-    fenced
-
-    assert render(text) !~ /<code/
-    assert render(text, with: [:fenced_code_blocks]) =~ /<code/
-  end
-
-  def test_that_fenced_flag_works_without_space
-    text   = "foo\nbar\n```\nsome\ncode\n```\nbaz"
-    output = render(text, with: [:fenced_code_blocks, :lax_spacing])
-
-    assert output.include?("<pre><code>")
-
-    output = render(text, with: [:fenced_code_blocks])
-    assert !output.include?("<pre><code>")
-  end
-
-  def test_that_indented_code_preserves_references
-    text = <<-indented.strip_heredoc
-      This is normal text
-
-          Link to [Google][1]
-
-          [1]: http://google.com
-    indented
-
-    output = render(text, with: [:fenced_code_blocks])
-    assert output.include?("[1]: http://google.com")
-  end
-
-  def test_that_fenced_flag_preserves_references
-    text = <<-fenced.strip_heredoc
-      This is normal text
-
-      ```
-      Link to [Google][1]
-
-      [1]: http://google.com
-      ```
-    fenced
-
-    out = render(text, with: [:fenced_code_blocks])
-    assert out.include?("[1]: http://google.com")
-  end
-
-  def test_that_fenced_code_copies_language_verbatim_with_braces
-    text = "```{rust,no_run}\nx = 'foo'\n```"
-    html = render(text, with: [:fenced_code_blocks])
-
-    assert_equal "<pre><code class=\"rust,no_run\">x = &#39;foo&#39;\n</code></pre>", html
-  end
-
-  def test_that_fenced_code_copies_language_verbatim
-    text = "```rust,no_run\nx = 'foo'\n```"
-    html = render(text, with: [:fenced_code_blocks])
-
-    assert_equal "<pre><code class=\"rust,no_run\">x = &#39;foo&#39;\n</code></pre>", html
-  end
-
-  def test_that_indented_flag_works
-    text = <<-indented.strip_heredoc
-      This is a simple text
-
-          This is some awesome code
-          with shit
-
-      And this is again a simple text
-    indented
-
-    assert render(text) =~ /<code/
-    assert render(text, with: [:disable_indented_code_blocks]) !~ /<code/
-  end
-
-  def test_that_headers_are_linkable
-    output   = render('### Hello [GitHub](http://github.com)')
-    expected = "<h3>Hello <a href=\"http://github.com\">GitHub</a></h3>"
-
-    assert_equal expected, output
-  end
-
-  def test_autolinking_with_ent_chars
-    markdown = <<-Markdown.strip_heredoc
-      This a stupid link: https://github.com/rtomayko/tilt/issues?milestone=1&state=open
-    Markdown
-    output   = render(markdown, with: [:autolink])
-
-    assert_equal "<p>This a stupid link: <a href=\"https://github.com/rtomayko/tilt/issues?milestone=1&state=open\">https://github.com/rtomayko/tilt/issues?milestone=1&amp;state=open</a></p>", output
-  end
-
-  def test_spaced_headers
-    output = render("#123 a header yes\n", with: [:space_after_headers])
-
-    assert output !~ /<h1>/
-  end
-
-  def test_proper_intra_emphasis
-    assert render("http://en.wikipedia.org/wiki/Dave_Allen_(comedian)", with: [:no_intra_emphasis]) !~ /<em>/
-    assert render("this fails: hello_world_", with: [:no_intra_emphasis]) !~ /<em>/
-    assert render("this also fails: hello_world_#bye", with: [:no_intra_emphasis]) !~ /<em>/
-    assert render("this works: hello_my_world", with: [:no_intra_emphasis]) !~ /<em>/
-    assert render("句中**粗體**測試", with: [:no_intra_emphasis]) =~ /<strong>/
-
-    markdown = "This is (**bold**) and this_is_not_italic!"
-    output   = "<p>This is (<strong>bold</strong>) and this_is_not_italic!</p>"
-
-    assert_equal output, render(markdown, with: [:no_intra_emphasis])
-
-    markdown = "This is \"**bold**\""
-    output   = "<p>This is &quot;<strong>bold</strong>&quot;</p>"
-    assert_equal output, render(markdown, with: [:no_intra_emphasis])
-  end
-
-  def test_emphasis_escaping
-    assert_equal "<p><strong>foo*</strong> <em>dd_dd</em></p>", render("**foo\\*** _dd\\_dd_")
-  end
-
-  def test_char_escaping_when_highlighting
-    output = render("==attribute\\===", with: [:highlight])
-
-    assert_equal "<p><mark>attribute=</mark></p>", output
-  end
-
-  def test_ordered_lists_with_lax_spacing
-    output = render("Foo:\n1. Foo\n2. Bar", with: [:lax_spacing])
-
-    assert_match /<ol>/, output
-    assert_match /<li>Foo<\/li>/, output
-  end
-
-  def test_references_with_tabs_after_colon
-    output = render("[Link][id]\n[id]:\t\t\thttp://google.es")
-
-    assert_equal "<p><a href=\"http://google.es\">Link</a></p>", output
-  end
-
-  def test_superscript
-    output = render("this is the 2^nd time", with: [:superscript])
-
-    assert_equal "<p>this is the 2<sup>nd</sup> time</p>", output
-  end
-
-  def test_superscript_enclosed_in_parenthesis
-    output = render("this is the 2^(nd) time", with: [:superscript])
-
-    assert_equal "<p>this is the 2<sup>nd</sup> time</p>", output
-  end
-
-  def test_no_rewind_into_previous_inline
-    result = "<p><em>!dl</em><a href=\"mailto:1@danlec.com\">1@danlec.com</a></p>"
-    output = render("_!dl_1@danlec.com", with: [:autolink])
-
-    assert_equal result, output
-
-    result = "<p>abc123<em><a href=\"http://www.foo.com\">www.foo.com</a></em>@foo.com</p>"
-    output = render("abc123_www.foo.com_@foo.com", with: [:autolink])
-
-    assert_equal result, output
-  end
-
-  def test_autolink_with_period_next_to_url
-    result = %(<p>Checkout a cool site like <a href="https://github.com">https://github.com</a>.</p>)
-    output = render("Checkout a cool site like https://github.com.", with: [:autolink])
-
-    assert_equal result, output
-  end
-
-  def test_single_dashes_on_table_headers
-    markdown = <<-Markdown.strip_heredoc
-      | a | b |
-      | - | - |
-      | c | d |
-    Markdown
-    output   = render(markdown, with: [:tables])
-
-    assert_match /<table>/, output
-  end
-end
diff --git a/test/pathological_inputs_test.rb b/test/pathological_inputs_test.rb
deleted file mode 100644
index a194e9e..0000000
--- a/test/pathological_inputs_test.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-# Disabled by default
-# (these are the easy ones -- the evil ones are not disclosed)
-class PathologicalInputsTest # < Redcarpet::TestCase
-  def setup
-    @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
-  end
-
-  def test_pathological_1
-    star = '*'  * 250000
-    @markdown.render("#{star}#{star} hi #{star}#{star}")
-  end
-
-  def test_pathological_2
-    crt = '^' * 255
-    str = "#{crt}(\\)"
-    @markdown.render("#{str*300}")
-  end
-
-  def test_pathological_3
-    c = "`t`t`t`t`t`t" * 20000000
-    @markdown.render(c)
-  end
-
-  def test_pathological_4
-    @markdown.render(" [^a]: #{ "A" * 10000 }\n#{ "[^a][]" * 1000000 }\n")
-  end
-
-  def test_unbound_recursion
-    @markdown.render(("[" * 10000) + "foo" + ("](bar)" * 10000))
-  end
-end
diff --git a/test/redcarpet_bin_test.rb b/test/redcarpet_bin_test.rb
deleted file mode 100644
index c9636f6..0000000
--- a/test/redcarpet_bin_test.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-require 'test_helper'
-require 'tempfile'
-
-class RedcarpetBinTest < Redcarpet::TestCase
-  def setup
-    @fixture_file = Tempfile.new('bin')
-    @fixture_path = @fixture_file.path
-
-    @fixture_file.write "A ==simple== fixture file -- with " \
-                        "a [link](https://github.com)."
-    @fixture_file.rewind
-  end
-
-  def teardown
-    @fixture_file.unlink
-  end
-
-  def test_vanilla_bin
-    run_bin(@fixture_path)
-
-    expected = "<p>A ==simple== fixture file -- with " \
-               "a <a href=\"https://github.com\">link</a>.</p>\n"
-
-    assert_equal expected, @output
-  end
-
-  def test_enabling_a_parse_option
-    run_bin("--parse", "highlight", @fixture_path)
-
-    assert_output "<mark>"
-    refute_output "=="
-  end
-
-  def test_enabling_a_render_option
-    run_bin("--render", "no-links", @fixture_path)
-
-    assert_output "[link]"
-    refute_output "</a>"
-  end
-
-  def test_enabling_smarty_pants
-    run_bin("--smarty", @fixture_path)
-
-    assert_output "&ndash"
-    refute_output "--"
-  end
-
-  def test_version_option
-    run_bin("--version")
-    assert_output "Redcarpet #{Redcarpet::VERSION}"
-  end
-
-  def test_legacy_option_parsing
-    run_bin("--parse-highlight", "--render-no-links", @fixture_path)
-
-    assert_output "<mark>"
-    refute_output "=="
-
-    assert_output "[link]"
-    refute_output "</a>"
-  end
-
-  private
-
-  def run_bin(*args)
-    bin_path = File.expand_path('../../bin/redcarpet', __FILE__)
-    ruby = RbConfig.ruby
-    IO.popen("#{ruby} #{bin_path} #{args.join(" ")}") do |stream|
-      @output = stream.read
-    end
-  end
-
-  def assert_output(pattern)
-    assert_match pattern, @output
-  end
-
-  def refute_output(pattern)
-    refute_match Regexp.new(pattern), @output
-  end
-end
diff --git a/test/redcarpet_compat_test.rb b/test/redcarpet_compat_test.rb
deleted file mode 100644
index b530527..0000000
--- a/test/redcarpet_compat_test.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class RedcarpetCompatTest < Redcarpet::TestCase
-  def test_simple_compat_api
-    html = RedcarpetCompat.new("This is_just_a test").to_html
-    assert_equal "<p>This is<em>just</em>a test</p>\n", html
-  end
-
-  def test_compat_api_enables_extensions
-    html = RedcarpetCompat.new("This is_just_a test", :no_intra_emphasis).to_html
-    assert_equal "<p>This is_just_a test</p>\n", html
-  end
-
-  def test_compat_api_knows_fenced_code_extension
-    text = "```ruby\nx = 'foo'\n```"
-    html = RedcarpetCompat.new(text, :fenced_code).to_html
-    assert_equal "<pre><code class=\"ruby\">x = &#39;foo&#39;\n</code></pre>\n", html
-  end
-
-  def test_compat_api_ignores_gh_blockcode_extension
-    text = "```ruby\nx = 'foo'\n```"
-    html = RedcarpetCompat.new(text, :fenced_code, :gh_blockcode).to_html
-    assert_equal "<pre><code class=\"ruby\">x = &#39;foo&#39;\n</code></pre>\n", html
-  end
-
-  def test_compat_api_knows_no_intraemphasis_extension
-    html = RedcarpetCompat.new("This is_just_a test", :no_intraemphasis).to_html
-    assert_equal "<p>This is_just_a test</p>\n", html
-  end
-
-  def test_translate_outdated_extensions
-    # these extensions are no longer used
-    exts = [:gh_blockcode, :no_tables, :smart, :strict]
-    html = RedcarpetCompat.new('"TEST"', *exts).to_html
-    assert_equal "<p>&quot;TEST&quot;</p>\n", html
-  end
-end
diff --git a/test/safe_render_test.rb b/test/safe_render_test.rb
deleted file mode 100644
index b4cbd65..0000000
--- a/test/safe_render_test.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'test_helper'
-
-class SafeRenderTest < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::Safe
-  end
-
-  def test_safe_links_only_is_enabled_by_default
-    markdown = "[foo](javascript:alert('foo'))"
-    output   = render(markdown)
-
-    assert_not_match %r{a href}, output
-  end
-
-  def test_escape_html_is_enabled_by_default
-    markdown = "<p>Hello world!</p>"
-    output   = render(markdown)
-
-    assert_match %r{&lt;}, output
-  end
-
-  def test_html_escaping_in_code_blocks
-    markdown = "~~~\n<p>Hello!</p>\n~~~"
-    output   = render(markdown)
-
-    assert_match %r{&lt;p&gt;}, output
-  end
-
-  def test_lang_class_is_removed
-    markdown = "~~~ruby\nclass Foo; end\n~~~"
-    output   = render(markdown, with: [:fenced_code_blocks])
-
-    assert_not_match %r{ruby}, output
-  end
-end
diff --git a/test/smarty_html_test.rb b/test/smarty_html_test.rb
deleted file mode 100644
index e550262..0000000
--- a/test/smarty_html_test.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class SmartyHTMLTest < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::SmartyHTML
-  end
-
-  def test_that_smartyhtml_converts_single_quotes
-    markdown = render("They're not for sale.")
-    assert_equal "<p>They&rsquo;re not for sale.</p>", markdown
-  end
-
-  def test_that_smartyhtml_converts_double_quotes
-    rd = render(%("Quoted text"))
-    assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>), rd
-  end
-
-  def test_that_smartyhtml_converts_double_hyphen
-    rd = render("double hyphen -- ndash")
-    assert_equal "<p>double hyphen &ndash; ndash</p>", rd
-  end
-
-  def test_that_smartyhtml_converts_triple_hyphen
-    rd = render("triple hyphen --- mdash")
-    assert_equal "<p>triple hyphen &mdash; mdash</p>", rd
-  end
-
-  def test_that_smartyhtml_ignores_double_hyphen_in_code
-    rd = render("double hyphen in `--option`")
-    assert_equal "<p>double hyphen in <code>--option</code></p>", rd
-  end
-
-  def test_that_smartyhtml_ignores_pre
-    rd = render("    It's a test of \"pre\"\n")
-    expected = "It&#39;s a test of &quot;pre&quot;"
-    assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
-  end
-
-  def test_that_smartyhtml_ignores_code
-    rd = render("`It's a test of \"code\"`\n")
-    expected = "It&#39;s a test of &quot;code&quot;"
-    assert rd.include?(expected), "\"#{rd}\" should contain \"#{expected}\""
-  end
-
-  def test_that_smartyhtml_ignores_links_for_single_quotes
-    output = render("[John](link)'s cat")
-    expected = %(<p><a href="link">John</a>&rsquo;s cat</p>)
-    assert_equal expected, output
-  end
-end
diff --git a/test/smarty_pants_test.rb b/test/smarty_pants_test.rb
deleted file mode 100644
index 307d29a..0000000
--- a/test/smarty_pants_test.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class SmartyPantsTest < Redcarpet::TestCase
-  def setup
-    @pants = Redcarpet::Render::SmartyPants
-  end
-
-  def test_that_smart_converts_single_quotes_in_words_that_end_in_re
-    markdown = @pants.render("<p>They're not for sale.</p>")
-    assert_equal "<p>They&rsquo;re not for sale.</p>", markdown
-  end
-
-  def test_that_smart_converts_single_quotes_in_words_that_end_in_ll
-    markdown = @pants.render("<p>Well that'll be the day</p>")
-    assert_equal "<p>Well that&rsquo;ll be the day</p>", markdown
-  end
-
-  def test_that_smart_converts_double_quotes_to_curly_quotes
-    rd = @pants.render(%(<p>"Quoted text"</p>))
-    assert_equal %(<p>&ldquo;Quoted text&rdquo;</p>), rd
-  end
-
-  def test_that_smart_gives_ve_suffix_a_rsquo
-    rd = @pants.render("<p>I've been meaning to tell you ..</p>")
-    assert_equal "<p>I&rsquo;ve been meaning to tell you ..</p>", rd
-  end
-
-  def test_that_smart_gives_m_suffix_a_rsquo
-    rd = @pants.render("<p>I'm not kidding</p>")
-    assert_equal "<p>I&rsquo;m not kidding</p>", rd
-  end
-
-  def test_that_smart_gives_d_suffix_a_rsquo
-    rd = @pants.render("<p>what'd you say?</p>")
-    assert_equal "<p>what&rsquo;d you say?</p>", rd
-  end
-
-  def test_that_backticks_are_preserved
-    rd = @pants.render("<p>single `backticks` in HTML should be preserved</p>")
-    assert_equal "<p>single `backticks` in HTML should be preserved</p>", rd
-  end
-
-  def test_that_smart_converts_trailing_single_quotes_to_curly_quotes
-    rd = @pants.render("<p>Hopin' that this bug gets some fixin'.</p>")
-    assert_equal "<p>Hopin&rsquo; that this bug gets some fixin&rsquo;.</p>", rd
-  end
-
-  def test_that_is_not_confused_by_fractions
-    rd = @pants.render('I am 1/4... of the way to 1/4/2000')
-    assert_equal "I am &frac14;&hellip; of the way to 1/4/2000", rd
-  end
-
-  def test_that_smart_converts_multiple_single_quotes
-    rd = @pants.render(%(<p>'First' and 'second' and 'third'</p>))
-    assert_equal %(<p>&lsquo;First&rsquo; and &lsquo;second&rsquo; and &lsquo;third&rsquo;</p>), rd
-  end
-end
diff --git a/test/stripdown_render_test.rb b/test/stripdown_render_test.rb
deleted file mode 100644
index 53313a0..0000000
--- a/test/stripdown_render_test.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-# coding: UTF-8
-require 'test_helper'
-
-class StripDownRender < Redcarpet::TestCase
-  def setup
-    @renderer = Redcarpet::Render::StripDown
-  end
-
-  def test_titles
-    markdown = "# Foo bar"
-    output   = render(markdown)
-
-    assert_equal "Foo bar", output
-  end
-
-  def test_code_blocks
-    markdown = "\tclass Foo\n\tend"
-    output   = render(markdown)
-
-    assert_equal "class Foo\nend", output
-  end
-
-  def test_images
-    markdown = "Look at this ![picture](http://example.org/picture.png)\n" \
-               "And this: ![](http://example.org/image.jpg)"
-    expected = "Look at this picture http://example.org/picture.png\n" \
-               "And this: http://example.org/image.jpg"
-    output   = render(markdown)
-
-    assert_equal expected, output
-  end
-
-  def test_links
-    markdown = "Here's an [example](https://github.com)"
-    expected = "Here's an example (https://github.com)"
-    output   = render(markdown)
-
-    assert_equal expected, output
-  end
-
-  def test_tables
-    markdown = "| Left-Aligned  | Centre Aligned  | Right Aligned |\n" \
-               "| :------------ |:---------------:| -----:|\n" \
-               "| col 3 is      | some wordy text | $1600 |\n" \
-               "| col 2 is      | centered        |   $12 |"
-    expected = "Left-Aligned\tCentre Aligned\tRight Aligned\t\n" \
-               "col 3 is\tsome wordy text\t$1600\t\n" \
-               "col 2 is\tcentered\t$12\t"
-    output   = render(markdown, with: [:tables])
-
-    assert_equal expected, output
-  end
-
-  def test_highlight
-    markdown = "==Hello world!=="
-    expected = "Hello world!"
-    output   = render(markdown, with: [:highlight])
-
-    assert_equal expected, output
-  end
-
-  def test_with_quote_option_enabled
-    markdown = %(A common idiom is "Hello world")
-    expected = %(A common idiom is Hello world)
-    output   = render(markdown, with: [:quote])
-
-    assert_equal expected, output
-  end
-end
diff --git a/test/test_helper.rb b/test/test_helper.rb
deleted file mode 100644
index 5b71e8d..0000000
--- a/test/test_helper.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# coding: UTF-8
-$:.unshift(File.expand_path('../../lib', __FILE__))
-Encoding.default_internal = 'UTF-8'
-
-require 'test/unit'
-
-require 'redcarpet'
-require 'redcarpet/render_strip'
-require 'redcarpet/render_man'
-
-class Redcarpet::TestCase < Test::Unit::TestCase
-  def assert_renders(html, markdown)
-    assert_equal html, render(markdown)
-  end
-
-  def render(markdown, options = {})
-    options = options.fetch(:with, {})
-
-    if options.kind_of?(Array)
-      options = Hash[options.map {|o| [o, true]}]
-    end
-
-    render = begin
-      renderer.new(options)
-    rescue ArgumentError
-      renderer.new
-    end
-
-    parser = Redcarpet::Markdown.new(render, options)
-
-    parser.render(markdown).chomp
-  end
-
-  private
-
-  def renderer
-    @renderer ||= Redcarpet::Render::HTML
-  end
-
-  # Imported from Active Support
-  class ::String
-    def strip_heredoc
-      indent = scan(/^ *(?=\S)/).min.size || 0
-      gsub(/^[ \t]{#{indent}}/, '')
-    end
-  end
-end

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/ea/734a46748bf0f56eab11c74e653fb76cfdfc86.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.6.0/gem.build_complete
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.6.0/redcarpet.so
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/lib/redcarpet.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/lib/redcarpet/cli.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/lib/redcarpet/compat.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/lib/redcarpet/render_man.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/lib/redcarpet/render_strip.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/specifications/redcarpet-3.6.0.gemspec
-rw-r--r--  root/root   /usr/share/doc/ruby-redcarpet/changelog.gz
-rwxr-xr-x  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.6.0/bin/redcarpet

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/89/0c8c5a2780b874165aaa4882f1db300b5892c3.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/89/0fb7425a8a2ebccf4f1a9e60d561d4bc0a642e.debug
-rw-r--r--  root/root   /usr/lib/debug/.dwz/x86_64-linux-gnu/ruby-redcarpet.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/extensions/x86_64-linux/3.0.0/redcarpet-3.5.1/gem.build_complete
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/extensions/x86_64-linux/3.0.0/redcarpet-3.5.1/redcarpet.so
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/lib/redcarpet.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/lib/redcarpet/cli.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/lib/redcarpet/compat.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/lib/redcarpet/render_man.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/lib/redcarpet/render_strip.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/specifications/redcarpet-3.5.1.gemspec
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem.build_complete
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/redcarpet.so
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/lib/redcarpet.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/lib/redcarpet/cli.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/lib/redcarpet/compat.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/lib/redcarpet/render_man.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/lib/redcarpet/render_strip.rb
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/specifications/redcarpet-3.5.1.gemspec
-rwxr-xr-x  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.0.0/gems/redcarpet-3.5.1/bin/redcarpet
-rwxr-xr-x  root/root   /usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/gems/redcarpet-3.5.1/bin/redcarpet

Control files of package ruby-redcarpet: lines which differ (wdiff format)

  • Depends: ruby, libc6 (>= 2.14), libruby3.0 (>= 3.0.0~preview1) | libruby3.1 (>= 3.1.2), libruby (>= 1:3.0~0) | libruby (>= 1:3.1~0), libruby (<< 1:3.2~)
  • Ruby-Versions: ruby3.0 ruby3.1

Control files of package ruby-redcarpet-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 890c8c5a2780b874165aaa4882f1db300b5892c3 890fb7425a8a2ebccf4f1a9e60d561d4bc0a642e ea734a46748bf0f56eab11c74e653fb76cfdfc86
  • Ruby-Versions: ruby3.0 ruby3.1

More details

Full run details