#pragma once #include struct PsiStringBuilder { char* data; size_t len; size_t cap; }; struct PsiStringBuilder psi_new_string_builder(void); void psi_string_builder_append(struct PsiStringBuilder* sb, const char* s); char* psi_string_builder_finish(struct PsiStringBuilder* sb); struct PsiGlyphRow { char (*cells)[5]; size_t width; }; struct PsiGlyphRow psi_new_glyph_row(size_t width); void psi_free_glyph_row(struct PsiGlyphRow* row); void psi_glyph_row_set(struct PsiGlyphRow* row, size_t index, const char* glyph); size_t psi_glyph_row_place(struct PsiGlyphRow* row, size_t start, const char* utf8); void psi_glyph_row_fill_space(struct PsiGlyphRow* row, size_t from, size_t to, const char* glyph); void psi_glyph_row_render(struct PsiGlyphRow row, struct PsiStringBuilder* sb); size_t psi_utf8_count(const char* s);