diff --git a/src/source.cpp b/src/source.cpp index 98b4ea1..9b7c5cc 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -103,6 +103,19 @@ Glib::RefPtr 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(buffer.size())); + buffer.resize(static_cast(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; }