From c3e4cf6f45cc6d10763cc2668d700454d619d684 Mon Sep 17 00:00:00 2001
From: Keith Hall <kingkeith+git@gmail.com>
Date: Sun, 9 Feb 2025 20:56:51 +0200
Subject: [PATCH] Make map-syntax target case insensitive

---
 src/assets.rs              |  9 ++++++++-
 tests/integration_tests.rs | 21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/assets.rs b/src/assets.rs
index e6c50219..52569082 100644
--- a/src/assets.rs
+++ b/src/assets.rs
@@ -163,7 +163,7 @@ impl HighlightingAssets {
 
         if let Some(MappingTarget::MapTo(syntax_name)) = syntax_match {
             return self
-                .find_syntax_by_name(syntax_name)?
+                .find_syntax_by_token(syntax_name)?
                 .ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()));
         }
 
@@ -259,6 +259,13 @@ impl HighlightingAssets {
             .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
     }
 
+    fn find_syntax_by_token(&self, token: &str) -> Result<Option<SyntaxReferenceInSet>> {
+        let syntax_set = self.get_syntax_set()?;
+        Ok(syntax_set
+            .find_syntax_by_token(token)
+            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
+    }
+
     fn get_syntax_for_file_name(
         &self,
         file_name: &OsStr,
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
index 3aafb17c..befd8039 100644
--- a/tests/integration_tests.rs
+++ b/tests/integration_tests.rs
@@ -2751,6 +2751,27 @@ fn highlighting_independant_from_map_syntax_case() {
         .stderr("");
 }
 
+#[test]
+fn map_syntax_target_syntax_case_insensitive() {
+    let expected = bat()
+        .arg("-f")
+        .arg("--map-syntax=*.config:json")
+        .arg("map-syntax_case.Config")
+        .assert()
+        .get_output()
+        .stdout
+        .clone();
+
+    bat()
+        .arg("-f")
+        .arg("--map-syntax=*.config:json")
+        .arg("map-syntax_case.Config")
+        .assert()
+        .success()
+        .stdout(expected)
+        .stderr("");
+}
+
 #[test]
 fn strip_ansi_always_strips_ansi() {
     bat()