From 1bbeebf1a37d1f9fe155a38f8d90425346fc7b57 Mon Sep 17 00:00:00 2001 From: "N0\\A" Date: Tue, 14 Jul 2026 15:18:34 +0200 Subject: [PATCH] Bold an italics (super scuffed) --- README.tlm | 2 ++ src/parser.odin | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/README.tlm b/README.tlm index 916abba..f7ab72e 100644 --- a/README.tlm +++ b/README.tlm @@ -29,3 +29,5 @@ The **VARIABLE** is $(variable) > Bon apetit! Text under a blockquote + +**This *is* bold *and* italics *mixed** TOGETHER* diff --git a/src/parser.odin b/src/parser.odin index 207f864..f6f00a2 100644 --- a/src/parser.odin +++ b/src/parser.odin @@ -59,7 +59,66 @@ pass_through_children :: proc(token: ^Token) { } if token.type == TokenType.Text { + str, ok := token.value.(string) + if !ok || !strings.contains(str, "*") { + return + } + token.value = nil + + is_bold := false + is_italic := false + current_node := token + + i := 0 + start := 0 + + for i < len(str) { + if str[i] == '*' { + if i > start { + push_token(current_node, TokenType.Text, str[start:i]) + } + + asterisks := 0 + for i < len(str) && str[i] == '*' { + asterisks += 1 + i += 1 + } + + for asterisks >= 3 { + is_bold = !is_bold + is_italic = !is_italic + asterisks -= 3 + } + if asterisks == 2 { + is_bold = !is_bold + } else if asterisks == 1 { + is_italic = !is_italic + } + + current_node = token + if is_bold { + last := + current_node.children[len(current_node.children) - 1] if len(current_node.children) > 0 else nil + current_node = + last if last != nil && last.type == .Bold else push_token(current_node, TokenType.Bold, nil) + } + if is_italic { + last := + current_node.children[len(current_node.children) - 1] if len(current_node.children) > 0 else nil + current_node = + last if last != nil && last.type == .Italics else push_token(current_node, TokenType.Italics, nil) + } + + start = i + } else { + i += 1 + } + } + + if i > start { + push_token(current_node, TokenType.Text, str[start:i]) + } } }