cosmopolitan/tool/emacs/javadown.el

75 lines
2.6 KiB
EmacsLisp

;;; javadown.el --- C/C++ Markdown Javadocs
;; Copyright 2019 Justine Tunney
;; Author: Justine Tunney
;; Version: 0.1
;; Permission to use, copy, modify, and/or distribute this software for any
;; purpose with or without fee is hereby granted, provided that the above
;; copyright notice and this permission notice appear in all copies.
;;
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;;; Commentary:
;;
;; Unintentionally empty.
;;; Code:
(require 'cc-fonts)
(defconst javadown-font-lock-doc-comments
`(;; e.g. ### Implementation Details
("^\\(/\\*\\)?\\(\\s \\|\\*\\)*\\(#+[^\n\r]+\\)"
3 ,c-doc-markup-face-name prepend nil)
;; e.g. {@code param}
("{@[a-z]+[^}\n\r]*}"
0 ,c-doc-markup-face-name prepend nil)
;; e.g. @param name does stuff
("^\\(/\\*\\)?\\(\\s \\|\\*\\)*\\(@[a-z]+\\)"
3 ,c-doc-markup-face-name prepend nil)
;; e.g. <video src=doge.mp4>
(,(concat "</?\\sw"
"\\("
(concat "\\sw\\|\\s \\|[=\n\r*.:]\\|"
"\"[^\"]*\"\\|'[^']*'")
"\\)*>")
0 ,c-doc-markup-face-name prepend nil)))
;; (defconst javadown-font-lock-doc-comments
;; `(("{@[a-z]+[^}\n\r]*}" ; "{@foo ...}" markup.
;; 0 ,c-doc-markup-face-name prepend nil)
;; ("^\\(/\\*\\)?\\(\\s \\|\\*\\)*\\(@[a-z]+\\)" ; "@foo ..." markup.
;; 3 ,c-doc-markup-face-name prepend nil)
;; (,(concat "</?\\sw" ; HTML tags.
;; "\\("
;; (concat "\\sw\\|\\s \\|[=\n\r*.:]\\|"
;; "\"[^\"]*\"\\|'[^']*'")
;; "\\)*>")
;; 0 ,c-doc-markup-face-name prepend nil)
;; ;; ("&\\(\\sw\\|[.:]\\)+;" ; HTML entities.
;; ;; 0 ,c-doc-markup-face-name prepend nil)
;; ;; Fontify remaining markup characters as invalid. Note
;; ;; that the Javadoc spec is hazy about when "@" is
;; ;; allowed in non-markup use. [jart: we like markdown]
;; ;; (,(lambda (limit)
;; ;; (c-find-invalid-doc-markup "[<>&]\\|{@" limit))
;; ;; 0 'font-lock-warning-face prepend nil)
;; ))
(defconst javadown-font-lock-keywords
`((,(lambda (limit)
(c-font-lock-doc-comments "/\\*\\*" limit
javadown-font-lock-doc-comments)))))
(provide 'javadown)
;;; javadown.el ends here