summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/related/flymake-css.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/nxhtml/related/flymake-css.el')
-rw-r--r--emacs.d/nxhtml/related/flymake-css.el161
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