A CFFI wrapper for pslib

cage e20bacabb7 Added link to new repository. 1 week ago
examples 212167f01f - changed package name: from 'cl-colors' to 'cl-colors2'; 3 years ago
COPYING be28d307fd Initial revision 11 years ago
COPYING.LESSER be28d307fd Initial revision 11 years ago
LICENSE be28d307fd Initial revision 11 years ago
README.org e20bacabb7 Added link to new repository. 1 week ago
README.txt 0f3f039564 - restored templates functions (with a disclaimer about library version); 3 years ago
TODO.org 85c054663b - in 'aabb-expand' passing nil as first argument will returns a new 3 years ago
cffi-interface.lisp a5edadf959 - added callback for writing to a stream. 3 years ago
cl-pslib.asd e96656be60 - updated asdf. 3 years ago
cl-pslib.lisp 201ff5f03e - removed wrong type specification. 3 years ago
conditions.lisp 00c010e8ca - removed TABs. 6 years ago
constants.lisp 0f3f039564 - restored templates functions (with a disclaimer about library version); 3 years ago
graphics-utils.lisp 85c054663b - in 'aabb-expand' passing nil as first argument will returns a new 3 years ago
package.lisp 1faa0cf7be - added macro 'with-fill-stroke'; 3 years ago
page-metrics.lisp 212167f01f - changed package name: from 'cl-colors' to 'cl-colors2'; 3 years ago
pslib.i be28d307fd Initial revision 11 years ago
pslib.lisp be28d307fd Initial revision 11 years ago
shapes.lisp 1faa0cf7be - added macro 'with-fill-stroke'; 3 years ago

README.org

http://quickdocs.org/badge/cl-pslib.svg

moved to https://codeberg.org/cage/cl-pslib

Important note

The 'ps' nickname for this package has been removed.

This means that if you are using this library you should replace all occurences of the 'ps' package qualifier with 'cl-pslib'.

Examples

from:

#+BEGIN_SRC common-lisp (ps:get-value doc "boxheight") #+END_SRC

to:

#+BEGIN_SRC common-lisp (cl-pslib:get-value doc "boxheight") #+END_SRC

and from:

#+BEGIN_SRC common-lisp (defpackage :foo (:use :ps)) #+END_SRC

to:

#+BEGIN_SRC common-lisp (defpackage :foo (:use :cl-pslib)) #+END_SRC

Alternatively., if you are using ECL, ABCL, CCL or SBCL compiler you can setup a package local nickname as showed here.

Introduction

Cl-pslib is a (thin) wrapper around pslib a library for generating PostScript files.

The wrapper

Cl-pslib use CFFI and SWIG to interface with foreign (non lisp) library and generate the low-level lisp wrapper respectively.

cl-pslib does not export the raw (CFFI) pslib API but use CLOS instead.

A psdoc C struct pointer is wrapped in the class psdoc, most of the functions to manipulate this pointer are wrapped in lisp methods specialized for that class.

Parameters

Pslib use a lot of parameters to configure its behavior.

Example:


 (get-value doc "boxheight")

I found this very unpractical so i tried to generate lisp constants to match the corresponding string parameter


 (get-value doc +value-key-boxheight+)

Function name

As general rule the methods for the class psdoc are the same of the ones of the pslib with the character "_" substituted by "-".

There are some exceptions listed below.

native name lisp name
PS_set_border_color set-border-link-color
PS_set_border_dash set-border-link-dash
PS_set_border_style set-border-link-style
PS_open, PS_open_mem open-doc
PS_fill fill-path
PS_show and PS_show2 show
PS_show_xy and PS_show_xy2 show-xy
PS_string_geometry, PS_stringwidth and PS_stringwidth2 string-geometry
PS_symbol font-symbol
PS_symbol_name font-symbol-name
PS_symbol_width font-symbol-width

Other differences

  • setcolor can accept a cl-color object as parameter;
  • there is no '(ps_)boot' method; when an instance of psdoc is created the
  • ~initialize-instance~ of that class will call ~ps_boot~ if needed. The same is true for '(ps_)new' method;
  • open-doc method will pass the output of pslib (i.e.the PostScript
  • file) to a lisp callback function if the second argument of the function is nil; by default the callback just copy the output in ~cl-pslib:*callback-string*~. This maybe can be useful for generate a file in a web application.

There is another callback: write-to-stream that write the postscript code to a stream (by default the stream is bound to *standard-output*)

#+BEGIN_SRC common-lisp (let* ((cl-pslib:*callback-stream* standard-output) (doc (make-instance 'cl-pslib:psdoc :writeproc (cffi:callback write-to-stream)))) ;; rest of the code here )

#+END_SRC

  • the string-geometry method return an instance of text-metrics class

Issues

Note that the whole library is in an alpha stage, testing is still in progress, please see section below

  • to use the template features begin-template and and-template
  • a version >= 0.47 must be used.

Missing function

The high-level API does not still remap this functions:

  • ~PS_free_glyph_list~;
  • ~PS_get_buffer~;
  • ~PS_glyph_list~;
  • ~PS_new2~;
  • ~PS_open_fp~;
  • ~PS_hyphenate~;
  • ~PS_list_parameters~;
  • ~PS_list_resources~;
  • ~PS_list_values~;
  • ~PS_set_gstate~;
  • PS_setdash (use set-polydash instead).

BUGS

Please file bug report on the issue tracker

License

This library is released under Lisp Lesser General Public license (see COPYING.LESSER file)

Examples are released under GPL version 3 or later

NO WARRANTY

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.