#!/bin/sh # Fetches the pinned grammars' highlight queries into Sources/OrgHighlight/Queries.swift. # Usage: scripts/update-highlight-queries.sh set -eu cd "$(dirname "$0")/.." python3 - <<'PY' import urllib.request # language: [(repository, ref, query path), ...]; several files are concatenated in order. QUERIES = { "bash": [("tree-sitter/tree-sitter-bash", "v0.25.1", "queries/highlights.scm")], "c": [("tree-sitter/tree-sitter-c", "v0.24.2", "queries/highlights.scm")], "clojure": [("sogaiu/tree-sitter-clojure", "v0.0.13", "queries/highlights.scm")], "cpp": [("tree-sitter/tree-sitter-c", "v0.24.2", "queries/highlights.scm"), ("tree-sitter/tree-sitter-cpp", "v0.23.4", "queries/highlights.scm")], "elisp": [("Wilfred/tree-sitter-elisp", "0cbf0906d9ee707c8c109422fba9cdd17ae13dcf", "queries/highlights.scm")], "go": [("tree-sitter/tree-sitter-go", "v0.25.0", "queries/highlights.scm")], "haskell": [("tree-sitter/tree-sitter-haskell", "v0.24.1", "queries/highlights.scm")], "java": [("tree-sitter/tree-sitter-java", "v0.23.5", "queries/highlights.scm")], "javascript": [("tree-sitter/tree-sitter-javascript", "v0.25.0", "queries/highlights.scm")], "json": [("tree-sitter/tree-sitter-json", "v0.24.8", "queries/highlights.scm")], "lua": [("tree-sitter-grammars/tree-sitter-lua", "v0.5.0", "queries/highlights.scm")], "python": [("tree-sitter/tree-sitter-python", "v0.25.0", "queries/highlights.scm")], "r": [("r-lib/tree-sitter-r", "v1.3.0", "queries/highlights.scm")], "ruby": [("tree-sitter/tree-sitter-ruby", "v0.23.1", "queries/highlights.scm")], "rust": [("tree-sitter/tree-sitter-rust", "v0.24.2", "queries/highlights.scm")], "scheme": [("6cdh/tree-sitter-scheme", "v0.24.7-1", "queries/highlights.scm")], # Orgstar's own query, in scripts/queries. "toml": [("local", None, "scripts/queries/toml.scm")], "yaml": [("tree-sitter-grammars/tree-sitter-yaml", "v0.7.2", "queries/highlights.scm")], } out = ["// Generated by scripts/update-highlight-queries.sh from the grammars' own highlight", "// queries, at the versions Package.swift pins. Do not edit.", "", "enum HighlightQueries {", " static let source: [String: String] = ["] for language, files in sorted(QUERIES.items()): text = "" for repo, ref, path in files: if repo == "local": text += open(path, encoding="utf-8").read() + "\n" continue url = f"https://raw.githubusercontent.com/{repo}/{ref}/{path}" text += urllib.request.urlopen(url).read().decode("utf-8") + "\n" assert '"""####' not in text out.append(f' "{language}": ####"""') # Multi-line string lines are indented as far as the closing delimiter. out.extend((" " + line) if line else "" for line in text.rstrip("\n").split("\n")) out.append(' """####,') out += [" ]", "}", ""] open("Sources/OrgHighlight/Queries.swift", "w").write("\n".join(out)) PY