In Files

  • tk/lib/tk/canvas.rb
  • tk/lib/tkextlib/blt/eps.rb

Class/Module Index [+]

Quicksearch

Tk::Canvas

Public Instance Methods

__BLT_EPS_item_boolval_optkeys(id) click to toggle source
__BLT_EPS_item_strval_optkeys(id) click to toggle source
__destroy_hook__() click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 54
def __destroy_hook__
  TkcItem::CItemID_TBL.delete(@path)
end
            
addtag(tag, mode, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 99
def addtag(tag, mode, *args)
  mode = mode.to_s
  if args[0] && mode =~ /^(above|below|with(tag)?)$/
    args[0] = tagid(args[0])
  end
  tk_send_without_enc('addtag', tagid(tag), mode, *args)
  self
end
            
addtag_above(tagOrId, target) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 107
def addtag_above(tagOrId, target)
  addtag(tagOrId, 'above', tagid(target))
end
            
addtag_all(tagOrId) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 110
def addtag_all(tagOrId)
  addtag(tagOrId, 'all')
end
            
addtag_below(tagOrId, target) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 113
def addtag_below(tagOrId, target)
  addtag(tagOrId, 'below', tagid(target))
end
            
addtag_closest(tagOrId, x, y, halo=None, start=None) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 116
def addtag_closest(tagOrId, x, y, halo=None, start=None)
  addtag(tagOrId, 'closest', x, y, halo, start)
end
            
addtag_enclosed(tagOrId, x1, y1, x2, y2) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 119
def addtag_enclosed(tagOrId, x1, y1, x2, y2)
  addtag(tagOrId, 'enclosed', x1, y1, x2, y2)
end
            
addtag_overlapping(tagOrId, x1, y1, x2, y2) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 122
def addtag_overlapping(tagOrId, x1, y1, x2, y2)
  addtag(tagOrId, 'overlapping', x1, y1, x2, y2)
end
            
addtag_withtag(tagOrId, tag) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 125
def addtag_withtag(tagOrId, tag)
  addtag(tagOrId, 'withtag', tagid(tag))
end
            
bbox(tagOrId, *tags) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 129
def bbox(tagOrId, *tags)
  list(tk_send_without_enc('bbox', tagid(tagOrId),
                           *tags.collect{|t| tagid(t)}))
end
            
canvas_x(screen_x, *args) click to toggle source
Alias for: canvasx
canvas_y(screen_y, *args) click to toggle source
Alias for: canvasy
canvasx(screen_x, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 173
def canvasx(screen_x, *args)
  #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))
  number(tk_send_without_enc('canvasx', screen_x, *args))
end
            
Also aliased as: canvas_x
canvasy(screen_y, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 177
def canvasy(screen_y, *args)
  #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))
  number(tk_send_without_enc('canvasy', screen_y, *args))
end
            
Also aliased as: canvas_y
coords(tag, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 184
def coords(tag, *args)
  if args.empty?
    tk_split_list(tk_send_without_enc('coords', tagid(tag)))
  else
    tk_send_without_enc('coords', tagid(tag), *(args.flatten))
    self
  end
end
            
create(type, *args) click to toggle source

create a canvas item without creating a TkcItem object

 
               # File tk/lib/tk/canvas.rb, line 88
def create(type, *args)
  if type.kind_of?(Class) && type < TkcItem
    # do nothing
  elsif TkcItem.type2class(type.to_s)
    type = TkcItem.type2class(type.to_s)
  else
    fail ArgumentError, "type must a subclass of TkcItem class, or a string in CItemTypeToClass"
  end
  type.create(self, *args)
end
            
create_itemobj_from_id(idnum) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 614
def create_itemobj_from_id(idnum)
  id = TkcItem.id2obj(self, idnum.to_i)
  return id if id.kind_of?(TkcItem)

  typename = tk_send('type', id)
  unless type = TkcItem.type2class(typename)
    (itemclass = typename.dup)[0,1] = typename[0,1].upcase
    type = TkcItem.const_set(itemclass, Class.new(TkcItem))
    type.const_set("CItemTypeName", typename.freeze)
    TkcItem::CItemTypeToClass[typename] = type
  end

  canvas = self
  (obj = type.allocate).instance_eval{
    @parent = @c = canvas
    @path = canvas.path
    @id = id
    TkcItem::CItemID_TBL.mutex.synchronize{
      TkcItem::CItemID_TBL[@path] = {} unless TkcItem::CItemID_TBL[@path]
      TkcItem::CItemID_TBL[@path][@id] = self
    }
  }
end
            
dchars(tag, first, last=None) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 193
def dchars(tag, first, last=None)
  tk_send_without_enc('dchars', tagid(tag),
                      _get_eval_enc_str(first), _get_eval_enc_str(last))
  self
end
            
delete(*args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 199
def delete(*args)
  tbl = nil
  TkcItem::CItemID_TBL.mutex.synchronize{
    tbl = TkcItem::CItemID_TBL[self.path]
  }
  if tbl
    args.each{|tag|
      find('withtag', tag).each{|item|
        if item.kind_of?(TkcItem)
          TkcItem::CItemID_TBL.mutex.synchronize{
            tbl.delete(item.id)
          }
        end
      }
    }
  end
  tk_send_without_enc('delete', *args.collect{|t| tagid(t)})
  self
end
            
Also aliased as: remove
deltag(tag, tag_to_del=None) click to toggle source
Alias for: dtag
dtag(tag, tag_to_del=None) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 220
def dtag(tag, tag_to_del=None)
  tk_send_without_enc('dtag', tagid(tag), tagid(tag_to_del))
  self
end
            
Also aliased as: deltag
find(mode, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 226
def find(mode, *args)
  list(tk_send_without_enc('find', mode, *args)).collect!{|id|
    TkcItem.id2obj(self, id)
  }
end
            
find_above(target) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 231
def find_above(target)
  find('above', tagid(target))
end
            
find_all() click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 234
def find_all
  find('all')
end
            
find_below(target) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 237
def find_below(target)
  find('below', tagid(target))
end
            
find_closest(x, y, halo=None, start=None) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 240
def find_closest(x, y, halo=None, start=None)
  find('closest', x, y, halo, start)
end
            
find_enclosed(x1, y1, x2, y2) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 243
def find_enclosed(x1, y1, x2, y2)
  find('enclosed', x1, y1, x2, y2)
end
            
find_overlapping(x1, y1, x2, y2) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 246
def find_overlapping(x1, y1, x2, y2)
  find('overlapping', x1, y1, x2, y2)
end
            
find_withtag(tag) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 249
def find_withtag(tag)
  find('withtag', tag)
end
            
gettags(tagOrId) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 267
def gettags(tagOrId)
  list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|
    TkcTag.id2obj(self, tag)
  }
end
            
i_move(tagOrId, idx, x, y) click to toggle source
Alias for: imove
icursor(tagOrId, index) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 273
def icursor(tagOrId, index)
  tk_send_without_enc('icursor', tagid(tagOrId), index)
  self
end
            
imove(tagOrId, idx, x, y) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 278
def imove(tagOrId, idx, x, y)
  tk_send_without_enc('imove', tagid(tagOrId), idx, x, y)
  self
end
            
Also aliased as: i_move
index(tagOrId, idx) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 284
def index(tagOrId, idx)
  number(tk_send_without_enc('index', tagid(tagOrId), idx))
end
            
insert(tagOrId, index, string) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 288
def insert(tagOrId, index, string)
  tk_send_without_enc('insert', tagid(tagOrId), index,
                      _get_eval_enc_str(string))
  self
end
            
itembind(tag, context, *args) click to toggle source

def itembind(tag, context, cmd=Proc.new, *args)

_bind([path, "bind", tagid(tag)], context, cmd, *args)
self

end

 
               # File tk/lib/tk/canvas.rb, line 138
def itembind(tag, context, *args)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block_given?
    cmd = args.shift
  else
    cmd = Proc.new
  end
  _bind([path, "bind", tagid(tag)], context, cmd, *args)
  self
end
            
itembind_append(tag, context, *args) click to toggle source

def #itembind_append(tag, context, cmd=Proc.new, *args)

_bind_append([path, "bind", tagid(tag)], context, cmd, *args)
self

end

 
               # File tk/lib/tk/canvas.rb, line 153
def itembind_append(tag, context, *args)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block_given?
    cmd = args.shift
  else
    cmd = Proc.new
  end
  _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
  self
end
            
itembind_remove(tag, context) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 164
def itembind_remove(tag, context)
  _bind_remove([path, "bind", tagid(tag)], context)
  self
end
            
itembindinfo(tag, context=nil) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 169
def itembindinfo(tag, context=nil)
  _bindinfo([path, "bind", tagid(tag)], context)
end
            
itemfocus(tagOrId=nil) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 253
def itemfocus(tagOrId=nil)
  if tagOrId
    tk_send_without_enc('focus', tagid(tagOrId))
    self
  else
    ret = tk_send_without_enc('focus')
    if ret == ""
      nil
    else
      TkcItem.id2obj(self, ret)
    end
  end
end
            
itemtype(tag) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 610
def itemtype(tag)
  TkcItem.type2class(tk_send('type', tagid(tag)))
end
            
lower(tag, below=nil) click to toggle source
def itemcget(tagOrId, option)
  case option.to_s
  when 'dash', 'activedash', 'disableddash'
    conf = tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}")
    if conf =~ /^[0-9]/
      list(conf)
    else
      conf
    end
  when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
    _fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}"))
  when 'font', 'kanjifont'
    #fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}"))
    fnt = tk_tcl2ruby(_fromUTF8(tk_send_with_enc('itemcget', tagid(tagOrId), '-font')))
    unless fnt.kind_of?(TkFont)
      fnt = tagfontobj(tagid(tagOrId), fnt)
    end
    if option.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
      # obsolete; just for compatibility
      fnt.kanji_font
    else
      fnt
    end
  else
    tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId),
                                              "-#{option}")))
  end
end

def itemconfigure(tagOrId, key, value=None)
  if key.kind_of? Hash
    key = _symbolkey2str(key)
    coords = key.delete('coords')
    self.coords(tagOrId, coords) if coords

    if ( key['font'] || key['kanjifont']          || key['latinfont'] || key['asciifont'] )
      tagfont_configure(tagid(tagOrId), key.dup)
    else
      _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),
                                    *hash_kv(key, true)))
    end

  else
    if ( key == 'coords' || key == :coords )
      self.coords(tagOrId, value)
    elsif ( key == 'font' || key == :font ||
            key == 'kanjifont' || key == :kanjifont ||
            key == 'latinfont' || key == :latinfont ||
            key == 'asciifont' || key == :asciifont )
      if value == None
        tagfontobj(tagid(tagOrId))
      else
        tagfont_configure(tagid(tagOrId), {key=>value})
      end
    else
      _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),
                                    "-#{key}", _get_eval_enc_str(value)))
    end
  end
  self
end

# def itemconfigure(tagOrId, key, value=None) # if key.kind_of? Hash # tk_send ‘itemconfigure’, tagid(tagOrId), *hash_kv(key) # else # tk_send ‘itemconfigure’, tagid(tagOrId), “-#{key}”, value # end # end # def itemconfigure(tagOrId, keys) # tk_send ‘itemconfigure’, tagid(tagOrId), *hash_kv(keys) # end

def itemconfiginfo(tagOrId, key=nil)
  if TkComm::GET_CONFIGINFO_AS_ARRAY
    if key
      case key.to_s
      when 'coords'
        return ['coords', '', '', '', self.coords(tagOrId)]
      when 'dash', 'activedash', 'disableddash'
        conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))
        if conf[3] && conf[3] =~ /^[0-9]/
          conf[3] = list(conf[3])
        end
        if conf[4] && conf[4] =~ /^[0-9]/
          conf[4] = list(conf[4])
        end
      when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
        conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
      when 'font', 'kanjifont'
        conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))
        conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])
      else
        conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
      end
      conf[0] = conf[0][1..-1]
      conf
    else
      ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).collect{|conflist|
        conf = tk_split_simplelist(conflist)
        conf[0] = conf[0][1..-1]
        case conf[0]
        when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
        when 'dash', 'activedash', 'disableddash'
          if conf[3] && conf[3] =~ /^[0-9]/
            conf[3] = list(conf[3])
          end
          if conf[4] && conf[4] =~ /^[0-9]/
            conf[4] = list(conf[4])
          end
        else
          if conf[3]
            if conf[3].index('{')
              conf[3] = tk_split_list(conf[3])
            else
              conf[3] = tk_tcl2ruby(conf[3])
            end
          end
          if conf[4]
            if conf[4].index('{')
              conf[4] = tk_split_list(conf[4])
            else
              conf[4] = tk_tcl2ruby(conf[4])
            end
          end
        end
        conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
        conf
      }

      fontconf = ret.assoc('font')
      if fontconf
        ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}
        fontconf[4] = tagfont_configinfo(tagid(tagOrId), fontconf[4])
        ret.push(fontconf)
      end

      ret << ['coords', '', '', '', self.coords(tagOrId)]
    end
  else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
    if key
      case key.to_s
      when 'coords'
        {'coords' => ['', '', '', self.coords(tagOrId)]}
      when 'dash', 'activedash', 'disableddash'
        conf = tk_split_simplelist(tk_send_without_enc('itemconfigure',
                                                       tagid(tagOrId),
                                                       "-#{key}"))
        if conf[3] && conf[3] =~ /^[0-9]/
          conf[3] = list(conf[3])
        end
        if conf[4] && conf[4] =~ /^[0-9]/
          conf[4] = list(conf[4])
        end
      when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
        conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
      when 'font', 'kanjifont'
        conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))
        conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])
      else
        conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
      end
      key = conf.shift[1..-1]
      { key => conf }
    else
      ret = {}
      tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).each{|conflist|
        conf = tk_split_simplelist(conflist)
        key = conf.shift[1..-1]
        case key
        when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
        when 'dash', 'activedash', 'disableddash'
          if conf[2] && conf[2] =~ /^[0-9]/
            conf[2] = list(conf[2])
          end
          if conf[3] && conf[3] =~ /^[0-9]/
            conf[3] = list(conf[3])
          end
        else
          if conf[2]
            if conf[2].index('{')
              conf[2] = tk_split_list(conf[2])
            else
              conf[2] = tk_tcl2ruby(conf[2])
            end
          end
          if conf[3]
            if conf[3].index('{')
              conf[3] = tk_split_list(conf[3])
            else
              conf[3] = tk_tcl2ruby(conf[3])
            end
          end
        end
        if conf.size == 1
          ret[key] = conf[0][1..-1]  # alias info
        else
          ret[key] = conf
        end
      }

      fontconf = ret['font']
      if fontconf
        ret.delete('font')
        ret.delete('kanjifont')
        fontconf[3] = tagfont_configinfo(tagid(tagOrId), fontconf[3])
        ret['font'] = fontconf
      end

      ret['coords'] = ['', '', '', self.coords(tagOrId)]

      ret
    end
  end
end

def current_itemconfiginfo(tagOrId, key=nil)
  if TkComm::GET_CONFIGINFO_AS_ARRAY
    if key
      conf = itemconfiginfo(tagOrId, key)
      {conf[0] => conf[4]}
    else
      ret = {}
      itemconfiginfo(tagOrId).each{|conf|
        ret[conf[0]] = conf[4] if conf.size > 2
      }
      ret
    end
  else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
    ret = {}
    itemconfiginfo(tagOrId, key).each{|k, conf|
      ret[k] = conf[-1] if conf.kind_of?(Array)
    }
    ret
  end
end
 
               # File tk/lib/tk/canvas.rb, line 533
def lower(tag, below=nil)
  if below
    tk_send_without_enc('lower', tagid(tag), tagid(below))
  else
    tk_send_without_enc('lower', tagid(tag))
  end
  self
end
            
move(tag, dx, dy) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 542
def move(tag, dx, dy)
  tk_send_without_enc('move', tagid(tag), dx, dy)
  self
end
            
move_to(tag, x, y) click to toggle source
Alias for: moveto
moveto(tag, x, y) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 547
def moveto(tag, x, y)
  # Tcl/Tk 8.6 or later
  tk_send_without_enc('moveto', tagid(tag), x, y)
  self
end
            
Also aliased as: move_to
postscript(keys) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 554
def postscript(keys)
  tk_send("postscript", *hash_kv(keys))
end
            
raise(tag, above=nil) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 558
def raise(tag, above=nil)
  if above
    tk_send_without_enc('raise', tagid(tag), tagid(above))
  else
    tk_send_without_enc('raise', tagid(tag))
  end
  self
end
            
rchars(tag, first, last, str_or_coords) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 567
def rchars(tag, first, last, str_or_coords)
  # Tcl/Tk 8.6 or later
  str_or_coords = str_or_coords.flatten if str_or_coords.kinad_of? Array
  tk_send_without_enc('rchars', tagid(tag), first, last, str_or_coords)
  self
end
            
Also aliased as: replace_chars, replace_coords
remove(*args) click to toggle source
Alias for: delete
replace_chars(tag, first, last, str_or_coords) click to toggle source
Alias for: rchars
replace_coords(tag, first, last, str_or_coords) click to toggle source
Alias for: rchars
scale(tag, x, y, xs, ys) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 576
def scale(tag, x, y, xs, ys)
  tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)
  self
end
            
scan_dragto(x, y, gain=None) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 585
def scan_dragto(x, y, gain=None)
  tk_send_without_enc('scan', 'dragto', x, y, gain)
  self
end
            
scan_mark(x, y) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 581
def scan_mark(x, y)
  tk_send_without_enc('scan', 'mark', x, y)
  self
end
            
select(mode, *args) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 590
def select(mode, *args)
  r = tk_send_without_enc('select', mode, *args)
  (mode == 'item')? TkcItem.id2obj(self, r): self
end
            
select_adjust(tagOrId, index) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 594
def select_adjust(tagOrId, index)
  select('adjust', tagid(tagOrId), index)
end
            
select_clear() click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 597
def select_clear
  select('clear')
end
            
select_from(tagOrId, index) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 600
def select_from(tagOrId, index)
  select('from', tagid(tagOrId), index)
end
            
select_item() click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 603
def select_item
  select('item')
end
            
select_to(tagOrId, index) click to toggle source
 
               # File tk/lib/tk/canvas.rb, line 606
def select_to(tagOrId, index)
  select('to', tagid(tagOrId), index)
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.