You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

139 lines
4.8 KiB

(require 'ac-html-core)
(require 'f)
;;; web-completion-data helpers
(defconst web-completion-data-package-dir
(file-name-directory (or load-file-name (buffer-file-name)))
"The directory where `web-completion-data' package exists.")
(defconst web-completion-data-html-source-dir
(expand-file-name "completion-data" web-completion-data-package-dir)
"The directory where basic completion source of `web-completion-data'
exists.")
(defconst web-completion-data-tag-list-file
(f-expand "html-tag-list" web-completion-data-html-source-dir))
(defconst web-completion-data-tag-doc-dir
(f-expand "html-tag-short-docs" web-completion-data-html-source-dir))
(defun web-completion-data-tag-doc-file (tag)
(f-expand tag web-completion-data-tag-doc-dir))
(defconst web-completion-data-attr-list-dir
(f-expand "html-attributes-list" web-completion-data-html-source-dir))
(defconst web-completion-data-attr-global-list-file
(f-expand "global" web-completion-data-attr-list-dir))
(defun web-completion-data-attr-list-file (tag)
(f-expand tag web-completion-data-attr-list-dir))
(defconst web-completion-data-attr-doc-dir
(f-expand "html-attributes-short-docs" web-completion-data-html-source-dir))
(defun web-completion-data-attr-global-doc-file (attr)
(f-expand (format "global-%s" attr) web-completion-data-attr-doc-dir))
(defun web-completion-data-attr-doc-file (tag attr)
(f-expand (format "%s-%s" tag attr) web-completion-data-attr-doc-dir))
(defconst web-completion-data-attrv-list-dir
(f-expand "html-attrv-list" web-completion-data-html-source-dir))
(defun web-completion-data-attrv-list-file (tag attr)
(f-expand (format "%s-%s" tag attr) web-completion-data-attrv-list-dir))
(defun web-completion-data-attrv-global-list-file (attr)
(f-expand (format "global-%s" attr) web-completion-data-attrv-list-dir))
(defconst web-completion-data-attrv-doc-dir
(f-expand "html-attrv-docs" web-completion-data-html-source-dir))
(defun web-completion-data-attrv-global-doc-file (attr attrv)
(f-expand (format "global-%s-%s" attr (url-hexify-string attrv))
web-completion-data-attrv-doc-dir))
(defun web-completion-data-attrv-doc-file (tag attr attrv)
(f-expand (format "%s-%s-%s" tag attr (url-hexify-string attrv))
web-completion-data-attrv-doc-dir))
;;; cached data
(defvar ac-html--tags-list nil "The list of tags.")
(defvar ac-html--global-attributes nil "The list of global attrs.")
(defvar ac-html--cached-attributes-alist nil)
;;; helper functions
(defun ac-html--load-list-from-file (filepath)
"Return a list separated by \\n from FILEPATH."
(if (file-exists-p filepath)
(with-current-buffer (find-file-noselect filepath)
(unwind-protect
(split-string
(save-restriction
(widen)
(buffer-substring-no-properties (point-min) (point-max)))
"\n" t)
(kill-buffer)))
nil))
(defun ac-html--read-file (file)
"If file exist, return string of contents, otherwise return nil."
(if (file-exists-p file)
(with-temp-buffer
(insert-file-contents file)
(buffer-string))
nil))
;;; functions
(defun ac-html-default-tags ()
(if ac-html--tags-list
ac-html--tags-list
(setq ac-html--tags-list
(ac-html--load-list-from-file web-completion-data-tag-list-file))))
(defun ac-html-default-attrs (tag)
(unless ac-html--global-attributes
(setq ac-html--global-attributes
(ac-html--load-list-from-file
web-completion-data-attr-global-list-file)))
(let (list attr-file)
(setq attr-file (web-completion-data-attr-list-file tag))
(if (file-exists-p attr-file)
(setq list (ac-html--load-list-from-file
attr-file)))
(append list ac-html--global-attributes)))
(defun ac-html-default-attrvs (tag attr)
(append
(ac-html--load-list-from-file
(web-completion-data-attrv-list-file tag attr))
(ac-html--load-list-from-file
(web-completion-data-attrv-global-list-file attr))))
(defun ac-html-default-tag-doc (tag)
(ac-html--read-file (web-completion-data-tag-doc-file tag)))
(defun ac-html-default-attr-doc (tag attr)
(or (ac-html--read-file (web-completion-data-attr-doc-file tag attr))
(ac-html--read-file (web-completion-data-attr-global-doc-file attr))))
(defun ac-html-default-attrv-doc (tag attr attrv)
(or (ac-html--read-file (web-completion-data-attrv-doc-file tag attr attrv))
(ac-html--read-file
(web-completion-data-attrv-global-doc-file attr attrv))))
(ac-html-define-data-provider 'ac-html-default-data-provider
:tag-func 'ac-html-default-tags
:attr-func 'ac-html-default-attrs
:attrv-func 'ac-html-default-attrvs
:tag-doc-func 'ac-html-default-tag-doc
:attr-doc-func 'ac-html-default-attr-doc
:attrv-doc-func 'ac-html-default-attrv-doc)
(provide 'ac-html-default-data-provider)
;;; ac-html-default-data-provider.el ends here