packages feed

ghcjs-base-0.8.0.3: jsbits/text.js

//#OPTIONS: CPP
// conversion between JavaScript string and Data.Text


/*
  convert a Data.Text buffer with offset/length to a JavaScript string
 */
function h$textToString(arr, off, len) {
    return new TextDecoder().decode(arr.u8.subarray(off, off+len));
}

/*
   convert a JavaScript string to a Data.Text buffer, second return
   value is length
 */
function h$textFromString(s) {
    var encoder = new TextEncoder("utf-8");
    var u8 = encoder.encode(s);
    var b = h$wrapBuffer(u8.buffer, true, u8.byteOffset, u8.byteLength);
    RETURN_UBX_TUP2(b, u8.byteLength);
}

function h$lazyTextToString(txt) {
    var s = '';
    while(LAZY_TEXT_IS_CHUNK(txt)) {
        var head = LAZY_TEXT_CHUNK_HEAD(txt);
        s  += h$textToString(DATA_TEXT_ARRAY(head), DATA_TEXT_OFFSET(head), DATA_TEXT_LENGTH(head));
        txt = LAZY_TEXT_CHUNK_TAIL(txt);
    }
    return s;
}

function h$safeTextFromString(x) {
    if(typeof x !== 'string') {
	RETURN_UBX_TUP2(null, 0);
    }
    return h$textFromString(x);
}