The dom.scm module¶
Elements needed for Scheme expressions.
Besides the elements a few functions are provided to make it easier to manually construct scheme expressions. For example:
>>> from quickly.dom.scm import q, qq, uq, i, p, s
>>> s(True)
<scm.Bool #t>
>>> s(100)
<scm.Number 100>
>>> s(100.123)
<scm.Number 100.123>
>>> s(('text', -2)).dump()
<scm.List (3 children)>
├╴<scm.String 'text'>
├╴<scm.Dot>
╰╴<scm.Number -2>
>>> s(('text', -2)).write()
'("text" . -2)'
>>> q(s((i('text'), -2))).write()
"'(text . -2)"
>>> n = s([i('if'), [i('<'), i('a'), 100], "smaller", "larger"])
>>> n.dump()
<scm.List (4 children)>
├╴<scm.Identifier 'if'>
├╴<scm.List (3 children)>
│ ├╴<scm.Identifier '<'>
│ ├╴<scm.Identifier 'a'>
│ ╰╴<scm.Number 100>
├╴<scm.String 'smaller'>
╰╴<scm.String 'larger'>
>>> n.write()
'(if (< a 100) "smaller" "larger")'
-
class
LilyPond(*children, **attrs)[source]¶ Bases:
quickly.dom.element.BlockElementA LilyPond block inside Scheme, between
#{and#}.-
head= '#{'¶
-
tail= '#}'¶
-
-
class
Document(*children, **attrs)[source]¶ Bases:
quickly.dom.base.DocumentA full Scheme document.
-
class
SinglelineComment(head, *children, **attrs)[source]¶ Bases:
quickly.dom.base.SinglelineCommentA singleline comment in Scheme after
;.-
space_after= '\n'¶
-
-
class
MultilineComment(head, *children, **attrs)[source]¶ Bases:
quickly.dom.base.MultilineCommentA multiline comment in Scheme after
#!.
-
class
Char(head, *children, **attrs)[source]¶ Bases:
quickly.dom.element.TextElementA Scheme character.
-
class
String(head, *children, **attrs)[source]¶ Bases:
quickly.dom.base.StringA quoted string.
-
class
Identifier(head, *children, **attrs)[source]¶ Bases:
quickly.dom.element.TextElementA Scheme identifier (keyword, variable, symbol).
-
class
List(*children, **attrs)[source]¶ Bases:
quickly.dom.element.BlockElementA Scheme pair or list ( … ).
-
space_between= ' '¶
-
head= '('¶
-
tail= ')'¶
-
-
class
Vector(*children, **attrs)[source]¶ Bases:
quickly.dom.element.BlockElementA Scheme vector #( … ).
-
space_between= ' '¶
-
head= '#('¶
-
tail= ')'¶
-
-
class
Quote(head, *children, **attrs)[source]¶ Bases:
quickly.dom.element.TextElementA Scheme quote
',\`,,or,@.
-
class
Number(head, *children, **attrs)[source]¶ Bases:
quickly.dom.element.TextElementA decimal numerical value, and the base class for Hex, Bin, Oct.
All features of Scheme numerical values are supported: exact/inexactness, polar coordinates, complex numbers, fractions, infinity, nan and unknown digits (#).
-
radix= 10¶
-
classmethod
read_head(origin)[source]¶ Return the value as computed from the specified origin Tokens.
The default implementation concatenates the text from all tokens.
-
-
class
Bin(head, *children, **attrs)[source]¶ Bases:
quickly.dom.scm.NumberA Scheme binary integer value.
-
radix= 2¶
-
-
class
Oct(head, *children, **attrs)[source]¶ Bases:
quickly.dom.scm.NumberA Scheme octal integer value.
-
radix= 8¶
-
-
class
Hex(head, *children, **attrs)[source]¶ Bases:
quickly.dom.scm.NumberA Scheme hexadecimal integer value.
-
radix= 16¶
-
-
class
Bool(head, *children, **attrs)[source]¶ Bases:
quickly.dom.scm.NumberA Scheme boolean value.
-
class
NaN(head, *children, **attrs)[source]¶ Bases:
quickly.dom.scm.NumberNot a Number, created when a
numbercontext has invalid tokens.
-
class
Dot(*children, **attrs)[source]¶ Bases:
quickly.dom.element.HeadElementA dot, e.g. in a Scheme pair.
-
head= '.'¶
-
-
create_element_from_value(value)[source]¶ Convert a regular Python value to a scheme Element node.
Python bool, int, float or str values are converted into Bool, Number, or String objects respectively. A list is converted into a List element, and a tuple (of length > 1) in a pair, with a dot inserted before the last node. Element objects are returned unchanged.
A KeyError is raised when there is no conversion for the value’s type.
-
p(arg1, arg2, *args)[source]¶ Return a pair (two-or-more element List with dot before last element).
-
s(arg)[source]¶ Same as
create_element_from_value().