libfort/examples/9-non_ascii_table.cpp

67 lines
2.0 KiB
C++
Raw Normal View History

2019-10-06 09:07:27 +02:00
#include <algorithm>
2019-09-28 10:02:34 +02:00
#include <iostream>
#include <string.h>
2019-09-28 10:02:34 +02:00
#include "fort.hpp"
#if defined(FT_HAVE_UTF8)
/* Custom function to compute visible width of utf8 strings */
int u8strwid(const void *beg, const void *end, size_t *width)
{
const char *emojis[] = {"😃", "😍"};
const size_t sz = sizeof(emojis) / sizeof(emojis[0]);
const size_t raw_len = (const char *)end - (const char *)beg;
for (size_t i = 0; i < sz; ++i) {
if (memcmp(beg, emojis[i], std::min(strlen(emojis[i]), raw_len)) == 0) {
*width = 2; /* On my terminal emojis have width of 2 chars */
return 0;
}
}
return 1;
}
#endif
2019-09-28 10:02:34 +02:00
int main(void)
{
#if defined(FT_HAVE_UTF8)
/* Example of utf8 table */
{
fort::utf8_table table;
table.set_border_style(FT_NICE_STYLE);
table.column(0).set_cell_text_align(fort::text_align::center);
table.column(1).set_cell_text_align(fort::text_align::center);
table << fort::header
<< "Ранг" << "Название" << "Год" << "Рейтинг" << fort::endr
<< "1" << "Побег из Шоушенка" << "1994" << "9.5"<< fort::endr
<< "2" << "12 разгневанных мужчин" << "1957" << "8.8" << fort::endr
<< "3" << "Космическая одиссея 2001 года" << "1968" << "8.5" << fort::endr
<< "4" << "Бегущий по лезвию" << "1982" << "8.1" << fort::endr;
std::cout << table.to_string() << std::endl;
}
/* Example of providing custom function to compute utf8 string width */
{
ft_set_u8strwid_func(&u8strwid);
fort::utf8_table table;
table.set_border_style(FT_NICE_STYLE);
table << fort::header
<< "Description" << "Native" << fort::endr
<< "SMILING FACE WITH OPEN MOUTH" << "😃" << fort::endr
<< "SMILING FACE WITH HEART-SHAPED EYES" << "😍" << fort::endr;
std::cout << table.to_string() << std::endl;
}
2019-09-28 10:02:34 +02:00
#endif
return 0;
}