diff --git a/05.dev-guide.md b/05.dev-guide.md index 032395ff2..85f4d3218 100644 --- a/05.dev-guide.md +++ b/05.dev-guide.md @@ -4,4 +4,129 @@ title: Development permalink: /dev-guide/ --- -TBD +# Embedding +The JerryScript Engine can be embedded into any application, providing way to run JavaScript in large range of environments - from desktops to low-memory microcontrollers. + +## How to execute simple JavaScript file from your application + +```cpp +#include +#include "jerry.h" + +int +main (int argc, char * argv[]) { + char script [] = "print ('Hello, World!');"; + + jerry_init (JERRY_FLAG_EMPTY); + + jerry_parse (script, strlen (script)); + jerry_run (); + + jerry_cleanup (); +} +``` + +The described application will generate the following output: + +```bash +Hello, World! +``` + +## Simple JavaScript shell + +```cpp +#include +#include +#include +#include + +#include "jerry.h" + +static void +print_value (const jerry_api_value_t * value_p); + +int +main (int argc, char * argv[]) { + jerry_init (JERRY_FLAG_EMPTY); + + char cmd [256]; + while (true) { + printf ("> "); + + if (fgets (cmd, sizeof (cmd), stdin) == NULL + || strcmp (cmd, "quit\n") == 0) { + break; + } + + jerry_api_value_t ret_val; + + jerry_completion_code_t status = jerry_api_eval (cmd, strlen (cmd), + false, false, + &ret_val); + + if (status == JERRY_COMPLETION_CODE_OK) { + // 'eval' completed successfully + print_value (&ret_val); + jerry_api_release_value (&ret_val); + } else { + // evaluated JS code thrown an exception + // and didn't handle it with try-catch-finally + printf ("Unhandled JS exception occured\n"); + } + + printf ("\n"); + fflush (stdout); + } + + jerry_cleanup (); + + return 0; +} + +static void +print_value (const jerry_api_value_t * value_p) +{ + switch (value_p->type) + { + case JERRY_API_DATA_TYPE_UNDEFINED: + printf ("undefined"); + break; + case JERRY_API_DATA_TYPE_NULL: + printf ("null"); + break; + case JERRY_API_DATA_TYPE_BOOLEAN: + if (value_p->v_bool) + printf ("true"); + else + printf ("false"); + break; + case JERRY_API_DATA_TYPE_FLOAT64: + printf ("%lf", value_p->v_float64); + break; + case JERRY_API_DATA_TYPE_STRING: + { + ssize_t neg_req_sz, sz; + // determining required buffer size + neg_req_sz = jerry_api_string_to_char_buffer (value_p->v_string, + NULL, + 0); + assert (neg_req_sz < 0); + char * str_buf_p = (char*) malloc (-neg_req_sz); + sz = jerry_api_string_to_char_buffer (value_p->v_string, + str_buf_p, + -neg_req_sz); + assert (sz == -neg_req_sz); + + printf ("%s", str_buf_p); + + free (str_buf_p); + break; + } + case JERRY_API_DATA_TYPE_OBJECT: + printf ("[JS object]"); + break; + } + + printf ("\n"); +} +``` diff --git a/_config.yml b/_config.yml index 57f9d0a8c..f93c86d0f 100644 --- a/_config.yml +++ b/_config.yml @@ -14,8 +14,3 @@ highlighter: pygments markdown: kramdown kramdown: input: GFM - syntax_highlighter: pygments - -#markdown: redcarpet -#redcarpet: -# extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "with_toc_data"]