Další vylepšení, zatím to zjevně nějak funguje. Základní podpora pro Markdown.

This commit is contained in:
sinuhet 2025-03-20 01:41:23 +01:00
parent d619fc0f3d
commit 4e3d3466f1
2 changed files with 69 additions and 3 deletions

62
markdown_parser.py Normal file
View File

@ -0,0 +1,62 @@
"""
Module: markdown_parser.py
----------------------------
Jednoduchý Markdown parser pro curses.
Rozpozná základní znaèky:
- **tuènì** curses.A_BOLD
- *kurzíva* curses.A_UNDERLINE
- `kód` curses.A_REVERSE (pro zvýraznìní kódu)
Vrací seznam segmentù ve tvaru (text, atribut), které lze postupnì vypsat pomocí curses.
"""
import re
import curses
def parse_markdown(text):
"""
Rozparsuje zadaný text obsahující jednoduché Markdown znaèky a vrátí seznam
dvojic (segment_text, attribute). Nepodporuje vnoøené znaèky.
Podporované znaèky:
**text** tuènì (A_BOLD)
*text* kurzíva (A_UNDERLINE)
`text` kód (A_REVERSE)
Pokud se znaèky nepárují, vrací zbytek textu s atributem 0.
"""
segments = []
pos = 0
pattern = re.compile(r'(\*\*.*?\*\*|\*.*?\*|`.*?`)')
for match in pattern.finditer(text):
start, end = match.span()
# Normalní text pøed znaèkou
if start > pos:
segments.append((text[pos:start], 0))
token = match.group(0)
# Rozpoznání typu tokenu
if token.startswith("**") and token.endswith("**"):
# Bold odstraníme dvojité hvìzdièky
content = token[2:-2]
segments.append((content, curses.A_BOLD))
elif token.startswith("*") and token.endswith("*"):
# Italic odstraníme hvìzdièky
content = token[1:-1]
segments.append((content, curses.A_UNDERLINE))
elif token.startswith("`") and token.endswith("`"):
# Inline kód odstraníme zpìtné apostrofy a použijeme reverzní barvu
content = token[1:-1]
segments.append((content, curses.A_REVERSE))
else:
segments.append((token, 0))
pos = end
# Zbytek textu
if pos < len(text):
segments.append((text[pos:], 0))
return segments
if __name__ == "__main__":
# Jednoduchý test
sample = "Toto je **tuèný text**, toto je *kurzíva* a toto je `kód`."
segments = parse_markdown(sample)
for seg, attr in segments:
print(f"Segment: '{seg}', Attr: {attr}")

10
ui.py
View File

@ -11,10 +11,11 @@ import logging
import api_interface
import shell_functions
import markdown_parser
logger = logging.getLogger("robovojtik.ui")
# Definujeme globální proměnnou automode zde
# Definujeme globální proměnnou automode
automode = False
def main_curses(stdscr):
@ -87,8 +88,11 @@ def main_curses(stdscr):
chat_history = []
def add_to_chat(text):
chat_history.append(text)
chat_win.addstr(text + "\n")
# Použijeme markdown_parser pro formátování
segments = markdown_parser.parse_markdown(text)
for seg_text, attr in segments:
chat_win.addstr(seg_text, attr)
chat_win.addstr("\n")
chat_win.refresh()
add_to_chat("Historie chatu:")