Browse Source

Ticket #3762: initial support of OpenShadingLanguage highlighting.

Based on C syntax with some extra keywords gathered from OSL's lexer rules.

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

+ 1 - 0
misc/syntax/Makefile.am

@@ -55,6 +55,7 @@ SYNTAXFILES =			\
 	nroff.syntax		\
 	opencl.syntax		\
 	octave.syntax		\
+	osl.syntax		\
 	pascal.syntax		\
 	perl.syntax		\
 	php.syntax		\

+ 3 - 0
misc/syntax/Syntax.in

@@ -274,5 +274,8 @@ include opencl.syntax
 file ..\*\\.(ya?ml|YML)$ YAML\sFile
 include yaml.syntax
 
+file .\*\\.osl$ OSL\sProgram
+include osl.syntax
+
 file .\* unknown
 include unknown.syntax

+ 139 - 0
misc/syntax/osl.syntax

@@ -0,0 +1,139 @@
+# 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
+# Keywords
+    keyword whole break yellow
+    keyword whole closure yellow
+    keyword whole color yellow
+    keyword whole continue yellow
+    keyword whole do yellow
+    keyword whole else yellow
+    keyword whole float yellow
+    keyword whole for yellow
+    keyword whole if yellow
+    keyword whole illuminance yellow
+    keyword whole illuminate yellow
+    keyword whole int yellow
+    keyword whole matrix yellow
+    keyword whole normal yellow
+    keyword whole output yellow
+    keyword whole point yellow
+    keyword whole public yellow
+    keyword whole return yellow
+    keyword whole string yellow
+    keyword whole struct yellow
+    keyword whole vector yellow
+    keyword whole void yellow
+    keyword whole while yellow
+    keyword whole or yellow
+    keyword whole and yellow
+    keyword whole not yellow
+    keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+
+# Reserved words
+    keyword whole bool red
+    keyword whole case red
+    keyword whole char red
+    keyword whole class red
+    keyword whole const red
+    keyword whole default red
+    keyword whole double red
+    keyword whole enum red
+    keyword whole extern red
+    keyword whole false red
+    keyword whole friend red
+    keyword whole inline red
+    keyword whole long red
+    keyword whole private red
+    keyword whole protected red
+    keyword whole short red
+    keyword whole signed red
+    keyword whole sizeof red
+    keyword whole static red
+    keyword whole struct red
+    keyword whole switch red
+    keyword whole template red
+    keyword whole this red
+    keyword whole true red
+    keyword whole typedef red
+    keyword whole uniform red
+    keyword whole union red
+    keyword whole unsigned red
+    keyword whole varying red
+    keyword whole virtual red
+
+# Shader types
+    keyword whole shader white
+    keyword whole surface white
+    keyword whole displacement white
+    keyword whole volume white
+
+    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