我一直在开发一个格式化程序,它将接受一个长字符串并将其格式化为一系列在特定字符限制内的单词处断开的行。例如,他吃面包每 8 个字符断开一次,将返回类似以下内容的内容:
He eats
the
bread
这是因为“He eats”包含 7 个字符,而“the bread”包含 9 个字符,因此必须在“the”处中断并继续“bread”。
感谢之前其他成员的帮助,剧本本身运行得非常好。然而,现在我有了新的挑战。
我正在使用一个免费输入框来输入一系列行。如果有人熟悉的话,它适用于一个名为 MUSHclient 的程序。这实用程序.editbox打开编辑器文本框,允许自由格式,并将结果作为string。例如:
result = utils.editbox("What are you typing?")
将键入的响应保存到result
这是一个string
类型。我想正确地插入换行符,但我不知道该怎么做。如果我print(result)
,它返回如下内容:
This is the result of three separate paragraphs.
As you can see, there is a line break between each paragraph.
So the result contains line breaks, or control characters.
现在,我已经使用以下代码成功推断出各行,但没有推断出其间的换行符:
for line in result:gmatch("[^%c]+%c?") do
Send(note_wrap(line))
end
如何推断换行符和文本内容?
Edit作为参考,note_wrap
函数如下:
function note_wrap(str, limit, indent, indent1)
indent = indent or ""
indent1 = indent1 or indent
limit = limit or 79
local here = 1-#indent1
local last_color = ''
return indent1..str:gsub("(%s+)()(%S+)()",
function(sp, st, word, fi)
local delta = 0
local color_before_current_word = last_color
word:gsub('()@([@%a])',
function(pos, c)
if c == '@' then
delta = delta + 1
elseif c == 'x' then
delta = delta + 5
last_color = word:sub(pos, pos+4)
else
delta = delta + 2
last_color = word:sub(pos, pos+1)
end
end)
here = here + delta
if fi-here > limit then
here = st - #indent + delta
return "\n"..indent..color_before_current_word..word
end
end)
end
这段代码的原因是能够采取@r他吃@x123面包,忽略颜色代码(由 @ 或 @x 表示)并返回上述结果:
He eats
the
bread
但插入颜色代码,然后返回:
@rHe eats
@x123the
bread
如果可以对其进行修改以识别新行并放入实际的新行,那就太棒了。
Edit 2尝试了保罗的解决方案,但它没有达到我需要的效果。我可能还不够清楚,所以我会尝试在这次编辑中澄清它。
当我在自由格式框中键入内容时,我希望信息完全按原样显示,但格式设置为正确中断并保留输入的换行符。例如,如果我在自由格式框中写下以下内容:
Mary had a little lamb, little lamb, little lamb
Mary had a little lamb
It's fleece was white as snow
使用 Paul 的代码,并将字符串设置为 79,我得到:
Mary had a little lamb, little lamb, little lamb
Mary had a little lamb
It's fleece was white as snow
这不是我想要的。我希望它按照编写的方式返回它,并根据需要换行。因此,如果我有 20 个字符的限制,它将返回:
Mary had a little
lamb, little lamb,
little lamb
Mary had a little
lamb
It's fleece was
white as snow
如果我添加了手动换行符,我希望它尊重这些换行符,所以如果我在第一行之后按两次回车键,它也会在第一行下方有一个换行符。例如,如果我在自由格式框中写这篇文章,我希望它尊重每个新段落和每个正确的换行符。我希望这能解决问题。