1# -*- coding: utf-8 -*- 2""" 3 pygments.lexers.iolang 4 ~~~~~~~~~~~~~~~~~~~~~~ 5 6 Lexers for the Io language. 7 8 :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS. 9 :license: BSD, see LICENSE for details. 10""" 11 12from pygments.lexer import RegexLexer 13from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ 14 Number 15 16__all__ = ['IoLexer'] 17 18 19class IoLexer(RegexLexer): 20 """ 21 For `Io <http://iolanguage.com/>`_ (a small, prototype-based 22 programming language) source. 23 24 .. versionadded:: 0.10 25 """ 26 name = 'Io' 27 filenames = ['*.io'] 28 aliases = ['io'] 29 mimetypes = ['text/x-iosrc'] 30 tokens = { 31 'root': [ 32 (r'\n', Text), 33 (r'\s+', Text), 34 # Comments 35 (r'//(.*?)\n', Comment.Single), 36 (r'#(.*?)\n', Comment.Single), 37 (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline), 38 (r'/\+', Comment.Multiline, 'nestedcomment'), 39 # DoubleQuotedString 40 (r'"(\\\\|\\"|[^"])*"', String), 41 # Operators 42 (r'::=|:=|=|\(|\)|;|,|\*|-|\+|>|<|@|!|/|\||\^|\.|%|&|\[|\]|\{|\}', 43 Operator), 44 # keywords 45 (r'(clone|do|doFile|doString|method|for|if|else|elseif|then)\b', 46 Keyword), 47 # constants 48 (r'(nil|false|true)\b', Name.Constant), 49 # names 50 (r'(Object|list|List|Map|args|Sequence|Coroutine|File)\b', 51 Name.Builtin), 52 (r'[a-zA-Z_]\w*', Name), 53 # numbers 54 (r'(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float), 55 (r'\d+', Number.Integer) 56 ], 57 'nestedcomment': [ 58 (r'[^+/]+', Comment.Multiline), 59 (r'/\+', Comment.Multiline, '#push'), 60 (r'\+/', Comment.Multiline, '#pop'), 61 (r'[+/]', Comment.Multiline), 62 ] 63 } 64