#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);