From 33e50889f2553298d118e1a98f7328a57989312b Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Mon, 19 Aug 2024 22:14:03 -0600 Subject: [PATCH] LibWeb: Add CustomStringConvertible extension for HTMLToken types --- Tests/LibWeb/TestHTMLTokenizerSwift.swift | 2 + .../LibWeb/HTML/Parser/HTMLToken.swift | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/Tests/LibWeb/TestHTMLTokenizerSwift.swift b/Tests/LibWeb/TestHTMLTokenizerSwift.swift index de49aef3de3..6db0c1a0db3 100644 --- a/Tests/LibWeb/TestHTMLTokenizerSwift.swift +++ b/Tests/LibWeb/TestHTMLTokenizerSwift.swift @@ -26,6 +26,8 @@ struct TestHTMLTokenizerSwift { default_token.type = .Character(codePoint: "a") precondition(default_token.isCharacter()) + print("\(default_token)", to: &standardError) + print("HTMLToken types pass", to: &standardError) } diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.swift b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.swift index 56a8c26a7fe..6daa93f98f5 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.swift +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLToken.swift @@ -76,3 +76,45 @@ public class HTMLToken { self.type = type } } + +extension HTMLToken.Position: Equatable, CustomStringConvertible { + public var description: String { + return "\(self.line):\(self.column)" + } +} + +extension HTMLToken.TokenType: CustomStringConvertible { + // FIXME: Print attributes for start/end tags + public var description: String { + switch self { + case .Invalid: + return "Invalid" + case .DOCTYPE(let name, let publicIdentifier, let systemIdentifier, let forceQuirksMode): + return "DOCTYPE(name: \(name ?? "nil"), publicIdentifier: \(publicIdentifier ?? "nil"), systemIdentifier: \(systemIdentifier ?? "nil"), forceQuirksMode: \(forceQuirksMode))" + case .StartTag(let tagName, let selfClosing, let selfClosingAcknowledged, let attributes): + return "StartTag(tagName: \(tagName), selfClosing: \(selfClosing), selfClosingAcknowledged: \(selfClosingAcknowledged), attributes: \(attributes))" + case .EndTag(let tagName, let selfClosing, let selfClosingAcknowledged, let attributes): + return "EndTag(tagName: \(tagName), selfClosing: \(selfClosing), selfClosingAcknowledged: \(selfClosingAcknowledged), attributes: \(attributes))" + case .Comment(let data): + return "Comment(data: \(data))" + case .Character(let codePoint): + return "Character(codePoint: \(codePoint))" + case .EndOfFile: + return "EndOfFile" + } + } +} + +extension HTMLToken: CustomStringConvertible { + public var description: String { + if (self.startPosition == Position()) { + return "HTMLToken(type: \(self.type))" + } + else if (self.endPosition == Position()) { + return "HTMLToken(type: \(self.type))@\(self.startPosition)" + } + else { + return "HTMLToken(type: \(self.type))@\(self.startPosition)-\(self.endPosition)" + } + } +}