diff options
author | Georg Brandl <georg@python.org> | 2014-09-20 00:06:48 +0200 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2014-09-20 00:06:48 +0200 |
commit | 3aa632c6c357746459a8847feb056cc3c86db93c (patch) | |
tree | 3b285fdac519a208586a72ad2fa8ce0fcf0993d8 /pygments/lexers/modeling.py | |
parent | 827f32f543bd55ad65d01acca45658169a9b4a8a (diff) | |
parent | ed8910f067a347021854227f194f374c5b8cce2d (diff) | |
download | pygments-3aa632c6c357746459a8847feb056cc3c86db93c.tar.gz |
Merged in jaingaurav2/pygments-main-1011 (pull request #376)
Diffstat (limited to 'pygments/lexers/modeling.py')
-rw-r--r-- | pygments/lexers/modeling.py | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/pygments/lexers/modeling.py b/pygments/lexers/modeling.py new file mode 100644 index 00000000..1cd1b6b1 --- /dev/null +++ b/pygments/lexers/modeling.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +""" + pygments.lexers.modeling + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Lexers for modeling languages. + + :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re + +from pygments.lexer import RegexLexer, include, bygroups, using +from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ + Number, Punctuation + +from pygments.lexers.html import HtmlLexer + +__all__ = ['ModelicaLexer'] + + +class ModelicaLexer(RegexLexer): + """ + For `Modelica <http://www.modelica.org/>`_ source code. + + .. versionadded:: 1.1 + """ + name = 'Modelica' + aliases = ['modelica'] + filenames = ['*.mo'] + mimetypes = ['text/x-modelica'] + + flags = re.IGNORECASE | re.DOTALL + + tokens = { + 'whitespace': [ + (r'\n', Text), + (r'\s+', Text), + (r'\\\n', Text), # line continuation + (r'//(\n|(.|\n)*?[^\\]\n)', Comment), + (r'/(\\\n)?\*(.|\n)*?\*(\\\n)?/', Comment), + ], + 'statements': [ + (r'"', String, 'string'), + (r'(\d+\.\d*|\.\d+|\d+|\d.)[eE][+-]?\d+[lL]?', Number.Float), + (r'(\d+\.\d*|\.\d+)', Number.Float), + (r'\d+[Ll]?', Number.Integer), + (r'[~!%^&*+=|?:<>/-]', Operator), + (r'(true|false|NULL|Real|Integer|Boolean)\b', Name.Builtin), + (r'([a-z_][\w]*|\'[^\']+\')' + r'([\[\d,:\]]*)' + r'(\.([a-z_][\w]*|\'[^\']+\'))+' + r'([\[\d,:\]]*)', Name.Class), + (r'(\'[\w\+\-\*\/\^]+\'|\w+)', Name), + (r'[()\[\]{},.;]', Punctuation), + (r'\'', Name, 'quoted_ident'), + ], + 'root': [ + include('whitespace'), + include('classes'), + include('functions'), + include('keywords'), + include('operators'), + (r'("<html>|<html>)', Name.Tag, 'html-content'), + include('statements'), + ], + 'keywords': [ + (r'(algorithm|annotation|break|connect|constant|constrainedby|' + r'discrete|each|end|else|elseif|elsewhen|encapsulated|enumeration|' + r'equation|exit|expandable|extends|' + r'external|false|final|flow|for|if|import|impure|in|initial\sequation|' + r'inner|input|loop|nondiscrete|outer|output|parameter|partial|' + r'protected|public|pure|redeclare|replaceable|stream|time|then|true|' + r'when|while|within)\b', Keyword), + ], + 'functions': [ + (r'(abs|acos|acosh|asin|asinh|atan|atan2|atan3|ceil|cos|cosh|' + r'cross|diagonal|div|exp|fill|floor|getInstanceName|identity|' + r'linspace|log|log10|matrix|mod|max|min|ndims|ones|outerProduct|' + r'product|rem|scalar|semiLinear|skew|sign|sin|sinh|size|' + r'spatialDistribution|sum|sqrt|symmetric|tan|tanh|transpose|' + r'vector|zeros)\b', Name.Function), + ], + 'operators': [ + (r'(actualStream|and|assert|backSample|cardinality|change|Clock|' + r'delay|der|edge|hold|homotopy|initial|inStream|noClock|noEvent|' + r'not|or|pre|previous|reinit|return|sample|smooth|' + r'spatialDistribution|shiftSample|subSample|superSample|terminal|' + r'terminate)\b', Name.Builtin), + ], + 'classes': [ + (r'(operator)?(\s+)?(block|class|connector|end|function|model|' + r'operator|package|record|type)(\s+)' + r'((?!if|for|when|while)[a-z_]\w*|\'[^\']+\')([;]?)', + bygroups(Keyword, Text, Keyword, Text, Name.Class, Text)) + ], + 'quoted_ident': [ + (r'\'', Name, '#pop'), + (r'[^\']+', Name), # all other characters + ], + 'string': [ + (r'"', String, '#pop'), + (r'\\([\\abfnrtv"\']|x[a-f0-9]{2,4}|[0-7]{1,3})', + String.Escape), + (r'[^\\"\n]+', String), # all other characters + (r'\\\n', String), # line continuation + (r'\\', String), # stray backslash + ], + 'html-content': [ + (r'<\s*/\s*html\s*>"', Name.Tag, '#pop'), + (r'.+?(?=<\s*/\s*html\s*>)', using(HtmlLexer)), + ] + } |