Changeset 118

Show
Ignore:
Timestamp:
04/11/08 17:06:18 (4 years ago)
Author:
phil
Message:

pygments SPARQL Lexer addition

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • tools/trunk/pygments/lexers/sw.py

    r70 r118  
    7171class SparqlLexer(RegexLexer): 
    7272    """ 
    73     Lexer for SPARQL This is a stubb It don't work yet 
    74     I haven't started on it.   
     73    Lexer for SPARQL Not Complete 
    7574    """ 
    7675    name = 'SPARQL' 
     
    8079    flags = re.IGNORECASE 
    8180    tokens = { 
     81        'comments': [ 
     82            (r'(\s*#.*)', Comment) 
     83        ], 
    8284        'root': [ 
     85            include('comments'),         
    8386            (r'(\s*PREFIX\s)(\s*\w*:\s+)(<[^> ]*>\s*)',bygroups(Keyword,Name.Variable,Name.Namespace)), 
    8487            (r'(\s*#.*)', Comment), 
    85             (r'\s+', Text), 
    86             (r'--.*?\n', Comment.Single), 
    87             (r'/\*', Comment.Multiline, 'multiline-comments'), 
    88             (r'(SELECT|FILTER|LIMIT|WHERE|' 
    89              r'WITH|WITHOUT|WORK|WRITE|YEAR|ZONE)\b', Keyword), 
    90             (r'(ARRAY|BIGINT|BINARY|BIT|BLOB|BOOLEAN|CHAR|CHARACTER|DATE|' 
    91              r'DEC|DECIMAL|FLOAT|INT|INTEGER|INTERVAL|NUMBER|NUMERIC|REAL|' 
    92              r'SERIAL|SMALLINT|VARCHAR|VARYING|INT8|SERIAL8|TEXT)\b', 
    93              Name.Builtin), 
    94             (r'[+*/<>=~!@#%^&|`?^-]', Operator), 
    95             (r'[0-9]+', Number.Integer), 
    96             (r"'(''|[^'])*'", String.Single), 
    97             (r'"(""|[^"])*"', String.Symbol),  
    98             (r"`(``|[^`])*`", String.Backtick), 
    99             (r'[a-zA-Z_][a-zA-Z0-9_]*', Name), 
    100             (r'[;:()\[\],\.]', Punctuation) 
     88            (r'((?:SELECT|ASK|CONSTRUCT)\s*(?:DISTINCT|REDUCED)?\s*)((?:\?[a-zA-Z0-9_-]+\s*)+|\*)(\s*)',bygroups(Keyword,Name.Variable,Text)), 
     89            (r'(FROM\s*(?:NAMED)?)(\s*.*)', bygroups(Keyword,Text)), 
     90            (r'(WHERE)?\s*({)',bygroups(Keyword,Text),'graph'), 
     91            (r'(LIMIT|OFFSET)(\s*[+-]?[0-9]+)',bygroups(Keyword,Literal.String)), 
    10192        ], 
    102         'multiline-comments': [ 
    103             (r'/\*', Comment.Multiline, 'multiline-comments'), 
    104             (r'\*/', Comment.Multiline, '#pop'), 
    105             (r'[^/\*]+', Comment.Multiline), 
    106             (r'[/*]', Comment.Multiline) 
    107         ] 
     93        'graph':[ 
     94            (r'\s*(<[^>]*\>)', Name.Class, ('triple','predObj')), 
     95            (r'(\s*[a-zA-Z_0-9\-]*:[a-zA-Z0-9\-_]*\s)', Name.Class, ('triple','predObj')), 
     96            (r'(\s*\?[a-zA-Z0-9_-]*)', Name.Variable, ('triple','predObj')),             
     97            (r'\s*\[\]\s*', Name.Class, ('triple','predObj')), 
     98            (r'\s*(FILTER\s*)((?:regex)?\()',bygroups(Keyword,Text),'filterExp'), 
     99            (r'\s*}', Text, '#pop'), 
     100        ], 
     101        'triple' : [ 
     102            (r'(?=\s*})', Text, '#pop'),                     
     103            (r'\s*\.\s*', Text, '#pop'), 
     104        ], 
     105        'predObj': [ 
     106            include('comments'), 
     107            (r'(\s*\?[a-zA-Z0-9_-]*\b\s*)', Name.Variable,'object'),             
     108            (r'(\s*[a-zA-Z_:][a-zA-Z0-9\-_:]*\b\s*)', Operator, 'object'), 
     109            (r'\s*(<[^>]*\>)', Operator, 'object'), 
     110            (r'\s*\]\s*', Text, '#pop'), 
     111            (r'(?=\s*\.\s*)', Keyword, '#pop'),  
     112        ], 
     113        'objList': [ 
     114            (r'\s*\)', Text, '#pop'), 
     115            include('object'), 
     116        ], 
     117        'object': [ 
     118            include('variable'), 
     119            (r'\s*\[', Text, 'predObj'), 
     120            (r'\s*<[^> ]*>', Name.Attribute), 
     121            (r'\s*("""(?:.|\n)*?""")(\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', bygroups(Literal.String,Text)), 
     122            (r'\s*".*?[^\\]"(?:\@[a-z]{2-4}|\^\^<?[a-zA-Z0-9\-\:_#/\.]*>?)?\s*', Literal.String), 
     123            (r'\s*[a-zA-Z0-9\-_\:]\s*', Name.Attribute), 
     124            (r'\s*\(', Text, 'objList'), 
     125            (r'\s*;\s*', Text, '#pop'), 
     126            (r'(?=\])', Text, '#pop'),             
     127            (r'(?=\.)', Text, '#pop'),            
     128        ], 
     129        'variable':[ 
     130            (r'(\?[a-zA-Z0-9\-_]+\s*)', Name.Variable),             
     131        ], 
     132        'filterExp':[ 
     133            include('variable'), 
     134            include('object'), 
     135            (r'[+*/<>=~!%&|-]+', Operator), 
     136            (r'\s*\)', Text, '#pop'),             
     137        ], 
     138 
    108139    } 
    109140