Commit 43d0c386a0a86e52273185b66fe1cb8f5411c055

Authored by David RENÉ
1 parent 935d54fb

[+] javascript type as JSValue like JSON type. The main difference with JSON typ…

…e is js_code alternative which allows to write js code directly. This is intend to help to write js object in anubis, when we write js object config for generated web page
Showing 1 changed file with 289 additions and 0 deletions   Show diff stats
web/js_object.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 02/10/2021
  5 + * Time: 23:53
  6 + * © David RENÉ
  7 + */
  8 +
  9 +read tools/basis.anubis
  10 +read tools/printable_tree.anubis
  11 +transmit web/mime.anubis
  12 +
  13 +transmit xlib/extensions/json.anubis
  14 +
  15 +public type JSMember:...
  16 +
  17 +
  18 +public type JSValue:
  19 + js_object(List(JSMember)),
  20 + js_array(List(JSValue)),
  21 + js_int(Int value),
  22 + js_float(Float value, Int precision),
  23 + js_string(String value),
  24 + js_bool(Bool value),
  25 + js_code(String code),
  26 + js_undefined.
  27 +
  28 +
  29 +public type JSMember:
  30 + js_member(String name,
  31 + JSValue value).
  32 +
  33 +public define Printable_tree
  34 + _format_js
  35 + (
  36 + JSValue js_object
  37 + ).
  38 +
  39 +//public define Printable_tree
  40 +// _format_js
  41 +// (
  42 +// Library json_lib,
  43 +// JsonValue json
  44 +// ).
  45 +//-------------------------------
  46 +// helpers
  47 +
  48 +//public define JSValue
  49 +// js_object
  50 +// (
  51 +// List(JSMember) members
  52 +// )=
  53 +// js_object([js_member("obj_type", js_string(type_name)) . members]).
  54 +
  55 +public define JSMember
  56 + js_member
  57 + (
  58 + String name,
  59 + List(JSMember) value,
  60 + ) =
  61 + js_member(name, js_object(value)).
  62 +
  63 +
  64 +public define JSMember
  65 + js_member
  66 + (
  67 + String name,
  68 + List(JSValue) value,
  69 + ) =
  70 + js_member(name, js_array(value)).
  71 +
  72 +public define JSMember
  73 + js_member
  74 + (
  75 + String name,
  76 + Int value,
  77 + ) =
  78 + js_member(name, js_int(value)).
  79 +
  80 +public define JSMember
  81 + js_member
  82 + (
  83 + String name,
  84 + Float value,
  85 + Int precision,
  86 + ) =
  87 + js_member(name, js_float(value, precision)).
  88 +
  89 +public define JSMember
  90 + js_member
  91 + (
  92 + String name,
  93 + String value,
  94 + ) =
  95 + js_member(name, js_string(value)).
  96 +
  97 +public define JSMember
  98 + js_member
  99 + (
  100 + String name,
  101 + Bool value,
  102 + ) =
  103 + js_member(name, js_bool(value)).
  104 +
  105 +//public define JSMember
  106 +// json_null
  107 +// (
  108 +// String name,
  109 +// ) =
  110 +// js_member(name, json_null).
  111 +
  112 +public define JSValue
  113 + to_js_array
  114 + (
  115 + List(String) list_str
  116 + )=
  117 + js_array(map((String str) |-> js_string(str), list_str))
  118 +.
  119 +
  120 +//-------------------------------------------
  121 +// Outputing Js to Printable_tree
  122 +
  123 +define List(Word8)
  124 + _format_js_esc
  125 + (
  126 + List(Word8) original,
  127 + List(Word8) new_string,
  128 + ) =
  129 + if original is
  130 + {
  131 + [] then ['\'' . new_string], //add trailing quote
  132 + [h . t] then
  133 + if (h >=+ 32 & h +=< 33) | (h >=+ 35 & h +=< 91) | h >=+ 93 then // Allowed characters for JSON see RFC4627 + " ' " Why ' ???
  134 + _format_js_esc(t, [h . new_string])
  135 + else if h = '\n' then _format_js_esc(t, ['n', '\\' . new_string])
  136 + else if h = '\r' then _format_js_esc(t, ['r', '\\' . new_string])
  137 + else if h = '\t' then _format_js_esc(t, ['t', '\\' . new_string])
  138 + else if h = 0x08 then _format_js_esc(t, ['b', '\\' . new_string]) //Backspace
  139 + else _format_js_esc(t, [h, '\\' . new_string])
  140 + }.
  141 +
  142 +public define String
  143 + format_js_esc
  144 + (
  145 + String original,
  146 + ) =
  147 + implode(reverse(_format_js_esc(explode(original), ['\''],))).
  148 +
  149 +
  150 +public define Printable_tree
  151 + format_js
  152 + (
  153 + JSValue jsv
  154 + ).
  155 +
  156 +public define Printable_tree
  157 + to_javascript
  158 + (
  159 + JSValue jsv
  160 + ).
  161 +
  162 +public define Printable_tree
  163 + format_js_member
  164 + (
  165 + JSMember member
  166 + ) =
  167 + if member is js_member(name, value) then
  168 + [ name, ":" . _format_js(value) ].
  169 +
  170 +//public define Printable_tree
  171 +// js_member_to_js
  172 +// (
  173 +// JSMember member
  174 +// ) =
  175 +// if member is js_member(name, value) then
  176 +// [ "\"", name, "\":" . to_javascript(value) ].
  177 +
  178 +define Printable_tree
  179 + format_js_object
  180 + (
  181 + List(JSMember) members
  182 + ) =
  183 + if members is
  184 + {
  185 + [] then [],
  186 + [h . t] then [ format_js_member(h), (if t is [] then "" else ",") . format_js_object(t) ]
  187 + }.
  188 +
  189 +
  190 +//define Printable_tree
  191 +// js_object_to_js
  192 +// (
  193 +// List(JsonMember) members
  194 +// ) =
  195 +// if members is
  196 +// {
  197 +// [] then [],
  198 +// [h . t] then [ json_member_to_js(h), (if t is [] then "" else ",") . json_object_to_js(t) ]
  199 +// }.
  200 +
  201 +
  202 +define Printable_tree
  203 + format_js_array
  204 + (
  205 + List(JSValue) values
  206 + ) =
  207 + if values is
  208 + {
  209 + [] then [],
  210 + [h . t] then [ _format_js(h), (if t is [] then "" else ",") . format_js_array(t) ]
  211 + }.
  212 +
  213 +//public define Printable_tree
  214 +// _format_json
  215 +// (
  216 +// Library json_lib,
  217 +// JsonValue json
  218 +// ) =
  219 +// if json is
  220 +// {
  221 +// json_object(members) then [ "{", format_json_object(json_lib, members), "}" . [] ],
  222 +// json_array(values) then [ "[", format_json_array(json_lib, values), "]" . [] ],
  223 +// json_int(i) then int_pt(i, []),
  224 +// json_float(f, p) then str_pt(float_to_string(f, p), []),
  225 +// json_string(s) then if s ="" then str_pt("\"\"", []) else str_pt(to_JSON_String(json_lib, s), []),
  226 +// json_bool(b) then str_pt(if b then "true" else "false", []),
  227 +// json_null then str_pt("null", [])
  228 +// }.
  229 +
  230 +public define Printable_tree
  231 + _format_js
  232 + (
  233 + JSValue jsv
  234 + ) =
  235 + if jsv is
  236 + {
  237 + js_object(members) then [ "{", format_js_object(members), "}" . [] ],
  238 + js_array(values) then [ "[", format_js_array(values), "]" . [] ],
  239 + js_int(i) then int_pt(i, []),
  240 + js_float(f, p) then str_pt(float_to_string(f, p), []),
  241 + js_string(s) then if s ="" then str_pt("''", []) else str_pt(format_js_esc(s), []),
  242 + js_bool(b) then str_pt(if b then "true" else "false", []),
  243 + js_code(c) then str_pt(c, []),
  244 + js_undefined then str_pt("undefined", [])
  245 + }.
  246 +
  247 +//public define Printable_tree
  248 +// format_js
  249 +// (
  250 +// JSValue json
  251 +// ) =
  252 +// //try to use adl version of json escape string
  253 +// if load_library("json") is
  254 +// {
  255 +// error(err) then
  256 +// println("load lib error:");
  257 +// println("--> can't load extension lib. Hence use anubis version");
  258 +// _format_json(json)
  259 +// ok(json_lib) then
  260 +// _format_json(json_lib, json),
  261 +//// with start = unow,
  262 +//// result = _format_json(json_lib, json),
  263 +//// println(show_duration_string("format_json with extension ",start));
  264 +//// result
  265 +// }.
  266 +
  267 +//public define String
  268 +// to_JS_String
  269 +// (
  270 +// String str
  271 +// ) =
  272 +// //try to use adl version of json escape string
  273 +// if load_library("json") is
  274 +// {
  275 +// error(err) then
  276 +// println("load lib error:");
  277 +// println("--> can't load extension lib. Hence use anubis version");
  278 +// format_json_esc(str)
  279 +// ok(json_lib) then
  280 +// to_JSON_String(json_lib, str)
  281 +// }.
  282 +
  283 +public define String
  284 + format_js
  285 + (
  286 + JSValue jsv
  287 + ) =
  288 + to_String(_format_js(jsv)).
  289 +
... ...