如何用 JavaScript 解析 archive-contents 文件?

想重新弄下 Emacs China ELPA 镜像,用 JavaScript(Node.js)实现同步的功能,需要解析 https://elpa.gnu.org/packages/archive-contents ,形如:

 (ace-window .
	     [(0 10 0)
	      ((avy
		(0 5 0)))
	      "Quickly switch windows." tar
	      ((:url . "https://github.com/abo-abo/ace-window")
	       (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
	       (:authors
		("Oleh Krehel" . "ohwoeowho@gmail.com"))
	       (:keywords "window" "location"))])

试过几个 JavaScript 的 sexp 库,没发现可用的。

用clojurescript 哈哈

用cgi调用emacs生成json

1赞

不清楚 Clojure 有没有解析 Emacs Lisp 的 Sexp 的工具?

这可行,缺点是依赖 Emacs,而且得写不少 Emacs Lisp 代码,实在没办法就只能用它了。MELPA 的 https://melpa.org/archive.json 就是用 Emacs 生成的。

Emacs Lisp 应该不用写很多,read 以后对一些不能自动转化的数据类型做一下处理用 27.1 自带的 JSON 函数就行了.

如果一定要 Node 的话,整个 parser generator 重写个专门读 package description 的 parser 应该工作量也不大。比如 https://github.com/harc/ohm

1赞

看了看感觉我弄不来,有机会再看看。用 Racket 做这个的 parser 应该比较容易,不知道能不能再转成 JS 或 WASM。可惜 Emacs Lisp 不能直接弄成 WASM。

这个程序用 elisp 写呢?

现在的 elpa 镜像就是用 elisp + shell script 写的,现在想重写,想试一试 JavaScript。