# python-djvulibre 0.8.4 documentation

## LISP S-expressions

## Textual representation

Special characters are:

- the parenthesis `(` and `)`,
- the double quote `"`,
- the vertical bar `|`.

Symbols are represented by their name. Vertical bars `|` can be used to delimit names that contain blanks, special characters, non printable characters, non-ASCII characters, or can be confused as a number.

Numbers follow the syntax specified by the C function `strtol()` with `base=0`.

Strings are delimited by double quotes. All C string escapes are recognized. Non-printable ASCII characters must be escaped.

List are represented by an open parenthesis `(` followed by the space separated list elements, followed by a closing parenthesis `)`.

When the `cdr` of the last pair is non zero, the closed parenthesis is preceded by a space, a dot `.`, a space, and the textual representation of the `cdr`. (This is only partially supported by Python bindings.)

## Symbols

class `djvu.sexpr.``Symbol`(str)

      >>> Symbol('ham')
      Symbol('ham')

## S-expressions

class `djvu.sexpr.``Expression`

  Inheritance diagram:

  `as_string`(width=None, escape_unicode=True)

    Return a string representation of the expression.

  `print_into`(file, width=None, escape_unicode=True)

    Print the expression into the file.

  `value`

    The “pythonic” value of the expression. Lisp lists as mapped to Python tuples.

  `lvalue`

    The “pythonic” value of the expression. Lisp lists as mapped to Python lists.

    New in version 0.4.

class `djvu.sexpr.``IntExpression`

  `IntExpression` can represent any integer in range [− 229, 229).

  To create objects of this class, use the `Expression` constructor:

      >>> x = Expression(42)
      >>> x
      Expression(42)
      >>> type(x)
      <class 'djvu.sexpr.IntExpression'...>
      >>> x.as_string()
      '42'
      >>> x.value
      42

class `djvu.sexpr.``ListExpression`

  To create objects of this class, use the `Expression` constructor:

      >>> x = Expression([4, 2])
      >>> x
      Expression([4, 2])
      >>> type(x)
      <class 'djvu.sexpr.ListExpression'...>
      >>> x.as_string()
      '(4 2)'
      >>> x.value
      (4, 2)
      >>> x.lvalue
      [4, 2]

class `djvu.sexpr.``StringExpression`

  To create objects of this class, use the `Expression` constructor:

      >>> x = Expression('eggs')
      >>> x
      Expression('eggs')
      >>> type(x)
      <class 'djvu.sexpr.StringExpression'...>
      >>> x.as_string()
      '"eggs"'
      >>> x.value
      'eggs'

class `djvu.sexpr.``SymbolExpression`

  To create objects of this class, use the `Expression` constructor:

      >>> x = Expression(Symbol('ham'))
      >>> x
      Expression(Symbol('ham'))
      >>> type(x)
      <class 'djvu.sexpr.SymbolExpression'...>
      >>> x.as_string()
      'ham'
      >>> x.value
      Symbol('ham')

## Varieties

`djvu.sexpr.``EMPTY_LIST`

  Empty list S-expression.

      >>> EMPTY_LIST
      Expression([])