platform/packages/inflection3/lib/src/snake_case.dart

25 lines
810 B
Dart
Raw Normal View History

2021-05-02 08:39:25 +00:00
//library inflection2.snake_case;
import 'dart:convert';
2021-05-17 15:10:07 +00:00
final _underscoreRE0 = RegExp(r'''([A-Z\d]+)([A-Z][a-z])''');
final _underscoreRE1 = RegExp(r'''([a-z\d])([A-Z])''');
final _underscoreRE2 = RegExp(r'[-\s]');
2021-05-02 08:39:25 +00:00
class SnakeCaseEncoder extends Converter<String, String> {
const SnakeCaseEncoder();
/// Converts the input [phrase] to 'spinal case', i.e. a hyphen-delimited,
/// lowercase form. Also known as 'kebab case' or 'lisp case'.
@override
String convert(String phrase) {
return phrase
2021-05-17 15:10:07 +00:00
.replaceAllMapped(_underscoreRE0, (match) => '${match[1]}_${match[2]}')
.replaceAllMapped(_underscoreRE1, (match) => '${match[1]}_${match[2]}')
.replaceAll(_underscoreRE2, '_')
2021-05-02 08:39:25 +00:00
.toLowerCase();
}
}
2021-05-17 15:10:07 +00:00
const Converter<String, String> SNAKE_CASE = SnakeCaseEncoder();