JSFiddle - React, Tailwind, and code Playground

by learningjsfiddle

HTML

<p><strong>French Original</strong></p>
<p id="logFrO"></p>

<p><strong>French Trimmed</strong></p>
<p id="logFr"></p>

JavaScript

var french = "SVP remplacer 3 lumière de néons brûlées. Deux néons sont situés dans le bureau de la cliente et dans le desk room. Le dernier est une ampoule neon et c'est située dans le lobby. Le plafond est de hauteur standard";

var stringToUtf8ByteArray = function(str) {
  // TODO(user): Use native implementations if/when available
  var out = [], p = 0;
  for (var i = 0; i < str.length; i++) {
    var c = str.charCodeAt(i);
    if (c < 128) {
      out[p++] = c;
    } else if (c < 2048) {
      out[p++] = (c >> 6) | 192;
      out[p++] = (c & 63) | 128;
    } else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {
      // Surrogate Pair
      c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);
      out[p++] = (c >> 18) | 240;
      out[p++] = ((c >> 12) & 63) | 128;
      out[p++] = ((c >> 6) & 63) | 128;
      out[p++] = (c & 63) | 128;
    } else{
      out[p++] = (c >> 12) | 224;
      out[p++] = ((c >> 6) & 63) | 128;
      out[p++] = (c & 63) | 128;
    }
  }
  return out;
};

var byteLength = function(str) {
  // returns the byte length of an utf8 string
  var s = str.length;
  for (var i=str.length-1; i>=0; i--) {
    var code = str.charCodeAt(i);
    if (code > 0x7f && code <= 0x7ff) s++;
    else if (code > 0x7ff && code <= 0xffff) s+=2;
    if (code >= 0xDC00 && code <= 0xDFFF) i--; //trail surrogate
  }
  return s;
}

var stringTrim = function(str, maxLength){
  //convert to byte array
  var arr = stringToUtf8ByteArray(str);
  if(arr.length <= maxLength)
    return str;

  //slice upto maxLength
  var arrNew = arr.slice(0, maxLength);
  //check each char to make sure that french chars are properly picked
  var lengthChar = 0;
  var newVal = "";
  for (i=0; i<maxLength; i++){
    var singleChar = String.fromCharCode(arrNew[i]);
    lengthChar += byteLength(singleChar);
    if(lengthChar <= maxLength)
      newVal += singleChar;
  }
  return newVal;
}

var newFr =...