thirdparty/zencoding-mode.el
author Luke Hoersten <Luke@Hoersten.org>
Sun, 25 Mar 2012 20:03:12 -0500
changeset 51 c4e0668a2c87
parent 35 4a9c440b6764
permissions -rw-r--r--
Updated zencoding mode.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     1
;;; zencoding-mode.el --- Unfold CSS-selector-like expressions to markup
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
     2
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     3
;; Copyright (C) 2009, Chris Done
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
     4
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
     5
;; Version: 0.5.1
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     6
;; Author: Chris Done <[email protected]>
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
     7
;; URL: https://github.com/rooney/zencoding
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
     8
;; Last-Updated: 2011-12-31 Sat
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     9
;; Keywords: convenience
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    10
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    11
;; This file is free software; you can redistribute it and/or modify
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    12
;; it under the terms of the GNU General Public License as published by
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    13
;; the Free Software Foundation; either version 3, or (at your option)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    14
;; any later version.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    15
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    16
;; This file is distributed in the hope that it will be useful,
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    17
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    18
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    19
;; GNU General Public License for more details.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    20
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    21
;; You should have received a copy of the GNU General Public License
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    22
;; along with GNU Emacs; see the file COPYING.  If not, write to
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    23
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    24
;; Boston, MA 02110-1301, USA.
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    25
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    26
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    27
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    28
;;; Commentary:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    29
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    30
;; Unfold CSS-selector-like expressions to markup. Intended to be used
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    31
;; with sgml-like languages; xml, html, xhtml, xsl, etc.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    32
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    33
;; See `zencoding-mode' for more information.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    34
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    35
;; Copy zencoding-mode.el to your load-path and add to your .emacs:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    36
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    37
;;    (require 'zencoding-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    38
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    39
;; Example setup:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    40
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    41
;;    (add-to-list 'load-path "~/Emacs/zencoding/")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    42
;;    (require 'zencoding-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    43
;;    (add-hook 'sgml-mode-hook 'zencoding-mode) ;; Auto-start on any markup modes
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    44
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    45
;; Enable the minor mode with M-x zencoding-mode.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    46
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    47
;; See ``Test cases'' section for a complete set of expression types.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    48
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    49
;; If you are hacking on this project, eval (zencoding-test-cases) to
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    50
;; ensure that your changes have not broken anything. Feel free to add
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    51
;; new test cases if you add new features.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    52
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    53
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    54
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    55
;;; History:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    56
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    57
;; Modified by Lennart Borgman.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    58
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    59
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    60
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    61
;;; Code:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    62
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    63
(defconst zencoding-mode:version "0.5.1")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    64
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    65
;; Include the trie data structure for caching
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    66
;(require 'zencoding-trie)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    67
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    68
(require 'cl)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
    69
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    70
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    71
;; Generic parsing macros and utilities
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    72
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    73
(defmacro zencoding-aif (test-form then-form &rest else-forms)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    74
  "Anaphoric if. Temporary variable `it' is the result of test-form."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    75
  `(let ((it ,test-form))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    76
     (if it ,then-form ,@(or else-forms '(it)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    77
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    78
(defmacro zencoding-pif (test-form then-form &rest else-forms)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    79
  "Parser anaphoric if. Temporary variable `it' is the result of test-form."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    80
  `(let ((it ,test-form))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    81
     (if (not (eq 'error (car it))) ,then-form ,@(or else-forms '(it)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    82
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    83
(defmacro zencoding-parse (regex nums label &rest body)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    84
  "Parse according to a regex and update the `input' variable."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    85
  `(zencoding-aif (zencoding-regex ,regex input ',(number-sequence 0 nums))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    86
                  (let ((input (elt it ,nums)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    87
                    ,@body)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    88
                  `,`(error ,(concat "expected " ,label))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    89
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    90
(defmacro zencoding-run (parser then-form &rest else-forms)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    91
  "Run a parser and update the input properly, extract the parsed
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    92
   expression."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    93
  `(zencoding-pif (,parser input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    94
                  (let ((input (cdr it))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    95
                        (expr (car it)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    96
                    ,then-form)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    97
                  ,@(or else-forms '(it))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    98
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    99
(defmacro zencoding-por (parser1 parser2 then-form &rest else-forms)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   100
  "OR two parsers. Try one parser, if it fails try the next."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   101
  `(zencoding-pif (,parser1 input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   102
                  (let ((input (cdr it))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   103
                        (expr (car it)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   104
                    ,then-form)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   105
                  (zencoding-pif (,parser2 input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   106
                                 (let ((input (cdr it))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   107
                                       (expr (car it)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   108
                                   ,then-form)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   109
                                 ,@else-forms)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   110
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   111
(defun zencoding-regex (regexp string refs)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   112
  "Return a list of (`ref') matches for a `regex' on a `string' or nil."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   113
  (if (string-match (concat "^" regexp "\\([^\n]*\\)$") string)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   114
      (mapcar (lambda (ref) (match-string ref string))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   115
              (if (sequencep refs) refs (list refs)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   116
    nil))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   117
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   118
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   119
;; Zen coding parsers
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   120
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   121
(defun zencoding-expr (input)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   122
  "Parse a zen coding expression with optional filters."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   123
  (zencoding-pif (zencoding-parse "\\(.*?\\)|" 2 "expr|filter" it)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   124
                 (let ((input (elt it 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   125
                       (filters (elt it 2)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   126
                   (zencoding-pif (zencoding-extract-filters filters)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   127
                                  (zencoding-filter input it)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   128
                                  it))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   129
                 (zencoding-filter input (zencoding-default-filter))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   130
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   131
(defun zencoding-subexpr (input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   132
  "Parse a zen coding expression with no filter. This pretty much defines precedence."
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   133
  (zencoding-run zencoding-siblings
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   134
                 it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   135
                 (zencoding-run zencoding-parent-child
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   136
                                it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   137
                                (zencoding-run zencoding-multiplier
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   138
                                               it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   139
                                               (zencoding-run zencoding-pexpr
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   140
                                                              it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   141
                                                              (zencoding-run zencoding-tag
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   142
                                                                             it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   143
                                                                             '(error "no match, expecting ( or a-zA-Z0-9")))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   144
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   145
(defun zencoding-extract-filters (input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   146
  "Extract filters from expression."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   147
  (zencoding-pif (zencoding-parse "\\([^\\|]+?\\)|" 2 "" it)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   148
                 (let ((filter-name (elt it 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   149
                       (more-filters (elt it 2)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   150
                   (zencoding-pif (zencoding-extract-filters more-filters)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   151
                                  (cons filter-name it)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   152
                                  it))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   153
                 (zencoding-parse "\\([^\\|]+\\)" 1 "filter name" `(,(elt it 1)))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   154
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   155
(defun zencoding-filter (input filters)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   156
  "Construct AST with specified filters."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   157
  (zencoding-pif (zencoding-subexpr input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   158
                 (let ((result (car it))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   159
                       (rest (cdr it)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   160
                   `((filter ,filters ,result) . ,rest))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   161
                 it))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   162
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   163
(defun zencoding-default-filter ()
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   164
  "Default filter(s) to be used if none is specified."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   165
  (let* ((file-ext (car (zencoding-regex ".*\\(\\..*\\)" (or (buffer-file-name) "") 1)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   166
         (defaults '(".html" ("html")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   167
                     ".htm"  ("html")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   168
                     ".haml" ("haml")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   169
                     ".clj"  ("hic")))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   170
         (default-else      '("html"))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   171
         (selected-default (member file-ext defaults)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   172
    (if selected-default
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   173
        (cadr selected-default)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   174
      default-else)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   175
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   176
(defun zencoding-multiplier (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   177
  (zencoding-por zencoding-pexpr zencoding-tag
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   178
                 (let ((multiplier expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   179
                   (zencoding-parse "\\*\\([0-9]+\\)" 2 "*n where n is a number"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   180
                                    (let ((multiplicand (read (elt it 1))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   181
                                      `((list ,(make-list multiplicand multiplier)) . ,input))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   182
                 '(error "expected *n multiplier")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   183
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   184
(defun zencoding-tag (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   185
  "Parse a tag."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   186
  (zencoding-run zencoding-tagname
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   187
                 (let ((tagname (cadr expr))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   188
                       (has-body? (cddr expr)))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   189
                   (zencoding-pif (zencoding-run zencoding-identifier
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   190
                                                 (zencoding-tag-classes
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   191
                                                  `(tag (,tagname ,has-body? ,(cddr expr))) input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   192
                                                 (zencoding-tag-classes
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   193
                                                  `(tag (,tagname ,has-body? nil)) input))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   194
                                  (let ((expr (car it))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   195
                                        (input (cdr it)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   196
                                    (zencoding-tag-props expr input))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   197
                 (zencoding-default-tag input)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   198
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   199
(defun zencoding-default-tag (input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   200
  "Parse a #id or .class"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   201
  (zencoding-parse "\\([#|\\.]\\)" 1 "tagname"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   202
                   (zencoding-tag (concat "div" (elt it 0)))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   203
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   204
(defun zencoding-tag-props (tag input)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   205
  (let ((tag-data (cadr tag)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   206
    (zencoding-run zencoding-props
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   207
                   (let ((props (cdr expr)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   208
                     `((tag ,(append tag-data (list props))) . ,input))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   209
                   `((tag ,(append tag-data '(nil))) . ,input))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   210
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   211
(defun zencoding-props (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   212
  "Parse many props."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   213
    (zencoding-run zencoding-prop
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   214
                   (zencoding-pif (zencoding-props input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   215
                                  `((props . ,(cons expr (cdar it))) . ,(cdr it))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   216
                                  `((props . ,(list expr)) . ,input))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   217
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   218
(defun zencoding-prop (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   219
  (zencoding-parse
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   220
   " " 1 "space"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   221
   (zencoding-run
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   222
    zencoding-name
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   223
    (let ((name (cdr expr)))
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   224
      (zencoding-pif (zencoding-prop-value name input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   225
                     it
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   226
                     `((,(read name) "") . ,input))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   227
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   228
(defun zencoding-prop-value (name input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   229
  (zencoding-pif (zencoding-parse "=\"\\(.*?\\)\"" 2
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   230
                                  "=\"property value\""
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   231
                                  (let ((value (elt it 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   232
                                        (input (elt it 2)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   233
                                    `((,(read name) ,value) . ,input)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   234
                 it
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   235
                 (zencoding-parse "=\\([^\\,\\+\\>\\ )]*\\)" 2
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   236
                                  "=property value"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   237
                                  (let ((value (elt it 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   238
                                        (input (elt it 2)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   239
                                    `((,(read name) ,value) . ,input)))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   240
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   241
(defun zencoding-tag-classes (tag input)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   242
  (let ((tag-data (cadr tag)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   243
    (zencoding-run zencoding-classes
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   244
                   (let ((classes (mapcar (lambda (cls) (cdadr cls))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   245
                                          (cdr expr))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   246
                     `((tag ,(append tag-data (list classes))) . ,input))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   247
                   `((tag ,(append tag-data '(nil))) . ,input))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   248
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   249
(defun zencoding-tagname (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   250
  "Parse a tagname a-zA-Z0-9 tagname (e.g. html/head/xsl:if/br)."
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   251
  (zencoding-parse "\\([a-zA-Z][a-zA-Z0-9:-]*\/?\\)" 2 "tagname, a-zA-Z0-9"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   252
                   (let* ((tag-spec (elt it 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   253
                          (empty-tag (zencoding-regex "\\([^\/]*\\)\/" tag-spec 1))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   254
                          (tag (if empty-tag
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   255
                                   (car empty-tag)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   256
                                 tag-spec)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   257
                     `((tagname . (,tag . ,(not empty-tag))) . ,input))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   258
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   259
(defun zencoding-pexpr (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   260
  "A zen coding expression with parentheses around it."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   261
  (zencoding-parse "(" 1 "("
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   262
                   (zencoding-run zencoding-subexpr
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   263
                                  (zencoding-aif (zencoding-regex ")" input '(0 1))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   264
                                                 `(,expr . ,(elt it 1))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   265
                                                 '(error "expecting `)'")))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   266
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   267
(defun zencoding-parent-child (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   268
  "Parse an tag>e expression, where `n' is an tag and `e' is any
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   269
   expression."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   270
  (zencoding-run zencoding-multiplier
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   271
                 (let* ((items (cadr expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   272
                        (rest (zencoding-child-sans expr input)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   273
                   (if (not (eq (car rest) 'error))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   274
                       (let ((child (car rest))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   275
                             (input (cdr rest)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   276
                         (cons (cons 'list
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   277
                                     (cons (mapcar (lambda (parent)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   278
                                                     `(parent-child ,parent ,child))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   279
                                                   items)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   280
                                           nil))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   281
                               input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   282
                     '(error "expected child")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   283
                 (zencoding-run zencoding-tag
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   284
                                (zencoding-child expr input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   285
                                '(error "expected parent"))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   286
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   287
(defun zencoding-child-sans (parent input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   288
  (zencoding-parse ">" 1 ">"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   289
                   (zencoding-run zencoding-subexpr
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   290
                                  it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   291
                                  '(error "expected child"))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   292
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   293
(defun zencoding-child (parent input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   294
  (zencoding-parse ">" 1 ">"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   295
                   (zencoding-run zencoding-subexpr
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   296
                                  (let ((child expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   297
                                    `((parent-child ,parent ,child) . ,input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   298
                                  '(error "expected child"))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   299
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   300
(defun zencoding-sibling (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   301
  (zencoding-por zencoding-pexpr zencoding-multiplier
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   302
                 it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   303
                 (zencoding-run zencoding-tag
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   304
                                it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   305
                                '(error "expected sibling"))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   306
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   307
(defun zencoding-siblings (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   308
  "Parse an e+e expression, where e is an tag or a pexpr."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   309
  (zencoding-run zencoding-sibling
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   310
                 (let ((parent expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   311
                   (zencoding-parse "\\+" 1 "+"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   312
                                    (zencoding-run zencoding-subexpr
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   313
                                                   (let ((child expr))
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   314
                                                     `((sibling ,parent ,child) . ,input))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   315
                                                   (zencoding-expand parent input))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   316
                 '(error "expected first sibling")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   317
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   318
(defvar zencoding-expandable-tags
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   319
  '("dl"    ">(dt+dd)"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   320
    "ol"    ">li"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   321
    "ul"    ">li"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   322
    "table" ">tr>td"))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   323
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   324
(defun zencoding-expand (parent input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   325
  "Parse an e+ expression, where e is an expandable tag"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   326
  (let* ((parent-tag (car (elt parent 1)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   327
         (expandable (member parent-tag zencoding-expandable-tags)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   328
    (if expandable
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   329
        (let ((expansion (zencoding-child parent (concat (cadr expandable)))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   330
          (zencoding-pif (zencoding-parse "+\\(.*\\)" 1 "+expr"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   331
                                          (zencoding-subexpr (elt it 1)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   332
                         `((sibling ,(car expansion) ,(car it)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   333
                         expansion))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   334
      '(error "expected second sibling"))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   335
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   336
(defun zencoding-name (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   337
  "Parse a class or identifier name, e.g. news, footer, mainimage"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   338
  (zencoding-parse "\\([a-zA-Z][a-zA-Z0-9-_:]*\\)" 2 "class or identifer name"
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   339
                   `((name . ,(elt it 1)) . ,input)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   340
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   341
(defun zencoding-class (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   342
  "Parse a classname expression, e.g. .foo"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   343
  (zencoding-parse "\\." 1 "."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   344
                   (zencoding-run zencoding-name
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   345
                                  `((class ,expr) . ,input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   346
                                  '(error "expected class name"))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   347
(defun zencoding-identifier (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   348
  "Parse an identifier expression, e.g. #foo"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   349
  (zencoding-parse "#" 1 "#"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   350
                   (zencoding-run zencoding-name
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   351
                                  `((identifier . ,expr) . ,input))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   352
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   353
(defun zencoding-classes (input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   354
  "Parse many classes."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   355
  (zencoding-run zencoding-class
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   356
                 (zencoding-pif (zencoding-classes input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   357
                                `((classes . ,(cons expr (cdar it))) . ,(cdr it))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   358
                                `((classes . ,(list expr)) . ,input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   359
                 '(error "expected class")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   360
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   361
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   362
;; Zen coding transformer from AST to string
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   363
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   364
(defvar zencoding-inline-tags
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   365
  '("a"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   366
    "abbr"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   367
    "acronym"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   368
    "cite"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   369
    "code"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   370
    "dd"
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   371
    "dfn"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   372
    "dt"
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   373
    "em"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   374
    "h1" "h2" "h3" "h4" "h5" "h6"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   375
    "kbd"
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   376
    "li"
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   377
    "q"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   378
    "span"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   379
    "strong"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   380
    "var"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   381
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   382
(defvar zencoding-block-tags
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   383
  '("p"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   384
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   385
(defvar zencoding-self-closing-tags
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   386
  '("br"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   387
    "img"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   388
    "input"))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   389
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   390
(defvar zencoding-leaf-function nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   391
  "Function to execute when expanding a leaf node in the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   392
  Zencoding AST.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   393
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   394
(defvar zencoding-filters
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   395
  '("html" (zencoding-primary-filter zencoding-make-html-tag)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   396
    "c"    (zencoding-primary-filter zencoding-make-commented-html-tag)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   397
    "haml" (zencoding-primary-filter zencoding-make-haml-tag)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   398
    "hic"  (zencoding-primary-filter zencoding-make-hiccup-tag)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   399
    "e"    (zencoding-escape-xml)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   400
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   401
(defun zencoding-primary-filter (input proc)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   402
  "Process filter that needs to be executed first, ie. not given output from other filter."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   403
  (if (listp input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   404
      (let ((tag-maker (cadr proc)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   405
        (zencoding-transform-ast input tag-maker))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   406
    nil))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   407
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   408
(defun zencoding-process-filter (filters input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   409
  "Process filters, chain one filter output as the input of the next filter."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   410
  (let ((filter-data (member (car filters) zencoding-filters))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   411
        (more-filters (cdr filters)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   412
    (if filter-data
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   413
        (let* ((proc   (cadr filter-data))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   414
               (fun    (car proc))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   415
               (filter-output (funcall fun input proc)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   416
          (if more-filters
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   417
              (zencoding-process-filter more-filters filter-output)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   418
            filter-output))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   419
      nil)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   420
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   421
(defun zencoding-make-tag (tag-maker tag-info &optional content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   422
  "Extract tag info and pass them to tag-maker."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   423
  (let* ((name      (pop tag-info))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   424
         (has-body? (pop tag-info))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   425
         (id        (pop tag-info))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   426
         (classes   (pop tag-info))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   427
         (props     (pop tag-info))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   428
         (self-closing? (not (or content
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   429
                                 (and has-body?
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   430
                                      (not (member name zencoding-self-closing-tags)))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   431
    (funcall tag-maker name id classes props self-closing?
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   432
             (if content content
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   433
               (if zencoding-leaf-function (funcall zencoding-leaf-function))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   434
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   435
(defun zencoding-make-html-tag (tag-name tag-id tag-classes tag-props self-closing? content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   436
  "Create HTML markup string"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   437
  (let* ((id      (zencoding-concat-or-empty " id=\"" tag-id "\""))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   438
         (classes (zencoding-mapconcat-or-empty " class=\"" tag-classes " " "\""))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   439
         (props   (zencoding-mapconcat-or-empty " " tag-props " " nil
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   440
                                                (lambda (prop)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   441
                                                  (concat (symbol-name (car prop)) "=\"" (cadr prop) "\""))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   442
         (content-multiline? (and content (string-match "\n" content)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   443
         (block-tag? (or (member tag-name zencoding-block-tags)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   444
                         (and (> (length tag-name) 1)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   445
                              (not (member tag-name zencoding-inline-tags)))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   446
         (lf (if (or content-multiline? block-tag?)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   447
                 "\n")))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   448
    (concat "<" tag-name id classes props (if self-closing?
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   449
                                              "/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   450
                                            (concat ">" (if content
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   451
                                                            (if (or content-multiline? block-tag?)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   452
                                                                (zencoding-indent content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   453
                                                              content))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   454
                                                    lf
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   455
                                                    "</" tag-name ">")))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   456
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   457
(defun zencoding-make-commented-html-tag (tag-name tag-id tag-classes tag-props self-closing? content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   458
  "Create HTML markup string with extra comments for elements with #id or .classes"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   459
  (let ((body (zencoding-make-html-tag tag-name tag-id tag-classes tag-props self-closing? content)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   460
    (if (or tag-id tag-classes)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   461
        (let ((id      (zencoding-concat-or-empty "#" tag-id))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   462
              (classes (zencoding-mapconcat-or-empty "." tag-classes ".")))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   463
          (concat "<!-- " id classes " -->\n"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   464
                  body
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   465
                  "\n<!-- /" id classes " -->"))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   466
      body)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   467
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   468
(defun zencoding-make-haml-tag (tag-name tag-id tag-classes tag-props self-closing? content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   469
  "Create HAML string"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   470
  (let ((name    (if (and (equal tag-name "div")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   471
                          (or tag-id tag-classes))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   472
                     ""
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   473
                   (concat "%" tag-name)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   474
        (id      (zencoding-concat-or-empty "#" tag-id))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   475
        (classes (zencoding-mapconcat-or-empty "." tag-classes "."))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   476
        (props   (zencoding-mapconcat-or-empty "{" tag-props ", " "}"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   477
                                               (lambda (prop)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   478
                                                 (concat ":" (symbol-name (car prop)) " => \"" (cadr prop) "\"")))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   479
    (concat name id classes props (if content
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   480
                                      (zencoding-indent content)))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   481
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   482
(defun zencoding-make-hiccup-tag (tag-name tag-id tag-classes tag-props self-closing? content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   483
  "Create Hiccup string"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   484
  (let* ((id      (zencoding-concat-or-empty "#" tag-id))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   485
         (classes (zencoding-mapconcat-or-empty "." tag-classes "."))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   486
         (props   (zencoding-mapconcat-or-empty " {" tag-props ", " "}"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   487
                                                (lambda (prop)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   488
                                                  (concat ":" (symbol-name (car prop)) " \"" (cadr prop) "\""))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   489
         (content-multiline? (and content (string-match "\n" content)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   490
         (block-tag? (or (member tag-name zencoding-block-tags)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   491
                         (and (> (length tag-name) 1)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   492
                              (not (member tag-name zencoding-inline-tags))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   493
    (concat "[:" tag-name id classes props
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   494
            (if content
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   495
                (if (or content-multiline? block-tag?)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   496
                    (zencoding-indent content)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   497
                  (concat " " content)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   498
            "]")))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   499
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   500
(defun zencoding-concat-or-empty (prefix body &optional suffix)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   501
  "Return prefixed suffixed text or empty string."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   502
  (if body
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   503
      (concat prefix body suffix)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   504
    ""))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   505
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   506
(defun zencoding-mapconcat-or-empty (prefix list-body delimiter &optional suffix map-fun)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   507
  "Return prefixed suffixed mapconcated text or empty string."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   508
  (if list-body
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   509
      (let* ((mapper (if map-fun map-fun 'identity))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   510
             (body (mapconcat mapper list-body delimiter)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   511
        (concat prefix body suffix))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   512
    ""))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   513
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   514
(defun zencoding-escape-xml (input proc)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   515
  "Escapes XML-unsafe characters: <, > and &."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   516
  (replace-regexp-in-string
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   517
   "<" "&lt;"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   518
   (replace-regexp-in-string
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   519
    ">" "&gt;"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   520
    (replace-regexp-in-string
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   521
     "&" "&amp;"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   522
     (if (stringp input)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   523
         input
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   524
       (zencoding-process-filter (zencoding-default-filter) input))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   525
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   526
(defun zencoding-transform (ast-with-filters)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   527
  "Transform AST (containing filter data) into string."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   528
  (let ((filters (cadr ast-with-filters))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   529
        (ast (caddr ast-with-filters)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   530
    (zencoding-process-filter filters ast)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   531
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   532
(defun zencoding-transform-ast (ast tag-maker)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   533
  "Transform AST (without filter data) into string."
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   534
  (let ((type (car ast)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   535
    (cond
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   536
     ((eq type 'list)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   537
      (mapconcat (lexical-let ((make-tag-fun tag-maker))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   538
                   #'(lambda (sub-ast)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   539
                       (zencoding-transform-ast sub-ast make-tag-fun)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   540
                 (cadr ast)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   541
                 "\n"))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   542
     ((eq type 'tag)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   543
      (zencoding-make-tag tag-maker (cadr ast)))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   544
     ((eq type 'parent-child)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   545
      (let ((parent (cadadr ast))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   546
            (children (zencoding-transform-ast (caddr ast) tag-maker)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   547
        (zencoding-make-tag tag-maker parent children)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   548
     ((eq type 'sibling)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   549
      (let ((sib1 (zencoding-transform-ast (cadr ast) tag-maker))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   550
            (sib2 (zencoding-transform-ast (caddr ast) tag-maker)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   551
        (concat sib1 "\n" sib2))))))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   552
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   553
(defun zencoding-indent (text)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   554
  "Indent the text"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   555
  (if text
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   556
      (replace-regexp-in-string "\n" "\n    " (concat "\n" text))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   557
    nil))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   558
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   559
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   560
;; Test-cases
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   561
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   562
(defun zencoding-test-cases ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   563
  (let ((tests '(;; Tags
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   564
                 ("a"                      "<a></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   565
                 ("a.x"                    "<a class=\"x\"></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   566
                 ("a#q.x"                  "<a id=\"q\" class=\"x\"></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   567
                 ("a#q.x.y.z"              "<a id=\"q\" class=\"x y z\"></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   568
                 ("#q"                     "<div id=\"q\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   569
                                           "</div>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   570
                 (".x"                     "<div class=\"x\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   571
                                           "</div>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   572
                 ("#q.x"                   "<div id=\"q\" class=\"x\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   573
                                           "</div>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   574
                 ("#q.x.y.z"               "<div id=\"q\" class=\"x y z\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   575
                                           "</div>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   576
                 ;; Empty tags
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   577
                 ("a/"                     "<a/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   578
                 ("a/.x"                   "<a class=\"x\"/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   579
                 ("a/#q.x"                 "<a id=\"q\" class=\"x\"/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   580
                 ("a/#q.x.y.z"             "<a id=\"q\" class=\"x y z\"/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   581
                 ;; Self-closing tags
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   582
                 ("input type=text"        "<input type=\"text\"/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   583
                 ("img"                    "<img/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   584
                 ("img>metadata/*2"        "<img>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   585
                                           "    <metadata/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   586
                                           "    <metadata/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   587
                                           "</img>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   588
                 ;; Siblings
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   589
                 ("a+b"                    "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   590
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   591
                 ("a+b+c"                  "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   592
                                           "<b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   593
                                           "<c></c>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   594
                 ("a.x+b"                  "<a class=\"x\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   595
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   596
                 ("a#q.x+b"                "<a id=\"q\" class=\"x\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   597
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   598
                 ("a#q.x.y.z+b"            "<a id=\"q\" class=\"x y z\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   599
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   600
                 ("a#q.x.y.z+b#p.l.m.n"    "<a id=\"q\" class=\"x y z\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   601
                                           "<b id=\"p\" class=\"l m n\"></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   602
                 ;; Tag expansion
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   603
                 ("table+"                 "<table>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   604
                                           "    <tr>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   605
                                           "        <td>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   606
                                           "        </td>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   607
                                           "    </tr>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   608
                                           "</table>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   609
                 ("dl+"                    "<dl>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   610
                                           "    <dt></dt>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   611
                                           "    <dd></dd>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   612
                                           "</dl>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   613
                 ("ul+"                    "<ul>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   614
                                           "    <li></li>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   615
                                           "</ul>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   616
                 ("ul++ol+"                "<ul>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   617
                                           "    <li></li>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   618
                                           "</ul>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   619
                                           "<ol>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   620
                                           "    <li></li>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   621
                                           "</ol>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   622
                 ("ul#q.x.y m=l+"          "<ul id=\"q\" class=\"x y\" m=\"l\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   623
                                           "    <li></li>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   624
                                           "</ul>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   625
                 ;; Parent > child
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   626
                 ("a>b"                    "<a><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   627
                 ("a>b>c"                  "<a><b><c></c></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   628
                 ("a.x>b"                  "<a class=\"x\"><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   629
                 ("a#q.x>b"                "<a id=\"q\" class=\"x\"><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   630
                 ("a#q.x.y.z>b"            "<a id=\"q\" class=\"x y z\"><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   631
                 ("a#q.x.y.z>b#p.l.m.n"    "<a id=\"q\" class=\"x y z\"><b id=\"p\" class=\"l m n\"></b></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   632
                 ("#q>.x"                  "<div id=\"q\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   633
                                           "    <div class=\"x\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   634
                                           "    </div>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   635
                                           "</div>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   636
                 ("a>b+c"                  "<a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   637
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   638
                                           "    <c></c>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   639
                                           "</a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   640
                 ("a>b+c>d"                "<a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   641
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   642
                                           "    <c><d></d></c>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   643
                                           "</a>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   644
                 ;; Multiplication
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   645
                 ("a*1"                    "<a></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   646
                 ("a*2"                    "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   647
                                           "<a></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   648
                 ("a/*2"                   "<a/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   649
                                           "<a/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   650
                 ("a*2+b*2"                "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   651
                                           "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   652
                                           "<b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   653
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   654
                 ("a*2>b*2"                "<a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   655
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   656
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   657
                                           "</a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   658
                                           "<a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   659
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   660
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   661
                                           "</a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   662
                 ("a>b*2"                  "<a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   663
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   664
                                           "    <b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   665
                                           "</a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   666
                 ("a#q.x>b#q.x*2"          "<a id=\"q\" class=\"x\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   667
                                           "    <b id=\"q\" class=\"x\"></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   668
                                           "    <b id=\"q\" class=\"x\"></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   669
                                           "</a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   670
                 ("a#q.x>b/#q.x*2"         "<a id=\"q\" class=\"x\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   671
                                           "    <b id=\"q\" class=\"x\"/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   672
                                           "    <b id=\"q\" class=\"x\"/>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   673
                                           "</a>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   674
                 ;; Properties
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   675
                 ("a x"                    "<a x=\"\"></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   676
                 ("a x="                   "<a x=\"\"></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   677
                 ("a x=\"\""               "<a x=\"\"></a>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   678
                 ("a x=y"                  "<a x=\"y\"></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   679
                 ("a x=\"y\""              "<a x=\"y\"></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   680
                 ("a x=\"()\""             "<a x=\"()\"></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   681
                 ("a x m"                  "<a x=\"\" m=\"\"></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   682
                 ("a x= m=\"\""            "<a x=\"\" m=\"\"></a>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   683
                 ("a x=y m=l"              "<a x=\"y\" m=\"l\"></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   684
                 ("a/ x=y m=l"             "<a x=\"y\" m=\"l\"/>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   685
                 ("a#foo x=y m=l"          "<a id=\"foo\" x=\"y\" m=\"l\"></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   686
                 ("a.foo x=y m=l"          "<a class=\"foo\" x=\"y\" m=\"l\"></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   687
                 ("a#foo.bar.mu x=y m=l"   "<a id=\"foo\" class=\"bar mu\" x=\"y\" m=\"l\"></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   688
                 ("a/#foo.bar.mu x=y m=l"  "<a id=\"foo\" class=\"bar mu\" x=\"y\" m=\"l\"/>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   689
                 ("a x=y+b"                "<a x=\"y\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   690
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   691
                 ("a x=y+b x=y"            "<a x=\"y\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   692
                                           "<b x=\"y\"></b>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   693
                 ("a x=y>b"                "<a x=\"y\"><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   694
                 ("a x=y>b x=y"            "<a x=\"y\"><b x=\"y\"></b></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   695
                 ("a x=y>b x=y+c x=y"      "<a x=\"y\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   696
                                           "    <b x=\"y\"></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   697
                                           "    <c x=\"y\"></c>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   698
                                           "</a>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   699
                 ;; Parentheses
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   700
                 ("(a)"                    "<a></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   701
                 ("(a)+(b)"                "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   702
                                           "<b></b>")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   703
                 ("a>(b)"                  "<a><b></b></a>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   704
                 ("(a>b)>c"                "<a><b></b></a>")
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   705
                 ("(a>b)+c"                "<a><b></b></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   706
                                           "<c></c>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   707
                 ("z+(a>b)+c+k"            "<z></z>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   708
                                           "<a><b></b></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   709
                                           "<c></c>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   710
                                           "<k></k>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   711
                 ("(a)*2"                  "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   712
                                           "<a></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   713
                 ("((a)*2)"                "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   714
                                           "<a></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   715
                 ("((a))*2"                "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   716
                                           "<a></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   717
                 ("(a>b)*2"                "<a><b></b></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   718
                                           "<a><b></b></a>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   719
                 ("(a+b)*2"                "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   720
                                           "<b></b>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   721
                                           "<a></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   722
                                           "<b></b>")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   723
                 ;; Filter: comment
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   724
                 ("a.b|c"                  "<!-- .b -->"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   725
                                           "<a class=\"b\"></a>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   726
                                           "<!-- /.b -->")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   727
                 ("#a>.b|c"                "<!-- #a -->"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   728
                                           "<div id=\"a\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   729
                                           "    <!-- .b -->"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   730
                                           "    <div class=\"b\">"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   731
                                           "    </div>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   732
                                           "    <!-- /.b -->"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   733
                                           "</div>"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   734
                                           "<!-- /#a -->")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   735
                 ;; Filter: HAML
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   736
                 ("a|haml"                 "%a")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   737
                 ("a#q.x.y.z|haml"         "%a#q.x.y.z")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   738
                 ("a#q.x x=y m=l|haml"     "%a#q.x{:x => \"y\", :m => \"l\"}")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   739
                 ("div|haml"               "%div")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   740
                 ("div.footer|haml"        ".footer")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   741
                 (".footer|haml"           ".footer")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   742
                 ("p>a href=#+br|haml"     "%p"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   743
                                           "    %a{:href => \"#\"}"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   744
                                           "    %br")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   745
                 ;; Filter: Hiccup
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   746
                 ("a|hic"                  "[:a]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   747
                 ("a#q.x.y.z|hic"          "[:a#q.x.y.z]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   748
                 ("a#q.x x=y m=l|hic"      "[:a#q.x {:x \"y\", :m \"l\"}]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   749
                 (".footer|hic"            "[:div.footer]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   750
                 ("p>a href=#+br|hic"      "[:p"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   751
                                           "    [:a {:href \"#\"}]"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   752
                                           "    [:br]]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   753
                 ("#q>(a*2>b)+p>b|hic"     "[:div#q"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   754
                                           "    [:a [:b]]"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   755
                                           "    [:a [:b]]"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   756
                                           "    [:p"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   757
                                           "        [:b]]]")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   758
                 ;; Filter: escape
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   759
                 ("script src=&quot;|e"    "&lt;script src=\"&amp;quot;\"&gt;"
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   760
                                           "&lt;/script&gt;")
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   761
                 )))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   762
    (mapc (lambda (input)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   763
            (let ((expected (mapconcat 'identity (cdr input) "\n"))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   764
                  (actual (zencoding-transform (car (zencoding-expr (car input))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   765
              (if (not (equal expected actual))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   766
                  (error (concat "Assertion " (car input) " failed:"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   767
                                 expected
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   768
                                 " == "
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   769
                                 actual)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   770
            tests)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   771
    (concat (number-to-string (length tests)) " tests performed. All OK.")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   772
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   773
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   774
;; Zencoding minor mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   775
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   776
(defgroup zencoding nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   777
  "Customization group for zencoding-mode."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   778
  :group 'convenience)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   779
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   780
(defun zencoding-expr-on-line ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   781
  "Extract a zencoding expression and the corresponding bounds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   782
   for the current line."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   783
  (let* ((start (line-beginning-position))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   784
         (end (line-end-position))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   785
         (line (buffer-substring-no-properties start end))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   786
         (expr (zencoding-regex "\\([ \t]*\\)\\([^\n]+\\)" line 2)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   787
    (if (first expr)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   788
        (list (first expr) start end))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   789
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   790
(defcustom zencoding-indentation 4
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   791
  "Number of spaces used for indentation."
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   792
  :type '(number :tag "Spaces")
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   793
  :group 'zencoding)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   794
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   795
(defun zencoding-prettify (markup indent)
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   796
  (let ((first-col (format (format "%%%ds" indent) ""))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   797
        (tab       (format (format "%%%ds" zencoding-indentation) "")))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   798
    (concat first-col
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   799
            (replace-regexp-in-string "\n" (concat "\n" first-col)
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   800
                                      (replace-regexp-in-string "    " tab markup)))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   801
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   802
;;;###autoload
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   803
(defun zencoding-expand-line (arg)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   804
  "Replace the current line's zencode expression with the corresponding expansion.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   805
If prefix ARG is given or region is visible call `zencoding-preview' to start an
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   806
interactive preview.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   807
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   808
Otherwise expand line directly.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   809
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   810
For more information see `zencoding-mode'."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   811
  (interactive "P")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   812
  (let* ((here (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   813
         (preview (if zencoding-preview-default (not arg) arg))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   814
         (beg (if preview
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   815
                  (progn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   816
                    (beginning-of-line)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   817
                    (skip-chars-forward " \t")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   818
                    (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   819
                (when mark-active (region-beginning))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   820
         (end (if preview
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   821
                  (progn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   822
                    (end-of-line)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   823
                    (skip-chars-backward " \t")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   824
                    (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   825
                (when mark-active (region-end)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   826
    (if beg
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   827
        (progn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   828
          (goto-char here)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   829
          (zencoding-preview beg end))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   830
      (let ((expr (zencoding-expr-on-line)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   831
        (if expr
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   832
            (let* ((markup (zencoding-transform (car (zencoding-expr (first expr)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   833
                   (pretty (zencoding-prettify markup (current-indentation))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   834
              (save-excursion
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   835
                (delete-region (second expr) (third expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   836
                (zencoding-insert-and-flash pretty))))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   837
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   838
(defvar zencoding-mode-keymap nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   839
  "Keymap for zencode minor mode.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   840
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   841
(if zencoding-mode-keymap
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   842
    nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   843
  (progn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   844
    (setq zencoding-mode-keymap (make-sparse-keymap))
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   845
    (define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line)
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   846
    (define-key zencoding-mode-keymap (kbd "<C-return>") 'zencoding-expand-line)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   847
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   848
;;;###autoload
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   849
(define-minor-mode zencoding-mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   850
  "Minor mode for writing HTML and CSS markup.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   851
With zen coding for HTML and CSS you can write a line like
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   852
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   853
  ul#name>li.item*2
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   854
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   855
and have it expanded to
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   856
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   857
  <ul id=\"name\">
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   858
    <li class=\"item\"></li>
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   859
    <li class=\"item\"></li>
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   860
  </ul>
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   861
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   862
This minor mode defines keys for quick access:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   863
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   864
\\{zencoding-mode-keymap}
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   865
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   866
Home page URL `http://www.emacswiki.org/emacs/ZenCoding'.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   867
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   868
See also `zencoding-expand-line'."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   869
  :lighter " Zen"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   870
  :keymap zencoding-mode-keymap)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   871
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   872
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   873
;; Zencoding yasnippet integration
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   874
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   875
(defun zencoding-transform-yas (ast)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   876
  (let* ((leaf-count 0)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   877
         (zencoding-leaf-function
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   878
          (lambda ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   879
            (format "$%d" (incf leaf-count)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   880
    (zencoding-transform ast)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   881
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   882
;;;###autoload
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   883
(defun zencoding-expand-yas ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   884
  (interactive)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   885
  (let ((expr (zencoding-expr-on-line)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   886
    (if expr
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   887
        (let* ((markup (zencoding-transform-yas (car (zencoding-expr (first expr)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   888
               (filled (replace-regexp-in-string "><" ">\n<" markup)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   889
          (delete-region (second expr) (third expr))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   890
          (insert filled)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   891
          (indent-region (second expr) (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   892
          (yas/expand-snippet
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   893
           (buffer-substring (second expr) (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   894
           (second expr) (point))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   895
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   896
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   897
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   898
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   899
;;; Real-time preview
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   900
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   901
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   902
;;;;;;;;;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   903
;; Lennart's version
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   904
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   905
(defvar zencoding-preview-input nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   906
(make-local-variable 'zencoding-preview-input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   907
(defvar zencoding-preview-output nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   908
(make-local-variable 'zencoding-preview-output)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   909
(defvar zencoding-old-show-paren nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   910
(make-local-variable 'zencoding-old-show-paren)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   911
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   912
(defface zencoding-preview-input
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   913
  '((default :box t :inherit secondary-selection))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   914
  "Face for preview input field."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   915
  :group 'zencoding)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   916
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   917
(defface zencoding-preview-output
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   918
  '((default :inherit highlight))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   919
  "Face for preview output field."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   920
  :group 'zencoding)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   921
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   922
(defvar zencoding-preview-keymap
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   923
  (let ((map (make-sparse-keymap)))
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
   924
    (define-key map (kbd "RET") 'zencoding-preview-accept)
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   925
    (define-key map (kbd "<return>") 'zencoding-preview-accept)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   926
    (define-key map [(control ?g)] 'zencoding-preview-abort)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   927
    map))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   928
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   929
(defun zencoding-preview-accept ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   930
  (interactive)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   931
  (let ((ovli zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   932
    (if (not (and (overlayp ovli)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   933
                  (bufferp (overlay-buffer ovli))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   934
        (message "Preview is not active")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   935
      (let* ((indent (current-indentation))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   936
             (markup (zencoding-preview-transformed indent)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   937
        (when markup
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   938
          (delete-region (line-beginning-position) (overlay-end ovli))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   939
          (zencoding-insert-and-flash markup)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   940
  (zencoding-preview-abort))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   941
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   942
(defvar zencoding-flash-ovl nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   943
(make-variable-buffer-local 'zencoding-flash-ovl)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   944
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   945
(defun zencoding-remove-flash-ovl (buf)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   946
  (with-current-buffer buf
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   947
    (when (overlayp zencoding-flash-ovl)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   948
      (delete-overlay zencoding-flash-ovl))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   949
    (setq zencoding-flash-ovl nil)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   950
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   951
(defcustom zencoding-preview-default t
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   952
  "If non-nil then preview is the default action.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   953
This determines how `zencoding-expand-line' works by default."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   954
  :type 'boolean
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   955
  :group 'zencoding)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   956
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   957
(defcustom zencoding-insert-flash-time 0.5
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   958
  "Time to flash insertion.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   959
Set this to a negative number if you do not want flashing the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   960
expansion after insertion."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   961
  :type '(number :tag "Seconds")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   962
  :group 'zencoding)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   963
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   964
(defun zencoding-insert-and-flash (markup)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   965
  (zencoding-remove-flash-ovl (current-buffer))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   966
  (let ((here (point)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   967
    (insert markup)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   968
    (setq zencoding-flash-ovl (make-overlay here (point)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   969
    (overlay-put zencoding-flash-ovl 'face 'zencoding-preview-output)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   970
    (when (< 0 zencoding-insert-flash-time)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   971
      (run-with-idle-timer zencoding-insert-flash-time
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   972
                           nil 'zencoding-remove-flash-ovl (current-buffer)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   973
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   974
;;;###autoload
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   975
(defun zencoding-preview (beg end)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   976
  "Expand zencode between BEG and END interactively.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   977
This will show a preview of the expanded zen code and you can
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   978
accept it or skip it."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   979
  (interactive (if mark-active
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   980
                   (list (region-beginning) (region-end))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   981
                 (list nil nil)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   982
  (zencoding-preview-abort)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   983
  (if (not beg)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   984
      (message "Region not active")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   985
    (setq zencoding-old-show-paren show-paren-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   986
    (show-paren-mode -1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   987
    (let ((here (point)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   988
      (goto-char beg)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   989
      (forward-line 1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   990
      (unless (= 0 (current-column))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   991
        (insert "\n"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   992
      (let* ((opos (point))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   993
             (ovli (make-overlay beg end nil nil t))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   994
             (ovlo (make-overlay opos opos))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   995
             (info (propertize " Zen preview. Choose with RET. Cancel by stepping out. \n"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   996
                               'face 'tooltip)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   997
        (overlay-put ovli 'face 'zencoding-preview-input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   998
        (overlay-put ovli 'keymap zencoding-preview-keymap)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   999
        (overlay-put ovlo 'face 'zencoding-preview-output)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1000
        (overlay-put ovlo 'before-string info)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1001
        (setq zencoding-preview-input  ovli)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1002
        (setq zencoding-preview-output ovlo)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1003
        (add-hook 'before-change-functions 'zencoding-preview-before-change t t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1004
        (goto-char here)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1005
        (add-hook 'post-command-hook 'zencoding-preview-post-command t t)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1006
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1007
(defvar zencoding-preview-pending-abort nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1008
(make-variable-buffer-local 'zencoding-preview-pending-abort)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1009
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1010
(defun zencoding-preview-before-change (beg end)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1011
  (when
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1012
      (or (> beg (overlay-end zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1013
          (< beg (overlay-start zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1014
          (> end (overlay-end zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1015
          (< end (overlay-start zencoding-preview-input)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1016
    (setq zencoding-preview-pending-abort t)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1017
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1018
(defun zencoding-preview-abort ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1019
  "Abort zen code preview."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1020
  (interactive)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1021
  (setq zencoding-preview-pending-abort nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1022
  (remove-hook 'before-change-functions 'zencoding-preview-before-change t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1023
  (when (overlayp zencoding-preview-input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1024
    (delete-overlay zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1025
  (setq zencoding-preview-input nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1026
  (when (overlayp zencoding-preview-output)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1027
    (delete-overlay zencoding-preview-output))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1028
  (setq zencoding-preview-output nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1029
  (remove-hook 'post-command-hook 'zencoding-preview-post-command t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1030
  (when zencoding-old-show-paren (show-paren-mode 1)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1031
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1032
(defun zencoding-preview-post-command ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1033
  (condition-case err
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1034
      (zencoding-preview-post-command-1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1035
    (error (message "zencoding-preview-post: %s" err))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1036
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1037
(defun zencoding-preview-post-command-1 ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1038
  (if (and (not zencoding-preview-pending-abort)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1039
           (<= (point) (overlay-end zencoding-preview-input))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1040
           (>= (point) (overlay-start zencoding-preview-input)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1041
      (zencoding-update-preview (current-indentation))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1042
    (zencoding-preview-abort)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1043
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1044
(defun zencoding-preview-transformed (indent)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1045
  (let* ((string (buffer-substring-no-properties
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1046
		  (overlay-start zencoding-preview-input)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1047
		  (overlay-end zencoding-preview-input)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1048
	 (ast    (car (zencoding-expr string))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1049
    (when (not (eq ast 'error))
51
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
  1050
      (let ((output (zencoding-transform ast)))
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
  1051
        (when output
c4e0668a2c87 Updated zencoding mode.
Luke Hoersten <Luke@Hoersten.org>
parents: 35
diff changeset
  1052
          (zencoding-prettify output indent))))))
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1053
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1054
(defun zencoding-update-preview (indent)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1055
  (let* ((pretty (zencoding-preview-transformed indent))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1056
         (show (when pretty
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1057
                 (propertize pretty 'face 'highlight))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1058
    (when show
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1059
      (overlay-put zencoding-preview-output 'after-string
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1060
                   (concat show "\n")))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1061
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1062
(provide 'zencoding-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1063
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
  1064
;;; zencoding-mode.el ends here