Programming environment for editing various of my live apps without restarting them.
box_height = function(node)
	-- return the height of a text editor node (explicit width). The result is unscaled.
	local y = 0
	for i=1,#node.editor.lines do
		local line = node.editor.lines[i]
		if node.editor.line_cache[i] == nil then
			node.editor.line_cache[i] = {}
		end
		node.editor.line_cache[i].fragments = nil
		node.editor.line_cache[i].screen_line_starting_pos = nil
		Text.populate_screen_line_starting_pos(node.editor, i)
		y = y + node.editor.line_height*#node.editor.line_cache[i].screen_line_starting_pos
		Text.clear_screen_line_cache(node.editor, i)
	end
	return y/Viewport.zoom
end