Re: guile's sxml-apply-templates and sxml-match in gauche?

Shiro Kawai <[email protected]> Mon, 3 Oct 2022 20:24:30 -1000
Newsgroups gmane.lisp.scheme.gauche
Message-ID <CALN0JNG70r9GXvUNpqr04Rfpy2OHDnLKkekMCGO5nd5b_wurpg@mail.gmail.com>
Hi Andreas,
Good suggestion.
The original sxml-match of PLT is under MIT License, so I have no problem
porting it.  It uses syntax-case macro and needs to be rewritten in
er-macro for Gauche, which may require quite a bit of surgery (but it
depends... I have to actually do it to see how it goes.)

--shiro



On Mon, Oct 3, 2022 at 7:18 PM Andreas Reuleaux <[email protected]> wrote:

> Hi,
>
> I have started to work with Scheme's (Gauche's / Guile's) sxml
> modules/functions, to replace a former xslt / fo (fop) tool chain of mine
> to create some pdfs:
>
> I still rely on fop, to create pdf's from fo files, but these fo
> files I create with Scheme now, rather than with xslt.
>
> formerly:
>    .xml ----<via xslt and some xslt processor>----> .fo ----<with
> fop>----> .pdf
>
> now:
>    .xml ----<via scheme / sxml>----> .fo ----<with fop>----> .pdf
>
>
> (And by the way: while fop's real power is to do the last step: .fo -->
> .pdf:
>   fop -fo file.fo -pdf file.pdf
> it can do the first step in the old chain: .xml -> .fo as well (given some
> xslt style sheet):
>   fop -xml file.xml -xsl style sheet.xsl -pdf file.pdf
> but I have never used that: because I rely on
>   xincludes in my xslt - if I remember right - and fop does not know them).
>
>
> Anyway, my scheme file is about 1/4th of the size of the xslt file, and
> much more manageable, in that I can use any scheme functions that I like
> therein (rather than xslt). - And I guess that is some progress /
> success!! (I have heard other criticism of xslt: that functions are
> not composable, e.g.)
>
> Anyway, my scheme / fop tool chain works fine now - BUT: I use
> guile-Scheme, not gauche (even though in general I prefer gauche over
> guile).
>
> One (minor) reason:
> -------------------
>
> I rely on apply-templates
>
> (as originally defined in
> https://okmij.org/ftp/Scheme/xml.html
> https://okmij.org/ftp/Scheme/xml.html#SXSLT-examples
> and from there:
> https://okmij.org/ftp/Scheme/apply-templates.scm)
>
> And Guile makes that easy to use: it is already included in
> sxml/apply-templates.scm, thus available with
>
>   (use-modules
>    (sxml apply-templates)
>   )
>
>
> That is a no-brainer: this apply-templates.scm file is relatively
> short, and I can just include it by hand.
> (But it would be useful, if it was included in Gauche, too)!
>
> The other, more serious reason, why I rely on Guile for now:
> ------------------------------------------------------------
>
> I rely heavily on sxml-match:
>
> https://www.gnu.org/software/guile/manual/html_node/sxml_002dmatch.html
>
>   (use-modules
>    (sxml match)
>   )
>
>
> sxml/match.scm in guile's source code, which is only a small wrapper /
> compatibility layer to include PLT scheme's sxml-match.ss.
>
>
>
> guile's sxml/match.scm
> -----
> ;;; -*- mode: scheme; coding: utf-8; -*-
> ;;;
> ;;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
> ;;;
> ;;; This library is free software; you can redistribute it and/or modify it
> ;;; under the terms of the GNU Lesser General Public License as published
> by
> ;;; the Free Software Foundation; either version 3 of the License, or (at
> ;;; your option) any later version.
> ;;;
> ;;; 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.
> ;;;
> ;;; You should have received a copy of the GNU Lesser General Public
> License
> ;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
>
> (define-module (sxml match)
>   #:export (sxml-match
>             sxml-match-let
>             sxml-match-let*)
>   #:use-module (srfi srfi-1)
>   #:use-module (srfi srfi-11)
>   #:use-module (ice-9 control))
>
>
> ;;; Commentary:
> ;;;
> ;;; This module provides an SXML pattern matcher, written by Jim Bender.
> This
> ;;; allows application code to match on SXML nodes and attributes without
> having
> ;;; to deal with the details of s-expression matching, without worrying
> about
> ;;; the order of attributes, etc.
> ;;;
> ;;; It is fully documented in the Guile Reference Manual.
> ;;;
> ;;; Code:
>
>
>
> ;;;
> ;;; PLT compatibility layer.
> ;;;
>
> (define-syntax-rule (syntax-object->datum stx)
>   (syntax->datum stx))
>
> (define-syntax-rule (void)
>   *unspecified*)
>
> (define (raise-syntax-error x msg obj sub)
>   (throw 'sxml-match-error x msg obj sub))
>
> (define-syntax module
>   (syntax-rules (provide require)
>     ((_ name lang (provide p_ ...) (require r_ ...)
>         body ...)
>      (begin body ...))))
>
>
> ;;;
> ;;; Include upstream source file.
> ;;;
>
> ;; This file was taken from
> ;; <http://planet.plt-scheme.org/package-source/jim/sxml-match.plt/1/1/>
> on
> ;; 2010-05-24.  It was written by Jim Bender <[email protected]> and
> released
> ;; under the MIT/X11 license
> ;; <http://www.gnu.org/licenses/license-list.html#X11License>.
> ;;
> ;; Modified the `sxml-match1' macro to allow multiple-value returns
> (upstream
> ;; was notified.)
>
> (include-from-path "sxml/sxml-match.ss")
>
> ;;; match.scm ends here
> --
>
>
>
> PLT's sxml/sxml-match.ss is the real work horse (much longer,
> and therefore not shown here).
>
>
> Just including these same match.scm and sxml-match.ss files
> in gauche, fails for me, however. - And it is a little beyond my current
> Gauche
> abilities, to understand how this compatibility macro layer has to be
> modified for Gauche [?]
>
> Maybe (sxml-apply-templates and) sxml-match could be included in
> future versions of Gauche ?
>
> Thanks in advance.
>   -A
>
>
>
>
>
>
>
> _______________________________________________
> Gauche-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/gauche-devel
>

_______________________________________________
Gauche-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gauche-devel