Class: String

Inherits:
Object
  • Object
show all
Defined in:
lib/gruber-case.rb

Instance Method Summary collapse

Instance Method Details

#grubercaseObject



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
# File 'lib/gruber-case.rb', line 5

def grubercase
small_words = %w( a an and as at but by en for if in of on or the to v[.]? via vs[.]? )
small_re = small_words.join('|')

line = ""
self.split(/( [:.;?!][ ] | (?:[ ]|^)["“] )/x).each do |s|

  s.gsub!(/ \b( [[:alpha:]] [[:lower:].'’]* )\b /x) do |w|
    # Skip words with inline dots, e.g. "del.icio.us" or "example.com"
    (w =~ / [[:alpha:]] [.] [[:alpha:]] /x) ? w : w.capitalize
  end #gsub!

  # Lowercase our list of small words:
  s.gsub!(/\b(#{small_re})\b/io) { |w| w.downcase }

  # If the first word in the title is a small word, then capitalize it:
  s.gsub!(/\A([[:punct:]]*)(#{small_re})\b/io) { |w| $1 + $2.capitalize }

  # If the last word in the title is a small word, then capitalize it:
  s.gsub!(/\b(#{small_re})([[:punct:]]*)\Z/io) { |w| $1.capitalize + $2 }

  # Append current substring to output
  line += s

end #each
  
# Special Cases:
line.gsub!(/ V(s?)\. /, ' v\1. ')               # "v." and "vs."
line.gsub!(/(['’])S\b/, '\1s')                  # 'S (otherwise you get "the SEC'S decision")
line.gsub!(/\b(AT&T|Q&A)\b/i) { |w| w.upcase }  # "AT&T" and "Q&A", which get tripped up by
                                                # self-contained small words "at" and "a"

line
end

#namecaseObject



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/gruber-case.rb', line 40

def namecase
  small_words = ["'s", "'t", "aan", "aan 't", "aan de", "aan den", "aan der", "aan het", "al", "auf", "aus", "bij", "bij 't", "bij de", "bij den", "bij het", "boven d'", "d'", "da[s]?", "dalla", "de", "de die", "de die le", "de l'", "de la", "de las", "de le", "de van der", "del", "della", "den", "der", "des", "di", "do[s]?", "el", "het", "in", "in 't", "in de", "in den", "in der", "in het", "onder", "onder 't", "onder de", "onder den", "onder het", "op", "op 't", "op de", "op den", "op der", "op gen", "op het", "op ten", "over", "over 't", "over de", "over den", "over het", "saint", "st", "ste", "te", "ten", "ter", "tot", "uijt", "uijt 't", "uijt de", "uijt den", "uijt het", "uijt te de", "uijt ten", "uit", "uit 't", "uit de", "uit den", "uit het", "uit te de", "uit ten", "van 't", "van de", "van de l'", "van den", "van der", "van gen", "van het", "van la", "van ter", "van van de", "vander", "ver", "voor", "voor de", "voor den", "voor in 't"]
  small_re = small_words.join('|')
  s = self.split(" ").map do |word| 
    result = word.split("-").map(&:capitalize).join("-")
    result.upcase! if result =~ /([a-z]\.){1,3}/i
    result
  end.join(" ")
  s.gsub!(/'\w/io) { |w| w.upcase }
  s.gsub!(/\b(#{small_re})\b/io) { |w| w.downcase }
  s
end