Browse Source

Merge branch 'objective_c' into 'master'

Add detection of Objective-C file types

See merge request cppit/jucipp!427
merge-requests/427/merge
doe300 4 months ago
parent
commit
94d8d3c5a5
  1. 15
      src/source.cpp

15
src/source.cpp

@ -83,6 +83,8 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
language = language_manager->get_language("glsl");
else if(extension == ".in" || extension == ".bak")
return guess_language(boost::filesystem::path(file_path).replace_extension());
else if(extension == ".mm")
language = language_manager->get_language("objc");
else if(!file_path.has_extension() && std::any_of(file_path.begin(), file_path.end(),
[](const boost::filesystem::path &path) { return path == "include"; }))
language = language_manager->get_language("cpphdr");
@ -101,6 +103,19 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
}
else if(language->get_id() == "opencl")
language = language_manager->get_language("cpp");
else if(language->get_id() == "octave" && extension == ".m") {
// .m is used for both Octave and Objective-C, so try to differentiate
std::ifstream input(file_path.string(), std::ios::binary);
std::string buffer(256, '\0');
input.read(&buffer[0], static_cast<std::streamsize>(buffer.size()));
buffer.resize(static_cast<std::size_t>(input.gcount()));
if(input && (buffer.find("#import ") != std::string::npos ||
buffer.find("@interface ") != std::string::npos ||
buffer.find("/*") != std::string::npos ||
buffer.find("//") != std::string::npos)) {
language = language_manager->get_language("objc");
}
}
return language;
}

Loading…
Cancel
Save