Ah, that could work nicely since I may eventually want to be inserting some other stuff in the editor for printing, anyway. (Currently I'm inserting a simple rubric -- which I generate using web-server/templates -- at the top, but it will be nice to have a checker that inserts some comments at the site where they're relevant, too.) So I may indeed switch over to that method.
Thanks again! Best, jmj -- Sent from my Android phone with K-9 Mail. Robby Findler <ro...@eecs.northwestern.edu> wrote: >It looks like unpack-submission creates only text% objects, not >text:racket% objects. But I think you can iterate over the snips in >teh editor (find-first-snip method on the text% and next on teh snip%) >and use the copy method of the snip to create new ones to insert into >a text:racket% object. Then if you just call freeze-colorer, you'll >get the fixed width font (without explicitly setting the style) and >you'll get the syntax highlighting. > >Robby > >On Fri, Dec 7, 2012 at 3:14 PM, Jordan Johnson <j...@fellowhuman.com> >wrote: >> Hi Robby, Matthew, >> >> Thanks for the replies. Robby, that was exactly what I needed, since >I hadn't thought to look at the text% hierarchy recently for style >changes. (Even knowing that, it took a while to work it out; owing to >my not having a full understanding of what triggers a reload of files >the checker depends on, I didn't get the version below to work until I >manually restarted the server. But it's all good now. Also of >interest: I learned that even if I set the style correctly as below, if >I subsequently set the font to fixed-width in the dc as I'd erroneously >been doing, the text reverted to the non-fixed sans serif. That was >surprising!) >> >> Here is my corrected, working code: >> >> #lang s-exp handin-server/checker >> >> (require racket/gui/base racket/class ;; for PDF rendering >> racket/draw) >> >> >> (define fixed-width >> (send (new style-delta%) set-delta 'change-family 'modern)) >> >> ;; make-pdf : String text% -> any >> ;; Generates a PDF of the given Definitions window, saved in >> ;; /tmp/test-pdf-writing.pdf: >> (define (make-pdf file defs) >> (define dc (new pdf-dc% >> [interactive #f] >> [output "/tmp/test-pdf-writing.pdf"])) >> (send defs select-all) >> (send defs change-style fixed-width) >> (send dc start-doc "") >> (send defs print-to-dc dc -1) >> (send dc end-doc)) >> >> (check: :language '(special beginner) >> :textualize? #t >> (define user-string >> (if (list? users) (apply string-append users) users)) >> (define-values (defs ints) (unpack-submission submission)) >> (make-pdf user-string defs)) >> >> ;; end >> >> I suppose there are two remaining questions: does freeze-colorer need >to be called even if the text% in question is not displayed, and where >is the latest it can be called in the sequence above? >> >> Best, >> Jordan >> >> On Dec 7, 2012, at 4:21 AM, Robby Findler ><ro...@eecs.northwestern.edu> wrote: >> >>> Code would help understand, but setting the font in the dc isn't the >>> way to go: you want the styles to be right (which is what >racket:text% >>> does). And you'd need to call freeze-colorer to wait for the >coloring >>> to finish, too, but that would affect only the colors, not the >fonts. >>> >>> Robby >>> >>> On Fri, Dec 7, 2012 at 5:56 AM, Matthew Flatt <mfl...@cs.utah.edu> >wrote: >>>> I'm not sure. Can you provide a small program that illustrates the >problem? >>>> >>>> At Fri, 7 Dec 2012 00:26:47 -0800, Jordan Johnson wrote: >>>>> Hi all, >>>>> >>>>> I was delighted to find awhile back that it's pretty easy to >obtain a PDF of >>>>> syntax-colored code that looks more or less like what I see in my >DrRacket >>>>> window, by drawing the text% to a PDF-dc%. I am now using that in >conjunction >>>>> with the handin server to grade and mark up student work on my >iPad (annotating >>>>> the PDFs via GoodReader and emailing them straight back to >students), and it >>>>> works beautifully. (I am happy to share the code for this with >anyone who is >>>>> interested; email me if so.) >>>>> >>>>> One glitch: I can't get Racket to give me a fixed-width font in >the PDF. I >>>>> have tried inserting >>>>> (send dc set-font (make-object font% 12 'modern)) >>>>> where dc is my pdf-dc%, and alternately >>>>> (send dc set-font (send the-font-list find-or-create-font 12 >'modern 'normal >>>>> 'normal)) >>>>> but in both cases the generated PDF is still in a sans-serif >non-fixed-width >>>>> font. It does not seem to matter whether I put the above lines >before or after >>>>> the >>>>> (send dc start-doc "") >>>>> that begins the drawing process. >>>>> >>>>> Interestingly, in a test I ran just now, if I generate a PDF by >directly >>>>> creating a racket:text% object, putting some Racket program text >in it, and >>>>> calling the same make-PDF function I use in the handin-server >(calling set-font >>>>> using the-font-list, as described above), it gives me fixed-width >text as I'd >>>>> expect. That's regardless of whether I set the font before or >after the >>>>> start-doc command. (racket:text% is just a guess at the text% >subclass that the >>>>> handin server is providing, based on it being a representation of >the >>>>> Definitions window.) >>>>> >>>>> Any ideas how to solve this, or further tests I could run to >determine the >>>>> cause? >>>>> >>>>> Thanks for your consideration, >>>>> Jordan >>>>> ____________________ >>>>> Racket Users list: >>>>> http://lists.racket-lang.org/users >>>> ____________________ >>>> Racket Users list: >>>> http://lists.racket-lang.org/users
____________________ Racket Users list: http://lists.racket-lang.org/users