Skip to content

Commit 20a0ea5

Browse files
ddevaultSebastianYerinAlexeytriallax
committed
Add Hare lexer
Co-authored-by: Sebastian <[email protected]> Co-authored-by: Alexey Yerin <[email protected]> Co-authored-by: Mohammed Anas <[email protected]>
1 parent 2346007 commit 20a0ea5

File tree

4 files changed

+390
-1
lines changed

4 files changed

+390
-1
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ translators for Pygments lexers and styles.
4545
| E | EBNF, Elixir, Elm, EmacsLisp, Erlang |
4646
| F | Factor, Fennel, Fish, Forth, Fortran, FortranFixed, FSharp |
4747
| G | GAS, GDScript, Genshi, Genshi HTML, Genshi Text, Gherkin, GLSL, Gnuplot, Go, Go HTML Template, Go Text Template, GraphQL, Groff, Groovy |
48-
| H | Handlebars, Haskell, Haxe, HCL, Hexdump, HLB, HLSL, HolyC, HTML, HTTP, Hy |
48+
| H | Handlebars, Hare, Haskell, Haxe, HCL, Hexdump, HLB, HLSL, HolyC, HTML, HTTP, Hy |
4949
| I | Idris, Igor, INI, Io, ISCdhcpd |
5050
| J | J, Java, JavaScript, JSON, Julia, Jungle |
5151
| K | Kotlin |

Diff for: lexers/embedded/hare.xml

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<lexer>
2+
<config>
3+
<name>Hare</name>
4+
<alias>hare</alias>
5+
<filename>*.ha</filename>
6+
<mime_type>text/x-hare</mime_type>
7+
</config>
8+
<rules>
9+
<state name="string">
10+
<rule pattern="&quot;">
11+
<token type="LiteralString"/>
12+
<pop depth="1"/>
13+
</rule>
14+
<rule pattern="\\([\\0abfnrtv&quot;']|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})">
15+
<token type="LiteralStringEscape"/>
16+
</rule>
17+
<rule pattern="[^\\&quot;\n]+">
18+
<token type="LiteralString"/>
19+
</rule>
20+
<rule pattern="\\">
21+
<token type="LiteralString"/>
22+
</rule>
23+
</state>
24+
<state name="root">
25+
<rule pattern="[\s\n]+">
26+
<token type="TextWhitespace"/>
27+
</rule>
28+
<rule pattern="@[a-z]+">
29+
<token type="NameDecorator"/>
30+
</rule>
31+
<rule pattern="//.*\n">
32+
<token type="CommentSingle"/>
33+
</rule>
34+
<rule pattern="&quot;">
35+
<token type="LiteralString"/>
36+
<push state="string"/>
37+
</rule>
38+
<rule pattern="`[^`]*`">
39+
<token type="LiteralString"/>
40+
</rule>
41+
<rule pattern="'(\\[\\0abfnrtv&quot;']||\\(x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})|[^\\'])'">
42+
<token type="LiteralStringChar"/>
43+
</rule>
44+
<rule pattern="(0|[1-9]\d*)\.\d+([eE][+-]?\d+)?(f32|f64)?">
45+
<token type="LiteralNumberFloat"/>
46+
</rule>
47+
<rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(f32|f64)">
48+
<token type="LiteralNumberFloat"/>
49+
</rule>
50+
<rule pattern="0x[0-9a-fA-F]+\.[0-9a-fA-F]+([pP][+-]?\d+(f32|f64)?)?">
51+
<token type="LiteralNumberFloat"/>
52+
</rule>
53+
<rule pattern="0x[0-9a-fA-F]+[pP][+-]?\d+(f32|f64)">
54+
<token type="LiteralNumberFloat"/>
55+
</rule>
56+
<rule pattern="0x[0-9a-fA-F]+(z|[iu](8|16|32|64)?)?">
57+
<token type="LiteralNumberHex"/>
58+
</rule>
59+
<rule pattern="0o[0-7]+(z|[iu](8|16|32|64)?)?">
60+
<token type="LiteralNumberOct"/>
61+
</rule>
62+
<rule pattern="0b[01]+(z|[iu](8|16|32|64)?)?">
63+
<token type="LiteralNumberBin"/>
64+
</rule>
65+
<rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(z|[iu](8|16|32|64)?)?">
66+
<token type="LiteralNumberInteger"/>
67+
</rule>
68+
<rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]|[ai]s\b|\.\.\.">
69+
<token type="Operator"/>
70+
</rule>
71+
<rule pattern="[()\[\],.{};]">
72+
<token type="Punctuation"/>
73+
</rule>
74+
<rule pattern="use\b">
75+
<token type="KeywordNamespace"/>
76+
</rule>
77+
<rule pattern="(_|align|break|const|continue|else|enum|export|for|if|return|static|struct|offset|union|fn|free|assert|abort|alloc|let|len|def|type|match|switch|case|append|delete|insert|defer|yield|vastart|vaarg|vaend)\b">
78+
<token type="Keyword"/>
79+
</rule>
80+
<rule pattern="(size)([\s\n]*)(\()">
81+
<bygroups>
82+
<token type="Keyword" />
83+
<token type="TextWhitespace" />
84+
<token type="Punctuation" />
85+
</bygroups>
86+
</rule>
87+
<rule pattern="(str|size|rune|bool|int|uint|uintptr|u8|u16|u32|u64|i8|i16|i32|i64|f32|f64|null|void|nullable|valist|opaque|never)\b">
88+
<token type="KeywordType"/>
89+
</rule>
90+
<rule pattern="(true|false)\b">
91+
<token type="NameBuiltin"/>
92+
</rule>
93+
<rule pattern="[a-zA-Z_]\w*">
94+
<token type="Name"/>
95+
</rule>
96+
</state>
97+
</rules>
98+
</lexer>

Diff for: lexers/testdata/hare.actual

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// test comment
2+
use bufio::*;
3+
use fmt, os::exec = exec;
4+
use time;
5+
6+
type foo = struct {
7+
bar: str,
8+
baz: time::duration,
9+
};
10+
11+
export type e = enum u8 {
12+
a, b, c
13+
};
14+
15+
const arr: [_]foo= [
16+
foo { bar = "This is a \"string\"!", baz = 25 * time::MINUTE },
17+
foo { bar = `This is also a
18+
string`, baz = 5 * time::SECOND},
19+
];
20+
21+
let c = 'a'; // char
22+
let d = 0b1010u16;
23+
let e: size = 32z;
24+
let g = 0xffa31u32 + 0o3u32;
25+
26+
export fn main() void = {
27+
fmt::println("{}", size(int))!;
28+
29+
for (let i = 0z; i < 5; i += 1) {
30+
fmt::println("{}", i);
31+
};
32+
};

0 commit comments

Comments
 (0)