Add unicode case conversion functions to the automation module

This commit is contained in:
Thomas Goyne 2014-05-09 06:41:47 -07:00
parent eadf555da3
commit 94a060a556
6 changed files with 60 additions and 1 deletions

View file

@ -28,6 +28,8 @@
-- Unicode (UTF-8) support functions for Aegisub Automation 4 Lua
-- http://www.ietf.org/rfc/rfc2279.txt
impl = require 'aegisub.__unicode_impl'
local unicode
unicode =
-- 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
to_upper_case: impl.to_upper_case
to_lower_case: impl.to_lower_case
to_fold_case: impl.to_fold_case
return unicode

View file

@ -127,6 +127,7 @@
<ForcedIncludeFiles></ForcedIncludeFiles>
</ClCompile>
<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\utils.cpp" />
<ClCompile Include="$(SrcDir)windows\access.cpp" />

View file

@ -319,10 +319,13 @@
<ClCompile Include="$(SrcDir)lua\modules.cpp">
<Filter>Lua</Filter>
</ClCompile>
<ClCompile Include="$(SrcDir)lua\modules\unicode.cpp">
<Filter>Lua\Modules</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="$(SrcDir)include\libaegisub\charsets.def">
<Filter>Header Files</Filter>
</None>
</ItemGroup>
</Project>
</Project>

View file

@ -45,6 +45,7 @@ SRC += \
lua/modules/lfs.cpp \
lua/modules/lpeg.c \
lua/modules/re.cpp \
lua/modules/unicode.cpp \
lua/script_reader.cpp \
lua/utils.cpp \
unix/access.cpp \

View file

@ -20,6 +20,7 @@
extern "C" int luaopen_luabins(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_lpeg(lua_State *L);
@ -33,6 +34,7 @@ void preload_modules(lua_State *L) {
lua_getfield(L, -1, "preload");
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, "lpeg", luaopen_lpeg);
set_field(L, "luabins", luaopen_luabins);

View 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;
}