1 ;;; -*- Mode: Lisp; Syntax: Common-Lisp; Package: CLOSURE-PROTOCOL; -*-
2 ;;; ---------------------------------------------------------------------------
3 ;;; Title: Protocol to support CSS style sheet cascading
4 ;;; Created: 2002-08-07 03:40
5 ;;; Author: Gilbert Baumann <gilbert@base-engineering.com>
6 ;;; License: LGPL (See file COPYING for details).
7 ;;; ---------------------------------------------------------------------------
8 ;;; (c) copyright 2002 by Gilbert Baumann
10 ;;; Permission is hereby granted, free of charge, to any person obtaining
11 ;;; a copy of this software and associated documentation files (the
12 ;;; "Software"), to deal in the Software without restriction, including
13 ;;; without limitation the rights to use, copy, modify, merge, publish,
14 ;;; distribute, sublicense, and/or sell copies of the Software, and to
15 ;;; permit persons to whom the Software is furnished to do so, subject to
16 ;;; the following conditions:
18 ;;; The above copyright notice and this permission notice shall be
19 ;;; included in all copies or substantial portions of the Software.
21 ;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 ;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 ;;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 ;;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
25 ;;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 ;;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 ;;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 (in-package :CLOSURE-PROTOCOL
)
31 (defgeneric element-css-class
(element)
34 (defgeneric element-css-id
(element)
37 (defgeneric pseudo-class-matches-p
(pseudo-class element
)
40 (defgeneric element-style-cache
(element)
43 (defgeneric (setf element-style-cache
) (new-value element
)
46 (defgeneric element-implicit-style
(document element
)
49 (defgeneric element-explicit-style
(document element
)
55 (defgeneric element-implicit-style
(document-language element
))
56 (defgeneric element-explicit-style
(document-language element
))
57 (defgeneric element-css-class
(document-language element
))
58 (defgeneric element-css-id
(document-language element
))
59 (defgeneric element-psuedo-class-matches
(document-language pseudo-class element
))
63 (defclass html-document-language
())
64 (defclass html-4.0-document-language
(html-document-language))
65 (defclass html-3.2-document-language
(html-document-language))
67 (defclass xml-document-language
())
69 we might get away with special variables ... and split this into e.g.
73 (defvar *document-language
*)
76 (defgeneric element-implicit-style-1
(user-agent document-language element
))
78 (defun element-implicit-style (element)
79 (element-implicit-style-1 *user-agent
* *document-language
* element
))
81 ;; then we want a user-agent protcol like
83 (defgeneric post-title
(user-agent title
))
84 (defgeneric post-link
(user-agent ...
)
85 (defgeneric open-uri
(user-agent uri
))
90 ;;;;;;;;;;;;; Render Support Protocol
92 (defvar *document-language
*)
95 (defun element-replaced-element (device element
)
96 (element-replaced-element-1 *document-language
* *user-agent
* document device element
))
98 (defgeneric element-replaced-element-1
(document-language user-agent document device element
)
101 (defgeneric element-base-url
(document-language element
)
104 (defgeneric element-imap
(document-language document element
)
107 (defgeneric render
(document-language document device element
110 &key selected-style
)
113 (defgeneric root-element-embedded-style
(language root-element
)