mirror of
https://github.com/logseq/logseq.git
synced 2026-05-25 05:04:24 +00:00
Make dictionary namespaces bb compatible
Now that translations are just data no excuse for them not being bb compatible. Also gets rid of needless sexp parsing
This commit is contained in:
@@ -1,58 +1,28 @@
|
||||
(ns logseq.tasks.lang
|
||||
"Tasks related to language translations"
|
||||
(:require [logseq.tasks.rewrite-clj :as rewrite-clj]
|
||||
[clojure.set :as set]
|
||||
(:require [clojure.set :as set]
|
||||
[frontend.dicts :as dicts]
|
||||
[frontend.modules.shortcut.dicts :as shortcut-dicts]
|
||||
[logseq.tasks.util :as task-util]))
|
||||
|
||||
(defn- get-dicts
|
||||
[]
|
||||
(dissoc (rewrite-clj/metadata-var-sexp "src/main/frontend/dicts.cljs" "dicts")
|
||||
:tongue/fallback))
|
||||
(dissoc dicts/dicts :tongue/fallback))
|
||||
|
||||
(defn- get-non-en-shortcuts
|
||||
(defn- get-all-dicts
|
||||
[]
|
||||
(nth (rewrite-clj/metadata-var-sexp "src/main/frontend/modules/shortcut/dict.cljs"
|
||||
"dict")
|
||||
3))
|
||||
|
||||
;; unnecessary complexity :(
|
||||
(defn- decorate-namespace [k]
|
||||
(let [n (name k)
|
||||
ns (namespace k)]
|
||||
(keyword (str "command." ns) n)))
|
||||
|
||||
(defn- get-en-shortcut-dicts
|
||||
[]
|
||||
(->> (rewrite-clj/metadata-var-sexp
|
||||
"src/main/frontend/modules/shortcut/config.cljs"
|
||||
"all-default-keyboard-shortcuts")
|
||||
(map (fn [[k v]] (vector (decorate-namespace k) (:desc v))))
|
||||
(into {})))
|
||||
|
||||
(defn- get-en-categories
|
||||
[]
|
||||
(->> (rewrite-clj/metadata-var-sexp
|
||||
"src/main/frontend/modules/shortcut/config.cljs"
|
||||
"category")
|
||||
(map (fn [[k v]] (vector k (:doc (meta v)))))
|
||||
(into {})))
|
||||
|
||||
(defn- get-shortcuts
|
||||
[]
|
||||
(merge {:en (merge (get-en-categories)
|
||||
(get-en-shortcut-dicts))}
|
||||
(get-non-en-shortcuts)))
|
||||
(merge-with merge (get-dicts) shortcut-dicts/dicts))
|
||||
|
||||
(defn- get-languages
|
||||
[]
|
||||
(->> (rewrite-clj/var-sexp "src/main/frontend/dicts.cljs" "languages")
|
||||
(->> dicts/languages
|
||||
(map (juxt :value :label))
|
||||
(into {})))
|
||||
|
||||
(defn list-langs
|
||||
"List translated langagues with their number of translations"
|
||||
[]
|
||||
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
|
||||
(let [dicts (get-all-dicts)
|
||||
en-count (count (dicts :en))
|
||||
langs (get-languages)]
|
||||
(->> dicts
|
||||
@@ -79,7 +49,7 @@
|
||||
(println "Language" lang "does not have an entry in dicts.cljs")
|
||||
(System/exit 1))
|
||||
all-dicts [[(get-dicts) "frontend/dicts.cljs"]
|
||||
[(get-shortcuts) "shortcut/dict.cljs"]]
|
||||
[shortcut-dicts/dicts "shortcut/dicts.cljs"]]
|
||||
all-missing (map (fn [[dicts file]]
|
||||
[(select-keys (dicts :en)
|
||||
(set/difference (set (keys (dicts :en)))
|
||||
@@ -102,7 +72,7 @@
|
||||
(defn invalid-translations
|
||||
"Lists translation that don't exist in English"
|
||||
[]
|
||||
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
|
||||
(let [dicts (get-all-dicts)
|
||||
;; For now defined as :en but clj-kondo analysis could be more thorough
|
||||
valid-keys (set (keys (dicts :en)))
|
||||
invalid-dicts
|
||||
@@ -122,7 +92,7 @@
|
||||
(defn list-duplicates
|
||||
"Lists translations that are the same as the one in English"
|
||||
[& args]
|
||||
(let [dicts (merge-with merge (get-dicts) (get-shortcuts))
|
||||
(let [dicts (get-all-dicts)
|
||||
en-dicts (dicts :en)
|
||||
lang (or (keyword (first args))
|
||||
(task-util/print-usage "LOCALE"))
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
(ns logseq.tasks.rewrite-clj
|
||||
"Rewrite-clj fns"
|
||||
(:require [rewrite-clj.zip :as z]))
|
||||
|
||||
(defn- find-symbol-value-sexpr
|
||||
([zloc sym] (find-symbol-value-sexpr zloc sym z/right))
|
||||
([zloc sym nav-fn]
|
||||
;; Returns first symbol found
|
||||
(-> (z/find-value zloc z/next sym)
|
||||
nav-fn
|
||||
z/sexpr)))
|
||||
|
||||
(defn var-sexp
|
||||
"Returns value sexp to the right of var"
|
||||
[file string-var]
|
||||
(let [zloc (z/of-string (slurp file))
|
||||
sexp (find-symbol-value-sexpr zloc (symbol string-var))]
|
||||
(or sexp
|
||||
(throw (ex-info "var-sexp must not return nil" {:file file :string-var string-var})))))
|
||||
|
||||
(defn metadata-var-sexp
|
||||
"Returns value sexp to the right of var with metadata"
|
||||
[file string-var]
|
||||
(let [zloc (z/of-string (slurp file))
|
||||
sexp (find-symbol-value-sexpr zloc (symbol string-var) (comp z/right z/up))]
|
||||
(or sexp
|
||||
(throw (ex-info "sexp must not return nil" {:file file :string-var string-var})))))
|
||||
Reference in New Issue
Block a user