GE Lua Documentation

Press F to search!

lower

Definition


-- @/=[C]:-1
function lower(...)

Callers

@/lua/common/libs/luasocket/socket/mbox.lua
        if name then
            name = string.lower(name)
            if headers[name] then
@/lua/ge/extensions/career/career.lua
    if imgui.Selectable1("Open Save Folder") then
      Engine.Platform.exploreFolder(currentSavePath:lower())
    end
@/lua/ge/extensions/career/modules/marketplace.lua
    -- They only give "final offer" when patience is low, but they NEVER walk away
    -- 15% chance they'll go lower (desperation - need to move the car)
    -- ========================================================================
@/lua/common/libs/copas/copas/http.lua
        if not (name and value) then return nil, "malformed reponse headers" end
        name = string.lower(name)
        -- get next line (value might be folded)
    for i,v in base.pairs(reqt.headers or lower) do
        lower[string.lower(i)] = v
    end
@/lua/ge/extensions/editor/slotTrafficEditor.lua
        if roadFilterChanged then
          roadFilterText = string.lower(ffi.string(im.ArrayChar(128, roadFilterText)))
        end
            -- Apply filter if any
            if roadFilterText == "" or string.find(string.lower(roadId), roadFilterText) then
              table.insert(roadsArray, roadId)
@/lua/ge/extensions/ui/apps/minimap/additionalInfo.lua
    for _, lvl in ipairs(core_levels.getList()) do
      if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
        locationName = translateLanguage(lvl.title, lvl.title, true)
@/lua/ge/extensions/scenario/quickRaceLoader.lua
      --end
      local tbt = trackBuilderTracks[levelName] or trackBuilderTracks[levelName:lower()]
      if tbt ~= nil then
@/lua/ge/extensions/editor/gen/ui.lua
				if U._PRD == 1 then
					local scp = string.lower(t)
					if i > 1 then
					local colText = im.ImVec4(0.5, 0.5, 0.5, 1)
					if scope == string.lower(t) then
						colText = im.ImVec4(0.9, 0.9, 0.9, 1)
		--                    lo('?? cclick'..i..':'..t)
							scope = string.lower(t)
							W.scopeOn(scope)
			if im.InvisibleButton('ib'..i, im.ImVec2(width + 5, 20)) then
				scope = string.lower(t)
				W.selectionHide()
	--                lo('?? pressed:'..i..':'..t)
					W.scopeOn(string.lower(t))
				end
@/lua/ge/extensions/scenario/distanceGoal.lua

    --distance instance: Distance between two vehicles must not be lower(minDistance) or higher(maxDistance) than X
    local vehicle = scenetree.findObjectById(instance.vId)
@/lua/ge/extensions/core/modmanager.lua
local function getModNameFromPath(path)
  local modname = string.lower(path)
  modname = modname:gsub('dir:/', '') --should have been killed by now
    if hash then
      d.hash = string.lower(hash)
      --log('D', 'updateZIPEntry', " * " .. tostring(filename) .. " = " .. tostring(hash))
  for k2, v2 in pairs(filesInZIP) do
    v2 = string.lower(v2)
    local modID = string.match(tostring(v2), '^/?mod_info/([0-9a-zA-Z]*)/info%.json')
        for k2, v2 in pairs(filesInZIP) do
          v2 = string.lower(v2)
          local modID = string.match(tostring(v2), '^/?mod_info/([0-9a-zA-Z]*)/info%.json')
@/lua/ge/extensions/gameplay/missions/missionManager.lua
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
        local level = v.fullfilename
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
        local level = v.fullfilename
@/lua/ge/extensions/ui/vehicleVicinityApp.lua
      end
      if string.lower(veh.jbeam):find('trailer') then
        type = 'trailer'
@/lua/ge/ge_utils.lua
  local numberValue = tonumber(stringValue) or 0
  return string.lower(stringValue) == "true" or numberValue ~= 0
end
@/lua/common/libs/luasocket/socket/http.lua
        if not (name and value) then return nil, "malformed reponse headers" end
        name = string.lower(name)
        -- get next line (value might be folded)
    for i,v in base.pairs(reqt.headers or lower) do
        lower[string.lower(i)] = v
    end
@/lua/ge/extensions/editor/resourceChecker/resourceUtil.lua
                  if dir then
                    local root = string.lower(convertdata):gsub('/levels/','levels/'):gsub('/vehicles/','vehicles/')
                    if not string.lower(dir):find(root) then
                    local root = string.lower(convertdata):gsub('/levels/','levels/'):gsub('/vehicles/','vehicles/')
                    if not string.lower(dir):find(root) then
                      if dir:find("levels/") then
      job.yield()
      k = string.lower(k)
      tmpMats[k] = true
      job.yield()
      if not (mats[string.lower(k)] or mats[string.lower(v)]) then
        log('I', '', 'Found unused material '..v )
      job.yield()
      if not (mats[string.lower(k)] or mats[string.lower(v)]) then
        log('I', '', 'Found unused material '..v )
      if basefilename then
        basefilename = string.lower(basefilename)
        modelsNoExt[basefilename] = true
      job.yield()
      k = string.lower(k)
      if not k:match '^/' then
      local dir, basefilename, ext = path.splitWithoutExt(v)
      if models[string.lower(v)] then
      elseif ext == "cdae" and basefilename and modelsNoExt[string.lower(basefilename)] then
      if models[string.lower(v)] then
      elseif ext == "cdae" and basefilename and modelsNoExt[string.lower(basefilename)] then
      else
    for _,v in pairs(forestModels) do
      forestShapes[string.lower(v)] = true
    end
      job.yield()
      if forestShapes[string.lower(k)] then
        table.insert(shapes, k.."   Warning: This is an active forest item, but not used in the level")
      job.yield()
      if forestShapes[string.lower(k)] then
        table.insert(toRemove, k.." /levels/"..levelname.."/art/forest/managedItemData.json")
        if filename then
          local txt = string.lower(filename:gsub('.'..ext, ''))
          if not txt:match '^/' then
      local dir, filename, ext = path.split(v)
      local txt = string.lower(filename:gsub('.'..ext, ''))
      if not texTemp[txt] then
@/lua/ge/extensions/gameplay/sites/sitesManager.lua
  for _, info in ipairs(core_levels.getList()) do
    local level = string.lower(info.levelName)
    sitesByLevel[level] = {}
@/lua/ge/server/server.lua
  TorqueScriptLua.setVar("$loadingLevel", true)  -- DO NOT REMOVE, this is used on the c++ side
  levelPath = levelPath:lower()
  if not levelPath:find(".json") and not levelPath:find(".mis") then
@/lua/ge/extensions/editor/missionEditor.lua
    if not scenario.isMissionAsScenario then
      csvdata:add(scenario.sourceFile, translateLanguage(scenario.name, scenario.name, true), dateStr, origin, string.lower(scenario.levelName), type2)
    end
@/lua/common/libs/luasocket/socket/smtp.lua
    for i,v in base.pairs(headers or lower) do
        lower[string.lower(i)] = v
    end
@/lua/ge/extensions/campaign/exploration.lua

  local levelMissionFile = string.lower(path.getPathLevelInfo(levelName))
  local loadedMissionFile = string.lower(getMissionFilename())
  local levelMissionFile = string.lower(path.getPathLevelInfo(levelName))
  local loadedMissionFile = string.lower(getMissionFilename())
  -- log('D', logTag, 'levelMissionFile: ' .. tostring(levelMissionFile)..'   loadedMissionFile: ' .. tostring(loadedMissionFile))
  if levelMissionFile ~= loadedMissionFile then
    local levelPath = string.lower(path.getPathLevelMain(levelName))
    state.pendingSpawningData = spawningData
@/lua/ge/extensions/flowgraph/nodes/util/loadLevel.lua
    self.primed = nil
    local levelPath = ("/levels/"..self.pinIn.levelPath.value.."/"):lower()
    local loadedMissionFile = getMissionFilename()
@/lua/ge/extensions/editor/dynamicDecals/vehicleColorPalette.lua
      table.insert(palettes, {name = colorPaletteName, values = {{c1.x, c1.y, c1.z}, {c2.x, c2.y, c2.z}, {c3.x, c3.y, c3.z}}})
      table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
      editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
      table.insert(palettes, {name = colorPaletteName, values = {{c1.x, c1.y, c1.z}, {c2.x, c2.y, c2.z}, {c3.x, c3.y, c3.z}}})
      table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
      editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
      if editor.getTempBool_BoolBool() == true then
        table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
        editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
      if editor.getTempBool_BoolBool() == true then
        table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
        editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
        if editor.getTempBool_BoolBool() == true then
          table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
          editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
        if editor.getTempBool_BoolBool() == true then
          table.sort(palettes, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
          editor.setPreference("dynamicDecalsTool.vehicleColorPalette.palettes", palettes)
@/lua/ge/extensions/gameplay/statistic.lua
  if dir ~= nil then
    return string.lower(string.gsub(dir, "/levels/(.*)/", "%1"))
  end
@/lua/common/extensions/ui/imgui_custom_luaintf.lua
      local pos2 = 0
      local labelLower = label:lower()
      local highlightLower = highlightText:lower()
      local labelLower = label:lower()
      local highlightLower = highlightText:lower()
      local highlightLowerLen = string.len(highlightLower) - 1
@/lua/ge/extensions/editor/shapeEditor.lua
  end
  if mat:getClassName():lower() ~= "material" then
    log("E", "_getMaterialObj", dumps(matName) .. " is not a Material. type="..dumps(mat:getClassName()))
@/lua/common/libs/xlsxlib/xlsxlib.lua
  end
  local sheetFile = xlsx.sheets[sheetName] or xlsx.sheets[sheetName:lower()]
  if not sheetFile then
    for name, path in pairs(xlsx.sheets) do
      if name:lower() == sheetName:lower() then
        sheetFile = path
    for name, path in pairs(xlsx.sheets) do
      if name:lower() == sheetName:lower() then
        sheetFile = path
@/lua/ge/extensions/ui/gameplaySelector/tileGenerators/levelTiles.lua
  end
  local searchTextLower = string.lower(searchText)
  local level = core_levels.getLevelByName(item.levelName)
    if level.biome then
      if string.find(string.lower(translate(level.biome)), searchTextLower, 1, true) then
        result.match = true
    if level.suitablefor then
      if string.find(string.lower(translate(level.suitablefor)), searchTextLower, 1, true) then
        result.match = true
    if level.features then
      if string.find(string.lower(translate(level.features)), searchTextLower, 1, true) then
        result.match = true
    if level.roads then
      if string.find(string.lower(translate(level.roads)), searchTextLower, 1, true) then
        result.match = true
    if level.country then
      if string.find(string.lower(translate(level.country)), searchTextLower, 1, true) then
        result.match = true
@/lua/ge/extensions/career/modules/spawnPoints.lua

  if not levelInfo or levelInfo.levelName ~= string.lower(currentLevel) then
    levelInfo = nil
    for _, info in ipairs(core_levels.getList()) do
      if string.lower(info.levelName) == string.lower(currentLevel) then
        levelInfo = info
    for _, info in ipairs(core_levels.getList()) do
      if string.lower(info.levelName) == string.lower(currentLevel) then
        levelInfo = info
@/lua/ge/extensions/editor/materialEditor.lua
          local rel, abs = normalizePathForCheck(currentMaterial, raw)
          local lower = string.lower(rel)
          local isTagged = string.startswith(raw, "@") or string.startswith(raw, "^")

  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end

  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end
local function getMaterials(optionalMaterialNameList)
  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end
local function getMaterials(optionalMaterialNameList)
  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end

  local textFilterString = string.lower(ffi.string(im.TextFilter_GetInputBuf(matFilter)))
    if im.ImGuiTextFilter_PassFilter(matFilter, v) and v then
      if options and options.textFilterResultsWithSameFirstCharAtTop == true and #textFilterString > 0 and string.startswith(string.lower(v), textFilterString) then
        table.insert(sortedMaterialObjectNamesAtTop, v)
local function getGroundmodels()
  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end
  groundModels = tableKeys(core_environment.groundModels) ---
local function getGroundmodels()
  local sortFunc = function(a,b) return string.lower(a) < string.lower(b) end
  groundModels = tableKeys(core_environment.groundModels) ---
@/lua/ge/extensions/editor/util/searchUtil.lua
  local pos2 = 0
  local labelLower = name:lower()
  local highlightLower = match:lower()
  local labelLower = name:lower()
  local highlightLower = match:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
@/lua/ge/extensions/editor/vehicleEditor/staticEditor/vePartList.lua
              local jbeamFilename = tostring(v[3])
              v[1] = partsSearchTextCache == '' or (partName:lower():find(partsSearchTextCache, 1, true) or jbeamFilename:lower():find(partsSearchTextCache, 1, true))
              if v[1] then
              local jbeamFilename = tostring(v[3])
              v[1] = partsSearchTextCache == '' or (partName:lower():find(partsSearchTextCache, 1, true) or jbeamFilename:lower():find(partsSearchTextCache, 1, true))
              if v[1] then
@/lua/ge/extensions/ui/gameplaySelector/general.lua
      for _, propName in pairs(filtersWhiteList) do
        local propVal = item[propName:lower()]
        if propVal == nil then
  if searchText and searchText ~= "" then
    local searchTextLower = string.lower(searchText)
    local itemNameLower = string.lower(item.name or "")
    local searchTextLower = string.lower(searchText)
    local itemNameLower = string.lower(item.name or "")
    local match = string.find(itemNameLower, searchTextLower, 1, true)
    if not match and item.level then
      match = string.find(string.lower(item.level), searchTextLower, 1, true)
    end
      for _, propName in pairs(filtersWhiteList) do
        local propVal = item[propName:lower()] or item[propName]
        if type(propVal) == 'string' then
        if type(propVal) == 'string' then
          if string.find(string.lower(propVal), searchTextLower, 1, true) then
            match = true
  for _, filter in ipairs(validFilters) do
    local propVal = item[filter.propName:lower()]
    if propVal == nil then
@/lua/ge/extensions/flowgraph/nodes/input/blacklistAction.lua
  local pos2 = 0
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
@/lua/ge/extensions/editor/assetManagementTool.lua
  filename = filename:gsub("([a-z])([A-Z])", "%1_%2")
  filename = filename:lower()
  filename = filename:gsub("[^a-z0-9_./]+", "_")
@/lua/common/libs/lua-websockets/websocket/handshake.lua
    if name and val then
      name = name:lower()
      if not name:match('sec%-websocket') then
      if not name:match('sec%-websocket') then
        val = val:lower()
      end
@/lua/ge/extensions/freeroam/vueBigMap.lua
  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
      gameStateInfoCache.levelData = lvl
@/lua/ge/extensions/freeroam/bigMapPoiProvider.lua
  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
      data.levelData = lvl
@/lua/ge/extensions/tech/partAnnotations.lua
M.getPartAnnotation = function(part)
  part = string.lower(part)
  local matches = {}
local function annotatePart(vehicle, part)
  local color = M.getPartAnnotation(string.lower(part))
  if color then
@/lua/ge/extensions/core/input/bindings.lua
  if binding.deadzoneEnd   == nil then binding.deadzoneEnd = 0 end
  if binding.control       ~= nil then binding.control = string.lower(binding.control) end
  if binding.linearity     == nil then binding.linearity = 1 end
  end
  return basedir.."/" .. pidvid:lower() .. ".diff"
end
  end
  local prefixes = { pidvid:lower(), devicetype:lower() }
  end
  local prefixes = { pidvid:lower(), devicetype:lower() }
    for _,prefix in ipairs(prefixes) do
      for _,path in ipairs(FS:findFiles(dir, prefix:lower().."*."..suffix, recursion, true, false)) do
        if tech_license.isAllowedInputmapPath(path) then
          if not info.skipMigration and type(info.id) == "string" then
            table.insert(candidatePaths, dir.."/"..string.lower(info.id)..".diff")
          end
@/lua/ge/extensions/editor/dynamicDecals/docs.lua
  if a.order and b.order then return a.order < b.order end
  return string.lower(a.name) < string.lower(b.name)
end
  if a.order and b.order then return a.order < b.order end
  return string.lower(a.name) < string.lower(b.name)
end
  end
  table.sort(inputActionInfo, function(a,b) return string.lower(a.control) < string.lower(b.control) end)
end
  end
  table.sort(inputActionInfo, function(a,b) return string.lower(a.control) < string.lower(b.control) end)
end
@/lua/ge/extensions/util/compileImposters.lua
    local playerVehicle = getPlayerVehicle(0)
    while not string.find(string.lower(getMissionFilename()), escapePattern(string.lower(levelName))) and not playerVehicle do
      log('D', 'compileImposters', 'Level not loaded yet: ' .. getMissionFilename() .. ' : ' .. levelName)
    local playerVehicle = getPlayerVehicle(0)
    while not string.find(string.lower(getMissionFilename()), escapePattern(string.lower(levelName))) and not playerVehicle do
      log('D', 'compileImposters', 'Level not loaded yet: ' .. getMissionFilename() .. ' : ' .. levelName)
@/lua/common/extensions/tech/techCapture.lua
    local _, filename = path.split(file)
    local filenameLower = filename:lower()
    local interPattern1 = '^' .. baseFilename .. '%.[%d]+%.' .. extension .. '$'
    local interPattern1 = '^' .. baseFilename .. '%.[%d]+%.' .. extension .. '$'
    interPattern1 = interPattern1:lower()
    local interPattern2 = '^' .. baseFilename .. '%.GE%.' .. extension .. '$'
    local interPattern2 = '^' .. baseFilename .. '%.GE%.' .. extension .. '$'
    interPattern2 = interPattern2:lower()
    local compPattern = '^' .. baseFilename .. '%.' .. extension .. '$'
    local compPattern = '^' .. baseFilename .. '%.' .. extension .. '$'
    compPattern = compPattern:lower()
@/lua/ge/extensions/editor/roadEditor.lua
      local tag = material:getField("materialTag", tostring(tagId))
      if string.lower(tag) == string.lower(roadMaterialTagString) then
        table.insert(retSet, material)
      local tag = material:getField("materialTag", tostring(tagId))
      if string.lower(tag) == string.lower(roadMaterialTagString) then
        table.insert(retSet, material)
@/lua/ge/extensions/scenario/scenarios.lua
    local _, objNameOld, _ = path.splitWithoutExt(filename, ".prefab")
    local objName = string.lower(objNameNew or objNameOld)
    if not scenetree.findObject(objName) then
@/lua/ge/extensions/util/precompileShaders.lua
    for _, value in pairs(allLevels) do
        if levelsToLoad[string.lower(value.levelName)] == true then
            table.insert(levels, value)
@/lua/ge/extensions/ui/console.lua
    else --origin filter
      local s,r = pcall(function() return item[3]:lower():match(originFilter) end)
      if s then
local function runFilter(newEntry)
  invalidOriginFilter = not checkPattern(ffi.string(originFilterImC):lower())
  if invalidOriginFilter then return end
  if invalidOriginFilter then return end
  local origFilter = ffi.string(originFilterImC):lower()
  local r
local function onFileChanged(filename, type)
  if string.match(string.lower(filename), "/?"..string.lower(historyPath)) then
    -- log("E","onFileChanged","reload history")
local function onFileChanged(filename, type)
  if string.match(string.lower(filename), "/?"..string.lower(historyPath)) then
    -- log("E","onFileChanged","reload history")
@/lua/common/jsonPrettyEncoderCustom.lua
    local s = keys[i]
    table.insert(weighted_vector, {s = s, w = weights[tostring(s):lower()] or 50})  -- 50 = middle if no weight is defined
  end
@/lua/ge/extensions/editor/gen/world.lua
	for tbName, tbData in pairs(terrainBlockProxies) do
		if string.lower(tbName) == string.lower(terrBlockName) then
			-- TODO: a TerrainBlock with the same name has been found: can we overwrite it?
	for tbName, tbData in pairs(terrainBlockProxies) do
		if string.lower(tbName) == string.lower(terrBlockName) then
			-- TODO: a TerrainBlock with the same name has been found: can we overwrite it?
@/lua/ge/extensions/ui/liveryEditor/resources.lua
  table.sort(M.textures, function(a, b)
    return a.label:lower() < b.label:lower()
  end)
  table.sort(M.textures, function(a, b)
    return a.label:lower() < b.label:lower()
  end)
@/lua/ge/extensions/editor/flowgraph/missionVariableHelper.lua
  p = string.gsub(p, "^/+", "")
  return string.lower(p)
end
  if selectedMission.missionType then
    local missionTypeMainPath = "gameplay/missiontypes/" .. string.lower(selectedMission.missionType) .. "/" .. string.lower(selectedMission.missionType) .. ".flow.json"
    if normalizedMgrPath == missionTypeMainPath then
  if selectedMission.missionType then
    local missionTypeMainPath = "gameplay/missiontypes/" .. string.lower(selectedMission.missionType) .. "/" .. string.lower(selectedMission.missionType) .. ".flow.json"
    if normalizedMgrPath == missionTypeMainPath then
  if selectedMission.missionType then
    local missionTypePath = "gameplay/missiontypes/" .. string.lower(selectedMission.missionType) .. "/"
    if string.find(normalizedMgrPath, missionTypePath, 1, true) then
@/lua/ge/extensions/editor/assemblySpline/import.lua
      table.insert(groupComponents, comp)
    elseif fileName:lower():find("var") then -- Check if this is a variation of the base mesh.
      local baseFileName = baseMeshPath:match("^.+/(.+)$") or baseMeshPath:match("^(.+)$")
    -- Check if this is the root mesh (contains "root" in filename).
    if fileName:lower():find("root") then
      -- Prefer root meshes without "var" in the name
      -- Prefer root meshes without "var" in the name
      if not rootMeshPath or not fileName:lower():find("var") then
        rootMeshPath = meshPath
      table.insert(rootComponents, comp)
    elseif fileName:lower():find("var") then -- Check if this is a variation of the root mesh.
      local rootFileName = rootMeshPath:match("^.+/(.+)$") or rootMeshPath:match("^(.+)$")
@/lua/ge/extensions/tech/techCore.lua
    end
    scenarios[scenarioPath:lower()] = v
  end
  for _, v in pairs(files) do
    local filename = v.filename:lower()
    if filename:find('/scenarios/') and filename:find('.json') then
  log('I', logTag, 'Loading scenario: ' .. scenarioPath)
  local sc = scenarios[scenarioPath:lower()]
  if not sc then
    -- try to load it anyways, it may not be in one of the default folders
    sc = scenario_scenariosLoader.loadScenario(scenarioPath:lower())
    if not sc then

  local scenario = scenarios[sourceFile:lower()]
  if scenario == nil then

  scenarios[infoPath:lower()] = scenariosLoader.loadScenario(infoPath)
@/lua/ge/extensions/editor/dragRaceEditor/dragSettings.lua
    table.insert(possibleLevelNames, levelName)
    table.insert(possibleLevelNames, levelName:lower())
    local underscoreName = levelName:gsub(" ", "_")
    table.insert(possibleLevelNames, underscoreName)
    table.insert(possibleLevelNames, underscoreName:lower())
  end
@/lua/ge/extensions/gameplay/taxi.lua
  -- Check if "taxi" appears anywhere in the config name for now
  return string.find(string.lower(configName), "taxi") ~= nil
end
@/lua/ge/extensions/core/audio.lua
  end
  bankFilePath = string.lower(bankFilePath)
  loadedBankCache[bankFilePath] = true
  end
  bankFilePath = string.lower(bankFilePath)
  loadedBankCache[bankFilePath] = false
    end
    filepath = string.lower(filepath)
    if string.find(filepath, 'string') then
    end
    filepath = string.lower(filepath)
    if string.find(filepath, 'assets') or string.find(filepath, 'streams')  then
    end
    filepath = string.lower(filepath)
    if not string.find(filepath, 'assets') and not string.find(filepath, 'streams')  then
    end
    filepath = string.lower(filepath)
    if string.find(filepath, 'string') then
  end
  path = string.lower(path)
  if inited then
  end
  bankFilePath = string.lower(bankFilePath)
  local inLevelOrLoading = getMissionFilename() ~= "" or LoadingManager:isLoadingInProgress()
  end
  bankPath = string.lower(bankPath)
  if loadedBankCache[bankPath] then
    if filename and filename:match('.*%.bank$') then
      filename = string.lower(filename)
      loadedBankCache[filename] = false
@/lua/ge/extensions/editor/toolUtilities/meshAuditionMgr.lua
      im.Columns(1, "meshSelectListboxColumns")
      local filterStr = ffi.string(meshFilterBuf):lower()
      local wCtr = 6345
        local name = availStaticMeshes[i].filename
        if filterStr == "" or string.find(name:lower(), filterStr, 1, true) then
          local flag = i == selectedMeshIdx
@/lua/ge/extensions/editor/assemblySpline/molecule.lua
  for _, mesh in ipairs(assemblyKit) do
    if mesh.fileName:lower():find(variationFilenameStr) then
      local baseName = mesh.fileName:match("(.+)_var") .. ".dae" -- Find the base mesh by taking everything before '_var' and adding '.dae'.
  for _, mesh in ipairs(assemblyKit) do
    if not mesh.fileName:lower():find(variationFilenameStr) then
      baseMeshes[#baseMeshes + 1] = mesh
      randomWeight = 1.0, -- Weight for random distribution for this component group.
      isSag = mesh.fileName:lower():find(sagFilenameStr) ~= nil, -- Check if this mesh supports sag.
    }
    }
    if mesh.fileName:lower():find(bridgeFilenameStr) then
      bridges[#bridges + 1] = entry -- Add to bridges array (it contains the bridge identifier string in its filename).
  for i, m in ipairs(rigids) do
    if m.mesh.fileName:lower():find(rootFilenameStr) then
      rootIdx = i -- The user has defined the root mesh, so we take that as the root.
@/lua/ge/extensions/editor/gen/exp_frame.lua
        dnode = state.dnode
        cfix = string.lower(state.cfix)
        dmove['to_target'].ptarget = state.ptarget
            if not cmove then
                U.toFile({dnode=dnode,ptarget=dmove[smove].ptarget,body=body,cfix=string.lower(cfix)}
                    ,{'tmp','eframe'}, 'frame.json')
        if cmove then
            U.toFile({dnode=dnode,ptarget=dmove[cmove].ptarget,body=body,cfix=string.lower(cfix)}
                ,{'tmp','eframe'}, 'frame.json')
@/lua/ge/setSpawnpoint.lua
local function setDefaultSP(defaultSPName, levelName)
  levelName = levelName:lower() or core_levels.getLevelName(getMissionFilename()) -- select spawnpoint from level menu
  local data = jsonReadFile(M.settingsFilePath) or {}
@/lua/ge/extensions/editor/assetDeduplicator.lua
    for _,b in pairs(cases) do
      if string.lower(leftPath):find(b) then isTexture = true end
    end
    for _,b in pairs(cases) do
      if string.lower(rightPath):find(b) then isTexture = true end
    end
        if type(ext) == "string" and ext ~= "" then
          local e = ext:lower()
          if e:sub(1,1) ~= "." then e = "." .. e end
    local function isBlacklisted(path)
      local ext = path:lower():match("^.+(%.[^/%.]+)$")
      return ext and extBlacklist[ext] or false
      if mode == 1 then
        return (path:match("([^/]+)$") or path):lower()
      else
@/lua/ge/extensions/util/autoAnnotation.lua
local function fuzzyMatchTableKey(tab, key)
  key = string.lower(key)
  for pattern, annotation in pairs(tab) do
  for pattern, annotation in pairs(tab) do
    pattern = string.lower(pattern)
    if string.match(key, pattern) then
@/lua/vehicle/scriptai.lua
local function setLogDataToCSV(val)
  if val == true or (type(val) == 'string' and string.lower(val) ~= 'off') then
    if type(val) == 'string' and string.lower(val) ~= 'on' then
  if val == true or (type(val) == 'string' and string.lower(val) ~= 'off') then
    if type(val) == 'string' and string.lower(val) ~= 'on' then
      logDataToCSV = val
@/lua/ge/extensions/scenario/scenariosLoader.lua
      end
      pathScenarioName = string.lower(pathScenarioName)
      cacheTable[dir] = cacheTable[dir] or {}
      local prefabsToFind = {}
      prefabsToFind[string.lower(scenarioData.scenarioName)] = true
      for _, prefabPath in ipairs(scenarioData.prefabs) do
@/lua/ge/extensions/editor/trafficManager.lua
  for i, key in ipairs(vehiclesPropsSorted) do
    local label = string.lower(key:gsub("Sorted", ""))
    if im.CollapsingHeader1(label.."##trafficManagerHeader", im.TreeNodeFlags_DefaultOpen) then
      if modelData then
        prefix = string.lower(modelData.model.Type or "unknown")
      end
@/lua/ge/extensions/util/stepHandler.lua
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
        if string.find(v.fullfilename, '.mis') then
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
        if string.find(v.fullfilename, '.mis') then
@/lua/ge/extensions/core/vehicles.lua
    local dir, filename, ext = path.split(fn)
    if dir and filename and ext and string.lower(ext) == "pc" then
      local pcfn = filename:sub(1, #filename - 3)
    for _, filename in ipairs(jfiles) do
      if string.lower(filename:sub(-18)) == '.paintlibrary.json' then
        table.insert(filesPaints, filename)
        table.insert(filesPaints, filename)
      elseif string.lower(filename:sub(-5)) == '.json' then
        table.insert(filesJson, filename)
        table.insert(filesJson, filename)
      elseif string.lower(filename:sub(-3)) == '.pc' then
        table.insert(filesPC, filename)
        table.insert(filesPC, filename)
      elseif string.lower(filename:sub(-4)) == '.png' or string.lower(filename:sub(-4)) == '.jpg' then
        filesImages[filename] = true
        table.insert(filesPC, filename)
      elseif string.lower(filename:sub(-4)) == '.png' or string.lower(filename:sub(-4)) == '.jpg' then
        filesImages[filename] = true
    for _, filename in ipairs(jfiles) do
      if string.lower(filename:sub(-18)) == '.paintlibrary.json' then
        table.insert(filesPaints, filename)
        table.insert(filesAll, filename)
      elseif string.lower(filename:sub(-5)) == '.json' then
        table.insert(filesJson, filename)
        table.insert(filesAll, filename)
      elseif string.lower(filename:sub(-3)) == '.pc' then
        table.insert(filesPC, filename)
        table.insert(filesAll, filename)
      elseif string.lower(filename:sub(-4)) == '.png' or string.lower(filename:sub(-4)) == '.jpg' then
        filesImages[filename] = true
        table.insert(filesAll, filename)
      elseif string.lower(filename:sub(-4)) == '.png' or string.lower(filename:sub(-4)) == '.jpg' then
        filesImages[filename] = true
  if string.find(filename, '/vehicles/') == 1 or string.find(filename, '/mods/') == 1 then
    local fLower = string.lower(filename)
    if string.sub(fLower, -5) == '.json'
@/lua/ge/extensions/editor/flowgraph/references.lua
  local pos2 = 0
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
      im.SameLine()
      self:highlightText(tostring(n.nodeName), string.lower(ffi.string(self.searchText)))
      im.TableNextColumn()
@/lua/ge/extensions/core/multiSpawn.lua
    local configValue = config[k] or 'default' -- unsure about this actually
    if type(configValue) == 'string' then configValue = string.lower(configValue) end

      local country = model.Country and string.lower(model.Country) or 'default'
      if country ~= 'default' then

  if params.country then params.country = string.lower(params.country) end
  local vehData = getInstalledVehicleData(params)
@/lua/ge/extensions/editor/dynamicDecals/fonts.lua
  local files = FS:findFiles(destinationDirectory, '*' .. fontAtlasJsonExtension, 1, true, false)
  table.sort(files, function(a, b) return string.lower(a) < string.lower(b) end)
  generatedFontAtlases = {}
  local files = FS:findFiles(destinationDirectory, '*' .. fontAtlasJsonExtension, 1, true, false)
  table.sort(files, function(a, b) return string.lower(a) < string.lower(b) end)
  generatedFontAtlases = {}
@/lua/ge/extensions/ui/vehicleSelector/general.lua
  if searchText and searchText ~= "" then
    local searchTextLower = string.lower(searchText)
    local configNameLower = string.lower(configOrModel.Name or "")
    local searchTextLower = string.lower(searchText)
    local configNameLower = string.lower(configOrModel.Name or "")
    local modelNameLower = string.lower(model.Name or "")
    local configNameLower = string.lower(configOrModel.Name or "")
    local modelNameLower = string.lower(model.Name or "")
    local fileNameLower = string.lower(configOrModel.infoFilename or "")
    local modelNameLower = string.lower(model.Name or "")
    local fileNameLower = string.lower(configOrModel.infoFilename or "")
    local match = false
      if type(propVal) == 'string' then
        if string.find(string.lower(propVal), searchTextLower, 1, true) then
          match = true
@/lua/common/extensions.lua
        resolvedNameToModule[mname] = m
        resolvedNormalizedNameToModule[string.lower(mname)] = m
        resolvedNormalizedNameToModule.extensions = nil
        resolvedNameToModule[mname] = m
        resolvedNormalizedNameToModule[string.lower(mname)] = m
        resolvedNormalizedNameToModule.extensions = nil
  -- log('I', logTag, 'extensionLoadInternal: '.. tostring(extName).. ' from '..tostring(extPath))
  local m = luaMods[extName] or resolvedNormalizedNameToModule[string.lower(extName)]
  if m ~= nil then

  m = resolvedNormalizedNameToModule[string.lower(key)]
  if m then
@/lua/ge/extensions/editor/resourceChecker.lua
    for _,b in pairs(cases) do
      if string.lower(res):find(b) then isTexture = true goto safeCnt end
    end
    end
    if string.lower(res):find(".json") == nil and string.lower(res):find(".cs") == nil then
      if im.Selectable1("Preview##"..res..count) then
    end
    if string.lower(res):find(".json") == nil and string.lower(res):find(".cs") == nil then
      if im.Selectable1("Preview##"..res..count) then
          for _,b in pairs(cases) do
            if string.lower(res):find(b) then imageToPreview = res editor.showWindow(imageWindowName) end
          end
          for _,b in pairs(cases) do
            if string.lower(res):find(b) then editor_shapeEditor.showShapeEditorLoadFile(res) end
          end
          if (foundi == false or foundd == false or foundao == false) and searchFilter == true then
            if not string.match(string.lower(k), string.lower(ffi.string(searchTxt))) then
              goto skipk
          if (foundi == false or foundd == false or foundao == false) and searchFilter == true then
            if not string.match(string.lower(k), string.lower(ffi.string(searchTxt))) then
              goto skipk
                if (foundd == false or foundao == false) and searchFilter == true then
                  if not string.match(string.lower(i), string.lower(ffi.string(searchTxt))) then
                    foundi = true
                if (foundd == false or foundao == false) and searchFilter == true then
                  if not string.match(string.lower(i), string.lower(ffi.string(searchTxt))) then
                    foundi = true
                      if foundao == false and searchFilter == true then
                        if not string.match(string.lower(d), string.lower(ffi.string(searchTxt))) then
                          foundd = true
                      if foundao == false and searchFilter == true then
                        if not string.match(string.lower(d), string.lower(ffi.string(searchTxt))) then
                          foundd = true
                            if searchFilter == true then
                              if not string.match(string.lower(o), string.lower(ffi.string(searchTxt))) then
                                foundao = true
                            if searchFilter == true then
                              if not string.match(string.lower(o), string.lower(ffi.string(searchTxt))) then
                                foundao = true
    for k,v in pairs(data) do
      if searchFilter == true and not string.match(string.lower(v), string.lower(ffi.string(searchTxt))) then
        skipK[k] = true
    for k,v in pairs(data) do
      if searchFilter == true and not string.match(string.lower(v), string.lower(ffi.string(searchTxt))) then
        skipK[k] = true
  local e = path and path:match("%.([^.]+)$")
  return e and e:lower() or ""
end
@/lua/common/utils/wsUtils.lua
  for _, addr in ipairs(addresses) do
    local desc = addr.description:lower()
    if desc:find('virtualbox') or desc:find('vmware') then
@/lua/ge/extensions/gameplay/rally/notebook/pacenote.lua
  -- Lowercase the condition for case-insensitive comparison
  local lowerCondition = condition:lower()
@/lua/ge/extensions/editor/api/dynamicDecals/textures.lua
  local _, fileNameB, _ = path.split(b)
  return string.lower(fileNameA) < string.lower(fileNameB)
end
  local _, fileNameB, _ = path.split(b)
  return string.lower(fileNameA) < string.lower(fileNameB)
end
@/lua/ge/extensions/util/docCreator.lua
          local dir, filename, ext = path.split(v)
          ext = ext:lower()
          local newFilename = FS:hashFileSHA1(v) .. '.' .. ext
    if out.vidpid then
      out.vidpid = string.lower(out.vidpid)
    end
    -- try to use PIDVID from file name
    out.filename = string.lower(select(2, path.splitWithoutExt(inputmapPath)))
    out.identifier = string.match(out.filename, "^[^_]+") -- remove '_whatever' suffixes, used for additional secondary inputmaps
      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 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)
@/lua/common/jit/p.lua
  prof_samples = 0
  profile.start(scope:lower()..interval, prof_cb)
  prof_ud = newproxy(true)
@/lua/ge/extensions/editor/visualization.lua
    for token in string.gmatch(filterQuery, "[%w_]+") do  -- split
      table.insert(filterTokens, string.lower(token))     -- lower case
    end
        --  lower case matching
        if debug and (string.match(string.lower(type.name), token)
            or string.match(string.lower(type.displayName), token)) then
        if debug and (string.match(string.lower(type.name), token)
            or string.match(string.lower(type.displayName), token)) then
          return true
          return true
        elseif not debug and string.match(string.lower(type), token) then
          return true
@/lua/ge/extensions/gameplay/traffic/vehicle.lua
  local modelData = core_vehicles.getModel(obj.jbeam).model
  local modelType = modelData and string.lower(modelData.Type) or 'none'
  if obj.jbeam == 'unicycle' and obj:isPlayerControlled() then modelType = 'player' end

  local configTypeLower = string.lower(configType or '')
  local pc = string.lower(obj.partConfig)
  local configTypeLower = string.lower(configType or '')
  local pc = string.lower(obj.partConfig)
  if configTypeLower == 'police' then
@/lua/ge/extensions/editor/api/genericInspector.lua
    for _, field in ipairs(fields) do
      if string.lower(field.name) == string.lower(fieldName) then
        return field.type
    for _, field in ipairs(fields) do
      if string.lower(field.name) == string.lower(fieldName) then
        return field.type
@/lua/ge/extensions/editor/sidewalkSpline/kit.lua
    local mesh = meshKit[i]
    if mesh.fileName:lower():find(variationFilenameStr) then
      local baseName = mesh.fileName:match("(.+)_var") .. ".dae" -- Find the base mesh by taking everything before '_var' and adding '.dae'.
    local mesh = meshKit[i]
    if not mesh.fileName:lower():find(variationFilenameStr) then
      baseMeshes[#baseMeshes + 1] = mesh
@/lua/ge/extensions/util/precompileVehicles.lua
    for model, _ in pairs(allModels) do
        if vehiclesToLoad[string.lower(model)] == true then
            table.insert(vehicles, model)
@/lua/ge/extensions/core/camera.lua
  for k,v in ipairs(camConfigs) do
    if v.name ~= "onboard.driver" and string.lower(v.name) == "onboard.driver" then
      log("W", "", "Possibly incorrect camera name '"..v.name.."' (rename to 'onboard.driver'?)")
@/lua/ge/extensions/tech/impactgen/crashOutput.lua
  for k, v in pairs(d) do
    if string.find(string.lower(k), string.lower(n)) ~= nil then
      return v
  for k, v in pairs(d) do
    if string.find(string.lower(k), string.lower(n)) ~= nil then
      return v
@/lua/ge/extensions/editor/fileDialog.lua
    for _, p in ipairs(pattern) do
      local file_name = options.case_sensitive_match and file.name or string.lower(file.name)
      local match_pattern = options.case_sensitive_match and p or string.lower(p)
      local file_name = options.case_sensitive_match and file.name or string.lower(file.name)
      local match_pattern = options.case_sensitive_match and p or string.lower(p)
      if file_name:match(".*(" .. match_pattern .. ")$") ~= nil then return true end
    end
    return string.lower(a.name) > string.lower(b.name)
  end)
    end
    return string.lower(a.name) > string.lower(b.name)
  end)
      _, s.nameWithoutExt, s.extension = path.splitWithoutExt(fn)
      s.extension = string.lower(s.extension)
    end
    end
    return string.lower(a.name) < string.lower(b.name)
  end)
    end
    return string.lower(a.name) < string.lower(b.name)
  end)
@/lua/ge/extensions/util/export.lua
local function _findOrCreateTexture(gltfRoot, filepath)
  filepath = filepath:lower()
  if savedImages[filepath] then
      end
      if mat:getClassName():lower() ~= "material" then
        log("E", logTag, dumps(matNames[v.extras.bngMaterialId+1]) .. " is not a Material. type="..dumps(mat:getClassName()))
@/lua/ge/extensions/gameplay/missions/proceduralMissionGenerators/timeTrialMissions.lua
local function getCachedRacefile(level, race)
  local id = string.lower(level.levelName)..'-'..race.trackName.."-procedural"
  local cacheFile = cachePath.. id .. '.json'
        local raceFile = race.raceFile
        local raceId = string.lower(level.levelName)..'-'..race.trackName.."-procedural"
        if not raceFile and not race.isTrackEditorTrack and not race.lapConfigBranches then
            local mission = getBaseMission()
            mission.id = "timeTrials/"..string.lower(level.levelName)..'/'..race.trackName.."-procedural"
            mission.name = race.name
            end
            mission.missionFolder = string.lower(level.levelName)..'-'..race.trackName
            mission.careerSetup = {

            mission.startTrigger.level = string.lower(level.levelName)
            for _, sp in ipairs(race.startPositions) do
@/lua/common/libs/ezSVG/EzSVG.lua
  if tag then
    EzSVG.styles[string.lower(tag)][key] = value
  else
@/lua/ge/extensions/editor/dynamicDecals/helper.lua
  end):gsub("(%w)(%w*)", function(first, rest)
    return first:upper() .. rest:lower()
  end)
  return str:gsub("(%w)(%w*)", function(first, rest)
    return first:upper() .. rest:lower()
  end)
@/lua/ge/extensions/editor/biomeTool.lua
    local compareFunc = function(a,b)
      return string.lower(a.internalName) < string.lower(b.internalName)
    end
    local compareFunc = function(a,b)
      return string.lower(a.internalName) < string.lower(b.internalName)
    end
@/lua/ge/extensions/tech/pythonExport.lua
  local lineStart = #buffer
  buffer:put(sensorName:gsub('[%[%] ]+', '_'):rstripchars('_'):lower())
  buffer:put(" = ")
@/lua/ge/extensions/gameplay/traffic/trafficUtils.lua
      if type(country) == 'table' and country[1] then
        country = string.lower(country[#country])
      else
      local _, fn = path.splitWithoutExt(v)
      if string.find(fn, string.lower(options.name)) then
        table.insert(filteredFiles, v)
@/lua/ge/extensions/editor/forestEditor.lua
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName or "unnamed") < string.lower(bObj.internalName or "unnamed")
end
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName or "unnamed") < string.lower(bObj.internalName or "unnamed")
end
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName) < string.lower(bObj.internalName)
end
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName) < string.lower(bObj.internalName)
end

  table.sort(var.forestBrushes, function(a,b) return string.lower(a.internalName) < string.lower(b.internalName) end)
  table.sort(var.forestItemData, forestItemSortByNameFunc)

  table.sort(var.forestBrushes, function(a,b) return string.lower(a.internalName) < string.lower(b.internalName) end)
  table.sort(var.forestItemData, forestItemSortByNameFunc)
    end
    local fieldNameLower = string.lower(fieldName)
    if object and object:getClassName() == "ForestItemData" and fieldNameLower == "shapefile" then
@/lua/ge/extensions/editor/terrainEditor.lua
  for tbName, tbData in pairs(terrainBlockProxies) do
    if string.lower(tbName) == string.lower(terrBlockName) then
      if debug == true then log('I', '', "Found TerrainBlock with the given name '".. terrBlockName .."'") end
  for tbName, tbData in pairs(terrainBlockProxies) do
    if string.lower(tbName) == string.lower(terrBlockName) then
      if debug == true then log('I', '', "Found TerrainBlock with the given name '".. terrBlockName .."'") end
@/lua/vehicle/controller/esc.lua
              title = "ui.radialmenu2.ESC." .. v.name:gsub(" ", "_"),
              icon = "radial_" .. string.lower(v.name:gsub(" ", "_")),
              originalActionInfo = {level = "/root/playerVehicle/vehicleFeatures/", uniqueID = "escMode"},
@/lua/ge/extensions/editor/sitesEditor/sortedListDisplay.lua
  im.Separator()
  local filter = string.lower(ffi.string(self.search))
  if filter == '' then
  for i, obj in ipairs(self.sorted) do
    if not obj.isProcedural and ((filter == nil) or (filter and string.find(string.lower(obj.name), filter) or self.currentElement == obj)) then
      if tableContains(self.selections, obj.id) then
@/lua/ge/extensions/gameplay/garageMode.lua
    for _, level in ipairs(core_levels.getList()) do
      if string.lower(level.levelName) == string.lower(getCurrentLevelIdentifier()) then
        levelInfo = level
    for _, level in ipairs(core_levels.getList()) do
      if string.lower(level.levelName) == string.lower(getCurrentLevelIdentifier()) then
        levelInfo = level
@/lua/ge/extensions/ui/appSelector/general.lua
  if searchText and searchText ~= "" then
    local q = string.lower(searchText)
    local match = false
    if not match and item.name then
      match = string.find(string.lower(translateHelper.translate(item.name)), q, 1, true)
    end
    if not match and item.appName then
      match = string.find(string.lower(translateHelper.translate(item.appName)), q, 1, true)
    end
    if not match and item.description then
      match = string.find(string.lower(translateHelper.translate(item.description)), q, 1, true)
    end
    -- Then sort by name
    local an = string.lower(a.name or a.appName or "")
    local bn = string.lower(b.name or b.appName or "")
    local an = string.lower(a.name or a.appName or "")
    local bn = string.lower(b.name or b.appName or "")
    return an < bn
@/lua/ge/extensions/editor/assetBrowser.lua

local sortLexicographically = function(a,b) return string.lower(a) < string.lower(b) end

local sortLexicographically = function(a,b) return string.lower(a) < string.lower(b) end
local sortDirectoryAssetByFilename = function(dir)
  table.sort(dir.files, function(a,b) return string.lower(a.fileName) < string.lower(b.fileName) end)
end
local sortDirectoryAssetByFilename = function(dir)
  table.sort(dir.files, function(a,b) return string.lower(a.fileName) < string.lower(b.fileName) end)
end

local sortAssetsByFilename = function(a,b) return string.lower(a.fileName) < string.lower(b.fileName) end

local sortAssetsByFilename = function(a,b) return string.lower(a.fileName) < string.lower(b.fileName) end
    sortFunc = function(a,b)
      return string.lower(a.fileName) < string.lower(b.fileName)
    end
    sortFunc = function(a,b)
      return string.lower(a.fileName) < string.lower(b.fileName)
    end
    sortFunc = function(a,b)
      local aType = string.lower(a.simpleFileType)
      local bType = string.lower(b.simpleFileType)
      local aType = string.lower(a.simpleFileType)
      local bType = string.lower(b.simpleFileType)
      if aType == bType then
      if aType == bType then
        return string.lower(a.fileName) < string.lower(b.fileName)
      else
      if aType == bType then
        return string.lower(a.fileName) < string.lower(b.fileName)
      else
    sortFunc = function(a,b)
      local aType = string.lower(a.type)
      local bType = string.lower(b.type)
      local aType = string.lower(a.type)
      local bType = string.lower(b.type)
      if aType == bType then
      if aType == bType then
        return string.lower(a.fileName) < string.lower(b.fileName)
      else
      if aType == bType then
        return string.lower(a.fileName) < string.lower(b.fileName)
      else
  end
  table.sort(var.filteredDirs, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
end
  end
  table.sort(var.filteredDirs, function(a,b) return string.lower(a.name) < string.lower(b.name) end)
end
  end
  table.sort(var.filteredAssetGroupsSorted, function(a,b) return string.lower(a.identifier) < string.lower(b.identifier) end)
  end
  table.sort(var.filteredAssetGroupsSorted, function(a,b) return string.lower(a.identifier) < string.lower(b.identifier) end)
        local fileType = string.match(path, "[.].+") or ""
        local simpleFileType = string.lower(string.match(path, "[^.]*$"))
        local fileName = string.match(path, "[^/]*$")
        -- Remove the `.` from the filetype
        fileType = #fileType > 0 and string.lower(string.sub(fileType, 2)) or fileType
              local fileType = string.match(path, "[.].+") or ""
              local simpleFileType = string.lower(string.match(path, "[^.]*$"))
              local fileName = string.match(path, "[^/]*$")
              -- Remove the `.` from the filetype
              fileType = #fileType > 0 and string.lower(string.sub(fileType, 2)) or fileType
    for _,dir in ipairs(selDir.dirs) do
      if string.lower(name) == string.lower(dir.name) then
        return dir
    for _,dir in ipairs(selDir.dirs) do
      if string.lower(name) == string.lower(dir.name) then
        return dir
  local rootPath = string.gsub(root.path, "//", "/")
  local filepath = string.match(string.lower(path), string.lower(rootPath) .."(.+)")
  local filename = string.match(filepath, "[^/]*$")
  local rootPath = string.gsub(root.path, "//", "/")
  local filepath = string.match(string.lower(path), string.lower(rootPath) .."(.+)")
  local filename = string.match(filepath, "[^/]*$")
  if dir then
    local filenameLowercase = string.lower(filename)
    for k, file in ipairs(dir.files) do
    for k, file in ipairs(dir.files) do
      if filenameLowercase == string.lower(file.fullFileName) then
        -- modify file
    -- Create a new file.
    local simpleFileType = string.lower(string.match(filename, "[^.]*$"))
    local fileNameNoExt = string.sub(filename, 1, #filename - (#filetype+1))
    for k, file in ipairs(dir.files) do
      if string.lower(filename) == string.lower(file.fullFileName) then
        table.remove(dir.files, k)
    for k, file in ipairs(dir.files) do
      if string.lower(filename) == string.lower(file.fullFileName) then
        table.remove(dir.files, k)

      if levelName and string.lower(levelName) == string.lower(var.levelName) then
        levelFilepath = string.sub(levelFilepath, 1, #levelFilepath - #filename)

      if levelName and string.lower(levelName) == string.lower(var.levelName) then
        levelFilepath = string.sub(levelFilepath, 1, #levelFilepath - #filename)
          -- clear editor selection if the deleted file was selected before
          if editor.selection["asset"] and editor.selection["asset"].dir == dir and string.lower(editor.selection["asset"].fullFileName) == filename then
            editor.selection["asset"].selectedInABView = false
@/lua/common/jbeam/expressionParser.lua
  -- TODO: URL, URI, etc
  local _, _, ext = path.split(resourceURI:lower(), true)
  if ext == 'csv' then
@/lua/ge/extensions/editor/api/gui.lua
    local pos2 = 0
    local textLower = text:lower()
    local highlightLower = highlightText:lower()
    local textLower = text:lower()
    local highlightLower = highlightText:lower()
    local highlightLowerLen = string.len(highlightLower) - 1
@/lua/ge/extensions/editor/flowgraph/nodelibrary.lua
function C:getFilterType()
  local match = string.lower(ffi.string(self.searchText))
  for _, t in ipairs(tableKeys(typeOrder)) do
  local pos2 = 0
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1

C._sortFunc = function(a,b) return string.lower(a.name) < string.lower(b.name) end

C._sortFunc = function(a,b) return string.lower(a.name) < string.lower(b.name) end
  -- similar name?
  if string.find(a.name:lower(), b.name:lower()) or string.find(b.name:lower(), a.name:lower()) then
    a.__matchScore = a.__matchScore + 100
  -- similar name?
  if string.find(a.name:lower(), b.name:lower()) or string.find(b.name:lower(), a.name:lower()) then
    a.__matchScore = a.__matchScore + 100
  -- similar name?
  if string.find(a.name:lower(), b.name:lower()) or string.find(b.name:lower(), a.name:lower()) then
    a.__matchScore = a.__matchScore + 100
  -- similar name?
  if string.find(a.name:lower(), b.name:lower()) or string.find(b.name:lower(), a.name:lower()) then
    a.__matchScore = a.__matchScore + 100
@/lua/common/utils/languageMap.lua

  local kclean = string.lower(key):gsub('-', '_') -- replace - with _
@/gameplay/missionTypes/aiRace/customNodes/autoStartPositionsNode.lua
    for _, sp in ipairs(self.pinIn.pathData.value.startPositions.sorted) do
      if string.find(string.lower(sp.name), 'start') then -- needs to contain the word "start"
        local index = string.match(sp.name, '%d+') -- gets the number from the name
@/lua/common/extensions/ui/flowgraph/editor.lua
local function getAutoTypeFromName(name)
  local n = string.lower(name)
  if string.endswith(n, "pos") or
@/lua/ge/extensions/util/inputSystemUtils.lua
      end
      info.vendorName = info.vendorName or vendorNames[vendorId:lower()]
@/lua/ge/extensions/editor/inspector.lua
    if fieldType == "Point3F" or fieldType == "vec3" or fieldType == "MatrixPosition" then
      if string.lower(fieldName) == "scale" then
        fieldVal = "1 1 1"
    for _, headerMenu in ipairs(headerMenus) do
      if string.lower(headerMenu.groupName) == string.lower(groupName) then
        if imgui.Button("...") then
    for _, headerMenu in ipairs(headerMenus) do
      if string.lower(headerMenu.groupName) == string.lower(groupName) then
        if imgui.Button("...") then
    for _, field in ipairs(fields) do
      if string.lower(field.name) == string.lower(fieldName) then
        return field.type
    for _, field in ipairs(fields) do
      if string.lower(field.name) == string.lower(fieldName) then
        return field.type
    for _, headerMenu in ipairs(headerMenus) do
      if string.lower(headerMenu.groupName) == string.lower(groupName) then
        menuFound = true
    for _, headerMenu in ipairs(headerMenus) do
      if string.lower(headerMenu.groupName) == string.lower(groupName) then
        menuFound = true
    for _, val in ipairs(headerMenus) do
      if string.lower(val.groupName) == string.lower(groupName) then
        groupHeaderMenuFound = true
    for _, val in ipairs(headerMenus) do
      if string.lower(val.groupName) == string.lower(groupName) then
        groupHeaderMenuFound = true
@/lua/ge/extensions/core/quickAccess.lua
  niceName = niceName:gsub("(%a)(%w*)", function(first, rest)
    return first:upper() .. rest:lower()
  end)
@/lua/common/utils.lua
function tableContainsCaseInsensitive(table, element)
  element = string.lower(element)
  for _, value in pairs(table) do
  for _, value in pairs(table) do
    if string.lower(value) == element then
      return true
    if raw then string.gsub(dir, "/levels/(.*)/", "%1") end
    return string.lower(string.gsub(dir, "/levels/(.*)/", "%1"))
  end
  for _, lvlPath in ipairs(FS:findFiles('/levels/', '*', 0, false, true)) do
    table.insert(ret, string.lower(lvlPath:sub(9)))
  end
@/lua/ge/extensions/editor/forestView.lua
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName or "unnamed_"..a.id) < string.lower(bObj.internalName or "unnamed_"..b.id)
end
  local bObj = scenetree.findObjectById(b.id)
  return string.lower(aObj.internalName or "unnamed_"..a.id) < string.lower(bObj.internalName or "unnamed_"..b.id)
end
@/lua/ge/extensions/gameplay/missions/proceduralMissionGenerators/busModeMissions.lua
        local mission = getBaseMission()
        local id = string.lower(level.levelName)..'-'..scenario.busdriver.routeID.."-"..scenario.busdriver.variance.."-procedural"
        local routeId = scenario.busdriver.routeID .. scenario.busdriver.variance
        mission.description = {txt = "missions.missions.busMode.description", context = {busStops = #route.tasklist}}
        mission.missionFolder = string.lower(level.levelName)..'-'..scenario.name
        mission.previewFile = type(scenario.previews) == 'table' and scenario.previews[1] or scenario.previews or scenario.preview
        -- in the future, bus mode should be startable from any bus stop.
        mission.startTrigger.level = string.lower(level.levelName)
        mission.startTrigger.pos = vec3(route.spawnLocation.pos.x, route.spawnLocation.pos.y, route.spawnLocation.pos.z)
@/lua/common/extensions/ui/improfiler.lua
  prof_samples = 0
  profile.start(scope:lower()..interval, prof_cb)
  prof_ud = newproxy(true)
@/lua/ge/extensions/core/repository.lua
    --delete mods outside repo folder
    local modname = filename:gsub(".zip",""):lower()
    local prevInfo = core_modmanager.getModDB(modname)
@/lua/vehicle/powertrain/supercharger.lua
  local efficiencyCurve
  local sctype = string.lower(jbeamData.type)
@/lua/common/libs/luasec/options.lua
  for k, option in ipairs(options) do
    local name = string.lower(string.sub(option, 8))
    print(string.format([[#if defined(%s)]], option))
@/lua/common/utils/httpJsonServer.lua
            if #args == 2 then
                local key = string.lower(trim(args[1]))
                local value = trim(args[2])
@/lua/ge/extensions/core/online.lua
  end
  reqType = string.lower(reqType)
@/lua/ge/extensions/editor/flowgraph/search.lua
  local pos2 = 0
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local labelLower = label:lower()
  local highlightLower = highlightText:lower()
  local highlightLowerLen = string.len(highlightLower) - 1
function C:getFilterType()
  local match = string.lower(ffi.string(self.searchText))
  for _, t in ipairs(tableKeys(typeOrder)) do
  for _, result in ipairs(self.searchResultsByMgr[self.mgr.id] or {}) do
    if self.filterByType and string.lower(result.type) == string.lower(self.filterByType) or not self.filterByType then
      local prePos = im.GetCursorPos()
  for _, result in ipairs(self.searchResultsByMgr[self.mgr.id] or {}) do
    if self.filterByType and string.lower(result.type) == string.lower(self.filterByType) or not self.filterByType then
      local prePos = im.GetCursorPos()
@/lua/ge/extensions/editor/flowgraph/examples.lua
    table.clear(self.results)
    self.matchString = string.lower(ffi.string(self.searchText))
    self.search:setFrecencyData(self.mgr.frecency or {})
    local pos2 = 0
    local labelLower = label:lower()
    local highlightLower = highlightText:lower()
    local labelLower = label:lower()
    local highlightLower = highlightText:lower()
    local highlightLowerLen = string.len(highlightLower) - 1
  for _, result in ipairs(self.results or {}) do
    if self.filterByType and string.lower(result.type) == string.lower(self.filterByType) or not self.filterByType then
      local prePos = im.GetCursorPos()
  for _, result in ipairs(self.results or {}) do
    if self.filterByType and string.lower(result.type) == string.lower(self.filterByType) or not self.filterByType then
      local prePos = im.GetCursorPos()
@/lua/ge/extensions/core/hardwareinfo.lua

  local lowercaseGpuName = res.gpu.name:lower()
  if lowercaseGpuName:find('intel') and not lowercaseGpuName:find('arc%(tm%)') and not lowercaseGpuName:find('bmg') then
@/lua/ge/extensions/career/modules/uiUtils.lua
  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
      return lvl
@/lua/common/utils/simpleHttpServer.lua
      if #args == 2 then
        local key = string.lower(trim(args[1]))
        local value = trim(args[2])
  if not ext then return end
  ext = string.lower(ext)
  return ext
@/lua/ge/extensions/ui/freeroamSelector/general.lua
      for _, propName in pairs(filtersWhiteList) do
        local propVal = item[propName:lower()]
        if propVal == nil then
  if searchText and searchText ~= "" then
    local searchTextLower = string.lower(searchText)
    local itemNameLower = string.lower(item.name or "")
    local searchTextLower = string.lower(searchText)
    local itemNameLower = string.lower(item.name or "")
    local match = string.find(itemNameLower, searchTextLower, 1, true)
    if not match and item.level then
      match = string.find(string.lower(item.level), searchTextLower, 1, true)
    end
      for _, propName in pairs(filtersWhiteList) do
        local propVal = item[propName:lower()] or item[propName]
        if type(propVal) == 'string' then
        if type(propVal) == 'string' then
          if string.find(string.lower(propVal), searchTextLower, 1, true) then
            match = true
  for _, filter in ipairs(validFilters) do
    local propVal = item[filter.propName:lower()]
    if propVal == nil then
@/lua/ge/extensions/editor/assemblySpline.lua
                local mesh = rigid.mesh
                local isRoot = mesh.fileName and mesh.fileName:lower():find("root")
                -- Check if this is the root mesh.
                isRoot = mesh.fileName and mesh.fileName:lower():find("root")
                local isEnabled = mol.getRigidEnabled(selSpline, mesh.id)
                im.TextColored(cols.greenB, baseMesh.fileName:gsub("%.dae$", ""))
                local isRoot = baseMesh.fileName and baseMesh.fileName:lower():find("root")
                if isRoot then
@/lua/ge/extensions/core/levels.lua
  local level_dirs = FS:findFiles('/levels/', '*', 0, false, true)
  table.sort(level_dirs, function(a,b) return string.lower(a) < string.lower(b) end )
  local level_dirs = FS:findFiles('/levels/', '*', 0, false, true)
  table.sort(level_dirs, function(a,b) return string.lower(a) < string.lower(b) end )
  -- sort by name, case insensitive
  table.sort(levels, function(a, b) return string.lower(a.levelName) < string.lower(b.levelName) end )
  -- sort by name, case insensitive
  table.sort(levels, function(a, b) return string.lower(a.levelName) < string.lower(b.levelName) end )
local function getLevelByName(levelName)
  levelName = string.lower(levelName)
  for _, l in ipairs(getList()) do
  for _, l in ipairs(getList()) do
    if string.lower(l.levelName) == levelName then
      return l

  local lowerLevelName = string.lower(levelName)

  local lowerLevelName = string.lower(levelName)

  local lowerLevelName = string.lower(levelName)
@/lua/common/libs/lua-websockets/websocket/tools.lua
  if not protocol then error('Invalid URL:'..url) end
  protocol = protocol:lower()
  local host, port = address:match("^(.+):(%d+)$")
@/lua/vehicle/extensions/profiling/p.lua
  prof_samples = 0
  profile.start(scope:lower()..interval, prof_cb)
  prof_ud = newproxy(true)
@/lua/ge/extensions/util/richPresence.lua
  local currentLevel = getCurrentLevelIdentifier() or ''
  M.state.levelIdentifier = string.lower(currentLevel)
  if currentLevel ~= "" then
@/lua/ge/extensions/gameplay/traffic.lua
    if k == 'aiMode' or k == 'aiDebug' or k == 'aiAware' then
      data[k] = type(v) == 'string' and string.lower(v) or v
    end
  mode = mode or 'traffic'
  setTrafficVars({aiMode = string.lower(mode)})
end