diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index f0a879ff061ee474a4e7b62250767f3130ebc64d..12c77126a133a9128ff60e1164c053f72e6437c7 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -1102,6 +1102,40 @@ js_strip_ctrl(JSContext *cx, uintN argc, jsval *arglist) return(JS_TRUE); } +static JSBool +js_strip_ctrl_a(JSContext *cx, uintN argc, jsval *arglist) +{ + jsval *argv=JS_ARGV(cx, arglist); + char* buf = NULL; + JSString* js_str; + jsrefcount rc; + + JS_SET_RVAL(cx, arglist, JSVAL_VOID); + + if(!js_argc(cx, argc, 1)) + return JS_FALSE; + + if(JSVAL_NULL_OR_VOID(argv[0])) + return JS_TRUE; + + JSVALUE_TO_MSTRING(cx, argv[0], buf, NULL); + HANDLE_PENDING(cx, buf); + if(buf == NULL) + return JS_TRUE; + + rc=JS_SUSPENDREQUEST(cx); + remove_ctrl_a(buf, buf); + JS_RESUMEREQUEST(cx, rc); + + js_str = JS_NewStringCopyZ(cx, buf); + free(buf); + if(js_str == NULL) + return JS_FALSE; + + JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(js_str)); + return JS_TRUE; +} + static JSBool js_strip_ansi(JSContext *cx, uintN argc, jsval *arglist) { @@ -4862,9 +4896,13 @@ static jsSyncMethodSpec js_global_functions[] = { ,310 }, {"strip_ctrl", js_strip_ctrl, 1, JSTYPE_STRING, JSDOCSTR("text") - ,JSDOCSTR("Strip control characters from string, returns modified string") + ,JSDOCSTR("Strip all control characters and Ctrl-A (attribute) sequences from string, returns modified string") ,310 }, + {"strip_ctrl_a", js_strip_ctrl_a, 1, JSTYPE_STRING, JSDOCSTR("text") + ,JSDOCSTR("Strip all Ctrl-A (attribute) sequences from string, returns modified string") + ,320 + }, {"strip_ansi", js_strip_ansi, 1, JSTYPE_STRING, JSDOCSTR("text") ,JSDOCSTR("Strip all ANSI terminal control sequences from string, returns modified string") ,31802