Thanks...


On Apr 22, 2011, at 05:08 , David Lichteblau wrote:

Quoting Marco Antoniotti (marcoxa@cs.nyu.edu):

On Apr 21, 2011, at 16:54 , David Lichteblau wrote:

Quoting Marco Antoniotti (marcoxa@cs.nyu.edu):
Always on LWM.  I assume this has to do with UNICODE or not support, but the example in the docs is misleading.


CL-USER 37 > (defparameter *source* (cxml:make-source "<example>text</example>"))

That example should work in any implementation with Unicode support.

Backtrace?
Value of *features*?



Here they are.  I suspect that LWM does not support UNICODE.

It supports Unicode, but LispWorks has slighly weird subtypes of
CHARACTER, and sometimes code insists on one subtype over the other.

In this case, I'm afraid the argument to MAKE-SOURCE needs to be a
string made up of LW:SIMPLE-CHAR rather than CHARACTER.

Things to try:

;; returns T on other Lisps, but might go wrong on LispWorks:
(typep "<example>text</example>" '(vector runes:rune))

NIL




;; possible workaroud
(cxml:make-source (coerce "<example>text</example>"
                         '(simple-array runes:rune)))

CL-USER 14 > (cxml:make-source (coerce "<example>text</example>"
                                       '(simple-array runes:rune)))

Error: Cannot coerce "<example>text</example>" to type (SIMPLE-ARRAY RUNES:RUNE).
  1 (abort) Return to level 0.
  2 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

CL-USER 15 : 1 > :b
Call to ERROR
Call to COERCE
Call to EVAL
Call to CAPI::CAPI-TOP-LEVEL-FUNCTION
Call to CAPI::INTERACTIVE-PANE-TOP-LOOP
Call to MP::PROCESS-SG-FUNCTION

CL-USER 16 : 1 > 



Sorry about that, but I gave up on trying to fix all of these little
issues related to lw:simple-char a long time ago.  We have to assume
lw:simple-char at some point (for a presumably good reason which I can't
recall any more), and then that assumption trickles down.

So: "the example works in any implementation with Unicode support [IF
the object behind the printed representation of the string has the right
shape]".  Not ideal, I admit that.

Ok.

What about adding something along the lines of the following in "closure-common/characters.lisp"?

(eval-when (:load-toplevel :compile-toplevel :execute)
    (unless (eq *default-character-element-type* 'lw:simple-char)
      (cerror "Set the default sting character element type to LW:SIMPLE-CHAR."
              "The current default character element type is ~A." *default-character-element-type*)
      (set-default-character-element-type 'lw:simple-char))))

Going over the LW mailing list archives it appears that the above would work, provided that the set-default-character-element-type call is the only one in the image.

I am also bugging the LW folks on this.  

Cheers
--
Marco



--
Marco Antoniotti