Text can be striked

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
This commit is contained in:
Yohann D'ANELLO 2020-12-21 16:04:03 +01:00
parent fce8e01a5b
commit b007f4fce5
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
1 changed files with 31 additions and 19 deletions

View File

@ -427,62 +427,74 @@ class Squirrel(Hazelnut):
return self.socket.recvfrom(1024) return self.socket.recvfrom(1024)
def print_markdown(self, pad: Any, y: int, x: int, msg: str, def print_markdown(self, pad: Any, y: int, x: int, msg: str,
bold: bool = False, italic: bool = False, underline: bool = False) -> int: bold: bool = False, italic: bool = False, underline: bool = False, strike: bool = False) -> int:
""" """
Parse a markdown-formatted text and format the text as bold, italic or underlined text. Parse a markdown-formatted text and format the text as bold, italic or text text.
***text***: bold, italic ***text***: bold, italic
**text**: bold **text**: bold
*text*: italic *text*: italic
__text__: underline __text__: underline
_text_: italic _text_: italic
~~text~~: strikethrough
""" """
underline_match = re.match("(.*)__(.*)__(.*)", msg) underline_match = re.match("(.*)__(.*)__(.*)", msg)
if underline_match: if underline_match:
before, underlined, after = underline_match.group(1), underline_match.group(2), underline_match.group(3) before, text, after = underline_match.group(1), underline_match.group(2), underline_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline) len_before = self.print_markdown(pad, y, x, before, bold, italic, underline)
len_mid = self.print_markdown(pad, y, x + len_before, underlined, bold, italic, not underline) len_mid = self.print_markdown(pad, y, x + len_before, text, bold, italic, not underline)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline) len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline)
return len_before + len_mid + len_after return len_before + len_mid + len_after
italic_match = re.match("(.*)_(.*)_(.*)", msg) italic_match = re.match("(.*)_(.*)_(.*)", msg)
if italic_match: if italic_match:
before, underlined, after = italic_match.group(1), italic_match.group(2), italic_match.group(3) before, text, after = italic_match.group(1), italic_match.group(2), italic_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline) len_before = self.print_markdown(pad, y, x, before, bold, italic, underline)
len_mid = self.print_markdown(pad, y, x + len_before, underlined, bold, not italic, underline) len_mid = self.print_markdown(pad, y, x + len_before, text, bold, not italic, underline)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline) len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline)
return len_before + len_mid + len_after return len_before + len_mid + len_after
bold_italic_match = re.match("(.*)\\*\\*\\*(.*)\\*\\*\\*(.*)", msg) bold_italic_match = re.match("(.*)\\*\\*\\*(.*)\\*\\*\\*(.*)", msg)
if bold_italic_match: if bold_italic_match:
before, underlined, after = bold_italic_match.group(1), bold_italic_match.group(2),\ before, text, after = bold_italic_match.group(1), bold_italic_match.group(2),\
bold_italic_match.group(3) bold_italic_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline) len_before = self.print_markdown(pad, y, x, before, bold, italic, underline, strike)
len_mid = self.print_markdown(pad, y, x + len_before, underlined, not bold, not italic, underline) len_mid = self.print_markdown(pad, y, x + len_before, text, not bold, not italic, underline, strike)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline) len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline, strike)
return len_before + len_mid + len_after return len_before + len_mid + len_after
bold_match = re.match("(.*)\\*\\*(.*)\\*\\*(.*)", msg) bold_match = re.match("(.*)\\*\\*(.*)\\*\\*(.*)", msg)
if bold_match: if bold_match:
before, underlined, after = bold_match.group(1), bold_match.group(2), bold_match.group(3) before, text, after = bold_match.group(1), bold_match.group(2), bold_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline) len_before = self.print_markdown(pad, y, x, before, bold, italic, underline, strike)
len_mid = self.print_markdown(pad, y, x + len_before, underlined, not bold, italic, underline) len_mid = self.print_markdown(pad, y, x + len_before, text, not bold, italic, underline, strike)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline) len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline, strike)
return len_before + len_mid + len_after return len_before + len_mid + len_after
italic_match = re.match("(.*)\\*(.*)\\*(.*)", msg) italic_match = re.match("(.*)\\*(.*)\\*(.*)", msg)
if italic_match: if italic_match:
before, underlined, after = italic_match.group(1), italic_match.group(2), italic_match.group(3) before, text, after = italic_match.group(1), italic_match.group(2), italic_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline) len_before = self.print_markdown(pad, y, x, before, bold, italic, underline, strike)
len_mid = self.print_markdown(pad, y, x + len_before, underlined, bold, not italic, underline) len_mid = self.print_markdown(pad, y, x + len_before, text, bold, not italic, underline, strike)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline) len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline, strike)
return len_before + len_mid + len_after
strike_match = re.match("(.*)~~(.*)~~(.*)", msg)
if strike_match:
before, text, after = strike_match.group(1), strike_match.group(2), strike_match.group(3)
len_before = self.print_markdown(pad, y, x, before, bold, italic, underline, strike)
len_mid = self.print_markdown(pad, y, x + len_before, text, bold, italic, underline, not strike)
len_after = self.print_markdown(pad, y, x + len_before + len_mid, after, bold, italic, underline, strike)
return len_before + len_mid + len_after return len_before + len_mid + len_after
attrs = 0 attrs = 0
attrs |= curses.A_BOLD if bold else 0 attrs |= curses.A_BOLD if bold else 0
attrs |= curses.A_ITALIC if italic else 0 attrs |= curses.A_ITALIC if italic else 0
attrs |= curses.A_UNDERLINE if underline else 0 attrs |= curses.A_UNDERLINE if underline else 0
size = len(msg)
if strike:
msg = "".join(c + "\u0336" for c in msg)
pad.addstr(y, x, msg, attrs) pad.addstr(y, x, msg, attrs)
return len(msg) return size
def refresh_history(self) -> None: def refresh_history(self) -> None:
""" """