Update modules/lang/*

This commit is contained in:
Henrik Lissner 2017-02-19 18:57:16 -05:00
parent f0adef1b01
commit e14e25ecb4
68 changed files with 1487 additions and 750 deletions

47
modules/lang/web/+css.el Normal file
View file

@ -0,0 +1,47 @@
;;; lang/web/+css.el
(sp-with-modes '(css-mode scss-mode less-css-mode stylus-mode)
(sp-local-pair "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC"))))
(@map :map* (css-mode-map scss-mode-map less-css-mode-map)
:n "M-R" '+css/web-refresh-browser
:localleader
:nv ";" '+css/append-semicolon
:prefix "r"
:n "b" '+css/toggle-inline-or-block)
;;
;; Packages
;;
(@def-package css-mode
:mode "\\.css$"
:mode ("\\.scss$" . scss-mode)
:init
(@add-hook css-mode
'(yas-minor-mode-on flycheck-mode rainbow-mode highlight-numbers-mode
;; doom|counsel-css-imenu-setup
))
:config
(@set :company-backend '(css-mode scss-mode) '(company-css company-yasnippet))
(@set :build 'scss 'scss-mode '+css/scss-build))
(@def-package sass-mode
:mode "\\.sass$"
:config
(setq sass-command-options '("--style compressed"))
(@set :build 'sass 'sass-mode '+css/sass-build)
(@set :company-backend 'sass-mode '(company-css company-yasnippet)))
(@def-package less-css-mode
:mode "\\.less$")
(@def-package stylus-mode
:mode "\\.styl$"
:init (@add-hook stylus-mode '(yas-minor-mode-on flycheck-mode)))

63
modules/lang/web/+html.el Normal file
View file

@ -0,0 +1,63 @@
;;; lang/web/config.el
(@def-package web-mode
:mode ("\\.p?html?$"
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
"\\.erb$"
"\\.jsp$"
"\\.as[cp]x$"
"\\.mustache$"
"\\.tsx$"
"wp-content/themes/.+/.+\\.php$")
:init
(add-hook 'web-mode-hook 'turn-off-smartparens-mode)
:config
(@set :company-backend 'web-mode '(company-web-html company-yasnippet))
(setq web-mode-enable-html-entities-fontification t)
;; Fix blank line numbers after unfolding
(advice-add 'web-mode-fold-or-unfold :after 'nlinum--flush)
(@map :map web-mode-map
(:localleader :n "t" 'web-mode-element-rename)
"M-/" 'web-mode-comment-or-uncomment
:i "SPC" 'self-insert-command
:n "M-r" 'doom/web-refresh-browser
:n "za" 'web-mode-fold-or-unfold
:nv "]a" 'web-mode-attribute-next
:nv "[a" 'web-mode-attribute-previous
:nv "]t" 'web-mode-tag-next
:nv "[t" 'web-mode-tag-previous
:nv "]T" 'web-mode-element-child
:nv "[T" 'web-mode-element-parent)
(@def-package company-web :after company))
(@def-package haml-mode :mode "\\.haml$")
(@def-package pug-mode
:mode ("\\.jade$" "\\.pug$")
:config
(@set :company-backend 'pug-mode '(company-yasnippet))
(@map :map pug-mode-map
:i [tab] 'doom/dumb-indent
:i [backtab] 'doom/dumb-dedent))
;;
;; Tools
;;
(@def-package emmet-mode
:commands emmet-mode
:preface (defvar emmet-mode-keymap (make-sparse-keymap))
:init
(@add-hook (scss-mode web-mode html-mode haml-mode nxml-mode) 'emmet-mode)
:config
(setq emmet-move-cursor-between-quotes t)
(@map :map emmet-mode-keymap
:v "M-e" 'emmet-wrap-with-markup
:i "M-e" 'emmet-expand-yas
:i "M-E" 'emmet-expand-line))

View file

@ -0,0 +1,7 @@
;;; lang/web/+css.el
;;;###autoload
(defun +css/scss-build ()) ; TODO
;;;###autoload
(defun +css/sass-build ()) ; TODO

View file

@ -0,0 +1,20 @@
;;; lang/html/autoload/evil.el
;;;###autoload (autoload '+html:encode-html-entities "lang/html/autoload/evil" nil t)
(evil-define-operator +html:encode-html-entities (beg end &optional input)
"Encodes HTML entities in the selected region."
(interactive "<r><a>")
(cond (input
(insert (+html-encode-entities input)))
((and beg end)
(+html/encode-entities-region beg end))))
;;;###autoload (autoload '+html:decode-html-entities "lang/html/autoload/evil" nil t)
(evil-define-operator +html:decode-html-entities (beg end &optional input)
"Decodes HTML entities in the selected region."
(interactive "<r><a>")
(cond (input
(insert (+html-decode-entities input)))
((and beg end)
(+html/decode-entities-region beg end))))

View file

@ -0,0 +1,59 @@
;;; lang/web/autoload/html.el
;;;###autoload
(defvar +web-entities-list
[["&nbsp;" " "] ["&ensp;" ""] ["&emsp;" ""] ["&thinsp;" ""]
["&rlm;" ""] ["&lrm;" ""] ["&zwj;" ""] ["&zwnj;" ""]
["&iexcl;" "¡"] ["&cent;" "¢"] ["&pound;" "£"] ["&curren;" "¤"] ["&yen;" "¥"] ["&brvbar;" "¦"] ["&sect;" "§"] ["&uml;" "¨"] ["&copy;" "©"] ["&ordf;" "ª"] ["&laquo;" "«"] ["&not;" "¬"] ["&shy;" "­"] ["&reg;" "®"] ["&macr;" "¯"] ["&deg;" "°"] ["&plusmn;" "±"] ["&sup2;" "²"] ["&sup3;" "³"] ["&acute;" "´"] ["&micro;" "µ"] ["&para;" ""] ["&middot;" "·"] ["&cedil;" "¸"] ["&sup1;" "¹"] ["&ordm;" "º"] ["&raquo;" "»"] ["&frac14;" "¼"] ["&frac12;" "½"] ["&frac34;" "¾"] ["&iquest;" "¿"]
["&Agrave;" "À"] ["&Aacute;" "Á"] ["&Acirc;" "Â"] ["&Atilde;" "Ã"] ["&Auml;" "Ä"] ["&Aring;" "Å"] ["&AElig;" "Æ"] ["&Ccedil;" "Ç"] ["&Egrave;" "È"] ["&Eacute;" "É"] ["&Ecirc;" "Ê"] ["&Euml;" "Ë"] ["&Igrave;" "Ì"] ["&Iacute;" "Í"] ["&Icirc;" "Î"] ["&Iuml;" "Ï"] ["&ETH;" "Ð"] ["&Ntilde;" "Ñ"] ["&Ograve;" "Ò"] ["&Oacute;" "Ó"] ["&Ocirc;" "Ô"] ["&Otilde;" "Õ"] ["&Ouml;" "Ö"] ["&times;" "×"] ["&Oslash;" "Ø"] ["&Ugrave;" "Ù"] ["&Uacute;" "Ú"] ["&Ucirc;" "Û"] ["&Uuml;" "Ü"] ["&Yacute;" "Ý"] ["&THORN;" "Þ"] ["&szlig;" "ß"] ["&agrave;" "à"] ["&aacute;" "á"] ["&acirc;" "â"] ["&atilde;" "ã"] ["&auml;" "ä"] ["&aring;" "å"] ["&aelig;" "æ"] ["&ccedil;" "ç"] ["&egrave;" "è"] ["&eacute;" "é"] ["&ecirc;" "ê"] ["&euml;" "ë"] ["&igrave;" "ì"] ["&iacute;" "í"] ["&icirc;" "î"] ["&iuml;" "ï"] ["&eth;" "ð"] ["&ntilde;" "ñ"] ["&ograve;" "ò"] ["&oacute;" "ó"] ["&ocirc;" "ô"] ["&otilde;" "õ"] ["&ouml;" "ö"]
["&divide;" "÷"] ["&oslash;" "ø"] ["&ugrave;" "ù"] ["&uacute;" "ú"] ["&ucirc;" "û"] ["&uuml;" "ü"] ["&yacute;" "ý"] ["&thorn;" "þ"] ["&yuml;" "ÿ"] ["&fnof;" "ƒ"]
["&Alpha;" "Α"] ["&Beta;" "Β"] ["&Gamma;" "Γ"] ["&Delta;" "Δ"] ["&Epsilon;" "Ε"] ["&Zeta;" "Ζ"] ["&Eta;" "Η"] ["&Theta;" "Θ"] ["&Iota;" "Ι"] ["&Kappa;" "Κ"] ["&Lambda;" "Λ"] ["&Mu;" "Μ"] ["&Nu;" "Ν"] ["&Xi;" "Ξ"] ["&Omicron;" "Ο"] ["&Pi;" "Π"] ["&Rho;" "Ρ"] ["&Sigma;" "Σ"] ["&Tau;" "Τ"] ["&Upsilon;" "Υ"] ["&Phi;" "Φ"] ["&Chi;" "Χ"] ["&Psi;" "Ψ"] ["&Omega;" "Ω"] ["&alpha;" "α"] ["&beta;" "β"] ["&gamma;" "γ"] ["&delta;" "δ"] ["&epsilon;" "ε"] ["&zeta;" "ζ"] ["&eta;" "η"] ["&theta;" "θ"] ["&iota;" "ι"] ["&kappa;" "κ"] ["&lambda;" "λ"] ["&mu;" "μ"] ["&nu;" "ν"] ["&xi;" "ξ"] ["&omicron;" "ο"] ["&pi;" "π"] ["&rho;" "ρ"] ["&sigmaf;" "ς"] ["&sigma;" "σ"] ["&tau;" "τ"] ["&upsilon;" "υ"] ["&phi;" "φ"] ["&chi;" "χ"] ["&psi;" "ψ"] ["&omega;" "ω"] ["&thetasym;" "ϑ"] ["&upsih;" "ϒ"] ["&piv;" "ϖ"]
["&bull;" ""] ["&hellip;" ""] ["&prime;" ""] ["&Prime;" ""] ["&oline;" ""] ["&frasl;" ""] ["&weierp;" ""] ["&image;" ""] ["&real;" ""] ["&trade;" ""] ["&alefsym;" ""] ["&larr;" ""] ["&uarr;" ""] ["&rarr;" ""] ["&darr;" ""] ["&harr;" ""] ["&crarr;" ""] ["&lArr;" ""] ["&uArr;" ""] ["&rArr;" ""] ["&dArr;" ""] ["&hArr;" ""] ["&forall;" ""] ["&part;" ""] ["&exist;" ""] ["&empty;" ""] ["&nabla;" ""] ["&isin;" ""] ["&notin;" ""] ["&ni;" ""] ["&prod;" ""] ["&sum;" ""] ["&minus;" ""] ["&lowast;" ""] ["&radic;" ""] ["&prop;" ""] ["&infin;" ""] ["&ang;" ""] ["&and;" ""] ["&or;" ""] ["&cap;" ""] ["&cup;" ""] ["&int;" ""] ["&there4;" ""] ["&sim;" ""] ["&cong;" ""] ["&asymp;" ""] ["&ne;" ""] ["&equiv;" ""] ["&le;" ""] ["&ge;" ""] ["&sub;" ""] ["&sup;" ""] ["&nsub;" ""] ["&sube;" ""] ["&supe;" ""] ["&oplus;" ""] ["&otimes;" ""] ["&perp;" ""] ["&sdot;" ""] ["&lceil;" ""] ["&rceil;" ""] ["&lfloor;" ""] ["&rfloor;" ""] ["&lang;" ""] ["&rang;" ""] ["&loz;" ""] ["&spades;" ""] ["&clubs;" ""] ["&hearts;" ""] ["&diams;" ""] ["&quot;" "\""] ["&OElig;" "Œ"] ["&oelig;" "œ"] ["&Scaron;" "Š"] ["&scaron;" "š"] ["&Yuml;" "Ÿ"] ["&circ;" "ˆ"] ["&tilde;" "˜"] ["&ndash;" ""] ["&mdash;" ""] ["&lsquo;" ""] ["&rsquo;" ""] ["&sbquo;" ""] ["&ldquo;" ""] ["&rdquo;" ""] ["&bdquo;" ""] ["&dagger;" ""] ["&Dagger;" ""] ["&permil;" ""] ["&lsaquo;" ""] ["&rsaquo;" ""] ["&euro;" ""]]
"A list of sequence string pairs, representing an html entity and its decoded
character.")
(defun +web--entities-string (text &optional decode-p)
"HTML encode/decode TEXT. Based on Xah's replace HTML named entities function
@ http://ergoemacs.org/emacs/elisp_replace_html_entities_command.html"
(interactive "<!><r>")
(mapc (lambda (rep)
(let ((from (elt rep (if decode-p 0 1)))
(to (elt rep (if decode-p 1 0))))
(when (s-contains-p from text)
(setq text (s-replace from to text)))))
+web-entities-list)
text)
(defun +web--entities-region (beg end &optional decode-p)
"HTML encode/decode the selected region. Based on Xah's replace HTML named entities
function @ http://ergoemacs.org/emacs/elisp_replace_html_entities_command.html"
(save-restriction
(narrow-to-region beg end)
(let (case-fold-search)
(mapc (lambda (rep)
(goto-char (point-min))
(while (search-forward (elt rep (if decode-p 0 1)) nil t)
(replace-match (elt rep (if decode-p 1 0)) 'FIXEDCASE 'LITERAL)))
reps))))
;;;###autoload
(defun +web-encode-entities (text)
"TODO"
(+web--entities-string text nil))
;;;###autoload
(defun +web-decode-entities (text)
"TODO"
(+web--entities-string text t))
;;;###autoload
(defun +web/encode-entities-region (beg end)
"Encode HTML entities in region."
(interactive "r")
(+web--entities-region beg end))
;;;###autoload
(defun +web/decode-entities-region (beg end)
"Decode HTML entities in region."
(interactive "r")
(+web--entities-region beg end t))

View file

@ -1,113 +1,50 @@
;;; module-web.el
;;; lang/web/config.el
(use-package haml-mode :mode "\\.haml$")
(use-package pug-mode
:mode ("\\.jade$" "\\.pug$")
:config
(def-company-backend! pug-mode (yasnippet))
(push '("jade" "html") projectile-other-file-alist)
(push '("pug" "html") projectile-other-file-alist)
(map! :map pug-mode-map
:i [tab] 'doom/dumb-indent
:i [backtab] 'doom/dumb-dedent))
(use-package web-mode
:mode ("\\.p?html?$"
"\\.\\(tpl\\|blade\\)\\(\\.php\\)?$"
"\\.erb$"
"\\.jsp$"
"\\.as[cp]x$"
"\\.mustache$"
"\\.tsx$"
"wp-content/themes/.+/.+\\.php$")
:init
(add-hook 'web-mode-hook 'turn-off-smartparens-mode)
:config
(def-company-backend! web-mode (web-html yasnippet))
(setq web-mode-enable-html-entities-fontification t)
(push '("html" "jade" "pug" "jsx" "tsx") projectile-other-file-alist)
(map! :map web-mode-map :i "SPC" 'self-insert-command)
(after! nlinum
;; Fix blank line numbers after unfolding
(advice-add 'web-mode-fold-or-unfold :after 'nlinum--flush))
(map! :map web-mode-map
"M-/" 'web-mode-comment-or-uncomment
:n "M-r" 'doom/web-refresh-browser
:n "za" 'web-mode-fold-or-unfold
(:localleader :n "t" 'web-mode-element-rename)
:nv "]a" 'web-mode-attribute-next
:nv "[a" 'web-mode-attribute-previous
:nv "]t" 'web-mode-tag-next
:nv "[t" 'web-mode-tag-previous
:nv "]T" 'web-mode-element-child
:nv "[T" 'web-mode-element-parent))
(@load +html)
(@load +css)
;;
;; Tools
;; TODO Frameworks
;;
(use-package emmet-mode
:commands (emmet-mode)
:init
(add-hook! (scss-mode web-mode html-mode haml-mode nxml-mode) 'emmet-mode)
(defvar emmet-mode-keymap (make-sparse-keymap))
:config
(setq emmet-move-cursor-between-quotes t)
(map! :map emmet-mode-keymap
:v "M-e" 'emmet-wrap-with-markup
:i "M-e" 'emmet-expand-yas
:i "M-E" 'emmet-expand-line))
;; (defvar bower-conf (make-hash-table :test 'equal))
;; (@def-project bower "bower"
;; :modes (web-mode js-mode coffee-mode css-mode sass-mode pug-mode)
;; :files ("bower.json")
;; :when
;; (lambda (&rest _)
;; (let* ((project-path (doom-project-root))
;; (hash (gethash project-path bower-conf))
;; (package-file (f-expand "bower.json" project-path))
;; deps)
;; (awhen (and (not hash) (f-exists? package-file)
;; (ignore-errors (json-read-file package-file)))
;; (puthash project-path it bower-conf)))
;; t))
;; (@def-project angularjs "angular"
;; :modes (nodejs-project-mode bower-project-mode)
;; :when
;; (lambda (&rest _)
;; (let* ((project (doom-project-root))
;; (bower (gethash project bower-conf))
;; (npm (gethash project npm-conf))
;; (deps (append (cdr-safe (assq 'dependencies bower))
;; (cdr-safe (assq 'dependencies npm))
;; (cdr-safe (assq 'devDependencies bower))
;; (cdr-safe (assq 'devDependencies npm)))))
;; (assq 'angular deps))))
;;
;; Project types
;;
;; (@def-project jekyll ":{"
;; :modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
;; :match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$"
;; :files ("config.yml" "_layouts/")
;; (@add-hook mode
;; (when (eq major-mode 'web-mode)
;; (web-mode-set-engine "django"))))
(defvar bower-conf (make-hash-table :test 'equal))
(def-project-type! bower "bower"
:modes (web-mode js-mode coffee-mode css-mode sass-mode pug-mode)
:files ("bower.json")
:when
(lambda (&rest _)
(let* ((project-path (doom/project-root))
(hash (gethash project-path bower-conf))
(package-file (f-expand "bower.json" project-path))
deps)
(awhen (and (not hash) (f-exists? package-file)
(ignore-errors (json-read-file package-file)))
(puthash project-path it bower-conf)))
t))
(def-project-type! angularjs "angular"
:modes (nodejs-project-mode bower-project-mode)
:when
(lambda (&rest _)
(let* ((project (doom/project-root))
(bower (gethash project bower-conf))
(npm (gethash project npm-conf))
(deps (append (cdr-safe (assq 'dependencies bower))
(cdr-safe (assq 'dependencies npm))
(cdr-safe (assq 'devDependencies bower))
(cdr-safe (assq 'devDependencies npm)))))
(assq 'angular deps))))
(def-project-type! jekyll ":{"
:modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode)
:match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$"
:files ("config.yml" "_layouts/")
(add-hook! mode
(when (eq major-mode 'web-mode)
(web-mode-set-engine "django"))))
(def-project-type! wordpress "wp"
:modes (php-mode web-mode css-mode haml-mode pug-mode)
:match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$"
:files ("wp-config.php" "wp-content/"))
(provide 'module-web)
;;; module-web.el ends here
;; (@def-project wordpress "wp"
;; :modes (php-mode web-mode css-mode haml-mode pug-mode)
;; :match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$"
;; :files ("wp-config.php" "wp-content/"))

View file

@ -0,0 +1,18 @@
;; -*- no-byte-compile: t; -*-
;;; lang/web/packages.el
;; config.el
;; n/a
;; +html.el
(@package company-web)
(@package emmet-mode)
(@package haml-mode)
(@package pug-mode)
(@package web-mode)
;; +css.el
(@package less-css-mode)
(@package sass-mode)
(@package stylus-mode)