summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java
blob: 7e694359c7d826ca4b15a67113fca7b0f45b48d3 (plain)
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
50
51
52
53
54
55
56
57
58
59
package org.zwobble.hobgoblin.compiler.util;

import java.util.Locale;

public class Casing {
    private Casing() {}

    public static String lowerCamelCaseToUpperCamelCase(String name) {
        return name.substring(0, 1).toUpperCase(Locale.ROOT) + name.substring(1);
    }

    public static String upperCamelCaseToLowerCamelCase(String name) {
        return name.substring(0, 1).toLowerCase(Locale.ROOT) + name.substring(1);
    }

    public static String lowerCamelCaseToUpperCase(String lowerCamelCase) {
        var upperCase = new StringBuilder();

        for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) {
            var character = lowerCamelCase.charAt(characterIndex);
            if (Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) {
                upperCase.append('_');
                upperCase.append(character);
            } else {
                upperCase.append(Character.toUpperCase(character));
            }
        }

        return upperCase.toString();
    }

    public static String lowerCamelCaseToSnakeCase(String lowerCamelCase) {
        var snakeCase = new StringBuilder();

        for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) {
            var character = lowerCamelCase.charAt(characterIndex);
            if (Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) {
                snakeCase.append('_');
            }
            snakeCase.append(Character.toLowerCase(character));
        }

        return snakeCase.toString();
    }

    public static String upperCamelCaseToSnakeCase(String lowerCamelCase) {
        var snakeCase = new StringBuilder();

        for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) {
            var character = lowerCamelCase.charAt(characterIndex);
            if (characterIndex != 0 && Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) {
                snakeCase.append('_');
            }
            snakeCase.append(Character.toLowerCase(character));
        }

        return snakeCase.toString();
    }
}