/brstring/lib/brstring/string_portuguese.rb

https://github.com/danicuki/brazilian-rails · Ruby · 153 lines · 64 code · 18 blank · 71 comment · 10 complexity · 09b5c03817ef6dce9c6604deb2e59649 MD5 · raw file

  1. # encoding: UTF-8
  2. class String
  3. MINUSCULAS_COM_ACENTO = 'áéíóúâêîôûàèìòùäëïöüãõñç'
  4. MAIUSCULAS_COM_ACENTO = 'ÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙÄËÏÖÜÃÕÑÇ'
  5. MINUSCULAS = "abcdefghijklmnopqrstuvwxyz#{MINUSCULAS_COM_ACENTO}"
  6. MAIUSCULAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ#{MAIUSCULAS_COM_ACENTO}"
  7. # Normaliza nomes proprios
  8. #
  9. # Exemplo:
  10. # String.nome_proprio('maria de souza dos santos e silva da costa') ==> 'Maria de Souza dos Santos e Silva da Costa'
  11. def self.nome_proprio(texto)
  12. return texto if texto.blank?
  13. self.titleize(texto).gsub(/ D(a|e|o|as|os) /, ' d\1 ').gsub(/ E /, ' e ')
  14. end
  15. # Normaliza nomes proprios
  16. #
  17. # Exemplo:
  18. # 'maria de souza dos santos e silva da costa'.nome_proprio ==> 'Maria de Souza dos Santos e Silva da Costa'
  19. def nome_proprio
  20. String.nome_proprio(self)
  21. end
  22. # Normaliza nomes proprios na própria instância.
  23. #
  24. # Exemplo:
  25. # texto = 'maria de souza dos santos e silva da costa'
  26. # texto.nome_proprio!
  27. # texto ==> 'Maria de Souza dos Santos e Silva da Costa'
  28. def nome_proprio!
  29. self.gsub!(/^.*$/, String.nome_proprio(self)) if self
  30. end
  31. # Remove as letras acentuadas
  32. #
  33. # Exemplo:
  34. # String.remover_acentos('texto está com acentuação') ==> 'texto esta com acentuacao'
  35. def self.remover_acentos(texto)
  36. return texto if texto.blank?
  37. texto = texto.gsub(/[á|à|ã|â|ä]/, 'a').gsub(/(é|è|ê|ë)/, 'e').gsub(/(í|ì|î|ï)/, 'i').gsub(/(ó|ò|õ|ô|ö)/, 'o').gsub(/(ú|ù|û|ü)/, 'u')
  38. texto = texto.gsub(/(Á|À|Ã|Â|Ä)/, 'A').gsub(/(É|È|Ê|Ë)/, 'E').gsub(/(Í|Ì|Î|Ï)/, 'I').gsub(/(Ó|Ò|Õ|Ô|Ö)/, 'O').gsub(/(Ú|Ù|Û|Ü)/, 'U')
  39. texto = texto.gsub(/ñ/, 'n').gsub(/Ñ/, 'N')
  40. texto = texto.gsub(/ç/, 'c').gsub(/Ç/, 'C')
  41. texto
  42. end
  43. # Remove as letras acentuadas
  44. #
  45. # Exemplo:
  46. # 'texto está com acentuação'.remover_acentos ==> 'texto esta com acentuacao'
  47. def remover_acentos
  48. String.remover_acentos(self)
  49. end
  50. # Remove as letras acentuadas na própria instância.
  51. #
  52. # Exemplo:
  53. # texto = 'texto está com acentuação'
  54. # texto.remover_acentos!
  55. # texto ==> 'texto esta com acentuacao'
  56. def remover_acentos!
  57. self.gsub!(/^.*$/, String.remover_acentos(self)) if self
  58. end
  59. # Retorna uma string com caracteres maiusculos
  60. #
  61. # Exemplo:
  62. # String.upcase('texto com acentuação' ==> 'TEXTO COM ACENTUAÇÃO'
  63. def self.upcase(texto)
  64. return texto if texto.blank?
  65. texto.tr(MINUSCULAS, MAIUSCULAS)
  66. end
  67. # Retorna uma string com caracteres maiusculos
  68. #
  69. # Exemplo:
  70. # 'texto com acentuação'.upcase ==> 'TEXTO COM ACENTUAÇÃO'
  71. def upcase
  72. String.upcase(self)
  73. end
  74. # Converte para caracteres maiusculos na própria instância
  75. #
  76. # Exemplo:
  77. # texto = 'texto com acentuação'
  78. # texto.upcase
  79. # texto ==> 'TEXTO COM ACENTUAÇÃO'
  80. def upcase!
  81. self.gsub!(/^.*$/, String.upcase(self)) if self
  82. end
  83. # Retorna uma string com caracteres minúsculos
  84. #
  85. # Exemplo:
  86. # String.downcase('TEXTO COM ACENTUAÇÃO') ==> 'texto com acentuação'
  87. def self.downcase(texto)
  88. return texto if texto.blank?
  89. texto.tr(MAIUSCULAS, MINUSCULAS)
  90. end
  91. # Retorna uma string com caracteres minúsculos
  92. #
  93. # Exemplo:
  94. # 'TEXTO COM ACENTUAÇÃO'.downcase ==> 'texto com acentuação'
  95. def downcase
  96. String.downcase(self)
  97. end
  98. # Converte para caracteres minúsculos na própria instância
  99. #
  100. # Exemplo:
  101. # texto = 'TEXTO COM ACENTUAÇÃO'
  102. # texto.downcase
  103. # texto ==> 'texto com acentuação'
  104. def downcase!
  105. self.gsub!(/^.*$/, String.downcase(self)) if self
  106. end
  107. # Passa a primeira letra de cada palavra para maiúscula e as demais para minúsculas.
  108. #
  109. # Exemplo:
  110. # String.titleize('o livro esta sobre a mesa!') ==> 'O Livro Esta Sobre A Mesa!'
  111. def self.titleize(texto)
  112. return texto if texto.blank?
  113. texto = texto.downcase
  114. texto = texto.downcase
  115. texto.mb_chars[0] = texto.mb_chars.first.upcase
  116. texto = texto.gsub(/\s[a-z#{String::MINUSCULAS_COM_ACENTO}]/) {|a| a.upcase }
  117. texto
  118. end
  119. # Passa a primeira letra de cada palavra para maiúscula e as demais para minúsculas.
  120. #
  121. # Exemplo:
  122. # 'o livro esta sobre a mesa!'.titleize ==> 'O Livro Esta Sobre A Mesa!'
  123. def titleize
  124. String.titleize(self)
  125. end
  126. # Passa a primeira letra de cada palavra para maiúscula e as demais para minúsculas na própria instância.
  127. #
  128. # Exemplo:
  129. # texto = 'o livro esta sobre a mesa!'
  130. # texto.titleize!
  131. # texto ==> 'O Livro Esta Sobre A Mesa!'
  132. def titleize!
  133. self.gsub!(/^.*$/, String.titleize(self)) if self
  134. end
  135. end