Modules
ADT Database GTK2 GUI IP PiJAX Public Sql Stdio Subversion System Tools Xosd lua v4l2 wx
Recent Changes
Public.Parser.XML2 1.50
Public.ZeroMQ 1.1
Public.Template.Mustache 1.0
Public.Protocols.XMPP 1.4
Sql.Provider.jdbc 1.0
Popular Downloads
Public.Parser.JSON2 1.0
Public.Parser.JSON 0.2
GTK2 2.23
Public.Web.FCGI 1.8
Public.Parser.XML2 1.48
|
Module Information
Public.Parser.JSON2
Viewing contents of Public_Parser_JSON2-0.8/json_string_utf8.c
#line 1 "src/json_string_utf8.rl"
// vim:syntax=ragel
#define HEX2DEC(x) ((x) <= '9' ? (x) - '0' : ((x) < 'G') ? (x) - 'A' + 10 : (x) - 'a' + 10)
#line 92 "src/json_string_utf8.rl"
char *_parse_JSON_string_utf8(char *p, char *pe, struct parser_state *state) {
char *mark = 0;
struct string_builder s;
int cs;
p_wchar2 temp = 0;
p_wchar2 unicode = 0;
#line 17 "work/json_string_utf8.c"
static const int JSON_string_start = 1;
static const int JSON_string_first_final = 15;
static const int JSON_string_error = 0;
static const int JSON_string_en_main = 1;
#line 102 "src/json_string_utf8.rl"
if (!state->validate)
init_string_builder(&s, 0);
#line 30 "work/json_string_utf8.c"
{
cs = JSON_string_start;
}
#line 107 "src/json_string_utf8.rl"
#line 36 "work/json_string_utf8.c"
{
if ( p == pe )
goto _out;
switch ( cs )
{
case 1:
if ( (*p) == 34 )
goto st2;
goto st0;
st0:
goto _out0;
st2:
if ( ++p == pe )
goto _out2;
case 2:
switch( (*p) ) {
case 34: goto tr6;
case 92: goto tr7;
}
if ( (*p) < -32 ) {
if ( (*p) > -63 ) {
if ( -62 <= (*p) && (*p) <= -33 )
goto tr2;
} else
goto st0;
} else if ( (*p) > -17 ) {
if ( (*p) > -12 ) {
if ( -11 <= (*p) && (*p) <= -1 )
goto st0;
} else if ( (*p) >= -16 )
goto tr4;
} else
goto tr3;
goto tr5;
tr2:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 49 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & (0xdf-0xc0))) << 6; }
goto st3;
tr9:
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 49 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & (0xdf-0xc0))) << 6; }
goto st3;
st3:
if ( ++p == pe )
goto _out3;
case 3:
#line 101 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr8;
goto st0;
tr5:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
goto st4;
tr8:
#line 50 "src/json_string_utf8.rl"
{ unicode |= (int)((*p) & (0xbf-0x80)); }
#line 72 "src/json_string_utf8.rl"
{
if (!state->validate) {
string_builder_putchar(&s, unicode);
}
}
#line 40 "src/json_string_utf8.rl"
{ mark = p + 1; }
goto st4;
tr16:
#line 54 "src/json_string_utf8.rl"
{
unicode |= (int)((*p) & (0xbf-0x80));
if ((unicode < 0x0800 || unicode > 0xd7ff) && (unicode < 0xe000 || unicode > 0xffff)) {
goto failure;
}
}
#line 72 "src/json_string_utf8.rl"
{
if (!state->validate) {
string_builder_putchar(&s, unicode);
}
}
#line 40 "src/json_string_utf8.rl"
{ mark = p + 1; }
goto st4;
tr19:
#line 65 "src/json_string_utf8.rl"
{
unicode |= (int)((*p) & (0xbf-0x80));
if (unicode < 0x010000 || unicode > 0x10ffff) {
goto failure;
}
}
#line 72 "src/json_string_utf8.rl"
{
if (!state->validate) {
string_builder_putchar(&s, unicode);
}
}
#line 40 "src/json_string_utf8.rl"
{ mark = p + 1; }
goto st4;
tr20:
#line 24 "src/json_string_utf8.rl"
{
if (!state->validate) switch((*p)) {
case '"':
case '\\': string_builder_putchar(&s, (*p)); break;
case 'b': string_builder_putchar(&s, '\b'); break;
case 'f': string_builder_putchar(&s, '\f'); break;
case 'n': string_builder_putchar(&s, '\n'); break;
case 'r': string_builder_putchar(&s, '\r'); break;
case 't': string_builder_putchar(&s, '\t'); break;
}
}
#line 40 "src/json_string_utf8.rl"
{ mark = p + 1; }
goto st4;
tr25:
#line 12 "src/json_string_utf8.rl"
{
temp *= 16;
temp += HEX2DEC((*p));
}
#line 17 "src/json_string_utf8.rl"
{
if (IS_NUNICODE(temp)) {
goto failure;
}
if (!state->validate) string_builder_putchar(&s, temp);
}
#line 40 "src/json_string_utf8.rl"
{ mark = p + 1; }
goto st4;
st4:
if ( ++p == pe )
goto _out4;
case 4:
#line 193 "work/json_string_utf8.c"
switch( (*p) ) {
case 34: goto tr13;
case 92: goto tr14;
}
if ( (*p) < -32 ) {
if ( (*p) > -63 ) {
if ( -62 <= (*p) && (*p) <= -33 )
goto tr9;
} else
goto st0;
} else if ( (*p) > -17 ) {
if ( (*p) > -12 ) {
if ( -11 <= (*p) && (*p) <= -1 )
goto st0;
} else if ( (*p) >= -16 )
goto tr11;
} else
goto tr10;
goto st4;
tr3:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 52 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & 0x0f)) << 12; }
goto st5;
tr10:
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 52 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & 0x0f)) << 12; }
goto st5;
st5:
if ( ++p == pe )
goto _out5;
case 5:
#line 243 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr15;
goto st0;
tr15:
#line 53 "src/json_string_utf8.rl"
{ unicode |= ((int)((*p) & (0xbf-0x80))) << 6; }
goto st6;
st6:
if ( ++p == pe )
goto _out6;
case 6:
#line 255 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr16;
goto st0;
tr4:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 61 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & 0x07)) << 18; }
goto st7;
tr11:
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
#line 61 "src/json_string_utf8.rl"
{ unicode = ((int)((*p) & 0x07)) << 18; }
goto st7;
st7:
if ( ++p == pe )
goto _out7;
case 7:
#line 289 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr17;
goto st0;
tr17:
#line 62 "src/json_string_utf8.rl"
{ unicode |= ((int)((*p) & (0xbf-0x80))) << 12; }
goto st8;
st8:
if ( ++p == pe )
goto _out8;
case 8:
#line 301 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr18;
goto st0;
tr18:
#line 53 "src/json_string_utf8.rl"
{ unicode |= ((int)((*p) & (0xbf-0x80))) << 6; }
goto st9;
st9:
if ( ++p == pe )
goto _out9;
case 9:
#line 313 "work/json_string_utf8.c"
if ( (*p) <= -65 )
goto tr19;
goto st0;
tr6:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
goto st15;
tr13:
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
goto st15;
st15:
if ( ++p == pe )
goto _out15;
case 15:
#line 91 "src/json_string_utf8.rl"
{ goto _out15; }
#line 345 "work/json_string_utf8.c"
goto st0;
tr7:
#line 36 "src/json_string_utf8.rl"
{
mark = p;
}
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
goto st10;
tr14:
#line 42 "src/json_string_utf8.rl"
{
if (p - mark > 0) {
if (!state->validate)
string_builder_binary_strcat(&s, mark, (ptrdiff_t)(p - mark));
}
}
goto st10;
st10:
if ( ++p == pe )
goto _out10;
case 10:
#line 373 "work/json_string_utf8.c"
switch( (*p) ) {
case 34: goto tr20;
case 47: goto tr20;
case 92: goto tr20;
case 98: goto tr20;
case 102: goto tr20;
case 110: goto tr20;
case 114: goto tr20;
case 116: goto tr20;
case 117: goto st11;
}
goto st0;
st11:
if ( ++p == pe )
goto _out11;
case 11:
if ( (*p) < 65 ) {
if ( 48 <= (*p) && (*p) <= 57 )
goto tr22;
} else if ( (*p) > 70 ) {
if ( 97 <= (*p) && (*p) <= 102 )
goto tr22;
} else
goto tr22;
goto st0;
tr22:
#line 8 "src/json_string_utf8.rl"
{
temp = HEX2DEC((*p));
}
goto st12;
st12:
if ( ++p == pe )
goto _out12;
case 12:
#line 409 "work/json_string_utf8.c"
if ( (*p) < 65 ) {
if ( 48 <= (*p) && (*p) <= 57 )
goto tr23;
} else if ( (*p) > 70 ) {
if ( 97 <= (*p) && (*p) <= 102 )
goto tr23;
} else
goto tr23;
goto st0;
tr23:
#line 12 "src/json_string_utf8.rl"
{
temp *= 16;
temp += HEX2DEC((*p));
}
goto st13;
st13:
if ( ++p == pe )
goto _out13;
case 13:
#line 430 "work/json_string_utf8.c"
if ( (*p) < 65 ) {
if ( 48 <= (*p) && (*p) <= 57 )
goto tr24;
} else if ( (*p) > 70 ) {
if ( 97 <= (*p) && (*p) <= 102 )
goto tr24;
} else
goto tr24;
goto st0;
tr24:
#line 12 "src/json_string_utf8.rl"
{
temp *= 16;
temp += HEX2DEC((*p));
}
goto st14;
st14:
if ( ++p == pe )
goto _out14;
case 14:
#line 451 "work/json_string_utf8.c"
if ( (*p) < 65 ) {
if ( 48 <= (*p) && (*p) <= 57 )
goto tr25;
} else if ( (*p) > 70 ) {
if ( 97 <= (*p) && (*p) <= 102 )
goto tr25;
} else
goto tr25;
goto st0;
}
_out0: cs = 0; goto _out;
_out2: cs = 2; goto _out;
_out3: cs = 3; goto _out;
_out4: cs = 4; goto _out;
_out5: cs = 5; goto _out;
_out6: cs = 6; goto _out;
_out7: cs = 7; goto _out;
_out8: cs = 8; goto _out;
_out9: cs = 9; goto _out;
_out15: cs = 15; goto _out;
_out10: cs = 10; goto _out;
_out11: cs = 11; goto _out;
_out12: cs = 12; goto _out;
_out13: cs = 13; goto _out;
_out14: cs = 14; goto _out;
_out: {}
}
#line 108 "src/json_string_utf8.rl"
if (cs >= JSON_string_first_final) {
if (!state->validate)
push_string(finish_string_builder(&s));
return p;
}
failure:
if (!state->validate) {
free_string_builder(&s);
}
push_int((int)p);
return NULL;
}
#undef HEX2DEC
|
|
|