rendering: show link preview after links
This commit is contained in:
parent
84764644df
commit
85934eedcf
|
@ -3,6 +3,7 @@ from enum import IntEnum
|
||||||
|
|
||||||
|
|
||||||
class ColorPair(IntEnum):
|
class ColorPair(IntEnum):
|
||||||
|
# Colors for specific Gemtext line type.
|
||||||
NORMAL = 0
|
NORMAL = 0
|
||||||
ERROR = 1
|
ERROR = 1
|
||||||
LINK = 2
|
LINK = 2
|
||||||
|
@ -12,6 +13,9 @@ class ColorPair(IntEnum):
|
||||||
TITLE_3 = 6
|
TITLE_3 = 6
|
||||||
PREFORMATTED = 7
|
PREFORMATTED = 7
|
||||||
BLOCKQUOTE = 8
|
BLOCKQUOTE = 8
|
||||||
|
|
||||||
|
# Colors for other usage in the browser.
|
||||||
|
LINK_PREVIEW = 9
|
||||||
DEBUG = 99
|
DEBUG = 99
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,4 +30,5 @@ def init_colors():
|
||||||
curses.init_pair(ColorPair.TITLE_3, curses.COLOR_MAGENTA, -1)
|
curses.init_pair(ColorPair.TITLE_3, curses.COLOR_MAGENTA, -1)
|
||||||
curses.init_pair(ColorPair.PREFORMATTED, curses.COLOR_YELLOW, -1)
|
curses.init_pair(ColorPair.PREFORMATTED, curses.COLOR_YELLOW, -1)
|
||||||
curses.init_pair(ColorPair.BLOCKQUOTE, curses.COLOR_CYAN, -1)
|
curses.init_pair(ColorPair.BLOCKQUOTE, curses.COLOR_CYAN, -1)
|
||||||
|
curses.init_pair(ColorPair.LINK_PREVIEW, curses.COLOR_WHITE, -1)
|
||||||
curses.init_pair(ColorPair.DEBUG, curses.COLOR_BLACK, curses.COLOR_GREEN)
|
curses.init_pair(ColorPair.DEBUG, curses.COLOR_BLACK, curses.COLOR_GREEN)
|
||||||
|
|
|
@ -223,27 +223,49 @@ def render_lines(metalines, window, max_width):
|
||||||
new_dimensions = num_lines, max_width
|
new_dimensions = num_lines, max_width
|
||||||
window.resize(*new_dimensions)
|
window.resize(*new_dimensions)
|
||||||
for line_index, metaline in enumerate(metalines):
|
for line_index, metaline in enumerate(metalines):
|
||||||
meta, line = metaline
|
|
||||||
line = line[:max_width - 1]
|
|
||||||
line_type = meta["type"]
|
|
||||||
if line_type == LineType.TITLE_1:
|
|
||||||
attr = curses.color_pair(ColorPair.TITLE_1) | curses.A_BOLD
|
|
||||||
elif line_type == LineType.TITLE_2:
|
|
||||||
attr = curses.color_pair(ColorPair.TITLE_2) | curses.A_BOLD
|
|
||||||
elif line_type == LineType.TITLE_3:
|
|
||||||
attr = curses.color_pair(ColorPair.TITLE_3)
|
|
||||||
elif line_type == LineType.LINK:
|
|
||||||
attr = curses.color_pair(ColorPair.LINK)
|
|
||||||
elif line_type == LineType.PREFORMATTED:
|
|
||||||
attr = curses.color_pair(ColorPair.PREFORMATTED)
|
|
||||||
elif line_type == LineType.BLOCKQUOTE:
|
|
||||||
attr = curses.color_pair(ColorPair.BLOCKQUOTE) | curses.A_ITALIC
|
|
||||||
else: # includes LineType.PARAGRAPH
|
|
||||||
attr = curses.color_pair(ColorPair.NORMAL)
|
|
||||||
try:
|
try:
|
||||||
window.addstr(line, attr)
|
render_line(metaline, window, max_width)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return new_dimensions
|
return new_dimensions
|
||||||
if line_index < num_lines - 1:
|
if line_index < num_lines - 1:
|
||||||
window.addstr("\n")
|
window.addstr("\n")
|
||||||
return new_dimensions
|
return new_dimensions
|
||||||
|
|
||||||
|
|
||||||
|
def render_line(metaline, window, max_width):
|
||||||
|
"""Write a single line to the window."""
|
||||||
|
meta, line = metaline
|
||||||
|
line_type = meta["type"]
|
||||||
|
attributes = get_base_line_attributes(line_type)
|
||||||
|
line = line[:max_width - 1]
|
||||||
|
window.addstr(line, attributes)
|
||||||
|
if meta["type"] == LineType.LINK and "url" in meta:
|
||||||
|
url_text = f' - {meta["url"]}'
|
||||||
|
attributes = (
|
||||||
|
curses.color_pair(ColorPair.LINK_PREVIEW)
|
||||||
|
| curses.A_DIM
|
||||||
|
| curses.A_ITALIC
|
||||||
|
)
|
||||||
|
window.addstr(url_text, attributes)
|
||||||
|
|
||||||
|
|
||||||
|
def get_base_line_attributes(line_type):
|
||||||
|
"""Return the base attributes for this line type.
|
||||||
|
|
||||||
|
Other attributes may be freely used later for this line type but this is
|
||||||
|
what is used at the start of most lines of the given type.
|
||||||
|
"""
|
||||||
|
if line_type == LineType.TITLE_1:
|
||||||
|
return curses.color_pair(ColorPair.TITLE_1) | curses.A_BOLD
|
||||||
|
elif line_type == LineType.TITLE_2:
|
||||||
|
return curses.color_pair(ColorPair.TITLE_2) | curses.A_BOLD
|
||||||
|
elif line_type == LineType.TITLE_3:
|
||||||
|
return curses.color_pair(ColorPair.TITLE_3)
|
||||||
|
elif line_type == LineType.LINK:
|
||||||
|
return curses.color_pair(ColorPair.LINK)
|
||||||
|
elif line_type == LineType.PREFORMATTED:
|
||||||
|
return curses.color_pair(ColorPair.PREFORMATTED)
|
||||||
|
elif line_type == LineType.BLOCKQUOTE:
|
||||||
|
return curses.color_pair(ColorPair.BLOCKQUOTE) | curses.A_ITALIC
|
||||||
|
else: # includes LineType.PARAGRAPH
|
||||||
|
return curses.color_pair(ColorPair.NORMAL)
|
||||||
|
|
Reference in a new issue