underscore function

String underscore(
  1. String string
)

Returns an underscored string.

Example: print(underscore("DartVM DartCore")); => dart_vm dart_core

Implementation

String underscore(String string) {
  if (string.isEmpty) {
    return string;
  }

  var sb = StringBuffer();
  var separate = false;
  final characters = Characters(string);
  for (final s in characters) {
    final runes = s.runes;
    var flag = 0;
    if (runes.length == 1) {
      var c = runes.first;
      if (c <= _ASCII_END) {
        flag = _ascii[c];
      }
    }

    if (separate && flag & _UPPER != 0) {
      sb.write('_');
      sb.write(s.toLowerCase());
      separate = true;
    } else {
      if (flag & _ALPHA_NUM != 0) {
        separate = true;
      } else if (flag & _UNDERSCORE != 0 && separate) {
        separate = true;
      } else {
        separate = false;
      }

      sb.write(s.toLowerCase());
    }
  }

  return sb.toString();
}