From f50a4e54b137a8689c2f16953f7104cc965e5b45 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Wed, 4 Nov 2020 10:32:18 +0100 Subject: [PATCH] rclpython: renamed rclpython.py. Use rclexecm. Only colorize for preview, not indexing --- src/Makefile.am | 2 +- src/filters/{rclpython => rclpython.py} | 74 ++++++++++++++----------- 2 files changed, 43 insertions(+), 33 deletions(-) rename src/filters/{rclpython => rclpython.py} (79%) diff --git a/src/Makefile.am b/src/Makefile.am index 16cfbf65..6370e2b0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -708,7 +708,7 @@ filters/rclppt.py \ filters/rclps \ filters/rclpst.py \ filters/rclpurple \ -filters/rclpython \ +filters/rclpython.py \ filters/rclrar \ filters/rclrtf.py \ filters/rclscribus \ diff --git a/src/filters/rclpython b/src/filters/rclpython.py similarity index 79% rename from src/filters/rclpython rename to src/filters/rclpython.py index e1e43dc2..680232b4 100755 --- a/src/filters/rclpython +++ b/src/filters/rclpython.py @@ -1,13 +1,9 @@ -#!/usr/bin/env python3 -# -*- coding: iso-8859-1 -*- -""" - MoinMoin - Python source parser and colorizer -""" +#!/usr/bin/python3 -# Rclpython is verbatim "colorize.py" from: +# Rclpython is based on "colorize.py" from: # http://chrisarndt.de/en/software/python/colorize.html # -# Based on the code from Jürgen Herman, the following changes where made: +# Based on the code from Jürgen Herman, the following changes where made: # # Mike Brown : # - make script callable as a CGI and a Apache handler for .py files. @@ -22,25 +18,21 @@ # - parse script encoding and allow output in any encoding by using unicode # as intermediate -from __future__ import print_function __version__ = '0.3' __date__ = '2005-07-04' __license__ = 'GPL' -__author__ = 'Jürgen Hermann, Mike Brown, Christopher Arndt' +__author__ = 'Jürgen Hermann, Mike Brown, Christopher Arndt' # Imports -import string, sys +import rclexecm +from rclbasehandler import RclBaseHandler +import string, sys, os import html import io import keyword, token, tokenize -def makebytes(data): - if type(data) == type(u''): - return data.encode("UTF-8") - return data - ############################################################################# ### Python Source Parser (does Hilighting) ############################################################################# @@ -140,7 +132,7 @@ class Parser: # parse the source and write it self.pos = 0 text = io.BytesIO(self.raw) - self.out.write(makebytes(self.stylesheet)) + self.out.write(rclexecm.makebytes(self.stylesheet)) self.out.write(b'
\n')
         try:
             for a,b,c,d,e in tokenize.tokenize(text.readline):
@@ -195,8 +187,8 @@ class Parser:
         css_class = _css_classes.get(toktype, 'text')
 
         # send text
-        self.out.write(makebytes('' % (css_class,)))
-        self.out.write(makebytes(html.escape(toktext)))
+        self.out.write(rclexecm.makebytes('' % (css_class,)))
+        self.out.write(rclexecm.makebytes(html.escape(toktext)))
         self.out.write(b'')
 
 
@@ -230,23 +222,41 @@ def colorize_file(file=None, outstream=sys.stdout, standalone=True):
     source = sourcefile.read()
 
     if standalone:
-        outstream.write(makebytes(_HTML_HEADER % {'title': filename}))
+        outstream.write(rclexecm.makebytes(_HTML_HEADER % {'title': filename}))
     Parser(source, out=outstream).format()
     if standalone:
-        outstream.write(makebytes(_HTML_FOOTER))
+        outstream.write(rclexecm.makebytes(_HTML_FOOTER))
 
     if file:
         sourcefile.close()
 
-if __name__ == "__main__":
-    import os
-    out = sys.stdout.buffer
-    if os.environ.get('PATH_TRANSLATED'):
-        filepath = os.environ.get('PATH_TRANSLATED')
-        print('Content-Type: text/html; charset="iso-8859-1"\n')
-        colorize_file(filepath, out)
-    elif len(sys.argv) > 1:
-        filepath = sys.argv[1]
-        colorize_file(filepath, out)
-    else:
-        colorize_file()
+
+def _htmlwrapplain(txt, title=b"", charset=b"utf-8"):
+    return \
+        b'\n\n' + \
+        title + \
+        b'\n' + \
+        b'\n' + \
+        b'\n
\n' + \
+        rclexecm.htmlescape(txt) + \
+        b'
\n\n\n' + +class PythonDump(RclBaseHandler): + def __init__(self, em): + super(PythonDump, self).__init__(em) + + def html_text(self, fn): + preview = os.environ.get("RECOLL_FILTER_FORPREVIEW", "no") + if preview == "yes": + out = io.BytesIO() + colorize_file(fn, out) + return out.getvalue() + else: + return _htmlwrapplain(open(fn, 'rb').read()) + +if __name__ == '__main__': + proto = rclexecm.RclExecM() + extract = PythonDump(proto) + rclexecm.main(proto, extract)