diff options
author | Lloyd Hilaiel <lloyd@hilaiel.com> | 2011-04-25 13:10:13 -0600 |
---|---|---|
committer | Lloyd Hilaiel <lloyd@hilaiel.com> | 2011-04-25 13:10:13 -0600 |
commit | 1b8a71ba9f24694435e42322e327a4daf6e9e4c6 (patch) | |
tree | 16e14b59e9d5cd80d51e4ce28f9fa1c76b02cdc5 | |
parent | 2bfd01c5eccf970dbbaca0d05a0ad4ac60e1698c (diff) | |
download | yajl-1b8a71ba9f24694435e42322e327a4daf6e9e4c6.tar.gz |
update front page license and sample code
-rw-r--r-- | index.html | 182 |
1 files changed, 85 insertions, 97 deletions
@@ -84,7 +84,7 @@ Yet Another JSON Library. YAJL is a small event-driven (SAX-style) JSON parser written in ANSI C, and a small - validating JSON generator. YAJL is released under the BSD + validating JSON generator. YAJL is released under the ISC license. <h2>Documentation</h2> @@ -182,7 +182,7 @@ <textarea name="code" class="c"> #include <yajl/yajl_parse.h> #include <yajl/yajl_gen.h> - + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -190,67 +190,58 @@ static int reformat_null(void * ctx) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_null(g); - return 1; + return yajl_gen_status_ok == yajl_gen_null(g); } static int reformat_boolean(void * ctx, int boolean) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_bool(g, boolean); - return 1; + return yajl_gen_status_ok == yajl_gen_bool(g, boolean); } -static int reformat_number(void * ctx, const char * s, unsigned int l) +static int reformat_number(void * ctx, const char * s, size_t l) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_number(g, s, l); - return 1; + return yajl_gen_status_ok == yajl_gen_number(g, s, l); } static int reformat_string(void * ctx, const unsigned char * stringVal, - unsigned int stringLen) + size_t stringLen) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_string(g, stringVal, stringLen); - return 1; + return yajl_gen_status_ok == yajl_gen_string(g, stringVal, stringLen); } static int reformat_map_key(void * ctx, const unsigned char * stringVal, - unsigned int stringLen) + size_t stringLen) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_string(g, stringVal, stringLen); - return 1; + return yajl_gen_status_ok == yajl_gen_string(g, stringVal, stringLen); } static int reformat_start_map(void * ctx) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_map_open(g); - return 1; + return yajl_gen_status_ok == yajl_gen_map_open(g); } static int reformat_end_map(void * ctx) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_map_close(g); - return 1; + return yajl_gen_status_ok == yajl_gen_map_close(g); } static int reformat_start_array(void * ctx) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_array_open(g); - return 1; + return yajl_gen_status_ok == yajl_gen_array_open(g); } static int reformat_end_array(void * ctx) { yajl_gen g = (yajl_gen) ctx; - yajl_gen_array_close(g); - return 1; + return yajl_gen_status_ok == yajl_gen_array_close(g); } static yajl_callbacks callbacks = { @@ -270,120 +261,117 @@ static yajl_callbacks callbacks = { static void usage(const char * progname) { - fprintf(stderr, "usage: %s <filename>\n" + fprintf(stderr, "%s: reformat json from stdin\n" + "usage: json_reformat [options]\n" " -m minimize json rather than beautify (default)\n" " -u allow invalid UTF8 inside strings during parsing\n", progname); exit(1); } - + int main(int argc, char ** argv) { yajl_handle hand; static unsigned char fileData[65536]; /* generator config */ - yajl_gen_config conf = { 1, " " }; - yajl_gen g; + yajl_gen g; yajl_status stat; size_t rd; - /* allow comments */ - yajl_parser_config cfg = { 1, 1 }; - int done = 0; - - /* check arguments. We expect exactly one! */ - if (argc == 2) { - if (!strcmp("-m", argv[1])) { - conf.beautify = 0; - - } else if (!strcmp("-u", argv[1])) { - cfg.checkUTF8 = 0; - } else { - usage(argv[0]); + int retval = 0; + int a = 1; + + g = yajl_gen_alloc(NULL); + yajl_gen_config(g, yajl_gen_beautify, 1); + yajl_gen_config(g, yajl_gen_validate_utf8, 1); + + /* ok. open file. let's read and parse */ + hand = yajl_alloc(&callbacks, NULL, (void *) g); + /* and let's allow comments by default */ + yajl_config(hand, yajl_allow_comments, 1); + + /* check arguments.*/ + 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': + yajl_gen_config(g, yajl_gen_beautify, 0); + break; + case 'u': + yajl_config(hand, yajl_dont_validate_strings, 1); + break; + default: + fprintf(stderr, "unrecognized option: '%c'\n\n", + argv[a][i]); + usage(argv[0]); + } } - } else if (argc != 1) { + ++a; + } + if (a < argc) { usage(argv[0]); } - - g = yajl_gen_alloc(&conf, NULL); - - /* ok. open file. let's read and parse */ - hand = yajl_alloc(&callbacks, &cfg, NULL, (void *) g); - - while (!done) { + + + for (;;) { rd = fread((void *) fileData, 1, sizeof(fileData) - 1, stdin); - + if (rd == 0) { if (!feof(stdin)) { fprintf(stderr, "error on file read.\n"); - break; + retval = 1; } - done = 1; + break; } fileData[rd] = 0; - - if (done) - /* parse any remaining buffered data */ - stat = yajl_parse_complete(hand); - else - /* read file data, pass to parser */ - stat = yajl_parse(hand, fileData, rd); - - if (stat != yajl_status_ok && - stat != yajl_status_insufficient_data) + + stat = yajl_parse(hand, fileData, rd); + + if (stat != yajl_status_ok) break; + { - unsigned char * str = yajl_get_error(hand, 1, fileData, rd); - fprintf(stderr, (const char *) str); - yajl_free_error(hand, str); - } else { const unsigned char * buf; - unsigned int len; + size_t len; yajl_gen_get_buf(g, &buf, &len); fwrite(buf, 1, len, stdout); yajl_gen_clear(g); } } + stat = yajl_complete_parse(hand); + + if (stat != yajl_status_ok) { + unsigned char * str = yajl_get_error(hand, 1, fileData, rd); + fprintf(stderr, "%s", (const char *) str); + yajl_free_error(hand, str); + retval = 1; + } + yajl_gen_free(g); yajl_free(hand); - - return 0; + + return retval; } </textarea> <h2>License</h2> <pre> - Copyright 2010, Lloyd Hilaiel. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Lloyd Hilaiel nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2007-2011, Lloyd Hilaiel <lloyd@hilaiel.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. </pre> <h2>Related projects</h2> |