|
@@ -0,0 +1,52 @@
|
|
|
+(ns parse-file
|
|
|
+ (:require [logseq.graph-parser.cli :as gp-cli]
|
|
|
+ [clojure.pprint :as pprint]
|
|
|
+ [datascript.core :as d]))
|
|
|
+
|
|
|
+(defn- colorize-or-pretty-print
|
|
|
+ [results]
|
|
|
+ (if (zero? (.-status (gp-cli/sh ["which" "puget"] {})))
|
|
|
+ (gp-cli/sh ["puget"] {:input (pr-str results)
|
|
|
+ :stdio ["pipe" "inherit" "inherit"]})
|
|
|
+ (pprint/pprint results)))
|
|
|
+
|
|
|
+(defn- get-all-page-properties
|
|
|
+ [db]
|
|
|
+ (->> (d/q '[:find (pull ?b [*])
|
|
|
+ :where
|
|
|
+ [?b :block/properties]]
|
|
|
+ db)
|
|
|
+ (map first)
|
|
|
+ (map (fn [m] (zipmap (keys (:block/properties m)) (repeat 1))))
|
|
|
+ (apply merge-with +)
|
|
|
+ (into {})))
|
|
|
+
|
|
|
+(defn- analyze-file
|
|
|
+ [db file]
|
|
|
+ (let [results (map first
|
|
|
+ (d/q '[:find (pull ?b [:db/id :block/content])
|
|
|
+ :in $ ?path
|
|
|
+ :where
|
|
|
+ [?b :block/page ?page]
|
|
|
+ [?page :block/file ?file]
|
|
|
+ [?file :file/path ?path]]
|
|
|
+ db
|
|
|
+ file))]
|
|
|
+ (colorize-or-pretty-print results)
|
|
|
+ (println "Block count:" (count results))
|
|
|
+ (println "Properties count:" (get-all-page-properties db))))
|
|
|
+
|
|
|
+(defn -main
|
|
|
+ "Prints blocks for given file along with basic file stats"
|
|
|
+ [& args]
|
|
|
+ (when-not (= 2 (count args))
|
|
|
+ (throw (ex-info "Usage: $0 DIR FILE" {})))
|
|
|
+ (println "Parsing...")
|
|
|
+ (let [[dir file] args
|
|
|
+ {:keys [conn]} (gp-cli/parse-graph dir
|
|
|
+ {:verbose false
|
|
|
+ :files [{:file/path file
|
|
|
+ :file/content (gp-cli/slurp file)}]})]
|
|
|
+ (analyze-file @conn file)))
|
|
|
+
|
|
|
+(apply -main *command-line-args*)
|