aboutsummaryrefslogtreecommitdiff
path: root/lexers
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-10-12 17:09:41 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-11-08 13:37:23 +0100
commitc339bb3ae6646c3dbef8e73f41c1e797ed5ec99b (patch)
treeb27016384ad5cad67377a318f8f130fb40c3aab5 /lexers
parent5f5699fb3a93f2a478f3888236f7c25bc7975fbb (diff)
downloadvis-c339bb3ae6646c3dbef8e73f41c1e797ed5ec99b.tar.gz
vis-c339bb3ae6646c3dbef8e73f41c1e797ed5ec99b.tar.xz
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
Diffstat (limited to 'lexers')
-rw-r--r--lexers/diff.lua6
-rw-r--r--lexers/lexer.lua128
l---------lexers/themes/default.lua1
-rw-r--r--lexers/themes/solarized.lua54
4 files changed, 184 insertions, 5 deletions
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'