VE Lua Documentation

Press F to search!

len

Definition


-- @/len:-1
function len(...)

Callers

@/lua/ge/extensions/util/docCreator.lua

        if string.len(v) > 0 and FS:fileExists(v) then
          local orgFilename = v
      if info.vendorName then
        if string.lower(string.sub(name, 1, string.len(info.vendorName))) == string.lower(info.vendorName) then
          name = string.sub(name, string.len(info.vendorName) + 1)
        if string.lower(string.sub(name, 1, string.len(info.vendorName))) == string.lower(info.vendorName) then
          name = string.sub(name, string.len(info.vendorName) + 1)
          name = name:gsub("^%s+", "") -- strip whitespaces
@/lua/ge/extensions/editor/particleEditor.lua

  while string.len(stringList) > 0 do
    local first, last, particleDataName = string.find(stringList, '(%S+)')

  while string.len(stringList) > 0 do
    local first, last, particleDataName = string.find(stringList, '(%S+)')
@/lua/vehicle/controller/drivingDynamics/actuators/activeDiffLock.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/ge/extensions/flowgraph/nodes/vehicle/ai/scriptAI/pathFromFile.lua
    for _, fileName in pairs(self.files) do
      local fnShort = string.sub(fileName, string.len(trackFilePath) + 1)
      fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
      local fnShort = string.sub(fileName, string.len(trackFilePath) + 1)
      fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
      if im.Selectable1(fnShort, fnShort==self.fnShort) then
      local fnShort = string.sub(fileName, string.len(trackFilePath) + 1)
      fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
      if im.Selectable1(fnShort, fnShort==self.fnShort) then
  if self.fileName and self.fileName ~= "" then
    local fnShort = string.sub(self.fileName, string.len(trackFilePath) + 1)
    self.fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
    local fnShort = string.sub(self.fileName, string.len(trackFilePath) + 1)
    self.fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
  end
    local fnShort = string.sub(self.fileName, string.len(trackFilePath) + 1)
    self.fnShort = string.sub(fnShort, 1, string.len(fnShort) - string.len(trackFileExt))
  end
@/lua/ge/extensions/editor/mainMenu.lua
      local s = ffi.string(windowSearchTxt)
      windowSearchDisplayResult = s:len() > 0
      if windowSearchDisplayResult then
@/lua/ge/extensions/editor/preferences.lua

  if string.len(defVal) > 100 then
    defVal = string.sub(defVal, 1, 100) .. "..."
@/lua/ge/extensions/editor/fileDialog.lua
  currentFolderStat = FS:stat(currentPath)
  local pathLen = string.len(currentPath) + 1
  -- get entries for current path
        if lastSep then
          parentFolder = currentPath:sub(1, currentPath:len()-lastSep+1 )
        end
          execCB({path=currentPath, action=action, stat=currentFolderStat})
        elseif action == "Save" and fname:len() > 0 then
          if fname:reverse():find(options.suffix[fileTypeSelected][2]:reverse()) ~= 1 then
@/lua/common/extensions/ui/imguiUtils.lua
  elseif type(data) == 'string' then
    if string.len(data) == 0 then
      imgui.PushStyleColor2(imgui.Col_Text, imgui.ImVec4(0.7, 0.7, 0.7, 1))
@/lua/ge/extensions/core/flowgraphManager.lua
local function reInitOnFileChange(filename)
  local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
  log("I","flowgraphManager","Reloading Node: " .. tostring(requireFilename))
  -- check basic nodes
  if filename:sub(1, string.len(nodePath)) == nodePath then
    reInitOnFileChange(filename)
  -- check custom nodes
  if filename:sub(string.len(filename)-7,string.len(filename)) == 'Node.lua' then
    for _,manager in ipairs(managers) do
  -- check custom nodes
  if filename:sub(string.len(filename)-7,string.len(filename)) == 'Node.lua' then
    for _,manager in ipairs(managers) do
      local dirname, fn, e = path.split(filename)
      local path = dirname:sub(string.len(nodePath) + 1)
      local pathArgs = split(path, '/')
      end
      local moduleName = string.sub(fn, 1, string.len(fn) - 4)
      local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
      local moduleName = string.sub(fn, 1, string.len(fn) - 4)
      local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
      local dirname, fn, e = path.splitWithoutExt(filename, true)
      local path = dirname:sub(string.len(stateTemplatePath) + 1)
      if path ~= "" then
        local moduleName = fn
        --local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
        local stateData = {}
@/lua/ge/extensions/flowgraph/nodes/logic/booleanExpression.lua
    self.lastBuiltExpression = nil --nil our tracker, otherwise we can end up with no func
    if self.data.expression:len() <= 0 then
      error = "Please enter a valid expression"
@/lua/common/jbeam/sections/meshs.lua
    return ColorF(v.r / 255, v.g / 255, v.b / 255, v.a / 255)
  elseif type(v) == 'string' and string.len(v) > 7 and v:sub(1,1) == '#' then
    v = v:gsub("#","")
@/lua/ge/extensions/scenario/nomoveGoal.lua
      local vehicle = scenetree.findObjectById(instance.vId)
      if vehicle and (instance.startPos - vehicle:getPosition()):len() > 0.1 then
        log('D', logTag, 'checkRaceGoals failed: '..instance.vehicleName..' moved '..tostring(instance.startPos)..' '..tostring( vehicle:getPosition() ) )
@/lua/ge/extensions/editor/trafficManager.lua
      local vehGroupFile = ffi.string(options.vehicleGroupFile)
      if vehGroupFile:len() > 0 then
        vehGroup = jsonReadFile(vehGroupFile)
@/lua/ge/extensions/editor/missionEditor.lua
  local s = ffi.string(missionSearchTxt)
  missionSearchDisplayResult = s:len() > 0
  if missionSearchDisplayResult then
              table.insert(files, f)
              local dir, filename, ext =path.split(string.sub(f, 2+string.len(lastShownMission.missionFolder)))
              if dir then
@/lua/ge/extensions/scenario/scenariohelper.lua
  if sceneObject1 and sceneObject2 then
    return (sceneObject1:getPosition() - sceneObject2:getPosition()):len()
  else
@/lua/ge/extensions/ui/uiNavi.lua
  -- local tmpmap = deepcopy(m) -- since we are always just create a new object out of primitive data types in the function below we don't need this copy here
  local oldSize = tostring(string.len(jsonEncode(tmpmap.nodes)))
  local newNodes = {}
  end
  -- print('new node list size (char): ' .. tostring(string.len(jsonEncode(newNodes))) .. ' (used to be: ' .. oldSize .. ', nr nodes: '.. tostring(counter - 2) .. ')')
  return newNodes
@/lua/vehicle/controller/lineLock.lua
  end
  wheelNamesString = wheelNamesString:sub(0, wheelNamesString:len() - 2)
@/lua/common/libs/copas/copas/http.lua
            if not chunk then return sock:send("0\r\n\r\n") end
            local size = string.format("%X\r\n", string.len(chunk))
            return sock:send(size ..  chunk .. "\r\n")
        reqt.headers = {
            ["content-length"] = string.len(b),
            ["content-type"] = "application/x-www-form-urlencoded"
@/lua/ge/extensions/editor/api/gui.lua
    local highlightLower = highlightText:lower()
    local highlightLowerLen = string.len(highlightLower) - 1
    for i = 0, 6 do -- up to 6 matches overall ...
  local style = imgui.GetStyle()
  local dispErase = ffi.string(text):len() > 0
  local uiScale = ui_imgui.GetIO().FontGlobalScale --editor.getPreference("ui.general.scale")
@/lua/ge/extensions/editor/missionEditor/genericTypeData.lua
        local serializedProgress = jsonEncodePretty(self.mission.missionTypeData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedProgress:len()))
        local arrayChar = im.ArrayChar(arraySize)
@/lua/ge/extensions/scenario/positionGoal.lua
    if endobj and vehicle then
      local distance = (endobj:getPosition() - vehicle:getPosition()):len()
      if state == 'onRaceResult'  then
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveTorsionBars.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/common/utils.lua
    return color(v.r, v.g, v.b, v.a)
  elseif type(v) == 'string' and string.len(v) > 7 and v:sub(1,1) == '#' then
    v = v:gsub("#","")
function string.startswith(String,Start)
  return string.sub(String,1,string.len(Start))==Start
end
function string.endswith(String,End)
  return End=='' or string.sub(String,-string.len(End))==End
end
  local counter = 1
  local len = string.len(text)
  for i = 1, len, 3 do
  for line in f:lines() do
    if string.len(line) > 0 then
      local firstChar = string.sub(line, 1, 1)
function hex_dump(str)
  local len, hex, asc = string.len(str), '', ''
  for i = 1, len do
@/lua/ge/extensions/editor/terrainMaterialsEditor.lua
  -- check if a material name has been set
  if string.len(materialName) == 0 then
    notificationState = NotificationState_ErrorMtlNameIsEmpty
@/lua/ge/extensions/core/vehicle/partmgmt.lua
  for _, file in pairs(files) do
    local basename = string.sub(file, string.len(playerVehicle.vehicleDirectory) + 1, -1)
    table.insert(result,
@/lua/ge/extensions/campaign/photoSafari.lua
  local photoTrigger = scenetree.findObject(M.location)
  local vehicleDistance_To_Obj = (vehicle:getPosition() - photoTrigger:getPosition()):len()
  local sceneObject = scenetree.findObject(M.targetObj)
@/lua/ge/extensions/scenario/distanceGoal.lua
    if state == 'onRaceTick' and vehicle then
      local dis = (vehicle:getPosition() - targetobj:getPosition() ):len()
      --print("inside maxDistance check")
@/lua/ge/extensions/scenario/scenarios.lua
    if node2 and node1 then
      distance = distance + (pos2 - pos1):len()
    else
@/lua/vehicle/controller/drivingDynamics/CMU.lua
      local controllerName = sub.name
      local slashPos = controllerName:find("/", -controllerName:len())
      if slashPos then
@/lua/ge/extensions/scenario/scenariosLoader.lua
        if string.startswith(p, scenarioData.directory) then
          local imageFilename = string.sub(p, string.len(scenarioData.directory) + 2, string.len(p) - 4)
          local foundClash = false
        if string.startswith(p, scenarioData.directory) then
          local imageFilename = string.sub(p, string.len(scenarioData.directory) + 2, string.len(p) - 4)
          local foundClash = false
@/lua/ge/extensions/freeroam/dragRace.lua

    if centerPointToTrigger:len() > 10 then return end

        if playerDistanceFromStart <= 0.35 and playerStageReady == false and playerVehicle:getVelocity():len() < 0.1 then
          lights.stageLights.stageLightR.obj:setHidden(false)
          -- Updating right display
          updateDisplay("r", time, rightVehicle:getVelocity():len() * speedUnit)
          local currentVehicle = core_vehicles.getCurrentVehicleDetails()
          end
          table.insert(results, {time = (disqualified and "Disqualified" or time), speed = rightVehicle:getVelocity():len() * speedUnit, vehicle = vehicleName})
          table.remove(vehicles, i)
          -- Updating left display
          updateDisplay("l", time, leftVehicle:getVelocity():len() * speedUnit)
          table.insert(results, {time = time, speed = leftVehicle:getVelocity():len() * speedUnit, vehicle = opponentVehicleName .. ' (opponent)'})
          updateDisplay("l", time, leftVehicle:getVelocity():len() * speedUnit)
          table.insert(results, {time = time, speed = leftVehicle:getVelocity():len() * speedUnit, vehicle = opponentVehicleName .. ' (opponent)'})
          table.remove(vehicles, i)
@/lua/ge/extensions/gameplay/drag/general.lua
        dragData._originFile = file
        dragData._fnWithoutExt = string.sub(fn, 1, string.len(fn) - string.len(ext)-1)
        dragData._index = i
        dragData._originFile = file
        dragData._fnWithoutExt = string.sub(fn, 1, string.len(fn) - string.len(ext)-1)
        dragData._index = i
@/lua/common/libs/LuaIRC/util.lua
    local _, trailToken = line:find("%s+:", lineStart)
    local lineStop = line:len()
    local trailing
@/lua/ge/extensions/editor/flowgraph/nodelibrary.lua
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
  for i = 0, 6 do -- up to 6 matches overall ...
@/lua/ge/extensions/util/export.lua
  f:close()
  local fileSize = string.len(fileData)
  local bufferIDTexture = _addBuffer(gltfRoot, fileData, fileSize, 'texture')
    --chunk[0] JSON
    -- log("I", logTag, "#jsonContent="..dumps(#jsonContent).."|"..dumps(string.len(jsonContent)).. " pad = "..dumps(fourByteAlignPaddingSize(#jsonContent)))
    f:write( string.char(sepbytes(#jsonContent + fourByteAlignPaddingSize(#jsonContent))) ) --size
@/lua/vehicle/main.lua
  local vehicle
  if type(initData) == "string" and string.len(initData) > 0 then
    profilerPushEvent("deserialize")
@/lua/common/json.lua
    ch = s:match('^[^"\\]*', i)
    i = i + (ch and ch:len() or 0)
    concatTable[resultidx] = ch
@/lua/ge/extensions/career/career.lua
    local currentSaveSlot, currentSavePath = career_saveSystem.getCurrentSaveSlot()
    imgui.Text((string.sub(currentSavePath, string.len(career_saveSystem.getSaveRootDirectory())+2, -1)))
    imgui.Separator()
@/lua/ge/extensions/gameplay/taxi.lua
    local veh = getObjectByID(vehId)
    local taxiSpeed = veh:getVelocity():len() * 3.6
    if state == "pullingOver" and taxiSpeed < maxPullOverSpeed then
  if not veh then return false end
  return veh:getVelocity():len() > 5 and currentStep == steps.taxiDriving
end

  if currentStep == steps.taxiCalled and gameplay_walk.isWalking() and getObjectByID(currentTaxiId):getVelocity():len() < 1 then
    local dist = be:getPlayerVehicle(0):getPosition():distance(map.objects[currentTaxiId].pos)
@/lua/ge/extensions/editor/vizHelper.lua
  for k, v in ipairs(vizHelper) do
    vizHelper[k] = string.sub(v, string.len(artPath) + 1)
  end
@/gameplay/missionTypes/busMode/constructor.lua
  local hex = hex:gsub("#","")
  if hex:len() == 3 then
    return {(tonumber("0x"..hex:sub(1,1))*17)/255, (tonumber("0x"..hex:sub(2,2))*17)/255, (tonumber("0x"..hex:sub(3,3))*17)/255, 1}
@/lua/ge/extensions/core/recoveryPrompt.lua

local function slowerThan(v) local veh = getPlayerVehicle(0) if veh then return veh:getVelocity():len() <= v end return false end
    if veh then
      if veh:getVelocity():len() >= movingSlowlyThreshold then
        return false, "Stop your vehicle."
    if veh then
      if veh:getVelocity():len() >= stoppedThreshold then
        return false, "Stop your vehicle completely."
@/lua/ge/extensions/gameplay/walk.lua
    vehVelocity:set(veh:getVelocityXYZ())
    local vehicleSpeed = vehVelocity:len()
    if vehicleSpeed < lowerStoppingSpeed then atParkingSpeed = true end
@/lua/ge/extensions/flowgraph/manager.lua
    -- TODO: clear up hack with filepaths (issue when loading a FG as a mission)
    local path = dirname:sub(string.len(customNodePath) + string.find(dirname, customNodePath, 1, true))
    local pathArgs = split(path, '/')
    end
    local moduleName = string.sub(fn, 1, string.len(fn) - 4)
    local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
    local moduleName = string.sub(fn, 1, string.len(fn) - 4)
    local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
    local status, node = pcall(rerequire, requireFilename)
@/lua/ge/extensions/career/saveSystem.lua
local function renameFolder(oldName, newName)
  local oldNameLength = string.len(oldName)
  if renameFolderRec(oldName, newName, oldNameLength) then
@/lua/ge/extensions/editor/missionEditor/objectives.lua
        local serializedSaveData = jsonEncodePretty(self.mission.careerSetup or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
        local arrayChar = im.ArrayChar(arraySize)
@/lua/ge/extensions/tech/partAnnotations.lua
  for keyword, color in pairs(matches) do
    local len = string.len(keyword)
    if len > maxKnown then
@/lua/vehicle/electricsCustomValueParser.lua
  --   --   --if it's not in either table, it's forbidden and we abort parsing
  --   s = s:sub(1, (s:find("%.") or (s:len() + 1)) - 1)
  --   if not (customElectricsEnv[s] or keyworkdWhiteListLookup[s]) then
@/lua/ge/extensions/core/modmanager.lua
    local path, filename, ext = path.split(v)
    local infofile = path .. string.sub(filename, 0, -string.len(ext)-2) .. '.json'
    local data = jsonReadFile(infofile)
    if zipPath:startswith(mods[modname].unpackedPath) then
      zipPath = string.sub(zipPath, string.len(mods[modname].unpackedPath) + 1)
      if string.startswith(zipPath, '/') then
  if string.startswith(realPath, userPath) then
    local modPath = realPath:sub(string.len(userPath))
    modPath = modPath:gsub("\\", "/")
@/lua/ge/extensions/core/online.lua
  r.pub.responseCode = responseCode
  if type(responseresponseHeadersBuffer) == 'string' and string.len(responseHeaders) > 0 then
    r.pub.responseHeaders = responseHeaders
  end
  if type(responseBuffer) == 'string' and string.len(responseBuffer) > 0 then
    r.pub.responseBuffer = responseBuffer
@/lua/ge/extensions/core/couplerCameraModifier.lua
  if obj1 ~= nil and obj2 ~= nil then
    local dist = (pos1 - pos2):len()
    if dist < 1 or dist > 15 then return false end
@/lua/ge/extensions/editor/gen/utils.lua
	local startPoint, endPoint = 1, 1;
	for i = 1, str:len() do
		if (i + 1) > str:len() then
	for i = 1, str:len() do
		if (i + 1) > str:len() then
			endPoint = str:len();
		if (i + 1) > str:len() then
			endPoint = str:len();
		end
		end
		if (str:sub(i, i + (delimiter:len() - 1)) == delimiter) then
			endPoint = i - 1;
			table.insert(result, str:sub(startPoint, endPoint));
			startPoint = i + (delimiter:len());
		elseif (i == str:len()) then
			startPoint = i + (delimiter:len());
		elseif (i == str:len()) then
			endPoint = str:len();
		elseif (i == str:len()) then
			endPoint = str:len();
			table.insert(result, str:sub(startPoint, endPoint));
@/lua/common/libs/luamqtt/mqtt/protocol4.lua
	-- DOC: 3.1.1 Fixed header
	local header = make_header(packet_type.CONNECT, 0, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.1.1 Fixed header
	local header = make_header(packet_type.CONNECT, 0, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.3.1 Fixed header
	local header = make_header(packet_type.PUBLISH, flags, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.3.1 Fixed header
	local header = make_header(packet_type.PUBLISH, flags, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.8.1 Fixed header
	local header = make_header(packet_type.SUBSCRIBE, 2, variable_header:len() + payload:len()) -- NOTE: fixed flags value 0x2
	return combine(header, variable_header, payload)
	-- DOC: 3.8.1 Fixed header
	local header = make_header(packet_type.SUBSCRIBE, 2, variable_header:len() + payload:len()) -- NOTE: fixed flags value 0x2
	return combine(header, variable_header, payload)
	-- DOC: 3.10.1 Fixed header
	local header = make_header(packet_type.UNSUBSCRIBE, 2, variable_header:len() + payload:len()) -- NOTE: fixed flags value 0x2
	return combine(header, variable_header, payload)
	-- DOC: 3.10.1 Fixed header
	local header = make_header(packet_type.UNSUBSCRIBE, 2, variable_header:len() + payload:len()) -- NOTE: fixed flags value 0x2
	return combine(header, variable_header, payload)
@/flowgraphEditor/Tower/customNodes/towerNode.lua
    local _, fn, ext = path.split(room.file, true)
    local name = generateObjectNameForClass('Prefab', string.format("%s - %d - ", string.sub(fn, 1, string.len(fn) - string.len(ext)-1), i))
    local scenetreeObject = spawnPrefab(name , self.mgr.savedDir .. room.file, "0 0 0", "0 0 1 0", "1 1 1", false)
    local _, fn, ext = path.split(room.file, true)
    local name = generateObjectNameForClass('Prefab', string.format("%s - %d - ", string.sub(fn, 1, string.len(fn) - string.len(ext)-1), i))
    local scenetreeObject = spawnPrefab(name , self.mgr.savedDir .. room.file, "0 0 0", "0 0 1 0", "1 1 1", false)
@/lua/common/jsonDebug.lua
    ch = s:match('^[^"\\]*', i)
    i = i + (ch and ch:len() or 0)
    concatTable[resultidx] = ch
@/lua/ge/extensions/core/vehicles.lua
    local formats = {}
    if formattxt and string.len(formattxt) >0 then
      formats = jsonDecode(formattxt )
  local txt = veh:getDynDataFieldbyName("licenseText", 0)
  if txt and txt:len() > 0 then
    return txt
    local formattxt = veh:getDynDataFieldbyName("licenseFormats", 0)
    if formattxt and string.len(formattxt) >0 then
      formats = jsonDecode(formattxt )
  if not design or not design.data then
    if designPath:len() > 0 then
      log('E', 'setPlateText', "License plate "..designPath.." not existing")
@/lua/ge/extensions/editor/perfProfiler.lua
  local dir, fn, ext = path.split(file, true)
  fn = fn:sub(0,fn:len()-ext:len()-1)
  local dir, fn, ext = path.split(file, true)
  fn = fn:sub(0,fn:len()-ext:len()-1)
@/lua/ge/extensions/flowgraph/nodes/math/math.lua
    self.lastBuiltExpression = nil --nil our tracker, otherwise we can end up with no func
    if self.data.expression:len() <= 0 then
      error = "Please enter a valid expression"
@/lua/common/libs/luamqtt/mqtt/protocol5.lua
	return combine(
		str_char(make_var_length(props:len())),		-- DOC: 2.2.2.1 Property Length
		props										-- DOC: 2.2.2.2 Property
	-- DOC: 3.1.1 Fixed header
	local header = make_header(packet_type.CONNECT, 0, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.1.1 Fixed header
	local header = make_header(packet_type.CONNECT, 0, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.3.1 Fixed header
	local header = make_header(packet_type.PUBLISH, flags, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: 3.3.1 Fixed header
	local header = make_header(packet_type.PUBLISH, flags, variable_header:len() + payload:len())
	return combine(header, variable_header, payload)
	-- DOC: The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBACK has a Remaining Length of 2.
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.4.2.1 PUBACK Reason Code
	-- DOC: 3.4.1 PUBACK Fixed Header
	local header = make_header(packet_type.PUBACK, 0, variable_header:len())
	return combine(header, variable_header)
	-- DOC: The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBREC has a Remaining Length of 2.
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.5.2.1 PUBREC Reason Code
	-- DOC: 3.5.1 PUBREC Fixed Header
	local header = make_header(packet_type.PUBREC, 0, variable_header:len())
	return combine(header, variable_header)
	-- DOC: The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBREL has a Remaining Length of 2.
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.6.2.1 PUBREL Reason Code
	-- DOC: 3.6.1 PUBREL Fixed Header
	local header = make_header(packet_type.PUBREL, 2, variable_header:len()) -- flags: fixed 0010 bits, DOC: Figure 3‑14 – PUBREL packet Fixed Header
	return combine(header, variable_header)
	-- DOC: The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBCOMP has a Remaining Length of 2.
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.7.2.1 PUBCOMP Reason Code
	-- DOC: 3.7.1 PUBCOMP Fixed Header
	local header = make_header(packet_type.PUBCOMP, 0, variable_header:len())
	return combine(header, variable_header)
	-- DOC: 3.8.1 SUBSCRIBE Fixed Header
	local header = make_header(packet_type.SUBSCRIBE, 2, variable_header:len() + payload:len()) -- flags: fixed 0010 bits, DOC: Figure 3‑18 SUBSCRIBE packet Fixed Header
	return combine(header, variable_header, payload)
	-- DOC: 3.8.1 SUBSCRIBE Fixed Header
	local header = make_header(packet_type.SUBSCRIBE, 2, variable_header:len() + payload:len()) -- flags: fixed 0010 bits, DOC: Figure 3‑18 SUBSCRIBE packet Fixed Header
	return combine(header, variable_header, payload)
	-- DOC: 3.10.1 UNSUBSCRIBE Fixed Header
	local header = make_header(packet_type.UNSUBSCRIBE, 2, variable_header:len() + payload:len()) -- flags: fixed 0010 bits, DOC: Figure 3.28 – UNSUBSCRIBE packet Fixed Header
	return combine(header, variable_header, payload)
	-- DOC: 3.10.1 UNSUBSCRIBE Fixed Header
	local header = make_header(packet_type.UNSUBSCRIBE, 2, variable_header:len() + payload:len()) -- flags: fixed 0010 bits, DOC: Figure 3.28 – UNSUBSCRIBE packet Fixed Header
	return combine(header, variable_header, payload)
	-- DOC: The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Normal disconnecton) and there are no Properties. In this case the DISCONNECT has a Remaining Length of 0.
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.14.2.1 Disconnect Reason Code
	-- DOC: 3.14.1 DISCONNECT Fixed Header
	local header = make_header(packet_type.DISCONNECT, 0, variable_header:len()) -- flags: 0
	return combine(header, variable_header)
	local props = make_properties(packet_type.AUTH, args)		-- DOC: 3.15.2.2 AUTH Properties
	if props:len() > 1 or args.rc ~= 0 then
		variable_header:append(make_uint8(args.rc))				-- DOC: 3.15.2.1 Authenticate Reason Code
	-- DOC: 3.15.1 AUTH Fixed Header
	local header = make_header(packet_type.AUTH, 0, variable_header:len())
	return combine(header, variable_header)
@/lua/vehicle/controller/drivingDynamics/actuators/activeDiffBias.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/common/extensions/ui/flowgraph/editor.lua
  elseif tpe == 'string' or tpe == 'bool' or tpe == 'boolean' then
    return (tostring(value):sub(0, 10) .. (tostring(value):len() > 10 and "..." or ""))
  elseif tpe == 'number' then
          local newName = ffi.string(newNameArray)
          if string.len(newName) > 0 then
            if source:renameVariable(name, newName) then
@/lua/ge/extensions/editor/decalEditor.lua
  local _, _, ext = path.split(fileName)
  local fileNameNoExt = string.sub(fileName, 1, -(ext:len() + 1))
  if not FS:fileExists(fileNameNoExt .. "png") and not FS:fileExists(fileNameNoExt .. "dds") then
@/lua/common/libs/luasocket/socket/http.lua
            if not chunk then return sock:send("0\r\n\r\n") end
            local size = string.format("%X\r\n", string.len(chunk))
            return sock:send(size ..  chunk .. "\r\n")
        reqt.headers = {
            ["content-length"] = string.len(b),
            ["content-type"] = "application/x-www-form-urlencoded"
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveDampers.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/ge/extensions/util/inputSystemUtils.lua
local function isValidVIdPId(vidpid)
  if type(vidpid) ~= 'string' or vidpid:len() ~= 8 then
    return false
@/lua/ge/extensions/editor/dataBlockEditor.lua

  while string.len(stringList) > 0 do
    local first, last, name = string.find(stringList, '(%a+)')
@/lua/ge/extensions/flowgraph/nodes/ui/multiDescription.lua
    local txt = self.data.pattern
    if txt:len() > 10 then
      im.Text(txt:sub(1,10).."...")
@/lua/ge/main.lua
  Lua:log(a, b, c, ...)
  if (type(a) == "string" and string.len(a) > 1000) or
  (type(b) == "string" and string.len(b) > 1000) or
  if (type(a) == "string" and string.len(a) > 1000) or
  (type(b) == "string" and string.len(b) > 1000) or
  (type(c) == "string" and string.len(c) > 1000) ) then
  (type(b) == "string" and string.len(b) > 1000) or
  (type(c) == "string" and string.len(c) > 1000) ) then
    log("W", b, "The long log message above has been triggered by:")
@/lua/ge/extensions/gameplay/statistic.lua
    activityType = "scenario"
    activityDetail = "/fg"..missionId:sub(levelFolder:len()+1):gsub("/","@")
  elseif scenario_scenarios and scenario_scenarios.getScenario() then
      if im.BeginTabItem("entries career") then
        --im.TextUnformatted("save : "..dumps(type(fileNameCareer))..dumps(string.len(fileNameCareer or "") )..dumps(fileNameCareer))
        if fileDataCareer then
@/lua/vehicle/extensions/tech/OBDEmulator.lua
  data = data .. "\r"
  local bytesWritten = obj:serialPortWrite(comPortId, data, string.len(data))
  if bytesWritten == 0 then --port disconnected?
  local data, bufferOverflown = obj:serialPortRead(comPortId)
  if string.len(data) > 0 then
    serialPortDataReceived(data, bufferOverflown)
@/lua/common/utils/simpleHttpServer.lua
Connection: close
Content-Length: ]] .. string.len(body) .. [[
Connection: close
Content-Length: ]] .. string.len(s) .. [[
Content-Type: application/json
@/lua/ge/extensions/util/autoAnnotation.lua
  local annotation = node:getField('annotation', '')
  if string.len(annotation) == 0 then
    local shapeName = node:getField('shapeName', '')

  if string.len(annotation) == 0 then
    local name = node:getName()
@/lua/common/libs/LuaIRC/init.lua
                        print(indent.."["..pos.."] => "..tostring(t).." {")
                        sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
                        print(indent..string.rep(" ",string.len(pos)+6).."}")
                        sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
                        print(indent..string.rep(" ",string.len(pos)+6).."}")
                    elseif (type(val)=="string") then
@/lua/ge/extensions/core/weather.lua
  local levelPath = getMissionFilename() -- /levels/small_island/info.json
  if type(levelPath) ~= 'string' or string.len(levelPath) == 0 then return end
@/lua/common/utils/pixellib.lua
  local consumedWidth = 0
  for i = 1, string.len(text) do
    local c = string.sub(text, i, i)
      for dy = 1, charHeight do
        for dx = 1, string.len(cl[dy]) do
          local cf = string.sub(cl[dy], dx, dx)
@/lua/ge/extensions/core/input/actions.lua
    if string.startswith(actionName, prefix) then
      actionName = string.sub(actionName, 1+string.len(prefix))
    else
@/lua/ge/extensions/core/quickAccess.lua
  end
  if string.sub(args.level, string.len(args.level)) ~= '/' then args.level = args.level .. '/' end -- make sure there is always a trailing slash in the level
@/lua/objectpool/main.lua
  local v = require("jbeam/stage2")
  if type(initData) == "string" and string.len(initData) > 0 then
    local state, initData = pcall(lpack.decode, initData)
@/lua/ge/extensions/core/environment.lua
  for k, v in pairs(gms) do
    if string.len(k) > 31 then
      local newk = string.sub(k, 1, 30)
  levelPath = levelPath or getMissionFilename()
  if levelPath and string.len(levelPath) > 0 then
    local levelDir, filename, ext = path.split(levelPath, "(.-)([^/]-([^%.]*))$")
@/lua/vehicle/extensions/core/quickAccess.lua
  end
  if string.sub(args.level, string.len(args.level)) ~= "/" then
    args.level = args.level .. "/"
@/lua/ge/extensions/core/gamestate.lua
  for _, prefix in ipairs(pausedStates) do
    if string.sub(stateName, 1, string.len(prefix)) == prefix then
      return true
@/lua/ge/extensions/editor/util/searchUtil.lua
  local highlightLower = match:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
  local matchedCharCount = 0
@/lua/ge/extensions/editor/flowgraph/references.lua
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
  for i = 0, 6 do
@/lua/ge/extensions/gameplay/rally/client.lua
      ["Content-Type"] = "application/json",
      ["content-length"] = string.len(reqbody)
    },
@/lua/ge/extensions/editor/forestEditor.lua
          end
          if im.IsItemHovered() and string.len(dbName) >= tooltipLongTextLength then
            im.SetTooltip(dbName)
@/lua/common/libs/luamqtt/mqtt/client.lua
	local data = tostring(packet)
	local len = data:len()
	if len <= 0 then
@/lua/ge/extensions/editor/barriersEditor.lua
  local directory = "/levels/"..level.."/"
  local levelPartLength = (directory:len())+1
  for _, f in ipairs(FS:findFiles("/levels/"..level.."/", searchTerm..".prefab", -1, true,true)) do
@/lua/ge/extensions/editor/flowgraph/properties.lua
            local oldName = pin.name
            if ffi.string(textinput) ~= '' and ffi.string(textinput):gsub("[%s]",""):len()~=0 then
              pin.name = ffi.string(textinput)
            local oldName = pin.name
            if ffi.string(textinput) ~= '' and ffi.string(textinput):gsub("[%s]",""):len()~=0 then
              pin.name = ffi.string(textinput)
            if data.filepath:find(pin.node.mgr.savedDir) then
              sel = data.filepath:sub(pin.node.mgr.savedDir:len()+1,-1)
            end
            if validExt then
              local shortPath = file:sub(pin.node.mgr.savedDir:len()+1,-1)
              if im.Selectable1(shortPath) then
        if im.Button("Add Tag Field") then
          if ffi.string(self.macroTagField) ~= '' and ffi.string(self.macroTagField):gsub("[%s]",""):len()~=0 then
            table.insert(self.mgr.macroTags,tag)
@/lua/console/json-performance.lua
  fileContent[filename] = readFile(filename)
  totalSize = totalSize + string.len(fileContent[filename])
  --print(' * ' ..tostring(filename))
@/lua/common/extensions.lua
  local extName
  if string.len(rootName) > 0 then
    extName = rootName..'_'..string.gsub(extPath, "(.*/)(.*)", "%2")
@/lua/common/extensions/ui/imgui_custom_luaintf.lua
      local highlightLower = highlightText:lower()
      local highlightLowerLen = string.len(highlightLower) - 1
      for i = 0, 6 do -- up to 6 matches overall ...
@/lua/ge/extensions/flowgraph/nodes/vehicle/special/wheelDistance.lua
        local dot = wheelNodePosToTrigger:normalized():dot(dirVec:normalized())
        local distance = (wheelNodePosToTrigger * dot):len()
        table.insert(wheels,{wheelNodePos = wheelNodePos, distance = distance})
    local dot = pointToTrigger:dot(dirVec:normalized())
    local distanceFromStart = -dot --(vehicle:getDirectionVector() * dot):len()
@/lua/ge/extensions/editor/flowgraph/examples.lua
      local dirname, fn, e = path.splitWithoutExt(filename, true)
      local path = dirname:sub(string.len(stateTemplatePath) + 1)
        local moduleName = fn
        --local requireFilename = string.sub(filename, 1, string.len(filename) - 4)
        local lectionData = {}
    local highlightLower = highlightText:lower()
    local highlightLowerLen = string.len(highlightLower) - 1
    for i = 0, 6 do -- up to 6 matches overall ...
@/lua/ge/extensions/flowgraph/nodes/util/closestRoad.lua
    if index == 1 then
      local short = string.sub(name,length+1,string.len(name))
      local underscoreIndex = string.find(short,"_")
        end
        local rdIdx = tonumber(string.sub(short,underscoreIndex+1,string.len(short)))
        return rdId, rdIdx
@/lua/ge/extensions/editor/scriptAIManager.lua

          local fn_short = string.sub(filename, string.len(trackFilePath) + 1)
          fn_short = string.sub(fn_short, 1, string.len(fn_short) - string.len(trackFileExt))
          local fn_short = string.sub(filename, string.len(trackFilePath) + 1)
          fn_short = string.sub(fn_short, 1, string.len(fn_short) - string.len(trackFileExt))
          if im.Button(fn_short) then
          local fn_short = string.sub(filename, string.len(trackFilePath) + 1)
          fn_short = string.sub(fn_short, 1, string.len(fn_short) - string.len(trackFileExt))
          if im.Button(fn_short) then
@/lua/ge/extensions/scenario/demolitionDerby.lua
        if not lastPosition[vName] then lastPosition[vName] = vObj:getPosition() end
        local distance = (vObj:getPosition() - lastPosition[vName]):len()
        if distance > 1 then
@/lua/ge/extensions/util/sortLines.lua
  for i, line in ipairs(lines) do
    if string.len(line[2]) > 0 then
      handle:write(line[2] .. '\n')
@/lua/ge/extensions/scenario/busdriver.lua
  local hex = hex:gsub("#","")
  if hex:len() == 3 then
    return (tonumber("0x"..hex:sub(1,1))*17)/255, (tonumber("0x"..hex:sub(2,2))*17)/255, (tonumber("0x"..hex:sub(3,3))*17)/255
@/lua/ge/extensions/editor/api/valueInspector.lua
          --TODO: maybe something better for longer strings not fitting in the popup width
          if imgui.IsItemHovered() and string.len(objName) >= tooltipLongTextLength then
            imgui.SetTooltip(objName)
              --TODO: maybe something better for longer strings not fitting in the popup width
              if imgui.IsItemHovered() and string.len(objName) >= tooltipLongTextLength then
                imgui.SetTooltip(objName)
    then
    local fieldLen = string.len(fieldValue)
    local oldStrRef = nil
            --TODO: maybe something better for longer strings not fitting in the popup width
            if imgui.IsItemHovered() and string.len(dbName) >= tooltipLongTextLength then
              imgui.SetTooltip(dbName)
    --editor.logError("Unsupported value type: " .. fieldType .. " (typeName: ".. fieldTypeName ..") " .. " for field: " .. fieldName)
    local fieldLen = string.len(fieldValue)
    local oldStrRef = nil
@/lua/ge/extensions/ui/console.lua
      end
      local inplen = string.len(t)
      local inplenInt = inplen
  if #slashed == 0 then slashed[1]="" end --fix for empty print
  if tostring(slashed[1]):len() > 4096 then
    logs[logsTail] = {t,lvl,origin,tostring(slashed[1]):sub(1,4096)} --trim so we save memory and don't stress other part of code
      -- logs[logsTail] = slashed[i]
      if tostring(slashed[i]):len() > 4096 then
        logs[logsTail] = {t,lvl,origin,tostring(slashed[i]):sub(1,4096)} --trim so we save memory and don't stress other part of code
                local vp = im.GetWindowViewport()
                local chunkSize = tostring(v):len() * vp.Size.x / txtwidth
                if txtwidth > vp.Size.x or tostring(v):len()>chunkSize then
                local chunkSize = tostring(v):len() * vp.Size.x / txtwidth
                if txtwidth > vp.Size.x or tostring(v):len()>chunkSize then
                  local bt = tostring(v)
                  local chunk = ""
                  while(bt:len() > chunkSize and chunk:len() < 2048) do
                    chunk = chunk..bt:sub(1,chunkSize).."\n"
                  local chunk = ""
                  while(bt:len() > chunkSize and chunk:len() < 2048) do
                    chunk = chunk..bt:sub(1,chunkSize).."\n"
                  end
                  if bt:len() < chunkSize then
                    chunk = chunk..bt
                    chunk = chunk.."\n...\nToo long to display, check the log file"
                    --chunk = chunk.."\nlsize="..tostring(v):len()
                  end
        local cmd = ffi.string(consoleInputField)
        if string.len(cmd) > 0 then
              local hex_dump = function (str)
                local len = string.len( str )
                local dump = ""
  local tmp = ffi.string(consoleInputField)
  if tmp and string.len(tmp) >0 then
    d.consoleInputField = tmp
@/lua/vehicle/extensions/api.lua
            ["Content-Type"] = "application/x-www-form-urlencoded",
            ["content-length"] = string.len(reqbody)
        },
@/lua/ge/spawn.lua
local function moveTrafficVehiclesAway(bb, vehID)
  local vehRadius = bb:getHalfExtents():len()
  local bbCenter = bb:getCenter()
@/lua/ge/extensions/editor/createObjectTool.lua
        if imgui.IsItemHovered() then
          if hiddenClasses[result.name] and string.len(hiddenClasses[result.name]) > 0 then
            imgui.SetTooltip(string.format("Use %s for this class", hiddenClasses[result.name]))
            imgui.SetTooltip(string.format("Use %s for this class", hiddenClasses[result.name]))
          elseif string.len(result.name) >= tooltipLongTextLength then
            --TODO: maybe something better for longer strings not fitting in the popup width
@/lua/vehicle/extensions/inputAnalyzer.lua

    local inputLength = inputString:len()
    for _, is in ipairs(registeredInputStrings) do
local function registerInputString(str, callback)
  local strLength = str:len()
  if strLength < 8 or strLength > 16 then
@/lua/ge/extensions/trackbuilder/trackBuilder.lua
  for _, file in pairs(FS:findFiles(materialSettings.directory, "*.dds", -1, true, false)) do
    local fileWithoutExtension = string.sub(file, 1, string.len(file) - 4)
    local textureType = string.sub(fileWithoutExtension, string.len(fileWithoutExtension) - 1, string.len(fileWithoutExtension))
    local fileWithoutExtension = string.sub(file, 1, string.len(file) - 4)
    local textureType = string.sub(fileWithoutExtension, string.len(fileWithoutExtension) - 1, string.len(fileWithoutExtension))
    local path = {}
    local fileWithoutExtension = string.sub(file, 1, string.len(file) - 4)
    local textureType = string.sub(fileWithoutExtension, string.len(fileWithoutExtension) - 1, string.len(fileWithoutExtension))
    local path = {}
    local path = {}
    for str in string.gmatch(string.sub(fileWithoutExtension, 1, string.len(fileWithoutExtension) - 2), "([^'/']+)") do
      table.insert( path, str )
   else -- glow map
      local texType = string.sub(fileWithoutExtension, string.len(fileWithoutExtension) - 4, string.len(fileWithoutExtension))
      if texType == "decal" then
   else -- glow map
      local texType = string.sub(fileWithoutExtension, string.len(fileWithoutExtension) - 4, string.len(fileWithoutExtension))
      if texType == "decal" then
        local path = {}
        for str in string.gmatch(string.sub(fileWithoutExtension, 1, string.len(fileWithoutExtension) - 6), "([^'/']+)") do
          table.insert( path, str )
@/lua/ge/extensions/editor/flowgraph/search.lua
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
  for i = 0, 6 do -- up to 6 matches overall ...
@/lua/vehicle/controller/drivingDynamics/actuators/electronicSplitShaftLock.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/ge/extensions/editor/gen/exp_meshexplorer.lua
--            binstr = ffi.string(vertices) --dataString:get())
--                print('?? CHAR:'..string.byte(binstr, 3)) -- string.len(binstr)))
--                print('?? CHAR:'..string.char(string.byte(binstr, 1, 100))) -- string.len(binstr)))
--                print('?? CHAR:'..string.byte(binstr, 3)) -- string.len(binstr)))
--                print('?? CHAR:'..string.char(string.byte(binstr, 1, 100))) -- string.len(binstr)))
--            local s = dataString:tostring()
@/lua/ge/extensions/flowgraph/nodes/input/blacklistAction.lua
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
  for i = 0, 6 do
@/lua/ge/extensions/editor/api/camera.lua
  local bBox = editor.objectSelectionBBox
  local viewRadius = (bBox.maxExtents - bBox.minExtents):len()
  local maxViewRadius = 16000
@/lua/ge/extensions/editor/missionEditor/progressSingle.lua
        local serializedSaveData = jsonEncodePretty(self.missionInstance.saveData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
        local arrayChar = im.ArrayChar(arraySize)
@/lua/ge/ge_utils.lua
  local ascii = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  local sl = string.len(ascii)
  for i = 1, len do
@/lua/vehicle/controller/drivingDynamics/actuators/activeCenterDiffLock.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/common/libs/ezSVG/EzSVG.lua
  if type(k) == "number" then return true end
  if string.sub(k, 1, k.len("__")) == "__" then return false end
  return true
@/lua/vehicle/controller/propAnimation/dualAxisLever.lua
  elseif firstLetter == "M" then
    local gearIndex = desiredMode:sub(2, desiredMode:len())
    desiredMode = "M"
    --we only support modes here with a length of at least 2
    local modeNameLength = impulseMode.modeName:len()
    if modeNameLength < 2 then
@/lua/ge/extensions/editor/engineAudioDebug.lua
        local dataString = jsonEncodePretty(data)
        dataString = dataString:sub(3, dataString:len() - 2)
        setClipboard(dataString)
@/lua/vehicle/controller/drivingDynamics/actuators/electronicDiffLock.lua
  local nameString = jbeamData.name
  local slashPos = nameString:find("/", -nameString:len())
  if slashPos then
@/lua/common/libs/luamqtt/mqtt/protocol.lua
function protocol.make_string(str)
	return make_uint16(str:len())..str
end
		for _, part in ipairs(self) do
			len = len + part:len()
		end
	end
	input.available = data:len()
@/lua/ge/extensions/editor/missionEditor/progressSetup.lua
        local serializedSaveData = jsonEncodePretty(self.missionInstance.saveData or "{}")
        local arraySize = 8*(2+math.max(128, 4*serializedSaveData:len()))
        local arrayChar = im.ArrayChar(arraySize)
@/lua/common/libs/luasocket/socket/socket.lua
            if err then return nil, err end
            length = length - string.len(chunk)
            return chunk
@/lua/ge/extensions/flowgraph/nodes/string/format.lua
    local txt = self.data.pattern
    if txt:len() > 16 then
      im.Text(txt:sub(1,16).."...")
@/lua/common/libs/luasocket/socket/mime.lua
        if chunk == "" then return "''"
        else return string.len(chunk) end
    else return "nil" end