diff --git a/bin/json_parse b/bin/json_parse deleted file mode 100755 index 346b708..0000000 --- a/bin/json_parse +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -# Define BSD-friendly canonicalized readlink -canonical_readlink () { cd `dirname $1`; __filename=`basename $1`; if [ -h "$__filename" ]; then canonical_readlink `readlink $__filename`; else echo "`pwd -P`/$__filename"; fi } - -#add this feature to require... -__filename=$(canonical_readlink $0) -. `dirname $__filename`/../parse.sh -tokenize | parse diff --git a/package.json b/package.json index 0c01d13..afb32e5 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "JSON.sh" -, "version": "0.0.2" +, "version": "0.0.3" , "description": "" , "homepage": "http://github.com/dominictarr/JSON-sh" , "repository": { "type": "git" , "url": "https://github.com/dominictarr/JSON-sh.git" } , "bin": { - "json_parse": "./bin/json_parse" + "json_parse": "./JSON.sh" + "JSON.sh": "./JSON.sh" } , "dependencies": {} , "devDependencies": {} diff --git a/parse.sh b/parse.sh deleted file mode 100644 index b469dc5..0000000 --- a/parse.sh +++ /dev/null @@ -1,97 +0,0 @@ - -throw () { - echo "$*" >&2 - exit 1 -} - -tokenize () { - local ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})' - local CHAR='[^[:cntrl:]"\\]' - local STRING="\"$CHAR*($ESCAPE$CHAR*)*\"" - local NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?' - local KEYWORD='null|false|true' - local SPACE='[[:space:]]+' - egrep -ao "$STRING|$NUMBER|$KEYWORD|$SPACE|." --color=never | - egrep -v "^$SPACE$" # eat whitespace -} - -parse_array () { - local index=0 - local ary='' - read -r token - case "$token" in - ']') ;; - *) - while : - do - parse_value "$1" "$index" - let index=$index+1 - ary="$ary""$value" - read -r token - case "$token" in - ']') break ;; - ',') ary="$ary," ;; - *) throw "EXPECTED , or ] GOT ${token:-EOF}" ;; - esac - read -r token - done - ;; - esac - value=`printf '[%s]' $ary` -} - -parse_object () { - local key - local obj='' - read -r token - case "$token" in - '}') ;; - *) - while : - do - case "$token" in - '"'*'"') key=$token ;; - *) throw "EXPECTED string GOT ${token:-EOF}" ;; - esac - read -r token - case "$token" in - ':') ;; - *) throw "EXPECTED : GOT ${token:-EOF}" ;; - esac - read -r token - parse_value "$1" "$key" - obj="$obj$key:$value" - read -r token - case "$token" in - '}') break ;; - ',') obj="$obj," ;; - *) throw "EXPECTED , or } GOT ${token:-EOF}" ;; - esac - read -r token - done - ;; - esac - value=`printf '{%s}' "$obj"` -} - -parse_value () { - local jpath="${1:+$1,}$2" - case "$token" in - '{') parse_object "$jpath" ;; - '[') parse_array "$jpath" ;; - # At this point, the only valid single-character tokens are digits. - ''|[^0-9]) throw "EXPECTED value GOT ${token:-EOF}" ;; - *) value=$token ;; - esac - printf "[%s]\t%s\n" "$jpath" "$value" -} - -parse () { - read -r token - parse_value - read -r token - case "$token" in - '') ;; - *) throw "EXPECTED EOF GOT $token" ;; - esac -}