def set_mark(key, value)
      @marks = {} unless @marks
      @marks[key] = value
      if Symbol===key and not(self.respond_to?(key) or self.respond_to?("#{key}=".to_sym))
        instance_eval %Q{
          class << self
            def #{key}() @marks[:#{key}]; end
            def #{key}=(value) @marks[:#{key}]=value; end
          end
        }
      end
    end
def set_mark(key, value)
      @marks = {} unless @marks
      @marks[key] = value
      if Symbol===key and not(self.respond_to?(key) or self.respond_to?("#{key}=".to_sym))
        instance_eval %Q{
          class << self
            def #{key}() @marks[:#{key}]; end
            def #{key}=(value) @marks[:#{key}]=value; end
          end
        }
      end
    end
Sets a key/value pair as a mark. Overrides previous mark value if _key_ is
 already in used. Automatically creates accessors if _key_ is a Symbol and such
 methods do not already exists.