Commit 43d0c386a0a86e52273185b66fe1cb8f5411c055
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
| 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 | + |