summaryrefslogtreecommitdiff
path: root/src/guile/skribilo.scm
AgeCommit message (Collapse)Author
2015-06-20Improve '--help' summary.Ludovic Courtès
Suggested by Benno Schulenberg <coordinator@translationproject.org>. * src/guile/skribilo.scm (skribilo-show-help): Clarify the summary line.
2015-06-20Improve '--help' formatting.Ludovic Courtès
Suggested by Benno Schulenberg <coordinator@translationproject.org>. * src/guile/skribilo.scm (skribilo-show-help): Use ';' instead of '--'.
2015-03-11Use standard help messages for --help and --version.Ludovic Courtès
Suggested by Benno Schulenberg <coordinator@translationproject.org>. * src/guile/skribilo.scm (skribilo-show-help): Use standard text for --help and --version.
2015-03-11Improve output of 'skribilo --help'.Ludovic Courtès
Suggested by Benno Schulenberg <coordinator@translationproject.org>. * src/guile/skribilo.scm (skribilo-show-help): Move \n to the end of the line. Make messages all lower-case.
2015-03-11Use quotes instead of backticks in user-facing messages.Ludovic Courtès
Suggested by Benno Schulenberg <coordinator@translationproject.org>. * doc/modules/skribilo/documentation/api.scm, src/guile/skribilo.scm, src/guile/skribilo/condition.scm, src/guile/skribilo/engine/lout.scm, src/guile/skribilo/package/base.scm, src/guile/skribilo/package/jfp.scm, src/guile/skribilo/package/lncs.scm, src/guile/skribilo/package/pie.scm, src/guile/skribilo/package/slide/latex.scm, src/guile/skribilo/utils/compat.scm, src/guile/skribilo/ast.scm, src/guile/skribilo/biblio.scm, src/guile/skribilo/engine/html.scm, src/guile/skribilo/engine/info.scm, src/guile/skribilo/index.scm, src/guile/skribilo/package/web-book2.scm, src/guile/skribilo/reader/rss-2.scm, src/guile/skribilo/source.scm, src/guile/skribilo/utils/compat.scm, src/guile/skribilo/verify.scm: Change `foo' to 'foo'.
2013-02-25Install the locale before parsing arguments, and handle `setlocale' errors.Ludovic Courtès
* src/guile/skribilo.scm (skribilo): Install the locale before parsing options; gracefully handle `setlocale' errors.
2012-05-17Switch to GPLv3+.Ludovic Courtès
2012-05-12Internationalize (skribilo).Ludovic Courtès
* src/guile/skribilo.scm (skribilo-show-help): Gettextize. * po/POTFILES.in: Add `src/guile/skribilo.scm'.
2011-03-10Set `%default-port-encoding' to "UTF-8".Ludovic Courtès
* src/guile/skribilo/utils/syntax.scm (default-to-utf-8): New macro. * src/guile/skribilo.scm (skribilo): Use it around `(doskribe)'.
2010-03-08Factorize encoding twiddling in `set-correct-file-encoding!'.Ludovic Courtès
* doc/modules/skribilo/documentation/api.scm (api-search-definition): Call `set-correct-file-encoding!'. * doc/user/src/outline.txt (Author): Remove accent from last name, as a temporary hack. * doc/user/syntax.skb: Call `set-correct-file-encoding!' in the `outline' syntax example. * doc/user/user.skb: Use `(skribilo utils syntax)'. * src/guile/skribilo.scm (skribilo): Replace encoding twiddling with `set-correct-file-encoding!' call. * src/guile/skribilo/evaluator.scm (load-document, include-document): Likewise. * src/guile/skribilo/source.scm (source-read-lines): Call `set-correct-file-encoding!'. (source-read-definition): Likewise. * src/guile/skribilo/utils/syntax.scm (set-correct-file-encoding!): New macro.
2009-11-20Choose the right encoding for input documents.Ludovic Courtès
* src/guile/skribilo.scm (skribilo): Use the right encoding for the current input port. * src/guile/skribilo/evaluator.scm (load-document, include-document): Likewise. * doc/user/user.skb: Add a `coding:' comment for use by Guile at the top.
2009-03-24Add `(skribilo-module-syntax)'.Ludovic Courtès
* src/guile/skribilo/utils/syntax.scm (skribilo-module-syntax): New macro. * src/guile/*/*.scm: Use `(skribilo-module-syntax)' instead of `(fluid-set! current-reader %skribilo-module-reader)'. The goal is to be more compilation-friendly.
2009-03-24Fix overzealous autoloading in `(skribilo)'.Ludovic Courtès
* src/guile/skribilo.scm (skribilo): Don't autoload `(srfi srfi-1)' upon `alist-cons' since, e.g., `alist-delete' could be called before.
2008-12-23Install the user-specified locale.Ludovic Courtès
* src/guile/skribilo.scm (skribilo): Call `setlocale'.
2008-12-21Add `--custom' option to `skribilo'.Ludovic Courtès
* src/guile/skribilo.scm (skribilo-show-help): Update. (%options)[#\c]: New option. (%default-options)[:customs]: New option. (skribilo): Handle it. * doc/user/compiler.skb (Skribilo Compiler)[Options]: Add. * NEWS: Update.
2008-04-08Add `--sui-path'/`-U' command-line option.Ludovic Courtès
* NEWS: Update. * src/guile/skribilo.scm (skribilo-show-help): Update. (%options)[-U]: New. (%default-options): Add `:sui-path'. (skribilo): Handle it. * src/guile/skribilo/package/base.scm (ref)[skribe-ref]: Use `*sui-path*'. * src/guile/skribilo/parameters.scm (*sui-path*): New. * src/guile/skribilo/sui.scm (load-sui): Raise a `&file-search-error' exception if not found.
2008-01-24skribilo: Fix `--help' and `--preload'.Ludovic Courtès
* src/guile/skribilo.scm (skribilo-show-help): Fix `--debug'. (skribilo): Properly set the current module to USER-MODULE when loading preloads.
2007-12-12Fix on-line help showed by "skribilo --help".Ludovic Courtès
* src/guile/skribilo.scm (skribilo-show-help): Update. (%options)[debug]: Deal with ARG == #f.
2007-12-12Remove legacy/dead code from `(skribilo)'.Ludovic Courtès
* src/guile/skribilo.scm: Remove `/bin/sh' header. (process-option-specs, raw-options->getopt-long, define-options, skribilo-options, *load-rc*, load-rc): Remove (%options)[debug]: Fix `(integer? num)' case. (main): Remove. * src/pre-inst-skribilo.in (main): Update. * src/skribilo.in (main): Update.
2007-12-12Add support for `--base', `--eval', `--preload' and `--no-color'.Ludovic Courtès
* src/guile/skribilo.scm (doskribe): Take a MODULE argument instead of a COMPAT symbol. (%options)[base,eval,preload,no-color]: New options. [debug]: Fix in case of `(integer? num)'. (skribilo): Honor these new options. Call `make-user-module' from here.
2007-12-12Improve handling of `--debug'.Ludovic Courtès
* src/guile/skribilo.scm (%options)[--debug]: Don't use `make-level-processor' so that `-g' can be passed a symbol to be watched. (%default-options): Add `:watched-symbols'. (skribilo): Parameterize `*watched-symbols*'.
2007-12-12Show bug-report email address.Ludovic Courtès
* src/guile/skribilo.scm (skribilo-show-help): Show bug-report address. * src/guile/skribilo/config.scm.in (skribilo-bug-report-address): New.
2007-12-11Overhaul `(skribilo)' using SRFI-37.Ludovic Courtès
* README: Update dependency description. * configure.ac: Check for SRFI-37. * doc/user/Makefile.am (skrflags): Add the relevant `-S' flag, now that `%load-path' is no longer part of `*source-path*' by default. (.skb.html, .skb.lout): Add an `=' sign after `--target'. * src/guile/skribilo.scm: Overhauled. Use SRFI-37 for command-line argument parsing. Remove legacy (unused) code.
2007-11-28Add run-time module with fewer bindings; add `--compat' command-line option.Ludovic Courtès
* doc/user/Makefile.am (skrflags): New. Use `--compat=skribe' for now. * src/guile/Makefile.am (moduledir): New. (dist_guilemodule_DATA): Renamed to... (dist_module_DATA): This, for consistency. * src/guile/skribilo.scm (skribilo-options): Add `--compat'. (doskribe): New COMPAT argument. (skribilo): Honor `--compat'. * src/guile/skribilo/module.scm (%skribilo-user-imports): New. (make-run-time-module): Renamed to `make-skribe-user-module'. (make-skribilo-user-module): New. (make-user-module, user-module-flavor): New. (*skribilo-user-module*): Default to a `skribilo' module flavor. * src/guile/skribilo/package/diff.scm (make-diff-document-from-files): Use "(make-user-module 'skribilo)".
2007-09-03skribilo: Flush the output port before exiting.Ludovic Court`es
* src/guile/skribilo.scm (skribilo): Flush `(*skribilo-output-port*)' before exiting. git-archimport-id: lcourtes@laas.fr--2006-libre/skribilo--devo--1.2--patch-105
2007-04-03Reduced reliance on the debugging evaluator (improves performance).Ludovic Court`es
* src/guile/skribilo.scm (skribilo): Do not impose use of the debugging evaluator, allowing for significant performance improvements. * src/guile/skribilo/evaluator.scm (%evaluate): Use the debugging evaluator when evaluating EXPR. * src/guile/skribilo/location.scm (invocation-location): Return `#f' when the debugging evaluator is not being used. git-archimport-id: lcourtes@laas.fr--2006-libre/skribilo--devo--1.2--patch-41
2006-07-31Moved the `sui' module; removed the `skribe' subdirectory.Ludovic Court`es
* configure.ac: Don't produce `src/guile/skribilo/skribe/Makefile'. * src/guile/skribilo/Makefile.am (SUBDIRS): Removed `skribe'. * src/guile/skribilo/sui.scm: No longer use `define-skribe-module'. Rewrote the use the native hash-table API, `(ice-9 match)', and `format' instead of `fprint'. * src/guile/skribilo.scm (doskribe): Use `*skribilo-user-module*'. * src/guile/skribilo/evaluator.scm: Autoload `(skribilo module)'. (%evaluate): Evaluate EXPR in `*skribilo-user-module*'. * src/guile/skribilo/module.scm (%skribilo-user-autoloads): Added `(skribilo sui)'. (%skribe-core-modules): Removed. (define-skribe-module): Don't refer to it. (make-run-time-module): Use `the-root-module'. Properly build it using `make-autoload-interface' and `module-use-interfaces!' so that duplicates are correctly handled. (*skribilo-user-module*): New parameter. git-archimport-id: lcourtes@laas.fr--2005-libre/skribilo--devo--1.2--patch-40
2006-07-24Updated the FSF address.Ludovic Court`es
From "59 Temple Place - Suite 330, Boston, MA 02111-1307" to "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301". Magic command line: find . -type f -print0 | xargs -0 sed -i -e 's/51 Franklin Street, Fifth Floor/51 Franklin Street, Fifth Floor/;s/02110-1301/02110-1301/; git-archimport-id: lcourtes@laas.fr--2005-libre/skribilo--devo--1.2--patch-29
2006-07-13Use `setvbuf' on the Skribilo output port.Ludovic Courtes
* src/guile/skribilo.scm (skribilo): Call `setvbuf'. git-archimport-id: lcourtes@laas.fr--2005-libre/skribilo--devo--1.2--patch-8
2006-03-07Partial rewrite of the debugging facilities (slightly slower).Ludovic Courtes
* src/guile/skribilo.scm (skribilo): Use the new debugging API. * src/guile/skribilo/debug.scm: Use SRFI-39 parameter objects. Moved legacy procedures to `compat.scm'. * src/guile/skribilo/utils/compat.scm (set-skribe-debug!): New. (no-debug-color): New. (skribe-debug): New. (add-skribe-debug-symbol): New. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-44
2006-01-31First time the user manual is compiled to HTML.Ludovic Courtes
* doc/skr/api.skr (make-engine?): Fixed. (make-engine-custom): Likewise. * doc/skr/manual.skr (the-index): Don't pass `:&skribe-eval-location'. * doc/user/emacs.skb: Fixed typo. * doc/user/htmle.skb: Documented the `file-name-proc' custom. * doc/user/package.skb: Fixed the `prgm' example there. * doc/user/skribe-config.skb: Commented out the `OPTIONS' section. * doc/user/skribec.skb: Likewise. * doc/user/slide.skb: Don't refer to HTML-ENGINE, use `find-engine' instead. * doc/user/src/slides.skb: Don't pass `:slide' to `toc'. * doc/user/toc.skb: Commented the `:subsubsection' argument. * doc/user/user.skb (Index): Set `:indent' to "Index". * src/guile/skribilo.scm (skribilo-options): Added `--image-path'. (skribilo): Handle it. * src/guile/skribilo/ast.scm (ast->file-location): Exported. * src/guile/skribilo/engine/base.scm (the-index): Don't pass `:&skribe-eval-location'. * src/guile/skribilo/engine/html.scm: Export `html-width' and `html-title-authors'. * src/guile/skribilo/engine/lout.scm (lout-width): Don't use `flonum?'. * src/guile/skribilo/evaluator.scm (load-document): Added `:allow-other-keys' so that the optional parameters may contain keywords, too. * src/guile/skribilo/package/slide.scm: Use `(skribilo engine html)'. * src/guile/skribilo/skribe/api.scm (toc): Added `subsubsection'. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-31
2006-01-23Preliminary support for multiple reader front-ends.Ludovic Court`es
* src/guile/skribilo.scm: Use `(skribilo reader)'. (skribilo-options): Added `--reader'. (skribilo): Read `--reader', parameterize `*document-reader*'. * src/guile/skribilo/evaluator.scm (evaluate-document-from-port): Have READER default to `*document-reader*'. (include-document): Likewise. * src/guile/skribilo/reader.scm: Load SRFIs 34, 35, and 39, as well as `(skribilo condition)'. Export `*document-reader*'. (&reader-search-error): New. (lookup-reader): Raise a `&reader-search-error' condition if NAME is not found. (*document-reader*): New. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-32
2006-01-18More fixes in the hope to get the manual compiled.Ludovic Courtes
* doc/skr/api.skr (define-markup?): Accept `define-public'. (define-markup-options): Accept any kind of `define' symbol. (define-markup-rest): Likewise. * doc/user/bib.skb (bibliography): Use `src/bib1.sbib'. (bib-table?): Provide a definition. (default-bib-table): Likewise. (make-bib-table): Likewise. (bibliography): Fixed a `ref'. (example): Fixed file name. This example does not work yet. * doc/user/footnote.skb (footnote): Documented `label', removed `number'. * doc/user/table.skb (th): Documented `rowspan'. * src/guile/skribilo.scm (skribilo-options): Added `-S'/`--source-path'. Honor it. * src/guile/skribilo/coloring/lisp.scm: Use `(ice-9 match)'. Rewrote all the `match-case' code into corresponding `match' statements. (definition-search): Fixed, using `source-property' and `port-line'. Does not work yet due to a bug in guile-reader's source position recording (shows 1 line earlier). Added a READ parameter. * src/guile/skribilo/skribe/api.scm: Mark SYMBOL as replaced instead of blindly overriding the core binding. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-28
2006-01-15Introduced SRFI-3[45] conditions; cleaned up `evaluator.scm'.Ludovic Courtes
* src/guile/skribilo/condition.scm: New. * src/guile/skribilo/Makefile.am (dist_guilemodule_DATA): Added `condition.scm'. * src/guile/skribilo/evaluator.scm (skribe-eval): Renamed to `evaluate-document'. (skribe-eval-port): Renamed to `evaluate-document-from-port'. (skribe-load-options): Renamed to `*load-options*', a fluid. (skribe-load): Renamed to `load-document'. Use SRFI-34 `raise' when a file is not found. (skribe-include): Renamed to `include-document'. Use `raise'. * src/guile/skribilo/utils/compat.scm (%skribe-known-files): New. (skribe-load): New. (skribe-include): New. (skribe-load-options): New. (skribe-eval): New. (skribe-eval-port): New. * src/skribilo.in: Invoke `call-with-skribilo-error-catch'. Added a copyright notice. * src/guile/skribilo.scm (doskribe): Use `evaluate-document-from-port', not `skribe-eval-port'. * configure.ac: Look for `(srfi srfi-35)'. * AUTHORS: Mention that most of the code comes from the STkLos implementation. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-24
2006-01-11Made compatible with the new `current-reader' as a fluid.Ludovic Court`es
* *.scm: Use `fluid-set! current-reader %skribilo-module-reader' instead of `set-current-reader'. * src/guile/skribilo/utils/syntax.scm: Use `(system reader compat)'. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-24
2006-01-08Cleaning the compatibility module and other annoyances.Ludovic Courtes
* src/skribilo.in: Catch exceptions and call `(exit 1)' when caught. * doc/user/Makefile.am (skribilo): Fixed. * src/guile/skribilo.scm: Updated copyright year. * src/guile/skribilo/compat.scm: Moved to `utils'. * src/guile/skribilo/Makefile.am (dist_guilemodule_DATA): Removed `compat.scm'. * src/guile/skribilo/Makefile.am (dist_guilemodule_DATA): Added `compat.scm'. * src/guile/skribilo/coloring/lisp.scm: Use `(skribilo utils syntax)'. * src/guile/skribilo/module.scm (%skribilo-user-imports): Import `(skribilo utils compat)' instead of `(skribilo compat)'. Added more triggering procedures for `(skribilo source)'. * src/guile/skribilo/skribe/api.scm: Moved the definition of a Skribe-compatible `gensym' to `compat.scm'. * src/guile/skribilo/source.scm: Use `*source-path*' instead of `skribe-source-path'. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-19
2006-01-03Cleaned up the use of a Skribe-compatible `gensym'.Ludovic Courtes
* src/guile/skribilo.scm (gensym): Removed. * src/guile/skribilo/lib.scm (define-simple-markup): Comply with Guile's version of `gensym'. (define-simple-container): Likewise. * src/guile/skribilo/skribe/api.scm (gensym): Improved. Exported via `#:replace'. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-18
2005-11-29Fixed `ref' and bibliography-related things.Ludovic Court`es
* src/guile/skribilo.scm (main): Handle `--warning'. * src/guile/skribilo/biblio.scm: Export `skribe-open-bib-file' and `parse-bib'. (parse-bib): Use `%default-reader'. * src/guile/skribilo/evaluator.scm (%evaluate): Cleaned up. (skribe-eval-port): Likewise. * src/guile/skribilo/module.scm (load-file-with-read): Removed. (load-skribilo-file): Removed. (load-skribilo-modules): Removed. * src/guile/skribilo/package/slide.scm (ref): Temporarily commented out. * src/guile/skribilo/skribe/bib.scm: Use `(skribilo biblio)'. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-15
2005-11-28More `%skribilo-module-reader' fixes.Ludovic Court`es
* src/guile/skribilo.scm: Removed the executable bit. * configure.ac: Produce `src/guile/skribilo/utils/Makefile'. * src/guile/skribilo.scm: Call `set-current-reader' after the `use-modules' clause. (process-option-specs): Use `:kw'-style keywords. (*skribilo-output-port*): New. (doskribe): Use the above fluid. (main): Honor the `-o' option. * src/guile/skribilo/debug.scm: Use `(skribilo utils syntax)' and `%skribilo-module-reader'. * src/guile/skribilo/module.scm: Likewise. * src/guile/skribilo/output.scm: Likewise. * src/guile/skribilo/resolve.scm: Likewise. * src/guile/skribilo/verify.scm: Likewise. * src/guile/skribilo/parameters.scm (make-expect): New. (define-number-parameter): New. (define-list-parameter): New. * src/guile/skribilo/utils/Makefile.am (guilemoduledir): Fixed. * src/guile/skribilo/evaluator.scm (%evaluate): Commented out debugging statement. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-14
2005-11-28Created a canonical module for Skribilo syntactic sugar.Ludovic Court`es
* src/guile/skribilo/utils/syntax.scm: New. Export `unless', `when', formerly defined in `lib.scm'. * src/guile/skribilo.scm: Use `(skribilo utils syntax)' and `%skribilo-module-reader'. Fixed parameterization of `*verbose*'. * src/guile/skribilo/ast.scm: Use `(skribilo utils syntax)' and `%skribilo-module-reader'. * src/guile/skribilo/biblio.scm: Likewise. * src/guile/skribilo/engine.scm: Likewise. * src/guile/skribilo/writer.scm: Likewise. * src/guile/skribilo/location.scm: Likewise. * src/guile/skribilo/lib.scm: Likewise. * src/guile/skribilo/source.scm: Likewise. * src/guile/skribilo/evaluator.scm: Likewise. Use `*document-path*' instead of `skribe-path'. * src/guile/skribilo/module.scm: Use `(system reader confinement)'. (%skribilo-user-imports): Moved some modules to... (%skribilo-user-autoloads): New. (define-skribe-module): Auto-load the modules specified in `%skribilo-user-autoloads'. Use `set-current-reader' instead of the `#:reader' option of `define-module'. * src/guile/skribilo/engine/lout.scm: Commented out a piece of text. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-13
2005-11-25Overhaul: emphasized logical separation of the modules.Ludovic Court`es
* src/guile/skribilo/types.scm: Removed. Moved the class and method definitions in the relevant files. * src/guile/skribilo/ast.scm: New. * src/guile/skribilo/location.scm: New. * src/guile/skribilo/parameters.scm: Same as part of the former `vars.scm' except that it uses fluids instead of globals. * src/guile/skribilo/vars.scm: Renamed to `compat.scm'. * doc/Makefile: Removed (generated by `configure'). git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-11
2005-07-02First real document produced!Ludovic Courtes
Lots of things, including: * src/guile/skribilo/engine/lout.scm: New file. First real document produced! git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-4
2005-07-02Started relying on the per-module reader; first doc produced ever!Ludovic Courtes
First document compiled by Skribilo to HTML! * src/guile/skribilo/module.scm (define-skribe-module): Use the `#:reader' option of `define-module' (not yet integrated in Guile 1.7). Plus lots of other things... git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-3
2005-07-01Lots of changes, again.Ludovic Courtes
Lots of changes, notably the following: * skr/*.skr: Moved engines to `src/guile/skribilo/engine'. * src/guile/skribilo/engine.scm (lookup-engine): Rewritten. Don't use the auto-load alist. * src/guile/skribilo/evaluator.scm: New name of the `eval' module. `eval' couldn't be used as the module base-name because of Guile's recursive module name space. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-2
2005-07-01Lots of changes.Ludovic Courtes
Too many changes to describe here, among which, moving the `(skribe)' module namespace to `(skribilo)'. This is work in progress. git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-1
2005-06-16One step further with the Guile port.Ludovic Court`es
* src/guile/skribilo.scm: Use `getopt-long'; include all the necessary modules that user-visible macros depend on. Use `read-hash-extend' to allow for DSSSL-style keywords, as needed by Skribe modules. * src/guile/skribe/debug.scm: Export `with-debug' and `%with-debug'. * src/guile/skribe/lib.scm (new): Fixed. (define-markup): Fixed (more the `rest' argument to the end). git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-5
2005-06-15Started a port of Skribe to Guile.Ludovic Court`es
* src/guile: New directory. Contains the beginning of a Guile implementation that borrows most of its code to the STkLos implementation of Skribe. git-archimport-id: lcourtes@laas.fr--2004-libre/skribilo--devel--1.2--patch-4