platform/packages/inflection2/lib/src/snake_case.dart
thomashii@dukefirehawk.com 32f3eaa5c4 Added and migrated inflection2
2021-05-02 16:39:25 +08:00

24 lines
828 B
Dart

//library inflection2.snake_case;
import 'dart:convert';
final _underscoreRE0 = new RegExp(r'''([A-Z\d]+)([A-Z][a-z])''');
final _underscoreRE1 = new RegExp(r'''([a-z\d])([A-Z])''');
final _underscoreRE2 = new RegExp(r'[-\s]');
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
.replaceAllMapped(_underscoreRE0, (match) => "${match[1]}_${match[2]}")
.replaceAllMapped(_underscoreRE1, (match) => "${match[1]}_${match[2]}")
.replaceAll(_underscoreRE2, "_")
.toLowerCase();
}
}
const Converter<String, String> SNAKE_CASE = const SnakeCaseEncoder();