summaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-05 14:36:08 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-05 16:06:22 +0100
commit07baac0372c789492c3863afad319e1928b08de9 (patch)
treeb3be1c3abb3e76a40a78edf2af5c10accdebb3f2 /src/lua
parent03fc6963c4947d62a541d3c989000596a1444169 (diff)
downloadrspamd-07baac0372c789492c3863afad319e1928b08de9.tar.gz
rspamd-07baac0372c789492c3863afad319e1928b08de9.zip
[Feature] Allow to get block content for HTML tags
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/lua_html.c98
1 files changed, 55 insertions, 43 deletions
diff --git a/src/lua/lua_html.c b/src/lua/lua_html.c
index fe5a409d7..330c08fa8 100644
--- a/src/lua/lua_html.c
+++ b/src/lua/lua_html.c
@@ -311,61 +311,70 @@ lua_html_get_images (lua_State *L)
return 1;
}
+static void
+lua_html_push_block (lua_State *L, struct html_block *bl)
+{
+ struct rspamd_lua_text *t;
+ struct html_tag **ptag;
+
+ lua_createtable (L, 0, 4);
+
+ if (bl->tag) {
+ lua_pushstring (L, "tag");
+ ptag = lua_newuserdata (L, sizeof (gpointer));
+ *ptag = bl->tag;
+ rspamd_lua_setclass (L, "rspamd{html_tag}", -1);
+ lua_settable (L, -3);
+ }
+
+ if (bl->font_color.valid) {
+ lua_pushstring (L, "color");
+ lua_newtable (L);
+ lua_pushnumber (L, bl->font_color.d.comp.r);
+ lua_rawseti (L, -2, 1);
+ lua_pushnumber (L, bl->font_color.d.comp.g);
+ lua_rawseti (L, -2, 2);
+ lua_pushnumber (L, bl->font_color.d.comp.b);
+ lua_rawseti (L, -2, 3);
+ lua_settable (L, -3);
+ }
+ if (bl->background_color.valid) {
+ lua_pushstring (L, "bgcolor");
+ lua_newtable (L);
+ lua_pushnumber (L, bl->background_color.d.comp.r);
+ lua_rawseti (L, -2, 1);
+ lua_pushnumber (L, bl->background_color.d.comp.g);
+ lua_rawseti (L, -2, 2);
+ lua_pushnumber (L, bl->background_color.d.comp.b);
+ lua_rawseti (L, -2, 3);
+ lua_settable (L, -3);
+ }
+
+ if (bl->style.len > 0) {
+ lua_pushstring (L, "style");
+ t = lua_newuserdata (L, sizeof (*t));
+ t->start = bl->style.start;
+ t->len = bl->style.len;
+ t->own = FALSE;
+ lua_settable (L, -3);
+ }
+}
+
static gint
lua_html_get_blocks (lua_State *L)
{
struct html_content *hc = lua_check_html (L, 1);
struct html_block *bl;
- struct rspamd_lua_text *t;
+
guint i;
if (hc != NULL) {
- lua_newtable (L);
+ lua_createtable (L, hc->blocks->len, 0);
if (hc->blocks && hc->blocks->len > 0) {
for (i = 0; i < hc->blocks->len; i ++) {
bl = g_ptr_array_index (hc->blocks, i);
-
- lua_newtable (L);
-
- if (bl->tag) {
- lua_pushstring (L, "tag");
- lua_pushlstring (L, bl->tag->name.start, bl->tag->name.len);
- lua_settable (L, -3);
- }
-
- if (bl->font_color.valid) {
- lua_pushstring (L, "color");
- lua_newtable (L);
- lua_pushnumber (L, bl->font_color.d.comp.r);
- lua_rawseti (L, -2, 1);
- lua_pushnumber (L, bl->font_color.d.comp.g);
- lua_rawseti (L, -2, 2);
- lua_pushnumber (L, bl->font_color.d.comp.b);
- lua_rawseti (L, -2, 3);
- lua_settable (L, -3);
- }
- if (bl->background_color.valid) {
- lua_pushstring (L, "bgcolor");
- lua_newtable (L);
- lua_pushnumber (L, bl->background_color.d.comp.r);
- lua_rawseti (L, -2, 1);
- lua_pushnumber (L, bl->background_color.d.comp.g);
- lua_rawseti (L, -2, 2);
- lua_pushnumber (L, bl->background_color.d.comp.b);
- lua_rawseti (L, -2, 3);
- lua_settable (L, -3);
- }
-
- if (bl->style.len > 0) {
- lua_pushstring (L, "style");
- t = lua_newuserdata (L, sizeof (*t));
- t->start = bl->style.start;
- t->len = bl->style.len;
- t->own = FALSE;
- lua_settable (L, -3);
- }
-
+ lua_html_push_block (L, bl);
lua_rawseti (L, -2, i + 1);
}
}
@@ -597,6 +606,9 @@ lua_html_tag_get_extra (lua_State *L)
img = tag->extra;
lua_html_push_image (L, img);
}
+ else if (tag->flags & FL_BLOCK) {
+ lua_html_push_block (L, tag->extra);
+ }
else {
/* Unknown extra ? */
lua_pushnil (L);