123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- # -*- coding: utf-8 -*-
- """
- pygments.lexers.stata
- ~~~~~~~~~~~~~~~~~~~~~
- Lexer for Stata
- :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
- """
- from pygments.lexer import RegexLexer, include, words
- from pygments.token import Comment, Keyword, Name, Number, \
- String, Text, Operator
- from pygments.lexers._stata_builtins import builtins_base, builtins_functions
- __all__ = ['StataLexer']
- class StataLexer(RegexLexer):
- """
- For `Stata <http://www.stata.com/>`_ do files.
- .. versionadded:: 2.2
- """
- # Syntax based on
- # - http://fmwww.bc.edu/RePEc/bocode/s/synlightlist.ado
- # - http://github.com/isagalaev/highlight.js/blob/master/src/languages/stata.js
- # - http://github.com/jpitblado/vim-stata/blob/master/syntax/stata.vim
- name = 'Stata'
- aliases = ['stata', 'do']
- filenames = ['*.do', '*.ado']
- mimetypes = ['text/x-stata', 'text/stata', 'application/x-stata']
- tokens = {
- 'root': [
- include('comments'),
- include('vars-strings'),
- include('numbers'),
- include('keywords'),
- (r'.', Text),
- ],
- # Global and local macros; regular and special strings
- 'vars-strings': [
- (r'\$[\w{]', Name.Variable.Global, 'var_validglobal'),
- (r'`\w{0,31}\'', Name.Variable),
- (r'"', String, 'string_dquote'),
- (r'`"', String, 'string_mquote'),
- ],
- # For either string type, highlight macros as macros
- 'string_dquote': [
- (r'"', String, '#pop'),
- (r'\\\\|\\"|\\\n', String.Escape),
- (r'\$', Name.Variable.Global, 'var_validglobal'),
- (r'`', Name.Variable, 'var_validlocal'),
- (r'[^$`"\\]+', String),
- (r'[$"\\]', String),
- ],
- 'string_mquote': [
- (r'"\'', String, '#pop'),
- (r'\\\\|\\"|\\\n', String.Escape),
- (r'\$', Name.Variable.Global, 'var_validglobal'),
- (r'`', Name.Variable, 'var_validlocal'),
- (r'[^$`"\\]+', String),
- (r'[$"\\]', String),
- ],
- 'var_validglobal': [
- (r'\{\w{0,32}\}', Name.Variable.Global, '#pop'),
- (r'\w{1,32}', Name.Variable.Global, '#pop'),
- ],
- 'var_validlocal': [
- (r'\w{0,31}\'', Name.Variable, '#pop'),
- ],
- # * only OK at line start, // OK anywhere
- 'comments': [
- (r'^\s*\*.*$', Comment),
- (r'//.*', Comment.Single),
- (r'/\*.*?\*/', Comment.Multiline),
- (r'/[*](.|\n)*?[*]/', Comment.Multiline),
- ],
- # Built in functions and statements
- 'keywords': [
- (words(builtins_functions, prefix = r'\b', suffix = r'\('),
- Name.Function),
- (words(builtins_base, prefix = r'(^\s*|\s)', suffix = r'\b'),
- Keyword),
- ],
- # http://www.stata.com/help.cgi?operators
- 'operators': [
- (r'-|==|<=|>=|<|>|&|!=', Operator),
- (r'\*|\+|\^|/|!|~|==|~=', Operator)
- ],
- # Stata numbers
- 'numbers': [
- # decimal number
- (r'\b[+-]?([0-9]+(\.[0-9]+)?|\.[0-9]+|\.)([eE][+-]?[0-9]+)?[i]?\b',
- Number),
- ],
- # Stata formats
- 'format': [
- (r'%-?\d{1,2}(\.\d{1,2})?[gfe]c?', Name.Variable),
- (r'%(21x|16H|16L|8H|8L)', Name.Variable),
- (r'%-?(tc|tC|td|tw|tm|tq|th|ty|tg).{0,32}', Name.Variable),
- (r'%[-~]?\d{1,4}s', Name.Variable),
- ]
- }
|