HTMLToken.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/HTML/Parser/HTMLToken.h>
  7. namespace Web::HTML {
  8. String HTMLToken::to_string() const
  9. {
  10. StringBuilder builder;
  11. switch (type()) {
  12. case HTMLToken::Type::DOCTYPE:
  13. builder.append("DOCTYPE"sv);
  14. builder.append(" { name: '"sv);
  15. builder.append(doctype_data().name);
  16. builder.append("' }"sv);
  17. break;
  18. case HTMLToken::Type::StartTag:
  19. builder.append("StartTag"sv);
  20. break;
  21. case HTMLToken::Type::EndTag:
  22. builder.append("EndTag"sv);
  23. break;
  24. case HTMLToken::Type::Comment:
  25. builder.append("Comment"sv);
  26. break;
  27. case HTMLToken::Type::Character:
  28. builder.append("Character"sv);
  29. break;
  30. case HTMLToken::Type::EndOfFile:
  31. builder.append("EndOfFile"sv);
  32. break;
  33. case HTMLToken::Type::Invalid:
  34. VERIFY_NOT_REACHED();
  35. }
  36. if (type() == HTMLToken::Type::StartTag || type() == HTMLToken::Type::EndTag) {
  37. builder.append(" { name: '"sv);
  38. builder.append(tag_name());
  39. builder.append("', { "sv);
  40. for_each_attribute([&](auto& attribute) {
  41. builder.append(attribute.local_name);
  42. builder.append("=\""sv);
  43. builder.append(attribute.value);
  44. builder.append("\" "sv);
  45. return IterationDecision::Continue;
  46. });
  47. builder.append("} }"sv);
  48. }
  49. if (is_comment()) {
  50. builder.append(" { data: '"sv);
  51. builder.append(comment());
  52. builder.append("' }"sv);
  53. }
  54. if (is_character()) {
  55. builder.append(" { data: '"sv);
  56. builder.append_code_point(code_point());
  57. builder.append("' }"sv);
  58. }
  59. if (type() == HTMLToken::Type::Character) {
  60. builder.appendff("@{}:{}", m_start_position.line, m_start_position.column);
  61. } else {
  62. builder.appendff("@{}:{}-{}:{}", m_start_position.line, m_start_position.column, m_end_position.line, m_end_position.column);
  63. }
  64. return MUST(builder.to_string());
  65. }
  66. }