Add highlight script
This commit is contained in:
parent
9d686e9a45
commit
8944c52336
1 changed files with 28 additions and 0 deletions
28
bin/highlight
Executable file
28
bin/highlight
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env luajit
|
||||
-- vim: set noexpandtab tabstop=3 :miv --
|
||||
|
||||
local ansicolors = require 'ansicolors'
|
||||
local lpeg = require 'lpeg'
|
||||
|
||||
local colors = { 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan' }
|
||||
|
||||
local function uncase(str)
|
||||
local p = lpeg.P(0)
|
||||
for char in str:gmatch('.') do
|
||||
p = p * (lpeg.P(char:upper()) + lpeg.P(char:lower()))
|
||||
end
|
||||
return p
|
||||
end
|
||||
|
||||
local pattern = lpeg.P(false)
|
||||
for i=1, select('#', ...) do
|
||||
pattern = pattern + uncase(select(i, ...)) / function(capture) return ansicolors('%{'..colors[(i-1)%#colors+1]..' underline}'..capture) end
|
||||
end
|
||||
|
||||
pattern = lpeg.Cs((pattern + lpeg.P(1)) ^ 1)
|
||||
|
||||
print(pattern:match('hello world testing stuff!'))
|
||||
|
||||
for line in io.stdin:lines() do
|
||||
print(pattern:match(line) or '')
|
||||
end
|
Loading…
Reference in a new issue