[DOC] Adjust heading levels

So that the first headings would be the top-most headings.
This commit is contained in:
Nobuyoshi Nakada 2023-11-14 15:39:10 +09:00
parent caa9881fde
commit 19a7a7660c
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
12 changed files with 177 additions and 177 deletions

View File

@ -1,4 +1,4 @@
== Binary Searching
= Binary Searching
A few Ruby methods support binary searching in a collection:

View File

@ -1,4 +1,4 @@
== Case Mapping
= Case Mapping
Some string-oriented methods use case mapping.
@ -24,7 +24,7 @@ In Symbol:
- Symbol#swapcase
- Symbol#upcase
=== Default Case Mapping
== Default Case Mapping
By default, all of these methods use full Unicode case mapping,
which is suitable for most languages.
@ -60,7 +60,7 @@ Case changes may not be reversible:
Case changing methods may not maintain Unicode normalization.
See String#unicode_normalize).
=== Options for Case Mapping
== Options for Case Mapping
Except for +casecmp+ and +casecmp?+,
each of the case-mapping methods listed above

View File

@ -1,6 +1,6 @@
== Character Selectors
= Character Selectors
=== Character Selector
== Character Selector
A _character_ _selector_ is a string argument accepted by certain Ruby methods.
Each of these instance methods accepts one or more character selectors:
@ -70,7 +70,7 @@ In a character selector, these three characters get special treatment:
"hello\r\nworld".delete("\\r") # => "hello\r\nwold"
"hello\r\nworld".delete("\\\r") # => "hello\nworld"
=== Multiple Character Selectors
== Multiple Character Selectors
These instance methods accept multiple character selectors:

View File

@ -1,4 +1,4 @@
== Command Injection
= Command Injection
Some Ruby core methods accept string data
that includes text to be executed as a system command.

View File

@ -1,6 +1,6 @@
== Encodings
= Encodings
=== The Basics
== The Basics
A {character encoding}[https://en.wikipedia.org/wiki/Character_encoding],
often shortened to _encoding_, is a mapping between:
@ -30,9 +30,9 @@ Other characters, such as the Euro symbol, are multi-byte:
s = "\u20ac" # => "€"
s.bytes # => [226, 130, 172]
=== The \Encoding \Class
== The \Encoding \Class
==== \Encoding Objects
=== \Encoding Objects
Ruby encodings are defined by constants in class \Encoding.
There can be only one instance of \Encoding for each of these constants.
@ -43,7 +43,7 @@ There can be only one instance of \Encoding for each of these constants.
Encoding.list.take(3)
# => [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>]
==== Names and Aliases
=== Names and Aliases
\Method Encoding#name returns the name of an \Encoding:
@ -78,7 +78,7 @@ because it includes both the names and their aliases.
Encoding.find("US-ASCII") # => #<Encoding:US-ASCII>
Encoding.find("US-ASCII").class # => Encoding
==== Default Encodings
=== Default Encodings
\Method Encoding.find, above, also returns a default \Encoding
for each of these special names:
@ -118,7 +118,7 @@ for each of these special names:
Encoding.default_internal = 'US-ASCII' # => "US-ASCII"
Encoding.default_internal # => #<Encoding:US-ASCII>
==== Compatible Encodings
=== Compatible Encodings
\Method Encoding.compatible? returns whether two given objects are encoding-compatible
(that is, whether they can be concatenated);
@ -132,7 +132,7 @@ returns the \Encoding of the concatenated string, or +nil+ if incompatible:
s1 = "\xa1\xa1".force_encoding('euc-jp') # => "\x{A1A1}"
Encoding.compatible?(s0, s1) # => nil
=== \String \Encoding
== \String \Encoding
A Ruby String object has an encoding that is an instance of class \Encoding.
The encoding may be retrieved by method String#encoding.
@ -183,7 +183,7 @@ Here are a couple of useful query methods:
s = "\xc2".force_encoding("UTF-8") # => "\xC2"
s.valid_encoding? # => false
=== \Symbol and \Regexp Encodings
== \Symbol and \Regexp Encodings
The string stored in a Symbol or Regexp object also has an encoding;
the encoding may be retrieved by method Symbol#encoding or Regexp#encoding.
@ -194,20 +194,20 @@ The default encoding for these, however, is:
- The script encoding, otherwise;
see (Script Encoding)[rdoc-ref:encodings.rdoc@Script+Encoding].
=== Filesystem \Encoding
== Filesystem \Encoding
The filesystem encoding is the default \Encoding for a string from the filesystem:
Encoding.find("filesystem") # => #<Encoding:UTF-8>
=== Locale \Encoding
== Locale \Encoding
The locale encoding is the default encoding for a string from the environment,
other than from the filesystem:
Encoding.find('locale') # => #<Encoding:IBM437>
=== Stream Encodings
== Stream Encodings
Certain stream objects can have two encodings; these objects include instances of:
@ -222,7 +222,7 @@ The two encodings are:
- An _internal_ _encoding_, which (if not +nil+) specifies the encoding
to be used for the string constructed from the stream.
==== External \Encoding
=== External \Encoding
The external encoding, which is an \Encoding object, specifies how bytes read
from the stream are to be interpreted as characters.
@ -250,7 +250,7 @@ For an \IO, \File, \ARGF, or \StringIO object, the external encoding may be set
- \Methods +set_encoding+ or (except for \ARGF) +set_encoding_by_bom+.
==== Internal \Encoding
=== Internal \Encoding
The internal encoding, which is an \Encoding object or +nil+,
specifies how characters read from the stream
@ -276,7 +276,7 @@ For an \IO, \File, \ARGF, or \StringIO object, the internal encoding may be set
- \Method +set_encoding+.
=== Script \Encoding
== Script \Encoding
A Ruby script has a script encoding, which may be retrieved by:
@ -291,7 +291,7 @@ followed by a colon, space and the Encoding name or alias:
# encoding: ISO-8859-1
__ENCODING__ #=> #<Encoding:ISO-8859-1>
=== Transcoding
== Transcoding
_Transcoding_ is the process of changing a sequence of characters
from one encoding to another.
@ -302,7 +302,7 @@ but the bytes that represent them may change.
The handling for characters that cannot be represented in the destination encoding
may be specified by @Encoding+Options.
==== Transcoding a \String
=== Transcoding a \String
Each of these methods transcodes a string:
@ -317,7 +317,7 @@ Each of these methods transcodes a string:
- String#unicode_normalize!: Like String#unicode_normalize,
but transcodes +self+ in place.
=== Transcoding a Stream
== Transcoding a Stream
Each of these methods may transcode a stream;
whether it does so depends on the external and internal encodings:
@ -352,7 +352,7 @@ Output:
"R\xE9sum\xE9"
"Résumé"
=== \Encoding Options
== \Encoding Options
A number of methods in the Ruby core accept keyword arguments as encoding options.

View File

@ -1,4 +1,4 @@
== Format Specifications
= Format Specifications
Several Ruby core classes have instance method +printf+ or +sprintf+:
@ -37,12 +37,12 @@ It consists of:
Except for the leading percent character,
the only required part is the type specifier, so we begin with that.
=== Type Specifiers
== Type Specifiers
This section provides a brief explanation of each type specifier.
The links lead to the details and examples.
==== \Integer Type Specifiers
=== \Integer Type Specifiers
- +b+ or +B+: Format +argument+ as a binary integer.
See {Specifiers b and B}[rdoc-ref:format_specifications.rdoc@Specifiers+b+and+B].
@ -54,7 +54,7 @@ The links lead to the details and examples.
- +x+ or +X+: Format +argument+ as a hexadecimal integer.
See {Specifiers x and X}[rdoc-ref:format_specifications.rdoc@Specifiers+x+and+X].
==== Floating-Point Type Specifiers
=== Floating-Point Type Specifiers
- +a+ or +A+: Format +argument+ as hexadecimal floating-point number.
See {Specifiers a and A}[rdoc-ref:format_specifications.rdoc@Specifiers+a+and+A].
@ -65,7 +65,7 @@ The links lead to the details and examples.
- +g+ or +G+: Format +argument+ in a "general" format.
See {Specifiers g and G}[rdoc-ref:format_specifications.rdoc@Specifiers+g+and+G].
==== Other Type Specifiers
=== Other Type Specifiers
- +c+: Format +argument+ as a character.
See {Specifier c}[rdoc-ref:format_specifications.rdoc@Specifier+c].
@ -76,7 +76,7 @@ The links lead to the details and examples.
- <tt>%</tt>: Format +argument+ (<tt>'%'</tt>) as a single percent character.
See {Specifier %}[rdoc-ref:format_specifications.rdoc@Specifier+-25].
=== Flags
== Flags
The effect of a flag may vary greatly among type specifiers.
These remarks are general in nature.
@ -85,7 +85,7 @@ See {type-specific details}[rdoc-ref:format_specifications.rdoc@Type+Specifier+D
Multiple flags may be given with single type specifier;
order does not matter.
==== <tt>' '</tt> Flag
=== <tt>' '</tt> Flag
Insert a space before a non-negative number:
@ -97,49 +97,49 @@ Insert a minus sign for negative value:
sprintf('%d', -10) # => "-10"
sprintf('% d', -10) # => "-10"
==== <tt>'#'</tt> Flag
=== <tt>'#'</tt> Flag
Use an alternate format; varies among types:
sprintf('%x', 100) # => "64"
sprintf('%#x', 100) # => "0x64"
==== <tt>'+'</tt> Flag
=== <tt>'+'</tt> Flag
Add a leading plus sign for a non-negative number:
sprintf('%x', 100) # => "64"
sprintf('%+x', 100) # => "+64"
==== <tt>'-'</tt> Flag
=== <tt>'-'</tt> Flag
Left justify the value in its field:
sprintf('%6d', 100) # => " 100"
sprintf('%-6d', 100) # => "100 "
==== <tt>'0'</tt> Flag
=== <tt>'0'</tt> Flag
Left-pad with zeros instead of spaces:
sprintf('%6d', 100) # => " 100"
sprintf('%06d', 100) # => "000100"
==== <tt>'*'</tt> Flag
=== <tt>'*'</tt> Flag
Use the next argument as the field width:
sprintf('%d', 20, 14) # => "20"
sprintf('%*d', 20, 14) # => " 14"
==== <tt>'n$'</tt> Flag
=== <tt>'n$'</tt> Flag
Format the (1-based) <tt>n</tt>th argument into this field:
sprintf("%s %s", 'world', 'hello') # => "world hello"
sprintf("%2$s %1$s", 'world', 'hello') # => "hello world"
=== Width Specifier
== Width Specifier
In general, a width specifier determines the minimum width (in characters)
of the formatted field:
@ -152,7 +152,7 @@ of the formatted field:
# Ignore if too small.
sprintf('%1d', 100) # => "100"
=== Precision Specifier
== Precision Specifier
A precision specifier is a decimal point followed by zero or more
decimal digits.
@ -194,9 +194,9 @@ the number of characters to write:
sprintf('%s', Time.now) # => "2022-05-04 11:59:16 -0400"
sprintf('%.10s', Time.now) # => "2022-05-04"
=== Type Specifier Details and Examples
== Type Specifier Details and Examples
==== Specifiers +a+ and +A+
=== Specifiers +a+ and +A+
Format +argument+ as hexadecimal floating-point number:
@ -209,7 +209,7 @@ Format +argument+ as hexadecimal floating-point number:
sprintf('%A', 4096) # => "0X1P+12"
sprintf('%A', -4096) # => "-0X1P+12"
==== Specifiers +b+ and +B+
=== Specifiers +b+ and +B+
The two specifiers +b+ and +B+ behave identically
except when flag <tt>'#'</tt>+ is used.
@ -226,14 +226,14 @@ Format +argument+ as a binary integer:
sprintf('%#b', 4) # => "0b100"
sprintf('%#B', 4) # => "0B100"
==== Specifier +c+
=== Specifier +c+
Format +argument+ as a single character:
sprintf('%c', 'A') # => "A"
sprintf('%c', 65) # => "A"
==== Specifier +d+
=== Specifier +d+
Format +argument+ as a decimal integer:
@ -242,7 +242,7 @@ Format +argument+ as a decimal integer:
Flag <tt>'#'</tt> does not apply.
==== Specifiers +e+ and +E+
=== Specifiers +e+ and +E+
Format +argument+ in
{scientific notation}[https://en.wikipedia.org/wiki/Scientific_notation]:
@ -250,7 +250,7 @@ Format +argument+ in
sprintf('%e', 3.14159) # => "3.141590e+00"
sprintf('%E', -3.14159) # => "-3.141590E+00"
==== Specifier +f+
=== Specifier +f+
Format +argument+ as a floating-point number:
@ -259,7 +259,7 @@ Format +argument+ as a floating-point number:
Flag <tt>'#'</tt> does not apply.
==== Specifiers +g+ and +G+
=== Specifiers +g+ and +G+
Format +argument+ using exponential form (+e+/+E+ specifier)
if the exponent is less than -4 or greater than or equal to the precision.
@ -281,7 +281,7 @@ Otherwise format +argument+ using floating-point form (+f+ specifier):
sprintf('%#G', 100000000000) # => "1.00000E+11"
sprintf('%#G', 0.000000000001) # => "1.00000E-12"
==== Specifier +o+
=== Specifier +o+
Format +argument+ as an octal integer.
If +argument+ is negative, it will be formatted as a two's complement
@ -296,14 +296,14 @@ prefixed with +..7+:
sprintf('%#o', 16) # => "020"
sprintf('%#o', -16) # => "..760"
==== Specifier +p+
=== Specifier +p+
Format +argument+ as a string via <tt>argument.inspect</tt>:
t = Time.now
sprintf('%p', t) # => "2022-05-01 13:42:07.1645683 -0500"
==== Specifier +s+
=== Specifier +s+
Format +argument+ as a string via <tt>argument.to_s</tt>:
@ -312,7 +312,7 @@ Format +argument+ as a string via <tt>argument.to_s</tt>:
Flag <tt>'#'</tt> does not apply.
==== Specifiers +x+ and +X+
=== Specifiers +x+ and +X+
Format +argument+ as a hexadecimal integer.
If +argument+ is negative, it will be formatted as a two's complement
@ -329,7 +329,7 @@ prefixed with +..f+:
# Alternate format for negative value.
sprintf('%#x', -100) # => "0x..f9c"
==== Specifier <tt>%</tt>
=== Specifier <tt>%</tt>
Format +argument+ (<tt>'%'</tt>) as a single percent character:
@ -337,7 +337,7 @@ Format +argument+ (<tt>'%'</tt>) as a single percent character:
Flags do not apply.
=== Reference by Name
== Reference by Name
For more complex formatting, Ruby supports a reference by name.
%<name>s style uses format style, but %{name} style doesn't.

View File

@ -1,4 +1,4 @@
== Pre-Defined Global Variables
= Pre-Defined Global Variables
Some of the pre-defined global variables have synonyms
that are available via module Engish.
@ -8,9 +8,9 @@ To use the module:
require 'English'
=== Exceptions
== Exceptions
==== <tt>$!</tt> (\Exception)
=== <tt>$!</tt> (\Exception)
Contains the Exception object set by Kernel#raise:
@ -26,7 +26,7 @@ Output:
English - <tt>$ERROR_INFO</tt>
==== <tt>$@</tt> (Backtrace)
=== <tt>$@</tt> (Backtrace)
Same as <tt>$!.backtrace</tt>;
returns an array of backtrace positions:
@ -46,7 +46,7 @@ Output:
English - <tt>$ERROR_POSITION</tt>.
=== Pattern Matching
== Pattern Matching
These global variables store information about the most recent
successful match in the current scope.
@ -54,46 +54,46 @@ successful match in the current scope.
For details and examples,
see {Regexp Global Variables}[rdoc-ref:Regexp@Global+Variables].
==== <tt>$~</tt> (\MatchData)
=== <tt>$~</tt> (\MatchData)
MatchData object created from the match;
thread-local and frame-local.
English - <tt>$LAST_MATCH_INFO</tt>.
==== <tt>$&</tt> (Matched Substring)
=== <tt>$&</tt> (Matched Substring)
The matched string.
English - <tt>$MATCH</tt>.
==== <tt>$`</tt> (Pre-Match Substring)
=== <tt>$`</tt> (Pre-Match Substring)
The string to the left of the match.
English - <tt>$PREMATCH</tt>.
==== <tt>$'</tt> (Post-Match Substring)
=== <tt>$'</tt> (Post-Match Substring)
The string to the right of the match.
English - <tt>$POSTMATCH</tt>.
==== <tt>$+</tt> (Last Matched Group)
=== <tt>$+</tt> (Last Matched Group)
The last group matched.
English - <tt>$LAST_PAREN_MATCH</tt>.
==== <tt>$1</tt>, <tt>$2</tt>, \Etc. (Matched Group)
=== <tt>$1</tt>, <tt>$2</tt>, \Etc. (Matched Group)
For <tt>$_n_</tt> the _nth_ group of the match.
No \English.
=== Separators
== Separators
==== <tt>$/</tt> (Input Record Separator)
=== <tt>$/</tt> (Input Record Separator)
An input record separator, initially newline.
@ -101,7 +101,7 @@ English - <tt>$INPUT_RECORD_SEPARATOR</tt>, <tt>$RS</tt>.
Aliased as <tt>$-0</tt>.
==== <tt>$;</tt> (Input Field Separator)
=== <tt>$;</tt> (Input Field Separator)
An input field separator, initially +nil+.
@ -109,76 +109,76 @@ English - <tt>$FIELD_SEPARATOR</tt>, <tt>$FS</tt>.
Aliased as <tt>$-F</tt>.
==== <tt>$\\</tt> (Output Record Separator)
=== <tt>$\\</tt> (Output Record Separator)
An output record separator, initially +nil+.
English - <tt>$OUTPUT_RECORD_SEPARATOR</tt>, <tt>$ORS</tt>.
=== Streams
== Streams
==== <tt>$stdin</tt> (Standard Input)
=== <tt>$stdin</tt> (Standard Input)
The current standard input stream; initially:
$stdin # => #<IO:<STDIN>>
==== <tt>$stdout</tt> (Standard Output)
=== <tt>$stdout</tt> (Standard Output)
The current standard output stream; initially:
$stdout # => #<IO:<STDOUT>>
==== <tt>$stderr</tt> (Standard Error)
=== <tt>$stderr</tt> (Standard Error)
The current standard error stream; initially:
$stderr # => #<IO:<STDERR>>
==== <tt>$<</tt> (\ARGF or $stdin)
=== <tt>$<</tt> (\ARGF or $stdin)
Points to stream ARGF if not empty, else to stream $stdin; read-only.
English - <tt>$DEFAULT_INPUT</tt>.
==== <tt>$></tt> (Default Standard Output)
=== <tt>$></tt> (Default Standard Output)
An output stream, initially <tt>$stdout</tt>.
English - <tt>$DEFAULT_OUTPUT
==== <tt>$.</tt> (Input Position)
=== <tt>$.</tt> (Input Position)
The input position (line number) in the most recently read stream.
English - <tt>$INPUT_LINE_NUMBER</tt>, <tt>$NR</tt>
==== <tt>$_</tt> (Last Read Line)
=== <tt>$_</tt> (Last Read Line)
The line (string) from the most recently read stream.
English - <tt>$LAST_READ_LINE</tt>.
=== Processes
== Processes
==== <tt>$0</tt>
=== <tt>$0</tt>
Initially, contains the name of the script being executed;
may be reassigned.
==== <tt>$*</tt> (\ARGV)
=== <tt>$*</tt> (\ARGV)
Points to ARGV.
English - <tt>$ARGV</tt>.
==== <tt>$$</tt> (Process ID)
=== <tt>$$</tt> (Process ID)
The process ID of the current process. Same as Process.pid.
English - <tt>$PROCESS_ID</tt>, <tt>$PID</tt>.
==== <tt>$?</tt> (Child Status)
=== <tt>$?</tt> (Child Status)
Initially +nil+, otherwise the Process::Status object
created for the most-recently exited child process;
@ -186,7 +186,7 @@ thread-local.
English - <tt>$CHILD_STATUS</tt>.
==== <tt>$LOAD_PATH</tt> (Load Path)
=== <tt>$LOAD_PATH</tt> (Load Path)
Contains the array of paths to be searched
by Kernel#load and Kernel#require.
@ -211,7 +211,7 @@ Examples:
Aliased as <tt>$:</tt> and <tt>$-I</tt>.
==== <tt>$LOADED_FEATURES</tt>
=== <tt>$LOADED_FEATURES</tt>
Contains an array of the paths to the loaded files:
@ -230,13 +230,13 @@ Contains an array of the paths to the loaded files:
Aliased as <tt>$"</tt>.
=== Debugging
== Debugging
==== <tt>$FILENAME</tt>
=== <tt>$FILENAME</tt>
The value returned by method ARGF.filename.
==== <tt>$DEBUG</tt>
=== <tt>$DEBUG</tt>
Initially +true+ if command-line option <tt>-d</tt> or <tt>--debug</tt> is given,
otherwise initially +false+;
@ -246,7 +246,7 @@ When +true+, prints each raised exception to <tt>$stderr</tt>.
Aliased as <tt>$-d</tt>.
==== <tt>$VERBOSE</tt>
=== <tt>$VERBOSE</tt>
Initially +true+ if command-line option <tt>-v</tt> or <tt>-w</tt> is given,
otherwise initially +false+;
@ -258,58 +258,58 @@ When +nil+, disables warnings, including those from Kernel#warn.
Aliased as <tt>$-v</tt> and <tt>$-w</tt>.
=== Other Variables
== Other Variables
==== <tt>$-a</tt>
=== <tt>$-a</tt>
Whether command-line option <tt>-a</tt> was given; read-only.
==== <tt>$-i</tt>
=== <tt>$-i</tt>
Contains the extension given with command-line option <tt>-i</tt>,
or +nil+ if none.
An alias of ARGF.inplace_mode.
==== <tt>$-l</tt>
=== <tt>$-l</tt>
Whether command-line option <tt>-l</tt> was set; read-only.
==== <tt>$-p</tt>
=== <tt>$-p</tt>
Whether command-line option <tt>-p</tt> was given; read-only.
=== Deprecated
== Deprecated
==== <tt>$=</tt>
=== <tt>$=</tt>
==== <tt>$,</tt>
=== <tt>$,</tt>
== Pre-Defined Global Constants
= Pre-Defined Global Constants
== Streams
= Streams
==== <tt>STDIN</tt>
=== <tt>STDIN</tt>
The standard input stream (the default value for <tt>$stdin</tt>):
STDIN # => #<IO:<STDIN>>
==== <tt>STDOUT</tt>
=== <tt>STDOUT</tt>
The standard output stream (the default value for <tt>$stdout</tt>):
STDOUT # => #<IO:<STDOUT>>
==== <tt>STDERR</tt>
=== <tt>STDERR</tt>
The standard error stream (the default value for <tt>$stderr</tt>):
STDERR # => #<IO:<STDERR>>
=== Enviroment
== Enviroment
==== ENV
=== ENV
A hash of the contains current environment variables names and values:
@ -321,41 +321,41 @@ A hash of the contains current environment variables names and values:
["DISPLAY", ":0"],
["GDMSESSION", "ubuntu"]]
==== ARGF
=== ARGF
The virtual concatenation of the files given on the command line, or from
<tt>$stdin</tt> if no files were given, <tt>"-"</tt> is given, or after
all files have been read.
==== <tt>ARGV</tt>
=== <tt>ARGV</tt>
An array of the given command-line arguments.
==== <tt>TOPLEVEL_BINDING</tt>
=== <tt>TOPLEVEL_BINDING</tt>
The Binding of the top level scope:
TOPLEVEL_BINDING # => #<Binding:0x00007f58da0da7c0>
==== <tt>RUBY_VERSION</tt>
=== <tt>RUBY_VERSION</tt>
The Ruby version:
RUBY_VERSION # => "3.2.2"
==== <tt>RUBY_RELEASE_DATE</tt>
=== <tt>RUBY_RELEASE_DATE</tt>
The release date string:
RUBY_RELEASE_DATE # => "2023-03-30"
==== <tt>RUBY_PLATFORM</tt>
=== <tt>RUBY_PLATFORM</tt>
The platform identifier:
RUBY_PLATFORM # => "x86_64-linux"
==== <tt>RUBY_PATCHLEVEL</tt>
=== <tt>RUBY_PATCHLEVEL</tt>
The integer patch level for this Ruby:
@ -363,41 +363,41 @@ The integer patch level for this Ruby:
For a development build the patch level will be -1.
==== <tt>RUBY_REVISION</tt>
=== <tt>RUBY_REVISION</tt>
The git commit hash for this Ruby:
RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015"
==== <tt>RUBY_COPYRIGHT</tt>
=== <tt>RUBY_COPYRIGHT</tt>
The copyright string:
RUBY_COPYRIGHT
# => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto"
==== <tt>RUBY_ENGINE</tt>
=== <tt>RUBY_ENGINE</tt>
The name of the Ruby implementation:
RUBY_ENGINE # => "ruby"
==== <tt>RUBY_ENGINE_VERSION</tt>
=== <tt>RUBY_ENGINE_VERSION</tt>
The version of the Ruby implementation:
RUBY_ENGINE_VERSION # => "3.2.2"
==== <tt>RUBY_DESCRIPTION</tt>
=== <tt>RUBY_DESCRIPTION</tt>
The description of the Ruby implementation:
RUBY_DESCRIPTION
# => "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]"
=== Embedded \Data
== Embedded \Data
==== <tt>DATA</tt>
=== <tt>DATA</tt>
Defined if and only if the program has this line:

View File

@ -1,4 +1,4 @@
== Implicit Conversions
= Implicit Conversions
Some Ruby methods accept one or more objects
that can be either:
@ -15,7 +15,7 @@ a specific conversion method:
* Integer: +to_int+
* String: +to_str+
=== Array-Convertible Objects
== Array-Convertible Objects
An <i>Array-convertible object</i> is an object that:
@ -69,7 +69,7 @@ This class is not Array-convertible (method +to_ary+ returns non-Array):
# Raises TypeError (can't convert NotArrayConvertible to Array (NotArrayConvertible#to_ary gives Symbol))
a.replace(NotArrayConvertible.new)
=== Hash-Convertible Objects
== Hash-Convertible Objects
A <i>Hash-convertible object</i> is an object that:
@ -123,7 +123,7 @@ This class is not Hash-convertible (method +to_hash+ returns non-Hash):
# Raises TypeError (can't convert NotHashConvertible to Hash (ToHashReturnsNonHash#to_hash gives Symbol))
h.merge(NotHashConvertible.new)
=== Integer-Convertible Objects
== Integer-Convertible Objects
An <i>Integer-convertible object</i> is an object that:
@ -171,7 +171,7 @@ This class is not Integer-convertible (method +to_int+ returns non-Integer):
# Raises TypeError (can't convert NotIntegerConvertible to Integer (NotIntegerConvertible#to_int gives Symbol))
Array.new(NotIntegerConvertible.new)
=== String-Convertible Objects
== String-Convertible Objects
A <i>String-convertible object</i> is an object that:
* Has instance method +to_str+.

View File

@ -1,4 +1,4 @@
== Keywords
= Keywords
The following keywords are used by Ruby.

View File

@ -1,4 +1,4 @@
== Packed \Data
= Packed \Data
Certain Ruby core methods deal with packing and unpacking data:
@ -64,7 +64,7 @@ If elements don't fit the provided directive, only least significant bits are en
[257].pack("C").unpack("C") # => [1]
=== Packing \Method
== Packing \Method
\Method Array#pack accepts optional keyword argument
+buffer+ that specifies the target string (instead of a new string):
@ -76,7 +76,7 @@ The method can accept a block:
# Packed string is passed to the block.
[65, 66].pack('C*') {|s| p s } # => "AB"
=== Unpacking Methods
== Unpacking Methods
Methods String#unpack and String#unpack1 each accept
an optional keyword argument +offset+ that specifies an offset
@ -95,12 +95,12 @@ Both methods can accept a block:
# The single unpacked object is passed to the block.
'AB'.unpack1('C*') {|ele| p ele } # => 65
=== \Integer Directives
== \Integer Directives
Each integer directive specifies the packing or unpacking
for one element in the input or output array.
==== 8-Bit \Integer Directives
=== 8-Bit \Integer Directives
- <tt>'c'</tt> - 8-bit signed integer
(like C <tt>signed char</tt>):
@ -116,7 +116,7 @@ for one element in the input or output array.
s = [0, 1, -1].pack('C*') # => "\x00\x01\xFF"
s.unpack('C*') # => [0, 1, 255]
==== 16-Bit \Integer Directives
=== 16-Bit \Integer Directives
- <tt>'s'</tt> - 16-bit signed integer, native-endian
(like C <tt>int16_t</tt>):
@ -146,7 +146,7 @@ for one element in the input or output array.
s.unpack('v*')
# => [0, 1, 65535, 32767, 32768, 65535]
==== 32-Bit \Integer Directives
=== 32-Bit \Integer Directives
- <tt>'l'</tt> - 32-bit signed integer, native-endian
(like C <tt>int32_t</tt>):
@ -178,7 +178,7 @@ for one element in the input or output array.
s.unpack('v*')
# => [0, 0, 1, 0, 65535, 65535]
==== 64-Bit \Integer Directives
=== 64-Bit \Integer Directives
- <tt>'q'</tt> - 64-bit signed integer, native-endian
(like C <tt>int64_t</tt>):
@ -196,7 +196,7 @@ for one element in the input or output array.
s.unpack('Q*')
# => [578437695752307201, 17940646550795321087]
==== Platform-Dependent \Integer Directives
=== Platform-Dependent \Integer Directives
- <tt>'i'</tt> - Platform-dependent width signed integer,
native-endian (like C <tt>int</tt>):
@ -230,7 +230,7 @@ for one element in the input or output array.
s.unpack('J*')
# => [67305985, 4244504319]
==== Other \Integer Directives
=== Other \Integer Directives
- <tt>'U'</tt> - UTF-8 character:
@ -247,7 +247,7 @@ for one element in the input or output array.
s.unpack('w*')
# => [1073741823]
==== Modifiers for \Integer Directives
=== Modifiers for \Integer Directives
For the following directives, <tt>'!'</tt> or <tt>'_'</tt> modifiers may be
suffixed as underlying platforms native size.
@ -265,12 +265,12 @@ The endian modifiers also may be suffixed in the directives above:
- <tt>'>'</tt> - Big-endian.
- <tt>'<'</tt> - Little-endian.
=== \Float Directives
== \Float Directives
Each float directive specifies the packing or unpacking
for one element in the input or output array.
==== Single-Precision \Float Directives
=== Single-Precision \Float Directives
- <tt>'F'</tt> or <tt>'f'</tt> - Native format:
@ -287,7 +287,7 @@ for one element in the input or output array.
s = [3.0].pack('g') # => "@@\x00\x00"
s.unpack('g') # => [3.0]
==== Double-Precision \Float Directives
=== Double-Precision \Float Directives
- <tt>'D'</tt> or <tt>'d'</tt> - Native format:
@ -314,12 +314,12 @@ A float directive may be infinity or not-a-number:
[nan].pack('f') # => "\x00\x00\xC0\x7F"
"\x00\x00\xC0\x7F".unpack('f') # => [NaN]
=== \String Directives
== \String Directives
Each string directive specifies the packing or unpacking
for one byte in the input or output string.
==== Binary \String Directives
=== Binary \String Directives
- <tt>'A'</tt> - Arbitrary binary string (space padded; count is width);
+nil+ is treated as the empty string:
@ -377,7 +377,7 @@ for one byte in the input or output string.
"foo".unpack('Z*') # => ["foo"]
"foo\0bar".unpack('Z*') # => ["foo"] # Does not read past "\0".
==== Bit \String Directives
=== Bit \String Directives
- <tt>'B'</tt> - Bit string (high byte first):
@ -421,7 +421,7 @@ for one byte in the input or output string.
"\x01".unpack("b2") # => ["10"]
"\x01".unpack("b3") # => ["100"]
==== Hex \String Directives
=== Hex \String Directives
- <tt>'H'</tt> - Hex string (high nibble first):
@ -467,7 +467,7 @@ for one byte in the input or output string.
"\x01\xfe".unpack('h4') # => ["10ef"]
"\x01\xfe".unpack('h5') # => ["10ef"]
==== Pointer \String Directives
=== Pointer \String Directives
- <tt>'P'</tt> - Pointer to a structure (fixed-length string):
@ -485,7 +485,7 @@ for one byte in the input or output string.
("\0" * 8).unpack("p") # => [nil]
[nil].pack("p") # => "\x00\x00\x00\x00\x00\x00\x00\x00"
==== Other \String Directives
=== Other \String Directives
- <tt>'M'</tt> - Quoted printable, MIME encoding;
text mode, but input must use LF and output LF;
@ -559,7 +559,7 @@ for one byte in the input or output string.
[0x40000000].pack("U") # => "\xFD\x80\x80\x80\x80\x80"
[0x7fffffff].pack("U") # => "\xFD\xBF\xBF\xBF\xBF\xBF"
=== Offset Directives
== Offset Directives
- <tt>'@'</tt> - Begin packing at the given byte offset;
for packing, null fill if necessary:
@ -577,7 +577,7 @@ for one byte in the input or output string.
[0, 1, 2].pack("CCX2C") # => "\x02"
"\x00\x02".unpack("CCXC") # => [0, 2, 2]
=== Null Byte Direcive
== Null Byte Direcive
- <tt>'x'</tt> - Null byte:

View File

@ -1,4 +1,4 @@
== Formats for Dates and Times
= Formats for Dates and Times
Several Ruby time-related classes have instance method +strftime+,
which returns a formatted string representing all or part of a date or time:
@ -32,9 +32,9 @@ It consists of:
Except for the leading percent character,
the only required part is the conversion specifier, so we begin with that.
=== Conversion Specifiers
== Conversion Specifiers
==== \Date (Year, Month, Day)
=== \Date (Year, Month, Day)
- <tt>%Y</tt> - Year including century, zero-padded:
@ -87,7 +87,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.new(2002, 1, 1).strftime('%j') # => "001"
Time.new(2002, 12, 31).strftime('%j') # => "365"
==== \Time (Hour, Minute, Second, Subsecond)
=== \Time (Hour, Minute, Second, Subsecond)
- <tt>%H</tt> - Hour of the day, in range (0..23), zero-padded:
@ -152,7 +152,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.now.strftime('%s') # => "1656505136"
==== Timezone
=== Timezone
- <tt>%z</tt> - Timezone as hour and minute offset from UTC:
@ -162,7 +162,7 @@ the only required part is the conversion specifier, so we begin with that.
Time.now.strftime('%Z') # => "Central Daylight Time"
==== Weekday
=== Weekday
- <tt>%A</tt> - Full weekday name:
@ -184,7 +184,7 @@ the only required part is the conversion specifier, so we begin with that.
t.strftime('%a') # => "Sun"
t.strftime('%w') # => "0"
==== Week Number
=== Week Number
- <tt>%U</tt> - Week number of the year, in range (0..53), zero-padded,
where each week begins on a Sunday:
@ -200,7 +200,7 @@ the only required part is the conversion specifier, so we begin with that.
t.strftime('%a') # => "Sun"
t.strftime('%W') # => "25"
==== Week Dates
=== Week Dates
See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
@ -223,7 +223,7 @@ See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
t0.strftime('%V') # => "52"
t1.strftime('%V') # => "01"
==== Literals
=== Literals
- <tt>%n</tt> - Newline character "\n":
@ -237,7 +237,7 @@ See {ISO 8601 week dates}[https://en.wikipedia.org/wiki/ISO_8601#Week_dates].
Time.now.strftime('%%') # => "%"
==== Shorthand Conversion Specifiers
=== Shorthand Conversion Specifiers
Each shorthand specifier here is shown with its corresponding
longhand specifier.
@ -294,14 +294,14 @@ longhand specifier.
DateTime.now.strftime('%a %b %e %H:%M:%S %Z %Y')
# => "Wed Jun 29 08:32:18 -05:00 2022"
=== Flags
== Flags
Flags may affect certain formatting specifications.
Multiple flags may be given with a single conversion specified;
order does not matter.
==== Padding Flags
=== Padding Flags
- <tt>0</tt> - Pad with zeroes:
@ -315,7 +315,7 @@ order does not matter.
Time.new(10).strftime('%-Y') # => "10"
==== Casing Flags
=== Casing Flags
- <tt>^</tt> - Upcase result:
@ -328,7 +328,7 @@ order does not matter.
Time.now.strftime('%^p') # => "AM"
Time.now.strftime('%#p') # => "am"
==== Timezone Flags
=== Timezone Flags
- <tt>:</tt> - Put timezone as colon-separated hours and minutes:
@ -338,7 +338,7 @@ order does not matter.
Time.now.strftime('%::z') # => "-05:00:00"
=== Width Specifiers
== Width Specifiers
The integer width specifier gives a minimum width for the returned string:
@ -348,12 +348,12 @@ The integer width specifier gives a minimum width for the returned string:
Time.new(2002, 12).strftime('%10B') # => " December"
Time.new(2002, 12).strftime('%3B') # => "December" # Ignored if too small.
== Specialized Format Strings
= Specialized Format Strings
Here are a few specialized format strings,
each based on an external standard.
=== HTTP Format
== HTTP Format
The HTTP date format is based on
{RFC 2616}[https://datatracker.ietf.org/doc/html/rfc2616],
@ -368,7 +368,7 @@ and treats dates in the format <tt>'%a, %d %b %Y %T GMT'</tt>:
Date._httpdate(httpdate)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0}
=== RFC 3339 Format
== RFC 3339 Format
The RFC 3339 date format is based on
{RFC 3339}[https://datatracker.ietf.org/doc/html/rfc3339]:
@ -382,7 +382,7 @@ The RFC 3339 date format is based on
Date._rfc3339(rfc3339)
# => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0}
=== RFC 2822 Format
== RFC 2822 Format
The RFC 2822 date format is based on
{RFC 2822}[https://datatracker.ietf.org/doc/html/rfc2822],
@ -397,7 +397,7 @@ and treats dates in the format <tt>'%a, %-d %b %Y %T %z'</tt>]:
Date._rfc2822(rfc2822)
# => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}
=== JIS X 0301 Format
== JIS X 0301 Format
The JIS X 0301 format includes the
{Japanese era name}[https://en.wikipedia.org/wiki/Japanese_era_name],
@ -412,7 +412,7 @@ with the first letter of the romanized era name prefixed:
# Return hash parsed from 0301-formatted string.
Date._jisx0301(jisx0301) # => {:year=>2001, :mon=>2, :mday=>3}
=== ISO 8601 Format Specifications
== ISO 8601 Format Specifications
This section shows format specifications that are compatible with
{ISO 8601}[https://en.wikipedia.org/wiki/ISO_8601].
@ -422,7 +422,7 @@ Examples in this section assume:
t = Time.now # => 2022-06-29 16:49:25.465246 -0500
==== Dates
=== Dates
See {ISO 8601 dates}[https://en.wikipedia.org/wiki/ISO_8601#Dates].
@ -473,7 +473,7 @@ See {ISO 8601 dates}[https://en.wikipedia.org/wiki/ISO_8601#Dates].
t.strftime('%Y-%j') # => "2022-180"
==== Times
=== Times
See {ISO 8601 times}[https://en.wikipedia.org/wiki/ISO_8601#Times].
@ -514,7 +514,7 @@ See {ISO 8601 times}[https://en.wikipedia.org/wiki/ISO_8601#Times].
- {Coordinated Universal Time (UTC)}[https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_(UTC)].
- {Time offsets from UTC}[https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC].
==== Combined \Date and \Time
=== Combined \Date and \Time
See {ISO 8601 Combined date and time representations}[https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations].

View File

@ -1,6 +1,6 @@
== Timezones
= Timezones
=== Timezone Specifiers
== Timezone Specifiers
Certain \Time methods accept arguments that specify timezones:
@ -18,7 +18,7 @@ The value given with any of these must be one of the following
- {Integer offset}[rdoc-ref:timezones.rdoc@Integer+Offsets].
- {Timezone object}[rdoc-ref:timezones.rdoc@Timezone+Objects].
==== Hours/Minutes Offsets
=== Hours/Minutes Offsets
The zone value may be a string offset from UTC
in the form <tt>'+HH:MM'</tt> or <tt>'-HH:MM'</tt>,
@ -33,7 +33,7 @@ Examples:
Time.at(t, in: '-23:59') # => 1999-12-31 20:16:01 -2359
Time.at(t, in: '+23:59') # => 2000-01-02 20:14:01 +2359
==== Single-Letter Offsets
=== Single-Letter Offsets
The zone value may be a letter in the range <tt>'A'..'I'</tt>
or <tt>'K'..'Z'</tt>;
@ -46,7 +46,7 @@ see {List of military time zones}[https://en.wikipedia.org/wiki/List_of_military
Time.at(t, in: 'Y') # => 2000-01-01 08:15:01 -1200
Time.at(t, in: 'Z') # => 2000-01-01 20:15:01 UTC
==== \Integer Offsets
=== \Integer Offsets
The zone value may be an integer number of seconds
in the range <tt>-86399..86399</tt>:
@ -55,7 +55,7 @@ in the range <tt>-86399..86399</tt>:
Time.at(t, in: -86399) # => 1999-12-31 20:15:02 -235959
Time.at(t, in: 86399) # => 2000-01-02 20:15:00 +235959
==== Timezone Objects
=== Timezone Objects
The zone value may be an object responding to certain timezone methods.