Browse Source

Merge branch 'shebang' into 'master'

Detect some common script languages via shebang

See merge request cppit/jucipp!428
merge-requests/428/merge
doe300 4 days ago
parent
commit
042b4c620b
  1. 20
      src/source_base.cpp

20
src/source_base.cpp

@ -38,6 +38,24 @@ Glib::RefPtr<Gsv::StyleSchemeManager> Source::StyleSchemeManager::get_default()
return instance; return instance;
} }
static Glib::RefPtr<Gsv::Language> guess_shebang(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::LanguageManager> &language_manager) {
std::ifstream input(file_path.string(), std::ios::binary);
std::string line;
if(!std::getline(input, line) || line.empty() || line == "#!")
return {};
if(line.find("perl") < line.size())
return language_manager->get_language("perl");
else if(line.find("python3") < line.size())
return language_manager->get_language("python3");
else if(line.find("python") < line.size())
return language_manager->get_language("python");
else if(line.find("sh") < line.size())
return language_manager->get_language("sh");
return {};
}
Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path &file_path) { Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path &file_path) {
auto language_manager = LanguageManager::get_default(); auto language_manager = LanguageManager::get_default();
bool result_uncertain = false; bool result_uncertain = false;
@ -81,6 +99,8 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
std::string tag(5, '\0'); std::string tag(5, '\0');
if(input && input.read(&tag[0], static_cast<std::streamsize>(tag.size())) && tag == "<?xml") if(input && input.read(&tag[0], static_cast<std::streamsize>(tag.size())) && tag == "<?xml")
language = language_manager->get_language("xml"); language = language_manager->get_language("xml");
else if(input && starts_with(tag, "#!"))
language = guess_shebang(file_path, language_manager);
} }
} }
else if(language->get_id() == "cuda") { else if(language->get_id() == "cuda") {

Loading…
Cancel
Save