// Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
extension StringExtension on String {
static final RegExp _defaultMatcher = RegExp(r'\s+|-+|_+|\.+');
Map get syntaxes => {
'camel_case': camel(),
'constant_case': constant(),
'dot_case': dot(),
'header_case': header(),
'lower_case': lower(),
'pascal_case': pascal(),
'param_case': param(),
'sentence_case': sentence(),
'title_case': title(),
'upper_case': upper(),
'snake_case': snake(),
};
/// ```dart
/// print('abcd'.capitalize()) // Abcd
/// print('Abcd'.capitalize()) // Abcd
/// ```
String capitalize() {
switch (length) {
case 0:
return this;
case 1:
return toUpperCase();
default:
return substring(0, 1).toUpperCase() + substring(1);
}
}
/// ```dart
/// print('abcd'.decapitalize()) // abcd
/// print('Abcd'.decapitalize()) // abcd
/// ```
String decapitalize() {
switch (length) {
case 0:
return this;
case 1:
return toLowerCase();
default:
return substring(0, 1).toLowerCase() + substring(1);
}
}
/// ```dart
/// print('Hello-world'.camel()) // helloWorld
/// print('hello_World'.camel()) // helloWorld
/// print('Hello World'.camel()) // helloWorld
/// print('helloWorld'.camel()) // helloWorld
/// print('long space'.camel()) // longSpace
/// ```
String camel() {
if (length > 0) {
return pascal().decapitalize();
} else {
return this;
}
}
/// ```dart
/// print('Hello World'.pascal()) // HelloWorld
/// print('helloWorld'.pascal()) // HelloWorld
/// print('long space'.pascal()) // LongSpace
/// ```
String pascal() {
switch (length) {
case 0:
return this;
case 1:
return toUpperCase();
default:
return splitMapJoin(
_defaultMatcher,
onMatch: (m) => '',
onNonMatch: (n) => n.capitalize(),
);
}
}
/// ```dart
/// print('Hello World'.constant()) // HELLO_WORLD
/// print('helloWorld'.constant()) // HELLO_WORLD
/// print('long space'.constant()) // LONG_SPACE
/// ```
String constant() {
switch (length) {
case 0:
return this;
case 1:
return toUpperCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => '_',
onNonMatch: (n) => n.toUpperCase(),
);
}
}
/// ```dart
/// print('Hello World'.dot()) // hello.world
/// print('helloWorld'.dot()) // hello.world
/// print('long space'.dot()) // long.space
/// ```
String dot() {
switch (length) {
case 0:
return this;
case 1:
return toLowerCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => '.',
onNonMatch: (n) => n.toLowerCase(),
);
}
}
/// ```dart
/// print('Hello World'.header()) // Hello-World
/// print('helloWorld'.header()) // Hello-World
/// ```
String header() {
switch (length) {
case 0:
return this;
case 1:
return toUpperCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n.toLowerCase(),
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => '-',
onNonMatch: (n) => n.capitalize(),
);
}
}
/// ```dart
/// print('Hello World'.lower()) // hello world
/// print('helloWorld'.lower()) // hello world
/// ```
String lower() {
switch (length) {
case 0:
return this;
case 1:
return toLowerCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => ' ',
onNonMatch: (n) => n.toLowerCase(),
);
}
}
/// ```dart
/// print('Hello World'.param()) // hello-world
/// print('helloWorld'.param()) // hello-world
/// print('long space'.param()) // long-space
/// ```
String param() {
switch (length) {
case 0:
return this;
case 1:
return toLowerCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => '-',
onNonMatch: (n) => n.toLowerCase(),
);
}
}
/// ```dart
/// print('Hello World'.upper()) // HELLO WORLD
/// print('helloWorld'.upper()) // HELLO WORLD
/// ```
String upper() {
switch (length) {
case 0:
return this;
case 1:
return toUpperCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => ' ',
onNonMatch: (n) => n.toUpperCase(),
);
}
}
/// ```dart
/// print('Hello World'.snake()) // hello_world
/// print('helloWorld'.snake()) // hello_world
/// print('long space'.snake()) // long_space
/// ```
String snake() {
switch (length) {
case 0:
return this;
case 1:
return toLowerCase();
default:
return splitMapJoin(
RegExp('[A-Z]'),
onMatch: (m) => ' ${m[0]}',
onNonMatch: (n) => n,
).trim().splitMapJoin(
_defaultMatcher,
onMatch: (m) => '_',
onNonMatch: (n) => n.toLowerCase(),
);
}
}
/// ```dart
/// print('Hello World'.sentence()) // Hello world
/// print('helloWorld'.sentence()) // Hello world
/// ```
String sentence() {
return lower().capitalize();
}
/// ```dart
/// print('Hello World'.title()) // Hello World
/// print('helloWorld'.title()) // Hello World
/// ```
String title() {
return header().splitMapJoin(
_defaultMatcher,
onMatch: (m) => ' ',
onNonMatch: (n) => n,
);
}
}