summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLloyd Hilaiel <lloyd@hilaiel.com>2011-04-25 13:10:13 -0600
committerLloyd Hilaiel <lloyd@hilaiel.com>2011-04-25 13:10:13 -0600
commit1b8a71ba9f24694435e42322e327a4daf6e9e4c6 (patch)
tree16e14b59e9d5cd80d51e4ce28f9fa1c76b02cdc5
parent2bfd01c5eccf970dbbaca0d05a0ad4ac60e1698c (diff)
downloadyajl-1b8a71ba9f24694435e42322e327a4daf6e9e4c6.tar.gz
update front page license and sample code
-rw-r--r--index.html182
1 files changed, 85 insertions, 97 deletions
diff --git a/index.html b/index.html
index 4c72a54..6e40710 100644
--- a/index.html
+++ b/index.html
@@ -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>