More changes from the live server.
[rails.git] / lib / tags.rb
1 module Tags
2   def self.join(tags)
3     joined = tags.collect { |k,v| "#{escape_string(k)}=#{escape_string(v)}" }.join(';')
4     joined = '' if joined.nil?
5     return joined
6   end
7
8   def self.escape_string(tag)
9     return tag.gsub(/[;=\\]/) { |v| escape_char(v) }
10   end
11
12   def self.escape_char(v)
13     case v
14       when ';' then return '\\s'
15       when '=' then return '\\e'
16     end
17     return '\\\\'
18   end
19
20   def self.split(tags)
21     tags.split(';').each do |tag|
22       key,val = tag.split('=').collect { |s| s.strip }
23       key = '' if key.nil?
24       val = '' if val.nil?
25       if key != '' && val != ''
26         yield unescape_string(key),unescape_string(val)
27       end
28     end
29   end
30
31   def self.unescape_string(tag)
32     return tag.gsub(/\\[se\\]/) { |v| unescape_char(v) }
33   end
34
35   def self.unescape_char(v)
36     case v
37       when '\\s' then return ';'
38       when '\\e' then return '='
39     end
40     return '\\'
41   end
42 end