The markup Reference Manual

Next: , Previous: , Up: (dir)   [Contents][Index]

The markup Reference Manual

This is the markup Reference Manual, version 0.0.1, generated automatically by Declt version 4.0 beta 2 "William Riker" on Thu Sep 15 05:34:50 2022 GMT+0.

Table of Contents


1 Introduction

markup

tdrhq

Arnold Noronha arnold@tdrhq.com

Markup let's you write HTML code inside of common lisp, for instance

(let ((x "hello"))
  <h1>,(progn x) <em>world</em>!</h1>)

Motivation

There are several HTML generation libraries for Common Lisp, for example CL-WHO. However, these libraries follow the Lisp style of building up the structure in parenthesis.

For example, it might look like something like this:

;; CL-WHO syntax, not markup's
(:p "hello" (:em "world") "!")

There are many advantages to this structure, but there are a few prominent disadvantages.

First, there's all that double-quotes that becomes hard to track.

Second, and more importantly: There are hundreds of templates and HTML snippets on the internet that are hard to copy-paste into your project if you have to transform them into CL-WHO structures. Time is money.

Finally, it's already hard to hire Lisp engineers. Don't you want to be able to hire designers who might at least modify HTML they recognize inside your lisp project?

Performance

Performance is not a motivation for Markup. We're focussing on developer productivity. For instance, compared to CL-WHO we generate the entire tree of HTML tags before serializing it into the stream at the last step. We haven't reached a situation where this is a bottleneck for our use cases.

Building the tree also lets us build more complex components that can go modify the tree.

It might be possible to build a streaming version of Markup, but that's not on our radar.

Full example with Hunchentoot

(markup:enable-reader)

(markup:deftag template (children &key title)
  <html>
    <head>
     <title>,(progn title)</title>
    </head>
    <body>
      ,@(progn children)
    </body>
  </html>)

(hunchentoot:define-easy-handler (foobar :uri "/") ()
  (markup:write-html
     <template title="Hello" >
        <h1>hello world!</h1>
     </template>))

Installation

markup is available via quicklisp

(ql:quickload "markup")

(If that doesn't load, make sure you update your dists, (ql:update-all-dists))

Editor support

(use-package lisp-markup
  :load-path "~/quicklisp/dists/quicklisp/software/markup-<version>-git/")

;; if you don't use use-package
(add-to-list 'load-path "~/quicklisp/dists/quicklisp/software/markup-<version>-git/")
(require 'lisp-markup)

FAQ

What about expressions like (< x 2)?

Markdown requires tags to follow the < operator, otherwise (or if it's <=) treats it as a symbol.

Are custom tags namespaced?

Of course, custom tags are just lisp symbols. So you can define a tag like <admin:template>...</admin:template>.

Certain tag names are treated as special (<b>, <body> etc.) since they're HTML elements.

If you want to output the equivalent HTML element for a tag that isn't treated as special you can also specify the tag using keyword symbols <:foo>..</:foo>.

How do you embed lisp code in markup?

You have already seen some examples in this README. Use ,(...) to escape some lisp code that returns a single element, or ,@sexp that returns a list of elements. (Side note, we really don't need to have both of these, but it matches the backquote syntax much better this way).

You can also embed lisp code as attribute values.

  <a href=(generate-url ...) >...</a>

That is, any expression after the an attribute is read using the standard Lisp reader. A small caveat to this is that in some cases you need to have a space after the ending >. For instance the following will result in an error:

   ;; bad code
   <a href=url-var>...</a>
   ;; correct code
   <a href=url-var >...</a>

Is markup used in production?

Yes it is! Right now it's used on several websites we've built. They've solved all of our use cases reliably. The primary website we use this on is Screenshotbot, if you're building web interfaces, you might enjoy using Screenshotbot to keep testing the rendering of your UI in Continuous Integration. (For instance, we use Selenium tests to generate screenshots of Screenshotbot's UI.)

Please do let us know if you use Markup on the sites you're building. We'd love to include them here.

See also

XHP for PHP, and JSX for React both support HTML inside of code for very similar motivations.

@fukamachi released LSX in the same Quicklisp release that markup came out (although his repo goes back much longer, around the time I first started working on Markup internally.). Functionally, it's super similar to Markup and Fukamachi is a pretty fantastic Lisper, and maybe in the future we should consolidate.

License

Apache License, Version 2.0


2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 markup

markup provides a reader-macro to read HTML/XML tags inside of Common Lisp code

Author

Arnold Noronha <arnold@tdrhq.com>

License

Apache License, Version 2.0

Version

0.0.1

Dependencies
  • str (system).
  • alexandria (system).
  • named-readtables (system).
  • trivial-gray-streams (system).
Source

markup.asd.

Child Components

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


Next: , Previous: , Up: Lisp   [Contents][Index]

3.1.1 markup/markup.asd

Source

markup.asd.

Parent Component

markup (system).

ASDF Systems

markup.


Next: , Previous: , Up: Lisp   [Contents][Index]

3.1.2 markup/stream.lisp

Source

markup.asd.

Parent Component

markup (system).

Packages

markup/stream.

Public Interface
Internals

3.1.3 markup/tags.lisp

Dependency

stream.lisp (file).

Source

markup.asd.

Parent Component

markup (system).

Packages

markup/tags.

Public Interface

3.1.4 markup/markup.lisp

Dependency

tags.lisp (file).

Source

markup.asd.

Parent Component

markup (system).

Packages

markup/markup.

Public Interface
Internals

Next: , Previous: , Up: Lisp   [Contents][Index]

3.1.5 markup/optimizer.lisp

Dependency

markup.lisp (file).

Source

markup.asd.

Parent Component

markup (system).

Packages

markup/optimizer.

Public Interface
Internals

3.1.6 markup/walk.lisp

Dependency

optimizer.lisp (file).

Source

markup.asd.

Parent Component

markup (system).

Packages

markup/walk.

Public Interface

Previous: , Up: Lisp   [Contents][Index]

3.1.7 markup/all.lisp

Dependency

walk.lisp (file).

Source

markup.asd.

Parent Component

markup (system).

Packages

markup.


4 Packages

Packages are listed by definition order.


Next: , Previous: , Up: Packages   [Contents][Index]

4.1 markup

Source

all.lisp.

Use List

Next: , Previous: , Up: Packages   [Contents][Index]

4.2 markup/stream

Source

stream.lisp.

Use List

common-lisp.

Public Interface

wrap-stream (function).

Internals

Next: , Previous: , Up: Packages   [Contents][Index]

4.3 markup/optimizer

Source

optimizer.lisp.

Use List

common-lisp.

Internals

Next: , Previous: , Up: Packages   [Contents][Index]

4.4 markup/markup

Source

markup.lisp.

Use List
  • common-lisp.
  • editor-hints.named-readtables.
Used By List

markup.

Public Interface
Internals

Next: , Previous: , Up: Packages   [Contents][Index]

4.5 markup/walk

Source

walk.lisp.

Use List

common-lisp.

Used By List

markup.

Public Interface

Previous: , Up: Packages   [Contents][Index]

4.6 markup/tags

Source

tags.lisp.

Use List

common-lisp.

Public Interface

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Public Interface


5.1.1 Constants

Constant: +empty+

If you use this as an attribute value, it will render as an empty attribute. For instance, you might have something like this:

<input required=(if (required-p) +empty+ nil) />

Package

markup/markup.

Source

markup.lisp.


Next: , Previous: , Up: Public Interface   [Contents][Index]

5.1.2 Special variables

Special Variable: *standard-names*
Package

markup/tags.

Source

tags.lisp.

Special Variable: *void-tags*
Package

markup/tags.

Source

tags.lisp.


5.1.3 Macros

Macro: deftag (name (&rest args) &body body)

Define a new XML tag that.

Tags are namespaced so you if you define a tag foo in namespace bar
you can refer to it as <bar:foo>...</bar:foo>.

The lambda-list has a very specific syntax: it must be: ([children [&key attr*]).

If children is provided, it will be filled with the list of all
child tags while parsing. For instance <bar:foo>x<h1>y</h1></bar:foo>, will set children as ("x" <h1>y</h1>).

Package

markup/markup.

Source

markup.lisp.

Macro: enable-reader ()
Package

markup/markup.

Source

markup.lisp.


5.1.4 Ordinary functions

Function: make-merge-tag (children)
Package

markup/markup.

Source

markup.lisp.

Function: make-xml-tag (name &key children attributes unused)
Package

markup/markup.

Source

markup.lisp.

Function: merge-tag (&rest attrs-and-body)
Package

markup/markup.

Source

markup.lisp.

Function: read-xml-from-string (string)
Package

markup/markup.

Source

markup.lisp.

Function: unescaped (string)
Package

markup/markup.

Source

markup.lisp.

Function: wrap-stream (stream)
Package

markup/stream.

Source

stream.lisp.

Function: write-html (tree)
Package

markup/markup.

Source

markup.lisp.

Function: write-xml (tree)
Package

markup/markup.

Source

markup.lisp.

Function: write-xml-to-stream (tree stream)
Package

markup/markup.

Source

markup.lisp.

Reader: xml-merge-tag-children (instance)
Writer: (setf xml-merge-tag-children) (instance)
Package

markup/markup.

Source

markup.lisp.

Target Slot

children.


5.1.5 Generic functions

Generic Function: add-attrs (tag &rest args &key &allow-other-keys)
Package

markup/walk.

Methods
Method: add-attrs ((tag abstract-xml-tag) &rest args &key &allow-other-keys)
Source

walk.lisp.

Generic Function: format-attr-val (stream val)
Package

markup/markup.

Methods
Method: format-attr-val (stream val)
Source

markup.lisp.

Generic Function: get-attr (xml-tag name)
Package

markup/markup.

Methods
Method: get-attr ((xml-tag abstract-xml-tag) name)
Source

markup.lisp.

Generic Function: optimize-markup (tree)
Package

markup/markup.

Methods
Method: optimize-markup ((tree cons))

Rewrite the tree of (make-xml-tag ...)s into something that can be more efficiently rendered in the most frequent case.

Source

optimizer.lisp.

Method: optimize-markup (tree)
Source

optimizer.lisp.

Generic Function: read-xml (stream char)
Package

markup/markup.

Methods
Method: read-xml ((stream markup-stream) char)
Source

markup.lisp.

Method: read-xml (stream char)
Source

markup.lisp.

Generic Function: walk (tree fn)

Walk the tree, giving you the option to transform each element

Package

markup/walk.

Source

walk.lisp.

Methods
Method: walk ((tree abstract-xml-tag) fn)
Method: walk ((tree list) fn)
Method: walk ((tree xml-merge-tag) fn)
Method: walk ((tree escaped-string) fn)
Method: walk ((tree unescaped-string) fn)
Method: walk ((tree string) fn)
Method: walk (tree fn)
Generic Function: write-html-to-stream (tree stream)
Package

markup/markup.

Source

markup.lisp.

Methods
Method: write-html-to-stream ((self register-tag) stream)
Source

optimizer.lisp.

Method: write-html-to-stream ((self lazy-xml-tag) stream)
Source

optimizer.lisp.

Method: write-html-to-stream ((tree escaped-string) stream)
Method: write-html-to-stream ((tree unescaped-string) stream)
Method: write-html-to-stream ((tree (eql nil)) stream)
Method: write-html-to-stream ((tree xml-merge-tag) stream)
Method: write-html-to-stream ((tree string) stream)
Method: write-html-to-stream ((tree abstract-xml-tag) stream)
Method: write-html-to-stream ((tree integer) stream)
Generic Function: xml-tag-attributes (object)
Package

markup/markup.

Methods
Method: xml-tag-attributes ((tag abstract-xml-tag))
Source

optimizer.lisp.

Reader Method: xml-tag-attributes ((xml-tag xml-tag))

automatically generated reader method

Source

markup.lisp.

Target Slot

attributes.

Generic Function: (setf xml-tag-attributes) (object)
Package

markup/markup.

Methods
Method: (setf xml-tag-attributes) ((tag abstract-xml-tag))
Source

optimizer.lisp.

Writer Method: (setf xml-tag-attributes) ((xml-tag xml-tag))

automatically generated writer method

Source

markup.lisp.

Target Slot

attributes.

Generic Function: xml-tag-children (object)
Package

markup/markup.

Methods
Method: xml-tag-children ((tag abstract-xml-tag))
Source

optimizer.lisp.

Reader Method: xml-tag-children ((xml-tag xml-tag))

automatically generated reader method

Source

markup.lisp.

Target Slot

children.

Generic Writer: (setf xml-tag-children) (object)
Package

markup/markup.

Methods
Writer Method: (setf xml-tag-children) ((xml-tag xml-tag))

automatically generated writer method

Source

markup.lisp.

Target Slot

children.

Generic Function: xml-tag-name (object)
Package

markup/markup.

Methods
Method: xml-tag-name ((tag abstract-xml-tag))
Source

optimizer.lisp.

Reader Method: xml-tag-name ((xml-tag xml-tag))

automatically generated reader method

Source

markup.lisp.

Target Slot

name.

Generic Writer: (setf xml-tag-name) (object)
Package

markup/markup.

Methods
Writer Method: (setf xml-tag-name) ((xml-tag xml-tag))

automatically generated writer method

Source

markup.lisp.

Target Slot

name.


5.1.6 Standalone methods

Method: print-object :around ((tree lazy-xml-tag) stream)
Source

optimizer.lisp.

Method: print-object ((c undefined-markup-tag-condition) out)
Source

markup.lisp.

Method: print-object ((tree abstract-xml-tag) stream)
Source

markup.lisp.

Method: print-object ((tree xml-merge-tag) stream)
Source

markup.lisp.

Method: print-object ((tree unescaped-string) stream)
Source

markup.lisp.

Method: print-object ((x html-parse-error) stream)
Source

markup.lisp.

Method: stream-peek-char ((stream markup-stream))
Package

sb-gray.

Source

stream.lisp.

Method: stream-read-char ((stream markup-stream))
Package

sb-gray.

Source

stream.lisp.

Method: stream-unread-char ((stream markup-stream) ch)
Package

sb-gray.

Source

stream.lisp.


5.1.7 Conditions

Condition: undefined-markup-tag-condition
Package

markup/markup.

Source

markup.lisp.

Direct superclasses

error.

Direct methods
Direct slots
Slot: name
Initargs

:name

Readers

tag-name.

Writers

(setf tag-name).


Next: , Previous: , Up: Public Interface   [Contents][Index]

5.1.8 Structures

Structure: xml-merge-tag
Package

markup/markup.

Source

markup.lisp.

Direct superclasses

structure-object.

Direct methods
Direct slots
Slot: children
Type

(or null cons)

Readers

xml-merge-tag-children.

Writers

(setf xml-merge-tag-children).


Previous: , Up: Public Interface   [Contents][Index]

5.1.9 Classes

Class: abstract-xml-tag
Package

markup/markup.

Source

markup.lisp.

Direct subclasses
Direct methods
Class: xml-tag
Package

markup/markup.

Source

markup.lisp.

Direct superclasses

abstract-xml-tag.

Direct methods
Direct slots
Slot: attributes
Type

(or null cons)

Initargs

:attributes

Readers

xml-tag-attributes.

Writers

(setf xml-tag-attributes).

Slot: children
Type

(or null cons)

Initargs

:children

Readers

xml-tag-children.

Writers

(setf xml-tag-children).

Slot: name
Type

symbol

Initform

(quote markup/markup::dummy)

Initargs

:name

Readers

xml-tag-name.

Writers

(setf xml-tag-name).


5.2 Internals


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.1 Special variables

Special Variable: *disable-optimizer*
Package

markup/optimizer.

Source

optimizer.lisp.

Special Variable: *standard-name-cache*
Package

markup/markup.

Source

markup.lisp.

Special Variable: *void-tag-cache*
Package

markup/markup.

Source

markup.lisp.

Special Variable: +escape-map+
Package

markup/markup.

Source

markup.lisp.

Special Variable: +escape-minimal-map+
Package

markup/markup.

Source

markup.lisp.


5.2.2 Macros

Macro: %deftag (name (children &optional key-attr &rest args) &body decl-and-body)
Package

markup/markup.

Source

markup.lisp.

Macro: make-lazy-xml-tag (registers standard-names body)
Package

markup/optimizer.

Source

optimizer.lisp.

Macro: make-toplevel-node (node)
Package

markup/markup.

Source

markup.lisp.


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.3 Ordinary functions

Function: copy-xml-merge-tag (instance)
Package

markup/markup.

Source

markup.lisp.

Function: deftag-symbol (arg)
Package

markup/markup.

Source

markup.lisp.

Function: deftag-value (arg)
Package

markup/markup.

Source

markup.lisp.

Function: delegate (tag)
Package

markup/optimizer.

Source

optimizer.lisp.

Function: get-markup-fn (name)
Package

markup/markup.

Source

markup.lisp.

Function: last-few-chars (stream)
Package

markup/markup.

Source

markup.lisp.

Function: make-escape-map (alist)
Package

markup/markup.

Source

markup.lisp.

Function: make-escaped (child)
Package

markup/markup.

Source

markup.lisp.

Function: make-xml-merge-tag (&key children)
Package

markup/markup.

Source

markup.lisp.

Function: print-escaped-text ()
Package

markup/markup.

Source

markup.lisp.

Function: print-escaped-text-minimal (value stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-attr-key (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-attr-val (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-attributes (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-comment (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-so-far (stream)
Package

markup/stream.

Source

stream.lisp.

Function: read-string-from-xml (stream next)
Package

markup/markup.

Source

markup.lisp.

Function: read-tag (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-whitespace (stream)
Package

markup/markup.

Source

markup.lisp.

Function: read-xml-after-bracket (stream char)
Package

markup/markup.

Source

markup.lisp.

Function: read-xml-toplevel (stream char)
Package

markup/markup.

Source

markup.lisp.

Function: standard-name? (tag)
Package

markup/markup.

Source

markup.lisp.

Function: void-tag? (tag)
Package

markup/markup.

Source

markup.lisp.

Function: whitespacep (char)
Package

markup/markup.

Source

markup.lisp.

Function: write-attributes (attributes stream)
Package

markup/markup.

Source

markup.lisp.

Function: xml-merge-tag-p (object)
Package

markup/markup.

Source

markup.lisp.


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.4 Generic functions

Generic Reader: %unread-char (object)
Package

markup/stream.

Methods
Reader Method: %unread-char ((markup-stream markup-stream))

automatically generated reader method

Source

stream.lisp.

Target Slot

unread-char.

Generic Writer: (setf %unread-char) (object)
Package

markup/stream.

Methods
Writer Method: (setf %unread-char) ((markup-stream markup-stream))

automatically generated writer method

Source

stream.lisp.

Target Slot

unread-char.

Generic Function: %write-html-to-stream (self stream)
Package

markup/optimizer.

Methods
Method: %write-html-to-stream ((self xml-tag) (stream lambda-builder-stream))
Source

optimizer.lisp.

Generic Reader: attr-name (condition)
Package

markup/optimizer.

Methods
Reader Method: attr-name ((condition render-register-attr))
Source

optimizer.lisp.

Target Slot

name.

Generic Reader: body (object)
Package

markup/optimizer.

Methods
Reader Method: body ((lambda-builder-stream lambda-builder-stream))

automatically generated reader method

Source

optimizer.lisp.

Target Slot

body.

Generic Writer: (setf body) (object)
Package

markup/optimizer.

Methods
Writer Method: (setf body) ((lambda-builder-stream lambda-builder-stream))

automatically generated writer method

Source

optimizer.lisp.

Target Slot

body.

Generic Reader: escaped-string-content (object)
Package

markup/markup.

Methods
Reader Method: escaped-string-content ((escaped-string escaped-string))

automatically generated reader method

Source

markup.lisp.

Target Slot

content.

Generic Writer: (setf escaped-string-content) (object)
Package

markup/markup.

Methods
Writer Method: (setf escaped-string-content) ((escaped-string escaped-string))

automatically generated writer method

Source

markup.lisp.

Target Slot

content.

Generic Reader: fast-writer (object)
Package

markup/optimizer.

Methods
Reader Method: fast-writer ((lazy-xml-tag lazy-xml-tag))

A lambda function, when called with a
stream will very efficiently write the tree to the stream. This function will only work if you didn’t attempt to introspect the node.

Source

optimizer.lisp.

Target Slot

fast-writer.

Generic Reader: history-stream (object)
Package

markup/stream.

Methods
Reader Method: history-stream ((markup-stream markup-stream))

automatically generated reader method

Source

stream.lisp.

Target Slot

history.

Generic Reader: register (condition)
Package

markup/optimizer.

Methods
Reader Method: register ((register-tag register-tag))

automatically generated reader method

Source

optimizer.lisp.

Target Slot

register.

Reader Method: register ((condition render-register-attr))
Source

optimizer.lisp.

Target Slot

register.

Reader Method: register ((condition render-register))
Source

optimizer.lisp.

Target Slot

register.

Generic Reader: standard-names (object)
Package

markup/optimizer.

Methods
Reader Method: standard-names ((lazy-xml-tag lazy-xml-tag))

A list of all symbols that are
assumed to be standard names. At compilation time, the FAST-WRITER might detect that these symbols are not overriden.. If at render time we detect that one of the symbols are overriden, then we’ll fallback to the slow path. This should be very very rare.

Source

optimizer.lisp.

Target Slot

standard-names.

Generic Reader: stream-delegate (object)
Package

markup/stream.

Methods
Reader Method: stream-delegate ((markup-stream markup-stream))

automatically generated reader method

Source

stream.lisp.

Target Slot

delegate.

Generic Reader: tag-name (condition)
Generic Writer: (setf tag-name) (condition)
Package

markup/markup.

Methods
Reader Method: tag-name ((condition undefined-markup-tag-condition))
Writer Method: (setf tag-name) ((condition undefined-markup-tag-condition))
Source

markup.lisp.

Target Slot

name.

Generic Reader: unescaped-string-content (object)
Package

markup/markup.

Methods
Reader Method: unescaped-string-content ((unescaped-string unescaped-string))

automatically generated reader method

Source

markup.lisp.

Target Slot

content.

Generic Writer: (setf unescaped-string-content) (object)
Package

markup/markup.

Methods
Writer Method: (setf unescaped-string-content) ((unescaped-string unescaped-string))

automatically generated writer method

Source

markup.lisp.

Target Slot

content.

Generic Function: write-attribute-pair (name val stream)
Package

markup/markup.

Methods
Method: write-attribute-pair (name (self register-tag) stream)
Source

optimizer.lisp.

Method: write-attribute-pair (name val stream)
Source

markup.lisp.

Generic Function: write-attribute-value (val stream)
Package

markup/markup.

Methods
Method: write-attribute-value (val stream)

Writes the attribute value, including if needed

Source

markup.lisp.

Generic Reader: xml-tag-builder (object)
Package

markup/optimizer.

Methods
Reader Method: xml-tag-builder ((lazy-xml-tag lazy-xml-tag))

automatically generated reader method

Source

optimizer.lisp.

Target Slot

xml-tag-builder.


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.5 Conditions

Condition: html-parse-error
Package

markup/markup.

Source

markup.lisp.

Direct superclasses

error.

Direct methods

print-object.

Direct slots
Slot: message
Initargs

:message

Slot: stream
Package

common-lisp.

Initargs

:stream

Slot: last-few-chars
Initargs

:last-few-chars

Condition: render-register
Package

markup/optimizer.

Source

optimizer.lisp.

Direct superclasses

condition.

Direct methods

register.

Direct slots
Slot: register
Initargs

:register

Readers

register.

Writers

This slot is read-only.

Condition: render-register-attr
Package

markup/optimizer.

Source

optimizer.lisp.

Direct superclasses

condition.

Direct methods
Direct slots
Slot: register
Initargs

:register

Readers

register.

Writers

This slot is read-only.

Slot: name
Initargs

:name

Readers

attr-name.

Writers

This slot is read-only.


Previous: , Up: Internals   [Contents][Index]

5.2.6 Classes

Class: escaped-string
Package

markup/markup.

Source

markup.lisp.

Direct methods
Direct slots
Slot: content
Initargs

:content

Readers

escaped-string-content.

Writers

(setf escaped-string-content).

Class: lambda-builder-stream

A fake ’stream’. We’ll try to write a fake xml-tree
into this, but instead of writing the actual contents, we’ll write the instructions required to reproduce this efficiently.

Package

markup/optimizer.

Source

optimizer.lisp.

Direct methods
Direct slots
Slot: body
Initargs

:body

Readers

body.

Writers

(setf body).

Class: lazy-xml-tag
Package

markup/optimizer.

Source

optimizer.lisp.

Direct superclasses

abstract-xml-tag.

Direct methods
Direct slots
Slot: delegate
Slot: xml-tag-builder
Initargs

:builder

Readers

xml-tag-builder.

Writers

This slot is read-only.

Slot: standard-names

A list of all symbols that are
assumed to be standard names. At compilation time, the FAST-WRITER might detect that these symbols are not overriden.. If at render time we detect that one of the symbols are overriden, then we’ll fallback to the slow path. This should be very very rare.

Initargs

:standard-names

Readers

standard-names.

Writers

This slot is read-only.

Slot: fast-writer

A lambda function, when called with a
stream will very efficiently write the tree to the stream. This function will only work if you didn’t attempt to introspect the node.

Initargs

:fast-writer

Readers

fast-writer.

Writers

This slot is read-only.

Class: markup-stream
Package

markup/stream.

Source

stream.lisp.

Direct superclasses

fundamental-character-stream.

Direct methods
Direct slots
Slot: delegate
Initargs

:delegate

Readers

stream-delegate.

Writers

This slot is read-only.

Slot: unread-char
Package

common-lisp.

Readers

%unread-char.

Writers

(setf %unread-char).

Slot: history
Initform

(make-string-output-stream)

Readers

history-stream.

Writers

This slot is read-only.

Class: register-tag
Package

markup/optimizer.

Source

optimizer.lisp.

Direct methods
Direct slots
Slot: register
Initargs

:register

Readers

register.

Writers

This slot is read-only.

Class: unescaped-string
Package

markup/markup.

Source

markup.lisp.

Direct methods
Direct slots
Slot: content
Initargs

:content

Readers

unescaped-string-content.

Writers

(setf unescaped-string-content).


Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts


Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   %   (  
A   B   C   D   E   F   G   H   L   M   O   P   R   S   T   U   V   W   X  
Index Entry  Section

%
%deftag: Private macros
%unread-char: Private generic functions
%unread-char: Private generic functions
%write-html-to-stream: Private generic functions
%write-html-to-stream: Private generic functions

(
(setf %unread-char): Private generic functions
(setf %unread-char): Private generic functions
(setf body): Private generic functions
(setf body): Private generic functions
(setf escaped-string-content): Private generic functions
(setf escaped-string-content): Private generic functions
(setf tag-name): Private generic functions
(setf tag-name): Private generic functions
(setf unescaped-string-content): Private generic functions
(setf unescaped-string-content): Private generic functions
(setf xml-merge-tag-children): Public ordinary functions
(setf xml-tag-attributes): Public generic functions
(setf xml-tag-attributes): Public generic functions
(setf xml-tag-attributes): Public generic functions
(setf xml-tag-children): Public generic functions
(setf xml-tag-children): Public generic functions
(setf xml-tag-name): Public generic functions
(setf xml-tag-name): Public generic functions

A
add-attrs: Public generic functions
add-attrs: Public generic functions
attr-name: Private generic functions
attr-name: Private generic functions

B
body: Private generic functions
body: Private generic functions

C
copy-xml-merge-tag: Private ordinary functions

D
deftag: Public macros
deftag-symbol: Private ordinary functions
deftag-value: Private ordinary functions
delegate: Private ordinary functions

E
enable-reader: Public macros
escaped-string-content: Private generic functions
escaped-string-content: Private generic functions

F
fast-writer: Private generic functions
fast-writer: Private generic functions
format-attr-val: Public generic functions
format-attr-val: Public generic functions
Function, (setf xml-merge-tag-children): Public ordinary functions
Function, copy-xml-merge-tag: Private ordinary functions
Function, deftag-symbol: Private ordinary functions
Function, deftag-value: Private ordinary functions
Function, delegate: Private ordinary functions
Function, get-markup-fn: Private ordinary functions
Function, last-few-chars: Private ordinary functions
Function, make-escape-map: Private ordinary functions
Function, make-escaped: Private ordinary functions
Function, make-merge-tag: Public ordinary functions
Function, make-xml-merge-tag: Private ordinary functions
Function, make-xml-tag: Public ordinary functions
Function, merge-tag: Public ordinary functions
Function, print-escaped-text: Private ordinary functions
Function, print-escaped-text-minimal: Private ordinary functions
Function, read-attr-key: Private ordinary functions
Function, read-attr-val: Private ordinary functions
Function, read-attributes: Private ordinary functions
Function, read-comment: Private ordinary functions
Function, read-so-far: Private ordinary functions
Function, read-string-from-xml: Private ordinary functions
Function, read-tag: Private ordinary functions
Function, read-whitespace: Private ordinary functions
Function, read-xml-after-bracket: Private ordinary functions
Function, read-xml-from-string: Public ordinary functions
Function, read-xml-toplevel: Private ordinary functions
Function, standard-name?: Private ordinary functions
Function, unescaped: Public ordinary functions
Function, void-tag?: Private ordinary functions
Function, whitespacep: Private ordinary functions
Function, wrap-stream: Public ordinary functions
Function, write-attributes: Private ordinary functions
Function, write-html: Public ordinary functions
Function, write-xml: Public ordinary functions
Function, write-xml-to-stream: Public ordinary functions
Function, xml-merge-tag-children: Public ordinary functions
Function, xml-merge-tag-p: Private ordinary functions

G
Generic Function, %unread-char: Private generic functions
Generic Function, %write-html-to-stream: Private generic functions
Generic Function, (setf %unread-char): Private generic functions
Generic Function, (setf body): Private generic functions
Generic Function, (setf escaped-string-content): Private generic functions
Generic Function, (setf tag-name): Private generic functions
Generic Function, (setf unescaped-string-content): Private generic functions
Generic Function, (setf xml-tag-attributes): Public generic functions
Generic Function, (setf xml-tag-children): Public generic functions
Generic Function, (setf xml-tag-name): Public generic functions
Generic Function, add-attrs: Public generic functions
Generic Function, attr-name: Private generic functions
Generic Function, body: Private generic functions
Generic Function, escaped-string-content: Private generic functions
Generic Function, fast-writer: Private generic functions
Generic Function, format-attr-val: Public generic functions
Generic Function, get-attr: Public generic functions
Generic Function, history-stream: Private generic functions
Generic Function, optimize-markup: Public generic functions
Generic Function, read-xml: Public generic functions
Generic Function, register: Private generic functions
Generic Function, standard-names: Private generic functions
Generic Function, stream-delegate: Private generic functions
Generic Function, tag-name: Private generic functions
Generic Function, unescaped-string-content: Private generic functions
Generic Function, walk: Public generic functions
Generic Function, write-attribute-pair: Private generic functions
Generic Function, write-attribute-value: Private generic functions
Generic Function, write-html-to-stream: Public generic functions
Generic Function, xml-tag-attributes: Public generic functions
Generic Function, xml-tag-builder: Private generic functions
Generic Function, xml-tag-children: Public generic functions
Generic Function, xml-tag-name: Public generic functions
get-attr: Public generic functions
get-attr: Public generic functions
get-markup-fn: Private ordinary functions

H
history-stream: Private generic functions
history-stream: Private generic functions

L
last-few-chars: Private ordinary functions

M
Macro, %deftag: Private macros
Macro, deftag: Public macros
Macro, enable-reader: Public macros
Macro, make-lazy-xml-tag: Private macros
Macro, make-toplevel-node: Private macros
make-escape-map: Private ordinary functions
make-escaped: Private ordinary functions
make-lazy-xml-tag: Private macros
make-merge-tag: Public ordinary functions
make-toplevel-node: Private macros
make-xml-merge-tag: Private ordinary functions
make-xml-tag: Public ordinary functions
merge-tag: Public ordinary functions
Method, %unread-char: Private generic functions
Method, %write-html-to-stream: Private generic functions
Method, (setf %unread-char): Private generic functions
Method, (setf body): Private generic functions
Method, (setf escaped-string-content): Private generic functions
Method, (setf tag-name): Private generic functions
Method, (setf unescaped-string-content): Private generic functions
Method, (setf xml-tag-attributes): Public generic functions
Method, (setf xml-tag-attributes): Public generic functions
Method, (setf xml-tag-children): Public generic functions
Method, (setf xml-tag-name): Public generic functions
Method, add-attrs: Public generic functions
Method, attr-name: Private generic functions
Method, body: Private generic functions
Method, escaped-string-content: Private generic functions
Method, fast-writer: Private generic functions
Method, format-attr-val: Public generic functions
Method, get-attr: Public generic functions
Method, history-stream: Private generic functions
Method, optimize-markup: Public generic functions
Method, optimize-markup: Public generic functions
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, read-xml: Public generic functions
Method, read-xml: Public generic functions
Method, register: Private generic functions
Method, register: Private generic functions
Method, register: Private generic functions
Method, standard-names: Private generic functions
Method, stream-delegate: Private generic functions
Method, stream-peek-char: Public standalone methods
Method, stream-read-char: Public standalone methods
Method, stream-unread-char: Public standalone methods
Method, tag-name: Private generic functions
Method, unescaped-string-content: Private generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, walk: Public generic functions
Method, write-attribute-pair: Private generic functions
Method, write-attribute-pair: Private generic functions
Method, write-attribute-value: Private generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, write-html-to-stream: Public generic functions
Method, xml-tag-attributes: Public generic functions
Method, xml-tag-attributes: Public generic functions
Method, xml-tag-builder: Private generic functions
Method, xml-tag-children: Public generic functions
Method, xml-tag-children: Public generic functions
Method, xml-tag-name: Public generic functions
Method, xml-tag-name: Public generic functions

O
optimize-markup: Public generic functions
optimize-markup: Public generic functions
optimize-markup: Public generic functions

P
print-escaped-text: Private ordinary functions
print-escaped-text-minimal: Private ordinary functions
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods

R
read-attr-key: Private ordinary functions
read-attr-val: Private ordinary functions
read-attributes: Private ordinary functions
read-comment: Private ordinary functions
read-so-far: Private ordinary functions
read-string-from-xml: Private ordinary functions
read-tag: Private ordinary functions
read-whitespace: Private ordinary functions
read-xml: Public generic functions
read-xml: Public generic functions
read-xml: Public generic functions
read-xml-after-bracket: Private ordinary functions
read-xml-from-string: Public ordinary functions
read-xml-toplevel: Private ordinary functions
register: Private generic functions
register: Private generic functions
register: Private generic functions
register: Private generic functions

S
standard-name?: Private ordinary functions
standard-names: Private generic functions
standard-names: Private generic functions
stream-delegate: Private generic functions
stream-delegate: Private generic functions
stream-peek-char: Public standalone methods
stream-read-char: Public standalone methods
stream-unread-char: Public standalone methods

T
tag-name: Private generic functions
tag-name: Private generic functions

U
unescaped: Public ordinary functions
unescaped-string-content: Private generic functions
unescaped-string-content: Private generic functions

V
void-tag?: Private ordinary functions

W
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
walk: Public generic functions
whitespacep: Private ordinary functions
wrap-stream: Public ordinary functions
write-attribute-pair: Private generic functions
write-attribute-pair: Private generic functions
write-attribute-pair: Private generic functions
write-attribute-value: Private generic functions
write-attribute-value: Private generic functions
write-attributes: Private ordinary functions
write-html: Public ordinary functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-html-to-stream: Public generic functions
write-xml: Public ordinary functions
write-xml-to-stream: Public ordinary functions

X
xml-merge-tag-children: Public ordinary functions
xml-merge-tag-p: Private ordinary functions
xml-tag-attributes: Public generic functions
xml-tag-attributes: Public generic functions
xml-tag-attributes: Public generic functions
xml-tag-builder: Private generic functions
xml-tag-builder: Private generic functions
xml-tag-children: Public generic functions
xml-tag-children: Public generic functions
xml-tag-children: Public generic functions
xml-tag-name: Public generic functions
xml-tag-name: Public generic functions
xml-tag-name: Public generic functions

Jump to:   %   (  
A   B   C   D   E   F   G   H   L   M   O   P   R   S   T   U   V   W   X  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.3 Variables

Jump to:   *   +  
A   B   C   D   F   H   L   M   N   R   S   U   X  
Index Entry  Section

*
*disable-optimizer*: Private special variables
*standard-name-cache*: Private special variables
*standard-names*: Public special variables
*void-tag-cache*: Private special variables
*void-tags*: Public special variables

+
+empty+: Public constants
+escape-map+: Private special variables
+escape-minimal-map+: Private special variables

A
attributes: Public classes

B
body: Private classes

C
children: Public structures
children: Public classes
Constant, +empty+: Public constants
content: Private classes
content: Private classes

D
delegate: Private classes
delegate: Private classes

F
fast-writer: Private classes

H
history: Private classes

L
last-few-chars: Private conditions

M
message: Private conditions

N
name: Public conditions
name: Public classes
name: Private conditions

R
register: Private conditions
register: Private conditions
register: Private classes

S
Slot, attributes: Public classes
Slot, body: Private classes
Slot, children: Public structures
Slot, children: Public classes
Slot, content: Private classes
Slot, content: Private classes
Slot, delegate: Private classes
Slot, delegate: Private classes
Slot, fast-writer: Private classes
Slot, history: Private classes
Slot, last-few-chars: Private conditions
Slot, message: Private conditions
Slot, name: Public conditions
Slot, name: Public classes
Slot, name: Private conditions
Slot, register: Private conditions
Slot, register: Private conditions
Slot, register: Private classes
Slot, standard-names: Private classes
Slot, stream: Private conditions
Slot, unread-char: Private classes
Slot, xml-tag-builder: Private classes
Special Variable, *disable-optimizer*: Private special variables
Special Variable, *standard-name-cache*: Private special variables
Special Variable, *standard-names*: Public special variables
Special Variable, *void-tag-cache*: Private special variables
Special Variable, *void-tags*: Public special variables
Special Variable, +escape-map+: Private special variables
Special Variable, +escape-minimal-map+: Private special variables
standard-names: Private classes
stream: Private conditions

U
unread-char: Private classes

X
xml-tag-builder: Private classes

Jump to:   *   +  
A   B   C   D   F   H   L   M   N   R   S   U   X  

Previous: , Up: Indexes   [Contents][Index]

A.4 Data types

Jump to:   A   C   E   F   H   L   M   O   P   R   S   T   U   W   X  
Index Entry  Section

A
abstract-xml-tag: Public classes
all.lisp: The markup/all․lisp file

C
Class, abstract-xml-tag: Public classes
Class, escaped-string: Private classes
Class, lambda-builder-stream: Private classes
Class, lazy-xml-tag: Private classes
Class, markup-stream: Private classes
Class, register-tag: Private classes
Class, unescaped-string: Private classes
Class, xml-tag: Public classes
Condition, html-parse-error: Private conditions
Condition, render-register: Private conditions
Condition, render-register-attr: Private conditions
Condition, undefined-markup-tag-condition: Public conditions

E
escaped-string: Private classes

F
File, all.lisp: The markup/all․lisp file
File, markup.asd: The markup/markup․asd file
File, markup.lisp: The markup/markup․lisp file
File, optimizer.lisp: The markup/optimizer․lisp file
File, stream.lisp: The markup/stream․lisp file
File, tags.lisp: The markup/tags․lisp file
File, walk.lisp: The markup/walk․lisp file

H
html-parse-error: Private conditions

L
lambda-builder-stream: Private classes
lazy-xml-tag: Private classes

M
markup: The markup system
markup: The markup package
markup-stream: Private classes
markup.asd: The markup/markup․asd file
markup.lisp: The markup/markup․lisp file
markup/markup: The markup/markup package
markup/optimizer: The markup/optimizer package
markup/stream: The markup/stream package
markup/tags: The markup/tags package
markup/walk: The markup/walk package

O
optimizer.lisp: The markup/optimizer․lisp file

P
Package, markup: The markup package
Package, markup/markup: The markup/markup package
Package, markup/optimizer: The markup/optimizer package
Package, markup/stream: The markup/stream package
Package, markup/tags: The markup/tags package
Package, markup/walk: The markup/walk package

R
register-tag: Private classes
render-register: Private conditions
render-register-attr: Private conditions

S
stream.lisp: The markup/stream․lisp file
Structure, xml-merge-tag: Public structures
System, markup: The markup system

T
tags.lisp: The markup/tags․lisp file

U
undefined-markup-tag-condition: Public conditions
unescaped-string: Private classes

W
walk.lisp: The markup/walk․lisp file

X
xml-merge-tag: Public structures
xml-tag: Public classes

Jump to:   A   C   E   F   H   L   M   O   P   R   S   T   U   W   X