mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-16 05:47:06 +09:00
Make autoclose plugin work with Non-Ascii Unicode characters (#641)
* Make autoclose plugin work with Non-Ascii Unicode characters * Removed lines that I forgot to remove
This commit is contained in:
committed by
Zachary Yedidia
parent
b4dda8bad8
commit
5ee774892a
File diff suppressed because one or more lines are too long
@@ -1,6 +1,8 @@
|
|||||||
|
local utf8 = require "runtime/plugins/autoclose/utf8/utf8"
|
||||||
|
|
||||||
function charAt(str, i)
|
function charAt(str, i)
|
||||||
if i <= #str then
|
if i <= utf8.len(str) then
|
||||||
return string.sub(str, i, i)
|
return utf8.sub(str, i, i)
|
||||||
else
|
else
|
||||||
return ""
|
return ""
|
||||||
end
|
end
|
||||||
@@ -35,7 +37,7 @@ function onRune(r, v)
|
|||||||
if r == charAt(autoclosePairs[i], 1) then
|
if r == charAt(autoclosePairs[i], 1) then
|
||||||
local curLine = v.Buf:Line(v.Cursor.Y)
|
local curLine = v.Buf:Line(v.Cursor.Y)
|
||||||
|
|
||||||
if v.Cursor.X == #curLine or not IsWordChar(charAt(curLine, v.Cursor.X+1)) then
|
if v.Cursor.X == utf8.len(curLine) or not IsWordChar(charAt(curLine, v.Cursor.X+1)) then
|
||||||
-- the '-' here is to derefence the pointer to v.Cursor.Loc which is automatically made
|
-- the '-' here is to derefence the pointer to v.Cursor.Loc which is automatically made
|
||||||
-- when converting go structs to lua
|
-- when converting go structs to lua
|
||||||
-- It needs to be dereferenced because the function expects a non pointer struct
|
-- It needs to be dereferenced because the function expects a non pointer struct
|
||||||
|
|||||||
21
runtime/plugins/autoclose/utf8/LICENSE
Normal file
21
runtime/plugins/autoclose/utf8/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Stepets
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
109
runtime/plugins/autoclose/utf8/README.md
Normal file
109
runtime/plugins/autoclose/utf8/README.md
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
# utf8.lua
|
||||||
|
one-file pure-lua 5.1 regex library
|
||||||
|
|
||||||
|
This library _is_ the simple way to add utf8 support into your application.
|
||||||
|
|
||||||
|
Some examples from http://www.lua.org/manual/5.1/manual.html#5.4 :
|
||||||
|
```Lua
|
||||||
|
local utf8 = require "utf8"
|
||||||
|
|
||||||
|
local s = "hello world from Lua"
|
||||||
|
for w in string.gmatch(s, "%a+") do
|
||||||
|
print(w)
|
||||||
|
end
|
||||||
|
--[[
|
||||||
|
hello
|
||||||
|
world
|
||||||
|
from
|
||||||
|
Lua
|
||||||
|
]]--
|
||||||
|
|
||||||
|
s = "Привет, мир, от Lua"
|
||||||
|
for w in utf8.gmatch(s, "[^%p%d%s%c]+") do
|
||||||
|
print(w)
|
||||||
|
end
|
||||||
|
--[[
|
||||||
|
Привет
|
||||||
|
мир
|
||||||
|
от
|
||||||
|
Lua
|
||||||
|
]]--
|
||||||
|
|
||||||
|
local t = {}
|
||||||
|
s = "from=world, to=Lua"
|
||||||
|
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
|
||||||
|
t[k] = v
|
||||||
|
end
|
||||||
|
for k,v in pairs(t) do
|
||||||
|
print(k,v)
|
||||||
|
end
|
||||||
|
--[[
|
||||||
|
to Lua
|
||||||
|
from world
|
||||||
|
]]--
|
||||||
|
|
||||||
|
t = {}
|
||||||
|
s = "从=世界, 到=Lua"
|
||||||
|
for k, v in utf8.gmatch(s, "([^%p%s%c]+)=([^%p%s%c]+)") do
|
||||||
|
t[k] = v
|
||||||
|
end
|
||||||
|
for k,v in pairs(t) do
|
||||||
|
print(k,v)
|
||||||
|
end
|
||||||
|
--[[
|
||||||
|
到 Lua
|
||||||
|
从 世界
|
||||||
|
]]--
|
||||||
|
|
||||||
|
local x = string.gsub("hello world", "(%w+)", "%1 %1")
|
||||||
|
print(x)
|
||||||
|
--hello hello world world
|
||||||
|
|
||||||
|
x = utf8.gsub("Ahoj světe", "([^%p%s%c]+)", "%1 %1")
|
||||||
|
print(x)
|
||||||
|
--Ahoj Ahoj světe světe
|
||||||
|
|
||||||
|
x = string.gsub("hello world", "%w+", "%0 %0", 1)
|
||||||
|
print(x)
|
||||||
|
--hello hello world
|
||||||
|
|
||||||
|
x = utf8.gsub("Ahoj světe", "[^%p%s%c]+", "%0 %0", 1)
|
||||||
|
print(x)
|
||||||
|
--Ahoj Ahoj světe
|
||||||
|
|
||||||
|
x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
|
||||||
|
print(x)
|
||||||
|
--world hello Lua from
|
||||||
|
|
||||||
|
x = utf8.gsub("γεια κόσμο από Lua", "([^%p%s%c]+)%s*([^%p%s%c]+)", "%2 %1")
|
||||||
|
print(x)
|
||||||
|
--κόσμο γεια Lua από
|
||||||
|
```
|
||||||
|
Notice, there are some classes that can work only with latin(ASCII) symbols,
|
||||||
|
for details see: https://github.com/Stepets/utf8.lua/blob/master/utf8.lua#L470
|
||||||
|
|
||||||
|
Of course you can do this trick:
|
||||||
|
```Lua
|
||||||
|
for k,v in pairs(utf8) do
|
||||||
|
string[k] = v
|
||||||
|
end
|
||||||
|
```
|
||||||
|
But this can lead to very strange errors. You were warned.
|
||||||
|
|
||||||
|
A little bit more interesting examples:
|
||||||
|
```Lua
|
||||||
|
local utf8 = require 'utf8'
|
||||||
|
for k,v in pairs(utf8) do
|
||||||
|
string[k] = v
|
||||||
|
end
|
||||||
|
|
||||||
|
local str = "пыщпыщ ололоо я водитель нло"
|
||||||
|
print(str:find("(.л.+)н"))
|
||||||
|
-- 8 26 ололоо я водитель
|
||||||
|
|
||||||
|
print(str:gsub("ло+", "보라"))
|
||||||
|
-- пыщпыщ о보라보라 я водитель н보라 3
|
||||||
|
|
||||||
|
print(str:match("^п[лопыщ ]*я"))
|
||||||
|
-- пыщпыщ ололоо я
|
||||||
|
```
|
||||||
1045
runtime/plugins/autoclose/utf8/utf8.lua
Normal file
1045
runtime/plugins/autoclose/utf8/utf8.lua
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user