Skip to content

Commit

Permalink
Added Smithy Lexer (pygments#1878)
Browse files Browse the repository at this point in the history
* Added Smithy Lexer
* Added Smithy Lexer auhtor
* Documented Smithy as a supported language
* Added Smithy test file and output
  • Loading branch information
immanuelqrw committed Aug 5, 2021
1 parent a768fb9 commit dab6b73
Show file tree
Hide file tree
Showing 6 changed files with 1,560 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -227,6 +227,7 @@ Other contributors, listed alphabetically, are:
* Matthias Vallentin -- Bro lexer
* Benoît Vinot -- AMPL lexer
* Linh Vu Hong -- RSL lexer
* Immanuel Washington -- Smithy lexer
* Nathan Weizenbaum -- Haml and Sass lexers
* Nathan Whetsell -- Csound lexers
* Dietmar Winkler -- Modelica lexer
Expand Down
1 change: 1 addition & 0 deletions doc/languages.rst
Expand Up @@ -280,6 +280,7 @@ Other markup
* Scdoc
* Sieve
* Singularity
* `Smithy <https://awslabs.github.io/smithy/>`_
* SPARQL
* SQL, also MySQL, SQLite
* Squid configuration
Expand Down
1 change: 1 addition & 0 deletions pygments/lexers/_mapping.py
Expand Up @@ -431,6 +431,7 @@
'SmalltalkLexer': ('pygments.lexers.smalltalk', 'Smalltalk', ('smalltalk', 'squeak', 'st'), ('*.st',), ('text/x-smalltalk',)),
'SmartGameFormatLexer': ('pygments.lexers.sgf', 'SmartGameFormat', ('sgf',), ('*.sgf',), ()),
'SmartyLexer': ('pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ('application/x-smarty',)),
'SmithyLexer': ('pygments.lexers.smithy', 'Smithy', ('smithy', 'Smithy'), ('*.smithy',), ()),
'SnobolLexer': ('pygments.lexers.snobol', 'Snobol', ('snobol',), ('*.snobol',), ('text/x-snobol',)),
'SnowballLexer': ('pygments.lexers.dsls', 'Snowball', ('snowball',), ('*.sbl',), ()),
'SolidityLexer': ('pygments.lexers.solidity', 'Solidity', ('solidity',), ('*.sol',), ()),
Expand Down
60 changes: 60 additions & 0 deletions pygments/lexers/smithy.py
@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
"""
Smithy IDL lexer
~~~~~~~~~~~~~~~~
Lexers for the Smithy IDL.
"""

import re

from pygments.lexer import RegexLexer, default, include, bygroups
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
Number, Literal

__all__ = ['SmithyLexer']


class SmithyLexer(RegexLexer):
"""
For Smithy IDL
"""
name = 'Smithy'
filenames = ['*.smithy']
aliases = ['smithy', 'Smithy']

flags = re.MULTILINE | re.UNICODE
unquoted = r'[A-Z-a-z0-9_\.#$-]+'
identifier = r"[A-Z-a-z0-9_\.#$-]+"

tokens = {
'root': [
(r'///.*$', Comment.Multiline),
(r'//.*$', Comment),
(r'@[0-9a-zA-Z\.#-]*', Name.Decorator),
(r'(=)', Name.Decorator),
(r'^(\$version)(:)(.+)', bygroups(Keyword.Declaration, Name.Decorator, Name.Class)),
(r'^(namespace)(\s+' + identifier + r')\b', bygroups(Keyword.Declaration, Name.Class)),
(r'^(use|byte|short|integer|long|float|'
r'document|double|bigInteger|bigDecimal|boolean|blob|string|timestamp)(\s+' + identifier + r')\b',
bygroups(Keyword.Declaration, Name.Class)),
(r'^(apply|list|map|set|structure|union|resource|operation|service|trait)(\s+' + identifier + r')',
bygroups(Keyword.Declaration, Name.Class)),
(r'^(metadata)(\s+.+)\s*(=)',
bygroups(Keyword.Declaration, Name.Class, Name.Decorator)),
(r"(true|false|null)", Keyword.Constant),
(r"(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)", Number),
(identifier + ":", Name.Label),
(identifier, Name.Variable.Class),
(r'\[', Text, "#push"),
(r'\]', Text, "#pop"),
(r'\(', Text, "#push"),
(r'\)', Text, "#pop"),
(r'{', Text, "#push"),
(r'}', Text, "#pop"),
(r'"{3}(\\\\|\n|\\")*"{3}', String.Doc),
(r'"(\\\\|\n|\\"|[^"])*"', String.Double),
(r"'(\\\\|\n|\\'|[^'])*'", String.Single),
(r'[:,\s]+', Text),
]
}

0 comments on commit dab6b73

Please sign in to comment.