1 #include <locale.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <wchar.h>
5 
6 #include "fort.h"
7 
8 
colorfull_table_wchar(void)9 void colorfull_table_wchar(void)
10 {
11 #if defined(FT_HAVE_WCHAR) && !defined(FT_MICROSOFT_COMPILER)
12     setlocale(LC_CTYPE, "");
13 
14     ft_table_t *table = ft_create_table();
15     ft_set_border_style(table, FT_NICE_STYLE);
16     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE, FT_ROW_HEADER);
17 
18     /* Filling table with data */
19     ft_wwrite_ln(table, L"Test", L"Iterations", L"ms/op", L"Ticks", L"Passed");
20     ft_wwrite_ln(table, L"n-body", L"1000", L"1.6", L"1,500,000", L"✔");
21     ft_add_separator(table);
22     ft_wwrite_ln(table, L"regex-redux", L"1000", L"0.8", L"8,000,000");
23     ft_wwrite_ln(table, L"", L"2500", L"3.9", L"27,000,000", L"✖");
24     ft_wwrite_ln(table, L"", L"10000", L"12.5", L"96,800,000");
25     ft_add_separator(table);
26     ft_wwrite_ln(table, L"mandelbrot", L"1000", L"8.1", L"89,000,000");
27     ft_wwrite_ln(table, L"", L"2500", L"19.8", L"320,000,000", L"✔");
28     ft_wwrite_ln(table, L"", L"10000", L"60.7", L"987,000,000");
29     ft_add_separator(table);
30     ft_set_cell_span(table, 8, 0, 4);
31     ft_wwrite_ln(table, L"Total result", L"", L"", L"", L"✖");
32 
33     /* Setting text styles */
34     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
35     ft_set_cell_prop(table, 8, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
36     ft_set_cell_prop(table, FT_ANY_ROW, 0, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
37     ft_set_cell_prop(table, FT_ANY_ROW, 4, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
38     ft_set_cell_prop(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_ITALIC);
39 
40     /* Set alignment */
41     ft_set_cell_prop(table, FT_ANY_ROW, 1, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
42     ft_set_cell_prop(table, FT_ANY_ROW, 2, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
43     ft_set_cell_prop(table, FT_ANY_ROW, 3, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
44     ft_set_cell_prop(table, FT_ANY_ROW, 4, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER);
45     ft_set_cell_prop(table, 8, 0, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER);
46 
47     /* Set colors */
48     ft_set_cell_prop(table, 1, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_GREEN);
49     ft_set_cell_prop(table, 3, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
50     ft_set_cell_prop(table, 6, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_GREEN);
51     ft_set_cell_prop(table, 8, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
52     ft_set_cell_prop(table, 3, 2, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
53     ft_set_cell_prop(table, 4, 3, FT_CPROP_CONT_BG_COLOR, FT_COLOR_LIGHT_RED);
54     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_CONT_FG_COLOR, FT_COLOR_LIGHT_BLUE);
55 
56     /* Move table to the center of the screen */
57     ft_set_tbl_prop(table, FT_TPROP_TOP_MARGIN, 1);
58     ft_set_tbl_prop(table, FT_TPROP_LEFT_MARGIN, 10);
59 
60     const wchar_t *table_wstr = ft_to_wstring(table);
61     fwprintf(stderr, L"Table:\n%ls\n\n ", table_wstr);
62     ft_destroy_table(table);
63 #endif
64 }
65 
colorfull_table_utf8(void)66 void colorfull_table_utf8(void)
67 {
68 #if defined(FT_HAVE_UTF8)
69     ft_table_t *table = ft_create_table();
70     ft_set_border_style(table, FT_NICE_STYLE);
71     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE, FT_ROW_HEADER);
72 
73     /* Filling table with data */
74     ft_u8write_ln(table, "Тест", "Итерации", "ms/op", "Тики", "Результат");
75     ft_u8write_ln(table, "n-body", "1000", "1.6", "1,500,000", "✔");
76     ft_add_separator(table);
77     ft_u8write_ln(table, "regex-redux", "1000", "0.8", "8,000,000");
78     ft_u8write_ln(table, "", "2500", "3.9", "27,000,000", "✖");
79     ft_u8write_ln(table, "", "10000", "12.5", "96,800,000");
80     ft_add_separator(table);
81     ft_u8write_ln(table, "mandelbrot", "1000", "8.1", "89,000,000");
82     ft_u8write_ln(table, "", "2500", "19.8", "320,000,000", "✔");
83     ft_u8write_ln(table, "", "10000", "60.7", "987,000,000");
84     ft_add_separator(table);
85     ft_set_cell_span(table, 8, 0, 4);
86     ft_u8write_ln(table, "Итог", "", "", "", "✖");
87 
88     /* Setting text styles */
89     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
90     ft_set_cell_prop(table, 8, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
91     ft_set_cell_prop(table, FT_ANY_ROW, 0, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
92     ft_set_cell_prop(table, FT_ANY_ROW, 4, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_BOLD);
93     ft_set_cell_prop(table, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_CONT_TEXT_STYLE, FT_TSTYLE_ITALIC);
94 
95     /* Set alignment */
96     ft_set_cell_prop(table, FT_ANY_ROW, 1, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
97     ft_set_cell_prop(table, FT_ANY_ROW, 2, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
98     ft_set_cell_prop(table, FT_ANY_ROW, 3, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT);
99     ft_set_cell_prop(table, FT_ANY_ROW, 4, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER);
100     ft_set_cell_prop(table, 8, 0, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER);
101 
102     /* Set colors */
103     ft_set_cell_prop(table, 1, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_GREEN);
104     ft_set_cell_prop(table, 3, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
105     ft_set_cell_prop(table, 6, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_GREEN);
106     ft_set_cell_prop(table, 8, 4, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
107     ft_set_cell_prop(table, 3, 2, FT_CPROP_CONT_FG_COLOR, FT_COLOR_RED);
108     ft_set_cell_prop(table, 4, 3, FT_CPROP_CONT_BG_COLOR, FT_COLOR_LIGHT_RED);
109     ft_set_cell_prop(table, 0, FT_ANY_COLUMN, FT_CPROP_CONT_FG_COLOR, FT_COLOR_LIGHT_BLUE);
110 
111     /* Move table to the center of the screen */
112     ft_set_tbl_prop(table, FT_TPROP_TOP_MARGIN, 1);
113     ft_set_tbl_prop(table, FT_TPROP_LEFT_MARGIN, 10);
114 
115     const char *table_str = ft_to_u8string(table);
116     printf("Table:\n%s\n\n ", table_str);
117     ft_destroy_table(table);
118 #endif
119 }
120 
121 
main(void)122 int main(void)
123 {
124     colorfull_table_wchar();
125     colorfull_table_utf8();
126     return 0;
127 }
128