class Phlex::Markdown

def code_block(code, language:)

def code_block(code, language:)
	yield
end

def doc

def doc
	Markly.parse(@content)
end

def initialize(content)

def initialize(content)
	@content = content
end

def template

def template
	visit(doc)
end

def visit(node)

def visit(node)
	return if node.nil?
	case node.type
	in :document | :softbreak
		visit_children(node)
	in :text
		text(node.string_content)
	in :header
		case node.header_level
			in 1 then h1 { visit_children(node) }
			in 2 then h2 { visit_children(node) }
			in 3 then h3 { visit_children(node) }
			in 4 then h4 { visit_children(node) }
			in 5 then h5 { visit_children(node) }
			in 6 then h6 { visit_children(node) }
		end
	in :paragraph
		grandparent = node.parent&.parent
		if grandparent&.type == :list && grandparent&.list_tight
			visit_children(node)
		else
			p { visit_children(node) }
		end
	in :link
		a(href: node.url) { visit_children(node) }
	in :emph
		em { visit_children(node) }
	in :strong
		strong { visit_children(node) }
	in :list
		case node.list_type
			in :ordered_list then ol { visit_children(node) }
			in :bullet_list then ul { visit_children(node) }
		end
	in :list_item
		li { visit_children(node) }
	in :code
		whitespace { code { text(node.string_content) } }
	in :code_block
		code_block(node.string_content, language: node.fence_info) do |**attributes|
			pre(**attributes) { text(node.string_content) }
		end
	end
end

def visit_children(node)

def visit_children(node)
	node.each { |c| visit(c) }
end