From c339bb3ae6646c3dbef8e73f41c1e797ed5ec99b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 12 Oct 2015 17:09:41 +0200 Subject: vis: experimental support for lua/lpeg based syntax highlighting The lua based lexers are searched in the following order: $VIS_PATH/lexers $HOME/.vis/lexers /usr/share/vis/lexers followed by the standard lua package.path --- lexers/diff.lua | 6 +-- lexers/lexer.lua | 128 +++++++++++++++++++++++++++++++++++++++++++- lexers/themes/default.lua | 1 + lexers/themes/solarized.lua | 54 +++++++++++++++++++ 4 files changed, 184 insertions(+), 5 deletions(-) create mode 120000 lexers/themes/default.lua create mode 100644 lexers/themes/solarized.lua (limited to 'lexers') diff --git a/lexers/diff.lua b/lexers/diff.lua index 53b7f17..ee680aa 100644 --- a/lexers/diff.lua +++ b/lexers/diff.lua @@ -34,9 +34,9 @@ M._rules = { M._tokenstyles = { header = l.STYLE_COMMENT, - addition = 'fore:$(color.green)', - deletion = 'fore:$(color.red)', - change = 'fore:$(color.yellow)' + addition = 'fore:'..l.colors.green, + deletion = 'fore:'..l.colors.red, + change = 'fore:'..l.colors.yellow, } M._LEXBYLINE = true diff --git a/lexers/lexer.lua b/lexers/lexer.lua index 0dc9674..4d7eb60 100644 --- a/lexers/lexer.lua +++ b/lexers/lexer.lua @@ -974,7 +974,10 @@ local default = { 'function', 'class', 'type', 'label', 'regex', 'embedded' } for _, v in ipairs(default) do - M[string_upper(v)], M['STYLE_'..string_upper(v)] = v, '$(style.'..v..')' + M[string_upper(v)] = v + if not M['STYLE_'..string_upper(v)] then + M['STYLE_'..string_upper(v)] = '' + end end -- Predefined styles. local predefined = { @@ -982,7 +985,10 @@ local predefined = { 'indentguide', 'calltip' } for _, v in ipairs(predefined) do - M[string_upper(v)], M['STYLE_'..string_upper(v)] = v, '$(style.'..v..')' + M[string_upper(v)] = v + if not M['STYLE_'..string_upper(v)] then + M['STYLE_'..string_upper(v)] = '' + end end --- @@ -1584,4 +1590,122 @@ M.property_expanded = setmetatable({}, { local lexer ]] +function M.get_style(lexer, lang, token_name) + return lexer['STYLE_'..string_upper(token_name)] or lang._EXTRASTYLES[token_name] +end + +local files = { + [".as|.asc"] = "actionscript", + [".adb|.ads"] = "ada", + [".g|.g4"] = "antlr", + [".ans|.inp|.mac"] = "apdl", + [".applescript"] = "applescript", + [".asm|.ASM|.s|.S"] = "asm", + [".asa|.asp|.hta"] = "asp", + [".awk"] = "awk", + [".bat|.cmd"] = "batch", + [".bib"] = "bibtex", + [".boo"] = "boo", + [".cs"] = "csharp", + [".c|.cc|.C"] = "ansi_c", + [".cpp|.cxx|.c++|.h|.hh|.hpp|.hxx|.h++"] = "cpp", + [".ck"] = "chuck", + [".cmake|.cmake.in|.ctest|.ctest.in"] = "cmake", + [".coffee"] = "coffeescript", + [".css"] = "css", + [".cu|.cuh"] = "cuda", + [".d|.di"] = "dmd", + [".dart"] = "dart", + [".desktop"] = "desktop", + [".diff|.patch"] = "diff", + [".dot"] = "dot", + [".e|.eif"] = "eiffel", + [".ex|.exs"] = "elixir", + [".erl|.hrl"] = "erlang", + [".fs"] = "fsharp", + [".fish"] = "fish", + [".forth|.frt|.fs"] = "forth", + [".f|.for|.ftn|.fpp|.f77|.f90|.f95|.f03|.f08"] = "fortran", + [".g|.gd|.gi|.gap"] = "gap", + [".po|.pot"] = "gettext", + [".glslf|.glslv"] = "glsl", + [".dem|.plt"] = "gnuplot", + [".go"] = "go", + [".groovy|.gvy"] = "groovy", + [".gtkrc"] = "gtkrc", + [".hs"] = "haskell", + [".htm|.html|.shtm|.shtml|.xhtml"] = "html", + [".idl|.odl"] = "idl", + [".inf|.ni"] = "inform", + [".cfg|.cnf|.inf|.ini|.reg"] = "ini", + [".io"] = "io_lang", + [".bsh|.java"] = "java", + [".js|.jsfl"] = "javascript", + [".json"] = "json", + [".jsp"] = "jsp", + [".bbl|.dtx|.ins|.ltx|.tex|.sty"] = "latex", + [".less"] = "less", + [".lily|.ly"] = "lilypond", + [".cl|.el|.lisp|.lsp"] = "lisp", + [".litcoffee"] = "litcoffee", + [".lua"] = "lua", + ["GNUmakefile|.iface|.mak|.mk|makefile|Makefile"] = "makefile", + [".md"] = "markdown", + [".n"] = "nemerle", + [".nim"] = "nim", + [".nsh|.nsi|.nsis"] = "nsis", + [".m|.mm|.objc"] = "objective_c", + [".caml|.ml|.mli|.mll|.mly"] = "caml", + [".dpk|.dpr|.p|.pas"] = "pascal", + [".al|.perl|.pl|.pm|.pod"] = "perl", + [".inc|.php|.php3|.php4|.phtml"] = "php", + [".pike|.pmod"] = "pike", + [".PKGBUILD"] = "pkgbuild", + [".ps1"] = "powershell", + [".eps|.ps"] = "ps", + [".prolog"] = "prolog", + [".props|.properties"] = "props", + [".sc|.py|.pyw"] = "python", + [".R|.Rout|.Rhistory|.Rt|Rout.save|Rout.fail"] = "rstats", + [".r|.reb"] = "rebol", + [".rst"] = "rest", + [".orx|.rex"] = "rexx", + [".erb|.rhtml"] = "rhtml", + [".Rakefile|.rake|.rb|.rbw"] = "ruby", + [".rs"] = "rust", + [".sass|.scss"] = "sass", + [".scala"] = "scala", + [".sch|.scm"] = "scheme", + [".bash|.bashrc|.bash_profile|.configure|.csh|.sh|.zsh"] = "bash", + [".changes|.st|.sources"] = "smalltalk", + [".ddl|.sql"] = "sql", + [".tcl|.tk"] = "tcl", + [".texi"] = "texinfo", + [".toml"] = "toml", + [".vala"] = "vala", + [".vcf|.vcard"] = "vcard", + [".v|.ver"] = "verilog", + [".vh|.vhd|.vhdl"] = "vhdl", + [".asa|.bas|.cls|.ctl|.dob|.dsm|.dsr|.frm|.pag|.vb|.vba|.vbs"] = "vb", + [".wsf"] = "wsf", + [".dtd|.svg|.xml|.xsd|.xsl|.xslt|.xul"] = "xml", + [".xtend"] = "xtend", + [".yaml"] = "yaml", +} + +function M.lexer_name(filename) + -- filename = string.lower(filename) + for patterns, lang in pairs(files) do + for pattern in string.gmatch(patterns, '[^|]+') do + if #filename >= #pattern then + local s, e = string.find(filename, pattern, -#pattern, true) + if s ~= e and e == #filename then + return lang + end + end + end + end + return nil +end + return M diff --git a/lexers/themes/default.lua b/lexers/themes/default.lua new file mode 120000 index 0000000..8479b1b --- /dev/null +++ b/lexers/themes/default.lua @@ -0,0 +1 @@ +solarized.lua \ No newline at end of file diff --git a/lexers/themes/solarized.lua b/lexers/themes/solarized.lua new file mode 100644 index 0000000..0575056 --- /dev/null +++ b/lexers/themes/solarized.lua @@ -0,0 +1,54 @@ +-- Solarized color codes Copyright (c) 2011 Ethan Schoonover +local colors = { + ['base03'] = '#002b36', + ['base02'] = '#073642', + ['base01'] = '#586e75', + ['base00'] = '#657b83', + ['base0'] = '#839496', + ['base1'] = '#93a1a1', + ['base2'] = '#eee8d5', + ['base3'] = '#fdf6e3', + ['yellow'] = '#b58900', + ['orange'] = '#cb4b16', + ['red'] = '#dc322f', + ['magenta'] = '#d33682', + ['violet'] = '#6c71c4', + ['blue'] = '#268bd2', + ['cyan'] = '#2aa198', + ['green'] = '#859900', +} + +lexers.colors = colors +-- dark +local fg = ',fore:'..colors.base0..',' +local bg = ',back:'..colors.base03..',' +-- light +-- local fg = ',fore:'..colors.base03..',' +-- local bg = ',back:'..colors.base3..',' + +lexers.STYLE_DEFAULT = bg..fg +lexers.STYLE_NOTHING = bg +lexers.STYLE_CLASS = 'fore:yellow' +lexers.STYLE_COMMENT = 'fore:'..colors.base01 +lexers.STYLE_CONSTANT = 'fore:'..colors.cyan +lexers.STYLE_DEFINITION = 'fore:'..colors.blue +lexers.STYLE_ERROR = 'fore:'..colors.red..',italics' +lexers.STYLE_FUNCTION = 'fore:'..colors.blue +lexers.STYLE_KEYWORD = 'fore:'..colors.green +lexers.STYLE_LABEL = 'fore:'..colors.green +lexers.STYLE_NUMBER = 'fore:'..colors.cyan +lexers.STYLE_OPERATOR = 'fore:'..colors.green +lexers.STYLE_REGEX = 'fore:green' +lexers.STYLE_STRING = 'fore:'..colors.cyan +lexers.STYLE_PREPROCESSOR = 'fore:'..colors.orange +lexers.STYLE_TAG = 'fore:'..colors.red +lexers.STYLE_TYPE = 'fore:'..colors.yellow +lexers.STYLE_VARIABLE = 'fore:'..colors.blue +lexers.STYLE_WHITESPACE = '' +lexers.STYLE_EMBEDDED = 'back:blue' +lexers.STYLE_IDENTIFIER = fg + +lexers.STYLE_LINENUMBER = fg +lexers.STYLE_CURSOR = 'fore:'..colors.base03..',back:'..colors.base0 +-- lexers.STYLE_SELECTION = 'back:'..colors.base02 +lexers.STYLE_SELECTION = 'back:white' -- cgit v1.2.3