GeneratorUtil.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * Copyright (c) 2019-2021, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/JsonObject.h>
  9. #include <AK/String.h>
  10. #include <AK/Vector.h>
  11. #include <LibCore/File.h>
  12. #include <ctype.h>
  13. inline String title_casify(StringView dashy_name)
  14. {
  15. auto parts = dashy_name.split_view('-');
  16. StringBuilder builder;
  17. for (auto& part : parts) {
  18. if (part.is_empty())
  19. continue;
  20. builder.append(toupper(part[0]));
  21. if (part.length() == 1)
  22. continue;
  23. builder.append(part.substring_view(1, part.length() - 1));
  24. }
  25. return MUST(builder.to_string());
  26. }
  27. inline String camel_casify(StringView dashy_name)
  28. {
  29. auto parts = dashy_name.split_view('-');
  30. StringBuilder builder;
  31. bool first = true;
  32. for (auto& part : parts) {
  33. if (part.is_empty())
  34. continue;
  35. char ch = part[0];
  36. if (!first)
  37. ch = toupper(ch);
  38. else
  39. first = false;
  40. builder.append(ch);
  41. if (part.length() == 1)
  42. continue;
  43. builder.append(part.substring_view(1, part.length() - 1));
  44. }
  45. return MUST(builder.to_string());
  46. }
  47. inline String snake_casify(StringView dashy_name)
  48. {
  49. // FIXME: We don't really need to convert dashy_name to a String first, but currently
  50. // all the `replace` functions that take a StringView return ByteString.
  51. return MUST(MUST(String::from_utf8(dashy_name)).replace("-"sv, "_"sv, ReplaceMode::All));
  52. }
  53. inline ErrorOr<JsonValue> read_entire_file_as_json(StringView filename)
  54. {
  55. auto file = TRY(Core::File::open(filename, Core::File::OpenMode::Read));
  56. auto json_size = TRY(file->size());
  57. auto json_data = TRY(ByteBuffer::create_uninitialized(json_size));
  58. TRY(file->read_until_filled(json_data.bytes()));
  59. return JsonValue::from_string(json_data);
  60. }