diff options
Diffstat (limited to 'emacs.d/nxhtml/nxhtml/xhtml-help.el')
-rw-r--r-- | emacs.d/nxhtml/nxhtml/xhtml-help.el | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/emacs.d/nxhtml/nxhtml/xhtml-help.el b/emacs.d/nxhtml/nxhtml/xhtml-help.el new file mode 100644 index 0000000..f72c2fa --- /dev/null +++ b/emacs.d/nxhtml/nxhtml/xhtml-help.el @@ -0,0 +1,373 @@ +;;; xhtml-help.el --- Browse XHTML reference sites +;; +;; Author: Lennart Borgman (lennart O borgman A gmail O com) +;; Created: 2005-08-16 +;; Last-Updated: Wed Aug 01 14:24:07 2007 (7200 +0200) +(defconst xhtml-help:version "0.57") ;; Version: +;; Keywords: languages + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Use when editing XHTML file to get tag references or CSS property +;; name references (like background-color) from web sources. +;; +;; Usage: +;; +;; (require 'fmode) +;; +;; Then call `xhtml-help-show-tag-ref' or `xhtml-help-show-css-ref'. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; History: +;; +;; 2005-12-02: Corrected fetching margin-*. +;; 2006-01-08: Prompt for tag and property name before fetching help. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; This file is not part of Emacs +;; +;; 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 2, 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., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(defun xhtml-help-css-prop-at-point () + "Get possible css name property at point." + (save-excursion + (let ((ch (char-after)) + (in-word)) + (when (and (not (bolp)) + (or (not ch) + (member ch '(10 9 32 ?\:)))) + (backward-char) + (setq ch (char-after))) + (while (string-match "[a-z-]" (char-to-string ch)) + (setq in-word t) + (backward-char) + (setq ch (char-after))) + (when in-word + (forward-char) + (when (looking-at "[a-z-]+") + (match-string-no-properties 0)))))) + +;;;###autoload +(defun xhtml-help-show-css-ref () + "Show CSS reference for CSS property name at point." + (interactive) + (let ((css-prop (xhtml-help-css-prop-at-point))) + (setq css-prop (read-from-minibuffer "Get help for CSS property: " css-prop)) + (when css-prop + (xhtml-help-browse-css css-prop)))) + +;;;###autoload +(defun xhtml-help-tag-at-point () + "Get xhtml tag name at or before point." + (save-excursion + (when (eq (following-char) ?<) + (forward-char)) + (when (and (search-backward "<" nil t) + (looking-at "</?\\([[:alnum:]]+\\)")) + (match-string-no-properties 1)))) + +;;;###autoload +(defun xhtml-help-show-tag-ref () + "Show xhtml reference for tag name at or before point." + (interactive) + (let ((tag (xhtml-help-tag-at-point))) + (setq tag (read-from-minibuffer "Get help for tag name: " tag)) + (when (< 0 (length tag)) + (xhtml-help-browse-tag tag)))) + +;;;###autoload +(defgroup xhtml-help nil + "Customization group for xhtml-help." + :group 'nxhtml + :group 'hypermedia) + +(defcustom xhtml-help-refurl "http://www.w3.org/" + "Web url to get references from." + :type '(choice + (const "http://www.w3.org/") + (const "http://xhtml.com/") + (const "http://www.w3schools.com/") + ;;(const "http://learningforlife.fsu.edu/") + ) + :group 'xhtml-help) + +(defcustom xhtml-help-query-refurl t + "Query for reference url. +This is used in `xhtml-help-browse-tag' and `xhtml-help-browse-css'." + :type 'boolean + :group 'xhtml-help) + +(defun xhtml-help-query-refurl (prompt &optional notvalid) + (let ((choices (get 'xhtml-help-refurl 'custom-type)) + (default xhtml-help-refurl)) + (unless (eq 'choice (car choices)) + (error "Custom type of xhtml-help-refurl is not choices")) + (setq choices (cdr choices)) + (setq choices (mapcar (lambda (elt) + (car (cdr elt))) + choices)) + (mapc (lambda (elt) + (setq choices (delete elt choices))) + notvalid) + (when (member default notvalid) + (setq default (car choices))) + (completing-read (concat "Fetch " prompt " reference from: ") + choices + nil + t + default + '(choices . 1)))) + +(defun xhtml-match (target str) + (let ((len (length target))) + (when (<= len (length str)) + (equal target (substring str 0 len))))) + +(defun xhtml-match-member (target str-list) + (let (m) + (mapc (lambda (elt) + (when (xhtml-match elt target) + (setq m t))) + str-list) + m)) + +(defun xhtml-help-browse-css (css-prop) + (let* ((refurl (if xhtml-help-query-refurl + (xhtml-help-query-refurl (concat "CSS property '" css-prop "'") + (list "http://xhtml.com/")) + xhtml-help-refurl)) + (url + (cond + ( (equal refurl "http://www.w3schools.com/") + (concat + refurl "css/pr_" + (cond + ( (member css-prop '("clear" "cursor" "display" "float" "position" "visibility")) + "class_") + ( (member css-prop '("height" "line-height" "max-width" "min-height" "min-width" "width")) + "dim_") + ( (xhtml-match "font-weight" css-prop) + (setq css-prop "") "font_weight") + ( (xhtml-match "font" css-prop) + "font_") + ( (member css-prop '("content" "counter-increment" "counter-reset" "quotes")) + "gen_") + ( (xhtml-match "list" css-prop) + "list_") + ( (xhtml-match "margin" css-prop) + "") + ( (xhtml-match "outline" css-prop) + "outline_") + ( (equal "padding" css-prop) + "") + ( (xhtml-match "padding" css-prop) + "padding_") + ( (member css-prop '("bottom" "clip" "left" "overflow" "right" "top" + "vertical-align" "z-index")) + "pos_") + ( (member css-prop '("border-collapse")) + "tab_") + ( (member css-prop '("color" "direction" "letter-spacing" "text-align" + "text-decoration" "text-indent" "text-transform" + "white-space" "word-spacing")) + "text_") + ( t "")) + css-prop ".asp")) + ;; ( (equal refurl "http://learningforlife.fsu.edu/") + ;; (let ((css-prop2 css-prop) + ;; (cc) + ;; (ii 0)) + ;; (while (< ii (length css-prop)) + ;; (setq cc (substring css-prop2 ii (1+ ii))) + ;; (when (equal cc "-") + ;; (store-substring css-prop2 ii "_")) + ;; (setq ii (1+ ii))) + ;; (concat + ;; refurl "webmaster/references/css/" css-prop2 ".cfm"))) + ( (equal refurl "http://www.w3.org/") + (let ((properties "") + (prop-def "")) + (concat + refurl "TR/REC-CSS2/" + (cond + ( (xhtml-match-member css-prop '("margin" "padding" "border")) + "box.html#propdef-") + ( (member css-prop '("display" "position" + "top" "right" "bottom" "left" + "float" "clear" + "z-index" + "direction" "unicode-bidi")) + "visuren.html#propdef-") + ( (member css-prop '("width" "min-width" "max-width" + "height" "min-height" "max-height" + "line-height" "vertical-align")) + "visudet.html#propdef-") + ( (member css-prop '("overflow" "clip" "visibility")) + "visufx.html#propdef-") + ( (member css-prop '("content" "quotes")) + "generate.html#propdef-") + ( (or (xhtml-match css-prop "counter") + (member css-prop '("marker-offset"))) + (setq css-prop "") + "generate.html#counters") + ( (xhtml-match-member css-prop '("list")) + "generate.html#propdef-") + ( (member css-prop '("size" "marks" + "page-break-before" "page-break-after" "page-break-inside" + "page" + "orphans" "widows" + )) + "page.html#propdef-") + ( (member css-prop '("color" + "background-color" "background-image" "background-repeat" + "background-attachment" "background-position" "background" + )) + "colors.html#propdef-") + ( (xhtml-match "font" css-prop) + "fonts.html#propdef-") + ( (xhtml-match "text" css-prop) + "text.html#") + ( (member css-prop '("letter-spacing" "word-spacing")) + "text.html#") + ;; Fix-me: tables??? + ( (member css-prop '("cursor")) + "ui.html#propdef-") + ( (xhtml-match "outline" css-prop) + "ui.html#dynamic-outlines") + ( (or (xhtml-match "speak" css-prop) + (xhtml-match "pause" css-prop) + (xhtml-match "cue" css-prop) + (xhtml-match "pitch" css-prop) + (member css-prop '("volume" "play-during" "azimuth" "elevation" + "speech-rate" "voice-family" "richness"))) + "aural.html#propdef-") + ) + css-prop + ))) + ( t (error "Bad value for xhtml-help-refurl: %s" refurl))))) + (browse-url url))) + + + + + +(defun xhtml-help-browse-tag (tag) + (let* ((refurl (if xhtml-help-query-refurl + (xhtml-help-query-refurl (concat "XHTML tag '" tag "'") + (list "http://www.w3.org/")) + xhtml-help-refurl)) + (url + (cond + ( (equal refurl "http://xhtml.com/") + (concat + refurl "en/xhtml/reference/" + tag + "/") + ) + ( (equal refurl "http://www.w3schools.com/") + (concat + refurl "tags/" + (cond + ( (member tag '("tt" "i" "b" "big" "small")) + "tag_font_style.asp") + ( (member tag '("em" "strong" "dfn" "code" "samp" "kbd" "var" "cite")) + "tag_phrase_elements.asp") + ( (member tag '("h1" "h2" "h3" "h4" "h5" "h6")) + "tag_hn.asp") + ( (member tag '("sub" "sup")) + "tag_sup.asp") + ( t + (concat "tag_" tag ".asp") + )))) + ;; ( (equal refurl "http://learningforlife.fsu.edu/") + ;; (concat + ;; refurl "webmaster/references/xhtml/tags/" + ;; (cond + ;; ( (member tag '("body" "head" "html" "title")) + ;; "structure/") + ;; ( (member tag '("abbr" "acronym" "address" "blockquote" "br" "cite" + ;; "code" "dfn" "div" "em" "h1" "h2" "h3" "h4" "h5" "h6" + ;; "kbd" "p" "pre" "q" "samp" "span" "strong" "var")) + ;; "text/") + ;; ( (member tag '("a")) + ;; "hypertext/") + ;; ( (member tag '("dl" "dd" "dt" "ol" "ul" "li")) + ;; "list/") + ;; ( (member tag '("object" "param")) + ;; "object/") + ;; ( (member tag '("b" "big" "hr" "i" "small" "sub" "sup" "tt")) + ;; "presentation/") + ;; ( (member tag '("del" "ins")) + ;; "edit/") + ;; ( (member tag '("bdo")) + ;; "bidirectional/") + ;; ( (member tag '("button" "fieldset" "form" "input" "label" "legend" + ;; "select" "optgroup" "option" "textarea")) + ;; "forms/") + ;; ( (member tag '("caption" "col" "colgroup" "table" "tbody" "td" + ;; "tfoot" "th" "thead" "tr")) + ;; "table/") + ;; ( (member tag '("img")) + ;; "image/") + ;; ( (member tag '("area" "map")) + ;; "client/") + ;; ( (member tag '("area" "map")) + ;; "client/") + ;; ( (member tag '("meta")) + ;; "meta/") + ;; ( (member tag '("noscript" "script")) + ;; "scripting/") + ;; ( (member tag '("style")) + ;; "stylesheet/") + ;; ( (member tag '("link")) + ;; "link/") + ;; ( (member tag '("base")) + ;; "base/") + ;; ( (member tag '("base")) + ;; "base/") + ;; ( (member tag '("ruby" "rbc" "rtc" "rb" "rt" "rp")) + ;; "ruby/") + ;; ) + ;; tag ".cfm")) + ( t (error "Bad value for xhtml-help-refurl: %s" refurl)) + ))) + (browse-url url))) + +(defconst xhtml-help-mode-keymap + (let ((map (make-sparse-keymap "XHTML Help"))) + (define-key map [menu-bar xh-help] (cons "XHTML Help" (make-sparse-keymap "second"))) + (define-key map [menu-bar xh-help css-help] '("CSS Help" . xhtml-help-show-css-ref)) + (define-key map [menu-bar xh-help tag-help] '("XHTML Tag Help" . xhtml-help-show-tag-ref)) + map)) + +(define-minor-mode xhtml-help-mode + "Minor mode that adds keys for accessing xhtml and css help." + :keymap xhtml-help-mode-keymap) + +(provide 'xhtml-help) + +;;; xhtml-help.el ends here |