Jump to content

Module:string/linesub

Wiktionary වෙතින්


local index_module = "Module:index"
local string_linelen_module = "Module:string/linelen"

local find = string.find
local require = require
local sub = string.sub

local function index_range(...)
	index_range = require(index_module).range
	return index_range(...)
end

local function linelen(...)
	linelen = require(string_linelen_module)
	return linelen(...)
end

return function(str, i, j)
	i, j = index_range(str, i, j, linelen)
	if j and j < i then
		return ""
	end
	local first, pos1, pos2, newline, pattern, plain = 1
	if not find(str, "\r", nil, true) then
		pattern, plain = "\n", true
	elseif not find(str, "\n", nil, true) then
		pattern, plain = "\r", true
	else
		pattern = "([\n\r]\n?)"
	end
	for _ = 1, i - 1 do
		pos1, pos2, newline = find(str, pattern, first, plain)
		if pos1 == nil then
			return ""
		end
		first = newline == "\n\n" and pos2 or pos2 + 1
	end
	if j == nil then
		return sub(str, first)
	end
	local last = first
	for _ = i, j do
		pos1, pos2, newline = find(str, pattern, last, plain)
		if pos1 == nil then
			return sub(str, first)
		end
		last = newline == "\n\n" and pos2 or pos2 + 1
	end
	last = pos1 - 1
	return sub(str, first, last)
end
"https://si.wiktionary.org/w/index.php?title=Module:string/linesub&oldid=222244" වෙතින් සම්ප්‍රවේශනය කෙරිණි