class Kramdown::Utils::OrderedHash

is that a OrderedHash retains the insertion order of the keys.
A very simple class mimicking the most used methods of a Hash. The difference to a normal Hash

def [](key)

Return the value for the +key+.
def [](key)
  @data[key]
end

def []=(key, val)

Set the value for the +key+ to +val+.
def []=(key, val)
  @order << key if !@data.has_key?(key)
  @data[key] = val
end

def delete(key)

Delete the +key+.
def delete(key)
  @order.delete(key)
  @data.delete(key)
end

def each

Iterate over the stored keys in insertion order.
def each
  @order.each {|k| yield(k, @data[k])}
end

def initialize(hash = {})

data.
insertion order). An OrderedHash object may be used instead of a hash to provide the initial
used, there is no special order imposed on the keys (additionally set keys will be stored in
Initialize the OrderedHash object, optionally with an +hash+. If the optional +hash+ is
def initialize(hash = {})
  if hash.kind_of?(OrderedHash)
    @data, @order = hash.instance_eval { [@data.dup, @order.dup] }
  else
    @data = hash || {}
    @order = @data.keys
  end
end

def inspect #:nodoc:

:nodoc:
def inspect #:nodoc:
  "{" + map {|k,v| "#{k.inspect}=>#{v.inspect}"}.join(" ") + "}"
end