diff --git a/CHANGELOG b/CHANGELOG
index a335059..087f43c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -12,7 +12,8 @@
- offpunk: "gus" was broken, it is functionnal again
- opnk/offpunk: more informative prompt in less
- ansicat: added support for HTML description elements
and (by Bert Livens)
-- opnk: added "--mode" command-line argument
+- opnk: added "--mode" command-line argument (bug #37)
+- offpunk: support for "preformatted" theming (bug #38)
## 2.1 - December 15th 2023
- freshly updated gemtext/rss links are highlighted ("new_link" theme option)
diff --git a/ansicat.py b/ansicat.py
index e4ef7ed..713e142 100755
--- a/ansicat.py
+++ b/ansicat.py
@@ -365,15 +365,27 @@ class AbstractRenderer():
# Beware, blocks are not wrapped nor indented and left untouched!
# They are mostly useful for pictures and preformatted text.
- def add_block(self,intext):
+ def add_block(self,intext,theme=None):
# If necessary, we add the title before a block
self._title_first()
# we don’t want to indent blocks
self._endline()
self._disable_indents()
- self.final_text += self.current_indent + intext
- self.new_paragraph = False
- self._endline()
+ #we have to apply the theme for every line in the intext
+ #applying theme to preformatted is controversial as it could change it
+ if theme:
+ block = ""
+ lines = intext.split("\n")
+ for l in lines:
+ self.open_theme(theme)
+ self.last_line += self.current_indent + l
+ self.close_theme(theme)
+ self._endline()
+ #one thing is sure : we need to keep unthemed blocks for images!
+ else:
+ self.final_text += self.current_indent + intext
+ self.new_paragraph = False
+ self._endline()
self._enable_indents()
def add_text(self,intext):
@@ -641,7 +653,7 @@ class GemtextRenderer(AbstractRenderer):
r.close_theme("preformatted")
elif preformatted:
# infinite line to not wrap preformated
- r.add_block(line+"\n")
+ r.add_block(line+"\n",theme="preformatted")
elif len(line.strip()) == 0:
r.newparagraph(force=True)
elif line.startswith("=>"):
@@ -1122,7 +1134,7 @@ class HtmlRenderer(AbstractRenderer):
recursive_render(child,indent=indent,preformatted=True)
elif element.name in ["pre"]:
r.newparagraph()
- r.add_block(element.text)
+ r.add_block(element.text,theme="preformatted")
r.newparagraph()
elif element.name in ["li"]:
r.startindent(" • ",sub=" ")