class Prism::Pack::Directive

A directive in the pack template language.

Constants

ENDIAN_DESCRIPTIONS

The descriptions of the various types of endianness.

SIGNED_DESCRIPTIONS

The descriptions of the various types of signedness.

SIZE_DESCRIPTIONS

The descriptions of the various types of sizes.

Attributes

endian[R]

The type of endianness of the directive.

length[R]

The length of this directive (used for integers).

length_type[R]

The length type of this directive (used for integers).

signed[R]

The type of signedness of the directive.

size[R]

The size of the directive.

source[R]

A byteslice of the source string that this directive represents.

type[R]

The type of the directive.

variant[R]

A symbol representing whether or not we are packing or unpacking.

version[R]

A symbol representing the version of Ruby.

Public Class Methods

new(version, variant, source, type, signed, endian, size, length_type, length) click to toggle source

Initialize a new directive with the given values.

# File lib/prism/pack.rb, line 88
def initialize(version, variant, source, type, signed, endian, size, length_type, length)
  @version = version
  @variant = variant
  @source = source
  @type = type
  @signed = signed
  @endian = endian
  @size = size
  @length_type = length_type
  @length = length
end

Public Instance Methods

describe() click to toggle source

Provide a human-readable description of the directive.

# File lib/prism/pack.rb, line 130
def describe
  case type
  when SPACE
    "whitespace"
  when COMMENT
    "comment"
  when INTEGER
    if size == SIZE_8
      base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} integer"
    else
      base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} integer"
    end
    case length_type
    when LENGTH_FIXED
      if length > 1
        base + ", x#{length}"
      else
        base
      end
    when LENGTH_MAX
      base + ", as many as possible"
    end
  when UTF8
    "UTF-8 character"
  when BER
    "BER-compressed integer"
  when FLOAT
    "#{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} float"
  when STRING_SPACE_PADDED
    "arbitrary binary string (space padded)"
  when STRING_NULL_PADDED
    "arbitrary binary string (null padded, count is width)"
  when STRING_NULL_TERMINATED
    "arbitrary binary string (null padded, count is width), except that null is added with *"
  when STRING_MSB
    "bit string (MSB first)"
  when STRING_LSB
    "bit string (LSB first)"
  when STRING_HEX_HIGH
    "hex string (high nibble first)"
  when STRING_HEX_LOW
    "hex string (low nibble first)"
  when STRING_UU
    "UU-encoded string"
  when STRING_MIME
    "quoted printable, MIME encoding"
  when STRING_BASE64
    "base64 encoded string"
  when STRING_FIXED
    "pointer to a structure (fixed-length string)"
  when STRING_POINTER
    "pointer to a null-terminated string"
  when MOVE
    "move to absolute position"
  when BACK
    "back up a byte"
  when NULL
    "null byte"
  else
    raise
  end
end