code: function shiftL(start, end, c, maskJumps) {
                  var buffer = getActiveBuffer();
                  if (maskJumps !== false) //jumping over nonmask position
                      while (!isMask(start) && start - 1 >= 0) start--;
                  for (var i = start; i < end && i < getMaskLength() ; i++) {
                      if (isMask(i)) {
                          setReTargetPlaceHolder(buffer, i);
                          var j = seekNext(i);
                          var p = getBufferElement(buffer, j);
                          if (p != getPlaceHolder(j)) {
                              if (j < getMaskLength() && isValid(i, p, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {
                                  setBufferElement(buffer, i, p, true);
                              } else {
                                  if (isMask(i))
                                      break;
                              }
                          }
                      } else {
                          setReTargetPlaceHolder(buffer, i);
                      }
                  }
                  if (c != undefined)
                      setBufferElement(buffer, seekPrevious(end), c);
  
                  if (getActiveMaskSet()["greedy"] == false) {
                      var trbuffer = truncateInput(buffer.join('')).split('');
                      buffer.length = trbuffer.length;
                      for (var i = 0, bl = buffer.length; i < bl; i++) {
                          buffer[i] = trbuffer[i];
                      }
                      if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                  }
                  return start; //return the used start position
              }
docs: shift chars to left from start to end and put c at end position if defined