fixed BOM handling #344
This commit is contained in:
parent
b820bb3b1f
commit
a8136c578a
3 changed files with 252 additions and 285 deletions
521
src/json.hpp
521
src/json.hpp
|
@ -7620,6 +7620,14 @@ class basic_json
|
||||||
{
|
{
|
||||||
// fill buffer
|
// fill buffer
|
||||||
fill_line_buffer();
|
fill_line_buffer();
|
||||||
|
|
||||||
|
// skip UTF-8 byte-order mark
|
||||||
|
if (m_line_buffer.size() >= 3 and m_line_buffer.substr(0, 3) == "\xEF\xBB\xBF")
|
||||||
|
{
|
||||||
|
m_line_buffer[0] = ' ';
|
||||||
|
m_line_buffer[1] = ' ';
|
||||||
|
m_line_buffer[2] = ' ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// switch off unwanted functions (due to pointer members)
|
// switch off unwanted functions (due to pointer members)
|
||||||
|
@ -7826,7 +7834,7 @@ class basic_json
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
};
|
};
|
||||||
if ((m_limit - m_cursor) < 6)
|
if ((m_limit - m_cursor) < 5)
|
||||||
{
|
{
|
||||||
fill_line_buffer();
|
fill_line_buffer();
|
||||||
}
|
}
|
||||||
|
@ -7835,7 +7843,7 @@ class basic_json
|
||||||
{
|
{
|
||||||
goto basic_json_parser_6;
|
goto basic_json_parser_6;
|
||||||
}
|
}
|
||||||
if (yych <= '\\')
|
if (yych <= '[')
|
||||||
{
|
{
|
||||||
if (yych <= '-')
|
if (yych <= '-')
|
||||||
{
|
{
|
||||||
|
@ -7884,63 +7892,59 @@ class basic_json
|
||||||
{
|
{
|
||||||
goto basic_json_parser_17;
|
goto basic_json_parser_17;
|
||||||
}
|
}
|
||||||
if (yych == '[')
|
if (yych <= 'Z')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_19;
|
goto basic_json_parser_4;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_4;
|
goto basic_json_parser_19;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 't')
|
if (yych <= 'n')
|
||||||
{
|
{
|
||||||
if (yych <= 'f')
|
if (yych <= 'e')
|
||||||
{
|
{
|
||||||
if (yych <= ']')
|
if (yych == ']')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_21;
|
goto basic_json_parser_21;
|
||||||
}
|
}
|
||||||
if (yych <= 'e')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_4;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_23;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (yych == 'n')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_24;
|
|
||||||
}
|
|
||||||
if (yych <= 's')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_4;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (yych <= '|')
|
|
||||||
{
|
|
||||||
if (yych == '{')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_26;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_4;
|
goto basic_json_parser_4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= '}')
|
if (yych <= 'f')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_23;
|
||||||
|
}
|
||||||
|
if (yych <= 'm')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_4;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_24;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (yych <= 'z')
|
||||||
|
{
|
||||||
|
if (yych == 't')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_25;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (yych <= '{')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_26;
|
||||||
|
}
|
||||||
|
if (yych == '}')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_28;
|
goto basic_json_parser_28;
|
||||||
}
|
}
|
||||||
if (yych == 0xC3)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_30;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_4;
|
goto basic_json_parser_4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7981,7 +7985,7 @@ basic_json_parser_9:
|
||||||
}
|
}
|
||||||
if (yych <= 0x7F)
|
if (yych <= 0x7F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_32;
|
goto basic_json_parser_31;
|
||||||
}
|
}
|
||||||
if (yych <= 0xC1)
|
if (yych <= 0xC1)
|
||||||
{
|
{
|
||||||
|
@ -7989,7 +7993,7 @@ basic_json_parser_9:
|
||||||
}
|
}
|
||||||
if (yych <= 0xF4)
|
if (yych <= 0xF4)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_32;
|
goto basic_json_parser_31;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_5;
|
goto basic_json_parser_5;
|
||||||
basic_json_parser_10:
|
basic_json_parser_10:
|
||||||
|
@ -8020,18 +8024,18 @@ basic_json_parser_13:
|
||||||
{
|
{
|
||||||
if (yych == '.')
|
if (yych == '.')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_44;
|
goto basic_json_parser_43;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 'E')
|
if (yych <= 'E')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
if (yych == 'e')
|
if (yych == 'e')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
basic_json_parser_14:
|
basic_json_parser_14:
|
||||||
|
@ -8055,7 +8059,7 @@ basic_json_parser_15:
|
||||||
{
|
{
|
||||||
if (yych == '.')
|
if (yych == '.')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_44;
|
goto basic_json_parser_43;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
}
|
}
|
||||||
|
@ -8063,11 +8067,11 @@ basic_json_parser_15:
|
||||||
{
|
{
|
||||||
if (yych <= 'E')
|
if (yych <= 'E')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
if (yych == 'e')
|
if (yych == 'e')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
}
|
}
|
||||||
|
@ -8094,7 +8098,7 @@ basic_json_parser_23:
|
||||||
yych = *(m_marker = ++m_cursor);
|
yych = *(m_marker = ++m_cursor);
|
||||||
if (yych == 'a')
|
if (yych == 'a')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_46;
|
goto basic_json_parser_45;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_5;
|
goto basic_json_parser_5;
|
||||||
basic_json_parser_24:
|
basic_json_parser_24:
|
||||||
|
@ -8102,7 +8106,7 @@ basic_json_parser_24:
|
||||||
yych = *(m_marker = ++m_cursor);
|
yych = *(m_marker = ++m_cursor);
|
||||||
if (yych == 'u')
|
if (yych == 'u')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_47;
|
goto basic_json_parser_46;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_5;
|
goto basic_json_parser_5;
|
||||||
basic_json_parser_25:
|
basic_json_parser_25:
|
||||||
|
@ -8110,7 +8114,7 @@ basic_json_parser_25:
|
||||||
yych = *(m_marker = ++m_cursor);
|
yych = *(m_marker = ++m_cursor);
|
||||||
if (yych == 'r')
|
if (yych == 'r')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_48;
|
goto basic_json_parser_47;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_5;
|
goto basic_json_parser_5;
|
||||||
basic_json_parser_26:
|
basic_json_parser_26:
|
||||||
|
@ -8126,24 +8130,16 @@ basic_json_parser_28:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basic_json_parser_30:
|
basic_json_parser_30:
|
||||||
yyaccept = 0;
|
|
||||||
yych = *(m_marker = ++m_cursor);
|
|
||||||
if (yych == 0xAF)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_49;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_5;
|
|
||||||
basic_json_parser_31:
|
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
fill_line_buffer();
|
fill_line_buffer();
|
||||||
}
|
}
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
basic_json_parser_32:
|
basic_json_parser_31:
|
||||||
if (yybm[0 + yych] & 128)
|
if (yybm[0 + yych] & 128)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
if (yych <= 0xE0)
|
if (yych <= 0xE0)
|
||||||
{
|
{
|
||||||
|
@ -8151,25 +8147,25 @@ basic_json_parser_32:
|
||||||
{
|
{
|
||||||
if (yych <= 0x1F)
|
if (yych <= 0x1F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '"')
|
if (yych <= '"')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_34;
|
goto basic_json_parser_33;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_36;
|
goto basic_json_parser_35;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 0xC1)
|
if (yych <= 0xC1)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 0xDF)
|
if (yych <= 0xDF)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_37;
|
goto basic_json_parser_36;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_38;
|
goto basic_json_parser_37;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -8178,27 +8174,27 @@ basic_json_parser_32:
|
||||||
{
|
{
|
||||||
if (yych == 0xED)
|
if (yych == 0xED)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_40;
|
goto basic_json_parser_39;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_39;
|
goto basic_json_parser_38;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 0xF0)
|
if (yych <= 0xF0)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_41;
|
goto basic_json_parser_40;
|
||||||
}
|
}
|
||||||
if (yych <= 0xF3)
|
if (yych <= 0xF3)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_42;
|
goto basic_json_parser_41;
|
||||||
}
|
}
|
||||||
if (yych <= 0xF4)
|
if (yych <= 0xF4)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_43;
|
goto basic_json_parser_42;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
basic_json_parser_33:
|
basic_json_parser_32:
|
||||||
m_cursor = m_marker;
|
m_cursor = m_marker;
|
||||||
if (yyaccept == 0)
|
if (yyaccept == 0)
|
||||||
{
|
{
|
||||||
|
@ -8208,13 +8204,13 @@ basic_json_parser_33:
|
||||||
{
|
{
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
}
|
}
|
||||||
basic_json_parser_34:
|
basic_json_parser_33:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
{
|
{
|
||||||
last_token_type = token_type::value_string;
|
last_token_type = token_type::value_string;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basic_json_parser_36:
|
basic_json_parser_35:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8227,13 +8223,13 @@ basic_json_parser_36:
|
||||||
{
|
{
|
||||||
if (yych == '"')
|
if (yych == '"')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
if (yych <= '.')
|
if (yych <= '.')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -8241,17 +8237,17 @@ basic_json_parser_36:
|
||||||
{
|
{
|
||||||
if (yych <= '[')
|
if (yych <= '[')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych == 'b')
|
if (yych == 'b')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8261,13 +8257,13 @@ basic_json_parser_36:
|
||||||
{
|
{
|
||||||
if (yych <= 'f')
|
if (yych <= 'f')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
if (yych == 'n')
|
if (yych == 'n')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -8275,25 +8271,25 @@ basic_json_parser_36:
|
||||||
{
|
{
|
||||||
if (yych <= 'r')
|
if (yych <= 'r')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 't')
|
if (yych <= 't')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
if (yych <= 'u')
|
if (yych <= 'u')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_50;
|
goto basic_json_parser_48;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
basic_json_parser_37:
|
basic_json_parser_36:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8302,14 +8298,14 @@ basic_json_parser_37:
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
if (yych <= 0x7F)
|
if (yych <= 0x7F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 0xBF)
|
if (yych <= 0xBF)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_38:
|
basic_json_parser_37:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8318,13 +8314,29 @@ basic_json_parser_38:
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
if (yych <= 0x9F)
|
if (yych <= 0x9F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 0xBF)
|
if (yych <= 0xBF)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_37;
|
goto basic_json_parser_36;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
|
basic_json_parser_38:
|
||||||
|
++m_cursor;
|
||||||
|
if (m_limit <= m_cursor)
|
||||||
|
{
|
||||||
|
fill_line_buffer();
|
||||||
|
}
|
||||||
|
yych = *m_cursor;
|
||||||
|
if (yych <= 0x7F)
|
||||||
|
{
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
}
|
||||||
|
if (yych <= 0xBF)
|
||||||
|
{
|
||||||
|
goto basic_json_parser_36;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_39:
|
basic_json_parser_39:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
|
@ -8334,30 +8346,14 @@ basic_json_parser_39:
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
if (yych <= 0x7F)
|
if (yych <= 0x7F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
|
||||||
if (yych <= 0xBF)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_37;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_40:
|
|
||||||
++m_cursor;
|
|
||||||
if (m_limit <= m_cursor)
|
|
||||||
{
|
|
||||||
fill_line_buffer();
|
|
||||||
}
|
|
||||||
yych = *m_cursor;
|
|
||||||
if (yych <= 0x7F)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
}
|
||||||
if (yych <= 0x9F)
|
if (yych <= 0x9F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_37;
|
goto basic_json_parser_36;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_41:
|
basic_json_parser_40:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8366,13 +8362,29 @@ basic_json_parser_41:
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
if (yych <= 0x8F)
|
if (yych <= 0x8F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 0xBF)
|
if (yych <= 0xBF)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_39;
|
goto basic_json_parser_38;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
|
basic_json_parser_41:
|
||||||
|
++m_cursor;
|
||||||
|
if (m_limit <= m_cursor)
|
||||||
|
{
|
||||||
|
fill_line_buffer();
|
||||||
|
}
|
||||||
|
yych = *m_cursor;
|
||||||
|
if (yych <= 0x7F)
|
||||||
|
{
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
}
|
||||||
|
if (yych <= 0xBF)
|
||||||
|
{
|
||||||
|
goto basic_json_parser_38;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_42:
|
basic_json_parser_42:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
|
@ -8382,95 +8394,72 @@ basic_json_parser_42:
|
||||||
yych = *m_cursor;
|
yych = *m_cursor;
|
||||||
if (yych <= 0x7F)
|
if (yych <= 0x7F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
|
||||||
if (yych <= 0xBF)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_39;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_43:
|
|
||||||
++m_cursor;
|
|
||||||
if (m_limit <= m_cursor)
|
|
||||||
{
|
|
||||||
fill_line_buffer();
|
|
||||||
}
|
|
||||||
yych = *m_cursor;
|
|
||||||
if (yych <= 0x7F)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
}
|
||||||
if (yych <= 0x8F)
|
if (yych <= 0x8F)
|
||||||
{
|
{
|
||||||
goto basic_json_parser_39;
|
goto basic_json_parser_38;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_44:
|
basic_json_parser_43:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_51;
|
goto basic_json_parser_49;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_45:
|
basic_json_parser_44:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych <= ',')
|
if (yych <= ',')
|
||||||
{
|
{
|
||||||
if (yych == '+')
|
if (yych == '+')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_53;
|
goto basic_json_parser_51;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= '-')
|
if (yych <= '-')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_53;
|
goto basic_json_parser_51;
|
||||||
}
|
}
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_54;
|
goto basic_json_parser_52;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
|
basic_json_parser_45:
|
||||||
|
yych = *++m_cursor;
|
||||||
|
if (yych == 'l')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_54;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_46:
|
basic_json_parser_46:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych == 'l')
|
if (yych == 'l')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_56;
|
goto basic_json_parser_55;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_47:
|
basic_json_parser_47:
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 'l')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_57;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_48:
|
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych == 'u')
|
if (yych == 'u')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_58;
|
goto basic_json_parser_56;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_49:
|
basic_json_parser_48:
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 0xC2)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_59;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_50:
|
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8481,31 +8470,31 @@ basic_json_parser_50:
|
||||||
{
|
{
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_60;
|
goto basic_json_parser_57;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 'F')
|
if (yych <= 'F')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_60;
|
goto basic_json_parser_57;
|
||||||
}
|
}
|
||||||
if (yych <= '`')
|
if (yych <= '`')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 'f')
|
if (yych <= 'f')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_60;
|
goto basic_json_parser_57;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
basic_json_parser_51:
|
basic_json_parser_49:
|
||||||
yyaccept = 1;
|
yyaccept = 1;
|
||||||
m_marker = ++m_cursor;
|
m_marker = ++m_cursor;
|
||||||
if ((m_limit - m_cursor) < 3)
|
if ((m_limit - m_cursor) < 3)
|
||||||
|
@ -8521,7 +8510,7 @@ basic_json_parser_51:
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_51;
|
goto basic_json_parser_49;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
}
|
}
|
||||||
|
@ -8529,25 +8518,25 @@ basic_json_parser_51:
|
||||||
{
|
{
|
||||||
if (yych <= 'E')
|
if (yych <= 'E')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
if (yych == 'e')
|
if (yych == 'e')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_45;
|
goto basic_json_parser_44;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
}
|
}
|
||||||
basic_json_parser_53:
|
basic_json_parser_51:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych >= ':')
|
if (yych >= ':')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
basic_json_parser_54:
|
basic_json_parser_52:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8560,99 +8549,85 @@ basic_json_parser_54:
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_54;
|
goto basic_json_parser_52;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_14;
|
goto basic_json_parser_14;
|
||||||
basic_json_parser_56:
|
basic_json_parser_54:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych == 's')
|
if (yych == 's')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_61;
|
goto basic_json_parser_58;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_57:
|
basic_json_parser_55:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych == 'l')
|
if (yych == 'l')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_62;
|
goto basic_json_parser_59;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
basic_json_parser_56:
|
||||||
|
yych = *++m_cursor;
|
||||||
|
if (yych == 'e')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_61;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
basic_json_parser_57:
|
||||||
|
++m_cursor;
|
||||||
|
if (m_limit <= m_cursor)
|
||||||
|
{
|
||||||
|
fill_line_buffer();
|
||||||
|
}
|
||||||
|
yych = *m_cursor;
|
||||||
|
if (yych <= '@')
|
||||||
|
{
|
||||||
|
if (yych <= '/')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
}
|
||||||
|
if (yych <= '9')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_63;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (yych <= 'F')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_63;
|
||||||
|
}
|
||||||
|
if (yych <= '`')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_32;
|
||||||
|
}
|
||||||
|
if (yych <= 'f')
|
||||||
|
{
|
||||||
|
goto basic_json_parser_63;
|
||||||
|
}
|
||||||
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_58:
|
basic_json_parser_58:
|
||||||
yych = *++m_cursor;
|
yych = *++m_cursor;
|
||||||
if (yych == 'e')
|
if (yych == 'e')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_64;
|
goto basic_json_parser_64;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
basic_json_parser_59:
|
basic_json_parser_59:
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 0xBB)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_66;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_60:
|
|
||||||
++m_cursor;
|
|
||||||
if (m_limit <= m_cursor)
|
|
||||||
{
|
|
||||||
fill_line_buffer();
|
|
||||||
}
|
|
||||||
yych = *m_cursor;
|
|
||||||
if (yych <= '@')
|
|
||||||
{
|
|
||||||
if (yych <= '/')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
|
||||||
if (yych <= '9')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_67;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (yych <= 'F')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_67;
|
|
||||||
}
|
|
||||||
if (yych <= '`')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
|
||||||
if (yych <= 'f')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_67;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
}
|
|
||||||
basic_json_parser_61:
|
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 'e')
|
|
||||||
{
|
|
||||||
goto basic_json_parser_68;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_62:
|
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
{
|
{
|
||||||
last_token_type = token_type::literal_null;
|
last_token_type = token_type::literal_null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basic_json_parser_64:
|
basic_json_parser_61:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
{
|
{
|
||||||
last_token_type = token_type::literal_true;
|
last_token_type = token_type::literal_true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basic_json_parser_66:
|
basic_json_parser_63:
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 0xC2)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_70;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_67:
|
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8663,44 +8638,37 @@ basic_json_parser_67:
|
||||||
{
|
{
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_71;
|
goto basic_json_parser_66;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 'F')
|
if (yych <= 'F')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_71;
|
goto basic_json_parser_66;
|
||||||
}
|
}
|
||||||
if (yych <= '`')
|
if (yych <= '`')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 'f')
|
if (yych <= 'f')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_71;
|
goto basic_json_parser_66;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
basic_json_parser_68:
|
basic_json_parser_64:
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
{
|
{
|
||||||
last_token_type = token_type::literal_false;
|
last_token_type = token_type::literal_false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
basic_json_parser_70:
|
basic_json_parser_66:
|
||||||
yych = *++m_cursor;
|
|
||||||
if (yych == 0xBF)
|
|
||||||
{
|
|
||||||
goto basic_json_parser_72;
|
|
||||||
}
|
|
||||||
goto basic_json_parser_33;
|
|
||||||
basic_json_parser_71:
|
|
||||||
++m_cursor;
|
++m_cursor;
|
||||||
if (m_limit <= m_cursor)
|
if (m_limit <= m_cursor)
|
||||||
{
|
{
|
||||||
|
@ -8711,34 +8679,29 @@ basic_json_parser_71:
|
||||||
{
|
{
|
||||||
if (yych <= '/')
|
if (yych <= '/')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= '9')
|
if (yych <= '9')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (yych <= 'F')
|
if (yych <= 'F')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
if (yych <= '`')
|
if (yych <= '`')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
}
|
||||||
if (yych <= 'f')
|
if (yych <= 'f')
|
||||||
{
|
{
|
||||||
goto basic_json_parser_31;
|
goto basic_json_parser_30;
|
||||||
}
|
}
|
||||||
goto basic_json_parser_33;
|
goto basic_json_parser_32;
|
||||||
}
|
|
||||||
basic_json_parser_72:
|
|
||||||
++m_cursor;
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7620,6 +7620,14 @@ class basic_json
|
||||||
{
|
{
|
||||||
// fill buffer
|
// fill buffer
|
||||||
fill_line_buffer();
|
fill_line_buffer();
|
||||||
|
|
||||||
|
// skip UTF-8 byte-order mark
|
||||||
|
if (m_line_buffer.size() >= 3 and m_line_buffer.substr(0, 3) == "\xEF\xBB\xBF")
|
||||||
|
{
|
||||||
|
m_line_buffer[0] = ' ';
|
||||||
|
m_line_buffer[1] = ' ';
|
||||||
|
m_line_buffer[2] = ' ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// switch off unwanted functions (due to pointer members)
|
// switch off unwanted functions (due to pointer members)
|
||||||
|
@ -7802,10 +7810,6 @@ class basic_json
|
||||||
ws = [ \t\n\r]+;
|
ws = [ \t\n\r]+;
|
||||||
ws { continue; }
|
ws { continue; }
|
||||||
|
|
||||||
// ignore byte-order-mark
|
|
||||||
bom = "\xEF\xBB\xBF";
|
|
||||||
bom { continue; }
|
|
||||||
|
|
||||||
// structural characters
|
// structural characters
|
||||||
"[" { last_token_type = token_type::begin_array; break; }
|
"[" { last_token_type = token_type::begin_array; break; }
|
||||||
"]" { last_token_type = token_type::end_array; break; }
|
"]" { last_token_type = token_type::end_array; break; }
|
||||||
|
|
|
@ -159,7 +159,7 @@ TEST_CASE("Unicode", "[hide]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
SECTION("ignore byte-order-mark")
|
SECTION("ignore byte-order-mark")
|
||||||
{
|
{
|
||||||
// read a file with a UTF-8 BOM
|
// read a file with a UTF-8 BOM
|
||||||
|
@ -167,7 +167,7 @@ TEST_CASE("Unicode", "[hide]")
|
||||||
json j;
|
json j;
|
||||||
CHECK_NOTHROW(j << f);
|
CHECK_NOTHROW(j << f);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
SECTION("error for incomplete/wrong BOM")
|
SECTION("error for incomplete/wrong BOM")
|
||||||
{
|
{
|
||||||
CHECK_THROWS_AS(json::parse("\xef\xbb"), std::invalid_argument);
|
CHECK_THROWS_AS(json::parse("\xef\xbb"), std::invalid_argument);
|
||||||
|
|
Loading…
Reference in a new issue