Skip to content

Commit

Permalink
Add support for Carbon Programming Language (#2362)
Browse files Browse the repository at this point in the history
  • Loading branch information
AmrDeveloper committed Mar 1, 2023
1 parent 97eb3d5 commit 5713f52
Show file tree
Hide file tree
Showing 5 changed files with 310 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -261,5 +261,6 @@ Other contributors, listed alphabetically, are:
* Thomas Voss -- Sed lexer
* Martin Fischer -- WCAG contrast testing
* Marc Auberer -- Spice lexer
* Amr Hesham -- Carbon lexer

Many thanks for all contributions!
1 change: 1 addition & 0 deletions pygments/lexers/_mapping.py
Expand Up @@ -71,6 +71,7 @@
'CadlLexer': ('pygments.lexers.archetype', 'cADL', ('cadl',), ('*.cadl',), ()),
'CapDLLexer': ('pygments.lexers.esoteric', 'CapDL', ('capdl',), ('*.cdl',), ()),
'CapnProtoLexer': ('pygments.lexers.capnproto', "Cap'n Proto", ('capnp',), ('*.capnp',), ()),
'CarbonLexer': ('pygments.lexers.carbon', 'Carbon', ('carbon',), ('*.carbon',), ('text/x-carbon',)),
'CbmBasicV2Lexer': ('pygments.lexers.basic', 'CBM BASIC V2', ('cbmbas',), ('*.bas',), ()),
'CddlLexer': ('pygments.lexers.cddl', 'CDDL', ('cddl',), ('*.cddl',), ('text/x-cddl',)),
'CeylonLexer': ('pygments.lexers.jvm', 'Ceylon', ('ceylon',), ('*.ceylon',), ('text/x-ceylon',)),
Expand Down
70 changes: 70 additions & 0 deletions pygments/lexers/carbon.py
@@ -0,0 +1,70 @@
"""
pygments.lexers.carbon
~~~~~~~~~~~~~~~~~~~~~~
Lexers for the Carbon programming language.
:copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import re

from pygments.lexer import RegexLexer, bygroups, words
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
Number, Punctuation, Whitespace

__all__ = ['CarbonLexer']


class CarbonLexer(RegexLexer):
"""
For Carbon source.
.. versionadded:: 2.15.0
"""
name = 'Carbon'
url = 'https://github.com/carbon-language/carbon-lang'
filenames = ['*.carbon']
aliases = ['carbon']
mimetypes = ['text/x-carbon']

flags = re.MULTILINE | re.DOTALL

tokens = {
'root': [
(r'\n', Whitespace),
(r'\s+', Whitespace),
(r'\\\n', Text),
# comments
(r'//(.*?)\n', Comment.Single),
(r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
# Declaration
(r'(package|import|api|namespace|library)\b', Keyword.Namespace),
(r'(abstract|alias|fn|class|interface|let|var|virtual|external|'
r'base|addr|extends)\b', Keyword.Declaration),
# Keywords
(words(('as', 'or', 'not', 'and', 'break', 'continue', 'case',
'default', 'if', 'else', 'destructor', 'for', 'forall',
'while', 'where', 'then', 'in', 'is', 'return',
'returned'), suffix=r'\b'), Keyword),
(r'(self)\b', Keyword.Pseudo),
(r'(true|false)\b', Keyword.Constant),
(r'(auto|bool|string|i8|i16|i32|i64|u8|u16|u32|u64|'
r'f8|f16|f32|f64)\b', Keyword.Type),
# numeric literals
(r'[0-9]*[.][0-9]+', Number.Double),
(r'0b[01]+[sl]?', Number.Bin),
(r'0o[0-7]+[sl]?', Number.Oct),
(r'[0-9]+', Number.Integer),
# string literal
(r'"(\\.|[^"\\])*"', String),
# char literal
(r'\'(\\.|[^\'\\])\'', String.Char),
# tokens
(r'<<=|>>=|<<|>>|<=|>=|\+=|-=|\*=|/=|\%=|\|=|&=|\^=|&&|\|\||&|\||'
r'\+\+|--|\%|\^|\~|==|!=|::|[.]{3}|[+\-*/&]|->|=>', Operator),
(r'[|<>=!()\[\]{}.,;:\?]', Punctuation),
# identifiers
(r'[^\W\d]\w*', Name.Other),
]
}
19 changes: 19 additions & 0 deletions tests/examplefiles/carbon/example.carbon
@@ -0,0 +1,19 @@
package Sorting api;

fn Partition[T: !Comparable & Movable](s : Slice(T)) -> i64 {
var i: i64 = -1;
for (e: T in s) {
++i;
Swap(&s[i], &e);
}
return i;
}

fb QuickSort[T: !Comparable & Movable](s : Slice(T)) {
if (s.Size() <= 1) {
return;
}
let p: i64 = Partition(s);
QuickSort(s[:p - 1]);
QuickSort(s[p + 1:]);
}
219 changes: 219 additions & 0 deletions tests/examplefiles/carbon/example.carbon.output

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 5713f52

Please sign in to comment.