| 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 | |
|---|
| 12 | import re |
|---|
| 13 | |
|---|
| 14 | from pygments.lexer import RegexLexer, include, bygroups |
|---|
| 15 | from pygments.token import Error, Punctuation, \ |
|---|
| 16 | Text, Comment, Operator, Keyword, Name, String, Number, Literal |
|---|
| 17 | from pygments.util import shebang_matches |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | __all__ = ['Notation3Lexer','SparqlLexer'] |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | class 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 | |
|---|
| 73 | class 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 | } |
|---|