Browse Source

HackStudio: Add syntax highlighting for HTML, Shell, and SQL files

.html files were recognised before -- the name was shown on
the statusbar, but it didn't actually enable the syntax highlighting.

This also sneaks a highlighting for JSON using JS highlighting.
It isn't technically correct, but so does TextEditor. :^)
Karol Kosek 4 years ago
parent
commit
bf322e072f

+ 1 - 1
Userland/DevTools/HackStudio/CMakeLists.txt

@@ -50,5 +50,5 @@ set(SOURCES
 )
 
 serenity_app(HackStudio ICON app-hack-studio)
-target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibCpp LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell LibSymbolication LibRegex)
+target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibCpp LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell LibSymbolication LibRegex LibSQL)
 add_dependencies(HackStudio CppLanguageServer)

+ 8 - 0
Userland/DevTools/HackStudio/Editor.cpp

@@ -29,9 +29,11 @@
 #include <LibGUI/Window.h>
 #include <LibJS/SyntaxHighlighter.h>
 #include <LibMarkdown/Document.h>
+#include <LibSQL/AST/SyntaxHighlighter.h>
 #include <LibWeb/DOM/ElementFactory.h>
 #include <LibWeb/DOM/Text.h>
 #include <LibWeb/HTML/HTMLHeadElement.h>
+#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
 #include <LibWeb/OutOfProcessWebView.h>
 #include <Shell/SyntaxHighlighter.h>
 #include <fcntl.h>
@@ -597,6 +599,9 @@ void Editor::set_syntax_highlighter_for(const CodeDocument& document)
     case Language::GML:
         set_syntax_highlighter(make<GUI::GMLSyntaxHighlighter>());
         break;
+    case Language::HTML:
+        set_syntax_highlighter(make<Web::HTML::SyntaxHighlighter>());
+        break;
     case Language::JavaScript:
         set_syntax_highlighter(make<JS::SyntaxHighlighter>());
         break;
@@ -606,6 +611,9 @@ void Editor::set_syntax_highlighter_for(const CodeDocument& document)
     case Language::Shell:
         set_syntax_highlighter(make<Shell::SyntaxHighlighter>());
         break;
+    case Language::SQL:
+        set_syntax_highlighter(make<SQL::AST::SyntaxHighlighter>());
+        break;
     default:
         set_syntax_highlighter({});
     }

+ 11 - 5
Userland/DevTools/HackStudio/Language.cpp

@@ -13,14 +13,18 @@ Language language_from_file_extension(const String& extension)
     VERIFY(!extension.starts_with("."));
     if (extension == "cpp" || extension == "h")
         return Language::Cpp;
-    else if (extension == "js")
+    else if (extension == "js" || extension == "json")
         return Language::JavaScript;
+    else if (extension == "html" || extension == "htm")
+        return Language::HTML;
     else if (extension == "gml")
         return Language::GML;
     else if (extension == "ini")
         return Language::Ini;
-    else if (extension == "sh")
+    else if (extension == "sh" || extension == "bash")
         return Language::Shell;
+    else if (extension == "sql")
+        return Language::SQL;
 
     return Language::Unknown;
 }
@@ -42,18 +46,20 @@ String language_name_from_file_extension(const String& extension)
     VERIFY(!extension.starts_with("."));
     if (extension == "cpp" || extension == "h")
         return "C++";
-    else if (extension == "js")
+    else if (extension == "js" || extension == "json")
         return "JavaScript";
     else if (extension == "gml")
         return "GML";
     else if (extension == "ini")
         return "Ini";
-    else if (extension == "sh")
+    else if (extension == "sh" || extension == "bash")
         return "Shell";
     else if (extension == "md")
         return "Markdown";
-    else if (extension == "html")
+    else if (extension == "html" || extension == "htm")
         return "HTML";
+    else if (extension == "sql")
+        return "SQL";
     else if (extension == "txt")
         return "Plaintext";
 

+ 2 - 0
Userland/DevTools/HackStudio/Language.h

@@ -13,9 +13,11 @@ enum class Language {
     Unknown,
     Cpp,
     JavaScript,
+    HTML,
     GML,
     Ini,
     Shell,
+    SQL,
 };
 
 Language language_from_file_extension(const String&);