diff --git a/doc/rdoc/markup_reference.rb b/doc/rdoc/markup_reference.rb
index b3d1d97f4f61be..c7578f3581107f 100644
--- a/doc/rdoc/markup_reference.rb
+++ b/doc/rdoc/markup_reference.rb
@@ -29,16 +29,37 @@
# see :nodoc:, :doc:, and :notnew.
# - \RDoc directives in single-line comments;
# see other {Directives}[rdoc-ref:RDoc::MarkupReference@Directives].
-# - The Ruby code itself;
-# see {Documentation Derived from Ruby Code}[rdoc-ref:RDoc::MarkupReference@Documentation+Derived+from+Ruby+Code]
+# - The Ruby code itself (but not from C code);
+# see {Documentation Derived from Ruby Code}[rdoc-ref:RDoc::MarkupReference@Documentation+Derived+from+Ruby+Code].
#
# == Markup in Comments
#
-# A single-line or multi-line comment that immediately precedes
-# the definition of a class, module, method, alias, constant, or attribute
-# becomes the documentation for that defined object.
+# The treatment of markup in comments varies according to the type of file:
#
-# (\RDoc ignores other such comments that do not precede definitions.)
+# - .rb (Ruby code file): markup is parsed from Ruby comments.
+# - .c (C code file): markup is parsed from C comments.
+# - .rdoc (RDoc text file): markup is parsed from the entire file.
+#
+# The comment associated with
+# a Ruby class, module, method, alias, constant, or attribute
+# becomes the documentation for that defined object:
+#
+# - In a Ruby file, that comment immediately precedes
+# the definition of the object.
+# - In a C file, that comment immediately precedes
+# the function that implements a method,
+# or otherwise immediately precedes the definition of the object.
+#
+# In either a Ruby or a C file,
+# \RDoc ignores comments that do not precede object definitions.
+#
+# In an \RDoc file, the text is not associated with any code object,
+# but may (depending on how the documentation is built),
+# become a separate page.
+#
+# Almost all examples on this page are all RDoc-like;
+# that is, they have no comment markers like Ruby #
+# or C /* ... */.
#
# === Margins
#
@@ -96,11 +117,11 @@
#
# Example input:
#
-# # \RDoc produces HTML and command-line documentation for Ruby projects.
-# # \RDoc includes the rdoc and ri tools for generating and displaying
-# # documentation from the command-line.
-# #
-# # You'll love it.
+# \RDoc produces HTML and command-line documentation for Ruby projects.
+# \RDoc includes the rdoc and ri tools for generating and displaying
+# documentation from the command-line.
+#
+# You'll love it.
#
# Rendered HTML:
# >>>
@@ -133,15 +154,15 @@
#
# Example input:
#
-# # This is not verbatim text.
-# #
-# # This is verbatim text.
-# # Whitespace is honored. # See?
-# # Whitespace is honored. # See?
-# #
-# # This is still the same verbatim text block.
-# #
-# # This is not verbatim text.
+# This is not verbatim text.
+#
+# This is verbatim text.
+# Whitespace is honored. # See?
+# Whitespace is honored. # See?
+#
+# This is still the same verbatim text block.
+#
+# This is not verbatim text.
#
# Rendered HTML:
# >>>
@@ -279,13 +300,13 @@
#
# Example input:
#
-# # - An item.
-# # - Another.
-# # - An item spanning
-# # multiple lines.
-# #
-# # * Yet another.
-# # - Last one.
+# - An item.
+# - Another.
+# - An item spanning
+# multiple lines.
+#
+# * Yet another.
+# - Last one.
#
# Rendered HTML:
# >>>
@@ -305,13 +326,13 @@
#
# Example input:
#
-# # 100. An item.
-# # 10. Another.
-# # 1. An item spanning
-# # multiple lines.
-# #
-# # 1. Yet another.
-# # 1000. Last one.
+# 100. An item.
+# 10. Another.
+# 1. An item spanning
+# multiple lines.
+#
+# 1. Yet another.
+# 1000. Last one.
#
# Rendered HTML:
# >>>
@@ -331,13 +352,13 @@
#
# Example input:
#
-# # z. An item.
-# # y. Another.
-# # x. An item spanning
-# # multiple lines.
-# #
-# # x. Yet another.
-# # a. Last one.
+# z. An item.
+# y. Another.
+# x. An item spanning
+# multiple lines.
+#
+# x. Yet another.
+# a. Last one.
#
# Rendered HTML:
# >>>
@@ -356,13 +377,13 @@
#
# Example input:
#
-# # [foo] An item.
-# # bat:: Another.
-# # [bag] An item spanning
-# # multiple lines.
-# #
-# # [bar baz] Yet another.
-# # bam:: Last one.
+# [foo] An item.
+# bat:: Another.
+# [bag] An item spanning
+# multiple lines.
+#
+# [bar baz] Yet another.
+# bam:: Last one.
#
# Rendered HTML:
# >>>
@@ -381,20 +402,20 @@
#
# Examples:
#
-# # = Section 1
-# # == Section 1.1
-# # === Section 1.1.1
-# # === Section 1.1.2
-# # == Section 1.2
-# # = Section 2
-# # = Foo
-# # == Bar
-# # === Baz
-# # ==== Bam
-# # ===== Bat
-# # ====== Bad
-# # ============Still a Heading (Level 6)
-# # \== Not a Heading
+# = Section 1
+# == Section 1.1
+# === Section 1.1.1
+# === Section 1.1.2
+# == Section 1.2
+# = Section 2
+# = Foo
+# == Bar
+# === Baz
+# ==== Bam
+# ===== Bat
+# ====== Bad
+# ============Still a Heading (Level 6)
+# \== Not a Heading
#
# A heading may contain only one type of nested block:
#
@@ -628,27 +649,27 @@
#
# Example input:
#
-# Two words in a paragraph.
+# Italicized words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Italicized words in a block quote.
#
-# - Two words in a bullet list item.
+# - Italicized words in a list item.
#
-# ====== Two words in a Heading
+# ====== Italicized words in a Heading
#
# Italicized passage containing *bold* and +monofont+.
#
# Rendered HTML:
# >>>
-# Two words in a paragraph.
+# Italicized words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Italicized words in a block quote.
#
-# - Two words in a bullet list item.
+# - Italicized words in a list item.
#
-# ====== Two words in a Heading
+# ====== Italicized words in a Heading
#
# Italicized passage containing *bold* and +monofont+.
#
@@ -657,29 +678,25 @@
#
# Example input:
#
-# _Word_ in a paragraph.
+# _Italic_ in a paragraph.
#
# >>>
-# _Word_ in a block quote.
-#
-# - _Word_ in a bullet list item.
+# _Italic_ in a block quote.
#
-# [_word_] _Word_ in a labeled list item.
+# - _Italic_ in a list item.
#
-# ====== _Word_ in a Heading
+# ====== _Italic_ in a Heading
#
# Rendered HTML:
# >>>
-# _Word_ in a paragraph.
+# _Italic_ in a paragraph.
#
# >>>
-# _Word_ in a block quote.
+# _Italic_ in a block quote.
#
-# - _Word_ in a bullet list item.
+# - _Italic_ in a list item.
#
-# [_word_] _Word_ in a labeled list item.
-#
-# ====== _Word_ in a Heading
+# ====== _Italic_ in a Heading
#
# ===== Bold
#
@@ -687,28 +704,28 @@
#
# Example input:
#
-# Two words in a paragraph.
+# Bold words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Bold words in a block quote.
#
-# - Two words in a bullet list item.
+# - Bold words in a list item.
#
-# ====== Two words in a Heading
+# ====== Bold words in a Heading
#
# Bold passage containing _italics_ and +monofont+.
#
# Rendered HTML:
#
# >>>
-# Two words in a paragraph.
+# Bold words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Bold words in a block quote.
#
-# - Two words in a bullet list item.
+# - Bold words in a list item.
#
-# ====== Two words in a Heading
+# ====== Bold words in a Heading
#
# Bold passage containing _italics_ and +monofont+.
#
@@ -717,30 +734,26 @@
#
# Example input:
#
-# *Word* in a paragraph.
+# *Bold* in a paragraph.
#
# >>>
-# *Word* in a block quote.
-#
-# - *Word* in a bullet list item.
+# *Bold* in a block quote.
#
-# [*word*] *Word* in a labeled list item.
+# - *Bold* in a list item.
#
-# ===== *Word* in a Heading
+# ===== *Bold* in a Heading
#
# Rendered HTML:
#
# >>>
-# *Word* in a paragraph.
+# *Bold* in a paragraph.
#
# >>>
-# *Word* in a block quote.
-#
-# - *Word* in a bullet list item.
+# *Bold* in a block quote.
#
-# [*word*] *Word* in a labeled list item.
+# - *Bold* in a list item.
#
-# ===== *Word* in a Heading
+# ===== *Bold* in a Heading
#
# ===== Monofont
#
@@ -750,28 +763,28 @@
#
# Example input:
#
-# Two words in a paragraph.
+# Monofont words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Monofont words in a block quote.
#
-# - Two words in a bullet list item.
+# - Monofont words in a list item.
#
-# ====== Two words in heading
+# ====== Monofont words in heading
#
# Monofont passage containing _italics_ and *bold*.
#
# Rendered HTML:
#
# >>>
-# Two words in a paragraph.
+# Monofont words in a paragraph.
#
# >>>
-# Two words in a block quote.
+# Monofont words in a block quote.
#
-# - Two words in a bullet list item.
+# - Monofont words in a list item.
#
-# ====== Two words in heading
+# ====== Monofont words in heading
#
# Monofont passage containing _italics_ and *bold*.
#
@@ -780,26 +793,26 @@
#
# Example input:
#
-# +Word+ in a paragraph.
+# +Monofont+ in a paragraph.
#
# >>>
-# +Word+ in a block quote.
+# +Monofont+ in a block quote.
#
-# - +Word+ in a bullet list item.
+# - +Monofont+ in a list item.
#
-# ====== +Word+ in a Heading
+# ====== +Monofont+ in a Heading
#
# Rendered HTML:
#
# >>>
-# +Word+ in a paragraph.
+# +Monofont+ in a paragraph.
#
# >>>
-# +Word+ in a block quote.
+# +Monofont+ in a block quote.
#
-# - +Word+ in a bullet list item.
+# - +Monofont+ in a list item.
#
-# ====== +Word+ in a Heading
+# ====== +Monofont+ in a Heading
#
# ==== Escaping Text Markup
#
@@ -1147,10 +1160,10 @@ def dummy_instance_method(foo, bar); end;
#
# Here is the :call-seq: directive given for the method:
#
- # # :call-seq:
- # # call_seq_directive(foo, bar)
- # # Can be anything -> bar
- # # Also anything more -> baz or bat
+ # :call-seq:
+ # call_seq_directive(foo, bar)
+ # Can be anything -> bar
+ # Also anything more -> baz or bat
#
def call_seq_directive
nil
diff --git a/string.c b/string.c
index 85819e26a393a3..e74783cf923652 100644
--- a/string.c
+++ b/string.c
@@ -6777,7 +6777,15 @@ rb_str_inspect(VALUE str)
prev = p;
continue;
}
- if ((enc == resenc && rb_enc_isprint(c, enc)) ||
+ /* The special casing of 0x85 (NEXT_LINE) here is because
+ * Oniguruma historically treats it as printable, but it
+ * doesn't match the print POSIX bracket class or character
+ * property in regexps.
+ *
+ * See Ruby Bug #16842 for details:
+ * https://bugs.ruby-lang.org/issues/16842
+ */
+ if ((enc == resenc && rb_enc_isprint(c, enc) && c != 0x85) ||
(asciicompat && rb_enc_isascii(c, enc) && ISPRINT(c))) {
continue;
}
diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb
index d37924dec1904e..ab14a3c17bb7f2 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -2614,6 +2614,11 @@ def test_inspect_nul
assert_equal '"\x0012"', s.inspect, bug8290
end
+ def test_inspect_next_line
+ bug16842 = '[ruby-core:98231]'
+ assert_equal '"\\u0085"', 0x85.chr(Encoding::UTF_8).inspect, bug16842
+ end
+
def test_partition
assert_equal(%w(he l lo), S("hello").partition(/l/))
assert_equal(%w(he l lo), S("hello").partition("l"))
diff --git a/version.h b/version.h
index 780a93e8dcc0de..1b561623e94b58 100644
--- a/version.h
+++ b/version.h
@@ -15,7 +15,7 @@
#define RUBY_RELEASE_YEAR 2022
#define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 11
+#define RUBY_RELEASE_DAY 12
#include "ruby/version.h"
#include "ruby/internal/abi.h"