diff options
Diffstat (limited to 'emacs.d/nxhtml/related/flymake-css.el')
-rw-r--r-- | emacs.d/nxhtml/related/flymake-css.el | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/emacs.d/nxhtml/related/flymake-css.el b/emacs.d/nxhtml/related/flymake-css.el new file mode 100644 index 0000000..d80abe3 --- /dev/null +++ b/emacs.d/nxhtml/related/flymake-css.el @@ -0,0 +1,161 @@ +;;; flymake-css.el --- Flymake setup for css files +;; +;; Author: Lennart Borgman (lennart O borgman A gmail O com) +;; Created: 2009-11-21 Sat +;; Version: +;; Last-Updated: +;; URL: +;; Keywords: +;; Compatibility: +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; See variable `flymake-css-validator-jar' for instructions for how +;; to set this up. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change log: +;; +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 3, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + + +(require 'flymake) +(require 'xml) + + +(defcustom flymake-allowed-css-file-name-masks '(("\\.css\\'" flymake-css-init)) + "Filename extensions that switch on js syntax checks." + :type '(repeat (list (regexp :tag "File name regexp") + (function :tag "Init function") + (choice (const :tag "No cleanup function" nil) + (function :tag "Cleanup function")))) + :group 'flymake) + + +(defvar flymake-css-err-line-pattern-re '(("^file:\\([^:]+\\):\\([^:]+\\):\\(.*\\)" 1 2 nil 3)) + "Regexp matching CSS error messages") + +(defcustom flymake-css-validator-jar "~/bin/css-validator.jar" + "Full path to css-validor.jar file. +You need the css-validator.jar and some other files for flymake +for CSS to work. The instructions below tell you how to get and +install it. The instructions are copied from + + http://www.emacswiki.org/emacs/FlymakeCSS + +Get http://www.w3.org/QA/Tools/css-validator/css-validator.jar +create a directory named ‘lib’ in the same directory. Copy to the +‘lib’ dir the following jars: + + * commons-collections-3.2.1.jar + * jigsaw.jar + * velocity-1.6.1.jar + * xml-apis.jar + * commons-lang-2.4.jar + * tagsoup-1.2.jar + * xercesImpl.jar + +From: + + URL `http://jigsaw.w3.org/Distrib/jigsaw_2.2.6.tar.gz' + URL `http://www.apache.org/dist/commons/collections/binaries/commons-collections-3.2.1-bin.tar.gz' + URL `http://www.apache.org/dist/commons/lang/binaries/commons-lang-2.4-bin.tar.gz' + URL `http://www.apache.org/dist/velocity/engine/1.6.1/velocity-1.6.1.tar.gz' + URL `http://www.apache.org/dist/xerces/j/Xerces-J-bin.2.9.1.tar.gz' + URL `http://home.ccil.org/~cowan/XML/tagsoup/tagsoup-1.2.jar' + +Test validating some CSS file by running: + + java -jar css-validator.jar file:somecssfile.css" + :type 'file + :group 'flymake) +;;(setq flymake-css-validator-jar "c:/dl/programs/css-valid/css-validator.jar") + +(defun flymake-css-init () + (let* ((temp-file (flymake-init-create-temp-buffer-copy + 'flymake-create-temp-inplace)) + (local-file (file-relative-name + temp-file + (file-name-directory buffer-file-name)))) + (unless (file-exists-p flymake-css-validator-jar) + (error "Can't find css-validator.jar: %s\n\nPlease customize option flymake-css-validator-jar\n" + flymake-css-validator-jar)) + (list "java" + (list "-jar" flymake-css-validator-jar + "-output" "gnu" + (concat "file:" local-file))))) + +;;;###autoload +(defun flymake-css-load () + (dolist (rec flymake-allowed-css-file-name-masks) + (add-to-list 'flymake-allowed-file-name-masks rec)) + (dolist (rec flymake-css-err-line-pattern-re) + (add-to-list 'flymake-err-line-patterns rec))) + + +;;(defun flymake-make-overlay (beg end tooltip-text face mouse-face) +(defadvice flymake-make-overlay (before + flymake-css-ad-flymake-make-overlay + activate + compile) + (ad-set-arg 2 (xml-substitute-numeric-entities (ad-get-arg 2)))) + +;; Fix-me: remove when this has been giving its proper place in Emacs. +(eval-when-compile + (unless (fboundp 'xml-substitute-numeric-entities) + (message "Use Emacs 22 workaround for newsticker--decode-numeric-entities") + (defun xml-substitute-numeric-entities (string) + "Decode SGML numeric entities by their respective utf characters. +This is just a copy of the function in newst-backen.el for Emacs +22 users. + +This function replaces numeric entities in the input STRING and +returns the modified string. For example \"*\" gets replaced +by \"*\"." + (if (and string (stringp string)) + (let ((start 0)) + (while (string-match "&#\\([0-9]+\\);" string start) + (condition-case nil + (setq string (replace-match + (string (read (substring string + (match-beginning 1) + (match-end 1)))) + nil nil string)) + (error nil)) + (setq start (1+ (match-beginning 0)))) + string) + nil)) + )) + +;;(eval-after-load 'css-mode (flymake-css-load)) + +(provide 'flymake-css) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; flymake-css.el ends here |