module Hexdump::ModuleMethods

Provides the {hexdump ModuleMethods#hexdump} top-level method that can be extended into modules.

module Context

  extend Hexdump::ModuleMethods

end

Public Instance Methods

hexdump(data, output: $stdout, **kwargs,&block) click to toggle source

Hexdumps the given data.

@param [#each_byte] data

The data to be hexdumped.

@param [#print] output ($stdout)

The output to print the hexdump to.

@param [Hash{Symbol => Object}] kwargs

Additional keyword arguments for {Hexdump#initialize}.

@option kwargs [:int8, :uint8, :char, :uchar, :byte, :int16, :int16_le, :int16_be, :int16_ne, :uint16, :uint16_le, :uint16_be, :uint16_ne, :short, :short_le, :short_be, :short_ne, :ushort, :ushort_le, :ushort_be, :ushort_ne, :int32, :int32_le, :int32_be, :int32_ne, :uint32, :uint32_le, :uint32_be, :uint32_ne, :int, :long, :long_le, :long_be, :long_ne, :uint, :ulong, :ulong_le, :ulong_be, :ulong_ne, :int64, :int64_le, :int64_be, :int64_ne, :uint64, :uint64_le, :uint64_be, :uint64_ne, :long_long, :long_long_le, :long_long_be, :long_long_ne, :ulong_long, :ulong_long_le, :ulong_long_be, :ulong_long_ne, :float, :float_le, :float_be, :float_ne, :double, :double_le, :double_be, :double_ne] :type (:byte)

The type to decode the data as.

@option kwargs [Integer, nil] :offset

Controls whether to skip N number of bytes before starting to read data.

@option kwargs [Integer, nil] :length

Controls control many bytes to read.

@option kwargs [Boolean] :zero_pad (false)

Enables or disables zero padding of data, so that the remaining bytes
can be decoded as a uint, int, or float.

@option kwargs [Integer] :columns (16)

The number of bytes to dump for each line.

@option kwargs [Integer, nil] :group_columns

Separate groups of columns with an additional space.

@option kwargs [Integer, :type, nil] :group_chars

Group chars into columns.
If `:type`, then the chars will be grouped by the `type`'s size.

@option kwargs [Boolean] :repeating

Controls whether to omit repeating duplicate rows data with a `*`.

@option kwargs [16, 10, 8, 2] :base (16)

The base to print bytes in.

@option kwargs [16, 10, 8, 2] :index_base (16)

Control the base that the index is displayed in.

@option kwargs [Integer, nil] :index_offset

The offset to start the index at.

@option kwargs [Boolean] :chars_column (true)

Controls whether to display the characters column.

@option kwargs [:ascii, :utf8, Encoding, nil] :encoding

The encoding to display the characters in.

@option kwargs [Boolean, Hash{:index,:numeric,:chars => Symbol,Array<Symbol>}] :style

Enables theming of index, numeric, or chars columns.

@option kwargs [Boolean, Hash{:index,:numeric,:chars => Hash{String,Regexp => Symbol,Array<Symbol>}}] :highlights

Enables selective highlighting of index, numeric, or chars columns.

@yield [hexdump]

If a block is given, it will be passed the newly initialized hexdump
instance.

@yieldparam [Hexdump::Hexdump] hexdump

The newly initialized hexdump instance.

@raise [ArgumentError]

The given data does not define the `#each_byte` method,
the `:output` value does not support the `#<<` method or
the `:base` value was unknown.

@example

hexdump("hello\0")
# 00000000  68 65 6c 6c 6f 00                                |hello.|
# 00000006

@example Hexdumping to a custom output:

File.open('hexdump.txt') do |output|
  hexdump("hello\0", output: output)
end

@example Hexdumping to an Array:

lines = []
hexdump("hello\0", output: lines)

@example Hexdumping with ANSI styling:

Hexdump.hexdump(style: {index: :white, numeric: :green, chars: :cyan})

@example Hexdumping with ANSI highlighting:

Hexdump.hexdump("hello\0", highlights: {
                             index: {/00$/ => [:white, :bold]},
                             numeric: {
                               /^[8-f][0-9a-f]$/ => :faint,
                               /f/  => :cyan,
                               '00' => [:black, :on_red]
                             },
                             chars: {/[^\.]+/ => :green}
                           })

@example Configuring the hexdump with a block:

Hexdump.hexdump("hello\0") do |hexdump|
  hexdump.type = :uint16
  # ...

  hexdump.theme do |theme|
    theme.index.highlight(/00$/, [:white, :bold])
    theme.numeric.highlight(/^[8-f][0-9a-f]$/, :faint)
    # ...
  end
end
# File lib/hexdump/module_methods.rb, line 126
def hexdump(data, output: $stdout, **kwargs,&block)
  hexdump = ::Hexdump::Hexdump.new(**kwargs,&block)

  hexdump.hexdump(data, output: output)
end