|
|
|
@ -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") { |
|
|
|
|