aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/syntax-highlighting/patches/0006-Syntax-Highlighter-return-all-definitions-for-a-file.patch
blob: b9de66121c64a2465fc9efa9cc42247cf3b11367 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
From 4b64058fe7d788ac79c16a08b280ce05d500e9fb Mon Sep 17 00:00:00 2001
From: Alessandro Portale <alessandro.portale@qt.io>
Date: Tue, 12 Feb 2019 19:32:54 +0100
Subject: [PATCH 6/6] Syntax Highlighter: return all definitions for a file
 name/mimetype

Can be used to create user controls to switch between
multiple definitions for a file or mime type.

Change-Id: I5fd3744db1e819d0d6f8448a53adaf9d2c7c168d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
---
 src/lib/repository.cpp | 17 +++++++++++++----
 src/lib/repository.h   | 12 ++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/lib/repository.cpp b/src/lib/repository.cpp
index 6b2fabd..922225a 100644
--- a/src/lib/repository.cpp
+++ b/src/lib/repository.cpp
@@ -78,7 +78,7 @@ Definition Repository::definitionForName(const QString& defName) const
     return d->m_defs.value(defName);
 }
 
-static Definition bestCandidate(QVector<Definition>& candidates)
+static Definition bestCandidate(QVector<Definition> &&candidates)
 {
     if (candidates.isEmpty())
         return Definition();
@@ -91,6 +91,11 @@ static Definition bestCandidate(QVector<Definition>& candidates)
 }
 
 Definition Repository::definitionForFileName(const QString& fileName) const
+{
+    return bestCandidate(definitionsForFileName(fileName));
+}
+
+QVector<Definition> Repository::definitionsForFileName(const QString &fileName) const
 {
     QFileInfo fi(fileName);
     const auto name = fi.fileName();
@@ -106,10 +111,15 @@ Definition Repository::definitionForFileName(const QString& fileName) const
         }
     }
 
-    return bestCandidate(candidates);
+    return candidates;
 }
 
 Definition Repository::definitionForMimeType(const QString& mimeType) const
+{
+    return bestCandidate(definitionsForMimeType(mimeType));
+}
+
+QVector<Definition> Repository::definitionsForMimeType(const QString &mimeType) const
 {
     QVector<Definition> candidates;
     for (auto it = d->m_defs.constBegin(); it != d->m_defs.constEnd(); ++it) {
@@ -121,8 +131,7 @@ Definition Repository::definitionForMimeType(const QString& mimeType) const
             }
         }
     }
-
-    return bestCandidate(candidates);
+    return candidates;
 }
 
 QVector<Definition> Repository::definitions() const
diff --git a/src/lib/repository.h b/src/lib/repository.h
index c35da5e..e4e9bed 100644
--- a/src/lib/repository.h
+++ b/src/lib/repository.h
@@ -166,6 +166,13 @@ public:
      */
     Definition definitionForFileName(const QString &fileName) const;
 
+    /**
+     * Returns all Definition%s for the file named @p fileName.
+     * The match is performed based on the \e extensions and @e mimetype of
+     * the definition files.
+     */
+    QVector<Definition> definitionsForFileName(const QString &fileName) const;
+
     /**
      * Returns the best matching Definition to the type named @p mimeType
      *
@@ -176,6 +183,11 @@ public:
      */
     Definition definitionForMimeType(const QString &mimeType) const;
 
+    /**
+     * Returns all Definition%s to the type named @p mimeType
+     */
+    QVector<Definition> definitionsForMimeType(const QString &mimeType) const;
+
     /**
      * Returns all available Definition%s.
      * Definition%ss are ordered by translated section and translated names,
-- 
2.20.1.windows.1