diff --git a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp index 318113eab6..044af42d74 100644 --- a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp +++ b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp @@ -120,7 +120,7 @@ SourceCodeEditor::SourceCodeEditor (OpenDocumentManager::Document* doc, CodeDocu GenericCodeEditorComponent* ed = nullptr; const File file (document->getFile()); - if (file.hasFileExtension (sourceOrHeaderFileExtensions)) + if (fileNeedsCppSyntaxHighlighting (file)) { ed = new CppCodeEditorComponent (file, codeDocument); } diff --git a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp index 460db23d61..8cde888d87 100644 --- a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp +++ b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.cpp @@ -243,6 +243,20 @@ int indexOfLineStartingWith (const StringArray& lines, const String& text, int i return -1; } +//============================================================================== +bool fileNeedsCppSyntaxHighlighting (const File& file) +{ + if (file.hasFileExtension (sourceOrHeaderFileExtensions)) + return true; + + // This is a bit of a bodge to deal with libc++ headers with no extension.. + char fileStart[64] = { 0 }; + FileInputStream fin (file); + fin.read (fileStart, sizeof (fileStart) - 4); + + return String (fileStart).trimStart().startsWith ("// -*- C++ -*-"); +} + //============================================================================== RolloverHelpComp::RolloverHelpComp() : lastComp (nullptr) diff --git a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h index 0a6e2f6e11..86b50cfdf2 100644 --- a/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h +++ b/extras/Introjucer/Source/Utility/jucer_MiscUtilities.h @@ -50,6 +50,8 @@ void addPlistDictionaryKey (XmlElement* xml, const String& key, const String& va void addPlistDictionaryKeyBool (XmlElement* xml, const String& key, bool value); void addPlistDictionaryKeyInt (XmlElement* xml, const String& key, int value); +bool fileNeedsCppSyntaxHighlighting (const File& file); + //============================================================================== int indexOfLineStartingWith (const StringArray& lines, const String& text, int startIndex);