@@ -285,6 +285,43 @@ napi_value Herb_extract_html(napi_env env, napi_callback_info info) {
285285 return result;
286286}
287287
288+ napi_value Herb_parse_ruby (napi_env env, napi_callback_info info) {
289+ size_t argc = 1 ;
290+ napi_value args[1 ];
291+ napi_get_cb_info (env, info, &argc, args, nullptr , nullptr );
292+
293+ if (argc < 1 ) {
294+ napi_throw_error (env, nullptr , " Wrong number of arguments" );
295+ return nullptr ;
296+ }
297+
298+ char * string = CheckString (env, args[0 ]);
299+ if (!string) { return nullptr ; }
300+
301+ herb_ruby_parse_result_T* parse_result = herb_parse_ruby (string, strlen (string));
302+
303+ if (!parse_result) {
304+ free (string);
305+ return nullptr ;
306+ }
307+
308+ pm_buffer_t buffer = { 0 };
309+ pm_serialize (&parse_result->parser , parse_result->root , &buffer);
310+
311+ napi_value result = nullptr ;
312+
313+ if (buffer.length > 0 ) {
314+ void * data;
315+ napi_create_buffer_copy (env, buffer.length , buffer.value , &data, &result);
316+ }
317+
318+ pm_buffer_free (&buffer);
319+ herb_free_ruby_parse_result (parse_result);
320+ free (string);
321+
322+ return result;
323+ }
324+
288325napi_value Herb_version (napi_env env, napi_callback_info info) {
289326 const char * libherb_version = herb_version ();
290327 const char * libprism_version = herb_prism_version ();
@@ -305,6 +342,7 @@ napi_value Init(napi_env env, napi_value exports) {
305342 { " extractRuby" , nullptr , Herb_extract_ruby, nullptr , nullptr , nullptr , napi_default, nullptr },
306343 { " extractHTML" , nullptr , Herb_extract_html, nullptr , nullptr , nullptr , napi_default, nullptr },
307344 { " version" , nullptr , Herb_version, nullptr , nullptr , nullptr , napi_default, nullptr },
345+ { " parseRuby" , nullptr , Herb_parse_ruby, nullptr , nullptr , nullptr , napi_default, nullptr },
308346 };
309347
310348 napi_define_properties (env, exports, sizeof (descriptors) / sizeof (descriptors[0 ]), descriptors);
0 commit comments