23 /* case */ |
23 /* case */ |
24 |
24 |
25 def lowercase(str: String): String = str.toLowerCase(Locale.ROOT) |
25 def lowercase(str: String): String = str.toLowerCase(Locale.ROOT) |
26 def uppercase(str: String): String = str.toUpperCase(Locale.ROOT) |
26 def uppercase(str: String): String = str.toUpperCase(Locale.ROOT) |
27 |
27 |
28 def capitalize(str: String): String = |
28 def capitalized(str: String): String = |
29 if (str.length == 0) str |
29 if (str.length == 0) str |
30 else { |
30 else { |
31 val n = Character.charCount(str.codePointAt(0)) |
31 val n = Character.charCount(str.codePointAt(0)) |
32 uppercase(str.substring(0, n)) + lowercase(str.substring(n)) |
32 uppercase(str.substring(0, n)) + lowercase(str.substring(n)) |
33 } |
33 } |
34 |
34 |
35 def perhaps_capitalize(str: String): String = |
35 def perhaps_capitalized(str: String): String = |
36 if (Codepoint.iterator(str).forall(c => Character.isLowerCase(c) || Character.isDigit(c))) |
36 if (Codepoint.iterator(str).forall(c => Character.isLowerCase(c) || Character.isDigit(c))) |
37 capitalize(str) |
37 capitalized(str) |
38 else str |
38 else str |
39 |
39 |
40 object Case { |
40 object Case { |
41 def apply(c: Case, str: String): String = |
41 def apply(c: Case, str: String): String = |
42 c match { |
42 c match { |
43 case Case.lowercase => Word.lowercase(str) |
43 case Case.lowercase => Word.lowercase(str) |
44 case Case.uppercase => Word.uppercase(str) |
44 case Case.uppercase => Word.uppercase(str) |
45 case Case.capitalized => Word.capitalize(str) |
45 case Case.capitalized => Word.capitalized(str) |
46 } |
46 } |
47 def unapply(str: String): Option[Case] = |
47 def unapply(str: String): Option[Case] = |
48 if (str.nonEmpty) { |
48 if (str.nonEmpty) { |
49 if (Codepoint.iterator(str).forall(Character.isLowerCase)) Some(Case.lowercase) |
49 if (Codepoint.iterator(str).forall(Character.isLowerCase)) Some(Case.lowercase) |
50 else if (Codepoint.iterator(str).forall(Character.isUpperCase)) Some(Case.uppercase) |
50 else if (Codepoint.iterator(str).forall(Character.isUpperCase)) Some(Case.uppercase) |