Scite 标题大小写

lua-users home
wiki

这个简单的函数将字符串的大小写规范化为标题大小写(例如,将“MY string”转换为“My String”)。

function titlecase(str)
    --os.setlocale('pt_BR','ctype') -- set a locale as needed
    buf ={}
    local sel = editor:GetSelText()    
    for word in string.gfind(sel, "%S+") do          
        local first = string.sub(word,1,1)        
        table.insert(buf,string.upper(first) .. 
            string.lower(string.sub(word,2)))
    end    
    editor:ReplaceSel(table.concat(buf," "))
end
        

WalterCruz


这个函数对我来说不起作用(也许我只是太笨了,无法理解它)。无论如何,我自己写了一个。

function titlecase(str)
result=''
    for word in string.gfind(str, "%S+") do          
        local first = string.sub(word,1,1)
        result = (result .. string.upper(first) ..
            string.lower(string.sub(word,2)) .. ' ')
    end    
    return result
end
        


那是因为第一个函数是为 SciTE 编写的。我已经将 Walter 的原始实现重构为两个函数,一个应该在标准 Lua 上运行,另一个执行 SciTE 操作。

请注意,在这种情况下使用 table.concat() 比追加到字符串更有效;请参阅 [Programming in Lua 11.6 字符串缓冲区]

-- normalize case of words in 'str' to Title Case
function titlecase(str)
    local buf = {}
    for word in string.gfind(str, "%S+") do          
        local first, rest = string.sub(word, 1, 1), string.sub(word, 2)
        table.insert(buf, string.upper(first) .. string.lower(rest))
    end    
    return table.concat(buf, " ")
end

-- For use in SciTE
function scite_titlecase()
    local sel = editor:GetSelText()    
    editor:ReplaceSel(titlecase(sel))
end

MarkEdgar


有一段时间没试过这个了,但我在切换到 SciTE 版本 1.74 时测试了它。使用最后一个代码示例中的两个函数,我得到了错误:SciTE_titlecase.lua:4: bad argument #1 to 'gfind' (string expected, got nil) 我通过将传递的字符串名称从 str 切换为 sel 在这一行中修复了错误
function titlecase(str)
因此它变成了
function titlecase(sel)
现在似乎工作得更好。


对我来说,这个函数在多行上无法正常工作。以下是从字符串食谱页面中提取的替代方案
local function tchelper(first, rest)
  return first:upper()..rest:lower()
end

function scite_titlecase()
    local sel = editor:GetSelText()
    sel = sel:gsub("(%a)([%w_']*)", tchelper)
    editor:ReplaceSel((sel))
end

将以上内容插入您的扩展文件,并将以下内容放入 SciTEUser.properties 中

command.name.6.*=Title Case
command.6.*=scite_titlecase
command.subsystem.6.*=3
command.mode.6.*=savebefore:no
command.shortcut.6.*=Ctrl+Alt+Z
匿名史蒂夫。
我需要保留单词之间/之前/之后的原始空格字符,所以我写了这个版本

function titlecase(str)
  local buf = {}
  local inWord = false
  for i = 1, #str do
    local c = string.sub(str, i, i)
    if inWord then
        table.insert(buf, string.lower(c))
      if string.find(c, '%s') then
        inWord = false
      end
    else
      table.insert(buf, string.upper(c))
      inWord = true
    end
  end
  return table.concat(buf)
end

我在 Lua 5.2 上测试了它。

我是 Lua 新手,所以请原谅(或者,更好的是,纠正)任何风格错误。

EllenSpertus?


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2013 年 10 月 5 日凌晨 2:36 GMT (差异)