[R] Refactoring of setting style

This commit is contained in:
seleznevae 2018-03-12 22:28:55 +03:00
parent cea035285a
commit 87275e93fa
5 changed files with 226 additions and 75 deletions

View File

@ -110,6 +110,8 @@ int main()
/*-------------------------------------------------------------*/
table = ft_create_table();
ft_set_cell_option(table, FT_ANY_ROW, 0, FT_OPT_TEXT_ALIGN, CenterAligned);
ft_set_cell_option(table, FT_ANY_ROW, 1, FT_OPT_TEXT_ALIGN, LeftAligned);
@ -126,9 +128,74 @@ int main()
printf("%s\n", ft_to_string(table));
ft_destroy_table(table);
/*-------------------------------------------------------------*/
table = NULL;
/*---------------- Different styles --------------------*/
ft_set_default_borders(FT_BASIC_STYLE);
table = ft_create_table();
ft_set_cell_option(table, FT_ANY_ROW, 0, FT_OPT_TEXT_ALIGN, CenterAligned);
ft_set_cell_option(table, FT_ANY_ROW, 1, FT_OPT_TEXT_ALIGN, LeftAligned);
ft_set_cell_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
FT_NWRITE_LN(table, "Rank", "Title", "Year", "Rating");
FT_NWRITE_LN(table, "1", "The Shawshank Redemption", "1994", "9.5");
FT_NWRITE_LN(table, "2", "12 Angry Men", "1957", "8.8");
FT_NWRITE_LN(table, "3", "2001: A Space Odyssey", "1968", "8.5");
FT_NWRITE_LN(table, "4", "Blade Runner", "1982", "8.1");
printf("Table:\n");
printf("%s\n", ft_to_string(table));
ft_destroy_table(table);
/* ------------- */
// ft_set_default_borders(FT_SIMPLE_STYLE);
// table = ft_create_table();
// ft_set_cell_option(table, FT_ANY_ROW, 0, FT_OPT_TEXT_ALIGN, CenterAligned);
// ft_set_cell_option(table, FT_ANY_ROW, 1, FT_OPT_TEXT_ALIGN, LeftAligned);
// ft_set_cell_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
// FT_NWRITE_LN(table, "Rank", "Title", "Year", "Rating");
// FT_NWRITE_LN(table, "1", "The Shawshank Redemption", "1994", "9.5");
// FT_NWRITE_LN(table, "2", "12 Angry Men", "1957", "8.8");
// FT_NWRITE_LN(table, "3", "2001: A Space Odyssey", "1968", "8.5");
// FT_NWRITE_LN(table, "4", "Blade Runner", "1982", "8.1");
// printf("Table:\n");
// printf("%s\n", ft_to_string(table));
// ft_destroy_table(table);
// table = NULL;
// /* ------------- */
// ft_set_default_borders(FT_DOT_STYLE);
// table = ft_create_table();
// ft_set_cell_option(table, FT_ANY_ROW, 0, FT_OPT_TEXT_ALIGN, CenterAligned);
// ft_set_cell_option(table, FT_ANY_ROW, 1, FT_OPT_TEXT_ALIGN, LeftAligned);
// ft_set_cell_option(table, 0, FT_ANY_COLUMN, FT_OPT_ROW_TYPE, Header);
// FT_NWRITE_LN(table, "Rank", "Title", "Year", "Rating");
// FT_NWRITE_LN(table, "1", "The Shawshank Redemption", "1994", "9.5");
// FT_NWRITE_LN(table, "2", "12 Angry Men", "1957", "8.8");
// FT_NWRITE_LN(table, "3", "2001: A Space Odyssey", "1968", "8.5");
// FT_NWRITE_LN(table, "4", "Blade Runner", "1982", "8.1");
// printf("Table:\n");
// printf("%s\n", ft_to_string(table));
// ft_destroy_table(table);
table = NULL;
return 0;
}

View File

@ -282,12 +282,7 @@ FORT_EXTERN const wchar_t* ft_to_wstring(const FTABLE *FORT_RESTRICT table);
struct border_chars
struct ft_border_chars
{
char top_border_ch;
char separator_ch;
@ -297,8 +292,20 @@ struct border_chars
char in_intersect_ch;
};
FORT_EXTERN int ft_set_default_borders(struct border_chars *border_chs, struct border_chars *header_border_chs);
FORT_EXTERN int ft_set_table_borders(FTABLE * FORT_RESTRICT table, struct border_chars *border_chs, struct border_chars *header_border_chs);
struct ft_border_style
{
struct ft_border_chars border_chs;
struct ft_border_chars header_border_chs;
};
/* List of built-in table border styles */
extern struct ft_border_style * FT_BASIC_STYLE;
extern struct ft_border_style * FT_SIMPLE_STYLE;
extern struct ft_border_style * FT_DOT_STYLE;
FORT_EXTERN int ft_set_default_borders(struct ft_border_style *style);
FORT_EXTERN int ft_set_table_borders(FTABLE * FORT_RESTRICT table, struct ft_border_style *style);
FORT_EXTERN int ft_set_default_cell_option(uint32_t option, int value);
FORT_EXTERN int ft_set_cell_option(FTABLE * FORT_RESTRICT table, unsigned row, unsigned col, uint32_t option, int value);

View File

@ -662,8 +662,80 @@ int ft_add_separator(FTABLE *table)
static void set_border_options_for_options(fort_table_options_t *options, struct border_chars *border_chs, struct border_chars *header_border_chs)
/* ******************************************************************************* */
struct ft_border_style ft_basic_style =
{
{
'-', /* top_border_ch */
'\0', /* separator_ch */
'-', /* bottom_border_ch */
'|', /* side_border_ch */
'+', /* out_intersect_ch */
'\0', /* in_intersect_ch */
},
{
'-', /* top_border_ch */
'-', /* separator_ch */
'-', /* bottom_border_ch */
'|', /* side_border_ch */
'+', /* out_intersect_ch */
'+', /* in_intersect_ch */
}
};
//struct ft_border_style ft_simple_style =
//{
// {
// ' ', /* top_border_ch */
// '\0', /* separator_ch */
// ' ', /* bottom_border_ch */
// ' ', /* side_border_ch */
// ' ', /* out_intersect_ch */
// '\0', /* in_intersect_ch */
// },
// {
// ' ', /* top_border_ch */
// '-', /* separator_ch */
// ' ', /* bottom_border_ch */
// ' ', /* side_border_ch */
// ' ', /* out_intersect_ch */
// ' ', /* in_intersect_ch */
// }
//};
//struct ft_border_style ft_dot_style =
//{
// {
// '.', /* top_border_ch */
// '\0', /* separator_ch */
// '.', /* bottom_border_ch */
// ':', /* side_border_ch */
// '.', /* out_intersect_ch */
// '\0', /* in_intersect_ch */
// },
// {
// '.', /* top_border_ch */
// '.', /* separator_ch */
// '.', /* bottom_border_ch */
// ':', /* side_border_ch */
// '.', /* out_intersect_ch */
// '.', /* in_intersect_ch */
// }
//};
struct ft_border_style * FT_BASIC_STYLE = &ft_basic_style;
//struct ft_border_style * FT_SIMPLE_STYLE = &ft_simple_style;
//struct ft_border_style * FT_DOT_STYLE = &ft_dot_style;
static void set_border_options_for_options(fort_table_options_t *options, struct ft_border_style *style)
{
struct ft_border_chars *border_chs = &(style->border_chs);
struct ft_border_chars *header_border_chs = &(style->header_border_chs);
#define BOR_CHARS options->border_chars
#define H_BOR_CHARS options->header_border_chars
@ -712,13 +784,14 @@ static void set_border_options_for_options(fort_table_options_t *options, struct
#undef H_BOR_CHARS
}
int ft_set_default_borders(struct border_chars *border_chs, struct border_chars *header_border_chs)
int ft_set_default_borders(struct ft_border_style *style)
{
set_border_options_for_options(&g_table_options, border_chs, header_border_chs);
set_border_options_for_options(&g_table_options, style);
return F_SUCCESS;
}
int ft_set_table_borders(FTABLE *table, struct border_chars *border_chs, struct border_chars *header_border_chs)
int ft_set_table_borders(FTABLE *table, struct ft_border_style *style)
{
assert(table);
if (table->options == NULL) {
@ -726,7 +799,7 @@ int ft_set_table_borders(FTABLE *table, struct border_chars *border_chs, struct
if (table->options == NULL)
return F_MEMORY_ERROR;
}
set_border_options_for_options(table->options, border_chs, header_border_chs);
set_border_options_for_options(table->options, style);
return F_SUCCESS;
}
@ -754,3 +827,5 @@ int ft_set_default_cell_option(uint32_t option, int value)
{
return set_default_cell_option(option, value);
}

View File

@ -139,6 +139,13 @@ enum SeparatorItemPos
};
struct fort_border_style
{
char border_chars[BorderItemPosSize];
char header_border_chars[BorderItemPosSize];
char separator_chars[SepratorItemPosSize];
};
struct fort_table_options
{
char border_chars[BorderItemPosSize];

View File

@ -23,22 +23,21 @@ int set_test_options_for_table(FTABLE *table)
assert_true( status == F_SUCCESS );
struct border_chars border_chs;
border_chs.top_border_ch = '-';
border_chs.separator_ch = '-';
border_chs.bottom_border_ch = '-';
border_chs.side_border_ch = '|';
border_chs.out_intersect_ch = '+';
border_chs.in_intersect_ch = '+';
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '-';
brdr_style.border_chs.separator_ch = '-';
brdr_style.border_chs.bottom_border_ch = '-';
brdr_style.border_chs.side_border_ch = '|';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '+';
struct border_chars header_border_chs;
header_border_chs.top_border_ch = '-';
header_border_chs.separator_ch = '-';
header_border_chs.bottom_border_ch = '-';
header_border_chs.side_border_ch = '|';
header_border_chs.out_intersect_ch = '+';
header_border_chs.in_intersect_ch = '+';
return ft_set_table_borders(table, &border_chs, &header_border_chs);
brdr_style.header_border_chs.top_border_ch = '-';
brdr_style.header_border_chs.separator_ch = '-';
brdr_style.header_border_chs.bottom_border_ch = '-';
brdr_style.header_border_chs.side_border_ch = '|';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '+';
return ft_set_table_borders(table, &brdr_style);
}
int set_test_options_as_default()
@ -57,22 +56,21 @@ int set_test_options_as_default()
assert_true( status == F_SUCCESS );
struct border_chars border_chs;
border_chs.top_border_ch = '-';
border_chs.separator_ch = '-';
border_chs.bottom_border_ch = '-';
border_chs.side_border_ch = '|';
border_chs.out_intersect_ch = '+';
border_chs.in_intersect_ch = '+';
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '-';
brdr_style.border_chs.separator_ch = '-';
brdr_style.border_chs.bottom_border_ch = '-';
brdr_style.border_chs.side_border_ch = '|';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '+';
struct border_chars header_border_chs;
header_border_chs.top_border_ch = '-';
header_border_chs.separator_ch = '-';
header_border_chs.bottom_border_ch = '-';
header_border_chs.side_border_ch = '|';
header_border_chs.out_intersect_ch = '+';
header_border_chs.in_intersect_ch = '+';
return ft_set_default_borders(&border_chs, &header_border_chs);
brdr_style.header_border_chs.top_border_ch = '-';
brdr_style.header_border_chs.separator_ch = '-';
brdr_style.header_border_chs.bottom_border_ch = '-';
brdr_style.header_border_chs.side_border_ch = '|';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '+';
return ft_set_default_borders(&brdr_style);
}
void test_table_sizes(void **state)
@ -564,22 +562,21 @@ void test_table_options(void **state)
WHEN("Changing cell separators") {
struct border_chars border_chs;
border_chs.top_border_ch = '|';
border_chs.separator_ch = '|';
border_chs.bottom_border_ch = '|';
border_chs.side_border_ch = '=';
border_chs.out_intersect_ch = '+';
border_chs.in_intersect_ch = '#';
struct ft_border_style brdr_style;
brdr_style.border_chs.top_border_ch = '|';
brdr_style.border_chs.separator_ch = '|';
brdr_style.border_chs.bottom_border_ch = '|';
brdr_style.border_chs.side_border_ch = '=';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '#';
struct border_chars header_border_chs;
header_border_chs.top_border_ch = '*';
header_border_chs.separator_ch = '*';
header_border_chs.bottom_border_ch = '*';
header_border_chs.side_border_ch = 'v';
header_border_chs.out_intersect_ch = '+';
header_border_chs.in_intersect_ch = '#';
ft_set_default_borders(&border_chs, &header_border_chs);
brdr_style.header_border_chs.top_border_ch = '*';
brdr_style.header_border_chs.separator_ch = '*';
brdr_style.header_border_chs.bottom_border_ch = '*';
brdr_style.header_border_chs.side_border_ch = 'v';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '#';
ft_set_default_borders(&brdr_style);
@ -608,23 +605,21 @@ void test_table_options(void **state)
brdr_style.border_chs.top_border_ch = '|';
brdr_style.border_chs.separator_ch = '\0';
brdr_style.border_chs.bottom_border_ch = '|';
brdr_style.border_chs.side_border_ch = '=';
brdr_style.border_chs.out_intersect_ch = '+';
brdr_style.border_chs.in_intersect_ch = '\0';
brdr_style.header_border_chs.top_border_ch = '*';
brdr_style.header_border_chs.separator_ch = '*';
brdr_style.header_border_chs.bottom_border_ch = '*';
brdr_style.header_border_chs.side_border_ch = 'v';
brdr_style.header_border_chs.out_intersect_ch = '+';
brdr_style.header_border_chs.in_intersect_ch = '#';
border_chs.top_border_ch = '|';
border_chs.separator_ch = '\0';
border_chs.bottom_border_ch = '|';
border_chs.side_border_ch = '=';
border_chs.out_intersect_ch = '+';
border_chs.in_intersect_ch = '\0';
header_border_chs.top_border_ch = '*';
header_border_chs.separator_ch = '*';
header_border_chs.bottom_border_ch = '*';
header_border_chs.side_border_ch = 'v';
header_border_chs.out_intersect_ch = '+';
header_border_chs.in_intersect_ch = '#';
ft_set_default_borders(&border_chs, &header_border_chs);
ft_set_default_borders(&brdr_style);
ft_set_default_cell_option(FT_OPT_BOTTOM_PADDING, 0);
ft_set_default_cell_option(FT_OPT_TOP_PADDING, 0);