__current-print-convert-hook__ might be your friend though I think it would have to recognize the pattern (make-mset #(....))
On Jun 29, 2011, at 6:54 AM, Maurizio Giordano wrote: > Hi Carl, Matthias and Eli, > > first of all I want to thank you for your help. > You are very skilled schemers ... compared to me! > I left lisp in 1995 (my thesis work) an now I restarted > with racket scheme (it's never too late!). > > Anyway I followed Carl's 1st solution: > > 1) put a #reader directive before the (example) code in question > > It has been easier for me to define a new reader in a module and > to load the reader extensions with the #reader directive. > > My solution was the following code: > > @examples[ > #reader"msetreader.rkt" ; my new reader > (require hocl) ; my module implementing the new language > (make-mset #(1 2 3 4)) > (define t2 < 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 >) > t2 > ] > > and it works. The web page output is: > >> (require hocl) >> (make-mset #(1 2 3 4)) > <1, 2, 3, 4> >> (define t2 (make-mset (vector 1 2 3 4 5 6 7 8 9 10 11)) >> t2 > <1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11> > > In fact, "(make-mset (vector ...))" is the macro expansion > generated by my reader when parsing <...> syntax. > Nevertheless, now the <...> forms are correctly read, by I don't want > the "macro-expansion" result be printed in the web page... Do you have > any suggestions? > > About Carl's 2nd solution: > > 2) (set the new) reader for the entire Scribble document > by changing #lang line > > I am sure this solution will also work. To do that I have > to change my module in such a way it defines a new language > implementation. > I will do that in a future... if my new (chemical) language > project will go on. > > About Carl's 3rd solution: > > 3) build the example code at runtime by reading from a string > > This solution is not clear to me. > > If you want to know more about the chemical language implementation > in scheme, I will be glad give you more details and documentation. > > Thank you, > > Maurizio Giordano > > > On Mon, 2011-06-27 at 15:37 -0400, Matthias Felleisen wrote: >> What Carl means is something like this: >> >> @;% >> @(begin >> #reader scribble/comment-reader >> (schemeblock >> ;; Int -> Int >> ;; increment the argument by 1 >> (define (plus1 x) (+ x 1)) >> )) >> @;% >> >> If I don't set the sribble/comment-reader the ;-line comments disappear. >> >> -- Matthias >> >> >> >> >> On Jun 27, 2011, at 3:32 PM, Carl Eastlund wrote: >> >>> Maurizio, >>> >>> Modules, including Scribble documents, are read in their entirety >>> before any compilation or evaluation is performed. The read error you >>> have seen happens long before your mymodule language gets involved. >>> There are a few different ways to fix the example. First, you could >>> put a #reader directive before the code in question, so your <...> >>> syntax would be used there. Second, you could use your <...> reader >>> for the entire Scribble document by changing your #lang line. This >>> probably requires a new language implementation similar to #lang s-exp >>> that specifies the reader but allows you to specify any language >>> bindings, in this case scribble/manual. Third, you could build the >>> example code at runtime by reading from a string. >>> >>> Carl Eastlund >>> >>> On Mon, Jun 27, 2011 at 12:17 PM, maurizio.giorda >>> <[email protected]> wrote: >>>> Hi everyone, >>>> >>>> I have developed a racket module that implements a new >>>> language. In this module I have readtable re-definition like this: >>>> >>>> ------------mymodule.rkt--------------------- >>>> (module mymodule >>>> (require racket/base) >>>> ... >>>> ; new readtable with extensions to support the reading of a new >>>> ; data structure: "mset" is a tuple of elements, like < 1, 2, 3 > >>>> (define mset-readtable >>>> (make-readtable #f #\< 'terminating-macro parse-open-mset )) >>>> >>>> ; change the reader to support my new data structure "mset" >>>> (current-readtable mset-readtable) >>>> ... >>>> ) >>>> ---------------------------------------------------- >>>> >>>> Now I am trying to write documentation for this module with scribble. >>>> When I use the @interaction in the followign way: >>>> >>>> ------------mymodule.scrbl--------------------- >>>> #lang scribble/manual >>>> @(require scribble/eval) >>>> ... >>>> @interaction[ >>>> (require mymodule) >>>> (make-mset #(1 2 3 4)) >>>> (define t2 < 1, 2, 3, 4 >) >>>> ] >>>> ... >>>> ------------------------------------------------------- >>>> >>>> I got this in the produced documetation web page: >>>> -------------------------------------------------------- >>>>> (require mymodule) >>>>> (make-mset #(1 2 3 4)) >>>> <1, 2, 3, 4> >>>>> (define t2 < 1,2,3,4 >) >>>> eval:3:0: define: bad syntax (multiple expressions after >>>> identifier) in: (define t2 < 1 (unquote 2) (unquote 3) >>>> (unquote 4) >) >>>> -------------------------------------------------------- >>>> >>>> "make-mset" is my data structure constructor function, and it works >>>> (you see the printout on the 3rd line), >>>> but the same constructor should be called by the reader when >>>> processing the "< 1, 2, 3, 4 >" input. >>>> So my conclusion is that, for some reasons, the scribble >>>> reader have not set my readtable extensions. >>>> Does anyone know what is wrong? >>>> >>>> Maurizio Giordano >>>> >>>> PS: I also tried using @eval[...] >>>> with a sandbox evalutator defined by me with >>>> the "required" module loaded into it... but it gives >>>> me the same result. >>> >>> _________________________________________________ >>> For list-related administrative tasks: >>> http://lists.racket-lang.org/listinfo/users >> > > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

