user/dev discussion of public-inbox itself
 help / color / Atom feed
From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH 4/5] examples: cgit filter for use with WwwHighlight
Date: Wed, 24 Apr 2019 23:02:13 +0000
Message-ID: <20190424230214.2378-5-e@80x24.org> (raw)
In-Reply-To: <20190424230214.2378-1-e@80x24.org>

I'm using this as the cgit about-filter and source-filter
in https://80x24.org/public-inbox.git
---
 MANIFEST                              |  1 +
 examples/cgit-wwwhighlight-filter.lua | 57 +++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 examples/cgit-wwwhighlight-filter.lua

diff --git a/MANIFEST b/MANIFEST
index 9858b9e..ed8ff49 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -39,6 +39,7 @@ examples/apache2_perl.conf
 examples/apache2_perl_old.conf
 examples/cgi-webrick.rb
 examples/cgit-commit-filter.lua
+examples/cgit-wwwhighlight-filter.lua
 examples/cgit.psgi
 examples/highlight.psgi
 examples/logrotate.conf
diff --git a/examples/cgit-wwwhighlight-filter.lua b/examples/cgit-wwwhighlight-filter.lua
new file mode 100644
index 0000000..dafb7a8
--- /dev/null
+++ b/examples/cgit-wwwhighlight-filter.lua
@@ -0,0 +1,57 @@
+-- Copyright (C) 2019 all contributors <meta@public-inbox.org>
+-- License: GPL-2.0+ <https://www.gnu.org/licenses/gpl-2.0.txt>
+--
+-- This filter accesses the PublicInbox::WwwHighlight PSGI endpoint
+-- (see examples/highlight.psgi)
+--
+-- Dependencies: lua-http
+--
+-- disclaimer: written by someone who does not know Lua.
+--
+-- This requires cgit linked with Lua
+-- Usage (in your cgitrc(5) config file):
+--
+--   source-filter=lua:/path/to/this/script.lua
+--   about-filter=lua:/path/to/this/script.lua
+--
+local wwwhighlight_url = 'http://127.0.0.1:9090/'
+local req_timeout = 10
+
+-- this is nil when used as about-filter
+local fn
+
+function filter_open(...)
+	req_body = ""
+	fn = select(1, ...)
+	if fn then
+		local http_util = require 'http.util'
+		wwwhighlight_url = wwwhighlight_url .. http_util.encodeURI(fn)
+	end
+end
+
+-- buffer the entire source in memory
+function filter_write(str)
+	req_body = req_body .. str
+end
+
+function filter_close()
+	local request = require 'http.request'
+	local req = request.new_from_uri(wwwhighlight_url)
+	req.headers:upsert(':method', 'PUT')
+	req:set_body(req_body)
+	local headers, stream = req:go(req_timeout)
+	local body, err = stream:get_body_as_string()
+	if fn then
+		html("<pre>")
+	end
+	if not body and err then
+		io.stderr:write(tostring(err), "\n")
+		html_txt(req_body)
+	else
+		html(body)
+	end
+	if fn then
+		html("</pre>")
+	end
+	return 0
+end
-- 
EW


  parent reply index

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-24 23:02 [PATCH 0/5] cgit + WwwHighlight.pm integration Eric Wong
2019-04-24 23:02 ` [PATCH 1/5] wwwhighlight: do linkification, too Eric Wong
2019-04-24 23:02 ` [PATCH 2/5] examples/cgit-commit-filter: remove unused variable Eric Wong
2019-04-24 23:02 ` [PATCH 3/5] wwwhighlight: deal with no-op highlight Eric Wong
2019-04-24 23:02 ` Eric Wong [this message]
2019-04-25  3:19   ` [PATCH v2] examples: cgit filter for use with WwwHighlight Eric Wong
2019-04-25  3:25     ` Eric Wong
2019-04-24 23:02 ` [PATCH 5/5] examples/cgit-commit-filter.lua: some doc updates Eric Wong

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://public-inbox.org/README

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190424230214.2378-5-e@80x24.org \
    --to=e@80x24.org \
    --cc=meta@public-inbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

user/dev discussion of public-inbox itself

Archives are clonable:
	git clone --mirror http://public-inbox.org/meta
	git clone --mirror http://czquwvybam4bgbro.onion/meta
	git clone --mirror http://hjrcffqmbrq6wope.onion/meta
	git clone --mirror http://ou63pmih66umazou.onion/meta

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta
	nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta
	nntp://news.gmane.org/gmane.mail.public-inbox.general

 note: .onion URLs require Tor: https://www.torproject.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox