Source

syntaxhighlighter / demo.py

Full commit
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import QApplication, QMainWindow, QPlainTextEdit, QFont
from highlighter import SyntaxHighlighter, load_syntax, Format, TextCharFormat
from highlighter.python27 import syntax
#from highlighter.js import syntax

scheme = {
  "syntax_comment": dict(color="green", italic=True),
  "syntax_string": "magenta",
  "syntax_builtin": "red",
  "syntax_keyword": ("darkred", True),
  "syntax_number": "blue",
}


class MainWindow(QMainWindow):


    def __init__(self):
        QMainWindow.__init__(self)
        self.resize(800, 600)
        src = open(__file__.rstrip("oc")).read()
        self.edit = QPlainTextEdit(self)
        self.setCentralWidget(self.edit)
        self.edit.setPlainText(src)
        self.edit.cursorPositionChanged.connect(self.on_cursor_position_changed)
        font = QFont()
        font.setFamily("Courier")
        font.setPointSize(10)

        self.edit.setFont(font)
        parts_scanner, code_scanner, formats = load_syntax(syntax, scheme)
        self.hl = SyntaxHighlighter(self.edit.document(),
            parts_scanner, code_scanner, formats, default_font=font)


    def on_cursor_position_changed(self):
        tc = self.edit.textCursor()
        row = tc.blockNumber()
        col = tc.positionInBlock()
        cf = tc.charFormat()
        name = cf.stringProperty(TextCharFormat.NAME)
        self.setWindowTitle("cf: %s (%s,%s)" % (name, row, col))



if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_() or 0)