ggdgsdbsdbbb / highlight / langs.v
50 lines · 44 sloc · 1.03 KB · 674fd27bf98e2f6754726316d0bfceb6570ecb96
Raw
1// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
2// Use of this source code is governed by a GPL license that can be found in the LICENSE file.
3module highlight
4
5const lang_path = 'langs'
6
7const langs = init_langs()
8
9pub struct Lang {
10 keywords []string
11 lang_extensions []string
12 string_start []string
13pub:
14 line_comments string
15 mline_comments []string
16 color string
17 name string
18}
19
20fn is_source(ext string) bool {
21 extension_to_lang(ext) or { return false }
22 return true
23}
24
25pub fn extension_to_lang(ext string) !Lang {
26 ending := ext.split('.').last()
27 for lang in langs {
28 if ending in lang.lang_extensions {
29 return lang
30 }
31 }
32 return error('No language found')
33}
34
35fn init_langs() []Lang {
36 mut langs_ := []Lang{cap: 16}
37 langs_ << init_c()
38 langs_ << init_cpp()
39 langs_ << init_cs()
40 langs_ << init_d()
41 langs_ << init_go()
42 langs_ << init_java()
43 langs_ << init_js()
44 langs_ << init_lua()
45 langs_ << init_py()
46 langs_ << init_rust()
47 langs_ << init_ts()
48 langs_ << init_v()
49 return langs_
50}
51