| 1 | pragma Singleton |
| 2 | import QtQuick |
| 3 | import Quickshell |
| 4 | |
| 5 | // fuzzel-style matching shared by PowerMenu and Runner. |
| 6 | Singleton { |
| 7 | // query chars must appear in order; prefix > word start > contiguous > scattered. q must be lowercase. |
| 8 | function score(label, q) { return scoreLow(label.toLowerCase(), q) } |
| 9 | // same, for an already lowercased s (big dmenu lists lowercase once, not per keystroke) |
| 10 | function scoreLow(s, q) { |
| 11 | if (q === "") return 1 |
| 12 | if (s.indexOf(q) === 0) return 1000 |
| 13 | var w = s.indexOf(" " + q) |
| 14 | if (w >= 0) return 500 |
| 15 | if (s.indexOf(q) >= 0) return 300 |
| 16 | var pos = 0, gaps = 0 |
| 17 | for (var i = 0; i < q.length; i++) { |
| 18 | var f = s.indexOf(q[i], pos) |
| 19 | if (f < 0) return 0 |
| 20 | gaps += f - pos |
| 21 | pos = f + 1 |
| 22 | } |
| 23 | return 100 - gaps |
| 24 | } |
| 25 | } |