чување 9e2e49f19eef3f99810ac59a12b85dd20ba169e6
родитељ bc76d7ae62368cbc8d457c342aedbf50196ef77b
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Mon, 23 Aug 2021 23:14:22 +0200
Fix: var & mask is not the same as (var & mask) != 0 for unsigned long long
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | defs.h | | | 4 | ++++ |
| M | slweb.c | | | 222 | +++++++++++++++++++++++++++++++++++++++---------------------------------------- |
измењених датотека: 2, додавања: 114(+), брисања: 112(-)
diff --git a/defs.h b/defs.h
@@ -52,6 +52,10 @@ typedef enum
TRUE = 1
} BOOL;
+#define ALL(var, mask) (((var) & (mask)) == (mask))
+#define ANY(var, mask) (((var) & (mask)) != 0)
+#define IN(var, mask) ALL(var, mask)
+
typedef unsigned char UBYTE;
typedef unsigned long ULONG;
typedef unsigned long long ULLONG;
diff --git a/slweb.c b/slweb.c
@@ -83,9 +83,6 @@ static ULLONG state = ST_NONE;
ptoken = token; \
} while (0)
-#define ALL(var, mask) (((var) & (mask)) == (mask))
-#define ANY(var, mask) ((var) & (mask))
-
int
version()
{
@@ -285,7 +282,7 @@ print_output(FILE* output, const char* fmt, ...)
exit(error(EINVAL, (u8*)"print_output: Invalid argument"));
va_start(args, fmt);
- if (state & ST_CSV_BODY)
+ if (IN(state, ST_CSV_BODY))
{
size_t buf_len = 0;
vsnprintf((char*)buf, BUFSIZE, fmt, args);
@@ -551,7 +548,7 @@ print_csv_row(FILE* output, u8** csv_header, u8** csv_register)
csv_template_start:
if (!*pcsv_template)
goto csv_template_done;
- if (csv_state & ST_CS_ESCAPE)
+ if (IN(csv_state, ST_CS_ESCAPE))
{
PRINTIF("%c", *pcsv_template);
csv_state &= ~ST_CS_ESCAPE;
@@ -566,7 +563,7 @@ csv_template_start:
pcsv_template++;
break;
case '$':
- if (csv_state & ST_CS_REGISTER)
+ if (IN(csv_state, ST_CS_REGISTER))
{
PRINTIF("%c", '$');
csv_state &= ~ST_CS_REGISTER;
@@ -576,12 +573,12 @@ csv_template_start:
pcsv_template++;
break;
case '#':
- if (csv_state & ST_CS_HEADER)
+ if (IN(csv_state, ST_CS_HEADER))
{
error(1, (u8*)"csv: Invalid header register mark");
csv_state &= ~(ST_CS_REGISTER | ST_CS_HEADER);
}
- else if (csv_state & ST_CS_REGISTER)
+ else if (IN(csv_state, ST_CS_REGISTER))
{
csv_state &= ~ST_CS_REGISTER;
csv_state |= ST_CS_HEADER;
@@ -591,12 +588,12 @@ csv_template_start:
pcsv_template++;
break;
case '?':
- if (csv_state & ST_CS_COND)
+ if (IN(csv_state, ST_CS_COND))
{
error(1, (u8*)"csv: Invalid conditional mark");
csv_state &= ~ST_CS_COND;
}
- else if (csv_state & ST_CS_REGISTER)
+ else if (IN(csv_state, ST_CS_REGISTER))
{
csv_state &= ~ST_CS_REGISTER;
csv_state |= ST_CS_COND;
@@ -611,7 +608,7 @@ csv_template_start:
csv_state &= ~(ST_CS_COND | ST_CS_COND_NONEMPTY);
csv_state |= ST_CS_COND_EMPTY;
}
- else if (csv_state & ST_CS_COND)
+ else if (IN(csv_state, ST_CS_COND))
{
error(1,
(u8*)"Empty conditional before/without nonempty"
@@ -640,19 +637,19 @@ csv_template_start:
case '7':
case '8':
case '9':
- if (csv_state & ST_CS_COND)
+ if (IN(csv_state, ST_CS_COND))
{
conditional_index = *pcsv_template - '0';
csv_state &= ~ST_CS_COND;
csv_state |= ST_CS_COND_NONEMPTY;
}
- else if (csv_state & ST_CS_HEADER)
+ else if (IN(csv_state, ST_CS_HEADER))
{
num = *pcsv_template - '0';
PRINTIF("%s", csv_header[num - 1]);
csv_state &= ~ST_CS_HEADER;
}
- else if (csv_state & ST_CS_REGISTER)
+ else if (IN(csv_state, ST_CS_REGISTER))
{
num = *pcsv_template - '0';
PRINTIF("%s", csv_register[num - 1]);
@@ -663,12 +660,12 @@ csv_template_start:
pcsv_template++;
break;
default:
- if (csv_state & ST_CS_HEADER)
+ if (IN(csv_state, ST_CS_HEADER))
{
error(1, (u8*)"csv: Invalid header register mark");
csv_state &= ~ST_CS_HEADER;
}
- else if (csv_state & ST_CS_REGISTER)
+ else if (IN(csv_state, ST_CS_REGISTER))
{
error(1, (u8*)"csv: Invalid register mark");
csv_state &= ~ST_CS_REGISTER;
@@ -732,7 +729,7 @@ read_csv(FILE* output, const char* filename, csv_callback_t callback)
switch (*pbufline)
{
case '"':
- if (csv_state & ST_CS_QUOTE)
+ if (IN(csv_state, ST_CS_QUOTE))
csv_state &= ~ST_CS_QUOTE;
else
csv_state |= ST_CS_QUOTE;
@@ -740,7 +737,7 @@ read_csv(FILE* output, const char* filename, csv_callback_t callback)
break;
case ';':
case ',':
- if (csv_state & ST_CS_QUOTE)
+ if (IN(csv_state, ST_CS_QUOTE))
CHECKCOPY(token, ptoken, token_size, pbufline);
else
{
@@ -759,7 +756,7 @@ read_csv(FILE* output, const char* filename, csv_callback_t callback)
}
break;
default:
- if (csv_state & ST_CS_QUOTE)
+ if (IN(csv_state, ST_CS_QUOTE))
CHECKCOPY(token, ptoken, token_size, pbufline);
else if (csv_delimiter && *pbufline == *csv_delimiter)
{
@@ -835,7 +832,7 @@ process_csv(FILE* output, const u8* arg_token,
}
else
{
- if (state & ST_CSV_BODY)
+ if (IN(state, ST_CSV_BODY))
exit(error(1, (u8*)"Can't nest csv directives"));
state |= ST_CSV_BODY;
@@ -1002,7 +999,7 @@ process_list_item_start(FILE* output)
int
process_list_item_end(FILE* output)
{
- if (state & ST_PARA_OPEN)
+ if (IN(state, ST_PARA_OPEN))
{
state &= ~ST_PARA_OPEN;
fprintf(output, "</p>");
@@ -1397,7 +1394,7 @@ process_macro(FILE* output, const u8* token,
{
if (!end_tag)
{
- if (state & ST_MACRO_BODY)
+ if (IN(state, ST_MACRO_BODY))
exit(error(1, (u8*)"Macro undefined or nested"));
BOOL seen = FALSE;
@@ -1796,7 +1793,7 @@ process_line_start(FILE* output, const u8* line, const u8* link_prefix,
{
if (!list_para)
{
- if (state & ST_LIST)
+ if (IN(state, ST_LIST))
{
state &= ~ST_LIST;
if (!read_yaml_macros_and_links)
@@ -1806,7 +1803,7 @@ process_line_start(FILE* output, const u8* line, const u8* link_prefix,
}
}
- if (state & ST_NUMLIST)
+ if (IN(state, ST_NUMLIST))
{
state &= ~ST_NUMLIST;
if (!read_yaml_macros_and_links)
@@ -1816,10 +1813,10 @@ process_line_start(FILE* output, const u8* line, const u8* link_prefix,
}
}
- if (state & ST_FOOTNOTE_TEXT)
+ if (IN(state, ST_FOOTNOTE_TEXT))
{
if (!read_yaml_macros_and_links
- && (state & ST_PARA_OPEN))
+ && (IN(state, ST_PARA_OPEN)))
{
print_output(output, "</p>\n");
output_firstcol = TRUE;
@@ -1847,7 +1844,7 @@ process_text_token(FILE* output, const u8* line, const u8* link_prefix,
const BOOL read_yaml_macros_and_links, const BOOL list_para, u8** token,
u8** ptoken, size_t* token_size, const BOOL add_enclosing_paragraph)
{
- if (!(state & ST_YAML))
+ if (!(IN(state, ST_YAML)))
{
if (add_enclosing_paragraph && !processed_start_of_line)
process_line_start(output, line, link_prefix,
@@ -1855,7 +1852,7 @@ process_text_token(FILE* output, const u8* line, const u8* link_prefix,
read_yaml_macros_and_links, list_para);
**ptoken = 0;
if (**token && !read_yaml_macros_and_links
- && !(state & ST_MACRO_BODY))
+ && !(IN(state, ST_MACRO_BODY)))
{
print_output(output, "%s", *token);
u8* eol = (u8*)strrchr((char*)*token, '\n');
@@ -1959,10 +1956,10 @@ int
process_horizontal_rule(FILE* output)
{
/* Temporarily break paragraph as hr is para-level */
- if (state & ST_PARA_OPEN)
+ if (IN(state, ST_PARA_OPEN))
print_output(output, "</p>\n");
print_output(output, "<hr />\n");
- if (state & ST_PARA_OPEN)
+ if (IN(state, ST_PARA_OPEN))
print_output(output, "<p>\n");
output_firstcol = TRUE;
return 0;
@@ -2138,7 +2135,7 @@ end_footnotes(FILE* output, BOOL add_footnote_div)
{
size_t footnote = 0;
- if (state & ST_PARA_OPEN)
+ if (IN(state, ST_PARA_OPEN))
{
print_output(output, "</p>\n");
output_firstcol = TRUE;
@@ -2331,7 +2328,7 @@ do_line:
{
skip_eol = TRUE;
- if (!(state & ST_YAML) && lineno > 1
+ if (!(IN(state, ST_YAML)) && lineno > 1
&& !read_yaml_macros_and_links)
process_horizontal_rule(output);
else
@@ -2348,7 +2345,7 @@ do_line:
else if (colno == 1 && strlen((char*)pline) > 1
&& *(pline + 1) == ' ')
{
- if (state & ST_NUMLIST)
+ if (IN(state, ST_NUMLIST))
{
state &= ~ST_NUMLIST;
if (!read_yaml_macros_and_links)
@@ -2359,7 +2356,7 @@ do_line:
}
if (!read_yaml_macros_and_links)
{
- if (!(state & ST_LIST))
+ if (!(IN(state, ST_LIST)))
process_list_start(output);
else
process_list_item_end(output);
@@ -2383,7 +2380,7 @@ do_line:
break;
case ':':
- if (state & ST_YAML
+ if (IN(state, ST_YAML)
&& !(ANY(state,
ST_CODE | ST_DISPLAY_FORMULA | ST_FORMULA
| ST_HEADING | ST_IMAGE | ST_MACRO_BODY
@@ -2529,9 +2526,9 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_STRIKE ? (u8*)"</s>"
- : (u8*)"<s>";
- size_t tag_len = strlen((char*)tag);
+ u8* tag = IN(state, ST_STRIKE) ? (u8*)"</s>"
+ : (u8*)"<s>";
+ size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
*ptoken = 0;
@@ -2558,7 +2555,7 @@ do_line:
&& !(ANY(state,
ST_PRE | ST_CODE | ST_HEADING)))
process_strike(output,
- state & ST_STRIKE);
+ (IN(state, ST_STRIKE)));
}
state ^= ST_STRIKE;
@@ -2584,7 +2581,7 @@ do_line:
if (!read_yaml_macros_and_links)
{
- if (state & ST_PRE)
+ if (IN(state, ST_PRE))
print_output(output, "<pre>");
else
print_output(output, "</pre>");
@@ -2602,8 +2599,8 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_CODE ? (u8*)"</code>"
- : (u8*)"<code>";
+ u8* tag = IN(state, ST_CODE) ? (u8*)"</code>"
+ : (u8*)"<code>";
size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
@@ -2629,7 +2626,7 @@ do_line:
if (!read_yaml_macros_and_links
&& !(ANY(state, ST_PRE | ST_HEADING)))
- process_code(output, state & ST_CODE);
+ process_code(output, IN(state, ST_CODE));
}
state ^= ST_CODE;
@@ -2650,7 +2647,7 @@ do_line:
ST_CODE | ST_DISPLAY_FORMULA | ST_FORMULA
| ST_MACRO_BODY | ST_PRE | ST_YAML)))
{
- if (state & ST_LIST)
+ if (IN(state, ST_LIST))
{
state &= ~ST_LIST;
if (!read_yaml_macros_and_links)
@@ -2660,7 +2657,7 @@ do_line:
}
}
- if (state & ST_NUMLIST)
+ if (IN(state, ST_NUMLIST))
{
state &= ~ST_NUMLIST;
if (!read_yaml_macros_and_links)
@@ -2675,7 +2672,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_HEADING && *(pline - 1) == '#')
+ else if (IN(state, ST_HEADING) && *(pline - 1) == '#')
{
if (heading_level < MAX_HEADING_LEVEL)
heading_level++;
@@ -2709,8 +2706,8 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_BOLD ? (u8*)"</strong>"
- : (u8*)"<strong>";
+ u8* tag = IN(state, ST_BOLD) ? (u8*)"</strong>"
+ : (u8*)"<strong>";
size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
@@ -2737,7 +2734,7 @@ do_line:
if (!read_yaml_macros_and_links
&& !(ANY(state,
ST_PRE | ST_CODE | ST_HEADING)))
- process_bold(output, state & ST_BOLD);
+ process_bold(output, IN(state, ST_BOLD));
}
state ^= ST_BOLD;
@@ -2752,8 +2749,8 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_ITALIC ? (u8*)"</em>"
- : (u8*)"<em>";
+ u8* tag = IN(state, ST_ITALIC) ? (u8*)"</em>"
+ : (u8*)"<em>";
size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
@@ -2781,7 +2778,7 @@ do_line:
&& !(ANY(state,
ST_PRE | ST_CODE | ST_HEADING)))
process_italic(output,
- state & ST_ITALIC);
+ IN(state, ST_ITALIC));
}
state ^= ST_ITALIC;
@@ -2804,7 +2801,7 @@ do_line:
if (colno == 1 && strlen((char*)pline) > 1
&& *(pline + 1) == ' ')
{
- if (state & ST_NUMLIST)
+ if (IN(state, ST_NUMLIST))
{
state &= ~ST_NUMLIST;
if (!read_yaml_macros_and_links)
@@ -2815,7 +2812,7 @@ do_line:
}
if (!read_yaml_macros_and_links)
{
- if (!(state & ST_LIST))
+ if (!(IN(state, ST_LIST)))
process_list_start(output);
else
process_list_item_end(output);
@@ -2870,7 +2867,7 @@ do_line:
else if (colno == 1 && strlen((char*)pline) > 1
&& *(pline + 1) == ' ')
{
- if (state & ST_NUMLIST)
+ if (IN(state, ST_NUMLIST))
{
state &= ~ST_NUMLIST;
if (!read_yaml_macros_and_links)
@@ -2881,7 +2878,7 @@ do_line:
}
if (!read_yaml_macros_and_links)
{
- if (!(state & ST_LIST))
+ if (!(IN(state, ST_LIST)))
process_list_start(output);
else
process_list_item_end(output);
@@ -2905,8 +2902,8 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_BOLD ? (u8*)"</strong>"
- : (u8*)"<strong>";
+ u8* tag = IN(state, ST_BOLD) ? (u8*)"</strong>"
+ : (u8*)"<strong>";
size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
@@ -2933,7 +2930,7 @@ do_line:
if (!read_yaml_macros_and_links
&& !(ANY(state,
ST_PRE | ST_CODE | ST_HEADING)))
- process_bold(output, state & ST_BOLD);
+ process_bold(output, IN(state, ST_BOLD));
}
state ^= ST_BOLD;
@@ -2949,8 +2946,8 @@ do_line:
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_ITALIC ? (u8*)"</em>"
- : (u8*)"<em>";
+ u8* tag = IN(state, ST_ITALIC) ? (u8*)"</em>"
+ : (u8*)"<em>";
size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
@@ -2978,7 +2975,7 @@ do_line:
&& !(ANY(state,
ST_PRE | ST_CODE | ST_HEADING)))
process_italic(output,
- state & ST_ITALIC);
+ IN(state, ST_ITALIC));
}
state ^= ST_ITALIC;
@@ -2997,7 +2994,7 @@ do_line:
break;
}
- if ((state & ST_HEADING) && !(state & ST_HEADING_TEXT))
+ if ((IN(state, ST_HEADING)) && !(IN(state, ST_HEADING_TEXT)))
{
if (!read_yaml_macros_and_links)
{
@@ -3040,7 +3037,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_LINK_MACRO)
+ else if (IN(state, ST_LINK_MACRO))
{
*ptoken = 0;
strncpy((char*)link_macro, (char*)token, BUFSIZE - 1);
@@ -3048,7 +3045,7 @@ do_line:
RESET_TOKEN(token, ptoken, token_size);
state &= ~ST_LINK_MACRO;
}
- else if (!(state & ST_HEADING && *(pline - 1) == '#'))
+ else if (!(IN(state, ST_HEADING) && *(pline - 1) == '#'))
CHECKCOPY(token, ptoken, token_size, pline);
colno++;
break;
@@ -3064,7 +3061,7 @@ do_line:
break;
}
- if (state & ST_MACRO_BODY)
+ if (IN(state, ST_MACRO_BODY))
{
*ptoken = 0;
size_t token_len = strlen((char*)token);
@@ -3134,7 +3131,7 @@ do_line:
break;
}
- if ((state & ST_TAG) && pline - 1 && *(pline - 1) == '{')
+ if ((IN(state, ST_TAG)) && pline - 1 && *(pline - 1) == '{')
{
end_tag = TRUE;
pline++;
@@ -3155,7 +3152,7 @@ do_line:
break;
}
- if (state & ST_TAG)
+ if (IN(state, ST_TAG))
{
state &= ~ST_TAG;
*ptoken = 0;
@@ -3190,9 +3187,9 @@ do_line:
ST_INLINE_FOOTNOTE | ST_HEADING
| ST_FOOTNOTE_TEXT | ST_LINK))
{
- u8* tag = state & ST_KBD ? (u8*)"</kbd>"
- : (u8*)"<kbd>";
- size_t tag_len = strlen((char*)tag);
+ u8* tag = IN(state, ST_KBD) ? (u8*)"</kbd>"
+ : (u8*)"<kbd>";
+ size_t tag_len = strlen((char*)tag);
size_t token_len = 0;
*ptoken = 0;
@@ -3220,7 +3217,8 @@ do_line:
ST_PRE | ST_CODE | ST_HEADING)))
{
state ^= ST_KBD;
- process_kbd(output, !(state & ST_KBD));
+ process_kbd(output,
+ !(IN(state, ST_KBD)));
output_firstcol = FALSE;
}
}
@@ -3229,7 +3227,7 @@ do_line:
colno += 2;
}
/* Partial tables (for templating) */
- else if (!(state & ST_PRE) && colno == 1
+ else if (!(IN(state, ST_PRE)) && colno == 1
&& strlen((char*)pline) > 1 && *(pline + 1) == '@')
{
skip_eol = TRUE;
@@ -3289,11 +3287,11 @@ do_line:
colno++;
}
}
- else if (!(state & ST_PRE) && colno == 1)
+ else if (!(IN(state, ST_PRE)) && colno == 1)
{
skip_eol = TRUE;
- if (state & ST_TABLE_HEADER)
+ if (IN(state, ST_TABLE_HEADER))
{
state &= ~ST_TABLE_HEADER;
state |= ST_TABLE_LINE;
@@ -3301,7 +3299,7 @@ do_line:
break;
}
- if (state & ST_TABLE_LINE)
+ if (IN(state, ST_TABLE_LINE))
{
state &= ~ST_TABLE_LINE;
state |= ST_TABLE;
@@ -3311,7 +3309,7 @@ do_line:
output_firstcol = FALSE;
}
}
- else if (state & ST_TABLE)
+ else if (IN(state, ST_TABLE))
{
if (!read_yaml_macros_and_links)
{
@@ -3332,7 +3330,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_TABLE_HEADER)
+ else if (IN(state, ST_TABLE_HEADER))
{
*ptoken = 0;
if (!read_yaml_macros_and_links)
@@ -3355,7 +3353,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_TABLE)
+ else if (IN(state, ST_TABLE))
{
*ptoken = 0;
if (!read_yaml_macros_and_links)
@@ -3413,7 +3411,7 @@ do_line:
break;
case '>':
- if (state & ST_HTML_TAG)
+ if (IN(state, ST_HTML_TAG))
state &= ~ST_HTML_TAG;
if (ANY(state,
@@ -3430,7 +3428,7 @@ do_line:
&& colno == 1)
{
if (!read_yaml_macros_and_links
- && !(state & ST_BLOCKQUOTE))
+ && !(IN(state, ST_BLOCKQUOTE)))
{
process_blockquote(output, FALSE);
output_firstcol = FALSE;
@@ -3522,10 +3520,10 @@ do_line:
break;
}
- if (state & ST_FOOTNOTE_TEXT)
+ if (IN(state, ST_FOOTNOTE_TEXT))
{
if (!read_yaml_macros_and_links
- && (state & ST_PARA_OPEN))
+ && (IN(state, ST_PARA_OPEN)))
{
print_output(output, "</p>\n");
output_firstcol = TRUE;
@@ -3603,7 +3601,7 @@ do_line:
| ST_INLINE_FOOTNOTE | ST_LINK_SECOND_ARG_END
| ST_MACRO_BODY | ST_PRE))
CHECKCOPY(token, ptoken, token_size, pline);
- else if (*link_macro && (state & ST_LINK))
+ else if (*link_macro && (IN(state, ST_LINK)))
{
u8* tag = (u8*)"<span>";
size_t tag_len = strlen((char*)tag);
@@ -3639,7 +3637,8 @@ do_line:
pline_len = strlen((char*)pline);
- if (state & ST_LINK_SPAN && pline_len > 1 && *(pline + 1) == ']')
+ if (IN(state, ST_LINK_SPAN) && pline_len > 1
+ && *(pline + 1) == ']')
{
u8* tag = (u8*)"</span>";
size_t tag_len = strlen((char*)tag);
@@ -3664,7 +3663,7 @@ do_line:
*ptoken = 0;
if (!read_yaml_macros_and_links)
{
- if (state & ST_LINK_SECOND_ARG)
+ if (IN(state, ST_LINK_SECOND_ARG))
process_inline_link(output, link_text,
link_prefix,
get_value(macros, macros_count,
@@ -3697,7 +3696,7 @@ do_line:
}
*ptoken = 0;
- if (state & ST_INLINE_FOOTNOTE)
+ if (IN(state, ST_INLINE_FOOTNOTE))
{
process_inline_footnote(token,
read_yaml_macros_and_links, output);
@@ -3708,7 +3707,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_FOOTNOTE)
+ else if (IN(state, ST_FOOTNOTE))
{
BOOL footnote_definition = (strlen((char*)pline) > 1)
&& (*(pline + 1) == ':')
@@ -3737,7 +3736,7 @@ do_line:
state |= ST_FOOTNOTE_TEXT;
}
}
- else if (state & ST_LINK_SECOND_ARG)
+ else if (IN(state, ST_LINK_SECOND_ARG))
{
if (!read_yaml_macros_and_links)
process_link(output, link_text, link_prefix,
@@ -3749,7 +3748,7 @@ do_line:
pline++;
colno++;
}
- else if (state & ST_IMAGE_SECOND_ARG)
+ else if (IN(state, ST_IMAGE_SECOND_ARG))
{
if (!read_yaml_macros_and_links)
process_image(output, link_text,
@@ -3817,7 +3816,7 @@ do_line:
colno += 2;
RESET_TOKEN(token, ptoken, token_size);
keep_token = FALSE;
- if (state & ST_LINK)
+ if (IN(state, ST_LINK))
state |= ST_LINK_SECOND_ARG;
else
state |= ST_IMAGE_SECOND_ARG;
@@ -3908,12 +3907,12 @@ do_line:
if (strlen((char*)pline) > 1 && *(pline + 1) == '$')
{
- if (state & ST_FORMULA)
+ if (IN(state, ST_FORMULA))
exit(error(1,
(u8*)"Display formula within an"
" open formula"));
- if (!(state & ST_DISPLAY_FORMULA))
+ if (!(IN(state, ST_DISPLAY_FORMULA)))
{
/* Output existing text up to $$ */
process_text_token(output, line, link_prefix,
@@ -3926,7 +3925,7 @@ do_line:
state ^= ST_DISPLAY_FORMULA;
- if (state & ST_DISPLAY_FORMULA)
+ if (IN(state, ST_DISPLAY_FORMULA))
keep_token = TRUE;
else
{
@@ -3944,12 +3943,12 @@ do_line:
}
else
{
- if (state & ST_DISPLAY_FORMULA)
+ if (IN(state, ST_DISPLAY_FORMULA))
exit(error(1,
(u8*)"Formula within an open"
" display formula"));
- if (!(state & ST_FORMULA))
+ if (!(IN(state, ST_FORMULA)))
{
/* Output existing text up to $ */
process_text_token(output, line, link_prefix,
@@ -3962,7 +3961,7 @@ do_line:
state ^= ST_FORMULA;
- if (state & ST_FORMULA)
+ if (IN(state, ST_FORMULA))
keep_token = TRUE;
else
{
@@ -4000,7 +3999,7 @@ do_line:
else if (colno == 1 && strlen((char*)pline) > 1
&& (*(pline + 1) == '.' || *(pline + 1) == ')'))
{
- if (state & ST_LIST)
+ if (IN(state, ST_LIST))
{
state &= ~ST_LIST;
if (!read_yaml_macros_and_links)
@@ -4011,7 +4010,7 @@ do_line:
}
if (!read_yaml_macros_and_links)
{
- if (!(state & ST_NUMLIST))
+ if (!(IN(state, ST_NUMLIST)))
process_numlist_start(output);
else
process_list_item_end(output);
@@ -4043,7 +4042,7 @@ do_line:
done_line:
*ptoken = 0;
- if (*token && read_yaml_macros_and_links && (state & ST_YAML_VAL))
+ if (*token && read_yaml_macros_and_links && (IN(state, ST_YAML_VAL)))
{
*ptoken = 0;
if (!vars)
@@ -4080,7 +4079,7 @@ done_line:
{
*ptoken = 0;
size_t token_len = strlen((char*)token);
- if (state & ST_MACRO_BODY)
+ if (IN(state, ST_MACRO_BODY))
{
skip_eol = TRUE;
if (!read_yaml_macros_and_links)
@@ -4129,7 +4128,7 @@ done_line:
}
skip_macro_read:;
}
- else if (state & ST_FOOTNOTE_TEXT)
+ else if (IN(state, ST_FOOTNOTE_TEXT))
{
skip_eol = TRUE;
if (!read_yaml_macros_and_links)
@@ -4204,7 +4203,7 @@ done_line:
plinks->value_size - 1);
}
}
- else if (state & ST_HEADING)
+ else if (IN(state, ST_HEADING))
{
state &= ~(ST_HEADING | ST_HEADING_TEXT);
if (!read_yaml_macros_and_links)
@@ -4232,19 +4231,19 @@ done_line:
| ST_LINK_SECOND_ARG_END)
&& (!*pbuffer || *pbuffer == '\n'))
{
- if (state & ST_PARA_OPEN)
+ if (IN(state, ST_PARA_OPEN))
{
if (!read_yaml_macros_and_links)
{
print_output(output, "</p>");
output_firstcol = FALSE;
}
- if (state & ST_LIST)
+ if (IN(state, ST_LIST))
skip_eol = TRUE;
state &= ~ST_PARA_OPEN;
}
- if (!*pbuffer && (state & ST_LIST))
+ if (!*pbuffer && (IN(state, ST_LIST)))
{
if (!read_yaml_macros_and_links)
{
@@ -4254,7 +4253,7 @@ done_line:
state &= ~ST_LIST;
}
- if (!*pbuffer && (state & ST_NUMLIST))
+ if (!*pbuffer && (IN(state, ST_NUMLIST)))
{
if (!read_yaml_macros_and_links)
{
@@ -4264,7 +4263,7 @@ done_line:
state &= ~ST_NUMLIST;
}
- if (!*pbuffer && (state & ST_FOOTNOTE_TEXT))
+ if (!*pbuffer && (IN(state, ST_FOOTNOTE_TEXT)))
{
state &= ~ST_FOOTNOTE_TEXT;
@@ -4312,7 +4311,7 @@ done_line:
}
}
- if (state & ST_BLOCKQUOTE && (!*pbuffer || *pbuffer != '>'))
+ if (IN(state, ST_BLOCKQUOTE) && (!*pbuffer || *pbuffer != '>'))
{
state &= ~ST_BLOCKQUOTE;
process_blockquote(output, TRUE);
@@ -4331,7 +4330,7 @@ done_line:
state &= ~(ST_TABLE_HEADER | ST_TABLE_LINE);
}
- if ((state & ST_TABLE) && (!line_len || !*pbuffer))
+ if ((IN(state, ST_TABLE)) && (!line_len || !*pbuffer))
{
if (!read_yaml_macros_and_links)
{
@@ -4356,7 +4355,7 @@ done_line:
if (!keep_token)
RESET_TOKEN(token, ptoken, token_size);
- if (!skip_change_first_line_in_doc && !(state & ST_YAML))
+ if (!skip_change_first_line_in_doc && !(IN(state, ST_YAML)))
first_line_in_doc = FALSE;
skip_change_first_line_in_doc = FALSE;
@@ -4568,4 +4567,3 @@ main(const int argc, const char** argv)
return result;
}
-