Skip to content

Commit 144a2da

Browse files
committed
Add support for xtlang
1 parent 39cccea commit 144a2da

File tree

9 files changed

+320
-0
lines changed

9 files changed

+320
-0
lines changed

AUTHORS.en.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,4 @@ Contributors:
272272
- Antoine Boisier-Michaud <[email protected]>
273273
- Alejandro Isaza <[email protected]>
274274
- Laurent Voullemier <[email protected]>
275+
- Yuya Chiba <[email protected]>

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
New languages:
44

5+
- *xtlang* by [Yuya Chiba][]
6+
57
New styles:
68

79
Improvements:
@@ -22,6 +24,7 @@ Improvements:
2224
[Ahmed Atito]: https://github.com/atitoa93
2325
[Matthew Evans]: https://github.com/matthewevans
2426
[Tsuyusato Kitsune]: https://github.com/MakeNowJust
27+
[Yuya Chiba]: https://github.com/cyblue9
2528

2629
## Version 9.13.1
2730

docs/css-classes-reference.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,8 @@ Language names and aliases
451451
| Vim Script | vim |
452452
+-------------------------+---------------------------------------------------+
453453
| x86 Assembly | x86asm |
454+
+-----------------------------------------------------------------------------+
455+
| xtlang | xtlang, xtm |
454456
+-------------------------+---------------------------------------------------+
455457
| XL | xl, tao |
456458
+-------------------------+---------------------------------------------------+

src/languages/xtlang.js

Lines changed: 272 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,272 @@
1+
/*
2+
Language: xtlang
3+
Description: This is a mixture of Scheme and xtlang for the `Extempore programming environment <https://extemporelang.github.io/>`.
4+
Author: YUYA CHIBA <[email protected]>
5+
Origin: scheme.js
6+
Category: lisp
7+
*/
8+
9+
function(hljs) {
10+
var SCHEME_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+([./]\\d+)?';
11+
var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[\\+\\-]' +
12+
SCHEME_SIMPLE_NUMBER_RE + 'i';
13+
14+
// valid names for Scheme identifiers(names cannot consist fully
15+
// of numbers, but this should be good enough for now)
16+
var VALID_SCHEME_NAME_RE = '[\\w\\!\\$%&\\*\\+,\\/:<=>\\?@\\^~\\|\\-]+';
17+
18+
// valid characters in xtlang names & types
19+
var VALID_XTLANG_NAME_RE = '[\\w\\.\\!\\-]+';
20+
var VALID_XTLANG_TYPE_RE = '[\\w\\[\\]\\{\\}<>,\\*/\\|\\!\\-]+';
21+
22+
/*
23+
* Keywords based on
24+
* https://bitbucket.org/birkenfeld/pygments-main/src/7941677dc77d4f2bf0bbd6140ade85a9454b8b80/
25+
* pygments/lexers/lisp.py?at=default&fileviewer=file-view-default#lisp.py-2420
26+
*/
27+
var COMMON_KEYWORDS_RE = '(lambda|define|if|else|cond|and|or|' +
28+
'let|begin|set\\!|map|for\\-each)';
29+
var SCHEME_KEYWORDS_RE = '(do|delay|quasiquote|unquote|unquote\\-splicing|' +
30+
'eval|case|let\\*|letrec|quote)';
31+
var XTLANG_BIND_KEYWORDS_RE = '(bind\\-func|bind\\-val|bind\\-lib|bind\\-type|bind\\-alias|' +
32+
'bind\\-poly|bind\\-dylib|bind\\-lib\\-func|bind\\-lib\\-val)';
33+
var XTLANG_KEYWORDS_RE = '(letz|memzone|cast|convert|dotimes|doloop)';
34+
var COMMON_FUNCTIONS_RE = '(\\*|\\+|-|/|<|<=|=|>|>=|%|abs|acos|' +
35+
'angle|append|apply|asin|assoc|assq|assv|' +
36+
'atan|boolean\\?|caaaar|caaadr|caaar|caadar|' +
37+
'caaddr|caadr|caar|cadaar|cadadr|cadar|' +
38+
'caddar|cadddr|caddr|cadr|car|cdaaar|' +
39+
'cdaadr|cdaar|cdadar|cdaddr|cdadr|cdar|' +
40+
'cddaar|cddadr|cddar|cdddar|cddddr|cdddr|' +
41+
'cddr|cdr|ceiling|cons|cos|floor|length|' +
42+
'list|log|max|member|min|modulo|not|' +
43+
'reverse|round|sin|sqrt|substring|tan|' +
44+
'println|random|null\\?|callback|now)';
45+
var SCHEME_FUNCTIONS_RE = '(call\\-with\\-current\\-continuation|' +
46+
'call\\-with\\-input\\-file|call\\-with\\-output\\-file|' +
47+
'call\\-with\\-values|call/cc|char\\->integer|' +
48+
'char\\-alphabetic\\?|char\\-ci<=\\?|char\\-ci<\\?|' +
49+
'char\\-ci=\\?|char\\-ci>=\\?|char\\-ci>\\?|char\\-downcase|' +
50+
'char\\-lower\\-case\\?|char\\-numeric\\?|char\\-ready\\?|' +
51+
'char\\-upcase|char\\-upper\\-case\\?|char\\-whitespace\\?|' +
52+
'char<=\\?|char<\\?|char=\\?|char>=\\?|char>\\?|char\\?|' +
53+
'close\\-input\\-port|close\\-output\\-port|complex\\?|' +
54+
'current\\-input\\-port|current\\-output\\-port|denominator|' +
55+
'display|dynamic\\-wind|eof\\-object\\?|eq\\?|equal\\?|' +
56+
'eqv\\?|even\\?|exact\\->inexact|exact\\?|exp|expt|' +
57+
'force|gcd|imag\\-part|inexact\\->exact|inexact\\?|' +
58+
'input\\-port\\?|integer\\->char|integer\\?|' +
59+
'interaction\\-environment|lcm|list\\->string|' +
60+
'list\\->vector|list\\-ref|list\\-tail|list\\?|load|' +
61+
'magnitude|make\\-polar|make\\-rectangular|make\\-string|' +
62+
'make\\-vector|memq|memv|negative\\?|newline|' +
63+
'null\\-environment|number\\->string|number\\?|' +
64+
'numerator|odd\\?|open\\-input\\-file|open\\-output\\-file|' +
65+
'output\\-port\\?|pair\\?|peek\\-char|port\\?|positive\\?|' +
66+
'procedure\\?|quotient|rational\\?|rationalize|read|' +
67+
'read\\-char|real\\-part|real\\?|' +
68+
'remainder|scheme\\-report\\-environment|set\\-car\\!|' +
69+
'set\\-cdr\\!|string|string\\->list|string\\->number|' +
70+
'string\\->symbol|string\\-append|string\\-ci<=\\?|' +
71+
'string\\-ci<\\?|string\\-ci=\\?|string\\-ci>=\\?|' +
72+
'string\\-ci>\\?|string\\-copy|string\\-fill\\!|' +
73+
'string\\-length|string\\-ref|string\\-set\\!|string<=\\?|' +
74+
'string<\\?|string=\\?|string>=\\?|string>\\?|string\\?|' +
75+
'symbol\\->string|symbol\\?|transcript\\-off|transcript\\-on|' +
76+
'truncate|values|vector|vector\\->list|vector\\-fill\\!|' +
77+
'vector\\-length|vector\\?|' +
78+
'with\\-input\\-from\\-file|with\\-output\\-to\\-file|write|' +
79+
'write\\-char|zero\\?)';
80+
var XTLANG_FUNCTIONS_RE = '(toString|afill\\!|pfill\\!|tfill\\!|tbind|vfill\\!|' +
81+
'array\\-fill\\!|pointer\\-fill\\!|tuple\\-fill\\!|' +
82+
'vector\\-fill\\!|free|array|tuple|~|cset\\!|cref|&|bor|' +
83+
'ang\\-names|<<|>>|nil|printf|sprintf|null|now|' +
84+
'pset\\!|pref\\-ptr|vset\\!|vref|aset\\!|aref|aref\\-ptr|' +
85+
'tset\\!|tref|tref\\-ptr|salloc|halloc|zalloc|alloc|' +
86+
'schedule|exp|log|sin|cos|tan|asin|acos|atan|' +
87+
'sqrt|expt|floor|ceiling|truncate|round|' +
88+
'llvm_printf|push_zone|pop_zone|memzone|callback|' +
89+
'llvm_sprintf|make\\-array|array\\-set\\!|array\\-ref|' +
90+
'array\\-ref\\-ptr|pointer\\-set\\!|pointer\\-ref|' +
91+
'pointer\\-ref\\-ptr|stack\\-alloc|heap\\-alloc|zone\\-alloc|' +
92+
'make\\-tuple|tuple\\-set\\!|tuple\\-ref|tuple\\-ref\\-ptr|' +
93+
'closure\\-set\\!|closure\\-ref|pref|pdref|impc_null|bitcast|' +
94+
'void|ifret|ret\\->|clrun\\->|make\\-env\\-zone|make\\-env|<>|' +
95+
'dtof|ftod|i1tof|i1tod|i1toi8|i1toi32|i1toi64|i8tof|i8tod|' +
96+
'i8toi1|i8toi32|i8toi64|i32tof|i32tod|i32toi1|' +
97+
'i32toi8|i32toi64|i64tof|i64tod|i64toi1|' +
98+
'i64toi8|i64toi32)';
99+
100+
var SHEBANG = {
101+
className: 'meta',
102+
begin: '^#!',
103+
end: '$'
104+
};
105+
106+
var LITERAL = {
107+
className: 'literal',
108+
begin: '(#t|#f)'
109+
};
110+
111+
var XTLANG_TYPE = {
112+
className: 'type',
113+
lexemes: VALID_XTLANG_TYPE_RE,
114+
variants: [
115+
{ begin: ':' + VALID_XTLANG_TYPE_RE },
116+
{ begin: '(<' + VALID_XTLANG_TYPE_RE + '>|\\|' + VALID_XTLANG_TYPE_RE + '\\||/' +
117+
VALID_XTLANG_TYPE_RE + '/|' + VALID_XTLANG_TYPE_RE + '\\*)\\**' }
118+
],
119+
};
120+
121+
var NUMBER = {
122+
className: 'number',
123+
variants: [
124+
{ begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 },
125+
{ begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 },
126+
{ begin: '#b[0-1]+(/[0-1]+)?' },
127+
{ begin: '#o[0-7]+(/[0-7]+)?' },
128+
{ begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }
129+
]
130+
};
131+
132+
var STRING = {
133+
className: 'string',
134+
variants: [
135+
{ begin: '"', end:'"'},
136+
{ begin: '(#\\\\' + VALID_SCHEME_NAME_RE + '|#\\\\.)' }
137+
],
138+
contains: [
139+
{
140+
className: 'doctag', begin: '@\\w+', lexemes: VALID_XTLANG_NAME_RE
141+
}
142+
]
143+
};
144+
145+
var COMMENT = [
146+
hljs.COMMENT(
147+
';',
148+
'$',
149+
{
150+
relevance: 0
151+
}
152+
),
153+
hljs.COMMENT('#\\|', '\\|#')
154+
];
155+
156+
var IDENT = {
157+
className: 'variable',
158+
begin: VALID_XTLANG_NAME_RE,
159+
relevance: 0
160+
};
161+
162+
var QUOTED_IDENT = {
163+
className: 'symbol',
164+
begin: '\'' + VALID_SCHEME_NAME_RE
165+
};
166+
167+
var SPECIAL_OPERATORS = {
168+
className: 'symbol',
169+
begin: '(\'|#|`|,@|,|\\.)'
170+
};
171+
172+
var QUOTED_LIST = {
173+
variants: [
174+
{ begin: /'/ },
175+
{ begin: '`' }
176+
],
177+
contains: [
178+
{
179+
begin: '\\(', end: '\\)',
180+
contains: ['self', LITERAL, STRING, NUMBER, IDENT, QUOTED_IDENT, SPECIAL_OPERATORS]
181+
}
182+
]
183+
};
184+
185+
var COMMON_KEYWORDS = {
186+
className: 'keyword',
187+
begin: COMMON_KEYWORDS_RE,
188+
lexemes: VALID_SCHEME_NAME_RE
189+
};
190+
191+
var SCHEME_KEYWORDS = {
192+
className: 'keyword',
193+
begin: SCHEME_KEYWORDS_RE,
194+
lexemes: VALID_SCHEME_NAME_RE
195+
}
196+
197+
var XTLANG_KEYWORDS = {
198+
className: 'keyword',
199+
begin: XTLANG_KEYWORDS_RE,
200+
lexemes: VALID_XTLANG_NAME_RE
201+
};
202+
203+
var COMMON_FUNCTIONS = {
204+
className: 'funciton',
205+
begin: COMMON_FUNCTIONS_RE,
206+
lexemes: VALID_SCHEME_NAME_RE
207+
};
208+
209+
var SCHEME_FUNCTIONS = {
210+
className: 'funciton',
211+
begin: SCHEME_FUNCTIONS_RE,
212+
lexemes: VALID_SCHEME_NAME_RE,
213+
};
214+
215+
var XTLANG_FUNCTIONS = {
216+
className: 'funciton',
217+
begin: XTLANG_FUNCTIONS_RE,
218+
lexemes: VALID_XTLANG_NAME_RE,
219+
};
220+
221+
var DEFINE = {
222+
className: 'keyword',
223+
lexemes: VALID_SCHEME_NAME_RE,
224+
end: '$',
225+
variants : [
226+
{ begin: XTLANG_BIND_KEYWORDS_RE },
227+
{ begin: 'define' }
228+
],
229+
contains: [
230+
hljs.inherit(hljs.TITLE_MODE, { begin: VALID_SCHEME_NAME_RE, endsParent: true})
231+
]
232+
};
233+
234+
var XTLANG = {
235+
lexemes: VALID_SCHEME_NAME_RE,
236+
variants: [
237+
XTLANG_KEYWORDS, XTLANG_FUNCTIONS,
238+
]
239+
};
240+
241+
var SCHEME = {
242+
lexemes: VALID_SCHEME_NAME_RE,
243+
variants: [
244+
SCHEME_KEYWORDS, SCHEME_FUNCTIONS
245+
]
246+
};
247+
248+
var COMMON = {
249+
endsWithParent: true,
250+
relevance: 0
251+
};
252+
253+
var LIST = {
254+
variants: [
255+
{ begin: '\\(', end: '\\)' },
256+
{ begin: '\\[', end: '\\]' }
257+
],
258+
contains: [DEFINE, XTLANG, SCHEME, COMMON]
259+
};
260+
261+
COMMON.contains = [LITERAL, NUMBER, XTLANG_TYPE, STRING, QUOTED_IDENT,
262+
SPECIAL_OPERATORS, QUOTED_LIST, COMMON_KEYWORDS,
263+
COMMON_FUNCTIONS, IDENT, LIST].concat(COMMENT);
264+
265+
return {
266+
aliases: ['xtm'],
267+
illegal: /\S/,
268+
contains: [
269+
SHEBANG, NUMBER, STRING, QUOTED_IDENT, SPECIAL_OPERATORS, QUOTED_LIST, LIST
270+
].concat(COMMENT)
271+
};
272+
}

test/detect/xtlang/default.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
(bind-func xtlang_closure
2+
"This is docstrings!
3+
4+
@param - the first number to multiply
5+
@param - the second number to multiply
6+
@return - the multiplication of the two input arguments"
7+
(lambda (c:double d:i64)
8+
(let ((result (* c (i64tod d))))
9+
(printf "result = %f\n" result)
10+
result)))
11+
12+
(xtlang_closure 4.5 2) ;; prints "result = 9.000000", returns 9.0
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(<span class="hljs-keyword">define <span class="hljs-title">scheme-closure</span></span>
2+
(<span class="hljs-keyword">lambda</span> (<span class="hljs-variable">a</span> <span class="hljs-variable">b</span>)
3+
(<span class="hljs-keyword">let</span> ((<span class="hljs-variable">result</span> (<span class="hljs-funciton">*</span> <span class="hljs-variable">a</span> <span class="hljs-variable">b</span>)))
4+
(<span class="hljs-variable">print</span> <span class="hljs-string">"result = "</span> <span class="hljs-variable">result</span>)
5+
<span class="hljs-variable">result</span>)))
6+
7+
(<span class="hljs-variable">scheme-closure</span> <span class="hljs-number">4</span> <span class="hljs-number">5</span>) <span class="hljs-comment">;; prints "result = 20", returns 20</span>
8+
(<span class="hljs-variable">scheme-closure</span> <span class="hljs-number">2.4</span> <span class="hljs-number">2</span>) <span class="hljs-comment">;; prints "result = 4.8", returns 4.8</span>

test/markup/xtlang/scheme.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(define scheme-closure
2+
(lambda (a b)
3+
(let ((result (* a b)))
4+
(print "result = " result)
5+
result)))
6+
7+
(scheme-closure 4 5) ;; prints "result = 20", returns 20
8+
(scheme-closure 2.4 2) ;; prints "result = 4.8", returns 4.8
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
(<span class="hljs-keyword">bind-func <span class="hljs-title">xtlang_closure</span></span>
2+
(<span class="hljs-keyword">lambda</span> (<span class="hljs-variable">c</span><span class="hljs-type">:double</span> <span class="hljs-variable">d</span><span class="hljs-type">:i64</span>)
3+
(<span class="hljs-keyword">let</span> ((<span class="hljs-variable">result</span> (<span class="hljs-funciton">*</span> <span class="hljs-variable">c</span> (<span class="hljs-funciton">i64tod</span> <span class="hljs-variable">d</span>))))
4+
(<span class="hljs-funciton">printf</span> <span class="hljs-string">"result = %f\n"</span> <span class="hljs-variable">result</span>)
5+
<span class="hljs-variable">result</span>)))
6+
7+
(<span class="hljs-variable">xtlang_closure</span> <span class="hljs-number">4.5</span> <span class="hljs-number">2</span>) <span class="hljs-comment">;; prints "result = 9.000000", returns 9.0</span>

test/markup/xtlang/xtlang.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
(bind-func xtlang_closure
2+
(lambda (c:double d:i64)
3+
(let ((result (* c (i64tod d))))
4+
(printf "result = %f\n" result)
5+
result)))
6+
7+
(xtlang_closure 4.5 2) ;; prints "result = 9.000000", returns 9.0

0 commit comments

Comments
 (0)