ProjectKivy/KivyLexer.py

Wed, 12 Jun 2013 20:05:16 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 12 Jun 2013 20:05:16 +0200
changeset 3
b7e3e3b131ea
parent 1
371cfb479eb6
child 11
a3a738778142
permissions
-rw-r--r--

Finished the Kivy project suupport plug-in.

# -*- coding: utf-8 -*-

# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""""
Module implementing a Pygments lexer for the Kivy language.
"""

#
# Lexer class is derived from the highlighter contained in the Kivy package.
# Copyright of the original by the Kivy Team.
#

from pygments.lexer import RegexLexer, bygroups, using
from pygments.lexers.agile import PythonLexer
from pygments.token import Comment, Text, Name, Punctuation, Operator

__all__ = ['KivyLexer']

class KivyLexer(RegexLexer):
    """
    Class implementing a Pygments lexer for the Kivy language.
    """
    name = 'Kivy'
    aliases = ['kivy', 'kv']
    filenames = ['*.kv', '*.kivy']
    mimetypes = ['application/x-kivy']
    tokens = {
        'root': [
            (r'#:.*?$', Comment.Preproc),
            (r'#.*?$', using(PythonLexer)),
            (r'\s+', Text),
            (r'<.+>', Name.Namespace),
            (r'(\[)(\s*)(.*?)(\s*)(@)',
                bygroups(Punctuation, Text, Name.Class, Text, Operator),
                'classList'),
            (r'[A-Za-z][A-Za-z0-9]*$', Name.Attribute),
            (r'(.*?)(\s*)(:)(\s*)$',
                bygroups(Name.Class, Text, Punctuation, Text)),
            (r'(.*?)(\s*)(:)(\s*)(.*?)$',
                bygroups(Name.Attribute, Text, Punctuation, Text,
                using(PythonLexer)))],
        'classList': [
            (r'(,)(\s*)([A-Z][A-Za-z0-9]*)',
                bygroups(Punctuation, Text, Name.Class)),
            (r'(\+)(\s*)([A-Z][A-Za-z0-9]*)',
                bygroups(Operator, Text, Name.Class)),
            (r'\s+', Text),
            (r'[A-Z][A-Za-z0-9]*', Name.Class),
            (r'\]', Punctuation, '#pop')]}

eric ide

mercurial