diff options
| author | makefu <github@syntax-fehler.de> | 2011-07-31 04:28:32 +0200 | 
|---|---|---|
| committer | makefu <github@syntax-fehler.de> | 2011-07-31 04:28:32 +0200 | 
| commit | 3634dc35b15ec409454773cf334889f07160eacb (patch) | |
| tree | 98efd4160e9c95b583a370753451ec92684dfc65 | |
| parent | a20bfbf919b5ccdd60cce008dd9c0bbe23ba1606 (diff) | |
| parent | 3d4169bb993d741d66e734294afe889e0fa0d0ca (diff) | |
Merge branch 'master' of github.com:krebscode/painload
| -rwxr-xr-x | json/sh/json.sh | 116 | ||||
| -rw-r--r-- | json/sh/test.json | 6 | ||||
| -rwxr-xr-x | util/bin/translate.google | 2 | 
3 files changed, 124 insertions, 0 deletions
| diff --git a/json/sh/json.sh b/json/sh/json.sh new file mode 100755 index 00000000..8297a853 --- /dev/null +++ b/json/sh/json.sh @@ -0,0 +1,116 @@ +#! /bin/sh +set -euf + +# TODO check json first + +# XXX json_key is something like PWD^^ + +normalize_json() { +  sed -rn ' +    1s/^/cat<<EOF\n/ +    # TODO handle escaped double quotes +    s/"[^"]+"/"$(echo -n & | base64)"/g +    $s/$/\nEOF/ +    p +  ' | sh | tr -d '[:space:]' +} + +json_to_sh() { +  sed -rn ' +    s/,/;/g +    s/\[/begin_json_array;/g; s/\]/end_json_array;/g +    s/\{/begin_json_object;/g; s/\}/end_json_object;/g +    s/("[^"]+"):/json_set_key \1;/g +    s/;("[^"]+")/;json_set string \1;/g +    s/;([0-9]+)/;json_set number `echo -n \1 | base64`;/g +    s/;;/;/g +    s/;/\n/g +    p +  ' +} + +begin_json_object() { +  push_key %%%MAKEJSONOBJ%%% +} +end_json_object() { +  #echo end_json_object: $json_key >&2 +  pop_key # TODO check if is %%%MAKEJSONOBJ%%% +  #echo obj: $1 `set | sed -rn "s/^(${json_key}_[a-zA-Z]+)_VALUE=(.*)/\1/p"` >&2 +  #json_set object "`set | sed -rn "s/^(${json_key}_[a-zA-Z]+)_VALUE=(.*)/\1/p"`" +  json_set object "`set | sed -rn "s/^(${json_key}_[a-zA-Z]+)=(.*)/\1/p"`" +} +begin_json_array() { :; } +end_json_array() { :; } +json_push_key() { +  push_key "`echo -n "$1" | base64 -d`" +} +json_set_key() { +  pop_key +  json_push_key "$1" +} +json_set() { +  ##echo "typeof_$json_key=$1" >&2 +  ##echo "${json_key}_VALUE=\"$2\"" >&2 # (`echo -n $2 | base64 -d`)" >&2 +  #eval "${json_key}_TYPE=$1" +  #eval "${json_key}_VALUE=\"$2\"" +  eval "typeof_${json_key}=$1" +  eval "${json_key}=\"$2\"" +} + +push_key() { +  json_key="${json_key+${json_key}_}$1" +} +pop_key() { +  json_key="`echo $json_key | sed 's/_[^_]\+$//'`" +} + +json() { +  #eval echo "\"\$`echo -n "$json_key" "$@" | tr "$IFS" _`\" | base64 -d" +  NAME="`echo -n "$json_key" "$@" | tr "$IFS" _`" +  #eval "TYPE=\"\$${NAME}_TYPE\"" +  eval "TYPE=\"\$typeof_$NAME\"" + +  echo -n "$TYPE $NAME: " +  case "$TYPE" in +    (object) +      #eval echo -n \$${NAME}_VALUE +      eval echo -n \$$NAME +      ;; +      #set | sed -rn "s/^(${NAME})_([a-zA-Z]+)[a-zA-Z_]*_VALUE=(.*)/\1_\2/p" | +      #    sort | uniq | tr \\n \ ;; +    (*) #echo -n "$VALUE";; +      #eval "VALUE=\"\$(echo -n \"\$${NAME}_VALUE\" | base64 -d)\"" +      #eval echo -n \"\$${NAME}_VALUE\" | base64 -d +      eval echo -n \$${NAME} | base64 -d +  esac +  echo +} + +read_json() { +  json_key="${1-JSON}" +  #meh="`cat`" +  #echo "$meh" +  ##echo "$meh" | normalize_json | json_to_sh; exit +  #eval "`echo "$meh" | normalize_json | json_to_sh`" +  eval "`normalize_json | json_to_sh`" +} + +# TODO print_json x, print_json x ca ... to print as json + +read_json x +echo ==== +set | egrep "^(typeof_)?$json_key[A-Za-z_]*=" +echo ==== +json +json a +json b +json c +json c ca +json c cb +json d +#echo ==== +#echo $JSON_VALUE +#echo $JSON_c_cb_VALUE | base64 -d; echo + +echo READY. +#### End of file. diff --git a/json/sh/test.json b/json/sh/test.json new file mode 100644 index 00000000..a0406039 --- /dev/null +++ b/json/sh/test.json @@ -0,0 +1,6 @@ +{ +  "a": "1", +  "b": 2, +  "c": { "ca": 11, "cb": [1, 2, 3, "42"] }, +  "d": {} +} diff --git a/util/bin/translate.google b/util/bin/translate.google index 943675f4..1a1be6b6 100755 --- a/util/bin/translate.google +++ b/util/bin/translate.google @@ -33,6 +33,8 @@ done        -d "hl=\${hl-en}"        \\        -d "layout=\${layout-2}" \\        -d "eotf=\${eotf-1}"     \\ +      -d "ie=UTF-8"            \\ +      -d "oe=UTF-8"            \\        -d "sl=\${sl-auto}"      \\        -d "tl=\${tl-en}"        \\        -d "text=\$text"         \\ | 
