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