Update mruby api.
This commit is contained in:
@@ -4,9 +4,12 @@
|
||||
#include "syntax/decl.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
extern std::unordered_map<std::string, std::pair<mrb_value, mrb_value>>
|
||||
custom_highlighters;
|
||||
extern mrb_state *mrb;
|
||||
extern fs::path ruby_config_path;
|
||||
|
||||
struct BarLight {
|
||||
uint32_t start;
|
||||
@@ -32,14 +35,16 @@ void ruby_start();
|
||||
void ruby_shutdown();
|
||||
void ruby_copy(const char *text, size_t len);
|
||||
std::string ruby_paste();
|
||||
std::string ruby_file_detect(std::string filename);
|
||||
void load_theme();
|
||||
void load_languages_info();
|
||||
uint8_t read_line_endings();
|
||||
void load_custom_highlighters();
|
||||
mrb_value parse_custom(std::vector<Token> *tokens, mrb_value parser_block,
|
||||
const char *line, uint32_t len, mrb_value state,
|
||||
uint32_t c_line);
|
||||
bool custom_compare(mrb_value match_block, mrb_value state1, mrb_value state2);
|
||||
bool custom_compare(mrb_value match_block, std::string state1,
|
||||
std::string state2);
|
||||
std::string parse_custom(std::vector<Token> *tokens, mrb_value parser_block,
|
||||
const char *line, uint32_t len, std::string state,
|
||||
uint32_t c_line);
|
||||
BarLine bar_contents(uint8_t mode, std::string lang_name, uint32_t warnings,
|
||||
std::string lsp_name, std::string filename,
|
||||
std::string foldername, uint32_t line, uint32_t max_line,
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
def command_exists?(cmd)
|
||||
system("command -v #{cmd} > /dev/null 2>&1")
|
||||
end
|
||||
|
||||
module Clipboard
|
||||
@clip = ""
|
||||
@os = :os_name_placed_here
|
||||
|
||||
class << self
|
||||
def command_exists?(cmd)
|
||||
system("command -v #{cmd} > /dev/null 2>&1")
|
||||
end
|
||||
def copy(text)
|
||||
if @os == :windows
|
||||
IO.popen("clip", "w") { |f| f.write(text) }
|
||||
@@ -375,12 +376,44 @@ module C
|
||||
@b_paste = proc do
|
||||
next Clipboard.paste
|
||||
end
|
||||
@b_file_detect = proc do |filename|
|
||||
type = :default
|
||||
next type unless File.exist?(filename)
|
||||
first_line = File.open(filename, &:readline).chomp
|
||||
if first_line.start_with?("#!")
|
||||
shebang = first_line[2..].downcase
|
||||
type = case shebang
|
||||
when /bash/, /sh/ then :bash
|
||||
when /fish/ then :fish
|
||||
when /python/ then :python
|
||||
when /ruby/ then :ruby
|
||||
when /lua/ then :lua
|
||||
else :default
|
||||
end
|
||||
next type
|
||||
end
|
||||
next type if :os_name_placed_here != :linux || :os_name_placed_here != :mac
|
||||
next type if !command_exists?("file")
|
||||
mimetype = `file --mime-type -b #{filename}`.chomp
|
||||
type = case mimetype
|
||||
when /shellscript/ then :bash
|
||||
when /ruby/ then :ruby
|
||||
when /diff/ then :diff
|
||||
when /html/ then :html
|
||||
when /python/ then :python
|
||||
when /javascript/ then :javascript
|
||||
when /makefile/ then :makefile
|
||||
when /-c$/ then :c
|
||||
else :default
|
||||
end
|
||||
next type
|
||||
end
|
||||
|
||||
class << self
|
||||
attr_accessor :theme, :lsp_config, :languages,
|
||||
:line_endings, :highlighters
|
||||
attr_reader :b_startup, :b_shutdown, :b_extra_highlights,
|
||||
:b_bar, :b_copy, :b_paste
|
||||
:b_bar, :b_copy, :b_paste, :b_file_detect
|
||||
|
||||
def bar=(&block)
|
||||
@b_bar = block
|
||||
@@ -402,6 +435,10 @@ module C
|
||||
@b_paste = block
|
||||
end
|
||||
|
||||
def file_detect(&block)
|
||||
@b_file_detect = block
|
||||
end
|
||||
|
||||
def extra_highlights(&block)
|
||||
@b_extra_highlights = block
|
||||
end
|
||||
@@ -437,3 +474,22 @@ module C
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
$LOADED ||= []
|
||||
|
||||
module Kernel
|
||||
def require_relative(path, bind = nil)
|
||||
path += ".rb" unless path.end_with?(".rb")
|
||||
path = File.expand_path(path, File.dirname(C.config_file))
|
||||
return if $LOADED.include?(path)
|
||||
$LOADED << path
|
||||
code = File.read(path)
|
||||
eval(code, bind || binding, path)
|
||||
end
|
||||
def load(path, bind = nil)
|
||||
path += ".rb" unless path.end_with?(".rb")
|
||||
path = File.expand_path(path, File.dirname(C.config_file))
|
||||
$LOADED.delete(path)
|
||||
require_relative(path, bind)
|
||||
end
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user