first step to transform renderers into their own objects
This commit is contained in:
parent
69db426ab8
commit
f2944d35af
51
offpunk.py
51
offpunk.py
|
@ -190,7 +190,23 @@ standard_ports = {
|
|||
# Gemtext Rendering Engine
|
||||
# this method takes the original gemtext and returns
|
||||
# [rendered_text,links_table]
|
||||
def render_gemtext(gemtext, width=80):
|
||||
class GemtextRenderer():
|
||||
def __init__(self,content):
|
||||
self.body = content
|
||||
self.rendered_text = None
|
||||
self.links = None
|
||||
|
||||
def get_body(self):
|
||||
if self.rendered_text == None :
|
||||
self.rendered_text, self.links = self.render_gemtext(self.body)
|
||||
return self.rendered_text
|
||||
|
||||
def get_links(self):
|
||||
if self.links == None :
|
||||
self.rendered_text, self.links = self.render_gemtext(self.body)
|
||||
return self.links
|
||||
|
||||
def render_gemtext(self,gemtext, width=80):
|
||||
links = []
|
||||
preformatted = False
|
||||
rendered_text = ""
|
||||
|
@ -258,9 +274,24 @@ def render_gemtext(gemtext, width=80):
|
|||
rendered_text += wrap_line(line).rstrip() + "\n"
|
||||
return rendered_text, links
|
||||
|
||||
class HtmlRenderer():
|
||||
def __init__(self,content):
|
||||
self.body = content
|
||||
self.rendered_text = None
|
||||
self.links = None
|
||||
|
||||
def get_body(self):
|
||||
if self.rendered_text == None :
|
||||
self.rendered_text, self.links = self.render_html(self.body)
|
||||
return self.rendered_text
|
||||
|
||||
def get_links(self):
|
||||
if self.links == None :
|
||||
self.rendered_text, self.links = self.render_html(self.body)
|
||||
return self.links
|
||||
# Our own HTML engine (crazy, isn’t it?)
|
||||
# Return [rendered_body, list_of_links]
|
||||
def render_html(body,width=80):
|
||||
def render_html(self,body,width=80):
|
||||
if not _DO_HTML:
|
||||
print("HTML document detected. Please install python-bs4 and python-readability.")
|
||||
return
|
||||
|
@ -365,9 +396,9 @@ def render_html(body,width=80):
|
|||
# Mapping mimetypes with renderers
|
||||
# (any content with a mimetype text/* not listed here will be rendered with render_gemtext)
|
||||
_FORMAT_RENDERERS = {
|
||||
"text/gemini": render_gemtext,
|
||||
"text/html" : render_html,
|
||||
"text/xml" : render_html
|
||||
"text/gemini": GemtextRenderer,
|
||||
"text/html" : HtmlRenderer,
|
||||
"text/xml" : HtmlRenderer
|
||||
}
|
||||
# Offpunk is organized as follow:
|
||||
# - a GeminiClient instance which handles the browsing of GeminiItems (= pages).
|
||||
|
@ -560,12 +591,12 @@ class GeminiItem():
|
|||
if not self.renderer:
|
||||
mime = self.get_mime()
|
||||
if mime in _FORMAT_RENDERERS:
|
||||
self.renderer = _FORMAT_RENDERERS[mime]
|
||||
func = _FORMAT_RENDERERS[mime]
|
||||
self.renderer = func(self.get_body())
|
||||
if self.renderer:
|
||||
body = self.get_body()
|
||||
r_body, links = self.renderer(body)
|
||||
self.__make_links(links)
|
||||
to_return = self._make_terminal_title() + r_body
|
||||
body = self.renderer.get_body()
|
||||
self.__make_links(self.renderer.get_links())
|
||||
to_return = self._make_terminal_title() + body
|
||||
return to_return
|
||||
else:
|
||||
return None
|
||||
|
|
Loading…
Reference in New Issue