Annotate

mod_latex/mod_latex.lua @ 126:e190c1643a8f

mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
author Matthew Wild <mwild1@gmail.com>
date Wed, 27 Jan 2010 20:50:52 +0000
child 1343:7dbde05b48a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
126
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local st = require "stanza";
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local urlencode = require "net.http".urlencode;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local xmlns_xhtmlim = "http://jabber.org/protocol/xhtml-im";
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local xmlns_xhtml = "http://www.w3.org/1999/xhtml";
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local function replace_latex(data)
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 module:log("debug", "Replacing latex...");
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local origin, stanza = data.origin, data.stanza;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 local body = stanza:child_with_name("body");
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 if not body then return; end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 body = body:get_text();
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 if not body:match("%$%$") then
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 return;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 local html = st.stanza("html", { xmlns = xmlns_xhtmlim })
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 :tag("body", { xmlns = xmlns_xhtml });
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local in_latex, last_char;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 for snippet, up_to in body:gmatch("(.-)%$%$()") do
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 last_char = up_to;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 if in_latex then
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 -- Render latex and add image, next snippet is text
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 in_latex = nil;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 html:tag("img", { src = "http://www.mathtran.org/cgi-bin/mathtran?D=2;tex="..urlencode(snippet), alt = snippet }):up();
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 else
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 -- Add text to HTML, next snippet is latex
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 in_latex = true;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 html:tag("span"):text(snippet):up();
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 if last_char < #body then
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 html:tag("span"):text(body:sub(last_char, #body)):up();
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 for n, tag in ipairs(stanza.tags) do
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 module:log("debug", "Tag: %s|%s", tag.attr.xmlns or "", tag.name or "");
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 if tag.name == "html" and tag.attr.xmlns == xmlns_xhtmlim then
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 stanza.tags[n] = html;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 for n, child in ipairs(stanza) do
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 if child == tag then
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 stanza[n] = html;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 return;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 stanza[#stanza+1] = html;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 stanza.tags[#stanza.tags+1] = html;
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 end
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 module:hook("message/bare", replace_latex, 30);
e190c1643a8f mod_latex: New (well, kind of) module for rendering LaTeX in messages and replacing with a rendered embedded image
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 module:hook("message/full", replace_latex, 30);