clemens (owner)

Forks

  • gist: 184586 by janv Permalinks mit Umlauten created Thu Sep 10 07:44:30 -0700 2009

Revisions

gist: 2843 Download_button fork
public
Public Clone URL: git://gist.github.com/2843.git
Text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
ActionController::Base.logger.info "[Base] Loading config/initializers/" + File.basename(__FILE__)
class String
  def to_permalink
    text = self.dup
    
    replacements = {
      # replacement special character(s) to be replaced
      "A" => [ "À", "Á", "Â", "Ã", "Å"],
      "Ae" => [ "Ä", "Æ" ],
      "C" => [ "Ç" ],
      "D" => [ "Ð" ],
      "E" => [ "È", "É", "Ê", "Ë" ],
      "I" => [ "Ì", "Í", "Î", "Ï" ],
      "N" => [ "Ñ" ],
      "O" => [ "Ò", "Ó", "Ô", "Õ", "Ø" ],
      "Oe" => [ "Ö" ],
      "U" => [ "Ù", "Ú", "Û" ],
      "Ue" => [ "Ü" ],
      "Y" => [ "Ý" ],
      
      "p" => [ "Þ"],
      "a" => [ "à", "á", "â", "ã", "å" ],
      "ae" => [ "ä", "æ" ],
      "c" => [ "ç" ],
      "d" => [ "ð" ],
      "e" => [ "è", "é", "ê", "ë" ],
      "i" => [ "ì", "í", "î", "ï" ],
      "n" => [ "ñ" ],
      "o" => [ "ò", "ó", "ô", "õ", "ø" ],
      "oe" => [ "ö" ],
      "ss" => [ "ß" ],
      "u" => [ "ù", "ú", "û" ],
      "ue" => [ "ü" ],
      "y" => [ "ý" ]
    }
    
    replacements.each_pair do |replacement, search_chars|
      search_chars.each do |ch|
        text.gsub!(ch, replacement)
      end
    end
    
    text.gsub!(/([^\-\.A-Za-z0-9_])/, "-") # replace all special chars with hyphens
    text.gsub!(/([\-.][\-.]+)/, "-") # replace multiple hyphens with single hyphen
    text.gsub!(/(^[\-.]|[\-.]$)/, "") # remove leading and trailing hyphen
    
    text
  end
end