From b852f3f4171e5084b28335b3e885887d669da7e1 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 15 Feb 2026 13:00:33 +0100 Subject: Add __str__ methods to support gemtext manipulation tools --- gemini-to-web/src/gemini_to_web/parser.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'gemini-to-web/src') diff --git a/gemini-to-web/src/gemini_to_web/parser.py b/gemini-to-web/src/gemini_to_web/parser.py index 358cada..214f301 100644 --- a/gemini-to-web/src/gemini_to_web/parser.py +++ b/gemini-to-web/src/gemini_to_web/parser.py @@ -106,6 +106,9 @@ def parse(gemtext: str) -> abc.Generator[GemElement]: class TextLine: text: str + def __str__(self): + return self.text + @dataclasses.dataclass class PreformattedTextLine(TextLine): @@ -140,6 +143,11 @@ class LinkLine: return LinkLine(parts[0]) return LinkLine(parts[0], parts[1]) + def __str__(self): + if self.link_name: + return f"=> {self.url} {self.link_name}" + return f"=> {self.url}" + @dataclasses.dataclass class PreformattingToggleLine: @@ -162,6 +170,11 @@ class PreformattingToggleLine: line: typing.Optional[str] = line if line else None return PreformattingToggleLine(line) + def __str__(self): + if self.alt_text: + return f"```{self.alt_text}" + return "```" + @dataclasses.dataclass class HeadingLine: @@ -183,6 +196,10 @@ class HeadingLine: return None return HeadingLine(len(parts[0]), parts[1]) + def __str__(self): + token = "#" * self.level + return f"{token} {self.heading_text}" + @dataclasses.dataclass class ListItem: @@ -200,6 +217,9 @@ class ListItem: return None return ListItem(line.removeprefix("* ")) + def __str__(self): + return f"* {self.text}" + @dataclasses.dataclass class QuoteLine: @@ -217,6 +237,9 @@ class QuoteLine: return None return QuoteLine(line.removeprefix("> ")) + def __str__(self): + return f"> {self.text}" + def cli_parse(): import json, sys -- cgit v1.2.3