From 5bf3c9930ff3222ca13cd36d96de921a5834f281 Mon Sep 17 00:00:00 2001 From: dockes Date: Mon, 15 Sep 2008 07:55:15 +0000 Subject: [PATCH] *** empty log message *** --- src/filters/rclpython | 233 +++++++++++++++++++++++++++++ src/qtgui/mtpics/pidgin.png | Bin 0 -> 3564 bytes src/qtgui/mtpics/text-x-python.png | Bin 0 -> 3788 bytes 3 files changed, 233 insertions(+) create mode 100755 src/filters/rclpython create mode 100644 src/qtgui/mtpics/pidgin.png create mode 100644 src/qtgui/mtpics/text-x-python.png diff --git a/src/filters/rclpython b/src/filters/rclpython new file mode 100755 index 00000000..f3ba764f --- /dev/null +++ b/src/filters/rclpython @@ -0,0 +1,233 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - Python source parser and colorizer +""" + +# Rclpython is verbatim "colorize.py" from: +# http://chrisarndt.de/en/software/python/colorize.html +# +# 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. +# +# Christopher Arndt : +# - make script usable as a module +# - use class tags and style sheet instead of + +""" + +class Parser: + """ Send colored python source. + """ + + stylesheet = _STYLESHEET + + def __init__(self, raw, out=sys.stdout): + """ Store the source text. + """ + self.raw = string.strip(string.expandtabs(raw)) + self.out = out + + def format(self): + """ Parse and send the colored source. + """ + # store line offsets in self.lines + self.lines = [0, 0] + pos = 0 + while 1: + pos = string.find(self.raw, '\n', pos) + 1 + if not pos: break + self.lines.append(pos) + self.lines.append(len(self.raw)) + + # parse the source and write it + self.pos = 0 + text = cStringIO.StringIO(self.raw) + self.out.write(self.stylesheet) + self.out.write('
\n')
+        try:
+            tokenize.tokenize(text.readline, self)
+        except tokenize.TokenError, ex:
+            msg = ex[0]
+            line = ex[1][0]
+            self.out.write("

ERROR: %s

%s\n" % ( + msg, self.raw[self.lines[line]:])) + self.out.write('\n
') + + def __call__(self, toktype, toktext, (srow,scol), (erow,ecol), line): + """ Token handler. + """ + if 0: + print "type", toktype, token.tok_name[toktype], "text", toktext, + print "start", srow,scol, "end", erow,ecol, "
" + + # calculate new positions + oldpos = self.pos + newpos = self.lines[srow] + scol + self.pos = newpos + len(toktext) + + # handle newlines + if toktype in [token.NEWLINE, tokenize.NL]: + self.out.write('\n') + return + + # send the original whitespace, if needed + if newpos > oldpos: + self.out.write(self.raw[oldpos:newpos]) + + # skip indenting tokens + if toktype in [token.INDENT, token.DEDENT]: + self.pos = newpos + return + + # map token type to a color group + if token.LPAR <= toktype and toktype <= token.OP: + toktype = token.OP + elif toktype == token.NAME and keyword.iskeyword(toktext): + toktype = _KEYWORD + css_class = _css_classes.get(toktype, 'text') + + # send text + self.out.write('' % (css_class,)) + self.out.write(cgi.escape(toktext)) + self.out.write('') + + +def colorize_file(file=None, outstream=sys.stdout, standalone=True): + """Convert a python source file into colorized HTML. + + Reads file and writes to outstream (default sys.stdout). file can be a + filename or a file-like object (only the read method is used). If file is + None, act as a filter and read from sys.stdin. If standalone is True + (default), send a complete HTML document with header and footer. Otherwise + only a stylesheet and a
 section are written.
+    """
+
+    from os.path import basename
+    if hasattr(file, 'read'):
+        sourcefile = file
+        file = None
+        try:
+            filename = basename(file.name)
+        except:
+            filename = 'STREAM'
+    elif file is not None:
+        try:
+            sourcefile = open(file)
+            filename = basename(file)
+        except IOError:
+            raise SystemExit("File %s unknown." % file)
+    else:
+        sourcefile = sys.stdin
+        filename = 'STDIN'
+    source = sourcefile.read()
+
+    if standalone:
+        outstream.write(_HTML_HEADER % {'title': filename})
+    Parser(source, out=outstream).format()
+    if standalone:
+        outstream.write(_HTML_FOOTER)
+
+    if file:
+        sourcefile.close()
+
+if __name__ == "__main__":
+    import os
+    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)
+    elif len(sys.argv) > 1:
+        filepath = sys.argv[1]
+        colorize_file(filepath)
+    else:
+        colorize_file()
diff --git a/src/qtgui/mtpics/pidgin.png b/src/qtgui/mtpics/pidgin.png
new file mode 100644
index 0000000000000000000000000000000000000000..473c1af2f8d3c71b38d3ffe524ce805623f21295
GIT binary patch
literal 3564
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