#include <yajl/yajl_parse.h>
#include <yajl/yajl_gen.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int s_streamReformat = 0;
#define GEN_AND_RETURN(func) \
{ \
yajl_gen_status __stat = func; \
if (__stat == yajl_gen_generation_complete && s_streamReformat) { \
yajl_gen_reset(g, "\n"); \
__stat = func; \
} \
return __stat == yajl_gen_status_ok; }
static int reformat_null(void * ctx)
{
}
static int reformat_boolean(void * ctx, int boolean)
{
}
static int reformat_number(void * ctx, const char * s, size_t l)
{
}
static int reformat_string(void * ctx, const unsigned char * stringVal,
size_t stringLen)
{
}
static int reformat_map_key(void * ctx, const unsigned char * stringVal,
size_t stringLen)
{
}
static int reformat_start_map(void * ctx)
{
}
static int reformat_end_map(void * ctx)
{
}
static int reformat_start_array(void * ctx)
{
}
static int reformat_end_array(void * ctx)
{
}
reformat_null,
reformat_boolean,
NULL,
NULL,
reformat_number,
reformat_string,
reformat_start_map,
reformat_map_key,
reformat_end_map,
reformat_start_array,
reformat_end_array
};
static void
usage(const char * progname)
{
fprintf(stderr, "%s: reformat json from stdin\n"
"usage: json_reformat [options]\n"
" -e escape any forward slashes (for embedding in HTML)\n"
" -m minimize json rather than beautify (default)\n"
" -s reformat a stream of multiple json entites\n"
" -u allow invalid UTF8 inside strings during parsing\n",
progname);
exit(1);
}
int
main(int argc, char ** argv)
{
static unsigned char fileData[65536];
size_t rd;
int retval = 0;
int a = 1;
while ((a < argc) && (argv[a][0] == '-') && (strlen(argv[a]) > 1)) {
unsigned int i;
for ( i=1; i < strlen(argv[a]); i++) {
switch (argv[a][i]) {
case 'm':
break;
case 's':
s_streamReformat = 1;
break;
case 'u':
break;
case 'e':
break;
default:
fprintf(stderr, "unrecognized option: '%c'\n\n",
argv[a][i]);
usage(argv[0]);
}
}
++a;
}
if (a < argc) {
usage(argv[0]);
}
for (;;) {
rd = fread((void *) fileData, 1, sizeof(fileData) - 1, stdin);
if (rd == 0) {
if (!feof(stdin)) {
fprintf(stderr, "error on file read.\n");
retval = 1;
}
break;
}
fileData[rd] = 0;
{
const unsigned char * buf;
size_t len;
fwrite(buf, 1, len, stdout);
}
}
fprintf(stderr, "%s", (const char *) str);
retval = 1;
}
return retval;
}