Browse Source

Ticket #3690: initial support of OpenCL syntax highlighting.

Based on opencl-mode from Emacs with some own tweaks.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Sergey Sharybin 8 years ago
parent
commit
0fe1eca733
3 changed files with 182 additions and 0 deletions
  1. 1 0
      misc/syntax/Makefile.am
  2. 3 0
      misc/syntax/Syntax.in
  3. 178 0
      misc/syntax/opencl.syntax

+ 1 - 0
misc/syntax/Makefile.am

@@ -53,6 +53,7 @@ SYNTAXFILES =			\
 	named.syntax		\
 	nemerle.syntax		\
 	nroff.syntax		\
+	opencl.syntax		\
 	octave.syntax		\
 	pascal.syntax		\
 	perl.syntax		\

+ 3 - 0
misc/syntax/Syntax.in

@@ -268,5 +268,8 @@ include glsl.syntax
 file .\*\\.(cu|cuh)$ CUDA\sProgram
 include cuda.syntax
 
+file .\*\\.(cl)$ OpenCL\sProgram
+include opencl.syntax
+
 file .\* unknown
 include unknown.syntax

+ 178 - 0
misc/syntax/opencl.syntax

@@ -0,0 +1,178 @@
+# Syntax rules for the C and the C++ programming languages
+#
+# List of keywords is based on opencl-mode.el from
+# Salmane Bah <salmane.bah@u-bordeaux.fr>
+
+context default
+    keyword whole auto yellow
+    keyword whole break yellow
+    keyword whole case yellow
+    keyword whole char yellow
+    keyword whole const yellow
+    keyword whole continue yellow
+    keyword whole do yellow
+    keyword whole double yellow
+    keyword whole else yellow
+    keyword whole enum yellow
+    keyword whole extern yellow
+    keyword whole float yellow
+    keyword whole for yellow
+    keyword whole goto yellow
+    keyword whole if yellow
+    keyword whole int yellow
+    keyword whole long yellow
+    keyword whole register yellow
+    keyword whole return yellow
+    keyword whole short yellow
+    keyword whole signed yellow
+    keyword whole sizeof yellow
+    keyword whole static yellow
+    keyword whole struct yellow
+    keyword whole switch yellow
+    keyword whole typedef yellow
+    keyword whole union yellow
+    keyword whole unsigned yellow
+    keyword whole void yellow
+    keyword whole volatile yellow
+    keyword whole while yellow
+    keyword whole asm yellow
+    keyword whole inline yellow
+    keyword whole wchar_t yellow
+    keyword whole ... yellow
+    keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+    keyword whole \[\s\t\]default yellow
+    keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: cyan
+
+# Function type qualifiers
+    keyword whole __kernel white
+
+# Variable type qualifiers
+    keyword whole __global white
+    keyword whole __local white
+    keyword whole __constant white
+    keyword whole __private white
+    keyword whole __read_only white
+    keyword whole __write_only white
+    keyword whole __read_write white
+    keyword whole __enable white
+    keyword whole __disable white
+    keyword whole global white
+    keyword whole local white
+    keyword whole constant white
+    keyword whole private white
+    keyword whole read_only white
+    keyword whole write_only white
+    keyword whole read_write white
+    keyword whole enable white
+    keyword whole disable white
+
+# Built-in functions
+    keyword whole get_group_id brightmagenta
+    keyword whole get_local_id brightmagenta
+    keyword whole get_global_id brightmagenta
+    keyword whole get_local_size brightmagenta
+    keyword whole get_global_size brightmagenta
+    keyword whole get_work_dim brightmagenta
+    keyword whole get_num_groups brightmagenta
+    keyword whole get_global_offset brightmagenta
+    keyword whole barrier brightmagenta
+
+# Constants
+    keyword whole CLK_LOCAL_MEM_FENCE white
+    keyword whole CLK_GLOBAL_MEM_FENCE white
+    keyword whole MAXFLOAT white
+    keyword whole HUGE_VAL white
+    keyword whole HUGE_VALF white
+    keyword whole INFINITY white
+    keyword whole NAN white
+
+# Built-in types
+    keyword whole half yellow
+    keyword whole uchar yellow
+    keyword whole ushort yellow
+    keyword whole uint yellow
+    keyword whole ulong yellow
+    keyword whole bool yellow
+    keyword whole size_t yellow
+    keyword whole ptrdiff_t yellow
+    keyword whole intptr_t yellow
+    keyword whole uintptr_t yellow
+
+    keyword whole image2d_t yellow
+    keyword whole image3d_t yellow
+    keyword whole image2d_array_t yellow
+    keyword whole image3d_array_t yellow
+    keyword whole image1d_array_t yellow
+    keyword whole image1d_t yellow
+    keyword whole image1d_buffer_t yellow
+    keyword whole sampler_t yellow
+    keyword whole event_t yellow
+
+    keyword whole cl_khr_\{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\}\{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_\}+ brightgreen
+
+    keyword /\* brown
+    keyword \*/ brown
+    keyword // brown
+
+    keyword '\\\{"abtnvfr\}' brightgreen
+    keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
+    keyword '\\'' brightgreen
+    keyword '\\\\' brightgreen
+    keyword '\\0' brightgreen
+    keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~嵗╯丰戍貝物洎悖停眾斯須號獄播噶擱藏霰匸�帊昅恘倳眑婭笫崷窙嗲睧颬睼麧緗鴇膹擨闀貘覷鏷禴矙𡜍𦶠�\}' brightgreen
+
+# punctuation characters, sorted by ASCII code
+    keyword ! yellow
+    keyword % yellow
+    keyword && yellow
+    keyword & brightmagenta
+    keyword ( brightcyan
+    keyword ) brightcyan
+    keyword \* yellow
+    keyword \+ yellow
+    keyword , brightcyan
+    keyword - yellow
+    keyword / yellow
+    keyword : brightcyan
+    keyword ; brightmagenta
+    keyword < yellow
+    keyword = yellow
+    keyword > yellow
+    keyword ? brightcyan
+    keyword [ brightcyan
+    keyword ] brightcyan
+    keyword ^ brightmagenta
+    keyword { brightcyan
+    keyword || yellow
+    keyword | brightmagenta
+    keyword } brightcyan
+    keyword ~ brightmagenta
+
+context exclusive /\* \*/ brown
+    spellcheck
+
+context exclusive // \n brown
+    spellcheck
+
+context linestart # \n brightred
+    keyword \\\n yellow
+    keyword /\**\*/ brown
+    keyword //*\n brown
+    keyword "+" red
+    keyword <+> red
+
+context " " green
+    spellcheck
+    keyword \\" brightgreen
+    keyword %% brightgreen
+    keyword %\[#0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[L\]\{eEfgGoxX\} brightgreen
+    keyword %\[0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[hl\]\{diuxX\} brightgreen
+    keyword %\[hl\]n brightgreen
+    keyword %\[-\]\[0123456789\*\]\[.\]\[0123456789\*\]s brightgreen
+    keyword %[*] brightgreen
+    keyword %c brightgreen
+    keyword %p brightgreen
+    keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+    keyword \\\\ brightgreen
+    keyword \\' brightgreen
+    keyword \\\{abtnvfr\} brightgreen