Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

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

""" 

    pygments.lexers.graph 

    ~~~~~~~~~~~~~~~~~~~~~ 

 

    Lexers for graph query languages. 

 

    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. 

    :license: BSD, see LICENSE for details. 

""" 

 

import re 

 

from pygments.lexer import RegexLexer, include, bygroups, using, this 

from pygments.token import Keyword, Punctuation, Comment, Operator, Name,\ 

    String, Number, Whitespace 

 

 

__all__ = ['CypherLexer'] 

 

 

class CypherLexer(RegexLexer): 

    """ 

    For `Cypher Query Language 

    <http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html>`_ 

 

    For the Cypher version in Neo4J 2.0 

 

    .. versionadded:: 2.0 

    """ 

    name = 'Cypher' 

    aliases = ['cypher'] 

    filenames = ['*.cyp', '*.cypher'] 

 

    flags = re.MULTILINE | re.IGNORECASE 

 

    tokens = { 

        'root': [ 

            include('comment'), 

            include('keywords'), 

            include('clauses'), 

            include('relations'), 

            include('strings'), 

            include('whitespace'), 

            include('barewords'), 

        ], 

        'comment': [ 

            (r'^.*//.*\n', Comment.Single), 

        ], 

        'keywords': [ 

            (r'(create|order|match|limit|set|skip|start|return|with|where|' 

             r'delete|foreach|not|by)\b', Keyword), 

        ], 

        'clauses': [ 

            # TODO: many missing ones, see http://docs.neo4j.org/refcard/2.0/ 

            (r'(all|any|as|asc|create|create\s+unique|delete|' 

             r'desc|distinct|foreach|in|is\s+null|limit|match|none|' 

             r'order\s+by|return|set|skip|single|start|union|where|with)\b', 

             Keyword), 

        ], 

        'relations': [ 

            (r'(-\[)(.*?)(\]->)', bygroups(Operator, using(this), Operator)), 

            (r'(<-\[)(.*?)(\]-)', bygroups(Operator, using(this), Operator)), 

            (r'-->|<--|\[|\]', Operator), 

            (r'<|>|<>|=|<=|=>|\(|\)|\||:|,|;', Punctuation), 

            (r'[.*{}]', Punctuation), 

        ], 

        'strings': [ 

            (r'"(?:\\[tbnrf\'"\\]|[^\\"])*"', String), 

            (r'`(?:``|[^`])+`', Name.Variable), 

        ], 

        'whitespace': [ 

            (r'\s+', Whitespace), 

        ], 

        'barewords': [ 

            (r'[a-z]\w*', Name), 

            (r'\d+', Number), 

        ], 

    }