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
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
|
|
|