chromium/chromeos/ash/components/demo_mode/utils/dimensions_utils.cc

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chromeos/ash/components/demo_mode/utils/dimensions_utils.h"

#include "third_party/abseil-cpp/absl/strings/ascii.h"
#include "third_party/icu/source/common/unicode/bytestream.h"
#include "third_party/icu/source/common/unicode/casemap.h"

namespace ash::demo_mode {

std::string CanonicalizeDimension(const std::string& dimension_value) {
  std::string canonicalized_value;

  icu::StringByteSink<std::string> byte_sink(&canonicalized_value);
  UErrorCode error_code = U_ZERO_ERROR;
  icu::CaseMap::utf8Fold(/* options= */ 0, dimension_value, byte_sink,
                         /* edits= */ nullptr, error_code);
  canonicalized_value.erase(
      std::remove_if(canonicalized_value.begin(), canonicalized_value.end(),
                     [](unsigned char c) {
                       return absl::ascii_ispunct(c) || absl::ascii_isspace(c);
                     }),
      canonicalized_value.end());
  return canonicalized_value;
}

}  // namespace ash::demo_mode