85 lines
2.6 KiB
Text
85 lines
2.6 KiB
Text
(* String case conversion functions in Mathematica *)
|
|
|
|
snakeToCamelCase[nam_String, sep_String : "[_]+", lcmiddle_ : False] := Module[{words},
|
|
If[nam == "", Return[nam]];
|
|
words = StringSplit[StringTrim[nam], RegularExpression[sep]];
|
|
If[lcmiddle, words = ToLowerCase /@ words];
|
|
words[[2 ;;]] = StringJoin[ToUpperCase[StringTake[#, 1]], StringDrop[#, 1]] & /@ Select[words[[2 ;;]], StringLength[#] > 0 &];
|
|
StringJoin[words]
|
|
]
|
|
|
|
spaceToCamelCase[nam_String] := snakeToCamelCase[nam, "\\s+"]
|
|
|
|
kebabToCamelCase[nam_String] := snakeToCamelCase[nam, "[\\-]+"]
|
|
|
|
periodToCamelCase[nam_String] := snakeToCamelCase[nam, "[\\.]+"]
|
|
|
|
allsepToCamelCase[nam_String] := snakeToCamelCase[nam, "[ \\-_\\.]+"]
|
|
|
|
lowermiddleAllsepToCamelCase[nam_String] := snakeToCamelCase[nam, "[ \\-_\\.]+", True]
|
|
|
|
camelToSnakeCase[nam_String, sep_String : "_", allsep_String : "[_]+", lcmiddle_ : True] := Module[{result, sep1, words},
|
|
result = StringReplace[StringTrim[nam], RegularExpression["([A-Z]+)"] -> sep <> "$1"];
|
|
sep1 = If[sep == ".", "\\.", sep];
|
|
If[lcmiddle,
|
|
words = Select[StringSplit[result, sep1], StringLength[#] > 0 &];
|
|
result = StringRiffle[ToLowerCase /@ words, sep],
|
|
words = Select[StringSplit[result, sep1], StringLength[#] > 0 &];
|
|
result = StringRiffle[StringJoin[ToLowerCase[StringTake[#, 1]], StringDrop[#, 1]] & /@ words, sep]
|
|
];
|
|
StringReplace[result, RegularExpression[allsep] -> sep]
|
|
]
|
|
|
|
preserveMidcapsCamelToSnakeCase[nam_String] := camelToSnakeCase[nam, "_", "[_]+", False]
|
|
|
|
allsepToSnakeCase[nam_String] := camelToSnakeCase[nam, "_", "[ \\-\\._]+"]
|
|
|
|
allsepToKebabCase[nam_String] := camelToSnakeCase[nam, "-", "[ \\-\\._]+"]
|
|
|
|
allsepToSpaceCase[nam_String] := camelToSnakeCase[nam, " ", "[ \\-\\._]+"]
|
|
|
|
allsepToPeriodCase[nam_String] := camelToSnakeCase[nam, ".", "[ \\-\\._]+"]
|
|
|
|
allsepToSlashCase[nam_String] := camelToSnakeCase[nam, "/", "[ \\-\\._]+"]
|
|
|
|
(* Test the functions *)
|
|
testFunctions = {
|
|
snakeToCamelCase,
|
|
spaceToCamelCase,
|
|
kebabToCamelCase,
|
|
periodToCamelCase,
|
|
allsepToCamelCase,
|
|
lowermiddleAllsepToCamelCase,
|
|
camelToSnakeCase,
|
|
preserveMidcapsCamelToSnakeCase,
|
|
allsepToSnakeCase,
|
|
allsepToKebabCase,
|
|
allsepToSpaceCase,
|
|
allsepToPeriodCase,
|
|
allsepToSlashCase
|
|
};
|
|
|
|
testStrings = {
|
|
"snakeCase",
|
|
"snake_case",
|
|
"snake-case",
|
|
"snake case",
|
|
"snake CASE",
|
|
"snake.case",
|
|
"variable_10_case",
|
|
"variable10Case",
|
|
"ɛrgo rE tHis",
|
|
"hurry-up-joe!",
|
|
"c://my-docs/happy_Flag-Day/12.doc",
|
|
" spaces "
|
|
};
|
|
|
|
Do[
|
|
Print["Testing function ", f, ":"];
|
|
Do[
|
|
Print[StringPadLeft[testString, 36], " => ", f[testString]],
|
|
{testString, testStrings}
|
|
];
|
|
Print[""],
|
|
{f, testFunctions}
|
|
]
|