Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Log format #260

Open
wants to merge 40 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
dbe83b0
add ConfigListReg
shewer Mar 30, 2021
cb90c91
add ConfigItemReg ConfigValue
shewer Mar 31, 2021
a1c75a7
add ProjectionReg
shewer Mar 31, 2021
a4842ab
add sample projection.lua
shewer Mar 31, 2021
e0450e2
add ConfigMapReg
shewer Apr 1, 2021
d5767e5
modify ConfigReg
shewer Apr 1, 2021
36e30b6
ConfigList(append , insert) ConfigMap (set ) 改用 自身 參考(ConfigItem)
shewer Apr 1, 2021
c1e9e56
move Config ..REG code to config.h
shewer Apr 4, 2021
15040ce
update
shewer Apr 12, 2021
7bf6c2c
update sample
shewer Apr 12, 2021
951912f
update types.cc
shewer Apr 12, 2021
c193fd8
add engine:apply_schema() (#98)
shewer Apr 1, 2021
aa0c118
Export KeyEvent (#100)
shewer Apr 1, 2021
ec95adc
remove config.h modules.cc projection.lua
shewer Apr 14, 2021
d1cefd9
restore moduless.cc from fork/master
shewer Jul 28, 2021
9268d3f
rebase from fork/master
shewer Jul 28, 2021
bbdd4b7
Merge branch 'hchunhui:master' into master
shewer Sep 17, 2021
f4638ba
merge fork/master #139
shewer Oct 22, 2021
ee227e8
Merge branch 'hchunhui:master' into master
shewer Oct 30, 2021
590d3d5
Merge remote-tracking branch 'fork/master'
shewer Feb 15, 2022
c219707
Merge branch 'hchunhui:master' into master
shewer Jun 6, 2022
667ff2b
Merge branch 'hchunhui:master' into master
shewer Jul 6, 2022
42618fd
Merge branch 'hchunhui:master' into master
shewer Jul 11, 2022
3298ce7
Merge branch 'hchunhui:master' into master
shewer Jul 11, 2022
311e1e9
Merge branch 'hchunhui:master' into master
shewer Jul 12, 2022
f0c80e3
Merge branch 'hchunhui:master' into master
shewer Jul 12, 2022
052f028
Merge branch 'hchunhui:master' into master
shewer Jul 13, 2022
a13205d
Merge branch 'hchunhui:master' into master
shewer Jul 24, 2022
9d6b14a
Merge remote-tracking branch 'fork/master'
shewer Sep 4, 2022
63cc6b6
add distribution infomation
shewer Sep 7, 2022
ed0346a
Merge branch 'hchunhui:master' into master
shewer Sep 11, 2022
fb1b3bd
Merge branch 'hchunhui:master' into master
shewer Sep 24, 2022
facdc23
Merge branch 'hchunhui:master' into master
shewer Oct 6, 2022
50ee4dc
Merge branch 'hchunhui:master' into master
shewer Oct 9, 2022
ed9bed1
Merge remote-tracking branch 'fork/master'
shewer Nov 7, 2022
2219097
Merge branch 'hchunhui:master' into master
shewer Dec 3, 2022
ea9b511
Merge branch 'hchunhui:master' into master
shewer Dec 8, 2022
adf7943
Merge branch 'hchunhui:master' into master
shewer Jan 15, 2023
6da4e54
Merge branch 'hchunhui:master' into master
shewer Jul 28, 2023
c7de3ac
improve librime-lua error log format
shewer Aug 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 35 additions & 49 deletions src/lua_gears.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

namespace rime {

std::ostream &operator<<(std::ostream &os, const LuaErr &e) {
return os << " error(" << e.status << "): " << e.e;
}
//--- LuaTranslation
bool LuaTranslation::Next() {
if (exhausted()) {
Expand All @@ -11,8 +14,8 @@ bool LuaTranslation::Next() {
auto r = lua_->resume<an<Candidate>>(f_);
if (!r.ok()) {
LuaErr e = r.get_err();
if (e.e != "")
LOG(ERROR) << "LuaTranslation::Next error(" << e.status << "): " << e.e;
LOG_IF(ERROR, e.e != "" ) << typeid(*this).name() <<"::" << __FUNCTION__
<< "[" << name_space_ << "]" << e;
set_exhausted(true);
return false;
} else {
Expand Down Expand Up @@ -70,7 +73,7 @@ static void raw_init(lua_State *L, const Ticket &t,
*fini = LuaObj::todata(L, -1);
}
lua_pop(L, 1);

if (tags_match) {
lua_getfield(L, -1, "tags_match");
if (lua_type(L, -1) == LUA_TFUNCTION) {
Expand All @@ -92,29 +95,39 @@ static void raw_init(lua_State *L, const Ticket &t,
*func = LuaObj::todata(L, -1);
lua_pop(L, 1);
}
#define VOID_CALL(func, fname) \
do { \
if (func) { \
auto r = lua_->void_call<an<LuaObj>, an<LuaObj>>(fini_, env_); \
LOG_IF(ERROR, !r.ok()) << typeid(*this).name() <<"::" << __FUNCTION__ \
<< "[" << name_space_ << ": " #fname "]" << r.get_err(); \
} \
} while(0)

//--- LuaFilter
LuaFilter::LuaFilter(const Ticket& ticket, Lua* lua)
: Filter(ticket), TagMatching(ticket), lua_(lua) {
lua->to_state([&](lua_State *L) {raw_init(L, ticket, &env_, &func_, &fini_, &tags_match_);});
}

bool LuaFilter::AppliesToSegment(Segment* segment) {
if ( ! tags_match_ )
return TagsMatch(segment);

auto r = lua_->call<bool, an<LuaObj>, Segment *, an<LuaObj>>(tags_match_, segment, env_);
LOG_IF(ERROR, !r.ok()) << typeid(*this).name() << "::" << __FUNCTION__
<< "[" << name_space_ << "]" << r.get_err();
return (r.ok()) ? r.get() : false;
}

an<Translation> LuaFilter::Apply(
an<Translation> translation, CandidateList* candidates) {
auto f = lua_->newthread<an<LuaObj>, an<Translation>,
an<LuaObj>, CandidateList *>(func_, translation, env_, candidates);
return New<LuaTranslation>(lua_, f);
return New<LuaTranslation>(lua_, f, name_space_ + ":\"func\"");
}

LuaFilter::~LuaFilter() {
if (fini_) {
auto r = lua_->void_call<an<LuaObj>, an<LuaObj>>(fini_, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaFilter::~LuaFilter of "<< name_space_ << " error(" << e.status << "): " << e.e;
}
}
}
LuaFilter::~LuaFilter() { VOID_CALL(fini_, "fini"); }

//--- LuaTranslator
LuaTranslator::LuaTranslator(const Ticket& ticket, Lua* lua)
Expand All @@ -126,22 +139,14 @@ an<Translation> LuaTranslator::Query(const string& input,
const Segment& segment) {
auto f = lua_->newthread<an<LuaObj>, const string &, const Segment &,
an<LuaObj>>(func_, input, segment, env_);
an<Translation> t = New<LuaTranslation>(lua_, f);
an<Translation> t = New<LuaTranslation>(lua_, f, name_space_ + ": \"func\"");
if (t->exhausted())
return an<Translation>();
else
return t;
}

LuaTranslator::~LuaTranslator() {
if (fini_) {
auto r = lua_->void_call<an<LuaObj>, an<LuaObj>>(fini_, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaTranslator::~LuaTranslator of "<< name_space_ << " error(" << e.status << "): " << e.e;
}
}
}
LuaTranslator::~LuaTranslator() { VOID_CALL(fini_, "fini"); }

//--- LuaSegmentor
LuaSegmentor::LuaSegmentor(const Ticket& ticket, Lua *lua)
Expand All @@ -152,23 +157,12 @@ LuaSegmentor::LuaSegmentor(const Ticket& ticket, Lua *lua)
bool LuaSegmentor::Proceed(Segmentation* segmentation) {
auto r = lua_->call<bool, an<LuaObj>, Segmentation &,
an<LuaObj>>(func_, *segmentation, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaSegmentor::Proceed of "<< name_space_ << " error(" << e.status << "): " << e.e;
return true;
} else
return r.get();
LOG_IF(ERROR, !r.ok()) << typeid(*this).name() << "::" << __FUNCTION__
<< "[" << name_space_ << "]" << r.get_err();
return (r.ok()) ? r.get() : true ;
}

LuaSegmentor::~LuaSegmentor() {
if (fini_) {
auto r = lua_->void_call<an<LuaObj>, an<LuaObj>>(fini_, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaSegmentor::~LuaSegmentor of "<< name_space_ << " error(" << e.status << "): " << e.e;
}
}
}
LuaSegmentor::~LuaSegmentor() { VOID_CALL(fini_, "fini"); }

//--- LuaProcessor
LuaProcessor::LuaProcessor(const Ticket& ticket, Lua* lua)
Expand All @@ -180,8 +174,8 @@ ProcessResult LuaProcessor::ProcessKeyEvent(const KeyEvent& key_event) {
auto r = lua_->call<int, an<LuaObj>, const KeyEvent&,
an<LuaObj>>(func_, key_event, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaProcessor::ProcessKeyEvent of "<< name_space_ << " error(" << e.status << "): " << e.e;
LOG_IF(ERROR, !r.ok()) << typeid(*this).name() << "::" << __FUNCTION__
<< "[" << name_space_ << "]" << r.get_err();
return kNoop;
} else
switch (r.get()) {
Expand All @@ -191,14 +185,6 @@ ProcessResult LuaProcessor::ProcessKeyEvent(const KeyEvent& key_event) {
}
}

LuaProcessor::~LuaProcessor() {
if (fini_) {
auto r = lua_->void_call<an<LuaObj>, an<LuaObj>>(fini_, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaProcessor::~LuaProcessor of "<< name_space_ << " error(" << e.status << "): " << e.e;
}
}
}
LuaProcessor::~LuaProcessor() { VOID_CALL(fini_, "fini"); }

} // namespace rime
23 changes: 9 additions & 14 deletions src/lua_gears.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,14 @@

namespace rime {

std::ostream& operator<<(std::ostream &os, const LuaErr &e);

class LuaTranslation : public Translation {
public:
LuaTranslation(Lua *lua, an<LuaObj> f)
: lua_(lua), f_(f) {
: LuaTranslation(lua, f, "") {};
LuaTranslation(Lua *lua, an<LuaObj> f, string name_space)
: lua_(lua), f_(f), name_space_(name_space) {
Next();
}

Expand All @@ -23,11 +27,14 @@ class LuaTranslation : public Translation {
an<Candidate> Peek() {
return c_;
}
string name_space() const { return name_space_; }
void set_name_space(const string& ns) { name_space_ = ns;}

private:
Lua *lua_;
an<Candidate> c_;
an<LuaObj> f_;
string name_space_;
};

class LuaFilter : public Filter, TagMatching {
Expand All @@ -38,19 +45,7 @@ class LuaFilter : public Filter, TagMatching {
virtual an<Translation> Apply(an<Translation> translation,
CandidateList* candidates);

virtual bool AppliesToSegment(Segment* segment) {
if ( ! tags_match_ )
return TagsMatch(segment);

auto r = lua_->call<bool, an<LuaObj>, Segment *, an<LuaObj>>(tags_match_, segment, env_);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaFilter::AppliesToSegment of " << name_space_ << " error(" << e.status << "): " << e.e;
return false;
}
else
return r.get();
}
virtual bool AppliesToSegment(Segment* segment);

private:
Lua *lua_;
Expand Down
27 changes: 20 additions & 7 deletions src/types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ namespace TranslationReg {
return 0;

auto o = lua->newthreadx(L, n);
an<Translation> r = New<LuaTranslation>(lua, o);
an<Translation> r = New<LuaTranslation>(lua, o,"=lua=");
LuaType<an<Translation>>::pushdata(L, r);
return 1;
}
Expand All @@ -236,6 +236,20 @@ namespace TranslationReg {
lua_pushvalue(L, 1);
return 2;
}
bool set_name_space(T &t, const string &ns) {
if (auto tp = dynamic_cast<LuaTranslation *>(&t)) {
tp->set_name_space(ns);
return true;
}
return false;
}

string name_space(T &t) {
if (auto tp = dynamic_cast<LuaTranslation *>(&t)) {
return tp->name_space();
}
return "";
}

static const luaL_Reg funcs[] = {
{ "Translation", raw_make },
Expand All @@ -244,14 +258,17 @@ namespace TranslationReg {

static const luaL_Reg methods[] = {
{ "iter", raw_iter },
{ "set_name_space", WRAP(set_name_space)},
{ NULL, NULL },
};

static const luaL_Reg vars_get[] = {
{ "name_space", WRAP(name_space)},
{ NULL, NULL },
};

static const luaL_Reg vars_set[] = {
{ "name_space", WRAP(set_name_space)},
{ NULL, NULL },
};
}
Expand Down Expand Up @@ -1212,10 +1229,7 @@ static int raw_connect(lua_State *L) {
auto c = t.connect
([lua, o](I... i) {
auto r = lua->void_call<an<LuaObj>, Context *>(o, i...);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "Context::Notifier error(" << e.status << "): " << e.e;
}
LOG_IF(ERROR, !r.ok()) << "Context::Notifier" << r.get_err();
});

LuaType<boost::signals2::connection>::pushdata(L, c);
Expand Down Expand Up @@ -1484,8 +1498,7 @@ namespace MemoryReg {

auto r = lua_->call<bool, an<LuaObj>, const CommitEntry &>(memorize_callback, commit_entry);
if (!r.ok()) {
auto e = r.get_err();
LOG(ERROR) << "LuaMemory::Memorize error(" << e.status << "): " << e.e;
LOG(ERROR) << "LuaMemory::Memorize" << r.get_err();
return false;
} else
return r.get();
Expand Down