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

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

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

""" 

    pygments.lexers.rdf 

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

 

    Lexers for semantic web and RDF query languages and markup. 

 

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

    :license: BSD, see LICENSE for details. 

""" 

 

import re 

 

from pygments.lexer import RegexLexer, bygroups, default 

from pygments.token import Keyword, Punctuation, String, Number, Operator, \ 

    Whitespace, Name, Literal, Comment, Text 

 

__all__ = ['SparqlLexer'] 

 

 

class SparqlLexer(RegexLexer): 

    """ 

    Lexer for `SPARQL <http://www.w3.org/TR/rdf-sparql-query/>`_ query language. 

 

    .. versionadded:: 2.0 

    """ 

    name = 'SPARQL' 

    aliases = ['sparql'] 

    filenames = ['*.rq', '*.sparql'] 

    mimetypes = ['application/sparql-query'] 

 

    flags = re.IGNORECASE 

 

    tokens = { 

        'root': [ 

            (r'\s+', Whitespace), 

            (r'(select|construct|describe|ask|where|filter|group\s+by|minus|' 

             r'distinct|reduced|from named|from|order\s+by|limit|' 

             r'offset|bindings|load|clear|drop|create|add|move|copy|' 

             r'insert\s+data|delete\s+data|delete\s+where|delete|insert|' 

             r'using named|using|graph|default|named|all|optional|service|' 

             r'silent|bind|union|not in|in|as|a)', Keyword), 

            (r'(prefix|base)(\s+)([a-z][\w-]*)(\s*)(\:)', 

             bygroups(Keyword, Whitespace, Name.Namespace, Whitespace, 

                      Punctuation)), 

            (r'\?[a-z_]\w*', Name.Variable), 

            (r'<[^>]+>', Name.Label), 

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

             bygroups(Name.Namespace, Punctuation, Name.Tag)), 

            (r'(str|lang|langmatches|datatype|bound|iri|uri|bnode|rand|abs|' 

             r'ceil|floor|round|concat|strlen|ucase|lcase|encode_for_uri|' 

             r'contains|strstarts|strends|strbefore|strafter|year|month|day|' 

             r'hours|minutes|seconds|timezone|tz|now|md5|sha1|sha256|sha384|' 

             r'sha512|coalesce|if|strlang|strdt|sameterm|isiri|isuri|isblank|' 

             r'isliteral|isnumeric|regex|substr|replace|exists|not exists|' 

             r'count|sum|min|max|avg|sample|group_concat|separator)\b', 

             Name.Function), 

            (r'(true|false)', Literal), 

            (r'[+\-]?\d*\.\d+', Number.Float), 

            (r'[+\-]?\d*(:?\.\d+)?E[+\-]?\d+', Number.Float), 

            (r'[+\-]?\d+', Number.Integer), 

            (r'(\|\||&&|=|\*|\-|\+|/)', Operator), 

            (r'[(){}.;,:^]', Punctuation), 

            (r'#[^\n]+', Comment), 

            (r'"""', String, 'triple-double-quoted-string'), 

            (r'"', String, 'single-double-quoted-string'), 

            (r"'''", String, 'triple-single-quoted-string'), 

            (r"'", String, 'single-single-quoted-string'), 

        ], 

        'triple-double-quoted-string': [ 

            (r'"""', String, 'end-of-string'), 

            (r'[^\\]+', String), 

            (r'\\', String, 'string-escape'), 

        ], 

        'single-double-quoted-string': [ 

            (r'"', String, 'end-of-string'), 

            (r'[^"\\\n]+', String), 

            (r'\\', String, 'string-escape'), 

        ], 

        'triple-single-quoted-string': [ 

            (r"'''", String, 'end-of-string'), 

            (r'[^\\]+', String), 

            (r'\\', String, 'string-escape'), 

        ], 

        'single-single-quoted-string': [ 

            (r"'", String, 'end-of-string'), 

            (r"[^'\\\n]+", String), 

            (r'\\', String, 'string-escape'), 

        ], 

        'string-escape': [ 

            (r'.', String, '#pop'), 

        ], 

        'end-of-string': [ 

            (r'(@)([a-z]+(:?-[a-z0-9]+)*)', 

             bygroups(Operator, Name.Function), '#pop:2'), 

            (r'\^\^', Operator, '#pop:2'), 

            default('#pop:2'), 

        ], 

    }