From d6783b24529833edb02e2d3d68b9b01123841ffc Mon Sep 17 00:00:00 2001 From: Ron Panduwana Date: Wed, 9 Feb 2011 23:56:59 +0700 Subject: Added tag expansion for table, ul, ol, and dl --- zencoding-mode.el | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'zencoding-mode.el') diff --git a/zencoding-mode.el b/zencoding-mode.el index acc1fa9..175940d 100644 --- a/zencoding-mode.el +++ b/zencoding-mode.el @@ -137,11 +137,6 @@ (defun zencoding-tag (input) "Parse a tag." - (let ((first-char (substring input 0 1))) - (if (or (string= "#" first-char) - (string= "." first-char)) - (setq input (concat "div" input)) - nil)) (zencoding-run zencoding-tagname (let ((tagname (cadr expr)) (has-body? (cddr expr))) @@ -153,7 +148,14 @@ (zencoding-pif (zencoding-tag-props expr input) it expr-and-input)))) - '(error "expected tagname"))) + (zencoding-default-tag input))) + +(defun zencoding-default-tag (input) + "Parse a #id or .class" + (zencoding-parse "\\([#|\\.]\\)" 1 "tagname" + (zencoding-tag (concat "div" (elt it 0))))) + +;'(error "expected tagname") (defun zencoding-tag-props (tag input) (zencoding-run zencoding-props @@ -272,9 +274,28 @@ (zencoding-run zencoding-expr (let ((child expr)) `((zencoding-siblings ,parent ,child) . ,input)) - '(error "expected second sibling")))) + (zencoding-expand parent input)))) '(error "expected first sibling"))) +(defvar zencoding-expandable-tags + '("dl" ">(dt+dd)" + "ol" ">li" + "ul" ">li" + "table" ">tr>td")) + +(defun zencoding-expand (parent input) + "Parse an e+ expression, where e is an expandable tag" + (let ((parent-tag (car (elt parent 1)))) + (let ((expandable (member parent-tag zencoding-expandable-tags))) + (if expandable + (let ((expansion (zencoding-child parent (concat (cadr expandable))))) + (zencoding-pif (zencoding-parse "+\\(.*\\)" 1 "+expr" + (zencoding-expr (elt it 1))) + `((zencoding-siblings ,(car expansion) ,(car it))) + expansion) + ) + '(error "expected second sibling"))))) + (defun zencoding-name (input) "Parse a class or identifier name, e.g. news, footer, mainimage" (zencoding-parse "\\([a-zA-Z][a-zA-Z0-9-_:]*\\)" 2 "class or identifer name" @@ -407,6 +428,12 @@ ("a#q.x+b" "") ("a#q.x.y.z+b" "") ("a#q.x.y.z+b#p.l.m.n" "") + ;; Tag expansion + ("table+" "\n\n\n\n\n
\n
") + ("dl+" "\n
\n
\n
\n
\n
\n
") + ("ul+" "\n") + ("ul++ol+" "\n\n
    \n
  1. \n
  2. \n
") + ("ul#q.x.y m=l+" "\n") ;; Parent > child ("a>b" "") ("a>b>c" "") @@ -414,7 +441,7 @@ ("a#q.x>b" "") ("a#q.x.y.z>b" "") ("a#q.x.y.z>b#p.l.m.n" "") - ("#q>.x" "\n
\n
\n
\n
") + ("#q>.x" "\n
\n
\n
\n
") ("a>b+c" "") ("a>b+c>d" "") ;; Multiplication -- cgit v1.2.3