root/tools/trunk/pygments/lexers/sw.py

Revision 126, 5.1 KB (checked in by phil, 6 years ago)

n3 lexer fix for #21

Line 
1# -*- coding: utf-8 -*-
2"""
3    pygments.lexers.sw
4    ~~~~~~~~~~~~~~~~~~~~~
5
6    Lexers for semantic web languages.
7
8    :copyright: 2007 by Philip Cooper <philip.cooper@openvest.com>.
9    :license: BSD, see LICENSE for more details.
10"""
11
12import re
13
14from pygments.lexer import RegexLexer, include, bygroups
15from pygments.token import Error, Punctuation, \
16     Text, Comment, Operator, Keyword, Name, String, Number, Literal
17from pygments.util import shebang_matches
18
19
20__all__ = ['Notation3Lexer','SparqlLexer']
21
22
23class Notation3Lexer(RegexLexer):
24    """
25    Lexer for the N3 / Turtle / NT
26    """
27    name = 'N3'
28    aliases = ['n3', 'turtle']
29    filenames = ['*.n3', '*.ttl', '*.NT']
30    mimetypes = ['text/rdf+n3','application/x-turtle','application/n3']
31
32    tokens = {
33        'comments': [
34            (r'(\s*#.*)', Comment)
35        ],
36        'root': [
37            include('comments'),
38            (r'(\s*@(?:prefix|base|keywords)\s*)(\w*:\s+)?(<[^> ]*>\s*\.\s*)',bygroups(Keyword,Name.Variable,Name.Namespace)),
39            (r'\s*(<[^>]*\>)', Name.Class, ('triple','predObj')),
40            (r'(\s*[a-zA-Z_:][a-zA-Z0-9\-_:]*\s)', Name.Class, ('triple','predObj')),
41            (r'\s*\[\]\s*', Name.Class, ('triple','predObj')),
42        ],
43        'triple' : [
44            (r'\s*\.\s*', Text, '#pop')
45        ],
46        'predObj': [
47            include('comments'),
48            (r'(\s*[a-zA-Z_:][a-zA-Z0-9\-_:]*\b\s*)', Operator, 'object'),
49            (r'\s*(<[^>]*\>)', Operator, 'object'),
50            (r'\s*\]\s*', Text, '#pop'),
51            (r'(?=\s*\.\s*)', Keyword, '#pop'), 
52        ],
53        'objList': [
54            include('comments'),
55            (r'\s*\)', Text, '#pop'),
56            include('object')
57        ],
58        'object': [
59            include('comments'),
60            (r'\s*\[', Text, 'predObj'),
61            (r'\s*<[^> ]*>', Name.Attribute),
62            (r'\s*("""(?:.|\n)*?""")(\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', bygroups(Literal.String,Text)),
63            (r'\s*".*?[^\\]"(?:\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', Literal.String),
64            (r'\s*[a-zA-Z0-9\-_\:]\s*', Name.Attribute),
65            (r'\s*\(', Text, 'objList'),
66            (r'\s*;\s*\n?', Text, '#pop'),
67            (r'(?=\s*\])', Text, '#pop'),           
68            (r'(?=\s*\.)', Text, '#pop'),           
69        ],
70    }
71
72
73class SparqlLexer(RegexLexer):
74    """
75    Lexer for SPARQL Not Complete
76    """
77    name = 'SPARQL'
78    aliases = ['sparql']
79    filenames = ['*.sparql']
80    mimetypes = ['text/x-sql']
81    flags = re.IGNORECASE
82    tokens = {
83        'comments': [
84            (r'(\s*#.*)', Comment)
85        ],
86        'root': [
87            include('comments'),       
88            (r'(\s*(?:PREFIX|BASE)\s+)(\w*:\w*)?(\s*<[^> ]*>\s*)',bygroups(Keyword,Name.Variable,Name.Namespace)),
89            (r'(\s*#.*)', Comment),
90            (r'((?:SELECT|ASK|CONSTRUCT|DESCRIBE)\s*(?:DISTINCT|REDUCED)?\s*)((?:\?[a-zA-Z0-9_-]+\s*)+|\*)(\s*)',bygroups(Keyword,Name.Variable,Text)),
91            (r'(FROM\s*(?:NAMED)?)(\s*.*)', bygroups(Keyword,Text)),
92            (r'(WHERE)?\s*({)',bygroups(Keyword,Text),'graph'),
93            (r'(LIMIT|OFFSET)(\s*[+-]?[0-9]+)',bygroups(Keyword,Literal.String)),
94        ],
95        'graph':[
96            (r'\s*(<[^>]*\>)', Name.Class, ('triple','predObj')),
97            (r'(\s*[a-zA-Z_0-9\-]*:[a-zA-Z0-9\-_]*\s)', Name.Class, ('triple','predObj')),
98            (r'(\s*\?[a-zA-Z0-9_-]*)', Name.Variable, ('triple','predObj')),           
99            (r'\s*\[\]\s*', Name.Class, ('triple','predObj')),
100            (r'\s*(FILTER\s*)((?:regex)?\()',bygroups(Keyword,Text),'filterExp'),
101            (r'\s*}', Text, '#pop'),
102        ],
103        'triple' : [
104            (r'(?=\s*})', Text, '#pop'),                   
105            (r'\s*\.\s*', Text, '#pop'),
106        ],
107        'predObj': [
108            include('comments'),
109            (r'(\s*\?[a-zA-Z0-9_-]*\b\s*)', Name.Variable,'object'),           
110            (r'(\s*[a-zA-Z_:][a-zA-Z0-9\-_:]*\b\s*)', Operator, 'object'),
111            (r'\s*(<[^>]*\>)', Operator, 'object'),
112            (r'\s*\]\s*', Text, '#pop'),
113            (r'(?=\s*\.\s*)', Keyword, '#pop'), 
114        ],
115        'objList': [
116            (r'\s*\)', Text, '#pop'),
117            include('object'),
118        ],
119        'object': [
120            include('variable'),
121            (r'\s*\[', Text, 'predObj'),
122            (r'\s*<[^> ]*>', Name.Attribute),
123            (r'\s*("""(?:.|\n)*?""")(\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', bygroups(Literal.String,Text)),
124            (r'\s*".*?[^\\]"(?:\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', Literal.String),
125            (r'\s*[a-zA-Z0-9\-_\:]\s*', Name.Attribute),
126            (r'\s*\(', Text, 'objList'),
127            (r'\s*;\s*', Text, '#pop'),
128            (r'(?=\])', Text, '#pop'),           
129            (r'(?=\.)', Text, '#pop'),           
130        ],
131        'variable':[
132            (r'(\?[a-zA-Z0-9\-_]+\s*)', Name.Variable),           
133        ],
134        'filterExp':[
135            include('variable'),
136            include('object'),
137            (r'\s*[+*/<>=~!%&|-]+\s*', Operator),
138            (r'\s*\)', Text, '#pop'),           
139        ],
140
141    }
142
Note: See TracBrowser for help on using the browser.