view mod_latex/mod_latex.lua @ 6253:502963b86fbc

:multble modules: fix tab-> space diff --git a/mod_admin_blocklist/README.md b/mod_admin_blocklist/README.md --- a/mod_admin_blocklist/README.md +++ b/mod_admin_blocklist/README.md @@ -24,9 +24,9 @@ admin_blocklist_roles = { "prosody:opera # Compatibility Prosody-Version Status - -------------- ------ - trunk* Works - 13 Works - 0.12 Works + ------------ ------ + trunk* Works + 13 Works + 0.12 Works *as of 2025-06-13 diff --git a/mod_csi_grace_period/README.md b/mod_csi_grace_period/README.md --- a/mod_csi_grace_period/README.md +++ b/mod_csi_grace_period/README.md @@ -16,9 +16,9 @@ pocket is not the best use of radio time Works with [mod_csi_simple][doc:modules:mod_csi_simple] which is included with Prosody. - ------- ------- - trunk* Works - 13 Works - 0.12 Works + ------- ------- + trunk* Works + 13 Works + 0.12 Works *as of 2025-06-13 diff --git a/mod_http_upload_external/README.md b/mod_http_upload_external/README.md --- a/mod_http_upload_external/README.md +++ b/mod_http_upload_external/README.md @@ -87,10 +87,10 @@ Compatibility ============= Prosody-Version Status - ---------------- -------------------- - trunk Works as of 25-06-13 - 13 Works - 0.12 Works + ---------------- -------------------- + trunk Works as of 25-06-13 + 13 Works + 0.12 Works Implementation ============== diff --git a/mod_muc_moderation/README.md b/mod_muc_moderation/README.md --- a/mod_muc_moderation/README.md +++ b/mod_muc_moderation/README.md @@ -27,11 +27,10 @@ modules_enabled = { # Compatibility - ------- --------------- - trunk Works^[as of 2025-06-13] - 13 Works - 0.12 Works - ------- --------------- + ------- --------------- + trunk Works^[as of 2025-06-13] + 13 Works + 0.12 Works ## XEP version diff --git a/mod_s2s_idle_timeout/README.md b/mod_s2s_idle_timeout/README.md --- a/mod_s2s_idle_timeout/README.md +++ b/mod_s2s_idle_timeout/README.md @@ -25,10 +25,9 @@ Compatibility ============= Prosody Version Status - ----------------- ----------- - trunk[^1] Works - 13 Works - 0.12 Works - ----------------- ----------- + ----------------- ----------- + trunk[^1] Works + 13 Works + 0.12 Works [^1]: as of 2025-06-13 diff --git a/mod_s2s_keepalive/README.md b/mod_s2s_keepalive/README.md --- a/mod_s2s_keepalive/README.md +++ b/mod_s2s_keepalive/README.md @@ -34,10 +34,9 @@ Compatibility ============= Prosody Version Status - ----------------- ----------- - trunk[^1] Works - 13 Works - 0.12 Works - ----------------- ----------- + ----------------- ----------- + trunk[^1] Works + 13 Works + 0.12 Works [^1]: as of 2025-06-13
author Menel <menel@snikket.de>
date Fri, 13 Jun 2025 09:58:51 +0200
parents df8da7e4c2bf
children
line wrap: on
line source

local st = require "stanza";
local urlencode = require "net.http".urlencode;

local xmlns_xhtmlim = "http://jabber.org/protocol/xhtml-im";
local xmlns_xhtml = "http://www.w3.org/1999/xhtml";

local function replace_latex(data)
	local origin, stanza = data.origin, data.stanza;
	local body = stanza:get_child_text("body");
	if not body or not body:match("%$%$") then
		return;
	end
	module:log("debug", "Replacing latex...");

	local html = st.stanza("html", { xmlns = xmlns_xhtmlim })
		:tag("body", { xmlns = xmlns_xhtml });

	local in_latex, last_char;
	for snippet, up_to in body:gmatch("(.-)%$%$()") do
		last_char = up_to;
		if in_latex then
			-- Render latex and add image, next snippet is text
			in_latex = nil;
			html:tag("img", { src = "http://www.mathtran.org/cgi-bin/mathtran?D=2;tex="..urlencode(snippet), alt = snippet }):up();
		else
			-- Add text to HTML, next snippet is latex
			in_latex = true;
			html:tag("span"):text(snippet):up();

		end
	end
	if last_char < #body then
		html:tag("span"):text(body:sub(last_char, #body)):up();
	end

	for n, tag in ipairs(stanza.tags) do
		module:log("debug", "Tag: %s|%s", tag.attr.xmlns or "", tag.name or "");
		if tag.name == "html" and tag.attr.xmlns == xmlns_xhtmlim then
			stanza.tags[n] = html;
			for n, child in ipairs(stanza) do
				if child == tag then
					stanza[n] = html;
				end
			end
			return;
		end
	end

	stanza[#stanza+1] = html;
	stanza.tags[#stanza.tags+1] = html;
end

module:hook("message/bare", replace_latex, 30);
module:hook("message/full", replace_latex, 30);