Ryujinx-SDL/premake/util/sdl_string.lua
Pierre-Loup A. Griffais 24c86b5501 [X11] Reconcile logical keyboard state with physical state on FocusIn
since the window system doesn't do it for us like other platforms.

This prevents sticky keys and missed keys when going in and out
of focus, for example Alt would appear to stick if switching away
from an SDL app with Alt-Tab and had to be pressed again.

CR: Sam
2014-09-11 19:24:42 -07:00

104 lines
3.2 KiB
Lua
Executable File

-- Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
--
-- This software is provided 'as-is', without any express or implied
-- warranty. In no event will the authors be held liable for any damages
-- arising from the use of this software.
--
-- Permission is granted to anyone to use this software for any purpose,
-- including commercial applications, and to alter it and redistribute it
-- freely.
--
-- Meta-build system using premake created and maintained by
-- Benjamin Henning <b.henning@digipen.edu>
--[[
sdl_string.lua
Contains a few convenient string utility functions which are not supported in
Lua or not supported as intended.
]]
-- Performs a non-pattern based substring search of one string in another
-- string. It's of O(n^2) complexity. It returns nil if the result cannot be
-- found, otherwise it returns the starting index of the first found occurrence.
string.indexOf = function(str, substr)
local pos = 1
local i = 1
for i = 1, str:len(), 1 do
if str:sub(i, i) == substr:sub(pos, pos) then
-- have we matched the complete string?
if pos == substr:len() then
return i - pos + 1-- starting pos
end
-- matched character...keep going
pos = pos + 1
else
-- restart, no match
pos = 0
end
end
if pos == substr:len() then
return i - pos + 1
end
return nil -- no match
end
-- This is a public-access version of the explode function defined below.
function explode(str, delim)
return str:explode(delim)
end
-- Explodes a string into an array of elements, separated by a non-pattern
-- delimiter. This function is part of the string table, allowing for a
-- member-based invocation for strings.
string.explode = function(str, delim)
local exploded = { }
local needle = string.find(str, delim)
while needle ~= nil do
table.insert(exploded, string.sub(str, 0, needle - 1))
str = string.sub(str, needle + 1)
needle = string.find(str, delim)
end
table.insert(exploded, str)
return exploded
end
-- Similar to table.concat, except it supports more advanced token pasting. This
-- function is vastly used by the main meta-build script (premake4.lua) to
-- generate all the main lines of code for various tables that need to be in the
-- generated lua file.
-- - tbl: table of values to implode into a string
-- - prefix: string to paste before entire result
-- - pre: string to always paste before each entry in table
-- - post: string to always paste after each entry in table
-- - join: string to paste between entries (inclusive)
-- - suffix: string to paste after entire result
-- Returns the imploded string.
function implode(tbl, prefix, pre, post, join, suffix)
local result = ""
-- not the most efficient way to do this, but...
local itbl = { }
for k,v in pairs(tbl) do
itbl[#itbl + 1] = v
end
for i = 1, #itbl, 1 do
if pre ~= nil then
result = result .. pre
end
result = result .. itbl[i]
if post ~= nil then
result = result .. post
end
if i ~= #itbl then
result = result .. join
end
end
if prefix ~= nil then
result = prefix .. result
end
if suffix ~= nil then
result = result .. suffix
end
return result
end