Add unicode case conversion functions to the automation module
This commit is contained in:
parent
eadf555da3
commit
94a060a556
6 changed files with 60 additions and 1 deletions
|
@ -28,6 +28,8 @@
|
||||||
-- Unicode (UTF-8) support functions for Aegisub Automation 4 Lua
|
-- Unicode (UTF-8) support functions for Aegisub Automation 4 Lua
|
||||||
-- http://www.ietf.org/rfc/rfc2279.txt
|
-- http://www.ietf.org/rfc/rfc2279.txt
|
||||||
|
|
||||||
|
impl = require 'aegisub.__unicode_impl'
|
||||||
|
|
||||||
local unicode
|
local unicode
|
||||||
unicode =
|
unicode =
|
||||||
-- Return the number of bytes occupied by the character starting at the i'th byte in s
|
-- Return the number of bytes occupied by the character starting at the i'th byte in s
|
||||||
|
@ -84,4 +86,8 @@ unicode =
|
||||||
res = res*64 + s\byte(i) - 128
|
res = res*64 + s\byte(i) - 128
|
||||||
res
|
res
|
||||||
|
|
||||||
|
to_upper_case: impl.to_upper_case
|
||||||
|
to_lower_case: impl.to_lower_case
|
||||||
|
to_fold_case: impl.to_fold_case
|
||||||
|
|
||||||
return unicode
|
return unicode
|
||||||
|
|
|
@ -127,6 +127,7 @@
|
||||||
<ForcedIncludeFiles></ForcedIncludeFiles>
|
<ForcedIncludeFiles></ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="$(SrcDir)lua\modules\re.cpp" />
|
<ClCompile Include="$(SrcDir)lua\modules\re.cpp" />
|
||||||
|
<ClCompile Include="$(SrcDir)lua\modules\unicode.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)lua\script_reader.cpp" />
|
<ClCompile Include="$(SrcDir)lua\script_reader.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)lua\utils.cpp" />
|
<ClCompile Include="$(SrcDir)lua\utils.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)windows\access.cpp" />
|
<ClCompile Include="$(SrcDir)windows\access.cpp" />
|
||||||
|
|
|
@ -319,6 +319,9 @@
|
||||||
<ClCompile Include="$(SrcDir)lua\modules.cpp">
|
<ClCompile Include="$(SrcDir)lua\modules.cpp">
|
||||||
<Filter>Lua</Filter>
|
<Filter>Lua</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="$(SrcDir)lua\modules\unicode.cpp">
|
||||||
|
<Filter>Lua\Modules</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="$(SrcDir)include\libaegisub\charsets.def">
|
<None Include="$(SrcDir)include\libaegisub\charsets.def">
|
||||||
|
|
|
@ -45,6 +45,7 @@ SRC += \
|
||||||
lua/modules/lfs.cpp \
|
lua/modules/lfs.cpp \
|
||||||
lua/modules/lpeg.c \
|
lua/modules/lpeg.c \
|
||||||
lua/modules/re.cpp \
|
lua/modules/re.cpp \
|
||||||
|
lua/modules/unicode.cpp \
|
||||||
lua/script_reader.cpp \
|
lua/script_reader.cpp \
|
||||||
lua/utils.cpp \
|
lua/utils.cpp \
|
||||||
unix/access.cpp \
|
unix/access.cpp \
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
extern "C" int luaopen_luabins(lua_State *L);
|
extern "C" int luaopen_luabins(lua_State *L);
|
||||||
extern "C" int luaopen_re_impl(lua_State *L);
|
extern "C" int luaopen_re_impl(lua_State *L);
|
||||||
|
extern "C" int luaopen_unicode_impl(lua_State *L);
|
||||||
extern "C" int luaopen_lfs(lua_State *L);
|
extern "C" int luaopen_lfs(lua_State *L);
|
||||||
extern "C" int luaopen_lpeg(lua_State *L);
|
extern "C" int luaopen_lpeg(lua_State *L);
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ void preload_modules(lua_State *L) {
|
||||||
lua_getfield(L, -1, "preload");
|
lua_getfield(L, -1, "preload");
|
||||||
|
|
||||||
set_field(L, "aegisub.__re_impl", luaopen_re_impl);
|
set_field(L, "aegisub.__re_impl", luaopen_re_impl);
|
||||||
|
set_field(L, "aegisub.__unicode_impl", luaopen_unicode_impl);
|
||||||
set_field(L, "lfs", luaopen_lfs);
|
set_field(L, "lfs", luaopen_lfs);
|
||||||
set_field(L, "lpeg", luaopen_lpeg);
|
set_field(L, "lpeg", luaopen_lpeg);
|
||||||
set_field(L, "luabins", luaopen_luabins);
|
set_field(L, "luabins", luaopen_luabins);
|
||||||
|
|
46
libaegisub/lua/modules/unicode.cpp
Normal file
46
libaegisub/lua/modules/unicode.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// Aegisub Project http://www.aegisub.org/
|
||||||
|
|
||||||
|
#include "libaegisub/lua/utils.h"
|
||||||
|
|
||||||
|
#include <boost/locale.hpp>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
using namespace agi::lua;
|
||||||
|
|
||||||
|
int unicode_upper(lua_State *L) {
|
||||||
|
push_value(L, boost::locale::to_upper(check_string(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int unicode_lower(lua_State *L) {
|
||||||
|
push_value(L, boost::locale::to_lower(check_string(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int unicode_fold(lua_State *L) {
|
||||||
|
push_value(L, boost::locale::fold_case(check_string(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int luaopen_unicode_impl(lua_State *L) {
|
||||||
|
lua_createtable(L, 0, 3);
|
||||||
|
set_field<unicode_upper>(L, "to_upper_case");
|
||||||
|
set_field<unicode_lower>(L, "to_lower_case");
|
||||||
|
set_field<unicode_fold>(L, "to_fold_case");
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in a new issue