Class: Irc::Casemap

Inherits:
Object show all
Defined in:
lib/rbot/irc.rb

Overview

Due to its Scandinavian origins, IRC has strange case mappings, which consider the characters {}|^ as the uppercase equivalents of # []\~.

This is however not the same on all IRC servers: some use standard ASCII casemapping, other do not consider ^ as the uppercase of ~

Direct Known Subclasses

AsciiCasemap, RfcCasemap, StrictRfcCasemap

Constant Summary collapse

@@casemaps =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, upper, lower) ⇒ Casemap

Create a new casemap with name name, uppercase characters upper and lowercase characters lower



74
75
76
77
78
79
80
81
82
# File 'lib/rbot/irc.rb', line 74

def initialize(name, upper, lower)
  @key = name.to_sym
  raise "Casemap #{name.inspect} already exists!" if @@casemaps.has_key?(@key)
  @@casemaps[@key] = {
    :upper => upper,
    :lower => lower,
    :casemap => self
  }
end

Class Method Details

.get(name) ⇒ Object

Returns the Casemap with the given name



86
87
88
# File 'lib/rbot/irc.rb', line 86

def Casemap.get(name)
  @@casemaps[name.to_sym][:casemap]
end

Instance Method Details

#==(arg) ⇒ Object

Two Casemaps are equal if they have the same upper and lower ranges



122
123
124
125
# File 'lib/rbot/irc.rb', line 122

def ==(arg)
  other = arg.to_irc_casemap
  return self.upper == other.upper && self.lower == other.lower
end

#inspectObject

A Casemap is represented by its lower/upper mappings



110
111
112
# File 'lib/rbot/irc.rb', line 110

def inspect
  self.__to_s__[0..-2] + " #{upper.inspect} ~(#{self})~ #{lower.inspect}>"
end

#lowerObject

Retrieve the ‘lowercase characters’ of this Casemap



98
99
100
# File 'lib/rbot/irc.rb', line 98

def lower
  @@casemaps[@key][:lower]
end

#must_be(arg) ⇒ Object

Give a warning if arg and self are not the same Casemap



129
130
131
132
133
134
135
136
137
# File 'lib/rbot/irc.rb', line 129

def must_be(arg)
  other = arg.to_irc_casemap
  if self == other
    return true
  else
    warn "Casemap mismatch (#{self.inspect} != #{other.inspect})"
    return false
  end
end

#to_irc_casemapObject

Return a Casemap based on the receiver



104
105
106
# File 'lib/rbot/irc.rb', line 104

def to_irc_casemap
  self
end

#to_sObject

As a String we return our name



116
117
118
# File 'lib/rbot/irc.rb', line 116

def to_s
  @key.to_s
end

#upperObject

Retrieve the ‘uppercase characters’ of this Casemap



92
93
94
# File 'lib/rbot/irc.rb', line 92

def upper
  @@casemaps[@key][:upper]
end