extends RefCounted # Mirrors api/QuestionsApi/Services/Flashcards/FlashcardClozeParser.cs so the study screen can # render a cloze note's front/back without a round trip to the server. static func _regex() -> RegEx: var regex := RegEx.new() regex.compile("(?s)\\{\\{c(\\d+)::((?:(?!\\}\\}).)*)\\}\\}") return regex static func render_front(text: String, cloze_number: int) -> String: var regex := _regex() var result := "" var last_end := 0 for match in regex.search_all(text): result += text.substr(last_end, match.get_start() - last_end) var number := int(match.get_string(1)) var inner := match.get_string(2) var parts := inner.split("::", true, 1) if number == cloze_number: var hint := parts[1].strip_edges() if parts.size() > 1 else "" result += ("[%s]" % hint) if not hint.is_empty() else "[...]" else: result += parts[0].strip_edges() last_end = match.get_end() result += text.substr(last_end) return result static func render_back(text: String) -> String: var regex := _regex() var result := "" var last_end := 0 for match in regex.search_all(text): result += text.substr(last_end, match.get_start() - last_end) var inner := match.get_string(2) result += inner.split("::", true, 1)[0].strip_edges() last_end = match.get_end() result += text.substr(last_end) return result