You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.0 KiB
Lua
48 lines
1.0 KiB
Lua
local strsub = string.sub
|
|
local t_insert = table.insert
|
|
local t_concat = table.concat
|
|
|
|
local function get_from_string ( s , i )
|
|
i = i or 1
|
|
return function ( n )
|
|
if not n then -- Rest of string
|
|
n = #s - i + 1
|
|
end
|
|
i = i + n
|
|
assert ( i-1 <= #s , "Unable to read enough characters" )
|
|
return strsub ( s , i-n , i-1 )
|
|
end , function ( new_i )
|
|
if new_i then i = new_i end
|
|
return i
|
|
end
|
|
end
|
|
|
|
local function string_to_array_of_chars ( s )
|
|
local t = { }
|
|
for i = 1 , #s do
|
|
t [ i ] = strsub ( s , i , i )
|
|
end
|
|
return t
|
|
end
|
|
|
|
local function read_terminated_string ( get , terminators )
|
|
local terminators = string_to_array_of_chars ( terminators or "\0" )
|
|
local str = { }
|
|
local found = 0
|
|
while found < #terminators do
|
|
local c = get ( 1 )
|
|
if c == terminators [ found + 1 ] then
|
|
found = found + 1
|
|
else
|
|
found = 0
|
|
end
|
|
t_insert ( str , c )
|
|
end
|
|
return t_concat ( str , "" , 1 , #str - #terminators )
|
|
end
|
|
|
|
return {
|
|
get_from_string = get_from_string ;
|
|
read_terminated_string = read_terminated_string ;
|
|
}
|