HTMLToken.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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");
  14. builder.append(" { name: '");
  15. builder.append(m_doctype.name);
  16. builder.append("' }");
  17. break;
  18. case HTMLToken::Type::StartTag:
  19. builder.append("StartTag");
  20. break;
  21. case HTMLToken::Type::EndTag:
  22. builder.append("EndTag");
  23. break;
  24. case HTMLToken::Type::Comment:
  25. builder.append("Comment");
  26. break;
  27. case HTMLToken::Type::Character:
  28. builder.append("Character");
  29. break;
  30. case HTMLToken::Type::EndOfFile:
  31. builder.append("EndOfFile");
  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: '");
  38. builder.append(tag_name());
  39. builder.append("', { ");
  40. for (auto& attribute : m_tag.attributes) {
  41. builder.append(attribute.local_name);
  42. builder.append("=\"");
  43. builder.append(attribute.value);
  44. builder.append("\" ");
  45. }
  46. builder.append("} }");
  47. }
  48. if (type() == HTMLToken::Type::Comment || type() == HTMLToken::Type::Character) {
  49. builder.append(" { data: '");
  50. builder.append(m_comment_or_character.data);
  51. builder.append("' }");
  52. }
  53. if (type() == HTMLToken::Type::Character) {
  54. builder.appendff("@{}:{}", m_start_position.line, m_start_position.column);
  55. } else {
  56. builder.appendff("@{}:{}-{}:{}", m_start_position.line, m_start_position.column, m_end_position.line, m_end_position.column);
  57. }
  58. return builder.to_string();
  59. }
  60. }