[C] Refactoring

This commit is contained in:
seleznevae 2019-08-27 10:35:15 +03:00
parent 39e18eb6ff
commit a4ec49f600
2 changed files with 58 additions and 50 deletions

View File

@ -5247,16 +5247,17 @@ int print_row_separator_impl(conv_context_t *cntx,
} }
fort_table_properties_t *properties = context->table_properties;
size_t written = 0; size_t written = 0;
int tmp = 0; int tmp = 0;
enum ft_row_type lower_row_type = FT_ROW_COMMON; enum ft_row_type lower_row_type = FT_ROW_COMMON;
if (lower_row != NULL) { if (lower_row != NULL) {
lower_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); lower_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
} }
enum ft_row_type upper_row_type = FT_ROW_COMMON; enum ft_row_type upper_row_type = FT_ROW_COMMON;
if (upper_row != NULL) { if (upper_row != NULL) {
upper_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); upper_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
} }
/* Row separator anatomy /* Row separator anatomy
@ -5273,23 +5274,24 @@ int print_row_separator_impl(conv_context_t *cntx,
const char **IB = NULL; const char **IB = NULL;
const char **II = NULL; const char **II = NULL;
struct fort_border_style *border_style = &properties->border_style;
typedef const char *(*border_chars_point_t)[BorderItemPosSize]; typedef const char *(*border_chars_point_t)[BorderItemPosSize];
const char *(*border_chars)[BorderItemPosSize] = NULL; const char *(*border_chars)[BorderItemPosSize] = NULL;
border_chars = (border_chars_point_t)&context->table_properties->border_style.border_chars; border_chars = (border_chars_point_t)&border_style->border_chars;
if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) { if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) {
border_chars = (border_chars_point_t)&context->table_properties->border_style.header_border_chars; border_chars = (border_chars_point_t)&border_style->header_border_chars;
} }
if (sep && sep->enabled) { if (sep && sep->enabled) {
L = &(context->table_properties->border_style.separator_chars[LH_sip]); L = &(border_style->separator_chars[LH_sip]);
I = &(context->table_properties->border_style.separator_chars[IH_sip]); I = &(border_style->separator_chars[IH_sip]);
IV = &(context->table_properties->border_style.separator_chars[II_sip]); IV = &(border_style->separator_chars[II_sip]);
R = &(context->table_properties->border_style.separator_chars[RH_sip]); R = &(border_style->separator_chars[RH_sip]);
IT = &(context->table_properties->border_style.separator_chars[TI_sip]); IT = &(border_style->separator_chars[TI_sip]);
IB = &(context->table_properties->border_style.separator_chars[BI_sip]); IB = &(border_style->separator_chars[BI_sip]);
II = &(context->table_properties->border_style.separator_chars[IH_sip]); II = &(border_style->separator_chars[IH_sip]);
if (lower_row == NULL) { if (lower_row == NULL) {
L = &(*border_chars)[BL_bip]; L = &(*border_chars)[BL_bip];
@ -5353,8 +5355,10 @@ int print_row_separator_impl(conv_context_t *cntx,
goto clear; goto clear;
} }
fort_entire_table_properties_t *entire_tprops = &properties->entire_table_properties;
/* Print left margin */ /* Print left margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, context->table_properties->entire_table_properties.left_margin, FT_SPACE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE));
for (i = 0; i < cols; ++i) { for (i = 0; i < cols; ++i) {
if (i == 0) { if (i == 0) {
@ -5376,7 +5380,7 @@ int print_row_separator_impl(conv_context_t *cntx,
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R));
/* Print right margin */ /* Print right margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, context->table_properties->entire_table_properties.right_margin, FT_SPACE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE));
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE));
@ -5606,16 +5610,17 @@ vsnprintf_buffer(string_buffer_t *buffer, const struct ft_string *fmt,
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral" #pragma GCC diagnostic ignored "-Wformat-nonliteral"
#endif #endif
size_t width_capacity = string_buffer_width_capacity(buffer);
switch (buffer->type) { switch (buffer->type) {
case CHAR_BUF: case CHAR_BUF:
return vsnprintf(buffer->str.cstr, string_buffer_width_capacity(buffer), fmt->u.cstr, *va); return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va);
#ifdef FT_HAVE_WCHAR #ifdef FT_HAVE_WCHAR
case W_CHAR_BUF: case W_CHAR_BUF:
return vswprintf(buffer->str.wstr, string_buffer_width_capacity(buffer), fmt->u.wstr, *va); return vswprintf(buffer->str.wstr, width_capacity, fmt->u.wstr, *va);
#endif #endif
#ifdef FT_HAVE_UTF8 #ifdef FT_HAVE_UTF8
case UTF8_BUF: case UTF8_BUF:
return vsnprintf(buffer->str.cstr, string_buffer_width_capacity(buffer), fmt->u.cstr, *va); return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va);
#endif #endif
default: default:
assert(0); assert(0);
@ -5707,8 +5712,6 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
{ {
const context_t *context = cntx->cntx; const context_t *context = cntx->cntx;
assert(context); assert(context);
const char *space_char = " ";
const char *new_line_char = "\n";
if (row == NULL) if (row == NULL)
return -1; return -1;
@ -5721,12 +5724,13 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
* *
* L data IV data IV data R * L data IV data IV data R
*/ */
fort_table_properties_t *properties = context->table_properties;
typedef const char *(*border_chars_point_t)[BorderItemPosSize]; typedef const char *(*border_chars_point_t)[BorderItemPosSize];
enum ft_row_type row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); enum ft_row_type row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
const char *(*bord_chars)[BorderItemPosSize] = (row_type == FT_ROW_HEADER) const char *(*bord_chars)[BorderItemPosSize] = (row_type == FT_ROW_HEADER)
? (border_chars_point_t)(&context->table_properties->border_style.header_border_chars) ? (border_chars_point_t)(&properties->border_style.header_border_chars)
: (border_chars_point_t)(&context->table_properties->border_style.border_chars); : (border_chars_point_t)(&properties->border_style.border_chars);
const char **L = &(*bord_chars)[LL_bip]; const char **L = &(*bord_chars)[LL_bip];
const char **IV = &(*bord_chars)[IV_bip]; const char **IV = &(*bord_chars)[IV_bip];
const char **R = &(*bord_chars)[RR_bip]; const char **R = &(*bord_chars)[RR_bip];
@ -5738,7 +5742,7 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties; fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties;
for (i = 0; i < row_height; ++i) { for (i = 0; i < row_height; ++i) {
/* Print left margin */ /* Print left margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE));
/* Print left table boundary */ /* Print left table boundary */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L));
@ -5761,7 +5765,7 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width)); CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width));
} else { } else {
/* Print empty cell */ /* Print empty cell */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], FT_SPACE));
} }
/* Print boundary between cells */ /* Print boundary between cells */
@ -5775,10 +5779,10 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R));
/* Print right margin */ /* Print right margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE));
/* Print new line character */ /* Print new line character */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, new_line_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE));
} }
return (int)written; return (int)written;

View File

@ -258,16 +258,17 @@ int print_row_separator_impl(conv_context_t *cntx,
} }
fort_table_properties_t *properties = context->table_properties;
size_t written = 0; size_t written = 0;
int tmp = 0; int tmp = 0;
enum ft_row_type lower_row_type = FT_ROW_COMMON; enum ft_row_type lower_row_type = FT_ROW_COMMON;
if (lower_row != NULL) { if (lower_row != NULL) {
lower_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); lower_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
} }
enum ft_row_type upper_row_type = FT_ROW_COMMON; enum ft_row_type upper_row_type = FT_ROW_COMMON;
if (upper_row != NULL) { if (upper_row != NULL) {
upper_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); upper_row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
} }
/* Row separator anatomy /* Row separator anatomy
@ -284,23 +285,24 @@ int print_row_separator_impl(conv_context_t *cntx,
const char **IB = NULL; const char **IB = NULL;
const char **II = NULL; const char **II = NULL;
struct fort_border_style *border_style = &properties->border_style;
typedef const char *(*border_chars_point_t)[BorderItemPosSize]; typedef const char *(*border_chars_point_t)[BorderItemPosSize];
const char *(*border_chars)[BorderItemPosSize] = NULL; const char *(*border_chars)[BorderItemPosSize] = NULL;
border_chars = (border_chars_point_t)&context->table_properties->border_style.border_chars; border_chars = (border_chars_point_t)&border_style->border_chars;
if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) { if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) {
border_chars = (border_chars_point_t)&context->table_properties->border_style.header_border_chars; border_chars = (border_chars_point_t)&border_style->header_border_chars;
} }
if (sep && sep->enabled) { if (sep && sep->enabled) {
L = &(context->table_properties->border_style.separator_chars[LH_sip]); L = &(border_style->separator_chars[LH_sip]);
I = &(context->table_properties->border_style.separator_chars[IH_sip]); I = &(border_style->separator_chars[IH_sip]);
IV = &(context->table_properties->border_style.separator_chars[II_sip]); IV = &(border_style->separator_chars[II_sip]);
R = &(context->table_properties->border_style.separator_chars[RH_sip]); R = &(border_style->separator_chars[RH_sip]);
IT = &(context->table_properties->border_style.separator_chars[TI_sip]); IT = &(border_style->separator_chars[TI_sip]);
IB = &(context->table_properties->border_style.separator_chars[BI_sip]); IB = &(border_style->separator_chars[BI_sip]);
II = &(context->table_properties->border_style.separator_chars[IH_sip]); II = &(border_style->separator_chars[IH_sip]);
if (lower_row == NULL) { if (lower_row == NULL) {
L = &(*border_chars)[BL_bip]; L = &(*border_chars)[BL_bip];
@ -364,8 +366,10 @@ int print_row_separator_impl(conv_context_t *cntx,
goto clear; goto clear;
} }
fort_entire_table_properties_t *entire_tprops = &properties->entire_table_properties;
/* Print left margin */ /* Print left margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, context->table_properties->entire_table_properties.left_margin, FT_SPACE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE));
for (i = 0; i < cols; ++i) { for (i = 0; i < cols; ++i) {
if (i == 0) { if (i == 0) {
@ -387,7 +391,7 @@ int print_row_separator_impl(conv_context_t *cntx,
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R));
/* Print right margin */ /* Print right margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, context->table_properties->entire_table_properties.right_margin, FT_SPACE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE));
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE));
@ -617,16 +621,17 @@ vsnprintf_buffer(string_buffer_t *buffer, const struct ft_string *fmt,
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral" #pragma GCC diagnostic ignored "-Wformat-nonliteral"
#endif #endif
size_t width_capacity = string_buffer_width_capacity(buffer);
switch (buffer->type) { switch (buffer->type) {
case CHAR_BUF: case CHAR_BUF:
return vsnprintf(buffer->str.cstr, string_buffer_width_capacity(buffer), fmt->u.cstr, *va); return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va);
#ifdef FT_HAVE_WCHAR #ifdef FT_HAVE_WCHAR
case W_CHAR_BUF: case W_CHAR_BUF:
return vswprintf(buffer->str.wstr, string_buffer_width_capacity(buffer), fmt->u.wstr, *va); return vswprintf(buffer->str.wstr, width_capacity, fmt->u.wstr, *va);
#endif #endif
#ifdef FT_HAVE_UTF8 #ifdef FT_HAVE_UTF8
case UTF8_BUF: case UTF8_BUF:
return vsnprintf(buffer->str.cstr, string_buffer_width_capacity(buffer), fmt->u.cstr, *va); return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va);
#endif #endif
default: default:
assert(0); assert(0);
@ -718,8 +723,6 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
{ {
const context_t *context = cntx->cntx; const context_t *context = cntx->cntx;
assert(context); assert(context);
const char *space_char = " ";
const char *new_line_char = "\n";
if (row == NULL) if (row == NULL)
return -1; return -1;
@ -732,12 +735,13 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
* *
* L data IV data IV data R * L data IV data IV data R
*/ */
fort_table_properties_t *properties = context->table_properties;
typedef const char *(*border_chars_point_t)[BorderItemPosSize]; typedef const char *(*border_chars_point_t)[BorderItemPosSize];
enum ft_row_type row_type = (enum ft_row_type)get_cell_property_value_hierarcial(context->table_properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); enum ft_row_type row_type = (enum ft_row_type)get_cell_property_value_hierarcial(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE);
const char *(*bord_chars)[BorderItemPosSize] = (row_type == FT_ROW_HEADER) const char *(*bord_chars)[BorderItemPosSize] = (row_type == FT_ROW_HEADER)
? (border_chars_point_t)(&context->table_properties->border_style.header_border_chars) ? (border_chars_point_t)(&properties->border_style.header_border_chars)
: (border_chars_point_t)(&context->table_properties->border_style.border_chars); : (border_chars_point_t)(&properties->border_style.border_chars);
const char **L = &(*bord_chars)[LL_bip]; const char **L = &(*bord_chars)[LL_bip];
const char **IV = &(*bord_chars)[IV_bip]; const char **IV = &(*bord_chars)[IV_bip];
const char **R = &(*bord_chars)[RR_bip]; const char **R = &(*bord_chars)[RR_bip];
@ -749,7 +753,7 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties; fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties;
for (i = 0; i < row_height; ++i) { for (i = 0; i < row_height; ++i) {
/* Print left margin */ /* Print left margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE));
/* Print left table boundary */ /* Print left table boundary */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L));
@ -772,7 +776,7 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width)); CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width));
} else { } else {
/* Print empty cell */ /* Print empty cell */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], FT_SPACE));
} }
/* Print boundary between cells */ /* Print boundary between cells */
@ -786,10 +790,10 @@ int snprintf_row(const fort_row_t *row, conv_context_t *cntx, size_t *col_width_
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R));
/* Print right margin */ /* Print right margin */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, space_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE));
/* Print new line character */ /* Print new line character */
CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, new_line_char)); CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE));
} }
return (int)written; return (int)written;